Merge remote-tracking branch 'singu/master'
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -277,7 +277,7 @@
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>AscentShowOthersTagColor</key>
|
||||
<map>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -73,6 +73,7 @@ private:
|
||||
bool mEnableClassicClouds;
|
||||
bool mSpeedRez;
|
||||
U32 mSpeedRezInterval;
|
||||
bool mUseContextMenus;
|
||||
bool mUseWebProfiles;
|
||||
bool mUseWebSearch;
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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");
|
||||
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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"];
|
||||
|
||||
@@ -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 )
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -273,6 +273,8 @@ extern LLGLSLShader gGlowExtractProgram;
|
||||
|
||||
//interface shaders
|
||||
extern LLGLSLShader gHighlightProgram;
|
||||
extern LLGLSLShader gHighlightNormalProgram;
|
||||
extern LLGLSLShader gHighlightSpecularProgram;
|
||||
|
||||
// avatar shader handles
|
||||
extern LLGLSLShader gAvatarProgram;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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 ®ion_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);
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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 ;
|
||||
};
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
BIN
indra/newview/skins/default/textures/Edit_Flip_X.png
Normal file
BIN
indra/newview/skins/default/textures/Edit_Flip_X.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.7 KiB |
BIN
indra/newview/skins/default/textures/green_checkmark.png
Normal file
BIN
indra/newview/skins/default/textures/green_checkmark.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 414 B |
BIN
indra/newview/skins/default/textures/materials_ui_x_24.png
Normal file
BIN
indra/newview/skins/default/textures/materials_ui_x_24.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 602 B |
BIN
indra/newview/skins/default/textures/red_x.png
Normal file
BIN
indra/newview/skins/default/textures/red_x.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 624 B |
@@ -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 >" name="Tools >">
|
||||
<pie_menu label="Skripte >" 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"/>
|
||||
|
||||
@@ -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 >" name="More >">
|
||||
<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 >" name="Tools >">
|
||||
<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"/>
|
||||
|
||||
@@ -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 >" name="More >">
|
||||
<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 >" name="Object Attach HUD"/>
|
||||
<pie_menu label="Anhängen >" 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 >" name="Rate Menu">
|
||||
<pie_menu label="Mehr" name="Rate Menu">
|
||||
|
||||
<pie_menu label="Werkzeuge >" 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 >" 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 >" 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"/>
|
||||
|
||||
@@ -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 >" name="Take Off >">
|
||||
<pie_menu label="Kleidung >" name="Clothes >">
|
||||
<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 >" name="More >">
|
||||
<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 >" name="Object Detach HUD"/>
|
||||
<pie_menu label="HUD" name="Object Detach HUD"/>
|
||||
|
||||
<pie_menu label="Abnehmen >" 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 >" name="Tools >">
|
||||
<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"/>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -19,8 +19,8 @@
|
||||
<on_click function="Attachment.Detach" />
|
||||
<on_enable function="Attachment.EnableDetach" />
|
||||
</menu_item_call>
|
||||
<pie_menu label="Tools >" name="Tools >">
|
||||
<pie_menu label="Scripts >" 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" />
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
<on_click function="PayObject" />
|
||||
<on_enable function="EnablePayObject" />
|
||||
</menu_item_call>
|
||||
<pie_menu label="More >" name="More >">
|
||||
<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 >" name="Tools >">
|
||||
<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" />
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
<on_click function="PayObject" />
|
||||
<on_enable function="EnablePayObject" />
|
||||
</menu_item_call>
|
||||
<pie_menu label="More >" name="More >">
|
||||
<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 >" name="Object Attach HUD" />
|
||||
<pie_menu label="Attach >" 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 >" name="Rate Menu">
|
||||
<pie_menu more="true" label="More" name="Rate Menu">
|
||||
<menu_item_separator />
|
||||
<pie_menu label="Tools >" 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 >" 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 >" 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" />
|
||||
|
||||
@@ -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 >" name="Take Off >">
|
||||
<pie_menu enabled="true" label="Clothes >" name="Clothes >">
|
||||
<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 >" name="More >">
|
||||
<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 >" name="Object Detach HUD" />
|
||||
<pie_menu enabled="true" label="HUD" name="Object Detach HUD" />
|
||||
<menu_item_separator />
|
||||
<pie_menu enabled="true" label="Detach >" 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 >" name="Tools >">
|
||||
<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>
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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>
|
||||
|
||||
800
indra/newview/skins/default/xui/en-us/panel_tools_texture.xml
Normal file
800
indra/newview/skins/default/xui/en-us/panel_tools_texture.xml
Normal 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>
|
||||
@@ -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">
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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" />
|
||||
|
||||
@@ -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 >" name="Tools >">
|
||||
<pie_menu label="Scripts >" 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"/>
|
||||
|
||||
@@ -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 >" name="More >">
|
||||
<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 >" name="Tools >">
|
||||
<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"/>
|
||||
|
||||
@@ -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 >" name="More >">
|
||||
<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 >" name="Object Attach HUD" />
|
||||
<pie_menu label="Anexar >" 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 >" name="Rate Menu">
|
||||
<pie_menu label="Herramientas >" 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 >" 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 >" 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"/>
|
||||
|
||||
@@ -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 >" name="Take Off >">
|
||||
<pie_menu label="Ropa >" name="Clothes >">
|
||||
<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 >" name="More >">
|
||||
<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 >" name="Object Detach HUD"/>
|
||||
<pie_menu label="HUD" name="Object Detach HUD"/>
|
||||
<menu_item_separator />
|
||||
<pie_menu label="Quitar >" 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 >" name="Tools >">
|
||||
<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"/>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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">
|
||||
|
||||
140
indra/newview/skins/default/xui/es/panel_tools_texture.xml
Normal file
140
indra/newview/skins/default/xui/es/panel_tools_texture.xml
Normal 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>
|
||||
@@ -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 <meta> element.</string>
|
||||
<string name="AIArchetype_MetaData_archetype_meta_has_no_ATTRIBUTE">archetype <meta> element has no '[ATTRIBUTE]' attribute.</string>
|
||||
<string name="AIArchetype_archetype_has_no_meta">el arquetipo no tiene el elemento <meta>.</string>
|
||||
<string name="AIArchetype_MetaData_archetype_meta_has_no_ATTRIBUTE">el elemento <meta> 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>
|
||||
|
||||
@@ -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]"/>
|
||||
|
||||
@@ -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 >" name="More >">
|
||||
<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..."/>
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
<on_click function="PayObject" />
|
||||
<on_enable function="EnablePayObject" />
|
||||
</menu_item_call>
|
||||
<pie_menu label="Plus >" name="More >">
|
||||
<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 >" name="Object Attach HUD" />
|
||||
<pie_menu label="Attacher >" 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 >" name="Rate Menu">
|
||||
<pie_menu label="Plus" name="Rate Menu">
|
||||
<menu_item_separator />
|
||||
<pie_menu label="Outils >" 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" />
|
||||
|
||||
@@ -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 >" name="Tools >">
|
||||
<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 >" name="Take Off >">
|
||||
<pie_menu label="Habits >" name="Clothes >">
|
||||
<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 >" name="More >">
|
||||
<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 >" name="Object Detach HUD"/>
|
||||
<pie_menu label="HUD" name="Object Detach HUD"/>
|
||||
<menu_item_separator />
|
||||
<pie_menu label="Détacher >" name="Object Detach"/>
|
||||
<pie_menu label="Détacher" name="Object Detach"/>
|
||||
<menu_item_separator />
|
||||
<menu_item_call label="Détacher Tout" name="Detach All"/>
|
||||
</pie_menu>
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
@@ -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 "Appuyer pour Parler" 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 "Parler" 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 "Parler"."/>
|
||||
|
||||
@@ -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 >" name="More >">
|
||||
<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..."/>
|
||||
|
||||
@@ -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 >" name="More >">
|
||||
<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 >" name="Object Attach HUD"/>
|
||||
<pie_menu label="Anexar >" 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 >" 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"/>
|
||||
|
||||
@@ -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 >" name="Take Off >">
|
||||
<pie_menu label="Roupas >" name="Clothes >">
|
||||
<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 >" name="More >">
|
||||
<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 >" name="Object Detach HUD" />
|
||||
<pie_menu label="Desanexar >" 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..." />
|
||||
|
||||
Reference in New Issue
Block a user