Merge remote-tracking branch 'singu/master'

This commit is contained in:
Aleric Inglewood
2013-11-15 18:00:49 +01:00
106 changed files with 4827 additions and 1728 deletions

View File

@@ -8,7 +8,17 @@
<string>settings_sh.xml</string>
<string>settings_rlv.xml</string>
</array>
<key>SinguOffsetScrollKeys</key>
<map>
<key>Comment</key>
<string>Enable keys to modify camera and focus offsets</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>1</integer>
</map>
<key>PhoenixIMAnnounceStealFocus</key>
<map>
<key>Comment</key>
@@ -846,6 +856,17 @@ Found in Advanced->Rendering->Info Displays</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>LiruUseContextMenus</key>
<map>
<key>Comment</key>
<string>Use context menus instead of the default pie menus we all know and love.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<boolean>0</boolean>
</map>
<key>SLBShowFPS</key>
<map>
<key>Comment</key>
@@ -914,6 +935,17 @@ Found in Advanced->Rendering->Info Displays</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>FSSynchronizeTextureMaps</key>
<map>
<key>Comment</key>
<string>Align texture maps (texture, bumpy, shiny) across the faces of a prim</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<boolean>1</boolean>
</map>
<key>InstantMessageLogPathAnyAccount</key>
<map>
<key>Comment</key>
@@ -5681,6 +5713,39 @@ This should be as low as possible, but too low may break functionality</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>DefaultBlankNormalTexture</key>
<map>
<key>Comment</key>
<string>Texture used as 'Blank' in texture picker for normal map. (UUID texture reference)</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>String</string>
<key>Value</key>
<string>5b53359e-59dd-d8a2-04c3-9e65134da47a</string>
</map>
<key>DefaultObjectNormalTexture</key>
<map>
<key>Comment</key>
<string>Texture used as 'Default' in texture picker for normal map. (UUID texture reference)</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>String</string>
<key>Value</key>
<string>85f28839-7a1c-b4e3-d71d-967792970a7b</string>
</map>
<key>DefaultObjectSpecularTexture</key>
<map>
<key>Comment</key>
<string>Texture used as 'Default' in texture picker for specular map. (UUID texture reference)</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>String</string>
<key>Value</key>
<string>87e0e8f7-8729-1ea8-cfc9-8915773009db</string>
</map>
<key>DefaultObjectTexture</key>
<map>
<key>Comment</key>
@@ -17713,7 +17778,7 @@ This should be as low as possible, but too low may break functionality</string>
<key>Type</key>
<string>S32</string>
<key>Value</key>
<integer>1</integer>
<integer>0</integer>
</map>
</map>
</llsd>

View File

@@ -277,7 +277,7 @@
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>1</integer>
<integer>0</integer>
</map>
<key>AscentShowOthersTagColor</key>
<map>

View File

@@ -184,28 +184,6 @@
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>SHPackDeferredNormals</key>
<map>
<key>Comment</key>
<string>Pack deferred normals into two components.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>SHPrecisionDeferredNormals</key>
<map>
<key>Comment</key>
<string>Enable usage of RGB10A2 for the deferred normalMap format. Reduces normalmapping artifacts.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>SHOcclusionFudge</key>
<map>
@@ -240,5 +218,16 @@
<key>Value</key>
<real>0.09</real>
</map>
<key>SHAlwaysSoftenShadows</key>
<map>
<key>Comment</key>
<string>Enable optional blur pass on shadows.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<real>1</real>
</map>
</map>
</llsd>

View File

@@ -60,6 +60,7 @@ uniform sampler2DShadow shadowMap0;
uniform sampler2DShadow shadowMap1;
uniform sampler2DShadow shadowMap2;
uniform sampler2DShadow shadowMap3;
//uniform sampler2D noiseMap; //Random dither.
uniform vec2 shadow_res;
@@ -73,6 +74,10 @@ uniform float shadow_bias;
uniform sampler2D diffuseMap;
#endif
#ifdef IS_AVATAR_SKIN
uniform float minimum_alpha;
#endif
VARYING vec3 vary_fragcoord;
VARYING vec3 vary_position;
VARYING vec2 vary_texcoord0;
@@ -198,14 +203,16 @@ vec3 calcPointLightOrSpotLight(vec3 light_col, vec3 diffuse, vec3 v, vec3 n, vec
}
#if HAS_SHADOW
float pcfShadow(sampler2DShadow shadowMap, vec4 stc)
float pcfShadow(sampler2DShadow shadowMap, vec4 stc, vec2 pos_screen)
{
stc.xyz /= stc.w;
stc.z += shadow_bias;
stc.x = floor(stc.x*shadow_res.x + fract(stc.y*shadow_res.y*12345))/shadow_res.x; // add some chaotic jitter to X sample pos according to Y to disguise the snapping going on here
//stc.x += (((texture2D(noiseMap, pos_screen/128.0).x)-.5)/shadow_res.x); //Random dither.
stc.x = floor(stc.x*shadow_res.x + fract(pos_screen.y*0.666666666))/shadow_res.x; // add some chaotic jitter to X sample pos according to Y to disguise the snapping going on here
float cs = shadow2D(shadowMap, stc.xyz).x;
float shadow = cs;
shadow += shadow2D(shadowMap, stc.xyz+vec3(2.0/shadow_res.x, 1.5/shadow_res.y, 0.0)).x;
@@ -451,14 +458,40 @@ vec3 fullbrightScaleSoftClip(vec3 light)
void main()
{
vec2 frag = vary_fragcoord.xy/vary_fragcoord.z*0.5+0.5;
frag *= screen_res;
#ifdef USE_INDEXED_TEX
vec4 diff = diffuseLookup(vary_texcoord0.xy);
#else
vec4 diff = texture2D(diffuseMap,vary_texcoord0.xy);
#endif
#ifdef USE_VERTEX_COLOR
float final_alpha = diff.a * vertex_color.a;
diff.rgb *= vertex_color.rgb;
#else
float final_alpha = diff.a;
#endif
#ifdef IS_AVATAR_SKIN
if(final_alpha < minimum_alpha)
{
discard;
}
#endif
#ifdef FOR_IMPOSTOR
// Insure we don't pollute depth with invis pixels in impostor rendering
//
if (final_alpha < 0.01)
{
discard;
}
#endif
vec4 pos = vec4(vary_position, 1.0);
float shadow = 1.0;
#if HAS_SHADOW
vec2 frag = vary_fragcoord.xy/vary_fragcoord.z*0.5+0.5;
frag *= screen_res;
vec4 spos = pos;
if (spos.z > -shadow_clip.w)
@@ -478,7 +511,7 @@ void main()
float w = 1.0;
w -= max(spos.z-far_split.z, 0.0)/transition_domain.z;
shadow += pcfShadow(shadowMap3, lpos)*w;
shadow += pcfShadow(shadowMap3, lpos,frag.xy)*w;
weight += w;
shadow += max((pos.z+shadow_clip.z)/(shadow_clip.z-shadow_clip.w)*2.0-1.0, 0.0);
}
@@ -490,7 +523,7 @@ void main()
float w = 1.0;
w -= max(spos.z-far_split.y, 0.0)/transition_domain.y;
w -= max(near_split.z-spos.z, 0.0)/transition_domain.z;
shadow += pcfShadow(shadowMap2, lpos)*w;
shadow += pcfShadow(shadowMap2, lpos,frag.xy)*w;
weight += w;
}
@@ -501,7 +534,7 @@ void main()
float w = 1.0;
w -= max(spos.z-far_split.x, 0.0)/transition_domain.x;
w -= max(near_split.y-spos.z, 0.0)/transition_domain.y;
shadow += pcfShadow(shadowMap1, lpos)*w;
shadow += pcfShadow(shadowMap1, lpos,frag.xy)*w;
weight += w;
}
@@ -512,7 +545,7 @@ void main()
float w = 1.0;
w -= max(near_split.x-spos.z, 0.0)/transition_domain.x;
shadow += pcfShadow(shadowMap0, lpos)*w;
shadow += pcfShadow(shadowMap0, lpos,frag.xy)*w;
weight += w;
}
@@ -525,38 +558,10 @@ void main()
}
#endif
#ifdef USE_INDEXED_TEX
vec4 diff = diffuseLookup(vary_texcoord0.xy);
#else
vec4 diff = texture2D(diffuseMap,vary_texcoord0.xy);
#endif
#ifdef FOR_IMPOSTOR
vec4 color;
color.rgb = diff.rgb;
#ifdef USE_VERTEX_COLOR
float final_alpha = diff.a * vertex_color.a;
diff.rgb *= vertex_color.rgb;
vec4 color = vec4(diff.rgb,final_alpha);
#else
float final_alpha = diff.a;
#endif
// Insure we don't pollute depth with invis pixels in impostor rendering
//
if (final_alpha < 0.01)
{
discard;
}
#else
#ifdef USE_VERTEX_COLOR
float final_alpha = diff.a * vertex_color.a;
diff.rgb *= vertex_color.rgb;
#else
float final_alpha = diff.a;
#endif
vec4 gamma_diff = diff;
diff.rgb = srgb_to_linear(diff.rgb);
@@ -576,10 +581,7 @@ void main()
final_da = min(final_da, 1.0f);
final_da = pow(final_da, 1.0/1.3);
vec4 color = vec4(0,0,0,0);
color.rgb = atmosAmbient(color.rgb);
color.a = final_alpha;
vec4 color = vec4(getAmblitColor(),final_alpha);
float ambient = abs(da);
ambient *= 0.5;

View File

@@ -41,10 +41,6 @@ void main()
vec4 p = projection_matrix * vec4(pos, 1.0);
#if !DEPTH_CLAMP
p.z = max(p.z, -p.w+0.01);
gl_Position = p;
#else
gl_Position = p;
#endif
}

View File

@@ -169,10 +169,12 @@ void main()
#ifndef HAS_ALPHA_MASK
color.a = fogged.a;
#endif
#elif !HAS_ALPHA_MASK
#else
#ifndef HAS_ALPHA_MASK
color.a = final_alpha;
#endif
#if HAS_ALPHA_MASK
#endif
#ifdef HAS_ALPHA_MASK
color.a = 0.0;
#endif

View File

@@ -82,20 +82,24 @@ uniform sampler2DShadow shadowMap0;
uniform sampler2DShadow shadowMap1;
uniform sampler2DShadow shadowMap2;
uniform sampler2DShadow shadowMap3;
//uniform sampler2D noiseMap; //Random dither.
VARYING vec2 vary_fragcoord;
uniform mat4 shadow_matrix[6];
uniform vec4 shadow_clip;
uniform vec2 shadow_res;
uniform float shadow_bias;
float pcfShadow(sampler2DShadow shadowMap, vec4 stc)
float pcfShadow(sampler2DShadow shadowMap, vec4 stc, vec2 pos_screen)
{
stc.xyz /= stc.w;
stc.z += shadow_bias;
stc.x = floor(stc.x*shadow_res.x + fract(stc.y*shadow_res.y*12345))/shadow_res.x; // add some chaotic jitter to X sample pos according to Y to disguise the snapping going on here
//stc.x += (((texture2D(noiseMap, pos_screen/128.0).x)-.5)/shadow_res.x); //Random dither.
stc.x = floor(stc.x*shadow_res.x + fract(pos_screen.y*0.666666666))/shadow_res.x; // add some chaotic jitter to X sample pos according to Y to disguise the snapping going on here
float cs = shadow2D(shadowMap, stc.xyz).x;
float shadow = cs;
shadow += shadow2D(shadowMap, stc.xyz+vec3(2.0/shadow_res.x, 1.5/shadow_res.y, 0.0)).x;
@@ -133,7 +137,6 @@ uniform mat3 env_mat;
uniform mat3 ssao_effect_mat;
uniform vec3 sun_dir;
VARYING vec2 vary_fragcoord;
VARYING vec3 vary_position;
@@ -598,6 +601,7 @@ void main()
vec3 pos = vary_position;
#if HAS_SUN_SHADOW
vec2 frag = vary_fragcoord.xy;
float shadow = 0.0;
vec4 spos = vec4(pos,1.0);
@@ -617,7 +621,7 @@ void main()
float w = 1.0;
w -= max(spos.z-far_split.z, 0.0)/transition_domain.z;
shadow += pcfShadow(shadowMap3, lpos)*w;
shadow += pcfShadow(shadowMap3, lpos,frag.xy)*w;
weight += w;
shadow += max((pos.z+shadow_clip.z)/(shadow_clip.z-shadow_clip.w)*2.0-1.0, 0.0);
}
@@ -629,7 +633,7 @@ void main()
float w = 1.0;
w -= max(spos.z-far_split.y, 0.0)/transition_domain.y;
w -= max(near_split.z-spos.z, 0.0)/transition_domain.z;
shadow += pcfShadow(shadowMap2, lpos)*w;
shadow += pcfShadow(shadowMap2, lpos,frag.xy)*w;
weight += w;
}
@@ -640,7 +644,7 @@ void main()
float w = 1.0;
w -= max(spos.z-far_split.x, 0.0)/transition_domain.x;
w -= max(near_split.y-spos.z, 0.0)/transition_domain.y;
shadow += pcfShadow(shadowMap1, lpos)*w;
shadow += pcfShadow(shadowMap1, lpos,frag.xy)*w;
weight += w;
}
@@ -651,7 +655,7 @@ void main()
float w = 1.0;
w -= max(near_split.x-spos.z, 0.0)/transition_domain.x;
shadow += pcfShadow(shadowMap0, lpos)*w;
shadow += pcfShadow(shadowMap0, lpos,frag.xy)*w;
weight += w;
}

View File

@@ -44,6 +44,10 @@ uniform mat4 modelview_matrix;
#endif
VARYING vec3 vary_position;
#if HAS_SUN_SHADOW
VARYING vec2 vary_fragcoord;
uniform vec2 screen_res;
#endif
#endif
@@ -138,7 +142,11 @@ vary_normal = n;
#if (DIFFUSE_ALPHA_MODE == DIFFUSE_ALPHA_MODE_BLEND)
#if !HAS_SKIN
vary_position = (modelview_matrix*vec4(position.xyz, 1.0)).xyz;
vec3 pos = (modelview_matrix*vec4(position.xyz, 1.0)).xyz;
vary_position = pos;
#endif
#if HAS_SUN_SHADOW
vary_fragcoord = (pos.xy*0.5+0.5)*screen_res;
#endif
#endif
}

View File

