diff options
Diffstat (limited to 'indra')
51 files changed, 387 insertions, 335 deletions
diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h index 891146691f..f2462ba426 100755 --- a/indra/llcommon/llversionviewer.h +++ b/indra/llcommon/llversionviewer.h @@ -29,7 +29,7 @@ const S32 LL_VERSION_MAJOR = 2; const S32 LL_VERSION_MINOR = 8; -const S32 LL_VERSION_PATCH = 3; +const S32 LL_VERSION_PATCH = 4; const S32 LL_VERSION_BUILD = 0; const char * const LL_CHANNEL = "Project Viewer - Mesh"; diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index 349dbc3405..919364be63 100644 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -2024,8 +2024,17 @@ S32 LLTextBase::getDocIndexFromLocalCoord( S32 local_x, S32 local_y, BOOL round, } else if (hit_past_end_of_line && segmentp->getEnd() >= line_iter->mDocIndexEnd) { - // segment wraps to next line, so just set doc pos to the end of the line - pos = llclamp(line_iter->mDocIndexEnd - 1, 0, getLength()); + if (getLineNumFromDocIndex(line_iter->mDocIndexEnd - 1) == line_iter->mLineNum) + { + // if segment wraps to the next line we should step one char back + // to compensate for the space char between words + // which is removed due to wrapping + pos = llclamp(line_iter->mDocIndexEnd - 1, 0, getLength()); + } + else + { + pos = llclamp(line_iter->mDocIndexEnd, 0, getLength()); + } break; } start_x += text_width; diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 2b38a8028c..2cc7eb6d01 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -4883,7 +4883,7 @@ <key>Type</key> <string>String</string> <key>Value</key> - <string>http://viewer-login.agni.lindenlab.com/</string> + <string/> </map> <key>LosslessJ2CUpload</key> <map> diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl index 60082f40d6..d327216a0c 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl @@ -270,72 +270,41 @@ void main() vec4 diffuse = texture2DRect(diffuseRect, tc); vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy); - calcAtmospherics(pos.xyz, 1.0); + vec3 col; + float bloom = 0.0; + if (diffuse.a < 0.9) + { + calcAtmospherics(pos.xyz, 1.0); + + col = atmosAmbient(vec3(0)); + col += atmosAffectDirectionalLight(max(min(da, 1.0), diffuse.a)); - vec3 col = atmosAmbient(vec3(0)); - col += atmosAffectDirectionalLight(max(min(da, 1.0), diffuse.a)); + col *= diffuse.rgb; - col *= diffuse.rgb; + if (spec.a > 0.0) // specular reflection + { + // the old infinite-sky shiny reflection + // + vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz)); + float sa = dot(refnormpersp, vary_light.xyz); + vec3 dumbshiny = vary_SunlitColor*texture2D(lightFunc, vec2(sa, spec.a)).a; + + // add the two types of shiny together + vec3 spec_contrib = dumbshiny * spec.rgb; + bloom = dot(spec_contrib, spec_contrib); + col += spec_contrib; + } - if (spec.a > 0.0) // specular reflection + col = atmosLighting(col); + col = scaleSoftClip(col); + + col = mix(col.rgb, diffuse.rgb, diffuse.a); + } + else { - // the old infinite-sky shiny reflection - // - vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz)); - float sa = dot(refnormpersp, vary_light.xyz); - vec3 dumbshiny = vary_SunlitColor*texture2D(lightFunc, vec2(sa, spec.a)).a; - - /* - // screen-space cheap fakey reflection map - // - vec3 refnorm = normalize(reflect(vec3(0,0,-1), norm.xyz)); - depth -= 0.5; // unbias depth - // first figure out where we'll make our 2D guess from - vec2 ref2d = (0.25 * screen_res.y) * (refnorm.xy) * abs(refnorm.z) / depth; - // Offset the guess source a little according to a trivial - // checkerboard dither function and spec.a. - // This is meant to be similar to sampling a blurred version - // of the diffuse map. LOD would be better in that regard. - // The goal of the blur is to soften reflections in surfaces - // with low shinyness, and also to disguise our lameness. - float checkerboard = floor(mod(tc.x+tc.y, 2.0)); // 0.0, 1.0 - float checkoffset = (3.0 + (7.0*(1.0-spec.a)))*(checkerboard-0.5); - ref2d += vec2(checkoffset, checkoffset); - ref2d += tc.xy; // use as offset from destination - // Get attributes from the 2D guess point. - // We average two samples of diffuse (not of anything else) per - // pixel to try to reduce aliasing some more. - vec3 refcol = 0.5 * (texture2DRect(diffuseRect, ref2d + vec2(0.0, -checkoffset)).rgb + - texture2DRect(diffuseRect, ref2d + vec2(-checkoffset, 0.0)).rgb); - float refdepth = texture2DRect(depthMap, ref2d).a; - vec3 refpos = getPosition_d(ref2d, refdepth).xyz; - vec3 refn = texture2DRect(normalMap, ref2d).rgb; - refn = normalize(vec3((refn.xy-0.5)*2.0,refn.z)); // unpack norm - // figure out how appropriate our guess actually was - float refapprop = max(0.0, dot(-refnorm, normalize(pos - refpos))); - // darken reflections from points which face away from the reflected ray - our guess was a back-face - //refapprop *= step(dot(refnorm, refn), 0.0); - refapprop = min(refapprop, max(0.0, -dot(refnorm, refn))); // more conservative variant - // get appropriate light strength for guess-point. - // reflect light direction to increase the illusion that - // these are reflections. - vec3 reflight = reflect(lightnorm.xyz, norm.xyz); - float reflit = max(dot(refn, reflight.xyz), 0.0); - // apply sun color to guess-point, dampen according to inappropriateness of guess - float refmod = min(refapprop, reflit); - vec3 refprod = vary_SunlitColor * refcol.rgb * refmod; - vec3 ssshiny = (refprod * spec.a); - ssshiny *= 0.3; // dampen it even more - */ - vec3 ssshiny = vec3(0,0,0); - - // add the two types of shiny together - col += (ssshiny + dumbshiny) * spec.rgb; + col = diffuse.rgb; } - - col = atmosLighting(col); - col = scaleSoftClip(col); - + gl_FragColor.rgb = col; - gl_FragColor.a = 0.0; + gl_FragColor.a = bloom; } diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightMSF.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightMSF.glsl index 9dfacfb520..2cce43e2bf 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/softenLightMSF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightMSF.glsl @@ -266,7 +266,7 @@ void main() vec2 tc = vary_fragcoord.xy; ivec2 itc = ivec2(tc); - vec3 fcol = vec3(0,0,0); + vec4 fcol = vec4(0,0,0,0); for (int i = 0; i < samples; ++i) { @@ -280,17 +280,16 @@ void main() float da = max(dot(norm.xyz, vary_light.xyz), 0.0); vec4 diffuse = texelFetch(diffuseRect, itc, i); - if (diffuse.a >= 1.0) - { - fcol += diffuse.rgb; - } - else + vec3 col; + float bloom = 0.0; + + if (diffuse.a < 0.9) { vec4 spec = texelFetch(specularRect, itc, i); calcAtmospherics(pos.xyz, 1.0); - vec3 col = atmosAmbient(vec3(0)); + col = atmosAmbient(vec3(0)); col += atmosAffectDirectionalLight(max(min(da, 1.0), diffuse.a)); col *= diffuse.rgb; @@ -304,15 +303,22 @@ void main() vec3 dumbshiny = vary_SunlitColor*texture2D(lightFunc, vec2(sa, spec.a)).a; // add the two types of shiny together - col += dumbshiny * spec.rgb; + vec3 spec_contrib = dumbshiny * spec.rgb; + bloom = dot(spec_contrib, spec_contrib); + col += spec_contrib; } col = atmosLighting(col); col = scaleSoftClip(col); - fcol += col; + col = mix(col, diffuse.rgb, diffuse.a); } + else + { + col = diffuse.rgb; + } + + fcol += vec4(col, bloom); } - gl_FragColor.rgb = fcol.rgb/samples; - gl_FragColor.a = 0.0; + gl_FragColor = fcol/samples; } diff --git a/indra/newview/app_settings/shaders/class1/interface/solidcolorF.glsl b/indra/newview/app_settings/shaders/class1/interface/solidcolorF.glsl index ae943cc438..5b7cc57574 100644 --- a/indra/newview/app_settings/shaders/class1/interface/solidcolorF.glsl +++ b/indra/newview/app_settings/shaders/class1/interface/solidcolorF.glsl @@ -9,7 +9,7 @@ uniform sampler2D tex0; void main() { - float alpha = texture2D(tex0, gl_TexCoord[0].xy).a; + float alpha = texture2D(tex0, gl_TexCoord[0].xy).a * gl_Color.a; gl_FragColor = vec4(gl_Color.rgb, alpha); } diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinySkinnedV.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinySkinnedV.glsl index f44a5ce32e..5283e80407 100644 --- a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinySkinnedV.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinySkinnedV.glsl @@ -10,8 +10,6 @@ void calcAtmospherics(vec3 inPositionEye); mat4 getObjectSkinnedTransform(); -attribute vec4 object_weight; - void main() { mat4 mat = getObjectSkinnedTransform(); diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightSkinnedV.glsl index e5dafa8c78..1db79791de 100644 --- a/indra/newview/app_settings/shaders/class1/objects/fullbrightSkinnedV.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/fullbrightSkinnedV.glsl @@ -10,8 +10,6 @@ void calcAtmospherics(vec3 inPositionEye); mat4 getObjectSkinnedTransform(); -attribute vec4 object_weight; - void main() { //transform vertex diff --git a/indra/newview/app_settings/shaders/class1/objects/shinySimpleSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/objects/shinySimpleSkinnedV.glsl index cd655f3bb5..eea41bb4f0 100644 --- a/indra/newview/app_settings/shaders/class1/objects/shinySimpleSkinnedV.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/shinySimpleSkinnedV.glsl @@ -11,8 +11,6 @@ vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol); void calcAtmospherics(vec3 inPositionEye); mat4 getObjectSkinnedTransform(); -attribute vec4 object_weight; - void main() { mat4 mat = getObjectSkinnedTransform(); diff --git a/indra/newview/app_settings/shaders/class1/objects/simpleSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/objects/simpleSkinnedV.glsl index 900448035c..af92e5e002 100644 --- a/indra/newview/app_settings/shaders/class1/objects/simpleSkinnedV.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/simpleSkinnedV.glsl @@ -11,8 +11,6 @@ vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol); void calcAtmospherics(vec3 inPositionEye); mat4 getObjectSkinnedTransform(); -attribute vec4 object_weight; - void main() { //transform vertex diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl index 66a1a8515f..f0c9b01671 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl @@ -267,34 +267,49 @@ void main() float da = max(dot(norm.xyz, vary_light.xyz), 0.0); vec4 diffuse = texture2DRect(diffuseRect, tc); - vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy); - - vec2 scol_ambocc = texture2DRect(lightMap, vary_fragcoord.xy).rg; - float scol = max(scol_ambocc.r, diffuse.a); - float ambocc = scol_ambocc.g; + + vec3 col; + float bloom = 0.0; + + if (diffuse.a < 0.9) + { + vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy); + + vec2 scol_ambocc = texture2DRect(lightMap, vary_fragcoord.xy).rg; + float scol = max(scol_ambocc.r, diffuse.a); + float ambocc = scol_ambocc.g; - calcAtmospherics(pos.xyz, ambocc); + calcAtmospherics(pos.xyz, ambocc); - vec3 col = atmosAmbient(vec3(0)); - col += atmosAffectDirectionalLight(max(min(da, scol), diffuse.a)); + col = atmosAmbient(vec3(0)); + col += atmosAffectDirectionalLight(max(min(da, scol), diffuse.a)); - col *= diffuse.rgb; + col *= diffuse.rgb; - if (spec.a > 0.0) // specular reflection + if (spec.a > 0.0) // specular reflection + { + // the old infinite-sky shiny reflection + // + vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz)); + float sa = dot(refnormpersp, vary_light.xyz); + vec3 dumbshiny = vary_SunlitColor*scol_ambocc.r*texture2D(lightFunc, vec2(sa, spec.a)).a; + + // add the two types of shiny together + vec3 spec_contrib = dumbshiny * spec.rgb; + bloom = dot(spec_contrib, spec_contrib); + col += spec_contrib; + } + + col = atmosLighting(col); + col = scaleSoftClip(col); + + col = mix(col, diffuse.rgb, diffuse.a); + } + else { - // the old infinite-sky shiny reflection - // - vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz)); - float sa = dot(refnormpersp, vary_light.xyz); - vec3 dumbshiny = vary_SunlitColor*scol_ambocc.r*texture2D(lightFunc, vec2(sa, spec.a)).a; - - // add the two types of shiny together - col += dumbshiny * spec.rgb; + col = diffuse.rgb; } - - col = atmosLighting(col); - col = scaleSoftClip(col); gl_FragColor.rgb = col; - gl_FragColor.a = 0.0; + gl_FragColor.a = bloom; } diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightMSF.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightMSF.glsl index 0bae10ca7d..3b572320c3 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/softenLightMSF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightMSF.glsl @@ -255,7 +255,7 @@ void main() vec2 tc = vary_fragcoord.xy; ivec2 itc = ivec2(tc); - vec3 fcol = vec3(0,0,0); + vec4 fcol = vec4(0,0,0,0); vec2 scol_ambocc = texture2DRect(lightMap, tc).rg; float ambocc = scol_ambocc.g; @@ -270,38 +270,50 @@ void main() float da = max(dot(norm.xyz, vary_light.xyz), 0.0); vec4 diffuse = texelFetch(diffuseRect, itc, i); - vec4 spec = texelFetch(specularRect, itc, i); + vec3 col; + float bloom = 0.0; + if (diffuse.a < 0.9) + { + vec4 spec = texelFetch(specularRect, itc, i); - float amb = 0; + float amb = 0; - float scol = max(scol_ambocc.r, diffuse.a); - amb += ambocc; + float scol = max(scol_ambocc.r, diffuse.a); + amb += ambocc; - calcAtmospherics(pos.xyz, ambocc); + calcAtmospherics(pos.xyz, ambocc); + + col = atmosAmbient(vec3(0)); + col += atmosAffectDirectionalLight(max(min(da, scol), diffuse.a)); - vec3 col = atmosAmbient(vec3(0)); - col += atmosAffectDirectionalLight(max(min(da, scol), diffuse.a)); + col *= diffuse.rgb; - col *= diffuse.rgb; + if (spec.a > 0.0) // specular reflection + { + // the old infinite-sky shiny reflection + // + vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz)); + float sa = dot(refnormpersp, vary_light.xyz); + vec3 dumbshiny = vary_SunlitColor*scol_ambocc.r*texture2D(lightFunc, vec2(sa, spec.a)).a; + + // add the two types of shiny together + vec3 spec_contrib = dumbshiny * spec.rgb; + bloom = dot(spec_contrib, spec_contrib); + col += spec_contrib; + } - if (spec.a > 0.0) // specular reflection + col = atmosLighting(col); + col = scaleSoftClip(col); + + col = mix(col, diffuse.rgb, diffuse.a); + } + else { - // the old infinite-sky shiny reflection - // - vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz)); - float sa = dot(refnormpersp, vary_light.xyz); - vec3 dumbshiny = vary_SunlitColor*scol_ambocc.r*texture2D(lightFunc, vec2(sa, spec.a)).a; - - // add the two types of shiny together - col += dumbshiny * spec.rgb; + col = diffuse.rgb; } - - col = atmosLighting(col); - col = scaleSoftClip(col); - fcol += col; + fcol += vec4(col, bloom); } - gl_FragColor.rgb = fcol/samples; - gl_FragColor.a = 0.0; + gl_FragColor = fcol/samples; } diff --git a/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl index d38d33cc21..1ae10a5faa 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl @@ -268,91 +268,50 @@ void main() float da = max(dot(norm.xyz, vary_light.xyz), 0.0); vec4 diffuse = texture2DRect(diffuseRect, tc); - vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy); + vec3 col; + float bloom = 0.0; + + if (diffuse.a < 0.9) + { + vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy); - da = texture2D(lightFunc, vec2(da, 0.0)).a; + da = texture2D(lightFunc, vec2(da, 0.0)).a; - vec2 scol_ambocc = texture2DRect(lightMap, vary_fragcoord.xy).rg; - float scol = max(scol_ambocc.r, diffuse.a); - float ambocc = scol_ambocc.g; + vec2 scol_ambocc = texture2DRect(lightMap, vary_fragcoord.xy).rg; + float scol = max(scol_ambocc.r, diffuse.a); + float ambocc = scol_ambocc.g; - calcAtmospherics(pos.xyz, ambocc); + calcAtmospherics(pos.xyz, ambocc); - vec3 col = atmosAmbient(vec3(0)); - col += atmosAffectDirectionalLight(max(min(da, scol), diffuse.a)); + col = atmosAmbient(vec3(0)); + col += atmosAffectDirectionalLight(max(min(da, scol), diffuse.a)); - col *= diffuse.rgb; + col *= diffuse.rgb; - if (spec.a > 0.0) // specular reflection + if (spec.a > 0.0) // specular reflection + { + // the old infinite-sky shiny reflection + // + vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz)); + float sa = dot(refnormpersp, vary_light.xyz); + vec3 dumbshiny = vary_SunlitColor*scol*texture2D(lightFunc, vec2(sa, spec.a)).a; + + // add the two types of shiny together + vec3 spec_contrib = dumbshiny * spec.rgb; + bloom = dot(spec_contrib, spec_contrib); + col += spec_contrib; + } + + col = atmosLighting(col); + col = scaleSoftClip(col); + + col = mix(col, diffuse.rgb, diffuse.a); + } + else { - // the old infinite-sky shiny reflection - // - vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz)); - float sa = dot(refnormpersp, vary_light.xyz); - vec3 dumbshiny = vary_SunlitColor*scol*texture2D(lightFunc, vec2(sa, spec.a)).a; - - /* - // screen-space cheap fakey reflection map - // - vec3 refnorm = normalize(reflect(vec3(0,0,-1), norm.xyz)); - depth -= 0.5; // unbias depth - // first figure out where we'll make our 2D guess from - vec2 ref2d = (0.25 * screen_res.y) * (refnorm.xy) * abs(refnorm.z) / depth; - // Offset the guess source a little according to a trivial - // checkerboard dither function and spec.a. - // This is meant to be similar to sampling a blurred version - // of the diffuse map. LOD would be better in that regard. - // The goal of the blur is to soften reflections in surfaces - // with low shinyness, and also to disguise our lameness. - float checkerboard = floor(mod(tc.x+tc.y, 2.0)); // 0.0, 1.0 - float checkoffset = (3.0 + (7.0*(1.0-spec.a)))*(checkerboard-0.5); - - ref2d += vec2(checkoffset, checkoffset); - ref2d += tc.xy; // use as offset from destination - // Get attributes from the 2D guess point. - // We average two samples of diffuse (not of anything else) per - // pixel to try to reduce aliasing some more. - vec3 refcol = 0.5 * (texture2DRect(diffuseRect, ref2d + vec2(0.0, -checkoffset)).rgb + - texture2DRect(diffuseRect, ref2d + vec2(-checkoffset, 0.0)).rgb); - float refdepth = texture2DRect(depthMap, ref2d).a; - vec3 refpos = getPosition_d(ref2d, refdepth).xyz; - float refshad = texture2DRect(lightMap, ref2d).r; - vec3 refn = texture2DRect(normalMap, ref2d).rgb; - refn = vec3((refn.xy-0.5)*2.0,refn.z); // unpack norm - refn = normalize(refn); - // figure out how appropriate our guess actually was - float refapprop = max(0.0, dot(-refnorm, normalize(pos - refpos))); - // darken reflections from points which face away from the reflected ray - our guess was a back-face - //refapprop *= step(dot(refnorm, refn), 0.0); - refapprop = min(refapprop, max(0.0, -dot(refnorm, refn))); // more conservative variant - // get appropriate light strength for guess-point. - // reflect light direction to increase the illusion that - // these are reflections. - vec3 reflight = reflect(lightnorm.xyz, norm.xyz); - float reflit = min(max(dot(refn, reflight.xyz), 0.0), refshad); - // apply sun color to guess-point, dampen according to inappropriateness of guess - float refmod = min(refapprop, reflit); - vec3 refprod = vary_SunlitColor * refcol.rgb * refmod; - vec3 ssshiny = (refprod * spec.a); - ssshiny *= 0.3; // dampen it even more - */ - vec3 ssshiny = vec3(0,0,0); - - // add the two types of shiny together - col += (ssshiny + dumbshiny) * spec.rgb; + col = diffuse.rgb; } - - col = atmosLighting(col); - col = scaleSoftClip(col); gl_FragColor.rgb = col; - - //gl_FragColor.rgb = gi_col.rgb; - gl_FragColor.a = 0.0; - - //gl_FragColor.rg = scol_ambocc.rg; - //gl_FragColor.rgb = texture2DRect(lightMap, vary_fragcoord.xy).rgb; - //gl_FragColor.rgb = norm.rgb*0.5+0.5; - //gl_FragColor.rgb = vec3(ambocc); - //gl_FragColor.rgb = vec3(scol); + gl_FragColor.a = bloom; } diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt index fa67ee547c..2690e8ec70 100644 --- a/indra/newview/featuretable_mac.txt +++ b/indra/newview/featuretable_mac.txt @@ -1,4 +1,4 @@ -version 29 +version 30 // NOTE: This is mostly identical to featuretable_mac.txt with a few differences // Should be combined into one table diff --git a/indra/newview/lldrawpoolwlsky.cpp b/indra/newview/lldrawpoolwlsky.cpp index f9fd501072..a219386b53 100644 --- a/indra/newview/lldrawpoolwlsky.cpp +++ b/indra/newview/lldrawpoolwlsky.cpp @@ -62,13 +62,24 @@ LLDrawPoolWLSky::LLDrawPoolWLSky(void) : llerrs << "Error: Failed to load cloud noise image " << cloudNoiseFilename << llendl; } - cloudNoiseFile->load(cloudNoiseFilename); - - sCloudNoiseRawImage = new LLImageRaw(); + if(cloudNoiseFile->load(cloudNoiseFilename)) + { + sCloudNoiseRawImage = new LLImageRaw(); - cloudNoiseFile->decode(sCloudNoiseRawImage, 0.0f); + if(cloudNoiseFile->decode(sCloudNoiseRawImage, 0.0f)) + { + //debug use + lldebugs << "cloud noise raw image width: " << sCloudNoiseRawImage->getWidth() << " : height: " << sCloudNoiseRawImage->getHeight() << " : components: " << + (S32)sCloudNoiseRawImage->getComponents() << " : data size: " << sCloudNoiseRawImage->getDataSize() << llendl ; + llassert_always(sCloudNoiseRawImage->getData()) ; - sCloudNoiseTexture = LLViewerTextureManager::getLocalTexture(sCloudNoiseRawImage.get(), TRUE); + sCloudNoiseTexture = LLViewerTextureManager::getLocalTexture(sCloudNoiseRawImage.get(), TRUE); + } + else + { + sCloudNoiseRawImage = NULL ; + } + } LLWLParamManager::getInstance()->propagateParameters(); } @@ -218,7 +229,7 @@ void LLDrawPoolWLSky::renderStars(void) const void LLDrawPoolWLSky::renderSkyClouds(F32 camHeightLocal) const { - if (gPipeline.canUseWindLightShaders() && gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_CLOUDS)) + if (gPipeline.canUseWindLightShaders() && gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_CLOUDS) && sCloudNoiseTexture.notNull()) { LLGLEnable blend(GL_BLEND); gGL.setSceneBlendType(LLRender::BT_ALPHA); @@ -399,5 +410,8 @@ void LLDrawPoolWLSky::cleanupGL() //static void LLDrawPoolWLSky::restoreGL() { - sCloudNoiseTexture = LLViewerTextureManager::getLocalTexture(sCloudNoiseRawImage.get(), TRUE); + if(sCloudNoiseRawImage.notNull()) + { + sCloudNoiseTexture = LLViewerTextureManager::getLocalTexture(sCloudNoiseRawImage.get(), TRUE); + } } diff --git a/indra/newview/llexpandabletextbox.cpp b/indra/newview/llexpandabletextbox.cpp index 5501b8c2ac..2abfbf37ca 100644 --- a/indra/newview/llexpandabletextbox.cpp +++ b/indra/newview/llexpandabletextbox.cpp @@ -415,6 +415,15 @@ void LLExpandableTextBox::onTopLost() LLUICtrl::onTopLost(); } +void LLExpandableTextBox::updateTextShape() +{ + // I guess this should be done on every reshape(), + // but adding this code to reshape() currently triggers bug VWR-26455, + // which makes the text virtually unreadable. + llassert(!mExpanded); + updateTextBoxRect(); +} + void LLExpandableTextBox::setValue(const LLSD& value) { collapseTextBox(); diff --git a/indra/newview/llexpandabletextbox.h b/indra/newview/llexpandabletextbox.h index f75ef954ff..399e48bea2 100644 --- a/indra/newview/llexpandabletextbox.h +++ b/indra/newview/llexpandabletextbox.h @@ -143,6 +143,10 @@ public: */ /*virtual*/ void onTopLost(); + /** + * *HACK: Update the inner textbox shape. + */ + void updateTextShape(); /** * Draws text box, collapses text box if its expanded and its parent's position changed diff --git a/indra/newview/llfloaterbuyland.cpp b/indra/newview/llfloaterbuyland.cpp index 610142b5a9..5cfdd69f7b 100644 --- a/indra/newview/llfloaterbuyland.cpp +++ b/indra/newview/llfloaterbuyland.cpp @@ -529,7 +529,7 @@ void LLFloaterBuyLandUI::updateCovenantInfo() LLTextBox* region_type = getChild<LLTextBox>("region_type_text"); if (region_type) { - region_type->setText(region->getSimProductName()); + region_type->setText(region->getLocalizedSimProductName()); } LLTextBox* resellable_clause = getChild<LLTextBox>("resellable_clause"); diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index 9b7593ce61..4746f93009 100644 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -566,10 +566,7 @@ void LLPanelLandGeneral::refresh() if (regionp) { insert_maturity_into_textbox(mContentRating, gFloaterView->getParentFloater(this), MATURITY); - - std::string land_type; - bool is_land_type_localized = LLTrans::findString(land_type, regionp->getSimProductName()); - mLandType->setText(is_land_type_localized ? land_type : regionp->getSimProductName()); + mLandType->setText(regionp->getLocalizedSimProductName()); } // estate owner/manager cannot edit other parts of the parcel @@ -2883,13 +2880,7 @@ void LLPanelLandCovenant::refresh() } LLTextBox* region_landtype = getChild<LLTextBox>("region_landtype_text"); - if (region_landtype) - { - std::string land_type; - bool is_land_type_localized = LLTrans::findString(land_type, region->getSimProductName()); - - region_landtype->setText(is_land_type_localized ? land_type : region->getSimProductName()); - } + region_landtype->setText(region->getLocalizedSimProductName()); LLTextBox* region_maturity = getChild<LLTextBox>("region_maturity_text"); if (region_maturity) diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index 538c5e3b88..9a99417e93 100644 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -336,7 +336,7 @@ void LLFloaterRegionInfo::processRegionInfo(LLMessageSystem* msg) LLViewerRegion* region = gAgent.getRegion(); BOOL allow_modify = gAgent.isGodlike() || (region && region->canManageEstate()); - // *TODO: Replace parcing msg with accessing the region info model. + // *TODO: Replace parsing msg with accessing the region info model. LLRegionInfoModel& region_info = LLRegionInfoModel::instance(); // extract message @@ -368,6 +368,7 @@ void LLFloaterRegionInfo::processRegionInfo(LLMessageSystem* msg) msg->getSize("RegionInfo2", "ProductName") > 0) { msg->getString("RegionInfo2", "ProductName", sim_type); + LLTrans::findString(sim_type, sim_type); // try localizing sim product name } // GENERAL PANEL @@ -2409,11 +2410,7 @@ bool LLPanelEstateCovenant::refreshFromRegion(LLViewerRegion* region) } LLTextBox* region_landtype = getChild<LLTextBox>("region_landtype_text"); - if (region_landtype) - { - region_landtype->setText(region->getSimProductName()); - } - + region_landtype->setText(region->getLocalizedSimProductName()); // let the parent class handle the general data collection. bool rv = LLPanelRegionInfo::refreshFromRegion(region); diff --git a/indra/newview/llpanelplaceprofile.cpp b/indra/newview/llpanelplaceprofile.cpp index 1e9ce58237..ce8057eead 100644 --- a/indra/newview/llpanelplaceprofile.cpp +++ b/indra/newview/llpanelplaceprofile.cpp @@ -32,6 +32,7 @@ #include "llparcel.h" #include "message.h" +#include "llexpandabletextbox.h" #include "lliconctrl.h" #include "lllineeditor.h" #include "lltextbox.h" @@ -227,6 +228,34 @@ void LLPanelPlaceProfile::setInfoType(EInfoType type) getChild<LLAccordionCtrl>("advanced_info_accordion")->setVisible(is_info_type_agent); + // If we came from search we want larger description area, approx. 10 lines (see STORM-1311). + // Don't use the maximum available space because that leads to nasty artifacts + // in text editor and expandable text box. + { + const S32 SEARCH_DESC_HEIGHT = 150; + + // Remember original geometry (once). + static const S32 sOrigDescVPad = getChildView("parcel_title")->getRect().mBottom - mDescEditor->getRect().mTop; + static const S32 sOrigDescHeight = mDescEditor->getRect().getHeight(); + static const S32 sOrigMRIconVPad = mDescEditor->getRect().mBottom - mMaturityRatingIcon->getRect().mTop; + static const S32 sOrigMRTextVPad = mDescEditor->getRect().mBottom - mMaturityRatingText->getRect().mTop; + + // Resize the description. + const S32 desc_height = is_info_type_agent ? sOrigDescHeight : SEARCH_DESC_HEIGHT; + const S32 desc_top = getChildView("parcel_title")->getRect().mBottom - sOrigDescVPad; + LLRect desc_rect = mDescEditor->getRect(); + desc_rect.setOriginAndSize(desc_rect.mLeft, desc_top - desc_height, desc_rect.getWidth(), desc_height); + mDescEditor->reshape(desc_rect.getWidth(), desc_rect.getHeight()); + mDescEditor->setRect(desc_rect); + mDescEditor->updateTextShape(); + + // Move the maturity rating icon/text accordingly. + const S32 mr_icon_bottom = mDescEditor->getRect().mBottom - sOrigMRIconVPad - mMaturityRatingIcon->getRect().getHeight(); + const S32 mr_text_bottom = mDescEditor->getRect().mBottom - sOrigMRTextVPad - mMaturityRatingText->getRect().getHeight(); + mMaturityRatingIcon->setOrigin(mMaturityRatingIcon->getRect().mLeft, mr_icon_bottom); + mMaturityRatingText->setOrigin(mMaturityRatingText->getRect().mLeft, mr_text_bottom); + } + switch(type) { case AGENT: @@ -434,7 +463,7 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel, } mRegionNameText->setText(region->getName()); - mRegionTypeText->setText(region->getSimProductName()); + mRegionTypeText->setText(region->getLocalizedSimProductName()); // Determine parcel owner if (parcel->isPublic()) diff --git a/indra/newview/llpanelvoicedevicesettings.cpp b/indra/newview/llpanelvoicedevicesettings.cpp index 4a80bbbe5e..6be2ea6481 100644 --- a/indra/newview/llpanelvoicedevicesettings.cpp +++ b/indra/newview/llpanelvoicedevicesettings.cpp @@ -41,6 +41,7 @@ static LLRegisterPanelClassWrapper<LLPanelVoiceDeviceSettings> t_panel_group_general("panel_voice_device_settings"); +static const std::string DEFAULT_DEVICE("Default"); LLPanelVoiceDeviceSettings::LLPanelVoiceDeviceSettings() @@ -68,10 +69,17 @@ BOOL LLPanelVoiceDeviceSettings::postBuild() // set mic volume tuning slider based on last mic volume setting volume_slider->setValue(mMicVolume); - getChild<LLComboBox>("voice_input_device")->setCommitCallback( + mCtrlInputDevices = getChild<LLComboBox>("voice_input_device"); + mCtrlOutputDevices = getChild<LLComboBox>("voice_output_device"); + + mCtrlInputDevices->setCommitCallback( boost::bind(&LLPanelVoiceDeviceSettings::onCommitInputDevice, this)); - getChild<LLComboBox>("voice_output_device")->setCommitCallback( + mCtrlOutputDevices->setCommitCallback( boost::bind(&LLPanelVoiceDeviceSettings::onCommitOutputDevice, this)); + + mLocalizedDeviceNames[DEFAULT_DEVICE] = getString("default_text"); + mLocalizedDeviceNames["No Device"] = getString("name_no_device"); + mLocalizedDeviceNames["Default System Device"] = getString("name_default_system_device"); return TRUE; } @@ -138,14 +146,14 @@ void LLPanelVoiceDeviceSettings::apply() std::string s; if(mCtrlInputDevices) { - s = mCtrlInputDevices->getSimple(); + s = mCtrlInputDevices->getValue().asString(); gSavedSettings.setString("VoiceInputAudioDevice", s); mInputDevice = s; } if(mCtrlOutputDevices) { - s = mCtrlOutputDevices->getSimple(); + s = mCtrlOutputDevices->getValue().asString(); gSavedSettings.setString("VoiceOutputAudioDevice", s); mOutputDevice = s; } @@ -166,10 +174,10 @@ void LLPanelVoiceDeviceSettings::cancel() gSavedSettings.setString("VoiceOutputAudioDevice", mOutputDevice); if(mCtrlInputDevices) - mCtrlInputDevices->setSimple(mInputDevice); + mCtrlInputDevices->setValue(mInputDevice); if(mCtrlOutputDevices) - mCtrlOutputDevices->setSimple(mOutputDevice); + mCtrlOutputDevices->setValue(mOutputDevice); gSavedSettings.setF32("AudioLevelMic", mMicVolume); LLSlider* volume_slider = getChild<LLSlider>("mic_volume_slider"); @@ -188,9 +196,6 @@ void LLPanelVoiceDeviceSettings::refresh() LLVoiceClient::getInstance()->tuningSetMicVolume(current_volume); // Fill in popup menus - mCtrlInputDevices = getChild<LLComboBox>("voice_input_device"); - mCtrlOutputDevices = getChild<LLComboBox>("voice_output_device"); - bool device_settings_available = LLVoiceClient::getInstance()->deviceSettingsAvailable(); if (mCtrlInputDevices) @@ -212,14 +217,14 @@ void LLPanelVoiceDeviceSettings::refresh() if(mCtrlInputDevices) { mCtrlInputDevices->removeall(); - mCtrlInputDevices->add( mInputDevice, ADD_BOTTOM ); - mCtrlInputDevices->setSimple(mInputDevice); + mCtrlInputDevices->add(getLocalizedDeviceName(mInputDevice), mInputDevice, ADD_BOTTOM); + mCtrlInputDevices->setValue(mInputDevice); } if(mCtrlOutputDevices) { mCtrlOutputDevices->removeall(); - mCtrlOutputDevices->add( mOutputDevice, ADD_BOTTOM ); - mCtrlOutputDevices->setSimple(mOutputDevice); + mCtrlOutputDevices->add(getLocalizedDeviceName(mOutputDevice), mOutputDevice, ADD_BOTTOM); + mCtrlOutputDevices->setValue(mOutputDevice); } mDevicesUpdated = FALSE; } @@ -230,35 +235,41 @@ void LLPanelVoiceDeviceSettings::refresh() if(mCtrlInputDevices) { mCtrlInputDevices->removeall(); - mCtrlInputDevices->add( getString("default_text"), ADD_BOTTOM ); + mCtrlInputDevices->add(getLocalizedDeviceName(DEFAULT_DEVICE), DEFAULT_DEVICE, ADD_BOTTOM); for(iter=LLVoiceClient::getInstance()->getCaptureDevices().begin(); iter != LLVoiceClient::getInstance()->getCaptureDevices().end(); iter++) { - mCtrlInputDevices->add( *iter, ADD_BOTTOM ); + mCtrlInputDevices->add(getLocalizedDeviceName(*iter), *iter, ADD_BOTTOM); } - if(!mCtrlInputDevices->setSimple(mInputDevice)) + // Fix invalid input audio device preference. + if (!mCtrlInputDevices->setSelectedByValue(mInputDevice, TRUE)) { - mCtrlInputDevices->setSimple(getString("default_text")); + mCtrlInputDevices->setValue(DEFAULT_DEVICE); + gSavedSettings.setString("VoiceInputAudioDevice", DEFAULT_DEVICE); + mInputDevice = DEFAULT_DEVICE; } } if(mCtrlOutputDevices) { mCtrlOutputDevices->removeall(); - mCtrlOutputDevices->add( getString("default_text"), ADD_BOTTOM ); + mCtrlOutputDevices->add(getLocalizedDeviceName(DEFAULT_DEVICE), DEFAULT_DEVICE, ADD_BOTTOM); for(iter= LLVoiceClient::getInstance()->getRenderDevices().begin(); iter != LLVoiceClient::getInstance()->getRenderDevices().end(); iter++) { - mCtrlOutputDevices->add( *iter, ADD_BOTTOM ); + mCtrlOutputDevices->add(getLocalizedDeviceName(*iter), *iter, ADD_BOTTOM); } - if(!mCtrlOutputDevices->setSimple(mOutputDevice)) + // Fix invalid output audio device preference. + if (!mCtrlOutputDevices->setSelectedByValue(mOutputDevice, TRUE)) { - mCtrlOutputDevices->setSimple(getString("default_text")); + mCtrlOutputDevices->setValue(DEFAULT_DEVICE); + gSavedSettings.setString("VoiceOutputAudioDevice", DEFAULT_DEVICE); + mOutputDevice = DEFAULT_DEVICE; } } mDevicesUpdated = TRUE; @@ -292,12 +303,19 @@ void LLPanelVoiceDeviceSettings::cleanup() } } +// returns English name if no translation found +std::string LLPanelVoiceDeviceSettings::getLocalizedDeviceName(const std::string& en_dev_name) +{ + std::map<std::string, std::string>::const_iterator it = mLocalizedDeviceNames.find(en_dev_name); + return it != mLocalizedDeviceNames.end() ? it->second : en_dev_name; +} + void LLPanelVoiceDeviceSettings::onCommitInputDevice() { if(LLVoiceClient::getInstance()) { LLVoiceClient::getInstance()->setCaptureDevice( - getChild<LLComboBox>("voice_input_device")->getValue().asString()); + mCtrlInputDevices->getValue().asString()); } } @@ -306,6 +324,6 @@ void LLPanelVoiceDeviceSettings::onCommitOutputDevice() if(LLVoiceClient::getInstance()) { LLVoiceClient::getInstance()->setRenderDevice( - getChild<LLComboBox>("voice_output_device")->getValue().asString()); + mCtrlInputDevices->getValue().asString()); } } diff --git a/indra/newview/llpanelvoicedevicesettings.h b/indra/newview/llpanelvoicedevicesettings.h index d09476d469..ba3bcad0dc 100644 --- a/indra/newview/llpanelvoicedevicesettings.h +++ b/indra/newview/llpanelvoicedevicesettings.h @@ -49,6 +49,8 @@ public: void setUseTuningMode(bool use) { mUseTuningMode = use; }; protected: + std::string getLocalizedDeviceName(const std::string& en_dev_name); + void onCommitInputDevice(); void onCommitOutputDevice(); @@ -59,6 +61,7 @@ protected: class LLComboBox *mCtrlOutputDevices; BOOL mDevicesUpdated; bool mUseTuningMode; + std::map<std::string, std::string> mLocalizedDeviceNames; }; #endif // LL_LLPANELVOICEDEVICESETTINGS_H diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp index 22666cec0d..c532346e6b 100644 --- a/indra/newview/llviewerinventory.cpp +++ b/indra/newview/llviewerinventory.cpp @@ -418,6 +418,9 @@ void LLViewerInventoryItem::fetchFromServer(void) const BOOL LLViewerInventoryItem::unpackMessage(LLSD item) { BOOL rv = LLInventoryItem::fromLLSD(item); + + LLLocalizedInventoryItemsDictionary::getInstance()->localizeInventoryObjectName(mName); + mIsComplete = TRUE; return rv; } diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index 5be2234ec2..db2dc531db 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -567,6 +567,11 @@ const std::string LLViewerRegion::getSimAccessString() const return accessToString(mSimAccess); } +std::string LLViewerRegion::getLocalizedSimProductName() const +{ + std::string localized_spn; + return LLTrans::findString(localized_spn, mProductName) ? localized_spn : mProductName; +} // static std::string LLViewerRegion::regionFlagsToString(U32 flags) diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h index b3c19ea58d..ef1a6d285c 100644 --- a/indra/newview/llviewerregion.h +++ b/indra/newview/llviewerregion.h @@ -192,7 +192,7 @@ public: S32 getSimCPURatio() const { return mCPURatio; } const std::string& getSimColoName() const { return mColoName; } const std::string& getSimProductSKU() const { return mProductSKU; } - const std::string& getSimProductName() const { return mProductName; } + std::string getLocalizedSimProductName() const; // Returns "Sandbox", "Expensive", etc. static std::string regionFlagsToString(U32 flags); diff --git a/indra/newview/llvosky.cpp b/indra/newview/llvosky.cpp index 66ba6249d3..ef21e7373e 100644 --- a/indra/newview/llvosky.cpp +++ b/indra/newview/llvosky.cpp @@ -755,6 +755,11 @@ void LLVOSky::calcSkyColorWLVert(LLVector3 & Pn, LLColor3 & vary_HazeColor, LLCo // project the direction ray onto the sky dome. F32 phi = acos(Pn[1]); F32 sinA = sin(F_PI - phi); + if (fabsf(sinA) < 0.01f) + { //avoid division by zero + sinA = 0.01f; + } + F32 Plen = dome_radius * sin(F_PI + phi + asin(dome_offset_ratio * sinA)) / sinA; Pn *= Plen; diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 9b72d6b5ac..4899df13e5 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -3741,52 +3741,55 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate) LLVertexBuffer::unbind(); LLGLState::checkStates(); - LLAppViewer::instance()->pingMainloopTimeout("Pipeline:RenderHighlights"); - - if (!sReflectionRender) + if (!LLPipeline::sImpostorRender) { - renderHighlights(); - } + LLAppViewer::instance()->pingMainloopTimeout("Pipeline:RenderHighlights"); - // Contains a list of the faces of objects that are physical or - // have touch-handlers. - mHighlightFaces.clear(); + if (!sReflectionRender) + { + renderHighlights(); + } - LLAppViewer::instance()->pingMainloopTimeout("Pipeline:RenderDebug"); + // Contains a list of the faces of objects that are physical or + // have touch-handlers. + mHighlightFaces.clear(); + + LLAppViewer::instance()->pingMainloopTimeout("Pipeline:RenderDebug"); - renderDebug(); + renderDebug(); - LLVertexBuffer::unbind(); + LLVertexBuffer::unbind(); - if (!LLPipeline::sReflectionRender && !LLPipeline::sRenderDeferred) - { - if (gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI)) + if (!LLPipeline::sReflectionRender && !LLPipeline::sRenderDeferred) { - // Render debugging beacons. - gObjectList.renderObjectBeacons(); - gObjectList.resetObjectBeacons(); + if (gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI)) + { + // Render debugging beacons. + gObjectList.renderObjectBeacons(); + gObjectList.resetObjectBeacons(); + } + else + { + // Make sure particle effects disappear + LLHUDObject::renderAllForTimer(); + } } else { // Make sure particle effects disappear LLHUDObject::renderAllForTimer(); } - } - else - { - // Make sure particle effects disappear - LLHUDObject::renderAllForTimer(); - } - LLAppViewer::instance()->pingMainloopTimeout("Pipeline:RenderGeomEnd"); + LLAppViewer::instance()->pingMainloopTimeout("Pipeline:RenderGeomEnd"); - //HACK: preserve/restore matrices around HUD render - if (gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_HUD)) - { - for (U32 i = 0; i < 16; i++) + //HACK: preserve/restore matrices around HUD render + if (gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_HUD)) { - gGLModelView[i] = saved_modelview[i]; - gGLProjection[i] = saved_projection[i]; + for (U32 i = 0; i < 16; i++) + { + gGLModelView[i] = saved_modelview[i]; + gGLProjection[i] = saved_projection[i]; + } } } diff --git a/indra/newview/skins/default/xui/da/notifications.xml b/indra/newview/skins/default/xui/da/notifications.xml index 4c0fbd280b..c3999501eb 100644 --- a/indra/newview/skins/default/xui/da/notifications.xml +++ b/indra/newview/skins/default/xui/da/notifications.xml @@ -454,6 +454,7 @@ Købsprisen for dette land er ikke refunderet til ejeren. Hvis en dedikeret parv Dediker disse [AREA] m² land til gruppen '[GROUP_NAME]'? </notification> <notification name="ErrorMessage"> + [ERROR_MESSAGE] <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="AvatarMovedDesired"> diff --git a/indra/newview/skins/default/xui/da/panel_places.xml b/indra/newview/skins/default/xui/da/panel_places.xml index fe8ca69f34..c555f2fb09 100644 --- a/indra/newview/skins/default/xui/da/panel_places.xml +++ b/indra/newview/skins/default/xui/da/panel_places.xml @@ -24,7 +24,7 @@ <menu_button label="▼" name="overflow_btn" tool_tip="Vis flere valg"/> </layout_panel> </layout_stack> - <layout_stack name="bottom_bar_ls3"> + <layout_stack name="bottom_bar_profile_ls"> <layout_panel name="profile_btn_lp"> <button label="Profil" name="profile_btn" tool_tip="Vis profil for sted"/> </layout_panel> diff --git a/indra/newview/skins/default/xui/de/panel_outfit_edit.xml b/indra/newview/skins/default/xui/de/panel_outfit_edit.xml index 632f414747..1af0492aa1 100644 --- a/indra/newview/skins/default/xui/de/panel_outfit_edit.xml +++ b/indra/newview/skins/default/xui/de/panel_outfit_edit.xml @@ -46,8 +46,8 @@ </panel> <panel name="save_revert_button_bar"> <layout_stack name="button_bar_ls"> - <layout_panel name="save_btn_lp"> - <button label="Speichern" name="save_btn"/> + <layout_panel name="save_btn_lp" width="61"> + <button label="Speichern" name="save_btn" width="60" /> </layout_panel> <layout_panel name="revert_btn_lp"> <button label="Änderungen rückgängig machen" name="revert_btn" tool_tip="Zur zuletzt gespeicherten Version zurückkehren"/> diff --git a/indra/newview/skins/default/xui/de/panel_places.xml b/indra/newview/skins/default/xui/de/panel_places.xml index 36c77d4fe1..602ffff94d 100644 --- a/indra/newview/skins/default/xui/de/panel_places.xml +++ b/indra/newview/skins/default/xui/de/panel_places.xml @@ -24,7 +24,7 @@ <menu_button label="▼" name="overflow_btn" tool_tip="Zusätzliche Optionen anzeigen"/> </layout_panel> </layout_stack> - <layout_stack name="bottom_bar_ls3"> + <layout_stack name="bottom_bar_profile_ls"> <layout_panel name="profile_btn_lp"> <button label="Profil" name="profile_btn" tool_tip="Ortsprofil anzeigen"/> </layout_panel> diff --git a/indra/newview/skins/default/xui/en/floater_sound_devices.xml b/indra/newview/skins/default/xui/en/floater_sound_devices.xml index 304987c3d5..74e01f359c 100644 --- a/indra/newview/skins/default/xui/en/floater_sound_devices.xml +++ b/indra/newview/skins/default/xui/en/floater_sound_devices.xml @@ -15,14 +15,14 @@ layout="topleft" name="floater_sound_devices" title="Sound Devices" - width="315"> + width="490"> <panel layout="topleft" follows="all" filename="panel_sound_devices.xml" name="device_settings_panel" width="400" - left="2" + left="10" top="26" class="panel_voice_device_settings"/> <text diff --git a/indra/newview/skins/default/xui/en/panel_places.xml b/indra/newview/skins/default/xui/en/panel_places.xml index daf571297f..b6b8a337a1 100644 --- a/indra/newview/skins/default/xui/en/panel_places.xml +++ b/indra/newview/skins/default/xui/en/panel_places.xml @@ -234,7 +234,7 @@ background_visible="true" height="23" layout="topleft" mouse_opaque="false" - name="bottom_bar_ls3" + name="bottom_bar_profile_ls" left="0" orientation="horizontal" top="0" diff --git a/indra/newview/skins/default/xui/en/panel_sound_devices.xml b/indra/newview/skins/default/xui/en/panel_sound_devices.xml index 0a20a4a965..46cbc1e87f 100644 --- a/indra/newview/skins/default/xui/en/panel_sound_devices.xml +++ b/indra/newview/skins/default/xui/en/panel_sound_devices.xml @@ -11,6 +11,14 @@ name="default_text"> Default </panel.string> + <string + name="name_no_device"> + No Device + </string> + <string + name="name_default_system_device"> + Default System Device + </string> <icon follows="left|top" height="18" diff --git a/indra/newview/skins/default/xui/es/panel_places.xml b/indra/newview/skins/default/xui/es/panel_places.xml index 4c90a7e6b4..e9984b4512 100644 --- a/indra/newview/skins/default/xui/es/panel_places.xml +++ b/indra/newview/skins/default/xui/es/panel_places.xml @@ -24,7 +24,7 @@ <menu_button label="▼" name="overflow_btn" tool_tip="Ver más opciones"/> </layout_panel> </layout_stack> - <layout_stack name="bottom_bar_ls3"> + <layout_stack name="bottom_bar_profile_ls"> <layout_panel name="profile_btn_lp"> <button label="Perfil" name="profile_btn" tool_tip="Mostrar el perfil del lugar"/> </layout_panel> diff --git a/indra/newview/skins/default/xui/fr/panel_places.xml b/indra/newview/skins/default/xui/fr/panel_places.xml index e252c224f8..509d167704 100644 --- a/indra/newview/skins/default/xui/fr/panel_places.xml +++ b/indra/newview/skins/default/xui/fr/panel_places.xml @@ -24,7 +24,7 @@ <menu_button label="▼" name="overflow_btn" tool_tip="Afficher d'autres options"/> </layout_panel> </layout_stack> - <layout_stack name="bottom_bar_ls3"> + <layout_stack name="bottom_bar_profile_ls"> <layout_panel name="profile_btn_lp"> <button label="Profil" name="profile_btn" tool_tip="Afficher le profil de l'endroit"/> </layout_panel> diff --git a/indra/newview/skins/default/xui/it/panel_places.xml b/indra/newview/skins/default/xui/it/panel_places.xml index 61830f186f..69995fb5de 100644 --- a/indra/newview/skins/default/xui/it/panel_places.xml +++ b/indra/newview/skins/default/xui/it/panel_places.xml @@ -24,7 +24,7 @@ <menu_button label="▼" name="overflow_btn" tool_tip="Mostra ulteriori opzioni"/> </layout_panel> </layout_stack> - <layout_stack name="bottom_bar_ls3"> + <layout_stack name="bottom_bar_profile_ls"> <layout_panel name="profile_btn_lp"> <button label="Profilo" name="profile_btn" tool_tip="Mostra il profilo del luogo"/> </layout_panel> diff --git a/indra/newview/skins/default/xui/ja/panel_places.xml b/indra/newview/skins/default/xui/ja/panel_places.xml index e19b86e552..9d3925afdc 100644 --- a/indra/newview/skins/default/xui/ja/panel_places.xml +++ b/indra/newview/skins/default/xui/ja/panel_places.xml @@ -24,7 +24,7 @@ <menu_button label="▼" name="overflow_btn" tool_tip="オプションを表示します"/> </layout_panel> </layout_stack> - <layout_stack name="bottom_bar_ls3"> + <layout_stack name="bottom_bar_profile_ls"> <layout_panel name="profile_btn_lp"> <button label="プロフィール" name="profile_btn" tool_tip="場所のプロフィールを表示"/> </layout_panel> diff --git a/indra/newview/skins/default/xui/pl/panel_places.xml b/indra/newview/skins/default/xui/pl/panel_places.xml index 34c105225d..d69d137d23 100644 --- a/indra/newview/skins/default/xui/pl/panel_places.xml +++ b/indra/newview/skins/default/xui/pl/panel_places.xml @@ -24,7 +24,7 @@ <menu_button label="▼" name="overflow_btn" tool_tip="Pokaż opcje dodatkowe"/> </layout_panel> </layout_stack> - <layout_stack name="bottom_bar_ls3"> + <layout_stack name="bottom_bar_profile_ls"> <layout_panel name="profile_btn_lp"> <button label="Profil" name="profile_btn" tool_tip="Pokaż profil miejsca"/> </layout_panel> diff --git a/indra/newview/skins/default/xui/pt/panel_places.xml b/indra/newview/skins/default/xui/pt/panel_places.xml index 828ef3e469..69f0baf65f 100644 --- a/indra/newview/skins/default/xui/pt/panel_places.xml +++ b/indra/newview/skins/default/xui/pt/panel_places.xml @@ -24,7 +24,7 @@ <menu_button label="▼" name="overflow_btn" tool_tip="Mostrar opções adicionais"/> </layout_panel> </layout_stack> - <layout_stack name="bottom_bar_ls3"> + <layout_stack name="bottom_bar_profile_ls"> <layout_panel name="profile_btn_lp"> <button label="Perfil" name="profile_btn" tool_tip="Mostrar perfil do lugar"/> </layout_panel> diff --git a/indra/newview/skins/default/xui/zh/panel_places.xml b/indra/newview/skins/default/xui/zh/panel_places.xml index c141201ab2..6434a7279c 100644 --- a/indra/newview/skins/default/xui/zh/panel_places.xml +++ b/indra/newview/skins/default/xui/zh/panel_places.xml @@ -24,7 +24,7 @@ <menu_button name="overflow_btn" tool_tip="顯示額外選項"/> </layout_panel> </layout_stack> - <layout_stack name="bottom_bar_ls3"> + <layout_stack name="bottom_bar_profile_ls"> <layout_panel name="profile_btn_lp"> <button label="檔案" name="profile_btn" tool_tip="顯示地點檔案"/> </layout_panel> diff --git a/indra/newview/skins/minimal/xui/da/panel_people.xml b/indra/newview/skins/minimal/xui/da/panel_people.xml index 49cd2c71f2..8be4d695bd 100644 --- a/indra/newview/skins/minimal/xui/da/panel_people.xml +++ b/indra/newview/skins/minimal/xui/da/panel_people.xml @@ -66,16 +66,16 @@ Leder du efter personer at være sammen med? Prøv destinationsknappen nedenfor. <layout_panel name="view_profile_btn_lp"> <button label="Profil" name="view_profile_btn" tool_tip="Vis billeder, grupper og anden beboer information"/> </layout_panel> - <layout_panel name="chat_btn_lp"> + <layout_panel name="im_btn_lp"> <button label="IM" name="im_btn" tool_tip="Åben session med privat besked (IM)"/> </layout_panel> - <layout_panel name="chat_btn_lp"> + <layout_panel name="call_btn_lp"> <button label="Opkald" name="call_btn" tool_tip="Kald til denne beboer"/> </layout_panel> - <layout_panel name="chat_btn_lp"> + <layout_panel name="share_btn_lp"> <button label="Del" name="share_btn" tool_tip="Del en genstand fra beholdning"/> </layout_panel> - <layout_panel name="chat_btn_lp"> + <layout_panel name="teleport_btn_lp"> <button label="Teleportér" name="teleport_btn" tool_tip="Tilbyd teleport"/> </layout_panel> </layout_stack> diff --git a/indra/newview/skins/minimal/xui/de/panel_people.xml b/indra/newview/skins/minimal/xui/de/panel_people.xml index 4f8f70ad17..a52557236f 100644 --- a/indra/newview/skins/minimal/xui/de/panel_people.xml +++ b/indra/newview/skins/minimal/xui/de/panel_people.xml @@ -48,13 +48,13 @@ <layout_panel name="view_profile_btn_lp"> <button label="Profil" name="view_profile_btn" tool_tip="Bilder, Gruppen und andere Einwohner-Informationen anzeigen"/> </layout_panel> - <layout_panel name="chat_btn_lp"> + <layout_panel name="im_btn_lp"> <button label="IM" name="im_btn" tool_tip="Instant Messenger öffnen"/> </layout_panel> - <layout_panel name="chat_btn_lp"> + <layout_panel name="call_btn_lp"> <button label="Anrufen" name="call_btn" tool_tip="Diesen Einwohner anrufen"/> </layout_panel> - <layout_panel name="chat_btn_lp"> + <layout_panel name="teleport_btn_lp"> <button label="Teleportieren" name="teleport_btn" tool_tip="Teleport anbieten"/> </layout_panel> </layout_stack> diff --git a/indra/newview/skins/minimal/xui/en/panel_people.xml b/indra/newview/skins/minimal/xui/en/panel_people.xml index 76baacb091..4739f86e95 100644 --- a/indra/newview/skins/minimal/xui/en/panel_people.xml +++ b/indra/newview/skins/minimal/xui/en/panel_people.xml @@ -428,7 +428,7 @@ Looking for people to hang out with? Try the Destinations button below. height="23" layout="bottomleft" left_pad="3" - name="chat_btn_lp" + name="im_btn_lp" user_resize="false" auto_resize="true" width="41"> @@ -449,7 +449,7 @@ Looking for people to hang out with? Try the Destinations button below. height="23" layout="bottomleft" left_pad="3" - name="chat_btn_lp" + name="call_btn_lp" user_resize="false" auto_resize="true" width="52"> @@ -470,7 +470,7 @@ Looking for people to hang out with? Try the Destinations button below. height="23" layout="bottomleft" left_pad="3" - name="chat_btn_lp" + name="teleport_btn_lp" user_resize="false" auto_resize="true" width="77"> diff --git a/indra/newview/skins/minimal/xui/es/panel_people.xml b/indra/newview/skins/minimal/xui/es/panel_people.xml index 1e1c3411ae..8d3d14fa89 100644 --- a/indra/newview/skins/minimal/xui/es/panel_people.xml +++ b/indra/newview/skins/minimal/xui/es/panel_people.xml @@ -49,13 +49,13 @@ <layout_panel name="view_profile_btn_lp"> <button label="Perfil" name="view_profile_btn" tool_tip="Mostrar imágenes, grupos y otra información del Residente"/> </layout_panel> - <layout_panel name="chat_btn_lp"> + <layout_panel name="im_btn_lp"> <button label="MI" name="im_btn" tool_tip="Abrir una sesión de mensajes instantáneos"/> </layout_panel> - <layout_panel name="chat_btn_lp"> + <layout_panel name="call_btn_lp"> <button label="Llamar" name="call_btn" tool_tip="Llamar a este Residente"/> </layout_panel> - <layout_panel name="chat_btn_lp"> + <layout_panel name="teleport_btn_lp"> <button label="Teleporte" name="teleport_btn" tool_tip="Ofrecer teleporte"/> </layout_panel> </layout_stack> diff --git a/indra/newview/skins/minimal/xui/fr/panel_people.xml b/indra/newview/skins/minimal/xui/fr/panel_people.xml index 72fb4d807f..4d6e31d9b5 100644 --- a/indra/newview/skins/minimal/xui/fr/panel_people.xml +++ b/indra/newview/skins/minimal/xui/fr/panel_people.xml @@ -49,13 +49,13 @@ Vous recherchez des résidents avec qui passer du temps ? Essayez avec le bouto <layout_panel name="view_profile_btn_lp"> <button label="Profil" name="view_profile_btn" tool_tip="Afficher la photo, les groupes et autres infos des résidents"/> </layout_panel> - <layout_panel name="chat_btn_lp"> + <layout_panel name="im_btn_lp"> <button label="IM" name="im_btn" tool_tip="Ouvrir une session IM"/> </layout_panel> - <layout_panel name="chat_btn_lp"> + <layout_panel name="call_btn_lp"> <button label="Appeler" name="call_btn" tool_tip="Appeler ce résident."/> </layout_panel> - <layout_panel name="chat_btn_lp"> + <layout_panel name="teleport_btn_lp"> <button label="Téléporter" name="teleport_btn" tool_tip="Proposer une téléportation"/> </layout_panel> </layout_stack> diff --git a/indra/newview/skins/minimal/xui/it/panel_people.xml b/indra/newview/skins/minimal/xui/it/panel_people.xml index 068c8bb808..81e886acf0 100644 --- a/indra/newview/skins/minimal/xui/it/panel_people.xml +++ b/indra/newview/skins/minimal/xui/it/panel_people.xml @@ -66,16 +66,16 @@ Stai cercando persone da frequentare? Prova il pulsante Destinazioni in basso. <layout_panel name="view_profile_btn_lp"> <button label="Profilo" name="view_profile_btn" tool_tip="Mostra immagine, gruppi e altre informazioni del residente"/> </layout_panel> - <layout_panel name="chat_btn_lp"> + <layout_panel name="im_btn_lp"> <button label="IM" name="im_btn" tool_tip="Apri una sessione messaggio istantaneo"/> </layout_panel> - <layout_panel name="chat_btn_lp"> + <layout_panel name="call_btn_lp"> <button label="Chiama" name="call_btn" tool_tip="Chiama questo residente"/> </layout_panel> - <layout_panel name="chat_btn_lp"> + <layout_panel name="share_btn_lp"> <button label="Condividi" name="share_btn" tool_tip="Condividi un oggetto dell'inventario"/> </layout_panel> - <layout_panel name="chat_btn_lp"> + <layout_panel name="teleport_btn_lp"> <button label="Teleport" name="teleport_btn" tool_tip="Offri teleport"/> </layout_panel> </layout_stack> diff --git a/indra/newview/skins/minimal/xui/ja/panel_people.xml b/indra/newview/skins/minimal/xui/ja/panel_people.xml index 9eb45d9a80..5caeebc151 100644 --- a/indra/newview/skins/minimal/xui/ja/panel_people.xml +++ b/indra/newview/skins/minimal/xui/ja/panel_people.xml @@ -66,16 +66,16 @@ <layout_panel name="view_profile_btn_lp"> <button label="プロフィール" name="view_profile_btn" tool_tip="写真、グループ、その他住人情報を表示"/> </layout_panel> - <layout_panel name="chat_btn_lp"> + <layout_panel name="im_btn_lp"> <button label="IM" name="im_btn" tool_tip="インスタントメッセージを開きます"/> </layout_panel> - <layout_panel name="chat_btn_lp"> + <layout_panel name="call_btn_lp"> <button label="コール" name="call_btn" tool_tip="この住人にコールする"/> </layout_panel> - <layout_panel name="chat_btn_lp"> + <layout_panel name="share_btn_lp"> <button label="共有" name="share_btn" tool_tip="「持ち物」のアイテムを共有する"/> </layout_panel> - <layout_panel name="chat_btn_lp"> + <layout_panel name="teleport_btn_lp"> <button label="テレポート" name="teleport_btn" tool_tip="テレポートを送ります"/> </layout_panel> </layout_stack> diff --git a/indra/newview/skins/minimal/xui/pl/panel_people.xml b/indra/newview/skins/minimal/xui/pl/panel_people.xml index dbfee739f4..3b3aaa0987 100644 --- a/indra/newview/skins/minimal/xui/pl/panel_people.xml +++ b/indra/newview/skins/minimal/xui/pl/panel_people.xml @@ -66,16 +66,16 @@ Chcesz spotkać ludzi? Skorzystaj z przycisku "Atrakcje turystyczne" p <layout_panel name="view_profile_btn_lp"> <button label="Profil" name="view_profile_btn" tool_tip="Pokaż zdjęcie, grupy i inne informacje o Rezydencie"/> </layout_panel> - <layout_panel name="chat_btn_lp"> + <layout_panel name="im_btn_lp"> <button label="IM" name="im_btn" tool_tip="Otwórz wiadomości IM"/> </layout_panel> - <layout_panel name="chat_btn_lp"> + <layout_panel name="call_btn_lp"> <button label="Dzwoń" name="call_btn" tool_tip="Zadzwoń do tego Rezydenta"/> </layout_panel> - <layout_panel name="chat_btn_lp"> + <layout_panel name="share_btn_lp"> <button label="Udostępnij" name="share_btn" tool_tip="Udostępnij obiekt z Szafy"/> </layout_panel> - <layout_panel name="chat_btn_lp"> + <layout_panel name="teleport_btn_lp"> <button label="Teleportuj" name="teleport_btn" tool_tip="Zaproponuj teleport"/> </layout_panel> </layout_stack> diff --git a/indra/newview/skins/minimal/xui/pt/panel_people.xml b/indra/newview/skins/minimal/xui/pt/panel_people.xml index d46c440eb9..0e98c586c6 100644 --- a/indra/newview/skins/minimal/xui/pt/panel_people.xml +++ b/indra/newview/skins/minimal/xui/pt/panel_people.xml @@ -49,13 +49,13 @@ Em busca de alguém para conversar? Confira o botão Destinos abaixo. <layout_panel name="view_profile_btn_lp"> <button label="Perfil" name="view_profile_btn" tool_tip="Exibir fotografia, grupos e outras informações dos residentes"/> </layout_panel> - <layout_panel name="chat_btn_lp"> + <layout_panel name="im_btn_lp"> <button label="MI" name="im_btn" tool_tip="Abrir sessão de mensagem instantânea"/> </layout_panel> - <layout_panel name="chat_btn_lp"> + <layout_panel name="call_btn_lp"> <button label="Ligar" name="call_btn" tool_tip="Ligar para este residente"/> </layout_panel> - <layout_panel name="chat_btn_lp"> + <layout_panel name="teleport_btn_lp"> <button label="Teletransportar" name="teleport_btn" tool_tip="Oferecer teletransporte"/> </layout_panel> </layout_stack> |