@@ -391,24 +391,23 @@ void main()
float envIntensity = norm.z;
norm.xyz = decode_normal(norm.xy); // unpack norm
float da = dot(norm.xyz, sun_dir.xyz);
float final_da = max(0.0,da);
final_da = min(final_da, 1.0f);
final_da = pow(final_da, 1.0/1.3);
vec4 diffuse = texture2DRect(diffuseRect, tc);
//convert to gamma space
diffuse.rgb = linear_to_srgb(diffuse.rgb);
vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy);
vec3 col;
float bloom = 0.0;
{
vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy);
bloom = spec.r*norm.w;
if (norm.w < 0.5)
{
float da = dot(norm.xyz, sun_dir.xyz);
float final_da = max(0.0,da);
final_da = min(final_da, 1.0f);
final_da = pow(final_da, 1.0/1.3);
calcAtmospherics(pos.xyz, 1.0);
col = atmosAmbient(vec3(0));

View File

@@ -0,0 +1,42 @@
/**
* @file highlightV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2007, Linden Research, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
uniform mat4 texture_matrix0;
uniform mat4 modelview_projection_matrix;
ATTRIBUTE vec3 position;
ATTRIBUTE vec2 texcoord0;
ATTRIBUTE vec2 texcoord1;
ATTRIBUTE vec2 texcoord2;
VARYING vec2 vary_texcoord0;
void main()
{
//transform vertex
gl_Position = modelview_projection_matrix * vec4(position.xyz, 1.0);
vary_texcoord0 = (texture_matrix0 * vec4(texcoord1,0,1)).xy;
}

View File

@@ -0,0 +1,42 @@
/**
* @file highlightV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2007, Linden Research, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
uniform mat4 texture_matrix0;
uniform mat4 modelview_projection_matrix;
ATTRIBUTE vec3 position;
ATTRIBUTE vec2 texcoord0;
ATTRIBUTE vec2 texcoord1;
ATTRIBUTE vec2 texcoord2;
VARYING vec2 vary_texcoord0;
void main()
{
//transform vertex
gl_Position = modelview_projection_matrix * vec4(position.xyz, 1.0);
vary_texcoord0 = (texture_matrix0 * vec4(texcoord2,0,1)).xy;
}

View File

@@ -400,12 +400,6 @@ void main()
float envIntensity = norm.z;
norm.xyz = decode_normal(norm.xy); // unpack norm
float da = max(dot(norm.xyz, sun_dir.xyz), 0.0);
float light_gamma = 1.0/1.3;
da = pow(da, light_gamma);
vec4 diffuse = texture2DRect(diffuseRect, tc);
//convert to gamma space
@@ -419,6 +413,12 @@ void main()
if (norm.w < 0.5)
{
float da = max(dot(norm.xyz, sun_dir.xyz), 0.0);
float light_gamma = 1.0/1.3;
da = pow(da, light_gamma);
vec2 scol_ambocc = texture2DRect(lightMap, vary_fragcoord.xy).rg;
scol_ambocc = pow(scol_ambocc, vec2(light_gamma));
@@ -466,8 +466,8 @@ void main()
{ //add environmentmap
vec3 env_vec = env_mat * refnormpersp;
vec3 refcol = textureCube(environmentMap, env_vec).rgb*scol_ambocc.r;
bloom = (luminance(refcol) - .45)*.25;
vec3 refcol = textureCube(environmentMap, env_vec).rgb; //Perhaps mix with a cubemap without sun, in the future.
bloom = (luminance(refcol) - .45)*.25*scol_ambocc.r;
col = mix(col.rgb, refcol,
envIntensity);

View File

@@ -41,7 +41,7 @@ uniform sampler2DShadow shadowMap2;
uniform sampler2DShadow shadowMap3;
uniform sampler2DShadow shadowMap4;
uniform sampler2DShadow shadowMap5;
//uniform sampler2D noiseMap; //Random dither.
// Inputs
uniform mat4 shadow_matrix[6];
@@ -100,15 +100,17 @@ float pcfShadow(sampler2DShadow shadowMap, vec4 stc, float scl, vec2 pos_screen)
stc.xyz /= stc.w;
stc.z += shadow_bias;
stc.x = floor(stc.x*shadow_res.x + fract(pos_screen.y*0.666666666))/shadow_res.x; // add some jitter to X sample pos according to Y to disguise the snapping going on here
//stc.x += (((texture2D(noiseMap, pos_screen/128.0).x)-.5)/shadow_res.x); //Random dither.
stc.x = floor(stc.x*shadow_res.x + fract(pos_screen.y*0.666666666))/shadow_res.x; // add some chaotic jitter to X sample pos according to Y to disguise the snapping going on here
float cs = shadow2D(shadowMap, stc.xyz).x;
float shadow = cs;
shadow += shadow2D(shadowMap, stc.xyz+vec3(2.0/shadow_res.x, 1.5/shadow_res.y, 0.0)).x;
shadow += shadow2D(shadowMap, stc.xyz+vec3(1.0/shadow_res.x, -1.5/shadow_res.y, 0.0)).x;
shadow += shadow2D(shadowMap, stc.xyz+vec3(-2.0/shadow_res.x, 1.5/shadow_res.y, 0.0)).x;
shadow += shadow2D(shadowMap, stc.xyz+vec3(-1.0/shadow_res.x, -1.5/shadow_res.y, 0.0)).x;
shadow += shadow2D(shadowMap, stc.xyz+vec3(-1.0/shadow_res.x, 1.5/shadow_res.y, 0.0)).x;
shadow += shadow2D(shadowMap, stc.xyz+vec3(-2.0/shadow_res.x, -1.5/shadow_res.y, 0.0)).x;
return shadow*0.2;
@@ -118,6 +120,7 @@ float pcfSpotShadow(sampler2DShadow shadowMap, vec4 stc, float scl, vec2 pos_scr
{
stc.xyz /= stc.w;
stc.z += spot_shadow_bias*scl;
//stc.x += (((texture2D(noiseMap, pos_screen/128.0).x)-.5)/proj_shadow_res.x); //Random dither.
stc.x = floor(proj_shadow_res.x * stc.x + fract(pos_screen.y*0.666666666)) / proj_shadow_res.x; // snap
float cs = shadow2D(shadowMap, stc.xyz).x;

View File

@@ -156,7 +156,9 @@ float pcfShadow(sampler2DShadow shadowMap, vec4 stc, float scl, vec2 pos_screen)
stc.xyz /= stc.w;
stc.z += shadow_bias;
//stc.x += (((texture2D(noiseMap, pos_screen/128.0).x)-.5)/shadow_res.x); //Random dither.
stc.x = floor(stc.x*shadow_res.x + fract(pos_screen.y*0.666666666))/shadow_res.x;
float cs = shadow2D(shadowMap, stc.xyz).x;
float shadow = cs;
@@ -173,6 +175,7 @@ float pcfSpotShadow(sampler2DShadow shadowMap, vec4 stc, float scl, vec2 pos_scr
{
stc.xyz /= stc.w;
stc.z += spot_shadow_bias*scl;
//stc.x += (((texture2D(noiseMap, pos_screen/128.0).x)-.5)/proj_shadow_res.x); //Random dither.
stc.x = floor(proj_shadow_res.x * stc.x + fract(pos_screen.y*0.666666666)) / proj_shadow_res.x; // snap
float cs = shadow2D(shadowMap, stc.xyz).x;

View File

@@ -222,6 +222,7 @@ void LLPrefsAscentSys::refreshValues()
mEnableClassicClouds = gSavedSettings.getBOOL("SkyUseClassicClouds");
mSpeedRez = gSavedSettings.getBOOL("SpeedRez");
mSpeedRezInterval = gSavedSettings.getU32("SpeedRezInterval");
mUseContextMenus = gSavedSettings.getBOOL("LiruUseContextMenus");
mUseWebProfiles = gSavedSettings.getBOOL("UseWebProfiles");
mUseWebSearch = gSavedSettings.getBOOL("UseWebSearch");
@@ -377,6 +378,7 @@ void LLPrefsAscentSys::cancel()
gSavedSettings.setBOOL("SkyUseClassicClouds", mEnableClassicClouds);
gSavedSettings.setBOOL("SpeedRez", mSpeedRez);
gSavedSettings.setU32("SpeedRezInterval", mSpeedRezInterval);
gSavedSettings.setBOOL("LiruUseContextMenus", mUseContextMenus);
gSavedSettings.setBOOL("UseWebProfiles", mUseWebProfiles);
gSavedSettings.setBOOL("UseWebSearch", mUseWebSearch);

View File

@@ -73,6 +73,7 @@ private:
bool mEnableClassicClouds;
bool mSpeedRez;
U32 mSpeedRezInterval;
bool mUseContextMenus;
bool mUseWebProfiles;
bool mUseWebSearch;

View File

@@ -2075,7 +2075,8 @@ void LLAgentCamera::handleScrollWheel(S32 clicks)
{
if (MASK mask = gKeyboard->currentMask(true)) // Singu Note: Conveniently set view offsets while modifier keys are held during scroll
{
if (mask & MASK_CONTROL|MASK_SHIFT)
static const LLCachedControl<bool> enableCameraOffsetScroll("SinguOffsetScrollKeys");
if (mask & MASK_CONTROL|MASK_SHIFT && enableCameraOffsetScroll)
{
const F32 change(static_cast<F32>(clicks) * 0.1f);
if (mask & MASK_SHIFT)

View File

@@ -320,7 +320,7 @@ void LLDrawPoolAlpha::render(S32 pass)
gPipeline.enableLightsFullbright(LLColor4(1,1,1,1));
}
gGL.diffuseColor4f(1,0,0,1);
gGL.diffuseColor4f(0.9,0,0,0.4);
LLViewerFetchedTexture::sSmokeImagep->addTextureStats(1024.f*1024.f);
gGL.getTexUnit(0)->bind(LLViewerFetchedTexture::sSmokeImagep, TRUE) ;
@@ -598,6 +598,7 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask, S32 pass)
// If this alpha mesh has glow, then draw it a second time to add the destination-alpha (=glow). Interleaving these state-changing calls could be expensive, but glow must be drawn Z-sorted with alpha.
if (current_shader &&
draw_glow_for_this_partition &&
(!is_particle_or_hud_particle || params.mHasGlow) && //only do this second pass for batches that actually have glow
params.mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_EMISSIVE))
{
// install glow-accumulating blend mode

View File

@@ -37,8 +37,6 @@
#include "llviewershadermgr.h"
#include "llrender.h"
#define GE_FORCE_WORKAROUND LL_DARWIN
static LLGLSLShader* simple_shader = NULL;
static LLGLSLShader* fullbright_shader = NULL;
@@ -664,13 +662,6 @@ void LLDrawPoolFullbrightAlphaMask::beginPostDeferredPass(S32 pass)
else
{
// Work-around until we can figure out why the right shader causes
// the GeForce driver to go tango uniform on OS X 10.6.8 only
//
#if GE_FORCE_WORKAROUND
gObjectFullbrightAlphaMaskProgram.bind();
gObjectFullbrightAlphaMaskProgram.uniform1f(LLShaderMgr::TEXTURE_GAMMA, 2.2f);
#else
if (LLPipeline::sUnderWaterRender)
{
gDeferredFullbrightAlphaMaskWaterProgram.bind();
@@ -681,7 +672,6 @@ void LLDrawPoolFullbrightAlphaMask::beginPostDeferredPass(S32 pass)
gDeferredFullbrightAlphaMaskProgram.bind();
gDeferredFullbrightAlphaMaskProgram.uniform1f(LLShaderMgr::TEXTURE_GAMMA, 2.2f);
}
#endif
}
}
@@ -704,13 +694,6 @@ void LLDrawPoolFullbrightAlphaMask::endPostDeferredPass(S32 pass)
}
else
{
// Work-around until we can figure out why the right shader causes
// the GeForce driver to go tango uniform on OS X 10.6.8 only
//
#if GE_FORCE_WORKAROUND
gObjectFullbrightAlphaMaskProgram.unbind();
#else
if (LLPipeline::sUnderWaterRender)
{
gDeferredFullbrightAlphaMaskWaterProgram.unbind();
@@ -719,8 +702,6 @@ void LLDrawPoolFullbrightAlphaMask::endPostDeferredPass(S32 pass)
{
gDeferredFullbrightAlphaMaskProgram.unbind();
}
#endif
}
LLRenderPass::endRenderPass(pass);
}

View File

@@ -726,8 +726,10 @@ void LLFloaterModelPreview::draw()
}
}
/* Singu Note: Dummy views and what for?
childSetTextArg("prim_cost", "[PRIM_COST]", llformat("%d", mModelPreview->mResourceCost));
childSetTextArg("description_label", "[TEXTURES]", llformat("%d", mModelPreview->mTextureSet.size()));
*/
if (mModelPreview)
{
@@ -1155,7 +1157,7 @@ void LLFloaterModelPreview::initDecompControls()
mDecompParams[param[i].mName] = LLSD(param[i].mDefault.mBool);
//llinfos << "Type: boolean, Default: " << (param[i].mDefault.mBool ? "True" : "False") << llendl;
LLCheckBoxCtrl* check_box = getChild<LLCheckBoxCtrl>(name);
LLCheckBoxCtrl* check_box = findChild<LLCheckBoxCtrl>(name);
if (check_box)
{
check_box->setValue(param[i].mDefault.mBool);
@@ -3710,7 +3712,6 @@ void LLModelPreview::loadModelCallback(S32 lod)
mLoading = false;
if (mFMP)
{
mFMP->getChild<LLCheckBoxCtrl>("confirm_checkbox")->set(FALSE);
if (!mBaseModel.empty())
{
if (mFMP->getChild<LLUICtrl>("description_form")->getValue().asString().empty())
@@ -4193,7 +4194,9 @@ void LLModelPreview::updateStatusMessages()
}
}
/* Singu Note: Dummy views and what for?
mFMP->childSetTextArg("submeshes_info", "[SUBMESHES]", llformat("%d", total_submeshes[LLModel::LOD_HIGH]));
*/
std::string mesh_status_na = mFMP->getString("mesh_status_na");
@@ -5524,12 +5527,6 @@ void LLModelPreview::setPreviewLOD(S32 lod)
combo_box->setCurrentByIndex((NUM_LOD-1)-mPreviewLOD); // combo box list of lods is in reverse order
mFMP->childSetText("lod_file_" + lod_name[mPreviewLOD], mLODFile[mPreviewLOD]);
LLComboBox* combo_box2 = mFMP->getChild<LLComboBox>("preview_lod_combo2");
combo_box2->setCurrentByIndex((NUM_LOD-1)-mPreviewLOD); // combo box list of lods is in reverse order
LLComboBox* combo_box3 = mFMP->getChild<LLComboBox>("preview_lod_combo3");
combo_box3->setCurrentByIndex((NUM_LOD-1)-mPreviewLOD); // combo box list of lods is in reverse order
LLColor4 highlight_color = LLUI::sColorsGroup->getColor("MeshImportTableHighlightColor");
LLColor4 normal_color = LLUI::sColorsGroup->getColor("MeshImportTableNormalColor");

View File

@@ -111,6 +111,8 @@ public:
void navigateToTitleMedia( const std::string url );
bool selectedMediaEditable();
LLPanelFace* getPanelFace() { return mPanelFace; }
private:
void refresh();
void refreshMedia();

File diff suppressed because it is too large Load Diff

View File

@@ -35,6 +35,10 @@
#include "v4color.h"
#include "llpanel.h"
#include "llmaterial.h"
#include "llmaterialmgr.h"
#include "lltextureentry.h"
#include "llselectmgr.h"
class LLButton;
class LLCheckBoxCtrl;
@@ -47,6 +51,49 @@ class LLTextBox;
class LLTextureCtrl;
class LLUICtrl;
class LLViewerObject;
class LLFloater;
class LLMaterialID;
// Represents an edit for use in replicating the op across one or more materials in the selection set.
//
// The apply function optionally performs the edit which it implements
// as a functor taking Data that calls member func MaterialFunc taking SetValueType
// on an instance of the LLMaterial class.
//
// boost who?
//
template<
typename DataType,
typename SetValueType,
void (LLMaterial::*MaterialEditFunc)(SetValueType data) >
class LLMaterialEditFunctor
{
public:
LLMaterialEditFunctor(const DataType& data) : _data(data) {}
virtual ~LLMaterialEditFunctor() {}
virtual void apply(LLMaterialPtr& material) { (material->*(MaterialEditFunc))(_data); }
DataType _data;
};
template<
typename DataType,
DataType (LLMaterial::*MaterialGetFunc)() >
class LLMaterialGetFunctor
{
public:
LLMaterialGetFunctor() {}
virtual DataType get(LLMaterialPtr& material) { return (material->*(MaterialGetFunc)); }
};
template<
typename DataType,
DataType (LLTextureEntry::*TEGetFunc)() >
class LLTEGetFunctor
{
public:
LLTEGetFunctor() {}
virtual DataType get(LLTextureEntry* entry) { return (entry*(TEGetFunc)); }
};
class LLPanelFace : public LLPanel
{
@@ -59,6 +106,19 @@ public:
void setMediaURL(const std::string& url);
void setMediaType(const std::string& mime_type);
LLMaterialPtr createDefaultMaterial(LLMaterialPtr current_material)
{
LLMaterialPtr new_material(!current_material.isNull() ? new LLMaterial(current_material->asLLSD()) : new LLMaterial());
llassert_always(new_material);
// Preserve old diffuse alpha mode or assert correct default blend mode as appropriate for the alpha channel content of the diffuse texture
//
new_material->setDiffuseAlphaMode(current_material.isNull() ? (isAlpha() ? LLMaterial::DIFFUSE_ALPHA_MODE_BLEND : LLMaterial::DIFFUSE_ALPHA_MODE_NONE) : current_material->getDiffuseAlphaMode());
return new_material;
}
LLRender::eTexIndex getTextureChannelToEdit();
protected:
void getState();
@@ -66,11 +126,11 @@ protected:
void sendTextureInfo(); // applies and sends texture scale, offset, etc.
void sendColor(); // applies and sends color
void sendAlpha(); // applies and sends transparency
void sendBump(); // applies and sends bump map
void sendBump(U32 bumpiness); // applies and sends bump map
void sendTexGen(); // applies and sends bump map
void sendShiny(); // applies and sends shininess
void sendShiny(U32 shininess); // applies and sends shininess
void sendFullbright(); // applies and sends full bright
void sendGlow();
void sendGlow();
void sendMedia();
// this function is to return TRUE if the drag should succeed.
@@ -79,23 +139,370 @@ protected:
void onCommitTexture(const LLSD& data);
void onCancelTexture(const LLSD& data);
void onSelectTexture(const LLSD& data);
void onCommitSpecularTexture(const LLSD& data);
void onCancelSpecularTexture(const LLSD& data);
void onSelectSpecularTexture(const LLSD& data);
void onCommitNormalTexture(const LLSD& data);
void onCancelNormalTexture(const LLSD& data);
void onSelectNormalTexture(const LLSD& data);
void onCommitColor(const LLSD& data);
void onCommitShinyColor(const LLSD& data);
void onCommitAlpha(const LLSD& data);
void onCancelColor(const LLSD& data);
void onSelectColor(const LLSD& data);
void onCloseTexturePicker(const LLSD& data);
// Make UI reflect state of currently selected material (refresh)
// and UI mode (e.g. editing normal map v diffuse map)
//
void updateUI();
// Convenience func to determine if all faces in selection have
// identical planar texgen settings during edits
//
bool isIdenticalPlanarTexgen();
// Callback funcs for individual controls
//
static void onCommitTextureInfo( LLUICtrl* ctrl, void* userdata);
static void onCommitMaterialBumpyScaleX( LLUICtrl* ctrl, void* userdata);
static void onCommitMaterialBumpyScaleY( LLUICtrl* ctrl, void* userdata);
static void onCommitMaterialBumpyRot( LLUICtrl* ctrl, void* userdata);
static void onCommitMaterialBumpyOffsetX( LLUICtrl* ctrl, void* userdata);
static void onCommitMaterialBumpyOffsetY( LLUICtrl* ctrl, void* userdata);
static void onCommitMaterialShinyScaleX( LLUICtrl* ctrl, void* userdata);
static void onCommitMaterialShinyScaleY( LLUICtrl* ctrl, void* userdata);
static void onCommitMaterialShinyRot( LLUICtrl* ctrl, void* userdata);
static void onCommitMaterialShinyOffsetX( LLUICtrl* ctrl, void* userdata);
static void onCommitMaterialShinyOffsetY( LLUICtrl* ctrl, void* userdata);
static void onCommitMaterialGloss( LLUICtrl* ctrl, void* userdata);
static void onCommitMaterialEnv( LLUICtrl* ctrl, void* userdata);
static void onCommitMaterialMaskCutoff( LLUICtrl* ctrl, void* userdata);
static void onCommitMaterialsMedia( LLUICtrl* ctrl, void* userdata);
void onCommitMaterialType();
static void onCommitBump( LLUICtrl* ctrl, void* userdata);
static void onCommitTexGen( LLUICtrl* ctrl, void* userdata);
static void onCommitShiny( LLUICtrl* ctrl, void* userdata);
static void onCommitAlphaMode( LLUICtrl* ctrl, void* userdata);
static void onCommitFullbright( LLUICtrl* ctrl, void* userdata);
static void onCommitGlow( LLUICtrl* ctrl, void *userdata);
static void onCommitPlanarAlign( LLUICtrl* ctrl, void* userdata);
static void onClickApply(void*);
static void onCommitRepeatsPerMeter( LLUICtrl* ctrl, void* userinfo);
static void onClickAutoFix(void*);
static void onClickCopy(void*);
static void onClickPaste(void*);
static F32 valueGlow(LLViewerObject* object, S32 face);
static void onClickCopy(void*);
static void onClickPaste(void*);
// <FS:CR> Build tool enhancements
void onClickMapsSync();
void alignMaterialsProperties();
void onCommitFlip(bool flip_x);
// </FS>
private:
bool isAlpha() { return mIsAlpha; }
// Convenience funcs to keep the visual flack to a minimum
//
LLUUID getCurrentNormalMap();
LLUUID getCurrentSpecularMap();
U32 getCurrentShininess();
U32 getCurrentBumpiness();
U8 getCurrentDiffuseAlphaMode();
U8 getCurrentAlphaMaskCutoff();
U8 getCurrentEnvIntensity();
U8 getCurrentGlossiness();
F32 getCurrentBumpyRot();
F32 getCurrentBumpyScaleU();
F32 getCurrentBumpyScaleV();
F32 getCurrentBumpyOffsetU();
F32 getCurrentBumpyOffsetV();
F32 getCurrentShinyRot();
F32 getCurrentShinyScaleU();
F32 getCurrentShinyScaleV();
F32 getCurrentShinyOffsetU();
F32 getCurrentShinyOffsetV();
// Update visibility of controls to match current UI mode
// (e.g. materials vs media editing)
//
// Do NOT call updateUI from within this function.
//
void updateVisibility();
// Make material(s) reflect current state of UI (apply edit)
//
void updateMaterial();
// Hey look everyone, a type-safe alternative to copy and paste! :)
//
// Update material parameters by applying 'edit_func' to selected TEs
//
template<
typename DataType,
typename SetValueType,
void (LLMaterial::*MaterialEditFunc)(SetValueType data) >
static void edit(LLPanelFace* p, DataType data)
{
LLMaterialEditFunctor< DataType, SetValueType, MaterialEditFunc > edit(data);
struct LLSelectedTEEditMaterial : public LLSelectedTEMaterialFunctor
{
LLSelectedTEEditMaterial(LLPanelFace* panel, LLMaterialEditFunctor< DataType, SetValueType, MaterialEditFunc >* editp) : _panel(panel), _edit(editp) {}
virtual ~LLSelectedTEEditMaterial() {};
virtual LLMaterialPtr apply(LLViewerObject* object, S32 face, LLTextureEntry* tep, LLMaterialPtr& current_material)
{
if (_edit)
{
LLMaterialPtr new_material = _panel->createDefaultMaterial(current_material);
llassert_always(new_material);
// Determine correct alpha mode for current diffuse texture
// (i.e. does it have an alpha channel that makes alpha mode useful)
//
// _panel->isAlpha() "lies" when one face has alpha and the rest do not (NORSPEC-329)
// need to get per-face answer to this question for sane alpha mode retention on updates.
//
bool is_alpha_face = object->isImageAlphaBlended(face);
// need to keep this original answer for valid comparisons in logic below
//
U8 original_default_alpha_mode = is_alpha_face ? LLMaterial::DIFFUSE_ALPHA_MODE_BLEND : LLMaterial::DIFFUSE_ALPHA_MODE_NONE;
U8 default_alpha_mode = original_default_alpha_mode;
if (!current_material.isNull())
{
default_alpha_mode = current_material->getDiffuseAlphaMode();
}
// Ensure we don't inherit the default of blend by accident...
// this will be stomped by a legit request to change the alpha mode by the apply() below
//
new_material->setDiffuseAlphaMode(default_alpha_mode);
// Do "It"!
//
_edit->apply(new_material);
U32 new_alpha_mode = new_material->getDiffuseAlphaMode();
LLUUID new_normal_map_id = new_material->getNormalID();
LLUUID new_spec_map_id = new_material->getSpecularID();
if ((new_alpha_mode == LLMaterial::DIFFUSE_ALPHA_MODE_BLEND) && !is_alpha_face)
{
new_alpha_mode = LLMaterial::DIFFUSE_ALPHA_MODE_NONE;
new_material->setDiffuseAlphaMode(LLMaterial::DIFFUSE_ALPHA_MODE_NONE);
}
bool is_default_blend_mode = (new_alpha_mode == original_default_alpha_mode);
bool is_need_material = !is_default_blend_mode || !new_normal_map_id.isNull() || !new_spec_map_id.isNull();
if (!is_need_material)
{
LL_DEBUGS("Materials") << "Removing material from object " << object->getID() << " face " << face << LL_ENDL;
LLMaterialMgr::getInstance()->remove(object->getID(),face);
new_material = NULL;
}
else
{
LL_DEBUGS("Materials") << "Putting material on object " << object->getID() << " face " << face << ", material: " << new_material->asLLSD() << LL_ENDL;
LLMaterialMgr::getInstance()->put(object->getID(),face,*new_material);
}
object->setTEMaterialParams(face, new_material);
return new_material;
}
return NULL;
}
LLMaterialEditFunctor< DataType, SetValueType, MaterialEditFunc >* _edit;
LLPanelFace* _panel;
} editor(p, &edit);
LLSelectMgr::getInstance()->selectionSetMaterialParams(&editor);
}
template<
typename DataType,
typename ReturnType,
ReturnType (LLMaterial::* const MaterialGetFunc)() const >
static void getTEMaterialValue(DataType& data_to_return, bool& identical,DataType default_value)
{
DataType data_value;
struct GetTEMaterialVal : public LLSelectedTEGetFunctor<DataType>
{
GetTEMaterialVal(DataType default_value) : _default(default_value) {}
virtual ~GetTEMaterialVal() {}
DataType get(LLViewerObject* object, S32 face)
{
DataType ret = _default;
LLMaterialPtr material_ptr;
LLTextureEntry* tep = object ? object->getTE(face) : NULL;
if (tep)
{
material_ptr = tep->getMaterialParams();
if (!material_ptr.isNull())
{
ret = (material_ptr->*(MaterialGetFunc))();
}
}
return ret;
}
DataType _default;
} GetFunc(default_value);
identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &GetFunc, data_value);
data_to_return = data_value;
}
template<
typename DataType,
typename ReturnType, // some kids just have to different...
ReturnType (LLTextureEntry::* const TEGetFunc)() const >
static void getTEValue(DataType& data_to_return, bool& identical, DataType default_value)
{
DataType data_value;
struct GetTEVal : public LLSelectedTEGetFunctor<DataType>
{
GetTEVal(DataType default_value) : _default(default_value) {}
virtual ~GetTEVal() {}
DataType get(LLViewerObject* object, S32 face) {
LLTextureEntry* tep = object ? object->getTE(face) : NULL;
return tep ? ((tep->*(TEGetFunc))()) : _default;
}
DataType _default;
} GetTEValFunc(default_value);
identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &GetTEValFunc, data_value );
data_to_return = data_value;
}
// Update vis and enabling of specific subsets of controls based on material params
// (e.g. hide the spec controls if no spec texture is applied)
//
void updateShinyControls(bool is_setting_texture = false, bool mess_with_combobox = false);
void updateBumpyControls(bool is_setting_texture = false, bool mess_with_combobox = false);
void updateAlphaControls();
/*
* Checks whether the selected texture from the LLFloaterTexturePicker can be applied to the currently selected object.
* If agent selects texture which is not allowed to be applied for the currently selected object,
* all controls of the floater texture picker which allow to apply the texture will be disabled.
*/
void onTextureSelectionChanged(LLInventoryItem* itemp);
bool mIsAlpha;
#if defined(DEF_GET_MAT_STATE)
#undef DEF_GET_MAT_STATE
#endif
#if defined(DEF_GET_TE_STATE)
#undef DEF_GET_TE_STATE
#endif
#if defined(DEF_EDIT_MAT_STATE)
DEF_EDIT_MAT_STATE
#endif
// Accessors for selected TE material state
//
#define DEF_GET_MAT_STATE(DataType,ReturnType,MaterialMemberFunc,DefaultValue) \
static void MaterialMemberFunc(DataType& data, bool& identical) \
{ \
getTEMaterialValue< DataType, ReturnType, &LLMaterial::MaterialMemberFunc >(data, identical,DefaultValue); \
}
// Mutators for selected TE material
//
#define DEF_EDIT_MAT_STATE(DataType,ReturnType,MaterialMemberFunc) \
static void MaterialMemberFunc(LLPanelFace* p,DataType data) \
{ \
edit< DataType, ReturnType, &LLMaterial::MaterialMemberFunc >(p,data); \
}
// Accessors for selected TE state proper (legacy settings etc)
//
#define DEF_GET_TE_STATE(DataType,ReturnType,TexEntryMemberFunc,DefaultValue) \
static void TexEntryMemberFunc(DataType& data, bool& identical) \
{ \
getTEValue< DataType, ReturnType, &LLTextureEntry::TexEntryMemberFunc >(data, identical,DefaultValue); \
}
class LLSelectedTEMaterial
{
public:
static void getCurrent(LLMaterialPtr& material_ptr, bool& identical_material);
static void getMaxSpecularRepeats(F32& repeats, bool& identical);
static void getMaxNormalRepeats(F32& repeats, bool& identical);
static void getCurrentDiffuseAlphaMode(U8& diffuse_alpha_mode, bool& identical, bool diffuse_texture_has_alpha);
DEF_GET_MAT_STATE(LLUUID,const LLUUID&,getNormalID,LLUUID::null)
DEF_GET_MAT_STATE(LLUUID,const LLUUID&,getSpecularID,LLUUID::null)
DEF_GET_MAT_STATE(F32,F32,getSpecularRepeatX,1.0f)
DEF_GET_MAT_STATE(F32,F32,getSpecularRepeatY,1.0f)
DEF_GET_MAT_STATE(F32,F32,getSpecularOffsetX,0.0f)
DEF_GET_MAT_STATE(F32,F32,getSpecularOffsetY,0.0f)
DEF_GET_MAT_STATE(F32,F32,getSpecularRotation,0.0f)
DEF_GET_MAT_STATE(F32,F32,getNormalRepeatX,1.0f)
DEF_GET_MAT_STATE(F32,F32,getNormalRepeatY,1.0f)
DEF_GET_MAT_STATE(F32,F32,getNormalOffsetX,0.0f)
DEF_GET_MAT_STATE(F32,F32,getNormalOffsetY,0.0f)
DEF_GET_MAT_STATE(F32,F32,getNormalRotation,0.0f)
DEF_EDIT_MAT_STATE(U8,U8,setDiffuseAlphaMode);
DEF_EDIT_MAT_STATE(U8,U8,setAlphaMaskCutoff);
DEF_EDIT_MAT_STATE(F32,F32,setNormalOffsetX);
DEF_EDIT_MAT_STATE(F32,F32,setNormalOffsetY);
DEF_EDIT_MAT_STATE(F32,F32,setNormalRepeatX);
DEF_EDIT_MAT_STATE(F32,F32,setNormalRepeatY);
DEF_EDIT_MAT_STATE(F32,F32,setNormalRotation);
DEF_EDIT_MAT_STATE(F32,F32,setSpecularOffsetX);
DEF_EDIT_MAT_STATE(F32,F32,setSpecularOffsetY);
DEF_EDIT_MAT_STATE(F32,F32,setSpecularRepeatX);
DEF_EDIT_MAT_STATE(F32,F32,setSpecularRepeatY);
DEF_EDIT_MAT_STATE(F32,F32,setSpecularRotation);
DEF_EDIT_MAT_STATE(U8,U8,setEnvironmentIntensity);
DEF_EDIT_MAT_STATE(U8,U8,setSpecularLightExponent);
DEF_EDIT_MAT_STATE(LLUUID,const LLUUID&,setNormalID);
DEF_EDIT_MAT_STATE(LLUUID,const LLUUID&,setSpecularID);
DEF_EDIT_MAT_STATE(LLColor4U, const LLColor4U&,setSpecularLightColor);
};
class LLSelectedTE
{
public:
static void getFace(LLFace*& face_to_return, bool& identical_face);
static void getImageFormat(LLGLenum& image_format_to_return, bool& identical_face);
static void getTexId(LLUUID& id, bool& identical);
static void getObjectScaleS(F32& scale_s, bool& identical);
static void getObjectScaleT(F32& scale_t, bool& identical);
static void getMaxDiffuseRepeats(F32& repeats, bool& identical);
DEF_GET_TE_STATE(U8,U8,getBumpmap,0)
DEF_GET_TE_STATE(U8,U8,getShiny,0)
DEF_GET_TE_STATE(U8,U8,getFullbright,0)
DEF_GET_TE_STATE(F32,F32,getRotation,0.0f)
DEF_GET_TE_STATE(F32,F32,getOffsetS,0.0f)
DEF_GET_TE_STATE(F32,F32,getOffsetT,0.0f)
DEF_GET_TE_STATE(F32,F32,getScaleS,1.0f)
DEF_GET_TE_STATE(F32,F32,getScaleT,1.0f)
DEF_GET_TE_STATE(F32,F32,getGlow,0.0f)
DEF_GET_TE_STATE(LLTextureEntry::e_texgen,LLTextureEntry::e_texgen,getTexGen,LLTextureEntry::TEX_GEN_DEFAULT)
DEF_GET_TE_STATE(LLColor4,const LLColor4&,getColor,LLColor4::white)
};
};
#endif

View File

@@ -1118,16 +1118,17 @@ void LLPanelPermissions::onClickDeedToGroup(void* data)
LLNotificationsUtil::add( "DeedObjectToGroup", LLSD(), LLSD(), callback_deed_to_group);
}
void LLPanelPermissions::onClickCopyObjKey()
template <typename iterator>
std::string gather_keys(iterator iter, iterator end)
{
//NAMESHORT - Was requested on the forums, was going to integrate a textbox with the ID, but due to lack of room on the floater,
//We now have a copy button :>
//Madgeek - Hacked together method to copy more than one key, separated by comma.
//At some point the separator was changed to read from the xml settings - I'll probably try to make this openly changable from settings. -HgB
//Lirusaito - Tweaked to copy selected prim(s) when EditLinkedParts, main functionality moved into gather_keys
std::string output;
std::string separator = gSavedSettings.getString("AscentDataSeparator");
for (LLObjectSelection::root_iterator iter = LLSelectMgr::getInstance()->getSelection()->root_begin();
iter != LLSelectMgr::getInstance()->getSelection()->root_end(); iter++)
for (; iter != end; ++iter)
{
LLSelectNode* selectNode = *iter;
LLViewerObject* object = selectNode->getObject();
@@ -1137,6 +1138,14 @@ void LLPanelPermissions::onClickCopyObjKey()
output.append(object->getID().asString());
}
}
return output;
}
void LLPanelPermissions::onClickCopyObjKey()
{
bool parts(gSavedSettings.getBOOL("EditLinkedParts"));
LLObjectSelectionHandle selection(LLSelectMgr::getInstance()->getSelection());
std::string output = parts ? gather_keys(selection->begin(), selection->end()) : gather_keys(selection->root_begin(), selection->root_end());
if (!output.empty()) gViewerWindow->getWindow()->copyTextToClipboard(utf8str_to_wstring(output));
}

View File

@@ -29,6 +29,7 @@
// file include
#define LLSELECTMGR_CPP
#include "llselectmgr.h"
#include "llmaterialmgr.h"
// library includes
#include "llcachename.h"
@@ -64,6 +65,7 @@
#include "llmenugl.h"
#include "llmeshrepository.h"
#include "llmutelist.h"
#include "llparcel.h"
#include "llnotificationsutil.h"
#include "llstatusbar.h"
#include "llsurface.h"
@@ -80,20 +82,18 @@
#include "llviewermenu.h"
#include "llviewerobject.h"
#include "llviewerobjectlist.h"
#include "llviewerparcelmgr.h"
#include "llviewerregion.h"
#include "llviewerstats.h"
#include "llvoavatarself.h"
#include "llvovolume.h"
#include "pipeline.h"
#include "llviewershadermgr.h"
#include "llparcel.h"
#include "llviewerparcelmgr.h"
#include "llpanelface.h"
#include "llglheaders.h"
#include "hippogridmanager.h"
// [RLVa:KB]
// [RLVa:KB] - Checked: 2011-05-22 (RLVa-1.3.1a)
#include "rlvhandler.h"
// [/RLVa:KB]
@@ -191,6 +191,7 @@ LLSelectMgr::LLSelectMgr()
mDebugSelectMgr(LLCachedControl<bool>( "DebugSelectMgr", false))
{
mTEMode = FALSE;
mTextureChannel = LLRender::DIFFUSE_MAP;
mLastCameraPos.clearVec();
sHighlightThickness = gSavedSettings.getF32("SelectionHighlightThickness");
@@ -239,6 +240,8 @@ void LLSelectMgr::clearSelections()
mHighlightedObjects->deleteAllNodes();
mRectSelectedObjects.clear();
mGridObjects.deleteAllNodes();
LLPipeline::setRenderHighlightTextureChannel(LLRender::DIFFUSE_MAP);
}
void LLSelectMgr::update()
@@ -868,6 +871,10 @@ void LLSelectMgr::addAsIndividual(LLViewerObject *objectp, S32 face, BOOL undoab
// check to see if object is already in list
LLSelectNode *nodep = mSelectedObjects->findNode(objectp);
// Reset (in anticipation of being set to an appropriate value by panel refresh, if they're up)
//
setTextureChannel(LLRender::DIFFUSE_MAP);
// if not in list, add it
if (!nodep)
{
@@ -2005,6 +2012,76 @@ void LLSelectMgr::selectionSetGlow(F32 glow)
mSelectedObjects->applyToObjects( &func2 );
}
void LLSelectMgr::selectionSetMaterialParams(LLSelectedTEMaterialFunctor* material_func)
{
struct f1 : public LLSelectedTEFunctor
{
LLMaterialPtr mMaterial;
f1(LLSelectedTEMaterialFunctor* material_func) : _material_func(material_func) {}
bool apply(LLViewerObject* object, S32 face)
{
if (object && object->permModify() && _material_func)
{
LLTextureEntry* tep = object->getTE(face);
if (tep)
{
LLMaterialPtr current_material = tep->getMaterialParams();
_material_func->apply(object, face, tep, current_material);
}
}
return true;
}
LLSelectedTEMaterialFunctor* _material_func;
} func1(material_func);
mSelectedObjects->applyToTEs( &func1 );
struct f2 : public LLSelectedObjectFunctor
{
virtual bool apply(LLViewerObject* object)
{
if (object->permModify())
{
object->sendTEUpdate();
}
return true;
}
} func2;
mSelectedObjects->applyToObjects( &func2 );
}
void LLSelectMgr::selectionRemoveMaterial()
{
struct f1 : public LLSelectedTEFunctor
{
bool apply(LLViewerObject* object, S32 face)
{
if (object->permModify())
{
LL_DEBUGS("Materials") << "Removing material from object " << object->getID() << " face " << face << LL_ENDL;
LLMaterialMgr::getInstance()->remove(object->getID(),face);
object->setTEMaterialParams(face, NULL);
}
return true;
}
} func1;
mSelectedObjects->applyToTEs( &func1 );
struct f2 : public LLSelectedObjectFunctor
{
virtual bool apply(LLViewerObject* object)
{
if (object->permModify())
{
object->sendTEUpdate();
}
return true;
}
} func2;
mSelectedObjects->applyToObjects( &func2 );
}
//-----------------------------------------------------------------------------
// findObjectPermissions()
@@ -2045,6 +2122,7 @@ BOOL LLSelectMgr::selectionGetGlow(F32 *glow)
return identical;
}
void LLSelectMgr::selectionSetPhysicsType(U8 type)
{
struct f : public LLSelectedObjectFunctor
@@ -2140,6 +2218,7 @@ void LLSelectMgr::selectionSetRestitution(F32 restitution)
getSelection()->applyToObjects(&sendfunc);
}
//-----------------------------------------------------------------------------
// selectionSetMaterial()
//-----------------------------------------------------------------------------
@@ -2424,19 +2503,66 @@ void LLSelectMgr::adjustTexturesByScale(BOOL send_to_sim, BOOL stretch)
continue;
}
LLVector3 scale_ratio = selectNode->mTextureScaleRatios[te_num];
LLVector3 object_scale = object->getScale();
LLVector3 diffuse_scale_ratio = selectNode->mTextureScaleRatios[te_num];
// We like these to track together. NORSPEC-96
//
LLVector3 normal_scale_ratio = diffuse_scale_ratio;
LLVector3 specular_scale_ratio = diffuse_scale_ratio;
// Apply new scale to face
if (planar)
{
object->setTEScale(te_num, 1.f/object_scale.mV[s_axis]*scale_ratio.mV[s_axis],
1.f/object_scale.mV[t_axis]*scale_ratio.mV[t_axis]);
F32 diffuse_scale_s = diffuse_scale_ratio.mV[s_axis]/object_scale.mV[s_axis];
F32 diffuse_scale_t = diffuse_scale_ratio.mV[t_axis]/object_scale.mV[t_axis];
F32 normal_scale_s = normal_scale_ratio.mV[s_axis]/object_scale.mV[s_axis];
F32 normal_scale_t = normal_scale_ratio.mV[t_axis]/object_scale.mV[t_axis];
F32 specular_scale_s = specular_scale_ratio.mV[s_axis]/object_scale.mV[s_axis];
F32 specular_scale_t = specular_scale_ratio.mV[t_axis]/object_scale.mV[t_axis];
object->setTEScale(te_num, diffuse_scale_s, diffuse_scale_t);
LLTextureEntry* tep = object->getTE(te_num);
if (tep && !tep->getMaterialParams().isNull())
{
LLMaterialPtr orig = tep->getMaterialParams();
LLMaterialPtr p = gFloaterTools->getPanelFace()->createDefaultMaterial(orig);
p->setNormalRepeat(normal_scale_s, normal_scale_t);
p->setSpecularRepeat(specular_scale_s, specular_scale_t);
LLMaterialMgr::getInstance()->put(object->getID(), te_num, *p);
}
}
else
{
object->setTEScale(te_num, scale_ratio.mV[s_axis]*object_scale.mV[s_axis],
scale_ratio.mV[t_axis]*object_scale.mV[t_axis]);
F32 diffuse_scale_s = diffuse_scale_ratio.mV[s_axis]*object_scale.mV[s_axis];
F32 diffuse_scale_t = diffuse_scale_ratio.mV[t_axis]*object_scale.mV[t_axis];
F32 normal_scale_s = normal_scale_ratio.mV[s_axis]*object_scale.mV[s_axis];
F32 normal_scale_t = normal_scale_ratio.mV[t_axis]*object_scale.mV[t_axis];
F32 specular_scale_s = specular_scale_ratio.mV[s_axis]*object_scale.mV[s_axis];
F32 specular_scale_t = specular_scale_ratio.mV[t_axis]*object_scale.mV[t_axis];
object->setTEScale(te_num, diffuse_scale_s,diffuse_scale_t);
LLTextureEntry* tep = object->getTE(te_num);
if (tep && !tep->getMaterialParams().isNull())
{
LLMaterialPtr orig = tep->getMaterialParams();
LLMaterialPtr p = gFloaterTools->getPanelFace()->createDefaultMaterial(orig);
p->setNormalRepeat(normal_scale_s, normal_scale_t);
p->setSpecularRepeat(specular_scale_s, specular_scale_t);
LLMaterialMgr::getInstance()->put(object->getID(), te_num, *p);
}
}
send = send_to_sim;
}
@@ -2889,7 +3015,6 @@ BOOL LLSelectMgr::selectGetViewableCharacters()
return TRUE;
}
//-----------------------------------------------------------------------------
// selectGetRootsTransfer() - return TRUE if current agent can transfer all
// selected root objects.
@@ -4473,7 +4598,8 @@ void LLSelectMgr::saveSelectedObjectTransform(EActionType action_type)
struct f : public LLSelectedNodeFunctor
{
EActionType mActionType;
f(EActionType a) : mActionType(a) {}
LLSelectMgr* mManager;
f(EActionType a, LLSelectMgr* p) : mActionType(a), mManager(p) {}
virtual bool apply(LLSelectNode* selectNode)
{
LLViewerObject* object = selectNode->getObject();
@@ -4520,10 +4646,10 @@ void LLSelectMgr::saveSelectedObjectTransform(EActionType action_type)
}
selectNode->mSavedScale = object->getScale();
selectNode->saveTextureScaleRatios();
selectNode->saveTextureScaleRatios(mManager->mTextureChannel);
return true;
}
} func(action_type);
} func(action_type, this);
getSelection()->applyToNodes(&func);
mSavedSelectionBBox = getBBoxOfSelection();
@@ -5850,36 +5976,42 @@ void LLSelectNode::saveTextures(const uuid_vec_t& textures)
}
}
void LLSelectNode::saveTextureScaleRatios()
void LLSelectNode::saveTextureScaleRatios(LLRender::eTexIndex index_to_query)
{
mTextureScaleRatios.clear();
if (mObject.notNull())
{
LLVector3 scale = mObject->getScale();
for (U8 i = 0; i < mObject->getNumTEs(); i++)
{
F32 s,t;
const LLTextureEntry* tep = mObject->getTE(i);
tep->getScale(&s,&t);
U32 s_axis = 0;
U32 t_axis = 0;
LLPrimitive::getTESTAxes(i, &s_axis, &t_axis);
F32 diffuse_s = 1.0f;
F32 diffuse_t = 1.0f;
LLVector3 v;
LLVector3 scale = mObject->getScale();
const LLTextureEntry* tep = mObject->getTE(i);
if (!tep)
continue;
U32 s_axis = VX;
U32 t_axis = VY;
LLPrimitive::getTESTAxes(i, &s_axis, &t_axis);
tep->getScale(&diffuse_s,&diffuse_t);
if (tep->getTexGen() == LLTextureEntry::TEX_GEN_PLANAR)
{
v.mV[s_axis] = s*scale.mV[s_axis];
v.mV[t_axis] = t*scale.mV[t_axis];
v.mV[s_axis] = diffuse_s*scale.mV[s_axis];
v.mV[t_axis] = diffuse_t*scale.mV[t_axis];
mTextureScaleRatios.push_back(v);
}
else
{
v.mV[s_axis] = s/scale.mV[s_axis];
v.mV[t_axis] = t/scale.mV[t_axis];
v.mV[s_axis] = diffuse_s/scale.mV[s_axis];
v.mV[t_axis] = diffuse_t/scale.mV[t_axis];
mTextureScaleRatios.push_back(v);
}
mTextureScaleRatios.push_back(v);
}
}
}
@@ -6383,7 +6515,23 @@ void LLSelectMgr::updateSelectionCenter()
if (mSelectedObjects->mSelectType == SELECT_TYPE_ATTACHMENT && isAgentAvatarValid())
{
mPauseRequest = gAgentAvatarp->requestPause();
// Singu Note: Chalice Yao's pause agent on attachment selection
if (object->permYouOwner())
{
mPauseRequest = gAgentAvatarp->requestPause();
}
else if (LLViewerObject* objectp = mSelectedObjects->getPrimaryObject())
{
while (objectp && !objectp->isAvatar())
{
objectp = (LLViewerObject*)objectp->getParent();
}
if (objectp)
{
mPauseRequest = objectp->asAvatar()->requestPause();
}
}
}
else
{
@@ -6430,6 +6578,7 @@ void LLSelectMgr::updateSelectionCenter()
LLVector3 bbox_center_agent = bbox.getCenterAgent();
mSelectionCenterGlobal = gAgent.getPosGlobalFromAgent(bbox_center_agent);
mSelectionBBox = bbox;
}
if ( !(gAgentID == LLUUID::null))

View File

@@ -49,6 +49,7 @@
#include "llpermissions.h"
#include "llcontrol.h"
#include "llviewerobject.h" // LLObjectSelection::getSelectedTEValue template
#include "llmaterial.h"
#include <deque>
#include <boost/iterator/filter_iterator.hpp>
@@ -89,6 +90,12 @@ struct LLSelectedTEFunctor
virtual bool apply(LLViewerObject* object, S32 face) = 0;
};
struct LLSelectedTEMaterialFunctor
{
virtual ~LLSelectedTEMaterialFunctor() {};
virtual LLMaterialPtr apply(LLViewerObject* object, S32 face, LLTextureEntry* tep, LLMaterialPtr& current_material) = 0;
};
template <typename T> struct LLSelectedTEGetFunctor
{
virtual ~LLSelectedTEGetFunctor() {};
@@ -149,7 +156,7 @@ public:
// *NOTE: invalidate stored textures and colors when # faces change
void saveColors();
void saveTextures(const uuid_vec_t& textures);
void saveTextureScaleRatios();
void saveTextureScaleRatios(LLRender::eTexIndex index_to_query);
BOOL allowOperationOnNode(PermissionBit op, U64 group_proxy_power) const;
@@ -272,6 +279,8 @@ public:
LLViewerObject* getFirstCopyableObject(BOOL get_parent = FALSE);
LLViewerObject* getFirstDeleteableObject();
LLViewerObject* getFirstMoveableObject(BOOL get_parent = FALSE);
/// Return the object that lead to this selection, possible a child
LLViewerObject* getPrimaryObject() { return mPrimaryObject; }
// iterate through texture entries
@@ -344,6 +353,7 @@ public:
static BOOL sRectSelectInclusive; // do we need to surround an object to pick it?
static BOOL sRenderHiddenSelections; // do we show selection silhouettes that are occluded?
static BOOL sRenderLightRadius; // do we show the radius of selected lights?
static F32 sHighlightThickness;
static F32 sHighlightUScale;
static F32 sHighlightVScale;
@@ -465,11 +475,11 @@ public:
////////////////////////////////////////////////////////////////
// Selection accessors
////////////////////////////////////////////////////////////////
LLObjectSelectionHandle getHoverObjects() { return mHoverObjects; }
LLObjectSelectionHandle getSelection() { return mSelectedObjects; }
// right now this just renders the selection with root/child colors instead of a single color
LLObjectSelectionHandle getEditSelection() { convertTransient(); return mSelectedObjects; }
LLObjectSelectionHandle getHighlightedObjects() { return mHighlightedObjects; }
LLObjectSelectionHandle getHoverObjects() { return mHoverObjects; }
////////////////////////////////////////////////////////////////
// Grid manipulation
@@ -502,6 +512,11 @@ public:
void saveSelectedObjectColors();
void saveSelectedObjectTextures();
// Sets which texture channel to query for scale and rot of display
// and depends on UI state of LLPanelFace when editing
void setTextureChannel(LLRender::eTexIndex texIndex) { mTextureChannel = texIndex; }
LLRender::eTexIndex getTextureChannel() { return mTextureChannel; }
void selectionUpdatePhysics(BOOL use_physics);
void selectionUpdateTemporary(BOOL is_temporary);
void selectionUpdatePhantom(BOOL is_ghost);
@@ -532,6 +547,8 @@ public:
void selectionSetClickAction(U8 action);
void selectionSetIncludeInSearch(bool include_in_search);
void selectionSetGlow(const F32 glow);
void selectionSetMaterialParams(LLSelectedTEMaterialFunctor* material_func);
void selectionRemoveMaterial();
void selectionSetObjectPermissions(U8 perm_field, BOOL set, U32 perm_mask, BOOL override = FALSE);
void selectionSetObjectName(const std::string& name);
@@ -759,8 +776,8 @@ private:
LLVector3 mGridScale;
EGridMode mGridMode;
BOOL mTEMode; // render te
LLRender::eTexIndex mTextureChannel; // diff, norm, or spec, depending on UI editing mode
LLVector3d mSelectionCenterGlobal;
LLBBox mSelectionBBox;

View File

@@ -311,7 +311,7 @@ void reset_login();
void apply_udp_blacklist(const std::string& csv);
// <FS:CR> Aurora Sim
//bool process_login_success_response(std::string& password);
bool process_login_success_response(std::string& password, U32& first_sim_size_x);
bool process_login_success_response(std::string& password, U32& first_sim_size_x, U32& first_sim_size_y);
// </FS:CR> Aurora Sim
void transition_back_to_login_panel(const std::string& emsg);
@@ -484,6 +484,7 @@ bool idle_startup()
// <FS:CR> Aurora Sim
static U32 first_sim_size_x = 256;
static U32 first_sim_size_y = 256;
// </FS:CR> Aurora Sim
static LLVector3 initial_sun_direction(1.f, 0.f, 0.f);
static LLVector3 agent_start_position_region(10.f, 10.f, 10.f); // default for when no space server
@@ -1550,7 +1551,7 @@ bool idle_startup()
if (successful_login)
{
// unpack login data needed by the application
if (process_login_success_response(password, first_sim_size_x))
if (process_login_success_response(password, first_sim_size_x, first_sim_size_y))
{
std::string name = firstname;
if (!gHippoGridManager->getCurrentGrid()->isSecondLife() ||
@@ -1670,7 +1671,7 @@ bool idle_startup()
display_startup();
// <FS:CR> Aurora Sim
LLWorld::getInstance()->setRegionWidth(first_sim_size_x);
LLWorld::getInstance()->setRegionSize(first_sim_size_x, first_sim_size_y);
// </FS:CR> Aurora Sim
LLWorld::getInstance()->addRegion(gFirstSimHandle, gFirstSim);
display_startup();
@@ -3856,7 +3857,7 @@ void apply_udp_blacklist(const std::string& csv)
}
bool process_login_success_response(std::string& password, U32& first_sim_size_x)
bool process_login_success_response(std::string& password, U32& first_sim_size_x, U32& first_sim_size_y)
{
LLSD response = LLUserAuth::getInstance()->getResponse();
@@ -4000,6 +4001,9 @@ bool process_login_success_response(std::string& password, U32& first_sim_size_x
// <FS:CR> Aurora Sim
text = response["region_size_x"].asString();
if (!text.empty()) LLViewerParcelMgr::getInstance()->init(first_sim_size_x = atoi(text.c_str()));
// Patrick Sapinski commented here on 2/10/2011 that y is currently unused and major refactor is required - Liru (11/6/2013)
text = response["region_size_y"].asString();
if (!text.empty()) first_sim_size_y = atoi(text.c_str());
// </FS:CR> Aurora Sim
const std::string look_at_str = response["look_at"];

View File

@@ -141,6 +141,8 @@ public:
// New functions
void setImageID( const LLUUID& image_asset_id);
const LLUUID& getWhiteImageAssetID() const { return mWhiteImageAssetID; }
void setWhiteImageAssetID(const LLUUID& id) { mWhiteImageAssetID = id; }
void updateImageStats();
const LLUUID& getAssetID() { return mImageAssetID; }
const LLUUID& findItemID(const LLUUID& asset_id, BOOL copyable_only);
@@ -158,6 +160,9 @@ public:
void updateFilterPermMask();
void commitIfImmediateSet();
void setCanApply(bool can_preview, bool can_apply);
void setTextureSelectedCallback(texture_selected_callback cb) {mTextureSelectedCallback = cb;}
static void onBtnSetToDefault( void* userdata );
static void onBtnSelect( void* userdata );
static void onBtnCancel( void* userdata );
@@ -220,6 +225,11 @@ protected:
LLSaveFolderState mSavedFolderState;
BOOL mSelectedItemPinned;
LLScrollListCtrl* mLocalScrollCtrl; // tag: vaa emerald local_asset_browser
private:
bool mCanApply;
bool mCanPreview;
texture_selected_callback mTextureSelectedCallback;
};
LLFloaterTexturePicker::LLFloaterTexturePicker(
@@ -254,7 +264,9 @@ LLFloaterTexturePicker::LLFloaterTexturePicker(
mDnDFilterPermMask(dnd_filter_perm_mask),
mNonImmediateFilterPermMask(non_immediate_filter_perm_mask),
mContextConeOpacity(0.f),
mSelectedItemPinned(FALSE)
mSelectedItemPinned(FALSE),
mCanApply(true),
mCanPreview(true)
{
mCanApplyImmediately = can_apply_immediately;
LLUICtrlFactory::getInstance()->buildFloater(this,"floater_texture_ctrl.xml");
@@ -353,7 +365,9 @@ BOOL LLFloaterTexturePicker::handleDragAndDrop(
{
BOOL handled = FALSE;
if (cargo_type == DAD_TEXTURE)
bool is_mesh = cargo_type == DAD_MESH;
if ((cargo_type == DAD_TEXTURE) || is_mesh)
{
LLInventoryItem *item = (LLInventoryItem *)cargo_data;
@@ -373,6 +387,9 @@ BOOL LLFloaterTexturePicker::handleDragAndDrop(
{
if (drop)
{
// <FS:Ansariel> FIRE-8298: Apply now checkbox has no effect
setCanApply(true, true);
// </FS:Ansariel>
setImageID( item->getAssetUUID() );
commitIfImmediateSet();
}
@@ -607,7 +624,7 @@ void LLFloaterTexturePicker::draw()
// if we're inactive, gray out "apply immediate" checkbox
getChildView("show_folders_check")->setEnabled(mActive && mCanApplyImmediately && !mNoCopyTextureSelected);
getChildView("Select")->setEnabled(mActive);
getChildView("Select")->setEnabled(mActive && mCanApply);
getChildView("Pipette")->setEnabled(mActive);
getChild<LLUICtrl>("Pipette")->setValue(LLToolMgr::getInstance()->getCurrentTool() == LLToolPipette::getInstance());
@@ -768,8 +785,10 @@ PermissionMask LLFloaterTexturePicker::getFilterPermMask()
void LLFloaterTexturePicker::commitIfImmediateSet()
{
bool apply_immediate = getChild<LLUICtrl>("apply_immediate_check")->getValue().asBoolean();
if (!mNoCopyTextureSelected && mOwner && apply_immediate)
// <FS:Ansariel> FIRE-8298: Apply now checkbox has no effect
//if (!mNoCopyTextureSelected && mOwner && mCanApply)
if (!mNoCopyTextureSelected && mOwner && mCanApply && mCanPreview)
// </FS:Ansariel>
{
mOwner->onFloaterCommit(LLTextureCtrl::TEXTURE_CHANGE);
}
@@ -779,6 +798,7 @@ void LLFloaterTexturePicker::commitIfImmediateSet()
void LLFloaterTexturePicker::onBtnSetToDefault(void* userdata)
{
LLFloaterTexturePicker* self = (LLFloaterTexturePicker*) userdata;
self->setCanApply(true, true);
if (self->mOwner)
{
self->setImageID( self->mOwner->getDefaultImageAssetID() );
@@ -790,6 +810,7 @@ void LLFloaterTexturePicker::onBtnSetToDefault(void* userdata)
void LLFloaterTexturePicker::onBtnWhite(void* userdata)
{
LLFloaterTexturePicker* self = (LLFloaterTexturePicker*) userdata;
self->setCanApply(true, true);
self->setImageID( self->mWhiteImageAssetID );
self->commitIfImmediateSet();
}
@@ -798,6 +819,7 @@ void LLFloaterTexturePicker::onBtnWhite(void* userdata)
void LLFloaterTexturePicker::onBtnNone(void* userdata)
{
LLFloaterTexturePicker* self = (LLFloaterTexturePicker*) userdata;
self->setCanApply(true, true);
self->setImageID( LLUUID::null );
self->commitIfImmediateSet();
}
@@ -806,6 +828,7 @@ void LLFloaterTexturePicker::onBtnNone(void* userdata)
void LLFloaterTexturePicker::onBtnInvisible(void* userdata)
{
LLFloaterTexturePicker* self = (LLFloaterTexturePicker*) userdata;
self->setCanApply(true, true);
self->setImageID(self->mInvisibleImageAssetID);
self->commitIfImmediateSet();
}
@@ -815,6 +838,7 @@ void LLFloaterTexturePicker::onBtnInvisible(void* userdata)
void LLFloaterTexturePicker::onBtnAlpha(void* userdata)
{
LLFloaterTexturePicker* self = (LLFloaterTexturePicker*) userdata;
self->setCanApply(true, true);
self->setImageID(self->mAlphaImageAssetID);
self->commitIfImmediateSet();
}
@@ -959,6 +983,10 @@ void LLFloaterTexturePicker::onSelectionChange(const std::deque<LLFolderViewItem
mNoCopyTextureSelected = FALSE;
if (itemp)
{
if (!mTextureSelectedCallback.empty())
{
mTextureSelectedCallback(itemp);
}
// <dogmode>
if (itemp->getPermissions().getMaskOwner() & PERM_ALL)
childSetValue("texture_uuid", mImageAssetID);
@@ -970,9 +998,12 @@ void LLFloaterTexturePicker::onSelectionChange(const std::deque<LLFolderViewItem
{
mNoCopyTextureSelected = TRUE;
}
// <FS:Ansariel> FIRE-8298: Apply now checkbox has no effect
setCanApply(true, true);
// </FS:Ansariel>
mImageAssetID = itemp->getAssetUUID();
mIsDirty = TRUE;
if (user_action)
if (user_action && mCanPreview)
{
// only commit intentional selections, not implicit ones
commitIfImmediateSet();
@@ -1004,7 +1035,9 @@ void LLFloaterTexturePicker::onApplyImmediateCheck(LLUICtrl* ctrl, void *user_da
LLCheckBoxCtrl* check_box = (LLCheckBoxCtrl*)ctrl;
gSavedSettings.setBOOL("ApplyTextureImmediately", check_box->get());
// <FS:Ansariel> FIRE-8298: Apply now checkbox has no effect
picker->setCanApply(true, true);
// </FS:Ansariel>
picker->updateFilterPermMask();
picker->commitIfImmediateSet();
}
@@ -1014,6 +1047,16 @@ void LLFloaterTexturePicker::updateFilterPermMask()
//mInventoryPanel->setFilterPermMask( getFilterPermMask() ); Commented out due to no-copy texture loss.
}
void LLFloaterTexturePicker::setCanApply(bool can_preview, bool can_apply)
{
getChildRef<LLUICtrl>("Select").setEnabled(can_apply);
getChildRef<LLUICtrl>("preview_disabled").setVisible(!can_preview);
getChildRef<LLUICtrl>("apply_immediate_check").setVisible(can_preview);
mCanApply = can_apply;
mCanPreview = can_preview ? gSavedSettings.getBOOL("ApplyTextureImmediately") : false;
}
void LLFloaterTexturePicker::onFilterEdit(const std::string& search_string )
{
std::string upper_case_search_string = search_string;
@@ -1054,6 +1097,9 @@ void LLFloaterTexturePicker::onTextureSelect( const LLTextureEntry& te )
if (inventory_item_id.notNull())
{
LLToolPipette::getInstance()->setResult(TRUE, "");
// <FS:Ansariel> FIRE-8298: Apply now checkbox has no effect
setCanApply(true, true);
// </FS:Ansariel>
setImageID(te.getID());
mNoCopyTextureSelected = FALSE;
@@ -1094,6 +1140,7 @@ LLTextureCtrl::LLTextureCtrl(
mDragCallback(NULL),
mDropCallback(NULL),
mOnCancelCallback(NULL),
mOnCloseCallback(NULL),
mOnSelectCallback(NULL),
mBorderColor( gColors.getColor("DefaultHighlightLight") ),
mImageAssetID( image_id ),
@@ -1221,6 +1268,19 @@ void LLTextureCtrl::setShowLoadingPlaceholder(BOOL showLoadingPlaceholder)
mShowLoadingPlaceholder = showLoadingPlaceholder;
}
// Singu Note: These two functions exist to work like their upstream counterparts
void LLTextureCtrl::setBlankImageAssetID(const LLUUID& id)
{
if (LLFloaterTexturePicker* floater = dynamic_cast<LLFloaterTexturePicker*>(mFloaterHandle.get()))
floater->setWhiteImageAssetID(id);
}
const LLUUID& LLTextureCtrl::getBlankImageAssetID() const
{
if (LLFloaterTexturePicker* floater = dynamic_cast<LLFloaterTexturePicker*>(mFloaterHandle.get()))
return floater->getWhiteImageAssetID();
return LLUUID::null;
}
void LLTextureCtrl::setCaption(const std::string& caption)
{
mCaption->setText( caption );
@@ -1236,6 +1296,15 @@ void LLTextureCtrl::setCanApplyImmediately(BOOL b)
}
}
void LLTextureCtrl::setCanApply(bool can_preview, bool can_apply)
{
LLFloaterTexturePicker* floaterp = dynamic_cast<LLFloaterTexturePicker*>(mFloaterHandle.get());
if( floaterp )
{
floaterp->setCanApply(can_preview, can_apply);
}
}
void LLTextureCtrl::setVisible( BOOL visible )
{
if( !visible )
@@ -1341,6 +1410,12 @@ void LLTextureCtrl::showPicker(BOOL take_focus)
mFloaterHandle = floaterp->getHandle();
LLFloaterTexturePicker* texture_floaterp = dynamic_cast<LLFloaterTexturePicker*>(floaterp);
if (texture_floaterp && mOnTextureSelectedCallback)
{
texture_floaterp->setTextureSelectedCallback(mOnTextureSelectedCallback);
}
gFloaterView->getParentFloater(this)->addDependentFloater(floaterp);
floaterp->open(); /* Flawfinder: ignore */
}
@@ -1395,6 +1470,10 @@ void LLTextureCtrl::onFloaterClose()
if (floaterp)
{
if (mOnCloseCallback)
{
mOnCloseCallback(this,LLSD());
}
floaterp->setOwner(NULL);
mLastFloaterLeftTop.set( floaterp->getRect().mLeft, floaterp->getRect().mTop );
}
@@ -1466,6 +1545,16 @@ void LLTextureCtrl::onFloaterCommit(ETexturePickOp op, LLUUID id)
// tag: vaa emerald local_asset_browser [end]
void LLTextureCtrl::setOnTextureSelectedCallback(texture_selected_callback cb)
{
mOnTextureSelectedCallback = cb;
LLFloaterTexturePicker* floaterp = dynamic_cast<LLFloaterTexturePicker*>(mFloaterHandle.get());
if (floaterp)
{
floaterp->setTextureSelectedCallback(cb);
}
}
void LLTextureCtrl::setImageAssetID( const LLUUID& asset_id )
{
if( mImageAssetID != asset_id )

View File

@@ -48,6 +48,7 @@ class LLViewerFetchedTexture;
// used for setting drag & drop callbacks.
typedef boost::function<BOOL (LLUICtrl*, LLInventoryItem*)> drag_n_drop_callback;
typedef boost::function<void (LLInventoryItem*)> texture_selected_callback;
//////////////////////////////////////////////////////////////////////////////////////////
@@ -79,7 +80,6 @@ public:
static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory);
virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
virtual BOOL handleDragAndDrop(S32 x, S32 y, MASK mask,
BOOL drop, EDragAndDropType cargo_type, void *cargo_data,
EAcceptance *accept,
@@ -124,12 +124,17 @@ public:
const std::string& getDefaultImageName() const { return mDefaultImageName; }
void setBlankImageAssetID(const LLUUID& id);
const LLUUID& getBlankImageAssetID() const;
void setFallbackImageName( const std::string& name ) { mFallbackImageName = name; }
const std::string& getFallbackImageName() const { return mFallbackImageName; }
void setCaption(const std::string& caption);
void setCanApplyImmediately(BOOL b);
void setCanApply(bool can_preview, bool can_apply);
void setImmediateFilterPermMask(PermissionMask mask)
{ mImmediateFilterPermMask = mask; }
void setDnDFilterPermMask(PermissionMask mask)
@@ -155,11 +160,18 @@ public:
void setDropCallback(drag_n_drop_callback cb) { mDropCallback = cb; }
void setOnCancelCallback(commit_callback_t cb) { mOnCancelCallback = cb; }
void setOnCloseCallback(commit_callback_t cb) { mOnCloseCallback = cb; }
void setOnSelectCallback(commit_callback_t cb) { mOnSelectCallback = cb; }
/*
* callback for changing texture selection in inventory list of texture floater
*/
void setOnTextureSelectedCallback(texture_selected_callback cb);
void setShowLoadingPlaceholder(BOOL showLoadingPlaceholder);
LLViewerFetchedTexture* getTexture() { return mTexturep; }
static void handleClickOpenTexture(void* userdata);
static void handleClickCopyAssetID(void* userdata);
@@ -172,6 +184,8 @@ private:
drag_n_drop_callback mDropCallback;
commit_callback_t mOnCancelCallback;
commit_callback_t mOnSelectCallback;
commit_callback_t mOnCloseCallback;
texture_selected_callback mOnTextureSelectedCallback;
LLPointer<LLViewerFetchedTexture> mTexturep;
LLColor4 mBorderColor;
LLUUID mImageItemID;

View File

@@ -31,26 +31,19 @@
*/
#include "llviewerprecompiledheaders.h"
#include "message.h"
#include "lltooldraganddrop.h"
// library headers
#include "llnotificationsutil.h"
#include "llinstantmessage.h"
#include "lldir.h"
// project headers
#include "llagent.h"
#include "llagentcamera.h"
#include "llagentwearables.h"
#include "llappearancemgr.h"
#include "lldictionary.h"
#include "llviewercontrol.h"
#include "llfirstuse.h"
#include "llfloater.h"
#include "llfloaterinventory.h"
#include "llfloatertools.h"
#include "llfocusmgr.h"
#include "llgesturemgr.h"
#include "llgiveinventory.h"
#include "llhudmanager.h"
@@ -66,7 +59,6 @@
#include "llselectmgr.h"
#include "lltoolmgr.h"
#include "lltrans.h"
#include "llui.h"
#include "llviewertexturelist.h"
#include "llviewerinventory.h"
#include "llviewerobject.h"
@@ -77,14 +69,14 @@
#include "llvoavatarself.h"
#include "llvolume.h"
#include "llworld.h"
#include "object_flags.h"
#include "llpanelface.h"
// <edit>
#include "llappviewer.h" // System Folders
#include "llparcel.h" // always rez
#include "llviewerparcelmgr.h" // always rez
// </edit>
// [RLVa:KB] - Checked: 2010-03-04 (RLVa-1.2.0a)
// [RLVa:KB] - Checked: 2011-05-22 (RLVa-1.3.1)
#include "rlvhandler.h"
#include "rlvlocks.h"
// [/RLVa:KB]
@@ -388,9 +380,12 @@ void LLToolDragAndDrop::setDragStart(S32 x, S32 y)
BOOL LLToolDragAndDrop::isOverThreshold(S32 x,S32 y)
{
const S32 MIN_MANHATTAN_DIST = 3;
S32 manhattan_dist = llabs( x - mDragStartX ) + llabs( y - mDragStartY );
return manhattan_dist >= MIN_MANHATTAN_DIST;
static LLCachedControl<S32> drag_and_drop_threshold(gSavedSettings,"DragAndDropDistanceThreshold");
S32 mouse_delta_x = x - mDragStartX;
S32 mouse_delta_y = y - mDragStartY;
return (mouse_delta_x * mouse_delta_x) + (mouse_delta_y * mouse_delta_y) > drag_and_drop_threshold * drag_and_drop_threshold;
}
void LLToolDragAndDrop::beginDrag(EDragAndDropType type,
@@ -1162,10 +1157,56 @@ void LLToolDragAndDrop::dropTextureOneFace(LLViewerObject* hit_obj,
// update viewer side image in anticipation of update from simulator
//LLViewerTexture* image = LLViewerTextureManager::getFetchedTexture(asset_id);
LLViewerStats::getInstance()->incStat(LLViewerStats::ST_EDIT_TEXTURE_COUNT );
//hit_obj->setTEImage(hit_face, image);
hit_obj->setTETexture(hit_face, asset_id); //Singu note: setTETexture will allow the real id to be passed to LLPrimitive::setTETexture,
// even if it's null. setTEImage would actually pass down IMG_DEFAULT under such a case,
// which we don't want.
LLTextureEntry* tep = hit_obj ? (hit_obj->getTE(hit_face)) : NULL;
LLPanelFace* panel_face = gFloaterTools->getPanelFace();
if (gFloaterTools->getVisible() && panel_face)
{
switch (LLSelectMgr::getInstance()->getTextureChannel())
{
case 0:
default:
{
//hit_obj->setTEImage(hit_face, image);
hit_obj->setTETexture(hit_face, asset_id); //Singu note: setTETexture will allow the real id to be passed to LLPrimitive::setTETexture,
// even if it's null. setTEImage would actually pass down IMG_DEFAULT under such a case,
// which we don't want.
}
break;
case 1:
{
LLMaterialPtr old_mat = tep->getMaterialParams();
LLMaterialPtr new_mat = panel_face->createDefaultMaterial(old_mat);
new_mat->setNormalID(asset_id);
tep->setMaterialParams(new_mat);
hit_obj->setTENormalMap(hit_face, asset_id);
LLMaterialMgr::getInstance()->put(hit_obj->getID(), hit_face, *new_mat);
}
break;
case 2:
{
LLMaterialPtr old_mat = tep->getMaterialParams();
LLMaterialPtr new_mat = panel_face->createDefaultMaterial(old_mat);
new_mat->setSpecularID(asset_id);
tep->setMaterialParams(new_mat);
hit_obj->setTESpecularMap(hit_face, asset_id);
LLMaterialMgr::getInstance()->put(hit_obj->getID(), hit_face, *new_mat);
}
break;
}
}
else
{
//hit_obj->setTEImage(hit_face, image);
hit_obj->setTETexture(hit_face, asset_id); //Singu note: setTETexture will allow the real id to be passed to LLPrimitive::setTETexture,
// even if it's null. setTEImage would actually pass down IMG_DEFAULT under such a case,
// which we don't want.
}
dialog_refresh_all();
// send the update to the simulator
@@ -1619,6 +1660,7 @@ bool LLToolDragAndDrop::handleGiveDragAndDrop(LLUUID dest_agent, LLUUID session_
case DAD_ANIMATION:
case DAD_GESTURE:
case DAD_CALLINGCARD:
case DAD_MESH:
{
LLViewerInventoryItem* inv_item = (LLViewerInventoryItem*)cargo_data;
if(gInventory.getItem(inv_item->getUUID())
@@ -2353,7 +2395,7 @@ EAcceptance LLToolDragAndDrop::dad3dUpdateInventoryCategory(
}
}
// if every item is accepted, go ahead and send it on.
// If every item is accepted, send it on
if(drop && (ACCEPT_YES_COPY_SINGLE <= rv))
{
uuid_vec_t ids;
@@ -2595,7 +2637,12 @@ LLInventoryObject* LLToolDragAndDrop::locateInventory(
{
item = NULL;
cat = NULL;
if(mCargoIDs.empty()) return NULL;
if (mCargoIDs.empty())
{
return NULL;
}
if((mSource == SOURCE_AGENT) || (mSource == SOURCE_LIBRARY))
{
// The object should be in user inventory.

View File

@@ -1101,7 +1101,7 @@ BOOL LLToolPie::handleRightClickPick()
{
LLParcelSelectionHandle selection = LLViewerParcelMgr::getInstance()->selectParcelAt( mPick.mPosGlobal );
gMenuHolder->setParcelSelection(selection);
gPieLand->show(x, y, true);
gPieLand->show(x, y);
showVisualContextMenuEffect();
@@ -1115,7 +1115,7 @@ BOOL LLToolPie::handleRightClickPick()
return TRUE ;
}
gPieSelf->show(x, y, true);
gPieSelf->show(x, y);
}
else if (object)
{
@@ -1159,11 +1159,11 @@ BOOL LLToolPie::handleRightClickPick()
// [/RLVa:KB]
/*if (is_other_attachment)
{
gPieAttachmentOther->show(x, y, true);
gPieAttachmentOther->show(x, y);
}
else*/
{
gPieAvatar->show(x, y, true);
gPieAvatar->show(x, y);
}
// [RLVa:KB] - Checked: 2010-04-11 (RLVa-1.2.0e) | Modified: RLVa-1.1.0l
}
@@ -1175,7 +1175,7 @@ BOOL LLToolPie::handleRightClickPick()
}
else if (object->isAttachment())
{
gPieAttachment->show(x, y, true);
gPieAttachment->show(x, y);
}
else
{
@@ -1204,7 +1204,7 @@ BOOL LLToolPie::handleRightClickPick()
{
// [/RLVa:KB]
gMenuHolder->childSetText("Object Mute", mute_msg);
gPieObject->show(x, y, true);
gPieObject->show(x, y);
showVisualContextMenuEffect();
// [RLVa:KB] - Checked: 2010-04-11 (RLVa-1.2.el) | Modified: RLVa-1.1.0l

View File

@@ -217,8 +217,21 @@ void LLUserAuth::authenticate(
XMLRPC_VectorAppendString(params, "last", lastname.c_str(), 0);
XMLRPC_VectorAppendString(params, "passwd", dpasswd.c_str(), 0);
XMLRPC_VectorAppendString(params, "start", start.c_str(), 0);
XMLRPC_VectorAppendString(params, "version", gCurrentVersion.c_str(), 0); // Includes channel name
XMLRPC_VectorAppendString(params, "channel", gVersionChannel, 0);
XMLRPC_VectorAppendString(params, "version", llformat("%d.%d.%d.%d", gVersionMajor, gVersionMinor, gVersionPatch, gVersionBuild).c_str(), 0);
// Singu Note: At the request of Linden Lab we change channel sent to the login server in the following way:
// * If channel is "Singularity" we change it to "Singularity Release", due to their statistics system
// not being able to distinguish just the release version
// * We append "64" to channel name on 64-bit for systems for the LL stats system to be able to produce independent
// crash statistics depending on the architecture
std::string chan(gVersionChannel);
if (chan == "Singularity")
{
chan += " Release";
}
#if defined(_WIN64) || defined(__x86_64__)
chan += " 64";
#endif
XMLRPC_VectorAppendString(params, "channel", chan.c_str(), 0);
XMLRPC_VectorAppendString(params, "platform", PLATFORM_STRING, 0);
XMLRPC_VectorAppendString(params, "mac", hashed_mac.c_str(), 0);

View File

@@ -655,13 +655,16 @@ bool LLViewerInventoryCategory::fetch()
{
llwarns << "agent region is null" << llendl;
}
if (!url.empty()) //Capability found. Build up LLSD and use it.
if (!url.empty() && gSavedSettings.getBOOL("UseHTTPInventory")) //Capability found and HTTP inventory enabled. Build up LLSD and use it.
{
LLInventoryModelBackgroundFetch::instance().start(mUUID, false);
}
else
{ //Deprecated, but if we don't have a capability, use the old system.
llinfos << "FetchInventoryDescendents2 capability not found. Using deprecated UDP message." << llendl;
{ //We don't have a capability or the use of HTTP inventory is disabled, use the old system.
if (gSavedSettings.getBOOL("UseHTTPInventory"))
{
llinfos << "FetchInventoryDescendents2 capability not found. Using UDP message." << llendl;
}
LLMessageSystem* msg = gMessageSystem;
msg->newMessage("FetchInventoryDescendents");
msg->nextBlock("AgentData");

View File

@@ -249,11 +249,11 @@ LLMenuGL *gPopupMenuView = NULL;
LLMenuBarGL *gLoginMenuBarView = NULL;
// Pie menus
LLPieMenu *gPieSelf = NULL;
LLPieMenu *gPieAvatar = NULL;
LLPieMenu *gPieObject = NULL;
LLPieMenu *gPieAttachment = NULL;
LLPieMenu *gPieLand = NULL;
LLContextMenu *gPieSelf = NULL;
LLContextMenu *gPieAvatar = NULL;
LLContextMenu *gPieObject = NULL;
LLContextMenu *gPieAttachment = NULL;
LLContextMenu *gPieLand = NULL;
// local constants
const std::string CLIENT_MENU_NAME("Advanced");
@@ -266,13 +266,13 @@ LLMenuGL* gAttachSubMenu = NULL;
LLMenuGL* gDetachSubMenu = NULL;
LLMenuGL* gTakeOffClothes = NULL;
LLMenuGL* gMeshesAndMorphsMenu = NULL;
LLPieMenu* gPieRate = NULL;
LLPieMenu* gAttachScreenPieMenu = NULL;
LLPieMenu* gAttachPieMenu = NULL;
LLPieMenu* gAttachBodyPartPieMenus[8];
LLPieMenu* gDetachPieMenu = NULL;
LLPieMenu* gDetachScreenPieMenu = NULL;
LLPieMenu* gDetachBodyPartPieMenus[8];
LLContextMenu* gPieRate = NULL;
LLContextMenu* gAttachScreenPieMenu = NULL;
LLContextMenu* gAttachPieMenu = NULL;
LLContextMenu* gAttachBodyPartPieMenus[8];
LLContextMenu* gDetachPieMenu = NULL;
LLContextMenu* gDetachScreenPieMenu = NULL;
LLContextMenu* gDetachBodyPartPieMenus[8];
LLMenuItemCallGL* gAFKMenu = NULL;
LLMenuItemCallGL* gBusyMenu = NULL;
@@ -602,6 +602,42 @@ void set_underclothes_menu_options()
static std::vector<LLPointer<view_listener_t> > sMenus;
void build_pie_menus()
{
if (gPieSelf) delete gPieSelf;
gPieSelf = LLUICtrlFactory::getInstance()->buildContextMenu("menu_pie_self.xml", gMenuHolder);
// TomY TODO: what shall we do about these?
gDetachScreenPieMenu = gMenuHolder->getChild<LLContextMenu>("Object Detach HUD", true);
gDetachPieMenu = gMenuHolder->getChild<LLContextMenu>("Object Detach", true);
if (gPieAvatar) delete gPieAvatar;
gPieAvatar = LLUICtrlFactory::getInstance()->buildContextMenu("menu_pie_avatar.xml", gMenuHolder);
if (gPieObject) delete gPieObject;
gPieObject = LLUICtrlFactory::getInstance()->buildContextMenu("menu_pie_object.xml", gMenuHolder);
gAttachScreenPieMenu = gMenuHolder->getChild<LLContextMenu>("Object Attach HUD");
gAttachPieMenu = gMenuHolder->getChild<LLContextMenu>("Object Attach");
gPieRate = gMenuHolder->getChild<LLContextMenu>("Rate Menu");
if (gPieAttachment) delete gPieAttachment;
gPieAttachment = LLUICtrlFactory::getInstance()->buildContextMenu("menu_pie_attachment.xml", gMenuHolder);
if (gPieLand) delete gPieLand;
gPieLand = LLUICtrlFactory::getInstance()->buildContextMenu("menu_pie_land.xml", gMenuHolder);
}
void rebuild_context_menus()
{
llassert_always(gMenuHolder);
if (!gMenuHolder) return; // This should never happen, if it does, don't do anything, menus haven't been built yet or were destroyed.
gMenuHolder->hideMenus();
build_pie_menus();
if (!gAgentAvatarp) return; // The agent's avatar isn't here yet, don't bother with the dynamic attach/detach submenus.
gAgentAvatarp->buildContextMenus();
}
void init_menus()
{
S32 top = gViewerWindow->getRootView()->getRect().getHeight();
@@ -633,36 +669,15 @@ void init_menus()
///
/// Pie menus
///
gPieSelf = LLUICtrlFactory::getInstance()->buildPieMenu("menu_pie_self.xml", gMenuHolder);
build_pie_menus();
gSavedSettings.getControl("LiruUseContextMenus")->getSignal()->connect(boost::bind(rebuild_context_menus));
// TomY TODO: what shall we do about these?
gDetachScreenPieMenu = gMenuHolder->getChild<LLPieMenu>("Object Detach HUD", true);
gDetachPieMenu = gMenuHolder->getChild<LLPieMenu>("Object Detach", true);
gPieAvatar = LLUICtrlFactory::getInstance()->buildPieMenu("menu_pie_avatar.xml", gMenuHolder);
gPieObject = LLUICtrlFactory::getInstance()->buildPieMenu("menu_pie_object.xml", gMenuHolder);
gAttachScreenPieMenu = gMenuHolder->getChild<LLPieMenu>("Object Attach HUD");
gAttachPieMenu = gMenuHolder->getChild<LLPieMenu>("Object Attach");
gPieRate = gMenuHolder->getChild<LLPieMenu>("Rate Menu");
gPieAttachment = LLUICtrlFactory::getInstance()->buildPieMenu("menu_pie_attachment.xml", gMenuHolder);
gPieLand = LLUICtrlFactory::getInstance()->buildPieMenu("menu_pie_land.xml", gMenuHolder);
///
/// set up the colors
///
LLColor4 color;
LLColor4 pie_color = gColors.getColor("PieMenuBgColor");
gPieSelf->setBackgroundColor( pie_color );
gPieAvatar->setBackgroundColor( pie_color );
gPieObject->setBackgroundColor( pie_color );
gPieAttachment->setBackgroundColor( pie_color );
gPieLand->setBackgroundColor( pie_color );
color = gColors.getColor( "MenuPopupBgColor" );
gPopupMenuView->setBackgroundColor( color );
@@ -5549,7 +5564,7 @@ class LLEditDelete : public view_listener_t
// When deleting an object we may not actually be done
// Keep selection so we know what to delete when confirmation is needed about the delete
gPieObject->hide(TRUE);
gPieObject->hide();
return true;
}
};
@@ -5669,7 +5684,7 @@ void handle_object_delete()
// When deleting an object we may not actually be done
// Keep selection so we know what to delete when confirmation is needed about the delete
gPieObject->hide(TRUE);
gPieObject->hide();
return;
}

View File

@@ -167,24 +167,24 @@ extern LLViewerMenuHolderGL* gMenuHolder;
extern LLMenuBarGL* gLoginMenuBarView;
// Pie menus
extern LLPieMenu *gPieSelf;
extern LLPieMenu *gPieAvatar;
extern LLPieMenu *gPieObject;
extern LLPieMenu *gPieAttachment;
extern LLPieMenu *gPieLand;
extern LLPieMenu *gPieRate;
extern LLContextMenu *gPieSelf;
extern LLContextMenu *gPieAvatar;
extern LLContextMenu *gPieObject;
extern LLContextMenu *gPieAttachment;
extern LLContextMenu *gPieLand;
extern LLContextMenu *gPieRate;
// Needed to build menus when attachment site list available
extern LLMenuGL* gAttachSubMenu;
extern LLMenuGL* gDetachSubMenu;
extern LLMenuGL* gTakeOffClothes;
extern LLMenuGL* gMeshesAndMorphsMenu;
extern LLPieMenu* gAttachScreenPieMenu;
extern LLPieMenu* gDetachScreenPieMenu;
extern LLPieMenu* gAttachPieMenu;
extern LLPieMenu* gDetachPieMenu;
extern LLPieMenu* gAttachBodyPartPieMenus[8];
extern LLPieMenu* gDetachBodyPartPieMenus[8];
extern LLContextMenu* gAttachScreenPieMenu;
extern LLContextMenu* gDetachScreenPieMenu;
extern LLContextMenu* gAttachPieMenu;
extern LLContextMenu* gDetachPieMenu;
extern LLContextMenu* gAttachBodyPartPieMenus[8];
extern LLContextMenu* gDetachBodyPartPieMenus[8];
extern LLMenuItemCallGL* gAFKMenu;
extern LLMenuItemCallGL* gBusyMenu;

View File

@@ -4458,7 +4458,9 @@ void process_teleport_finish(LLMessageSystem* msg, void**)
// <FS:CR> Aurora Sim
U32 region_size_x = 256;
msg->getU32Fast(_PREHASH_Info, _PREHASH_RegionSizeX, region_size_x);
LLWorld::getInstance()->setRegionWidth(region_size_x);
U32 region_size_y = 256;
msg->getU32Fast(_PREHASH_Info, _PREHASH_RegionSizeY, region_size_y);
LLWorld::getInstance()->setRegionSize(region_size_x, region_size_y);
// </FS:CR> Aurora Sim
LLViewerRegion* regionp = LLWorld::getInstance()->addRegion(region_handle, sim_host);
@@ -4788,7 +4790,9 @@ void process_crossed_region(LLMessageSystem* msg, void**)
// <FS:CR> Aurora Sim
U32 region_size_x = 256;
msg->getU32(_PREHASH_RegionData, _PREHASH_RegionSizeX, region_size_x);
LLWorld::getInstance()->setRegionWidth(region_size_x);
U32 region_size_y = 256;
msg->getU32(_PREHASH_RegionData, _PREHASH_RegionSizeY, region_size_y);
LLWorld::getInstance()->setRegionSize(region_size_x, region_size_y);
// </FS:CR> Aurora Sim
LLViewerRegion* regionp = LLWorld::getInstance()->addRegion(region_handle, sim_host);
regionp->setSeedCapability(seedCap);

View File

@@ -656,7 +656,6 @@ void LLViewerPartSim::updateSimulation()
static LLFrameTimer update_timer;
//reset VBO cursor
LLVOPartGroup::sVBSlotCursor = 0;
const F32 dt = llmin(update_timer.getElapsedTimeAndResetF32(), 0.1f);

View File

@@ -165,7 +165,8 @@ LLGLSLShader gUnderWaterProgram(LLViewerShaderMgr::SHADER_WATER);
//interface shaders
LLGLSLShader gHighlightProgram(LLViewerShaderMgr::SHADER_INTERFACE); //Not in mShaderList
LLGLSLShader gHighlightNormalProgram(LLViewerShaderMgr::SHADER_INTERFACE);
LLGLSLShader gHighlightSpecularProgram(LLViewerShaderMgr::SHADER_INTERFACE);
//avatar shader handles
LLGLSLShader gAvatarProgram(LLViewerShaderMgr::SHADER_AVATAR);
LLGLSLShader gAvatarWaterProgram(LLViewerShaderMgr::SHADER_AVATAR);
@@ -2805,6 +2806,26 @@ BOOL LLViewerShaderMgr::loadShadersInterface()
success = gHighlightProgram.createShader(NULL, NULL);
}
if (success)
{
gHighlightNormalProgram.mName = "Highlight Normals Shader";
gHighlightNormalProgram.mShaderFiles.clear();
gHighlightNormalProgram.mShaderFiles.push_back(make_pair("interface/highlightNormV.glsl", GL_VERTEX_SHADER_ARB));
gHighlightNormalProgram.mShaderFiles.push_back(make_pair("interface/highlightF.glsl", GL_FRAGMENT_SHADER_ARB));
gHighlightNormalProgram.mShaderLevel = mVertexShaderLevel[SHADER_INTERFACE];
success = gHighlightNormalProgram.createShader(NULL, NULL);
}
if (success)
{
gHighlightSpecularProgram.mName = "Highlight Spec Shader";
gHighlightSpecularProgram.mShaderFiles.clear();
gHighlightSpecularProgram.mShaderFiles.push_back(make_pair("interface/highlightSpecV.glsl", GL_VERTEX_SHADER_ARB));
gHighlightSpecularProgram.mShaderFiles.push_back(make_pair("interface/highlightF.glsl", GL_FRAGMENT_SHADER_ARB));
gHighlightSpecularProgram.mShaderLevel = mVertexShaderLevel[SHADER_INTERFACE];
success = gHighlightSpecularProgram.createShader(NULL, NULL);
}
if (success)
{
gUIProgram.mName = "UI Shader";

View File

@@ -273,6 +273,8 @@ extern LLGLSLShader gGlowExtractProgram;
//interface shaders
extern LLGLSLShader gHighlightProgram;
extern LLGLSLShader gHighlightNormalProgram;
extern LLGLSLShader gHighlightSpecularProgram;
// avatar shader handles
extern LLGLSLShader gAvatarProgram;

View File

@@ -685,7 +685,7 @@ std::ostream& operator<<(std::ostream &s, const LLViewerWearable &w)
//w.mSaleInfo
s << " Params:" << "\n";
for (LLWearable::visual_param_index_map_t::const_iterator iter = w.mVisualParamIndexMap.begin();
for (LLViewerWearable::visual_param_index_map_t::const_iterator iter = w.mVisualParamIndexMap.begin();
iter != w.mVisualParamIndexMap.end(); ++iter)
{
S32 param_id = iter->first;

View File

@@ -131,6 +131,14 @@
#include <boost/algorithm/string/replace.hpp>
#include <boost/lexical_cast.hpp>
#if LL_DARWIN
size_t strnlen(const char *s, size_t n)
{
const char *p = (const char *)memchr(s, 0, n);
return(p ? p-s : n);
}
#endif
using namespace LLAvatarAppearanceDefines;
//-----------------------------------------------------------------------------
@@ -725,15 +733,11 @@ const LLSD SHClientTagMgr::generateClientTag(const LLVOAvatar* pAvatar) const
if(pAvatar->isFullyLoaded() && pTextureEntry->getGlow() > 0.0)
{
///llinfos << "Using new client identifier." << llendl;
U8 tag_buffer[UUID_BYTES+1];
memset(&tag_buffer, 0, UUID_BYTES);
memcpy(&tag_buffer[0], &id.mData, UUID_BYTES);
tag_buffer[UUID_BYTES] = 0;
U32 tag_len = llmin((S32)strlen((const char*)&tag_buffer[0]), UUID_BYTES);
std::string client((char*)&tag_buffer[0], tag_len);
U32 tag_len = strnlen((const char*)&id.mData[0], UUID_BYTES);
std::string client((const char*)&id.mData[0], tag_len);
LLStringFn::replace_ascii_controlchars(client, LL_UNKNOWN_CHAR);
LLSD info;
info.insert("name", std::string((char*)&tag_buffer[0], tag_len));
info.insert("name", client);
info.insert("color", pTextureEntry->getColor().getValue());
return info;
}

View File

@@ -325,29 +325,55 @@ BOOL LLVOAvatarSelf::buildMenus()
//-------------------------------------------------------------------------
if(gNoRender)
return TRUE;
gAttachBodyPartPieMenus[0] = NULL;
gAttachBodyPartPieMenus[1] = new LLPieMenu(LLTrans::getString("BodyPartsRightArm") + " >");
gAttachBodyPartPieMenus[2] = new LLPieMenu(LLTrans::getString("BodyPartsHead") + " >");
gAttachBodyPartPieMenus[3] = new LLPieMenu(LLTrans::getString("BodyPartsLeftArm") + " >");
gAttachBodyPartPieMenus[4] = NULL;
gAttachBodyPartPieMenus[5] = new LLPieMenu(LLTrans::getString("BodyPartsLeftLeg") + " >");
gAttachBodyPartPieMenus[6] = new LLPieMenu(LLTrans::getString("BodyPartsTorso") + " >");
gAttachBodyPartPieMenus[7] = new LLPieMenu(LLTrans::getString("BodyPartsRightLeg") + " >");
buildContextMenus();
gDetachBodyPartPieMenus[0] = NULL;
gDetachBodyPartPieMenus[1] = new LLPieMenu(LLTrans::getString("BodyPartsRightArm") + " >");
gDetachBodyPartPieMenus[2] = new LLPieMenu(LLTrans::getString("BodyPartsHead") + " >");
gDetachBodyPartPieMenus[3] = new LLPieMenu(LLTrans::getString("BodyPartsLeftArm") + " >");
gDetachBodyPartPieMenus[4] = NULL;
gDetachBodyPartPieMenus[5] = new LLPieMenu(LLTrans::getString("BodyPartsLeftLeg") + " >");
gDetachBodyPartPieMenus[6] = new LLPieMenu(LLTrans::getString("BodyPartsTorso") + " >");
gDetachBodyPartPieMenus[7] = new LLPieMenu(LLTrans::getString("BodyPartsRightLeg") + " >");
init_meshes_and_morphs_menu();
return TRUE;
}
// Convenience function to create context or pie menu with label
static LLContextMenu* make_part_menu(const std::string& label, bool context)
{
return context ? new LLContextMenu(label) : new LLPieMenu(label + " >");
}
void LLVOAvatarSelf::buildContextMenus()
{
gAttachBodyPartPieMenus[0] = gDetachBodyPartPieMenus[0] = NULL;
bool context(gSavedSettings.getBOOL("LiruUseContextMenus"));
std::string label = LLTrans::getString("BodyPartsRightArm");
gAttachBodyPartPieMenus[1] = make_part_menu(label, context);
gDetachBodyPartPieMenus[1] = make_part_menu(label, context);
label = LLTrans::getString("BodyPartsHead");
gAttachBodyPartPieMenus[2] = make_part_menu(label, context);
gDetachBodyPartPieMenus[2] = make_part_menu(label, context);
label = LLTrans::getString("BodyPartsLeftArm");
gAttachBodyPartPieMenus[3] = make_part_menu(label, context);
gDetachBodyPartPieMenus[3] = make_part_menu(label, context);
gAttachBodyPartPieMenus[4] = gDetachBodyPartPieMenus[4] = NULL;
label = LLTrans::getString("BodyPartsLeftLeg");
gAttachBodyPartPieMenus[5] = make_part_menu(label, context);
gDetachBodyPartPieMenus[5] = make_part_menu(label, context);
label = LLTrans::getString("BodyPartsTorso");
gAttachBodyPartPieMenus[6] = make_part_menu(label, context);
gDetachBodyPartPieMenus[6] = make_part_menu(label, context);
label = LLTrans::getString("BodyPartsRightLeg");
gAttachBodyPartPieMenus[7] = make_part_menu(label, context);
gDetachBodyPartPieMenus[7] = make_part_menu(label, context);
for (S32 i = 0; i < 8; i++)
{
if (gAttachBodyPartPieMenus[i])
{
gAttachPieMenu->appendPieMenu( gAttachBodyPartPieMenus[i] );
gAttachPieMenu->appendContextSubMenu( gAttachBodyPartPieMenus[i] );
}
else
{
@@ -379,7 +405,7 @@ BOOL LLVOAvatarSelf::buildMenus()
}
}
if (!attachment_found)
if (!context && !attachment_found)
{
gAttachPieMenu->addSeparator();
}
@@ -387,7 +413,7 @@ BOOL LLVOAvatarSelf::buildMenus()
if (gDetachBodyPartPieMenus[i])
{
gDetachPieMenu->appendPieMenu( gDetachBodyPartPieMenus[i] );
gDetachPieMenu->appendContextSubMenu( gDetachBodyPartPieMenus[i] );
}
else
{
@@ -407,7 +433,7 @@ BOOL LLVOAvatarSelf::buildMenus()
}
}
if (!attachment_found)
if (!context && !attachment_found)
{
gDetachPieMenu->addSeparator();
}
@@ -466,7 +492,7 @@ BOOL LLVOAvatarSelf::buildMenus()
&handle_detach_from_avatar, object_attached, &detach_label, attachment));
}
if (pass == 0)
if (!context && pass == 0)
{
// put separator between non-hud and hud attachments
gAttachSubMenu->addSeparator();
@@ -503,14 +529,17 @@ BOOL LLVOAvatarSelf::buildMenus()
for (std::multimap<S32, S32>::iterator attach_it = attachment_pie_menu_map.begin();
attach_it != attachment_pie_menu_map.end(); ++attach_it)
{
S32 requested_pie_slice = attach_it->first;
S32 attach_index = attach_it->second;
while (cur_pie_slice < requested_pie_slice)
if (!context) // Singu Note: Separators are only needed to keep slices of pies from moving
{
gAttachBodyPartPieMenus[group]->addSeparator();
gDetachBodyPartPieMenus[group]->addSeparator();
cur_pie_slice++;
S32 requested_pie_slice = attach_it->first;
while (cur_pie_slice < requested_pie_slice)
{
gAttachBodyPartPieMenus[group]->addSeparator();
gDetachBodyPartPieMenus[group]->addSeparator();
cur_pie_slice++;
}
}
S32 attach_index = attach_it->second;
LLViewerJointAttachment* attachment = get_if_there(mAttachmentPoints, attach_index, (LLViewerJointAttachment*)NULL);
if (attachment)
@@ -527,14 +556,10 @@ BOOL LLVOAvatarSelf::buildMenus()
gDetachBodyPartPieMenus[group]->addChild(new LLMenuItemCallGL(attachment->getName(),
&handle_detach_from_avatar,
object_attached, attachment));
cur_pie_slice++;
if (!context) cur_pie_slice++;
}
}
}
init_meshes_and_morphs_menu();
return TRUE;
}
void LLVOAvatarSelf::cleanup()

View File

@@ -63,6 +63,7 @@ public:
virtual ~LLVOAvatarSelf();
virtual void markDead();
virtual void initInstance(); // Called after construction to initialize the class.
void buildContextMenus();
void cleanup();
protected:
/*virtual*/ BOOL loadAvatar();

View File

@@ -55,18 +55,18 @@ const F32 MAX_PART_LIFETIME = 120.f;
extern U64 gFrameTime;
LLPointer<LLVertexBuffer> LLVOPartGroup::sVB = NULL;
/*S32 LLVOPartGroup::sVBSlotFree[];
S32* LLVOPartGroup::sVBSlotCursor = NULL;*/
S32 LLVOPartGroup::sVBSlotCursor = 0;
S32 LLVOPartGroup::sVBSlotFree[];
S32* LLVOPartGroup::sVBSlotCursor = NULL;
//S32 LLVOPartGroup::sVBSlotCursor = 0;
void LLVOPartGroup::initClass()
{
/*for (S32 i = 0; i < LL_MAX_PARTICLE_COUNT; ++i)
for (S32 i = 0; i < LL_MAX_PARTICLE_COUNT; ++i)
{
sVBSlotFree[i] = i;
}
sVBSlotCursor = sVBSlotFree;*/
sVBSlotCursor = sVBSlotFree;
}
//static
@@ -131,22 +131,22 @@ void LLVOPartGroup::destroyGL()
//static
S32 LLVOPartGroup::findAvailableVBSlot()
{
if (sVBSlotCursor >= /*sVBSlotFree+*/LL_MAX_PARTICLE_COUNT)
if (sVBSlotCursor >= sVBSlotFree+LL_MAX_PARTICLE_COUNT)
{ //no more available slots
return -1;
}
/*S32 ret = *sVBSlotCursor;
S32 ret = *sVBSlotCursor;
sVBSlotCursor++;
return ret;*/
return ret;
return sVBSlotCursor++;
//return sVBSlotCursor++;
}
bool ll_is_part_idx_allocated(S32 idx, S32* start, S32* end)
{
/*while (start < end)
while (start < end)
{
if (*start == idx)
{ //not allocated (in free list)
@@ -156,14 +156,14 @@ bool ll_is_part_idx_allocated(S32 idx, S32* start, S32* end)
}
//allocated (not in free list)
return true;*/
return false;
return true;
//return false;
}
//static
void LLVOPartGroup::freeVBSlot(S32 idx)
{
/*llassert(idx < LL_MAX_PARTICLE_COUNT && idx >= 0);
llassert(idx < LL_MAX_PARTICLE_COUNT && idx >= 0);
llassert(sVBSlotCursor > sVBSlotFree);
llassert(ll_is_part_idx_allocated(idx, sVBSlotCursor, sVBSlotFree+LL_MAX_PARTICLE_COUNT));
@@ -171,7 +171,7 @@ void LLVOPartGroup::freeVBSlot(S32 idx)
{
sVBSlotCursor--;
*sVBSlotCursor = idx;
}*/
}
}
LLVOPartGroup::LLVOPartGroup(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp)
@@ -716,7 +716,8 @@ void LLVOPartGroup::getGeometry(S32 idx,
*colorsp++ = color;
*colorsp++ = color;
//if (pglow.mV[3] || part.mGlow.mV[3])
//Only add emissive attributes if glowing (doing it for all particles is INCREDIBLY inefficient as it leads to a second, slower, render pass.)
if (pglow.mV[3] > F_ALMOST_ZERO || part.mGlow.mV[3] > F_ALMOST_ZERO)
{ //only write glow if it is not zero
*emissivep++ = pglow;
*emissivep++ = pglow;
@@ -881,7 +882,7 @@ void LLParticlePartition::getGeometry(LLSpatialGroup* group)
LLFace* facep = *i;
LLAlphaObject* object = (LLAlphaObject*) facep->getViewerObject();
//if (!facep->isState(LLFace::PARTICLE))
if (!facep->isState(LLFace::PARTICLE))
{ //set the indices of this face
S32 idx = LLVOPartGroup::findAvailableVBSlot();
if (idx >= 0)
@@ -890,7 +891,7 @@ void LLParticlePartition::getGeometry(LLSpatialGroup* group)
facep->setIndicesIndex(idx*6);
facep->setVertexBuffer(LLVOPartGroup::sVB);
facep->setPoolType(LLDrawPool::POOL_ALPHA);
//facep->setState(LLFace::PARTICLE);
facep->setState(LLFace::PARTICLE);
}
else
{

View File

@@ -48,9 +48,9 @@ public:
//vertex buffer for holding all particles
static LLPointer<LLVertexBuffer> sVB;
/*static S32 sVBSlotFree[LL_MAX_PARTICLE_COUNT];
static S32* sVBSlotCursor;*/
static S32 sVBSlotCursor;
static S32 sVBSlotFree[LL_MAX_PARTICLE_COUNT];
static S32* sVBSlotCursor;
//static S32 sVBSlotCursor;
static void initClass();
static void restoreGL();

View File

@@ -84,6 +84,7 @@ extern LLColor4U MAX_WATER_COLOR;
// <FS:CR> Aurora Sim
//const U32 LLWorld::mWidth = 256;
U32 LLWorld::mWidth = 256;
U32 LLWorld::mLength = 256;
// </FS:CR> Aurora Sim
// meters/point, therefore mWidth * mScale = meters per edge
@@ -152,9 +153,10 @@ void LLWorld::destroyClass()
}
}
void LLWorld::setRegionWidth(const U32 width)
void LLWorld::setRegionSize(const U32& width, const U32& length)
{
mWidth = width ? width : 256; // Width of 0 is really 256
mLength = length ? length : 256; // Length of 0 is really 256
mWidthInMeters = mWidth * mScale;
}
@@ -247,7 +249,7 @@ LLViewerRegion* LLWorld::addRegion(const U64 &region_handle, const LLHost &host)
adj_x = region_x + width * gDirAxes[dir][0];
adj_y = region_y + width * gDirAxes[dir][1];
if (mWidth == 256)
if (mWidth == 256 && mLength == 256)
{
to_region_handle(adj_x, adj_y, &adj_handle);
neighborp = getRegionFromHandle(adj_handle);
@@ -1361,7 +1363,9 @@ void process_enable_simulator(LLMessageSystem *msg, void **user_data)
// <FS:CR> Aurora Sim
U32 region_size_x = 256;
msg->getU32Fast(_PREHASH_SimulatorInfo, _PREHASH_RegionSizeX, region_size_x);
LLWorld::getInstance()->setRegionWidth(region_size_x);
U32 region_size_y = 256;
msg->getU32Fast(_PREHASH_SimulatorInfo, _PREHASH_RegionSizeY, region_size_y);
LLWorld::getInstance()->setRegionSize(region_size_x, region_size_y);
// </FS:CR> Aurora Sim
LLWorld::getInstance()->addRegion(handle, sim);

View File

@@ -115,7 +115,7 @@ public:
LLVector3 resolveLandNormalGlobal(const LLVector3d &position); // absolute frame
// update region size
void setRegionWidth(const U32 width = 0);
void setRegionSize(const U32& width = 0, const U32& length = 0);
U32 getRegionWidthInPoints() const { return mWidth; }
F32 getRegionScale() const { return mScale; }
@@ -188,6 +188,7 @@ private:
// <FS:CR> Aurora Sim
//static const U32 mWidth;
static U32 mWidth;
static U32 mLength;
// </FS:CR> Aurora Sim
// meters/point, therefore mWidth * mScale = meters per edge

View File

@@ -109,6 +109,8 @@
#include "llwaterparammanager.h"
#include "llspatialpartition.h"
#include "llmutelist.h"
#include "llfloatertools.h"
#include "llpanelface.h"
// [RLVa:KB] - Checked: 2011-05-22 (RLVa-1.3.1a)
#include "rlvhandler.h"
@@ -319,6 +321,7 @@ BOOL LLPipeline::sRenderParticleBeacons = FALSE;
BOOL LLPipeline::sRenderSoundBeacons = FALSE;
BOOL LLPipeline::sRenderBeacons = FALSE;
BOOL LLPipeline::sRenderHighlight = TRUE;
LLRender::eTexIndex LLPipeline::sRenderHighlightTextureChannel = LLRender::DIFFUSE_MAP;
BOOL LLPipeline::sForceOldBakedUpload = FALSE;
S32 LLPipeline::sUseOcclusion = 0;
BOOL LLPipeline::sDelayVBUpdate = FALSE;
@@ -3839,6 +3842,8 @@ void LLPipeline::postSort(LLCamera& camera)
{
mSelectedFaces.clear();
LLPipeline::setRenderHighlightTextureChannel(gFloaterTools->getPanelFace()->getTextureChannelToEdit());
// Draw face highlights for selected faces.
if (LLSelectMgr::getInstance()->getTEMode())
{
@@ -3938,13 +3943,14 @@ void LLPipeline::renderHighlights()
gGL.diffuseColor4f(1,1,1,0.5f);
}
if (hasRenderDebugFeatureMask(RENDER_DEBUG_FEATURE_SELECTED))
if (hasRenderDebugFeatureMask(RENDER_DEBUG_FEATURE_SELECTED) && !mFaceSelectImagep)
{
mFaceSelectImagep = LLViewerTextureManager::getFetchedTexture(IMG_FACE_SELECT);
}
if (hasRenderDebugFeatureMask(RENDER_DEBUG_FEATURE_SELECTED) && (sRenderHighlightTextureChannel == LLRender::DIFFUSE_MAP))
{
// Make sure the selection image gets downloaded and decoded
if (!mFaceSelectImagep)
{
mFaceSelectImagep = LLViewerTextureManager::getFetchedTexture(IMG_FACE_SELECT);
}
mFaceSelectImagep->addTextureStats((F32)MAX_IMAGE_AREA);
U32 count = mSelectedFaces.size();
@@ -3982,6 +3988,67 @@ void LLPipeline::renderHighlights()
{
gHighlightProgram.unbind();
}
if (hasRenderDebugFeatureMask(RENDER_DEBUG_FEATURE_SELECTED) && (sRenderHighlightTextureChannel == LLRender::NORMAL_MAP))
{
color.setVec(1.0f, 0.5f, 0.5f, 0.5f);
if ((LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_INTERFACE) > 0))
{
gHighlightNormalProgram.bind();
gGL.diffuseColor4f(1,1,1,0.5f);
}
mFaceSelectImagep->addTextureStats((F32)MAX_IMAGE_AREA);
U32 count = mSelectedFaces.size();
for (U32 i = 0; i < count; i++)
{
LLFace *facep = mSelectedFaces[i];
if (!facep || facep->getDrawable()->isDead())
{
llerrs << "Bad face on selection" << llendl;
return;
}
facep->renderSelected(mFaceSelectImagep, color);
}
if ((LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_INTERFACE) > 0))
{
gHighlightNormalProgram.unbind();
}
}
if (hasRenderDebugFeatureMask(RENDER_DEBUG_FEATURE_SELECTED) && (sRenderHighlightTextureChannel == LLRender::SPECULAR_MAP))
{
color.setVec(0.0f, 0.3f, 1.0f, 0.8f);
if ((LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_INTERFACE) > 0))
{
gHighlightSpecularProgram.bind();
gGL.diffuseColor4f(1,1,1,0.5f);
}
mFaceSelectImagep->addTextureStats((F32)MAX_IMAGE_AREA);
U32 count = mSelectedFaces.size();
for (U32 i = 0; i < count; i++)
{
LLFace *facep = mSelectedFaces[i];
if (!facep || facep->getDrawable()->isDead())
{
llerrs << "Bad face on selection" << llendl;
return;
}
facep->renderSelected(mFaceSelectImagep, color);
}
if ((LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_INTERFACE) > 0))
{
gHighlightSpecularProgram.unbind();
}
}
}
//debug use
@@ -6399,6 +6466,12 @@ BOOL LLPipeline::getRenderHighlights(void*)
return sRenderHighlight;
}
// static
void LLPipeline::setRenderHighlightTextureChannel(LLRender::eTexIndex channel)
{
sRenderHighlightTextureChannel = channel;
}
LLVOPartGroup* LLPipeline::lineSegmentIntersectParticle(const LLVector4a& start, const LLVector4a& end, LLVector4a* intersection,
S32* face_hit)
{
@@ -7921,7 +7994,8 @@ void LLPipeline::renderDeferredLighting()
mDeferredLight.flush();
}
if (RenderDeferredSSAO)
static const LLCachedControl<bool> SHAlwaysSoftenShadows("SHAlwaysSoftenShadows",true);
if (RenderDeferredSSAO || (RenderShadowDetail > 0 && SHAlwaysSoftenShadows))
{ //soften direct lighting lightmap
LLFastTimer ftm(FTM_SOFTEN_SHADOW);
//blur lightmap
@@ -9642,7 +9716,7 @@ void LLPipeline::renderShadow(glh::matrix4f& view, glh::matrix4f& proj, LLCamera
renderMaskedObjects(LLRenderPass::PASS_ALPHA_MASK, mask, TRUE, TRUE);
renderMaskedObjects(LLRenderPass::PASS_FULLBRIGHT_ALPHA_MASK, mask, TRUE, TRUE);
gDeferredShadowAlphaMaskProgram.setMinimumAlpha(0.598f);
//renderObjects(LLRenderPass::PASS_ALPHA, mask, TRUE, TRUE);
renderObjects(LLRenderPass::PASS_ALPHA, mask, TRUE, TRUE);
mask = mask & ~LLVertexBuffer::MAP_TEXTURE_INDEX;

View File

@@ -413,6 +413,7 @@ public:
static void setRenderHighlights(BOOL val);
static void toggleRenderHighlights(void* data);
static BOOL getRenderHighlights(void* data);
static void setRenderHighlightTextureChannel(LLRender::eTexIndex channel); // sets which UV setup to display in highlight overlay
static void updateRenderDeferred();
static void refreshCachedSettings();
@@ -837,6 +838,10 @@ public:
static BOOL sRenderBeacons;
static BOOL sRenderHighlight;
// Determines which set of UVs to use in highlight display
//
static LLRender::eTexIndex sRenderHighlightTextureChannel;
//debug use
static U32 sCurRenderPoolType ;
};

View File

@@ -138,8 +138,8 @@ TOOLMEDIAOPEN CURSOR "toolmediaopen.cur"
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,5,0,0
PRODUCTVERSION 1,5,0,0
FILEVERSION 1,8,4,5433
PRODUCTVERSION 1,8,4,5433
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@@ -156,12 +156,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "Siana Gearz"
VALUE "FileDescription", "Singularity Viewer"
VALUE "FileVersion", "1.5.0.0"
VALUE "FileVersion", "1.8.4.5433"
VALUE "InternalName", "Second Life"
VALUE "LegalCopyright", "Copyright <20> 2001-2010, Linden Research, Inc., Copyright 2010 Siana Gearz"
VALUE "OriginalFilename", "singularity.exe"
VALUE "OriginalFilename", "SingularityViewer.exe"
VALUE "ProductName", "Singularity Viewer"
VALUE "ProductVersion", "1.5.0.0"
VALUE "ProductVersion", "1.8.4.5433"
END
END
BLOCK "VarFileInfo"

View File

@@ -138,8 +138,8 @@ TOOLMEDIAOPEN CURSOR "toolmediaopen.cur"
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,5,0,0
PRODUCTVERSION 1,5,0,0
FILEVERSION 1,8,4,5433
PRODUCTVERSION 1,8,4,5433
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@@ -156,12 +156,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "Siana Gearz"
VALUE "FileDescription", "Singularity Viewer"
VALUE "FileVersion", "1.5.0.0"
VALUE "FileVersion", "1.8.4.5433"
VALUE "InternalName", "Second Life"
VALUE "LegalCopyright", "Copyright <20> 2001-2010, Linden Research, Inc., Copyright 2010 Siana Gearz"
VALUE "OriginalFilename", "singularity.exe"
VALUE "OriginalFilename", "SingularityViewer.exe"
VALUE "ProductName", "Singularity Viewer"
VALUE "ProductVersion", "1.5.0.0"
VALUE "ProductVersion", "1.8.4.5433"
END
END
BLOCK "VarFileInfo"

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 414 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 602 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 624 B

View File

@@ -5,8 +5,8 @@
<menu_item_call label="Berühren" name="Attachment Object Touch"/>
<menu_item_call label="Aufstehen" name="Stand Up"/>
<menu_item_call label="Abnehmen" name="Detach"/>
<pie_menu label="Werkzeuge &gt;" name="Tools &gt;">
<pie_menu label="Skripte &gt;" name="ScriptsMenu">
<pie_menu label="Werkzeuge" name="Tools">
<pie_menu label="Skripte" name="ScriptsMenu">
<menu_item_call label="Erzeuge Mono" name="CompileMono"/>
<menu_item_call label="Erzeuge LSL" name="CompileLSL"/>
<menu_item_call label="Zurücksetzen" name="Reset Scripts"/>

View File

@@ -6,11 +6,11 @@
<menu_item_call label="Melden..." name="abuse"/>
<menu_item_call label="Freund hinzufügen..." name="Add Friend"/>
<menu_item_call label="Zahlen..." name="Pay..."/>
<pie_menu label="Mehr &gt;" name="More &gt;">
<pie_menu label="Mehr" name="More">
<menu_item_call label="Einfrieren..." name="Freeze..."/>
<menu_item_call label="Karte geben" name="Give Card"/>
<menu_item_call label="Gruppeneinladung..." name="Invite..."/>
<pie_menu label="Werkzeuge &gt;" name="Tools &gt;">
<pie_menu label="Werkzeuge" name="Tools">
<menu_item_call label="S. Count" name="ScriptCount"/>
<menu_item_call label="UUID kopieren" name="CopyUUID"/>
<menu_item_call label="Client ID" name="ClientID"/>

View File

@@ -6,16 +6,16 @@
<menu_item_call label="Hier sitzen" name="Object Sit"/>
<menu_item_call label="Nehmen" name="Pie Object Take"/>
<menu_item_call label="Zahlen..." name="Pay..."/>
<pie_menu label="Mehr &gt;" name="More &gt;">
<pie_menu label="Mehr" name="More">
<menu_item_call label="Löschen" name="Delete"/>
<menu_item_call label="Anziehen" name="Wear"/>
<menu_item_call label="Kopie nehmen" name="Take Copy"/>
<pie_menu label="HUD anhängen &gt;" name="Object Attach HUD"/>
<pie_menu label="Anhängen &gt;" name="Object Attach"/>
<pie_menu label="HUD anhängen" name="Object Attach HUD"/>
<pie_menu label="Anhängen" name="Object Attach"/>
<menu_item_call label="Zurückgeben..." name="Return..."/>
<pie_menu label="Mehr &gt;" name="Rate Menu">
<pie_menu label="Mehr" name="Rate Menu">
<pie_menu label="Werkzeuge &gt;" name="Rate Menu">
<pie_menu label="Werkzeuge" name="Rate Menu">
<menu_item_call label="Zerstören" name="Destroy"/>
<menu_item_call label="Explode" name="Explode"/>
<menu_item_call label="Messen" name="Measure"/>
@@ -29,11 +29,11 @@
<menu_item_call label="Untersuchen" name="Object Inspect"/>
<menu_item_call label="Nicht anzeigen" name="Derender"/>
<menu_item_call label="Melden..." name="Report Abuse..."/>
<pie_menu label="Pathfinding &gt;" name="PF Menu">
<pie_menu label="Pathfinding" name="PF Menu">
<menu_item_call label="In Linksets anzeigen" name="show_in_linksets"/>
<menu_item_call label="In Figuren anzeigen" name="show_in_characters"/>
</pie_menu>
<pie_menu label="Skripte &gt;" name="ScriptsMenu">
<pie_menu label="Skripte" name="ScriptsMenu">
<menu_item_call label="Erzeuge Mono" name="CompileMono"/>
<menu_item_call label="Erzeuge LSL" name="CompileLSL"/>
<menu_item_call label="Zurücksetzen" name="Reset Scripts"/>

View File

@@ -2,15 +2,15 @@
<pie_menu name="Self Pie">
<menu_item_call label="Profil..." name="Profile..."/>
<menu_item_call label="Gruppen..." name="Groups..."/>
<pie_menu label="Ausziehen &gt;" name="Take Off &gt;">
<pie_menu label="Kleidung &gt;" name="Clothes &gt;">
<pie_menu label="Ausziehen" name="Take Off">
<pie_menu label="Kleidung" name="Clothes">
<menu_item_call label="Hemd" name="Shirt"/>
<menu_item_call label="Hose" name="Pants"/>
<menu_item_call label="Schuhe" name="Shoes"/>
<menu_item_call label="Socken" name="Socks"/>
<menu_item_call label="Jacke" name="Jacket"/>
<menu_item_call label="Handschuhe" name="Gloves"/>
<pie_menu label="Mehr &gt;" name="More &gt;">
<pie_menu label="Mehr" name="More">
<menu_item_call label="Unterhemd" name="Self Undershirt"/>
<menu_item_call label="Alle Kleider" name="All Clothes"/>
@@ -21,13 +21,13 @@
</pie_menu>
<menu_item_call label="Rock" name="Skirt"/>
</pie_menu>
<pie_menu label="HUD &gt;" name="Object Detach HUD"/>
<pie_menu label="HUD" name="Object Detach HUD"/>
<pie_menu label="Abnehmen &gt;" name="Object Detach"/>
<pie_menu label="Abnehmen" name="Object Detach"/>
<menu_item_call label="Alles abnehmen" name="Detach All"/>
</pie_menu>
<pie_menu label="Werkzeuge &gt;" name="Tools &gt;">
<pie_menu label="Werkzeuge" name="Tools">
<menu_item_call label="Neu laden" name="Reload Textures"/>
<menu_item_call label="Animationen" name="Anims..."/>
<menu_item_call label="S. Count" name="ScriptCount"/>

View File

@@ -536,6 +536,9 @@
left_delta="100" bottom_delta="0" height="16" width="90">
Server: [SIM]
</text>
<text name="price_breakdown" follows="top|left" left="5" bottom_delta="-18" height="16" width="615">
Price Breakdown: Streaming: [CURRENCY] [STREAMING] Physics: [CURRENCY] [PHYSICS] Instances: [CURRENCY] [INSTANCES] Textures: [CURRENCY] [TEXTURES] Model: [CURRENCY] [MODEL]
</text>
<!-- NOTE MESSAGE -->
<text name="warning_title" font="SansSerif" follows="top|left"
@@ -554,7 +557,7 @@
</text>
<text name="status" follows="top|left"
left="5" bottom_delta="-20" height="16" width="615">
left="5" bottom_delta="-18" height="16" width="615">
[STATUS]
</text>
</panel>

View File

@@ -1355,299 +1355,11 @@
bottom_delta="-20"
width="118" />
</panel>
<!-- Texture sub-tab -->
<panel border="true" bottom="-383" follows="left|top|right|bottom" height="367"
label="Texture" left="1" mouse_opaque="false" name="Texture" width="270">
<texture_picker allow_no_texture="true" allow_invisible_texture="true" bottom="-90" can_apply_immediately="true"
default_image_name="Default" follows="left|top" height="80" label="Texture"
left="10" mouse_opaque="true" name="texture control"
tool_tip="Click to choose a picture" width="64" />
<color_swatch border_color="0.45098, 0.517647, 0.607843, 1" bottom="-90"
can_apply_immediately="true" color="1, 1, 1, 1" follows="left|top"
height="80" label="Color" left_delta="90" mouse_opaque="true"
name="colorswatch" tool_tip="Click to open Color Picker" width="64" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-11" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="10" left="180"
mouse_opaque="true" name="color trans" v_pad="0" width="80">
Transparency %
</text>
<spinner bottom_delta="-20" decimal_digits="0" follows="left|top" height="16"
increment="2" initial_val="0" left="180" max_val="100" min_val="0"
mouse_opaque="true" name="ColorTrans" width="80" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom_delta="-12" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="10"
left="180" mouse_opaque="true" name="glow label" v_pad="0" width="80">
Glow
</text>
<spinner bottom_delta="-20" decimal_digits="2" follows="left|top" height="16"
increment="0.1" initial_val="0" left="180" max_val="1"
min_val="0" mouse_opaque="true" name="glow" width="80" />
<check_box bottom_delta="-23" follows="left|top" font="SansSerifSmall" height="16"
initial_value="false" label="Full Bright" left="180" mouse_opaque="true"
name="checkbox fullbright" width="81" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-104" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="10" left="10"
mouse_opaque="true" name="tex gen" v_pad="0" width="90">
Mapping
</text>
<combo_box allow_text_entry="false" bottom_delta="-22" follows="left|top" height="18"
left="10" max_chars="20" mouse_opaque="true" name="combobox texgen"
width="80">
<combo_item name="Default" value="Default">
Default
</combo_item>
<combo_item name="Planar" value="Planar">
Planar
</combo_item>
</combo_box>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-104" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="10" left="100"
mouse_opaque="true" name="label shininess" v_pad="0" width="70">
Shininess
</text>
<combo_box allow_text_entry="false" bottom_delta="-22" follows="left|top" height="18"
left="100" max_chars="20" mouse_opaque="true" name="combobox shininess"
width="70">
<combo_item name="None" value="None">
None
</combo_item>
<combo_item name="Low" value="Low">
Low
</combo_item>
<combo_item name="Medium" value="Medium">
Medium
</combo_item>
<combo_item name="High" value="High">
High
</combo_item>
</combo_box>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-104" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="10" left="180"
mouse_opaque="true" name="label bumpiness" v_pad="0" width="80">
Bumpiness
</text>
<combo_box allow_text_entry="false" bottom_delta="-22" follows="left|top" height="18"
left="180" max_chars="20" mouse_opaque="true" name="combobox bumpiness"
width="80">
<combo_item name="None" value="None">
None
</combo_item>
<combo_item name="Brightness" value="Brightness">
Brightness
</combo_item>
<combo_item name="Darkness" value="Darkness">
Darkness
</combo_item>
<combo_item name="woodgrain" value="woodgrain">
woodgrain
</combo_item>
<combo_item name="bark" value="bark">
bark
</combo_item>
<combo_item name="bricks" value="bricks">
bricks
</combo_item>
<combo_item name="checker" value="checker">
checker
</combo_item>
<combo_item name="concrete" value="concrete">
concrete
</combo_item>
<combo_item name="crustytile" value="crustytile">
crustytile
</combo_item>
<combo_item name="cutstone" value="cutstone">
cutstone
</combo_item>
<combo_item name="discs" value="discs">
discs
</combo_item>
<combo_item name="gravel" value="gravel">
gravel
</combo_item>
<combo_item name="petridish" value="petridish">
petridish
</combo_item>
<combo_item name="siding" value="siding">
siding
</combo_item>
<combo_item name="stonetile" value="stonetile">
stonetile
</combo_item>
<combo_item name="stucco" value="stucco">
stucco
</combo_item>
<combo_item name="suction" value="suction">
suction
</combo_item>
<combo_item name="weave" value="weave">
weave
</combo_item>
</combo_box>
<check_box bottom="-148" follows="left|top" font="SansSerifSmall" height="16"
initial_value="false" enabled="false" label="Align planar textures"
left="8" mouse_opaque="true" name="checkbox planar align" width="160"
tool_tip="Aligns textures on all selected faces to the last selected face. Requires Planar texture mapping." />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-158" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="10" left="10"
mouse_opaque="true" name="tex scale" v_pad="0" width="160">
Repeats per Face
</text>
<spinner bottom="-178" decimal_digits="5" follows="left|top" height="16" increment="0.1"
initial_val="0" label="Horizontal (U)" label_width="90" left="20"
max_val="1000" min_val="0" mouse_opaque="true" name="TexScaleU" width="160" />
<check_box bottom="-179" follows="left|top" font="SansSerifSmall" height="16"
initial_value="false" label="Flip" left_delta="170" mouse_opaque="true"
name="checkbox flip s" width="70" />
<spinner bottom="-196" decimal_digits="5" follows="left|top" height="16" increment="0.1"
initial_val="0" label="Vertical (V)" label_width="90" left="20"
max_val="1000" min_val="0" mouse_opaque="true" name="TexScaleV" width="160" />
<check_box bottom="-197" follows="left|top" font="SansSerifSmall" height="16"
initial_value="false" label="Flip" left_delta="170" mouse_opaque="true"
name="checkbox flip t" width="70" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-208" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="10" left="10"
mouse_opaque="true" name="tex rotate" v_pad="0" width="102">
Rotation (degrees)
</text>
<spinner bottom="-214" decimal_digits="2" follows="left|top" height="16" increment="1"
initial_val="0" left="112" max_val="9999" min_val="-9999"
mouse_opaque="true" name="TexRot" width="68" />
<string name="string repeats per meter">
Repeats Per Meter
</string>
<string name="string repeats per face">
Repeats Per Face
</string>
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-226" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="10" left="10"
mouse_opaque="true" name="rpt" v_pad="0" width="160">
Repeats Per Meter
</text>
<spinner bottom="-232" decimal_digits="1" follows="left|top" height="16" increment="0.1"
initial_val="1" left="112" max_val="10" min_val="0.1" mouse_opaque="true"
name="rptctrl" width="68" />
<button bottom="-232" follows="left|top" font="SansSerifSmall" halign="center"
height="20" label="Apply" label_selected="Apply" left_delta="78"
mouse_opaque="true" name="button apply" scale_image="TRUE" width="68" />
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
bottom="-244" drop_shadow_visible="true" follows="left|top"
font="SansSerifSmall" h_pad="0" halign="left" height="10" left="10"
mouse_opaque="true" name="tex offset" v_pad="0" width="160">
Offset
</text>
<spinner bottom="-264" decimal_digits="4" follows="top" height="16" increment="0.01" initial_val="0" label="Horizontal (U)" label_width="90" left="20"
max_val="1" min_val="-1" mouse_opaque="true" name="TexOffsetU" width="160"/>
<spinner bottom_delta="-18" decimal_digits="4" follows="top" height="16" increment="0.01" initial_val="0" label="Vertical (V)" label_width="90"
left="20" max_val="1" min_val="-1" name="TexOffsetV"
width="160"/>
<text bottom="-244" v_pad="0" drop_shadow_visible="true" follows="left|top" height="10" left="185" width="85" name="textbox params">Texture Params</text>
<button bottom_delta="-24" follows="top|right" font="SansSerifSmall" halign="center"
height="20" label="Copy" left_delta="5" mouse_opaque="true" name="copytextures" enabled="true"
tool_tip="Copy Texture Params from Clipboard" width="68" />
<button bottom_delta="-20" follows="top" height="20" label="Paste" name="pastetextures" tool_tip="Paste Texture Params from Clipboard" width="68" />
<text
type="string"
length="1"
follows="left|top"
height="18"
bottom="-307"
left="10"
top_pad="3"
name="media_tex"
width="190">
Media:
</text>
<panel
border="true"
follows="left|top"
mouse_opaque="false"
background_visible="false"
name="Add_Media"
left="5"
bottom="-358"
height="54"
width="260">
<button
follows="top|left"
height="20"
label="Add"
name="add_media"
tab_stop="false"
top_delta="0"
tool_tip="Add Media"
left="153"
bottom="-25"
width="35">
<button.commit_callback
function="BuildTool.AddMedia"/>
</button>
<button
follows="top|left"
height="20"
label="Rem"
name="delete_media"
tool_tip="Delete this media texture"
left="188"
bottom="-25"
width="40">
<button.commit_callback
function="BuildTool.DeleteMedia"/>
</button>
<button
follows="top|left"
tool_tip="Edit this Media"
height="20"
label=">>"
name="edit_media"
left="228"
bottom="-25"
width="30">
<button.commit_callback
function="BuildTool.EditMedia"/>
</button>
<text
follows="left|top|right"
height="18"
left="10"
bottom="-46"
use_ellipses="true"
read_only="true"
name="media_info"
width="180" />
<web_browser
visible="false"
enabled="false"
border_visible="true"
bottom_delta="0"
follows="top|left"
bottom="-5"
name="title_media"
width="4"
height="4"
start_url="about:blank"
decouple_texture_size="true" />
<button
follows="right|top"
height="20"
label="Align"
left="166"
name="button align"
bottom="-48"
tool_tip="Align media texture (must load first)"
width="80" />
</panel>
<panel
label="Texture"
help_topic="toolbox_texture_tab"
name="Texture"
filename="panel_tools_texture.xml">
</panel>
<panel border="true" bottom="-383" follows="left|top|right|bottom" height="367"
label="Content" left="1" mouse_opaque="false" name="Contents" width="270">

View File

@@ -19,8 +19,8 @@
<on_click function="Attachment.Detach" />
<on_enable function="Attachment.EnableDetach" />
</menu_item_call>
<pie_menu label="Tools &gt;" name="Tools &gt;">
<pie_menu label="Scripts &gt;" name="ScriptsMenu">
<pie_menu label="Tools" name="Tools">
<pie_menu label="Scripts" name="ScriptsMenu">
<menu_item_call mouse_opaque="true" label="Make Mono" name="CompileMono">
<on_click function="Tools.SelectedScriptAction" userdata="compile mono" />
<on_enable function="EditableSelectedMono" />

View File

@@ -21,7 +21,7 @@
<on_click function="PayObject" />
<on_enable function="EnablePayObject" />
</menu_item_call>
<pie_menu label="More &gt;" name="More &gt;">
<pie_menu more="true" label="More" name="More">
<menu_item_call enabled="false" label="Freeze..." mouse_opaque="true" name="Freeze...">
<on_click function="Avatar.Freeze" />
<on_enable function="Avatar.EnableFreezeEject" />
@@ -32,7 +32,7 @@
<menu_item_call enabled="true" label="Group Invite..." mouse_opaque="true" name="Invite...">
<on_click function="Avatar.InviteToGroup" />
</menu_item_call>
<pie_menu label="Tools &gt;" name="Tools &gt;">
<pie_menu label="Tools" name="Tools">
<menu_item_call enabled="false" hidden="false" label="S. Count" mouse_opaque="true" name="ScriptCount">
<on_click function="Object.ScriptCount" />
<on_visible function="Object.VisibleScriptCount" />

View File

@@ -24,7 +24,7 @@
<on_click function="PayObject" />
<on_enable function="EnablePayObject" />
</menu_item_call>
<pie_menu label="More &gt;" name="More &gt;">
<pie_menu more="true" label="More" name="More">
<menu_item_call enabled="false" label="Delete" mouse_opaque="true" name="Delete">
<on_click function="Object.Delete" />
<on_enable function="Object.EnableDelete" />
@@ -37,15 +37,15 @@
<on_click function="Tools.TakeCopy" />
<on_enable function="Tools.EnableTakeCopy" />
</menu_item_call>
<pie_menu label="Attach HUD &gt;" name="Object Attach HUD" />
<pie_menu label="Attach &gt;" name="Object Attach" />
<pie_menu label="Attach HUD" name="Object Attach HUD" />
<pie_menu label="Attach" name="Object Attach" />
<menu_item_call enabled="false" label="Return..." mouse_opaque="true" name="Return...">
<on_click function="Object.Return" />
<on_enable function="Object.EnableReturn" />
</menu_item_call>
<pie_menu label="More &gt;" name="Rate Menu">
<pie_menu more="true" label="More" name="Rate Menu">
<menu_item_separator />
<pie_menu label="Tools &gt;" name="Rate Menu">
<pie_menu label="Tools" name="Rate Menu">
<menu_item_call enabled="false" label="Destroy" mouse_opaque="true" name="Destroy">
<on_click function="Object.Destroy" />
<on_enable function="Object.EnableDestroy" />
@@ -92,7 +92,7 @@
<on_click function="Object.ReportAbuse" />
<on_enable function="Object.EnableReportAbuse" />
</menu_item_call>
<pie_menu label="Pathfinding &gt;" name="PF Menu">
<pie_menu more="true" label="Pathfinding" name="PF Menu">
<menu_item_call label="Show in linksets" name="show_in_linksets">
<on_click function="Pathfinding.Linksets.Select" />
<on_enable function="EnableSelectInPathfindingLinksets"/>
@@ -102,7 +102,7 @@
<on_enable function="EnableSelectInPathfindingCharacters"/>
</menu_item_call>
</pie_menu>
<pie_menu label="Scripts &gt;" name="ScriptsMenu">
<pie_menu label="Scripts" name="ScriptsMenu">
<menu_item_call mouse_opaque="true" label="Make Mono" name="CompileMono">
<on_click function="Tools.SelectedScriptAction" userdata="compile mono" />
<on_enable function="EditableSelectedMono" />

View File

@@ -6,8 +6,8 @@
<menu_item_call enabled="true" label="Groups..." name="Groups...">
<on_click function="ShowAgentGroups" userdata="agent" />
</menu_item_call>
<pie_menu enabled="true" label="Take Off &gt;" name="Take Off &gt;">
<pie_menu enabled="true" label="Clothes &gt;" name="Clothes &gt;">
<pie_menu enabled="true" label="Take Off" name="Take Off">
<pie_menu enabled="true" label="Clothes" name="Clothes">
<menu_item_call bottom="-29" enabled="false" height="19" label="Shirt" left="0"
mouse_opaque="true" name="Shirt" width="118">
<on_click function="Edit.TakeOff" userdata="shirt" />
@@ -38,7 +38,7 @@
<on_click function="Edit.TakeOff" userdata="gloves" />
<on_enable function="Edit.EnableTakeOff" userdata="gloves" />
</menu_item_call>
<pie_menu enabled="true" label="More &gt;" name="More &gt;">
<pie_menu more="true" label="More" name="More">
<menu_item_call bottom="-143" enabled="false" height="19" label="Undershirt" left="0"
mouse_opaque="true" name="Self Undershirt" width="118">
<on_click function="Edit.TakeOff" userdata="undershirt" />
@@ -76,16 +76,16 @@
<on_enable function="Edit.EnableTakeOff" userdata="skirt" />
</menu_item_call>
</pie_menu>
<pie_menu enabled="true" label="HUD &gt;" name="Object Detach HUD" />
<pie_menu enabled="true" label="HUD" name="Object Detach HUD" />
<menu_item_separator />
<pie_menu enabled="true" label="Detach &gt;" name="Object Detach" />
<pie_menu enabled="true" label="Detach" name="Object Detach" />
<menu_item_separator />
<menu_item_call enabled="true" label="Detach All" name="Detach All">
<on_click function="Self.RemoveAllAttachments" userdata="" />
<on_enable function="Self.EnableRemoveAllAttachments" />
</menu_item_call>
</pie_menu>
<pie_menu label="Tools &gt;" name="Tools &gt;">
<pie_menu label="Tools" name="Tools">
<menu_item_call enabled="true" label="Reload" mouse_opaque="true" name="Reload Textures">
<on_click function="Avatar.ReloadTextures" />
</menu_item_call>

View File

@@ -7702,6 +7702,18 @@ You uploaded a [RESOLUTION] baked texture for '[BODYREGION]' after [TIME] second
You locally updated a [RESOLUTION] baked texture for '[BODYREGION]' after [TIME] seconds.
</notification>
<notification
icon="alertmodal.tga"
name="LivePreviewUnavailable"
type="alert">
We cannot apply this texture immediately because it is no-copy and/or no-transfer.
<usetemplate
ignoretext="Warn me that Apply Texture Immediately mode is not available for no-copy and/or no-transfer textures"
name="okignore"
yestext="OK"/>
</notification>
<notification
icon="notify.tga"
name="FirstAO"

View File

@@ -34,9 +34,10 @@
<check_box bottom_delta="-18" control_name="CloudsEnabled" follows="left|top" initial_value="true" label="Enable Clouds" name="enable_clouds"/>
<check_box bottom_delta="-18" left_delta="10" control_name="SkyUseClassicClouds" follows="top" initial_value="true" label="Enable Classic Clouds" name="enable_classic_clouds"/>
<check_box bottom_delta="-18" left_delta="-10" control_name="SpeedRez" follows="top" initial_value="false" label="Enable speed-rezzing via draw distance stepping" name="speed_rez_check" tool_tip="When active, this will progressively increase your draw distance, which allows closer objects/people to rez first."/>
<spinner bottom_delta="-20" left="30" control_name="SpeedRezInterval" decimal_digits="0" follows="top" height="16" width="230"
<spinner bottom_delta="-16" left="30" control_name="SpeedRezInterval" decimal_digits="0" follows="top" height="16" width="230"
label="Draw distance stepping interval:" label_width="180" max_val="60" min_val="5" initial_val="20" increment="5" name="speed_rez_interval" />
<text bottom_delta="0" left_delta="235" follows="left|top" height="16" name="speed_rez_seconds">seconds</text>
<check_box bottom_delta="-18" control_name="LiruUseContextMenus" follows="top" left="10" name="use_context_menus" label="Use context menus instead of pie menus"/>
<check_box bottom_delta="-18" control_name="UseWebProfiles" follows="top" left="10" name="use_web_profiles" label="Use web profiles instead of legacy v1 profiles" tool_tip="May not be available on certain grids"/>
<check_box bottom_delta="-18" control_name="UseWebSearch" follows="top" left="10" name="use_web_search" label="Use web-based search instead of legacy v1 search" tool_tip="May not be available on certain grids"/>
</panel>

View File

@@ -0,0 +1,800 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
border="true"
follows="all"
height="420"
label="Texture"
left="1"
mouse_opaque="false"
help_topic="toolbox_texture_tab"
name="Texture"
bottom="-383"
width="270">
<panel.string
name="string repeats per meter">
Repeats Per Meter
</panel.string>
<panel.string
name="string repeats per face">
Repeats Per Face
</panel.string>
<text
type="string"
length="1"
follows="left|top"
height="10"
left="10"
name="color label"
bottom="-12"
width="64">
Color
</text>
<!-- label is blank because control places it below the box -->
<color_swatch
can_apply_immediately="true"
follows="left|top"
height="32"
label=""
left="10"
name="colorswatch"
tool_tip="Click to open color picker"
bottom="-48"
width="64" />
<text
type="string"
length="1"
follows="left|top"
height="10"
left_delta="92"
name="color trans"
bottom="-12"
width="90">
Alpha %
</text>
<spinner
decimal_digits="0"
follows="left|top"
height="19"
increment="2"
initial_value="0"
left_delta="-1"
max_val="100"
name="ColorTrans"
bottom_delta="-23"
width="64" />
<text
type="string"
length="1"
follows="left|top"
height="10"
left_delta="95"
name="glow label"
bottom="-12"
width="80">
Glow
</text>
<spinner
decimal_digits="2"
follows="left|top"
height="19"
initial_value="0"
left_delta="-1"
name="glow"
bottom_delta="-23"
width="64" />
<check_box
follows="left|top"
height="19"
label="Full Bright"
left="7"
name="checkbox fullbright"
bottom_delta="-16"
width="81" />
<combo_box
follows="left|top"
height="18"
left="10"
name="combobox matmedia"
bottom_delta="-25"
width="100">
<combo_box.item
label="Materials"
name="Materials"
value="Materials" />
<combo_box.item
label="Media"
name="Media"
value="Media" />
</combo_box>
<combo_box
follows="left|top"
height="18"
left_delta="110"
name="combobox mattype"
bottom_delta="0"
width="140">
<combo_box.item
label="Texture (diffuse)"
name="Texture (diffuse)"
value="Texture (diffuse)" />
<combo_box.item
label="Bumpiness (normal)"
name="Bumpiness (normal)"
value="Bumpiness (normal)" />
<combo_box.item
label="Shininess (specular)"
name="Shininess (specular)"
value="Shininess (specular)" />
</combo_box>
<texture_picker
allow_no_texture="true"
allow_invisible_texture="true"
can_apply_immediately="true"
default_image_name="Default"
fallback_image="materials_ui_x_24.png"
follows="left|top"
height="80"
label="Texture"
left="10"
name="texture control"
tool_tip="Click to choose a picture"
bottom_delta="-90"
width="64" />
<text
type="string"
length="1"
follows="left|top"
height="10"
left_delta="75"
name="label alphamode"
bottom_delta="73"
width="90">
Alpha mode
</text>
<combo_box
follows="left|top"
height="18"
left_delta="-1"
name="combobox alphamode"
bottom_delta="-22"
width="100">
<combo_box.item
label="None"
name="None"
value="None" />
<combo_box.item
label="Alpha blending"
name="Alpha blending"
value="Alpha blending" />
<combo_box.item
label="Alpha masking"
name="Alpha masking"
value="Alpha masking" />
<combo_box.item
label="Emissive mask"
name="Emissive mask"
value="Emissive mask" />
</combo_box>
<text
type="string"
length="1"
follows="left|top"
height="10"
left_delta="1"
name="label maskcutoff"
bottom_delta="-14"
width="90">
Mask cutoff
</text>
<spinner
decimal_digits="0"
min_val="0"
max_val="255"
follows="left|top"
height="19"
initial_value="55"
bottom_delta="-23"
left_delta="-1"
increment="1"
name="maskcutoff"
width="80" />
<texture_picker
allow_no_texture="true"
allow_invisible_texture="true"
can_apply_immediately="true"
default_image_name="Default"
fallback_image="materials_ui_x_24.png"
follows="left|top"
height="80"
label="Texture"
left="10"
name="bumpytexture control"
tool_tip="Click to choose a picture"
bottom_delta="-14"
width="64" />
<text
type="string"
length="1"
follows="left|top"
height="10"
left_delta="75"
name="label bumpiness"
bottom_delta="73"
width="90">
Bumpiness
</text>
<combo_box
follows="left|top"
height="18"
left_delta="-1"
name="combobox bumpiness"
bottom_delta="-22"
width="100">
<combo_box.item
label="None"
name="None"
value="None" />
<combo_box.item
label="Brightness"
name="Brightness"
value="Brightness" />
<combo_box.item
label="Darkness"
name="Darkness"
value="Darkness" />
<combo_box.item
label="woodgrain"
name="woodgrain"
value="woodgrain" />
<combo_box.item
label="bark"
name="bark"
value="bark" />
<combo_box.item
label="bricks"
name="bricks"
value="bricks" />
<combo_box.item
label="checker"
name="checker"
value="checker" />
<combo_box.item
label="concrete"
name="concrete"
value="concrete" />
<combo_box.item
label="crustytile"
name="crustytile"
value="crustytile" />
<combo_box.item
label="cutstone"
name="cutstone"
value="cutstone" />
<combo_box.item
label="discs"
name="discs"
value="discs" />
<combo_box.item
label="gravel"
name="gravel"
value="gravel" />
<combo_box.item
label="petridish"
name="petridish"
value="petridish" />
<combo_box.item
label="siding"
name="siding"
value="siding" />
<combo_box.item
label="stonetile"
name="stonetile"
value="stonetile" />
<combo_box.item
label="stucco"
name="stucco"
value="stucco" />
<combo_box.item
label="suction"
name="suction"
value="suction" />
<combo_box.item
label="weave"
name="weave"
value="weave" />
<!--
NORSPEC-182, ensure item doesn't show up in menu until it should
<combo_box.item
label="Use texture"
name="Use texture"
value="Use texture" />
-->
</combo_box>
<texture_picker
allow_no_texture="true"
allow_invisible_texture="true"
can_apply_immediately="true"
default_image_name="Default"
fallback_image="materials_ui_x_24.png"
follows="left|top"
height="80"
label="Texture"
left="10"
name="shinytexture control"
tool_tip="Click to choose a picture"
bottom_delta="-51"
width="64" />
<text
type="string"
length="1"
follows="left|top"
height="10"
name="label shininess"
left_delta="75"
bottom_delta="73"
width="90">
Shininess
</text>
<combo_box
follows="left|top"
height="18"
left_delta="-1"
name="combobox shininess"
bottom_delta="-22"
width="100">
<combo_box.item
label="None"
name="None"
value="None" />
<combo_box.item
label="Low"
name="Low"
value="Low" />
<combo_box.item
label="Medium"
name="Medium"
value="Medium" />
<combo_box.item
label="High"
name="High"
value="High" />
<!--
NORSPEC-182, ensure item doesn't show up in menu until it should
<combo_box.item
label="Use texture"
name="Use texture"
value="Use texture" />
-->
</combo_box>
<text
type="string"
length="1"
follows="left|top"
height="10"
left_delta="112"
name="label glossiness"
bottom_delta="22"
width="116">
Glossiness
</text>
<spinner
decimal_digits="0"
min_val="0"
max_val="255"
follows="left|top"
height="19"
initial_value="51"
increment="1"
bottom_delta="-25"
left_delta="-1"
name="glossiness"
width="64" />
<text
type="string"
length="1"
follows="left|top"
height="10"
left_delta="1"
name="label environment"
bottom_delta="-11"
width="116">
Environment
</text>
<spinner
decimal_digits="0"
min_val="0"
max_val="255"
increment="1"
follows="left|top"
height="19"
initial_value="0"
bottom_delta="-23"
left_delta="-1"
name="environment"
width="64" />
<text
type="string"
length="1"
follows="left|top"
height="10"
left_delta="-111"
name="label shinycolor"
bottom_delta="23"
width="116">
Color
</text>
<!-- label is blank because control places it below the box -->
<color_swatch
can_apply_immediately="true"
follows="left|top"
height="32"
label=""
left_delta="0"
name="shinycolorswatch"
tool_tip="Click to open color picker"
bottom_delta="-37"
width="100" />
<text
follows="left|top|right"
halign="center"
height="18"
left="10"
bottom_delta="40"
use_ellipses="true"
read_only="true"
name="media_info"
width="250">
URL of chosen media, if any, goes here
</text>
<button
follows="top|left"
height="20"
left="10"
name="add_media"
bottom_delta="-24"
tool_tip="Add Media"
label="Choose..."
width="80">
<button.commit_callback
function="BuildTool.AddMedia"/>
</button>
<button
follows="top|left"
height="20"
left_delta="85"
name="delete_media"
tool_tip="Delete this media texture"
bottom_delta="0"
label="Remove"
width="80">
<button.commit_callback
function="BuildTool.DeleteMedia"/>
</button>
<button
follows="left|top"
height="20"
label="Align"
left_delta="85"
name="button align"
bottom_delta="0"
tool_tip="Align media texture (must load first)"
width="80" />
<check_box
control_name="FSSynchronizeTextureMaps"
follows="top|left"
height="16"
label="Synchronize materials"
left="7"
bottom_delta="-44"
name="checkbox maps sync"
tool_tip="Synchronize texture map parameters"
width="199" />
<text
type="string"
length="1"
follows="left|top"
height="10"
left="10"
name="tex gen"
bottom_delta="-16"
width="140">
Mapping
</text>
<combo_box
follows="left|top"
height="18"
left_delta="84"
name="combobox texgen"
bottom_delta="-6"
width="80">
<combo_box.item
label="Default"
name="Default"
value="Default" />
<combo_box.item
label="Planar"
name="Planar"
value="Planar" />
</combo_box>
<check_box
follows="left|top"
bottom_delta="-2"
height="16"
enabled="false"
label="Align planar"
left_delta="85"
name="checkbox planar align"
width="160"
tool_tip="Aligns textures on all selected faces to the last selected face. Requires Planar texture mapping." />
<spinner
follows="left|top"
height="19"
increment="0.1"
initial_value="0"
label="Horizontal scale"
label_width="170"
left="10"
min_val="-10000"
max_val="10000"
decimal_digits="5"
name="TexScaleU"
bottom_delta="-20"
width="240" />
<button
bottom_delta="2"
follows="top|left"
height="17"
left_delta="241"
image_overlay="Edit_Flip_X.png"
name="flipTextureScaleU"
label=""
tool_tip="Flip"
width="17"/>
<spinner
bottom_delta="-22"
follows="left|top"
height="19"
increment="0.1"
initial_value="0"
label="Vertical scale"
label_width="170"
left="10"
min_val="-10000"
max_val="10000"
decimal_digits="5"
name="TexScaleV"
width="240" />
<button
bottom_delta="2"
follows="top|left"
height="17"
image_overlay="Edit_Flip_X.png"
name="flipTextureScaleV"
label=""
tool_tip="Flip"
left_delta="241"
width="17"/>
<spinner
bottom_delta="-22"
decimal_digits="1"
follows="left|top"
height="19"
increment="0.1"
initial_value=""
label="Repeats per meter"
label_width="170"
left="10"
max_val="100"
min_val="0.1"
name="rptctrl"
width="240" />
<spinner
bottom_delta="-20"
decimal_digits="2"
follows="left|top"
height="19"
increment="1"
initial_value="0"
label="Rotation degrees"
label_width="170"
left="10"
max_val="9999"
min_val="-9999"
name="TexRot"
width="240" />
<spinner
bottom_delta="-20"
follows="left|top"
height="19"
increment="0.01"
initial_value="0"
label="Horizontal offset"
label_width="170"
left="10"
min_val="-1"
decimal_digits="5"
name="TexOffsetU"
width="240"/>
<spinner
bottom_delta="-20"
follows="left|top"
height="19"
increment="0.01"
initial_value="0"
label="Vertical offset"
label_width="170"
left="10"
min_val="-1"
decimal_digits="5"
name="TexOffsetV"
width="240" />
<spinner
follows="left|top"
height="19"
increment="0.01"
initial_value="0"
label="Horizontal scale"
label_width="170"
left="10"
min_val="-10000"
max_val="10000"
decimal_digits="5"
name="bumpyScaleU"
bottom_delta="100"
width="240" />
<spinner
bottom_delta="-20"
follows="left|top"
height="19"
increment="0.01"
initial_value="0"
label="Vertical scale"
label_width="170"
left="10"
min_val="-10000"
max_val="10000"
decimal_digits="5"
name="bumpyScaleV"
width="240" />
<spinner
decimal_digits="2"
follows="left|top"
height="19"
bottom_delta="-40"
increment="1"
initial_value="0"
label="Rotation degrees"
label_width="170"
left="10"
max_val="360"
min_val="0"
name="bumpyRot"
width="240" />
<spinner
bottom_delta="-20"
follows="left|top"
height="19"
increment="0.01"
initial_value="0"
label="Horizontal offset"
label_width="170"
left="10"
min_val="-1"
decimal_digits="5"
name="bumpyOffsetU"
width="240" />
<spinner
bottom_delta="-20"
follows="left|top"
height="19"
increment="0.01"
initial_value="0"
label="Vertical offset"
label_width="170"
left="10"
min_val="-1"
decimal_digits="5"
name="bumpyOffsetV"
width="240" />
<spinner
bottom_delta="100"
follows="left|top"
height="19"
increment="0.01"
initial_value="0"
label="Horizontal scale"
label_width="170"
left="10"
min_val="-10000"
max_val="10000"
decimal_digits="5"
name="shinyScaleU"
width="240" />
<spinner
bottom_delta="-20"
follows="left|top"
height="19"
increment="0.01"
initial_value="0"
label="Vertical scale"
label_width="170"
left="10"
min_val="-10000"
max_val="10000"
decimal_digits="5"
name="shinyScaleV"
width="240" />
<spinner
decimal_digits="2"
follows="left|top"
height="19"
bottom_delta="-40"
increment="1"
initial_value="0"
label="Rotation degrees"
label_width="170"
left="10"
max_val="360"
min_val="0"
name="shinyRot"
width="240" />
<spinner
bottom_delta="-20"
follows="left|top"
height="19"
increment="0.01"
initial_value="0"
label="Horizontal offset"
label_width="170"
left="10"
min_val="-1"
decimal_digits="5"
name="shinyOffsetU"
width="240" />
<spinner
bottom_delta="-20"
follows="left|top"
height="19"
increment="0.01"
initial_value="0"
label="Vertical offset"
label_width="170"
left="10"
min_val="-1"
decimal_digits="5"
name="shinyOffsetV"
width="240" />
<button
follows="right|top"
height="20"
left="50"
bottom_delta="-24"
label="Copy"
name="copytextures"
tool_tip="Copy Texture Params"
width="84" />
<button
follows="right|top"
bottom_delta="0"
height="20"
label="Paste"
name="pastetextures"
tool_tip="Paste Texture Params"
left_delta="84"
width="84" />
<web_browser
visible="false"
enabled="false"
border_visible="true"
bottom_delta="0"
follows="top|left"
left="0"
name="title_media"
width="4"
height="4"
start_url="about:blank"
decouple_texture_size="true" />
</panel>

View File

@@ -305,6 +305,7 @@
<!-- build floater -->
<string name="multiple_textures">Multiple</string>
<string name="use_texture">Use texture</string>
<!-- world map -->
<string name="texture_loading">Loading...</string>
@@ -3466,6 +3467,8 @@ If this message persists, restart your computer.
<string name="MBFrozenCrashed">
[APP_NAME] appears to have frozen or crashed on the previous run.
Would you like to send a crash report?
(You can change the options for crash reporting in Preferences -> General -> Crash reports)
</string>
<string name="MBAlert">Notification</string>
<string name="MBNoDirectX">

View File

@@ -322,6 +322,9 @@
<text name="server_weight">
Servidor: [SIM]
</text>
<text name="price_breakdown" >
Desglose del Precio: Flujo: [CURRENCY] [STREAMING] Físicas: [CURRENCY] [PHYSICS] Instancias: [CURRENCY] [INSTANCES] Texturas: [CURRENCY] [TEXTURES] Modelo: [CURRENCY] [MODEL]
</text>
<!-- NOTE MESSAGE -->
<text name="warning_title">

View File

@@ -563,149 +563,9 @@
<!-- Texture sub-tab -->
<panel label="Textura" name="Texture">
<texture_picker label="Textura" name="texture control" tool_tip="Pulsa para seleccionar una imagen"/>
<color_swatch label="Color" name="colorswatch" tool_tip="Pulsa para abrir el selector de color"/>
<text name="color trans">
Transparencia %
</text>
<spinner name="ColorTrans"/>
<text name="glow label">
Brillo
</text>
<spinner name="glow"/>
<check_box label="Brillo Máximo" name="checkbox fullbright"/>
<text name="tex gen">
Mapeado
</text>
<combo_box name="combobox texgen">
<combo_item name="Default">
Por Defecto
</combo_item>
<combo_item name="Planar">
Plano
</combo_item>
</combo_box>
<text name="label shininess">
Brillantez
</text>
<combo_box name="combobox shininess">
<combo_item name="None">
Ninguna
</combo_item>
<combo_item name="Low">
Baja
</combo_item>
<combo_item name="Medium">
Media
</combo_item>
<combo_item name="High">
Alta
</combo_item>
</combo_box>
<text name="label bumpiness">
Relieve
</text>
<combo_box name="combobox bumpiness">
<combo_item name="None">
Ninguno
</combo_item>
<combo_item name="Brightness">
Brillo
</combo_item>
<combo_item name="Darkness">
Oscuro
</combo_item>
<combo_item name="woodgrain">
Grano de madera
</combo_item>
<combo_item name="bark">
Corteza
</combo_item>
<combo_item name="bricks">
Ladrillos
</combo_item>
<combo_item name="checker">
Cajero
</combo_item>
<combo_item name="concrete">
Cemento
</combo_item>
<combo_item name="crustytile">
Azulejería
</combo_item>
<combo_item name="cutstone">
Piedra cortada
</combo_item>
<combo_item name="discs">
Discos
</combo_item>
<combo_item name="gravel">
grava
</combo_item>
<combo_item name="petridish">
Placa de Petri
</combo_item>
<combo_item name="siding">
Revestimiento
</combo_item>
<combo_item name="stonetile">
Baldosa de Piedra
</combo_item>
<combo_item name="stucco">
Estuco
</combo_item>
<combo_item name="suction">
succión
</combo_item>
<combo_item name="weave">
Tejido
</combo_item>
</combo_box>
<check_box label="Alinear texturas planas" name="checkbox planar align" tool_tip="Alinear las texturas de todas las caras a la última seleccionada. Requiere mapeado plano de textura." />
<text name="tex scale">
Repetic. por cara
</text>
<spinner label="Horizontal (U)" name="TexScaleU"/>
<check_box label="Invertir" name="checkbox flip s"/>
<spinner label="Vertical (V)" name="TexScaleV"/>
<check_box label="Invertir" name="checkbox flip t"/>
<text name="tex rotate">
Rotación (grados)
</text>
<spinner name="TexRot"/>
<string name="string repeats per meter">
Repetic. por Metro
</string>
<string name="string repeats per face">
Repetic. por Cara
</string>
<text name="rpt">
Repetic. por Metro
</text>
<spinner name="rptctrl"/>
<button label="Aplicar" label_selected="Aplicar" name="button apply"/>
<text name="tex offset">
Desplazar
</text>
<spinner label="Horizontal (U)" name="TexOffsetU"/>
<spinner label="Vertical (V)" name="TexOffsetV"/>
<text name="textbox params" left="195" height="10">Parám. Text.
</text>
<button label="Copiar" name="copytextures" tool_tip="Copiar Parámetros de Textura al Portapapeles" left_delta="15" width="50"/>
<button label="Pegar" name="pastetextures" tool_tip="Pegar Parámetros de Textura desde el Portapapeles" width="50"/>
<text name="media_tex">
Media:
</text>
<panel name="Add_Media">
<button label="Añadir" name="add_media" tool_tip="Añadir Media" left="123" bottom="-25" width="52"/>
<button label="Borrar" name="delete_media" tool_tip="Borrar la textura del media" left="178" bottom="-25" width="50"/>
<button tool_tip="Editar el Media" label=">>" name="edit_media" left="228" bottom="-25" width="30"/>
<text left="10" bottom="-46" name="media_info" width="180" />
<web_browser name="title_media" start_url="about:blank" />
<button label="Alinear" left="166" name="button align" bottom="-48" tool_tip="Alinear la textura del media (se debe subir primero)" width="80" />
</panel>
<panel label="Textura" name="Texture" filename="panel_tools_texture.xml">
</panel>
<panel label="Contenido" name="Contents">
<button label="Nuevo Script" label_selected="Nuevo Script" name="button new script"/>
<button label="Permisos..." name="button permissions" />

View File

@@ -11,8 +11,8 @@
<on_enable function="Self.EnableSitOrStand" userdata="Sentarse,Pararse"/>
</menu_item_call>
<menu_item_call label="Quitar" name="Detach"/>
<pie_menu label="Herramientas &gt;" name="Tools &gt;">
<pie_menu label="Scripts &gt;" name="ScriptsMenu">
<pie_menu label="Herramientas" name="Tools">
<pie_menu label="Scripts" name="ScriptsMenu">
<menu_item_call label="Compilar en Mono" name="CompileMono"/>
<menu_item_call label="Compilar en LSL" name="CompileLSL"/>
<menu_item_call label="Reiniciar" name="Reset Scripts"/>

View File

@@ -6,11 +6,11 @@
<menu_item_call label="Denunciar..." name="abuse"/>
<menu_item_call label="Añadir Amigo..." name="Add Friend"/>
<menu_item_call label="Pagar..." name="Pay..."/>
<pie_menu label="Más &gt;" name="More &gt;">
<pie_menu label="Más" name="More">
<menu_item_call label="Congelar..." name="Freeze..."/>
<menu_item_call label="Dar Tarjeta" name="Give Card"/>
<menu_item_call label="Invitar a Grupo..." name="Invite..."/>
<pie_menu label="Herramientas &gt;" name="Tools &gt;">
<pie_menu label="Herramientas" name="Tools">
<menu_item_call label="Contar Scripts" name="ScriptCount"/>
<menu_item_call label="Copiar UUID" name="CopyUUID"/>
<menu_item_call label="ID Cliente" name="ClientID"/>

View File

@@ -14,15 +14,15 @@
<on_enable function="Tools.EnableBuyOrTake" userdata="Comprar,Recoger" name="EnableBuyOrTake"/>
</menu_item_call>
<menu_item_call label="Pagar..." name="Pay..."/>
<pie_menu label="Más &gt;" name="More &gt;">
<pie_menu label="Más" name="More">
<menu_item_call label="Borrar" name="Delete"/>
<menu_item_call label="Vestirse" name="Wear"/>
<menu_item_call label="Recoger una copia" name="Take Copy"/>
<pie_menu label="Anexar HUD &gt;" name="Object Attach HUD" />
<pie_menu label="Anexar &gt;" name="Object Attach" />
<pie_menu label="Anexar HUD" name="Object Attach HUD" />
<pie_menu label="Anexar" name="Object Attach" />
<menu_item_call label="Regresar..." name="Return..."/>
<pie_menu label="Más &gt;" name="Rate Menu">
<pie_menu label="Herramientas &gt;" name="Rate Menu">
<pie_menu label="Más" name="Rate Menu">
<pie_menu label="Herramientas" name="Rate Menu">
<menu_item_call label="Destruir" name="Destroy"/>
<menu_item_call label="Explotar" name="Explode"/>
<menu_item_call label="Medir" name="Measure"/>
@@ -36,11 +36,11 @@
<menu_item_call label="Examinar" name="Object Inspect"/>
<menu_item_call label="Desdibujar" name="Derender"/>
<menu_item_call label="Denunciar..." name="Report Abuse..."/>
<pie_menu label="Pathfinding &gt;" name="PF Menu">
<pie_menu label="Pathfinding" name="PF Menu">
<menu_item_call label="Mostrar e/Conj.Enlaces" name="show_in_linksets"/>
<menu_item_call label="Mostrar en Personajes" name="show_in_characters"/>
</pie_menu>
<pie_menu label="Scripts &gt;" name="ScriptsMenu">
<pie_menu label="Scripts" name="ScriptsMenu">
<menu_item_call label="Compilar Mono" name="CompileMono"/>
<menu_item_call label="Compilar LSL" name="CompileLSL"/>
<menu_item_call label="Reiniciar" name="Reset Scripts"/>

View File

@@ -2,15 +2,15 @@
<pie_menu name="Self Pie">
<menu_item_call label="Perfil..." name="Profile..."/>
<menu_item_call label="Grupos..." name="Groups..."/>
<pie_menu label="Quitarse &gt;" name="Take Off &gt;">
<pie_menu label="Ropa &gt;" name="Clothes &gt;">
<pie_menu label="Quitarse" name="Take Off">
<pie_menu label="Ropa" name="Clothes">
<menu_item_call label="Camisa" name="Shirt"/>
<menu_item_call label="Pantalones" name="Pants"/>
<menu_item_call label="Zapatos" name="Shoes"/>
<menu_item_call label="Calcetines" name="Socks"/>
<menu_item_call label="Chaqueta" name="Jacket"/>
<menu_item_call label="Guantes" name="Gloves"/>
<pie_menu label="Más &gt;" name="More &gt;">
<pie_menu label="Más" name="More">
<menu_item_call label="Camiseta" name="Self Undershirt"/>
<menu_item_separator />
<menu_item_call label="Toda la ropa" name="All Clothes"/>
@@ -21,13 +21,13 @@
</pie_menu>
<menu_item_call label="Falda" name="Skirt"/>
</pie_menu>
<pie_menu label="HUD &gt;" name="Object Detach HUD"/>
<pie_menu label="HUD" name="Object Detach HUD"/>
<menu_item_separator />
<pie_menu label="Quitar &gt;" name="Object Detach" />
<pie_menu label="Quitar" name="Object Detach" />
<menu_item_separator />
<menu_item_call label="Quitar todo" name="Detach All"/>
</pie_menu>
<pie_menu label="Herramientas &gt;" name="Tools &gt;">
<pie_menu label="Herramientas" name="Tools">
<menu_item_call label="Recargar" name="Reload Textures"/>
<menu_item_call label="Animaciones..." name="Anims..."/>
<menu_item_call label="Contar Scripts" name="ScriptCount"/>

View File

@@ -3272,7 +3272,7 @@ Ya existe un grid con el mismo nombre.
</notification>
<notification name="ExportFailed">
Permisos incorrectos para el objeto exportado. Se aborta el proceso de exportado.
Ninguno de los objetos seleccionados es exportable. Se aborta el proceso de exportado.
</notification>
<notification name="ExportPartial">
@@ -4304,7 +4304,13 @@ Has subido una textura base (baked) de [RESOLUTION] para '[BODYREGION]' después
( [EXISTENCE] segundos vivo )
Has actualizado en forma local una textura base (baked) [RESOLUTION] para '[BODYREGION]' después de [TIME] segundos.
</notification>
<notification name="LivePreviewUnavailable">
No se puede aplicar esta textura en forma inmediata ya que es no copiable y/o no trasnferible.
<usetemplate ignoretext="Advertir que el modo Aplicar Textura Inmediatamente no está disponible para texturas no copiables y/o no trasnferibles" name="okignore" yestext="OK"/>
</notification>
<notification name="FirstAO">
Para instrucciones, crea una nueva plantilla en el AO. Usa la barra de herramientas para activar/desactivar el AO.
</notification>

View File

@@ -26,8 +26,9 @@
<text name="speed_rez_seconds">
segundos
</text>
<check_box name="use_context_menus" label="Usar Menús Contextuales en vez de Menús de Circulares"/>
<check_box name="use_web_profiles" label="Usar perfiles web por defecto" tool_tip="Muestra los perfiles como una página web en vez de usar los paneles de estilo V1. Puede no estar disponible en determinados Grids"/>
<check_box name="use_web_search" label="Usar búsqueda basada en web en vez de la búsqueda del visor V1" tool_tip="Puede no estar disponible en determinados Grids"/>
<check_box name="use_web_search" label="Usar búsqueda basada en web en vez de la búsqueda del visor V1" tool_tip="Puede no estar disponible en determinados Grids"/>
</panel>
<!-- =========================== -->
<panel label="Línea de Comandos" name="Command Line">

View File

@@ -0,0 +1,140 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel label="Textura" name="Texture">
<panel.string name="string repeats per meter">
Repeticiones Por Metro
</panel.string>
<panel.string name="string repeats per face">
Repeticiones Por Cara
</panel.string>
<text name="color label">
Color
</text>
<!-- label is blank because control places it below the box -->
<color_swatch label="" name="colorswatch" tool_tip="Pulsa para abrir el selector de color" />
<text name="color trans">
Transparencia %
</text>
<spinner name="ColorTrans"/>
<text name="glow label">
Resplandor
</text>
<spinner name="glow"/>
<check_box label="Brillo Total" name="checkbox fullbright"/>
<combo_box name="combobox matmedia">
<combo_box.item label="Materiales" name="Materials"/>
<combo_box.item label="Media" name="Media"/>
</combo_box>
<combo_box name="combobox mattype">
<combo_box.item label="Textura (difusa)" name="Texture (diffuse)"/>
<combo_box.item label="Relieve (normal)" name="Bumpiness (normal)"/>
<combo_box.item label="Brillantez (especular)" name="Shininess (specular)"/>
</combo_box>
<texture_picker label="Textura" name="texture control" tool_tip="Pulsa para seleccionar una imagen"/>
<text name="label alphamode">
Modo Alfa
</text>
<combo_box name="combobox alphamode">
<combo_box.item label="Ninguno" name="None"/>
<combo_box.item label="Degradado Alfa" name="Alpha blending"/>
<combo_box.item label="Enmascarado Alfa" name="Alpha masking"/>
<combo_box.item label="Máscara de Emisión" name="Emissive mask"/>
</combo_box>
<text name="label maskcutoff">
Corte de la Máscara
</text>
<spinner name="maskcutoff"/>
<texture_picker label="Textura" name="bumpytexture control" tool_tip="Pulsa para seleccionar una imagen"/>
<text name="label bumpiness">
Relieve
</text>
<combo_box name="combobox bumpiness">
<combo_box.item label="Ninguna" name="None"/>
<combo_box.item label="Brillo" name="Brightness"/>
<combo_box.item label="Oscuro" name="Darkness"/>
<combo_box.item label="grano de Madera" name="woodgrain"/>
<combo_box.item label="corteza" name="bark"/>
<combo_box.item label="ladrillos" name="bricks"/>
<combo_box.item label="cajero" name="checker"/>
<combo_box.item label="cemento" name="concrete"/>
<combo_box.item label="azulejería" name="crustytile"/>
<combo_box.item label="piedra cortada" name="cutstone"/>
<combo_box.item label="discos" name="discs"/>
<combo_box.item label="grava" name="gravel"/>
<combo_box.item label="placa de petri" name="petridish"/>
<combo_box.item label="revestimiento" name="siding"/>
<combo_box.item label="baldosa de piedra" name="stonetile"/>
<combo_box.item label="estuco" name="stucco"/>
<combo_box.item label="succión" name="suction"/>
<combo_box.item label="tejido" name="weave"/>
<!--
NORSPEC-182, ensure item doesn't show up in menu until it should
<combo_box.item label="Usar textura" name="Use texture"/>
-->
</combo_box>
<texture_picker label="Textura" name="shinytexture control" tool_tip="Pulsa para seleccionar una imagen"/>
<text name="label shininess">
Brillantez
</text>
<combo_box name="combobox shininess">
<combo_box.item label="Ninguna" name="None"/>
<combo_box.item label="Baja" name="Low"/>
<combo_box.item label="Media" name="Medium"/>
<combo_box.item label="Alta" name="High"/>
<!--
NORSPEC-182, ensure item doesn't show up in menu until it should
<combo_box.item label="Usar textura" name="Use texture"/>
-->
</combo_box>
<text name="label glossiness">
Brillo
</text>
<spinner name="glossiness"/>
<text name="label environment">
Entorno
</text>
<spinner name="environment"/>
<text name="label shinycolor">
Color
</text>
<!-- label is blank because control places it below the box -->
<color_swatch label="" name="shinycolorswatch" tool_tip="Pulsa para abrir el selector de color"/>
<text name="media_info">
El URL del medio deseado, si hubiera, se coloca aquí
</text>
<button name="add_media" tool_tip="Añadir Medio" label="Seleccionar..."/>
<button name="delete_media" tool_tip="Borrar la textura del medio" label="Borrar"/>
<button label="Alinear" name="button align" tool_tip="Alinear la textura del media (se debe subir primero)"/>
<check_box label="Sincronizar materiales" name="checkbox maps sync" tool_tip="Sincroniza los parámetros del mapa de la textura"/>
<text name="tex gen">
Mapeado
</text>
<combo_box name="combobox texgen">
<combo_box.item label="Predeterminado" name="Default"/>
<combo_box.item label="Plano" name="Planar"/>
</combo_box>
<check_box label="Alinear plano" name="checkbox planar align" tool_tip="Alinear la textura de todas las caras seleccionadas a la última cara seleccionada. Requiere mapeo plano de texturas"/>
<spinner label="Escala Horizontal" name="TexScaleU"/>
<button name="flipTextureScaleU" label="" tool_tip="Voltear"/>
<spinner label="Escala Vertical" name="TexScaleV"/>
<button name="flipTextureScaleV" label="" tool_tip="Voltear"/>
<spinner label="Repeticiones por metro" name="rptctrl"/>
<spinner label="Rotación en grados" name="TexRot"/>
<spinner label="Desplazamiento Horizontal" name="TexOffsetU"/>
<spinner label="Desplazamiento Vertical" name="TexOffsetV"/>
<spinner label="Escala Horizontal" name="bumpyScaleU"/>
<spinner label="Escala Vertical" name="bumpyScaleV"/>
<spinner label="Rotación en grados" name="bumpyRot"/>
<spinner label="Desplazamiento Horizontal" name="bumpyOffsetU"/>
<spinner label="Desplazamiento Vertical" name="bumpyOffsetV"/>
<spinner label="Escala Horizontal" name="shinyScaleU"/>
<spinner label="Escala Vertical" name="shinyScaleV"/>
<spinner label="Rotación en grados" name="shinyRot"/>
<spinner label="Desplazamiento Horizontal" name="shinyOffsetU"/>
<spinner label="Desplazamiento Vertical" name="shinyOffsetV"/>
<button label="Copiar" name="copytextures" tool_tip="Copiar los Parámetros de la Textura"/>
<button label="Pegar" name="pastetextures" tool_tip="Pegar Parámetros de la Textura"/>
<web_browser name="title_media"/>
</panel>

View File

@@ -300,7 +300,8 @@
<!-- build floater -->
<string name="multiple_textures">Múltiple</string>
<string name="use_texture">Usar textura</string>
<!-- world map -->
<string name="texture_loading">Cargando...</string>
<string name="worldmap_offline">Desconectado</string>
@@ -4006,6 +4007,8 @@ Si este mensaje persiste, reinicia tu equipo.
<string name="MBFrozenCrashed">
[APP_NAME] parece haberse congelado o sufrido un fallo en la ejecución anterior.
¿Quieres enviar un reporte de fallos?
(Puedes modificar esta opción de reporte de fallos en Prefencias -> General -> Reporte de Fallos)
</string>
<string name="MBAlert">Notificación</string>
@@ -4843,51 +4846,51 @@ Intenta entrecomillando el camino al editor.
<string name="AIPrefix">"[PREFIX]: "</string>
<!-- AIFile exception alerts -->
<string name="AIFile_mkdir_Failed_to_create_DIRNAME">Failed to create folder [DIRNAME]: [ERROR]</string>
<string name="AIFile_rmdir_Failed_to_remove_DIRNAME">Failed to remove folder [DIRNAME]: [ERROR]</string>
<string name="AIFile_fopen_Failed_to_open_FILENAME">Failed to open file "[FILENAME]": [ERROR]</string>
<string name="AIFile_close_Failed_to_close_file">Failed to close file: [ERROR]</string>
<string name="AIFile_remove_Failed_to_remove_FILENAME">Failed to remove file [FILENAME]: [ERROR]</string>
<string name="AIFile_rename_Failed_to_rename_FILE_to_NEWFILE">Failed to rename file [FILE] to [NEWFILE]: [ERROR]</string>
<string name="AIFile_mkdir_Failed_to_create_DIRNAME">Fallo al crear la carpeta [DIRNAME]: [ERROR]</string>
<string name="AIFile_rmdir_Failed_to_remove_DIRNAME">Fallo al borrar la carpeta [DIRNAME]: [ERROR]</string>
<string name="AIFile_fopen_Failed_to_open_FILENAME">Fallo al abrir el archivo "[FILENAME]": [ERROR]</string>
<string name="AIFile_close_Failed_to_close_file">Fallo al cerrar el archivo: [ERROR]</string>
<string name="AIFile_remove_Failed_to_remove_FILENAME">Fallo al borrar el archivo [FILENAME]: [ERROR]</string>
<string name="AIFile_rename_Failed_to_rename_FILE_to_NEWFILE">Fallo al renombrar el archivo [FILE] como [NEWFILE]: [ERROR]</string>
<!-- AIXMLElement exception alerts -->
<string name="AIXMLElement_attribute_Failed_to_write_DATA">Failed to write '[DATA]', writing attribute data.</string>
<string name="AIXMLElement_child_Bad_ostream">ostream not good after calling child.toXML</string>
<string name="AIXMLElement_write_child_Failed_to_write_DATA">Failed to write '[DATA]', writing child data.</string>
<string name="AIXMLElement_Failed_to_write_DATA">Failed to write '[DATA]', opening new child.</string>
<string name="AIXMLElement_closing_child_Failed_to_write_DATA">Failed to write '[DATA]', closing previous child.</string>
<string name="AIXMLElement_attribute_Failed_to_write_DATA">Fallo al escribir '[DATA]', escribiendo datos de atributos.</string>
<string name="AIXMLElement_child_Bad_ostream">ostream inválido luego de llamar a child.toXML</string>
<string name="AIXMLElement_write_child_Failed_to_write_DATA">Fallo al escribir '[DATA]', escribiendo datos secundarios.</string>
<string name="AIXMLElement_Failed_to_write_DATA">Fallo al escribir '[DATA]', abriendo nuevo dependiente.</string>
<string name="AIXMLElement_closing_child_Failed_to_write_DATA">Fallo al escribir '[DATA]', cerrando dependiente previo.</string>
<!-- AIXMLStream exception alerts -->
<string name="AIXMLStream_fprintf_failed_to_write_xml_header">Failed to write XML header.</string>
<string name="AIXMLStream_fprintf_failed_to_write_xml_header">Fallo al escribir cabecera XML.</string>
<!-- AIXMLParser exception alerts -->
<string name="AIXMLParser_Cannot_parse_FILEDESC_FILENAME">Cannot parse [FILEDESC] "[FILENAME]".</string>
<string name="AIXMLParser_No_root_node_found_in_FILEDESC_FILENAME">No root node found in [FILEDESC] "[FILENAME]".</string>
<string name="AIXMLParser_Missing_header_NAME_invalid_FILEDESC_FILENAME">Missing header '[NAME]' ; invalid [FILEDESC] "[FILENAME]".</string>
<string name="AIXMLParser_Invalid_or_missing_NAME_version_attribute_in_FILEDESC_FILENAME">Invalid or missing [NAME] 'version' attribute in [FILEDESC] "[FILENAME]".</string>
<string name="AIXMLParser_Incompatible_NAME_version_MAJOR_MINOR_in">Incompatible '[NAME]' version, [MAJOR].[MINOR], in [FILEDESC] "[FILENAME]".</string>
<string name="AIXMLParser_Cannot_parse_FILEDESC_FILENAME">No se puede analizar [FILEDESC] "[FILENAME]".</string>
<string name="AIXMLParser_No_root_node_found_in_FILEDESC_FILENAME">No se encontró el nodo raíz en [FILEDESC] "[FILENAME]".</string>
<string name="AIXMLParser_Missing_header_NAME_invalid_FILEDESC_FILENAME">Cabecera no hallada '[NAME]' ; inválido [FILEDESC] "[FILENAME]".</string>
<string name="AIXMLParser_Invalid_or_missing_NAME_version_attribute_in_FILEDESC_FILENAME">Atributo [NAME] 'version' inválido o no hallado en [FILEDESC] "[FILENAME]".</string>
<string name="AIXMLParser_Incompatible_NAME_version_MAJOR_MINOR_in">Versión Incompatible '[NAME]', [MAJOR].[MINOR], en [FILEDESC] "[FILENAME]".</string>
<!-- AIXMLElementParser exception alerts -->
<string name="AIXMLElementParser_read_string_Invalid_MD5_VALUE_in_FILEDESC_FILENAME">Invalid MD5 ([VALUE]) in [FILEDESC] "[FILENAME]".</string>
<string name="AIXMLElementParser_read_string_Invalid_boolean_VALUE_in_FILEDESC_FILENAME">Invalid boolean ([VALUE]) in [FILEDESC] "[FILENAME]".</string>
<string name="AIXMLElementParser_attribute_Missing_NAME_attribute_in_NODENAME_of_FILEDESC_FILENAME">Missing '[NAME]' attribute in [NODENAME] of [FILEDESC] "[FILENAME]".</string>"
<string name="AIXMLElementParser_attribute_Invalid_NAME_attribute_should_be_REQUIRED_in_NODENAME_of_FILEDESC_FILENAME">Invalid '[NAME]' attribute (should be '[REQUIRED]') in [NODENAME] of [FILEDESC] "[FILENAME]".</string>
<string name="AIXMLElementParser_read_child_Invalid_uuid_in_FILEDESC_FILENAME">Invalid UUID in [FILEDESC] "[FILENAME]".</string>
<string name="AIXMLElementParser_read_child_Invalid_date_DATE_in_FILEDESC_FILENAME">Invalid DATE ([DATE]) in [FILEDESC] "[FILENAME]".</string>
<string name="AIXMLElementParser_read_string_Invalid_MD5_VALUE_in_FILEDESC_FILENAME">MD5 Inválido ([VALUE]) en [FILEDESC] "[FILENAME]".</string>
<string name="AIXMLElementParser_read_string_Invalid_boolean_VALUE_in_FILEDESC_FILENAME">Booleano inválido ([VALUE]) en [FILEDESC] "[FILENAME]".</string>
<string name="AIXMLElementParser_attribute_Missing_NAME_attribute_in_NODENAME_of_FILEDESC_FILENAME">Atributo '[NAME]' no hallado en [NODENAME] de [FILEDESC] "[FILENAME]".</string>"
<string name="AIXMLElementParser_attribute_Invalid_NAME_attribute_should_be_REQUIRED_in_NODENAME_of_FILEDESC_FILENAME">Atributo '[NAME]' inválido (debiera ser '[REQUIRED]') en [NODENAME] de [FILEDESC] "[FILENAME]".</string>
<string name="AIXMLElementParser_read_child_Invalid_uuid_in_FILEDESC_FILENAME">UUID Inválido en [FILEDESC] "[FILENAME]".</string>
<string name="AIXMLElementParser_read_child_Invalid_date_DATE_in_FILEDESC_FILENAME">Fecha ([DATE]) inválida en [FILEDESC] "[FILENAME]".</string>
<!-- AIArchetype exception alerts -->
<string name="AIArchetype_archetype_has_no_meta">archetype has no &lt;meta&gt; element.</string>
<string name="AIArchetype_MetaData_archetype_meta_has_no_ATTRIBUTE">archetype &lt;meta&gt; element has no '[ATTRIBUTE]' attribute.</string>
<string name="AIArchetype_archetype_has_no_meta">el arquetipo no tiene el elemento &lt;meta&gt;.</string>
<string name="AIArchetype_MetaData_archetype_meta_has_no_ATTRIBUTE">el elemento &lt;meta&gt; del arquetipo no tiene el atributo '[ATTRIBUTE]'.</string>
<string name="AIXMLdumpArchetypeXMLError">Failure dumping archetype to "[FILE]":</string>
<string name="AIXMLExportSuccess">Successfully exported wearable to "[FILE]".</string>
<string name="AIXMLdumpArchetypeXMLError">Fallo al volcar arquetipo a "[FILE]":</string>
<string name="AIXMLExportSuccess">Se ha exportado satisfactoriamente el objeto vestible a "[FILE]".</string>
<string name="AIXMLExportWriteError">The export to file "[FILE]" failed:</string>
<string name="AIXMLImportRootVersionError">Fallo de Importación: el archivo "[FILE]" contiene datos linden_genepool XML con [TAG] erróneo. Se requiere Versión "[VERSIONMAJOR].0" o inferior.</string>
<string name="AIXMLImportDifferentGrid">La importación se ha realizado con exito, pero ten presente que el objeto vestible fue exportado desde el grid [EXPORTGRID] (y el grid actual es [CURRENTGRID]). ¡No se aplicaron las UUIDs de las Texturas!</string>
<string name="AIXMLImportMixedGrid">La importación se ha realizado con exito, pero ten presente que el objeto vestible fue exportado desde el grid [EXPORTGRID] (y el grid actual es [CURRENTGRID]).¡Se aplicaron las UUIDs de la Texturas pero quizás no existan aquí!</string>
<string name="AIXMLImportEmptyArchetype">Import warning: the file "[FILE]" contains a wearable of the selected type ([TYPE]), but contains no parameters or textures for that type. Nothing was imported.</string>
<string name="AIXMLImportEmptyArchetype">Aviso de Importación: el archivo "[FILE]" contiene seleccionado un objeto vestible del tipo ([TYPE]), pero no contiene parámetros o texturas para dicho tipo. Nada ha sido importado.</string>
<string name="AIXMLImportWearableTypeMismatch">Aviso de Importación: el archivo "[FILE]" no contiene un objeto vestible de tipo [TYPE]. Éste contiene un arquetipo de tipo [ARCHETYPENAME]. Por favor, selecciona el tipo correcto antes de comenzar la importación.</string>
<string name="AIXMLImportError">Failed to import the [TYPE] wearable:</string>
<string name="AIXMLImportNoArchetypeError">No archetype found in wearable import file "[FILE]".</string>
<string name="AIXMLImportError">Fallo al importar el objeto [TYPE] vestible:</string>
<string name="AIXMLImportNoArchetypeError">No se ha encontrado arquetipo en el objeto vestible del archivo de importación "[FILE]".</string>
</strings>

View File

@@ -1,6 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel name="Adv_Settings">
<panel filename="panel_bg_tab.xml"/>
<text name="Camera Preset:">Predet. Cam:</text>
<button label="" name="Rear" tool_tip="Vista Posterior"/>
<button label="" name="Front" tool_tip="Vista Frontal"/>
<button label="" name="Group" tool_tip="Vista Lateral"/>
<slider label="Dist. Dibujo:" name="DrawDistance" tool_tip="Cambiar la distancia máxima de dibujo"/>
<slider label="Partículas:" name="MaxParticleCount" tool_tip="Cantidad de Partículas a Renderizar"/>
<slider label="Max Avs:" name="RenderAvatarMaxVisible" tool_tip="Cuantos avatares se renderizarán en forma completa. Disminuyendo este valor incrementará los FPS en lugares saturados. Requiere que Avatar Impostors esté activado. [Por Defecto 35]"/>

View File

@@ -6,7 +6,7 @@
<menu_item_call label="Signaler" name="abuse"/>
<menu_item_call label="Devenir ami(e)s" name="Add Friend"/>
<menu_item_call label="Payer" name="Pay..."/>
<pie_menu label="Plus &gt;" name="More &gt;">
<pie_menu label="Plus" name="More">
<menu_item_call label="Geler" name="Freeze..."/>
<menu_item_call label="Donner une carte" name="Give Card"/>
<menu_item_call label="Inviter dans le groupe" name="Invite..."/>

View File

@@ -24,7 +24,7 @@
<on_click function="PayObject" />
<on_enable function="EnablePayObject" />
</menu_item_call>
<pie_menu label="Plus &gt;" name="More &gt;">
<pie_menu label="Plus" name="More">
<menu_item_call label="Supprimer" name="Delete">
<on_click function="Object.Delete" />
<on_enable function="Object.EnableDelete" />
@@ -37,15 +37,15 @@
<on_click function="Tools.TakeCopy" />
<on_enable function="Tools.EnableTakeCopy" />
</menu_item_call>
<pie_menu label="Attacher le HUD &gt;" name="Object Attach HUD" />
<pie_menu label="Attacher &gt;" name="Object Attach" />
<pie_menu label="Attacher le HUD" name="Object Attach HUD" />
<pie_menu label="Attacher" name="Object Attach" />
<menu_item_call label="Retourner" name="Return...">
<on_click function="Object.Return" />
<on_enable function="Object.EnableReturn" />
</menu_item_call>
<pie_menu label="Plus &gt;" name="Rate Menu">
<pie_menu label="Plus" name="Rate Menu">
<menu_item_separator />
<pie_menu label="Outils &gt;" name="Rate Menu">
<pie_menu label="Outils" name="Rate Menu">
<menu_item_call label="Detruire" name="Destroy">
<on_click function="Object.Destroy" />
<on_enable function="Object.EnableDestroy" />

View File

@@ -6,30 +6,30 @@
<menu_item_call label="Me lever" name="Stand Up" />
<menu_item_call label="Amis" name="Friends..." />
<menu_item_call label="Gestures" name="Gestures..." />
<pie_menu label="Outils &gt;" name="Tools &gt;">
<pie_menu label="Outils" name="Tools">
<menu_item_call label="Animations" name="Anims..."/>
<menu_item_call label="Script Compte" name="ScriptCount"/>
<menu_item_call label="Debug" name="Debug Layers"/>
<menu_item_call label="Copie UUID" name="CopyUUID"/>
</pie_menu>
<pie_menu label="Enlever &gt;" name="Take Off &gt;">
<pie_menu label="Habits &gt;" name="Clothes &gt;">
<pie_menu label="Enlever" name="Take Off">
<pie_menu label="Habits" name="Clothes">
<menu_item_call label="Chemise" name="Shirt" />
<menu_item_call label="Pantalon" name="Pants" />
<menu_item_call label="Chaussures" name="Shoes" />
<menu_item_call label="Chaussettes" name="Socks" />
<menu_item_call label="Veste" name="Jacket" />
<menu_item_call label="Gants" name="Gloves" />
<pie_menu label="Plus &gt;" name="More &gt;">
<pie_menu label="Plus" name="More">
<menu_item_call label="Tee Shirt" name="Self Undershirt" />
<menu_item_call label="Tous les habits" name="All Clothes" />
<menu_item_call label="Culotte" name="Self Underpants" />
</pie_menu>
<menu_item_call label="Jupe" name="Skirt" />
</pie_menu>
<pie_menu label="HUD &gt;" name="Object Detach HUD"/>
<pie_menu label="HUD" name="Object Detach HUD"/>
<menu_item_separator />
<pie_menu label="D&#xE9;tacher &gt;" name="Object Detach"/>
<pie_menu label="D&#xE9;tacher" name="Object Detach"/>
<menu_item_separator />
<menu_item_call label="D&#xE9;tacher Tout" name="Detach All"/>
</pie_menu>

View File

@@ -72,6 +72,7 @@
<menu_item_check label="Construire" name="Build"/>
<menu_item_check label="Vue au joystick" name="Joystick Flycam"/>
<menu_item_call label="Réinitialiser l'affichage" name="Reset View"/>
<menu_item_check label="Bouger re initialise la cam" name="Motion Resets Camera"/>
<menu_item_call label="Regarder le dernier intervenant" name="Look at Last Chatter"/>
<menu_item_separator label="-----------" name="separator"/>
<menu_item_check label="Barre d'outils" name="Toolbar"/>

View File

@@ -40,10 +40,11 @@
<check_box label="Signale les nouveaux IM entrants" name="chat_steal_focus"/>
<check_box label="Montre la barre du chat local séparée (Déco Reco)" tool_tip="" name="show_local_chat_floater_bar"/>
<check_box label="boutons horizontaux pour les contacts (Déco Reco)" tool_tip="Activé, les boutons amis/groupes seront en bas et horizontaux et non plus verticaux et à droite." name="horiz_butt"/>
<check_box label="Utilise les anciens noms pour la liste des voices actives" tool_tip="Aide à une meilleure modération en ne montrant que le nom àl'ancienne" name="legacy_speaker_names"/>
<check_box label="Boutons sur la même ligne que les noms pour les IMs" name="im_concise_butt"/>
<check_box label="Boutons sur la ligne des noms des chats de groupe" name="group_concise_butt"/>
<check_box label="Boutons sur la ligne de titre des conférences" name="conf_concise_butt"/>
<check_box label="Ouvre les logs avec un <EFBFBD>diteur de texte externe (windows)" name="legacy_log_launch"/>
<check_box label="Ouvre les logs avec un éditeur de texte externe (windows)" name="legacy_log_launch"/>
<check_box label="Désactive le raccourci ouvrant détacher la liste d'amis" name="only_comm"/>
<check_box label="Ecrit en Italiques le /me" name="italicize_actions"/>
</panel>
@@ -94,7 +95,7 @@ Et aussi : #n Pour le nom classique, #d Pour le Display, #r Pour la SLURL de vô
<check_box label="Offres de TP" name="Teleport Offers"/>
<check_box label="Notices de groupes" name="Group Notices"/>
<check_box label="Demande de TP" name="Teleport Requests"/>
<text name="Except those from:">Except<EFBFBD> ceux venant de :</text>
<text name="Except those from:">Excepté ceux venant de :</text>
<check_box label="Mes objets" name="My objects"/>
<check_box label="Mes amis" name="My friends"/>
<check_box label="Active les sons des gestures" name="Enable Gesture Sounds"/>

View File

@@ -2,11 +2,11 @@
<panel name="chat">
<text name="voice_unavailable">Le chat vocal n'est pas disponible</text>
<check_box label="Activer la voix" name="enable_voice_check"/>
<string value="Permet de connecter en m<EFBFBD>me temps plusieurs sessions en voice simultan<EFBFBD>e (d<EFBFBD>co reco)" name="multivoice_label"/>
<string value="Permet de connecter en même temps plusieurs sessions en voice simultanée (deco reco)" name="multivoice_label"/>
<radio_group name="ear_location">
<radio_item name="0">Ecouter depuis la position de la caméra</radio_item>
<radio_item name="1">Ecouter depuis la position de l'avatar</radio_item>
<radio_item name="3">Entendre la voice de maniere <EFBFBD>gale pour tout le monde.</radio_item>
<radio_item name="3">Entendre la voice de maniere égale pour tout le monde.</radio_item>
</radio_group>
<text name="push_to_talk_heading">Appuyer pour parler</text>
<check_box label="Utiliser &#x22;Appuyer pour Parler&#x22; en mode bascule" name="push_to_talk_toggle_check" tool_tip="Ce mode vous permet de contrôler l'ouverture du micro en mode bascule. Cliquez sur la touche de contrôle ou le bouton &#x22;Parler&#x22; pour ouvrir et fermer le micro. Si vous n'êtes pas en mode bascule, le micro n'est ouvert que si vous cliquez et maintenez enfoncés la touche de contrôle ou appuyez sur le bouton &#x22;Parler&#x22;."/>

View File

@@ -6,7 +6,7 @@
<menu_item_call label="Reportar..." name="abuse"/>
<menu_item_call label="Adicionar amigo..." name="Add Friend"/>
<menu_item_call label="Pagar..." name="Pay..."/>
<pie_menu label="Mais &gt;" name="More &gt;">
<pie_menu label="Mais" name="More">
<menu_item_call label="Paralizar..." name="Freeze..."/>
<menu_item_call label="Dar Cartão" name="Give Card"/>
<menu_item_call label="Convidar para o Grupo..." name="Invite..."/>

View File

@@ -6,14 +6,14 @@
<menu_item_call label="Sentar aqui" name="Object Sit"/>
<menu_item_call label="Pegar" name="Pie Object Take"/>
<menu_item_call label="Pagar..." name="Pay..."/>
<pie_menu label="Mais &gt;" name="More &gt;">
<pie_menu label="Mais" name="More">
<menu_item_call label="Apagar" name="Delete"/>
<menu_item_call label="Vestir" name="Wear"/>
<menu_item_call label="Pegar Cópia" name="Take Copy"/>
<pie_menu label="Anexar HUD &gt;" name="Object Attach HUD"/>
<pie_menu label="Anexar &gt;" name="Object Attach"/>
<pie_menu label="Anexar HUD" name="Object Attach HUD"/>
<pie_menu label="Anexar" name="Object Attach"/>
<menu_item_call label="Retornar..." name="Return..."/>
<pie_menu label="Mais &gt;" name="Rate Menu">
<pie_menu label="Mais" name="Rate Menu">
<menu_item_call label="Reportar..." name="Report Abuse..."/>
<menu_item_call label="Silenciar" name="Object Mute"/>
<menu_item_call label="Inspecionar" name="Object Inspect"/>

View File

@@ -6,23 +6,23 @@
<menu_item_call label="Levantar" name="Stand Up" />
<menu_item_call label="Amigos..." name="Friends..." />
<menu_item_call label="Gestos..." name="Gestures..." />
<pie_menu label="Tirar &gt;" name="Take Off &gt;">
<pie_menu label="Roupas &gt;" name="Clothes &gt;">
<pie_menu label="Tirar" name="Take Off">
<pie_menu label="Roupas" name="Clothes">
<menu_item_call label="Camisa" name="Shirt" />
<menu_item_call label="Calça" name="Pants" />
<menu_item_call label="Sapatos" name="Shoes" />
<menu_item_call label="Meias" name="Socks" />
<menu_item_call label="Jaqueta" name="Jacket" />
<menu_item_call label="Luvas" name="Gloves" />
<pie_menu label="Mais &gt;" name="More &gt;">
<pie_menu label="Mais" name="More">
<menu_item_call label="Anágoas" name="Self Undershirt" />
<menu_item_call label="Todas as roupas" name="All Clothes" />
<menu_item_call label="Roupa de baixo" name="Self Underpants" />
</pie_menu>
<menu_item_call label="Saia" name="Skirt" />
</pie_menu>
<pie_menu label="HUD &gt;" name="Object Detach HUD" />
<pie_menu label="Desanexar &gt;" name="Object Detach" />
<pie_menu label="HUD" name="Object Detach HUD" />
<pie_menu label="Desanexar" name="Object Detach" />
<menu_item_call label="Desanexar todos" name="Detach All" />
</pie_menu>
<menu_item_call label="Aparência..." name="Appearance..." />