diff --git a/FIRESTORM-SOURCE_LICENSE_HEADER.txt b/FIRESTORM-SOURCE_LICENSE_HEADER.txt
index 733719b436..25d6ff11ea 100644
--- a/FIRESTORM-SOURCE_LICENSE_HEADER.txt
+++ b/FIRESTORM-SOURCE_LICENSE_HEADER.txt
@@ -2,7 +2,7 @@
* @file
* @brief
*
- * $LicenseInfo:firstyear=2020&license=fsviewerlgpl$
+ * $LicenseInfo:firstyear=2021&license=fsviewerlgpl$
* Phoenix Firestorm Viewer Source Code
* Copyright (C) 2020, The Phoenix Firestorm Project, Inc.
*
diff --git a/autobuild.xml b/autobuild.xml
index 4d9638e3f1..42691dc725 100644
--- a/autobuild.xml
+++ b/autobuild.xml
@@ -964,11 +964,11 @@
archive
name
darwin
@@ -978,11 +978,11 @@
archive
name
linux64
@@ -992,11 +992,11 @@
archive
name
windows
@@ -1006,18 +1006,18 @@
archive
name
windows64
version
- 2.01.05
+ 2.01.07
fontconfig
+ FSUseSmallCameraFloater
+
diff --git a/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl b/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl
index d29e8a9423..28eea92691 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl
@@ -40,6 +40,7 @@ uniform sampler2D specularMap;
VARYING vec2 vary_texcoord0;
+vec3 linear_to_srgb(vec3 cl);// Colour space and shader fixes for BUG-228586 (Rye)
void main()
{
vec4 col = texture2D(diffuseMap, vary_texcoord0.xy);
@@ -52,6 +53,7 @@ void main()
vec4 norm = texture2D(normalMap, vary_texcoord0.xy);
vec4 spec = texture2D(specularMap, vary_texcoord0.xy);
+ col.rgb = linear_to_srgb(col.rgb);// Colour space and shader fixes for BUG-228586 (Rye)
frag_data[0] = vec4(col.rgb, 0.0);
frag_data[1] = spec;
frag_data[2] = vec4(norm.xy,0,0);
diff --git a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl
index 80d19102b6..a18f6e7ac0 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl
@@ -405,6 +405,7 @@ void main()
vec3 npos = normalize(-pos.xyz);
vec3 light = vec3(0, 0, 0);
+ final_specular.rgb = srgb_to_linear(final_specular.rgb);// Colour space and shader fixes for BUG-228586 (Rye)
#define LIGHT_LOOP(i) light.rgb += calcPointLightOrSpotLight(light_diffuse[i].rgb, npos, diffuse.rgb, final_specular, pos.xyz, norm.xyz, light_position[i], light_direction[i].xyz, light_attenuation[i].x, light_attenuation[i].y, light_attenuation[i].z, glare, light_attenuation[i].w );
diff --git a/indra/newview/app_settings/shaders/class1/deferred/materialV.glsl b/indra/newview/app_settings/shaders/class1/deferred/materialV.glsl
index 093da8d26d..854e3712bf 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/materialV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/materialV.glsl
@@ -111,7 +111,10 @@ void main()
vec3 n = normalize((mat*vec4(normal.xyz+position.xyz,1.0)).xyz-pos.xyz);
#ifdef HAS_NORMAL_MAP
vec3 t = normalize((mat*vec4(tangent.xyz+position.xyz,1.0)).xyz-pos.xyz);
- vec3 b = cross(n, t)*tangent.w;
+// normalize the bitangent (cross product of two normalised vectors is not itself normalised)
+ // vec3 b = cross(n, t)*tangent.w;
+ vec3 b = normalize(cross(n, t)*tangent.w);
+//
vary_mat0 = vec3(t.x, b.x, n.x);
vary_mat1 = vec3(t.y, b.y, n.y);
@@ -122,11 +125,11 @@ vary_normal = n;
#else //HAS_SKIN
vec3 n = normalize(normal_matrix * normal);
#ifdef HAS_NORMAL_MAP
-// tangents should not use the inv_transpose matrix
- // vec3 t = normalize(normal_matrix * tangent.xyz);
- vec3 t = normalize((modelview_projection_matrix * vec4(tangent.xyz,0)).xyz);
+ vec3 t = normalize(normal_matrix * tangent.xyz);
+// normalize the bitangent (cross product of two normalised vectors is not itself normalised)
+ // vec3 b = cross(n,t)*tangent.w;
+ vec3 b = normalize(cross(n,t)*tangent.w);
//
- vec3 b = cross(n,t)*tangent.w;
//vec3 t = cross(b,n) * binormal.w;
vary_mat0 = vec3(t.x, b.x, n.x);
diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl
index 8c402fcb54..70e19267ab 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl
@@ -33,10 +33,10 @@ out vec4 frag_color;
#define frag_color gl_FragColor
#endif
-uniform sampler2DRect depthMap;
+// uniform sampler2DRect depthMap; // Colour space and shader fixes for BUG-228586 (Rye)
uniform sampler2DRect diffuseRect;
uniform sampler2DRect specularRect;
-uniform samplerCube environmentMap;
+// uniform samplerCube environmentMap;// Colour space and shader fixes for BUG-228586 (Rye)
uniform sampler2D noiseMap;
uniform sampler2D lightFunc;
@@ -73,10 +73,10 @@ void main()
vec3 norm = getNorm(frag.xy);
vec4 spec = texture2DRect(specularRect, frag.xy);
- spec.rgb = srgb_to_linear(spec.rgb);
+ // spec.rgb = srgb_to_linear(spec.rgb);// Colour space and shader fixes for BUG-228586 (Rye)
vec3 diff = texture2DRect(diffuseRect, frag.xy).rgb;
- diff.rgb = srgb_to_linear(diff.rgb);
-
+ // diff.rgb = srgb_to_linear(diff.rgb);// Colour space and shader fixes for BUG-228586 (Rye)
+
float noise = texture2D(noiseMap, frag.xy / 128.0).b;
vec3 npos = normalize(-pos);
diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl
index 9bba45bc4e..7e14565eea 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl
@@ -40,9 +40,14 @@ out vec4 frag_color;
uniform sampler2DRect diffuseRect;
uniform sampler2DRect specularRect;
-uniform sampler2DRect depthMap;
+// Colour space and shader fixes for BUG-228586 (Rye)
+// uniform sampler2DRect depthMap;
+//
uniform sampler2DRect normalMap;
-uniform samplerCube environmentMap;
+// Colour space and shader fixes for BUG-228586 (Rye)
+// uniform samplerCube environmentMap;
+//
+
uniform sampler2D noiseMap;
uniform sampler2D projectionMap;
uniform sampler2D lightFunc;
@@ -182,11 +187,12 @@ void main()
vec3 diff_tex = texture2DRect(diffuseRect, frag.xy).rgb;
- // SL-12005 Projector light pops as we get closer, more objectionable than being in wrong color space.
- // We can't switch to linear here unless we do it everywhere*
- // *gbuffer is sRGB, convert to linear whenever sampling from it
- diff_tex.rgb = srgb_to_linear(diff_tex.rgb);
-
+// Colour space and shader fixes for BUG-228586 (Rye)
+ // // SL-12005 Projector light pops as we get closer, more objectionable than being in wrong color space.
+ // // We can't switch to linear here unless we do it everywhere*
+ // // *gbuffer is sRGB, convert to linear whenever sampling from it
+ // diff_tex.rgb = srgb_to_linear(diff_tex.rgb);
+//
vec3 dlit = vec3(0, 0, 0);
diff --git a/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl
index d805c9ea48..f062bf8fcd 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl
@@ -35,11 +35,13 @@ out vec4 frag_color;
uniform sampler2DRect diffuseRect;
uniform sampler2DRect specularRect;
-uniform sampler2DRect normalMap;
-uniform samplerCube environmentMap;
+// Colour space and shader fixes for BUG-228586 (Rye)
+//uniform sampler2DRect normalMap;
+//uniform samplerCube environmentMap;
+//
uniform sampler2D noiseMap;
uniform sampler2D lightFunc;
-uniform sampler2DRect depthMap;
+//uniform sampler2DRect depthMap;// Colour space and shader fixes for BUG-228586 (Rye)
uniform vec3 env_mat[3];
uniform float sun_wash;
@@ -90,7 +92,7 @@ void main()
float noise = texture2D(noiseMap, frag.xy/128.0).b;
vec3 col = texture2DRect(diffuseRect, frag.xy).rgb;
- col.rgb = srgb_to_linear(col.rgb);
+ // col.rgb = srgb_to_linear(col.rgb); // Colour space and shader fixes for BUG-228586 (Rye)
float fa = falloff+1.0;
float dist_atten = clamp(1.0-(dist-1.0*(1.0-fa))/fa, 0.0, 1.0);
diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl
index f80f1a985a..f24fca77d5 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl
@@ -37,7 +37,8 @@ out vec4 frag_color;
uniform sampler2DRect diffuseRect;
uniform sampler2DRect specularRect;
uniform sampler2DRect normalMap;
-uniform sampler2DRect lightMap;
+// Colour space and shader fixes for BUG-228586 (Rye)
+// uniform sampler2DRect lightMap;
uniform sampler2DRect depthMap;
uniform samplerCube environmentMap;
uniform sampler2D lightFunc;
@@ -90,7 +91,7 @@ void main()
vec4 diffuse = texture2DRect(diffuseRect, tc);
//convert to gamma space
- //diffuse.rgb = linear_to_srgb(diffuse.rgb);
+ diffuse.rgb = linear_to_srgb(diffuse.rgb);// Colour space and shader fixes for BUG-228586 (Rye) uniform sampler2DRect depthMap;
vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy);
vec3 color = vec3(0);
diff --git a/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl
index 694b19cdfb..b1f8187f75 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl
@@ -177,8 +177,11 @@ void main()
float da = dot(norm, lv);
vec3 diff_tex = texture2DRect(diffuseRect, frag.xy).rgb;
- //light shaders output linear and are gamma corrected later in postDeferredGammaCorrectF.glsl
- diff_tex.rgb = srgb_to_linear(diff_tex.rgb);
+ // Colour space and shader fixes for BUG-228586
+ // This makes the comment below incorrect, it will presumably be removed if/when the lab apply the proper changes)
+ // // light shaders output linear and are gamma corrected later in postDeferredGammaCorrectF.glsl
+ // diff_tex.rgb = srgb_to_linear(diff_tex.rgb);
+ //
vec4 spec = texture2DRect(specularRect, frag.xy);
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightAlphaMaskNonIndexedF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightAlphaMaskNonIndexedF.glsl
index b768d609f4..d87403c78f 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightAlphaMaskNonIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightAlphaMaskNonIndexedF.glsl
@@ -43,13 +43,13 @@ void default_lighting()
{
vec4 color = texture2D(diffuseMap,vary_texcoord0.xy);
- color *= vertex_color;
-
if (color.a < minimum_alpha)
{
discard;
}
-
+
+ color *= vertex_color;
+
color.rgb = atmosLighting(color.rgb);
color.rgb = scaleSoftClip(color.rgb);
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterAlphaMaskF.glsl
index d04cd79f4b..37cac5f437 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterAlphaMaskF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterAlphaMaskF.glsl
@@ -43,13 +43,13 @@ void fullbright_lighting_water()
{
vec4 color = diffuseLookup(vary_texcoord0.xy);
- color.rgb *= vertex_color.rgb;
-
if (color.a < minimum_alpha)
{
discard;
}
+ color.rgb *= vertex_color.rgb;
+
color.rgb = fullbrightAtmosTransport(color.rgb);
frag_color = applyWaterFog(color);
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterNonIndexedAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterNonIndexedAlphaMaskF.glsl
index 3b9c04b22b..c98db4795c 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterNonIndexedAlphaMaskF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterNonIndexedAlphaMaskF.glsl
@@ -41,13 +41,15 @@ VARYING vec2 vary_texcoord0;
void fullbright_lighting_water()
{
- vec4 color = texture2D(diffuseMap, vary_texcoord0.xy) * vertex_color;
+ vec4 color = texture2D(diffuseMap, vary_texcoord0.xy);
if (color.a < minimum_alpha)
{
discard;
}
+ color.rgb *= vertex_color.rgb;
+
color.rgb = fullbrightAtmosTransport(color.rgb);
frag_color = applyWaterFog(color);
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightWaterAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightWaterAlphaMaskF.glsl
index 0916797259..9c89c09573 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightWaterAlphaMaskF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightWaterAlphaMaskF.glsl
@@ -41,13 +41,13 @@ void default_lighting_water()
{
vec4 color = diffuseLookup(vary_texcoord0.xy);
- color.rgb *= vertex_color.rgb;
-
if (color.a < minimum_alpha)
{
discard;
}
+ color.rgb *= vertex_color.rgb;
+
color.rgb = atmosLighting(color.rgb);
frag_color = applyWaterFog(color);
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightWaterAlphaMaskNonIndexedF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightWaterAlphaMaskNonIndexedF.glsl
index f2a84f1d42..9de7a03180 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightWaterAlphaMaskNonIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightWaterAlphaMaskNonIndexedF.glsl
@@ -43,13 +43,13 @@ void default_lighting_water()
{
vec4 color = texture2D(diffuseMap,vary_texcoord0.xy);
- color.rgb *= vertex_color.rgb;
-
if (color.a < minimum_alpha)
{
discard;
}
+ color.rgb *= vertex_color.rgb;
+
color.rgb = atmosLighting(color.rgb);
color = applyWaterFog(color);
diff --git a/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl
index 5d7a28c359..e67c1041ee 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl
@@ -191,11 +191,12 @@ void main()
float da = dot(norm, lv);
vec3 diff_tex = texture2DRect(diffuseRect, frag.xy).rgb;
- // SL-12005 Projector light pops as we get closer, more objectionable than being in wrong color space.
- // We can't switch to linear here unless we do it everywhere*
- // *gbuffer IS sRGB, convert to linear since this shader outputs linear
- diff_tex.rgb = srgb_to_linear(diff_tex.rgb);
-
+ // Colour space and shader fixes for BUG-228586
+ // removing comments as colour space change
+ // // SL-12005 Projector light pops as we get closer, more objectionable than being in wrong color space.
+ // // We can't switch to linear here unless we do it everywhere*
+ // // *gbuffer IS sRGB, convert to linear since this shader outputs linear
+ // diff_tex.rgb = srgb_to_linear(diff_tex.rgb);
vec4 spec = texture2DRect(specularRect, frag.xy);
vec3 dlit = vec3(0, 0, 0);
diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl
index f4db53e0b7..34a0ad2126 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl
@@ -88,6 +88,10 @@ void main()
da = pow(da, light_gamma);
vec4 diffuse = texture2DRect(diffuseRect, tc);
+ // Colour space and shader fixes for BUG-228586 (Rye)
+ // convert to gamma space
+ diffuse.rgb = linear_to_srgb(diffuse.rgb);
+ //
vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy);
vec2 scol_ambocc = texture2DRect(lightMap, vary_fragcoord.xy).rg;
diff --git a/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl
index 5ab0b5c5b4..bcf4e14382 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl
@@ -188,8 +188,10 @@ void main()
lv = proj_origin-pos.xyz;
lv = normalize(lv);
float da = dot(norm, lv);
-
- vec3 diff_tex = srgb_to_linear(texture2DRect(diffuseRect, frag.xy).rgb);
+ // Colour space and shader fixes for BUG-228586 (Rye)
+ // vec3 diff_tex = srgb_to_linear(texture2DRect(diffuseRect, frag.xy).rgb);
+ vec3 diff_tex = texture2DRect(diffuseRect, frag.xy).rgb;
+ //
vec4 spec = texture2DRect(specularRect, frag.xy);
vec3 dlit = vec3(0, 0, 0);
diff --git a/indra/newview/fschathistory.cpp b/indra/newview/fschathistory.cpp
index 262d0fe1f2..61bcf6b519 100644
--- a/indra/newview/fschathistory.cpp
+++ b/indra/newview/fschathistory.cpp
@@ -1505,17 +1505,10 @@ void FSChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL
}
name_params.use_default_link_style = false;
- name_params.link_href = LLSLURL("agent", chat.mFromID, "inspect").getSLURLString();
+ name_params.link_href = LLSLURL(from_me ? "agentself" : "agent", chat.mFromID, "inspect").getSLURLString();
- if (from_me && gSavedSettings.getBOOL("FSChatHistoryShowYou"))
- {
- appendText(LLTrans::getString("AgentNameSubst"), prependNewLineState, name_params);
- }
- else
- {
- // Add link to avatar's inspector and delimiter to message.
- appendText(std::string(name_params.link_href), prependNewLineState, name_params);
- }
+ // Add link to avatar's inspector and delimiter to message.
+ appendText(std::string(name_params.link_href), prependNewLineState, name_params);
prependNewLineState = false;
diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp
index 0bd8fbfa21..23e6d443e1 100644
--- a/indra/newview/llagentcamera.cpp
+++ b/indra/newview/llagentcamera.cpp
@@ -1323,6 +1323,38 @@ void LLAgentCamera::updateCamera()
gAgentCamera.getPanDownKey() > 0.f); // bottom
}
+ // Phototools camera
+ camera_floater = LLFloaterReg::findTypedInstance("phototools_camera");
+ if (camera_floater)
+ {
+ camera_floater->mRotate->setToggleState(gAgentCamera.getOrbitRightKey() > 0.f, // left
+ gAgentCamera.getOrbitUpKey() > 0.f, // top
+ gAgentCamera.getOrbitLeftKey() > 0.f, // right
+ gAgentCamera.getOrbitDownKey() > 0.f); // bottom
+
+ camera_floater->mTrack->setToggleState(gAgentCamera.getPanLeftKey() > 0.f, // left
+ gAgentCamera.getPanUpKey() > 0.f, // top
+ gAgentCamera.getPanRightKey() > 0.f, // right
+ gAgentCamera.getPanDownKey() > 0.f); // bottom
+ }
+ //
+
+ // Optional small camera floater
+ camera_floater = LLFloaterReg::findTypedInstance("fs_camera_small");
+ if (camera_floater)
+ {
+ camera_floater->mRotate->setToggleState(gAgentCamera.getOrbitRightKey() > 0.f, // left
+ gAgentCamera.getOrbitUpKey() > 0.f, // top
+ gAgentCamera.getOrbitLeftKey() > 0.f, // right
+ gAgentCamera.getOrbitDownKey() > 0.f); // bottom
+
+ camera_floater->mTrack->setToggleState(gAgentCamera.getPanLeftKey() > 0.f, // left
+ gAgentCamera.getPanUpKey() > 0.f, // top
+ gAgentCamera.getPanRightKey() > 0.f, // right
+ gAgentCamera.getPanDownKey() > 0.f); // bottom
+ }
+ //
+
// Handle camera movement based on keyboard.
const F32 ORBIT_OVER_RATE = 90.f * DEG_TO_RAD; // radians per second
const F32 ORBIT_AROUND_RATE = 90.f * DEG_TO_RAD; // radians per second
diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp
index c8786ef11d..d8e45acac7 100644
--- a/indra/newview/llfloatercamera.cpp
+++ b/indra/newview/llfloatercamera.cpp
@@ -268,6 +268,12 @@ void LLFloaterCamera::resetCameraMode()
if (!floater_camera) return;
floater_camera->switchMode(CAMERA_CTRL_MODE_PAN);
//
+
+ // Optional small camera floater
+ floater_camera = LLFloaterCamera::findSmallInstance();
+ if (!floater_camera) return;
+ floater_camera->switchMode(CAMERA_CTRL_MODE_PAN);
+ //
}
void LLFloaterCamera::onAvatarEditingAppearance(bool editing)
@@ -282,6 +288,12 @@ void LLFloaterCamera::onAvatarEditingAppearance(bool editing)
if (!floater_camera) return;
floater_camera->handleAvatarEditingAppearance(editing);
//
+
+ // Optional small camera floater
+ floater_camera = LLFloaterCamera::findSmallInstance();
+ if (!floater_camera) return;
+ floater_camera->handleAvatarEditingAppearance(editing);
+ //
}
void LLFloaterCamera::handleAvatarEditingAppearance(bool editing)
@@ -324,6 +336,18 @@ void LLFloaterCamera::toPrevMode()
}
}
//
+
+ // Optional small camera floater
+ floater_camera = LLFloaterCamera::findSmallInstance();
+ if (floater_camera)
+ {
+ floater_camera->updateItemsSelection();
+ if(floater_camera->inFreeCameraMode())
+ {
+ activate_camera_tool();
+ }
+ }
+ //
}
LLFloaterCamera* LLFloaterCamera::findInstance()
@@ -338,6 +362,13 @@ LLFloaterCamera* LLFloaterCamera::findPhototoolsInstance()
}
//
+// Optional small camera floater
+LLFloaterCamera* LLFloaterCamera::findSmallInstance()
+{
+ return LLFloaterReg::findTypedInstance("fs_camera_small");
+}
+//
+
void LLFloaterCamera::onOpen(const LLSD& key)
{
LLFirstUse::viewPopup();
@@ -353,7 +384,9 @@ void LLFloaterCamera::onOpen(const LLSD& key)
toPrevMode();
mClosed = FALSE;
- populatePresetCombo();
+ // Optional small camera floater
+ if (mPresetCombo)
+ populatePresetCombo();
}
void LLFloaterCamera::onClose(bool app_quitting)
@@ -381,7 +414,8 @@ LLFloaterCamera::LLFloaterCamera(const LLSD& val)
: LLFloater(val),
mClosed(FALSE),
mCurrMode(CAMERA_CTRL_MODE_PAN),
- mPrevMode(CAMERA_CTRL_MODE_PAN)
+ mPrevMode(CAMERA_CTRL_MODE_PAN),
+ mPresetCombo(nullptr) // Optional small camera floater
{
LLHints::getInstance()->registerHintTarget("view_popup", getHandle());
mCommitCallbackRegistrar.add("CameraPresets.ChangeView", boost::bind(&LLFloaterCamera::onClickCameraItem, _2));
@@ -395,7 +429,7 @@ BOOL LLFloaterCamera::postBuild()
mRotate = getChild(ORBIT);
mZoom = findChild(ZOOM);
mTrack = getChild(PAN);
- mPresetCombo = getChild("preset_combo");
+ mPresetCombo = findChild("preset_combo"); // Optional small camera floater
// Improved camera floater
//getChild("precise_ctrs_label")->setShowCursorHand(false);
@@ -421,8 +455,15 @@ BOOL LLFloaterCamera::postBuild()
}
//
- mPresetCombo->setCommitCallback(boost::bind(&LLFloaterCamera::onCustomPresetSelected, this));
- LLPresetsManager::getInstance()->setPresetListChangeCameraCallback(boost::bind(&LLFloaterCamera::populatePresetCombo, this));
+ // Optional small camera floater
+ //mPresetCombo->setCommitCallback(boost::bind(&LLFloaterCamera::onCustomPresetSelected, this));
+ //LLPresetsManager::getInstance()->setPresetListChangeCameraCallback(boost::bind(&LLFloaterCamera::populatePresetCombo, this));
+ if (mPresetCombo)
+ {
+ mPresetCombo->setCommitCallback(boost::bind(&LLFloaterCamera::onCustomPresetSelected, this));
+ LLPresetsManager::getInstance()->setPresetListChangeCameraCallback(boost::bind(&LLFloaterCamera::populatePresetCombo, this));
+ }
+ //
update();
@@ -598,6 +639,19 @@ void LLFloaterCamera::onClickCameraItem(const LLSD& param)
camera_floater->fromFreeToPresets();
}
//
+
+ // Optional small camera floater
+ camera_floater = LLFloaterCamera::findSmallInstance();
+ if (camera_floater)
+ {
+ // FIRE-29950: Re-add weird legacy object view camera toggle
+ //camera_floater->switchMode(CAMERA_CTRL_MODE_FREE_CAMERA);
+ camera_floater->mCurrMode == CAMERA_CTRL_MODE_FREE_CAMERA ? camera_floater->switchMode(CAMERA_CTRL_MODE_PAN) : camera_floater->switchMode(CAMERA_CTRL_MODE_FREE_CAMERA);
+ //
+ camera_floater->updateItemsSelection();
+ camera_floater->fromFreeToPresets();
+ }
+ //
}
// Improved camera floater
else if ("reset_view" == name)
@@ -612,6 +666,12 @@ void LLFloaterCamera::onClickCameraItem(const LLSD& param)
camera_floater->switchMode(CAMERA_CTRL_MODE_PAN);
//
+ // Optional small camera floater
+ camera_floater = LLFloaterCamera::findSmallInstance();
+ if (camera_floater)
+ camera_floater->switchMode(CAMERA_CTRL_MODE_PAN);
+ //
+
gAgentCamera.changeCameraToDefault();
switchToPreset("rear_view");
}
@@ -628,6 +688,12 @@ void LLFloaterCamera::onClickCameraItem(const LLSD& param)
camera_floater->switchMode(CAMERA_CTRL_MODE_PAN);
//
+ // Optional small camera floater
+ camera_floater = LLFloaterCamera::findSmallInstance();
+ if (camera_floater)
+ camera_floater->switchMode(CAMERA_CTRL_MODE_PAN);
+ //
+
switchToPreset(name);
}
}
@@ -696,6 +762,15 @@ void LLFloaterCamera::switchToPreset(const std::string& name)
camera_floater->fromFreeToPresets();
}
//
+
+ // Optional small camera floater
+ camera_floater = LLFloaterCamera::findSmallInstance();
+ if (camera_floater)
+ {
+ camera_floater->updateItemsSelection();
+ camera_floater->fromFreeToPresets();
+ }
+ //
}
void LLFloaterCamera::fromFreeToPresets()
diff --git a/indra/newview/llfloatercamera.h b/indra/newview/llfloatercamera.h
index 95572fec23..269e4d1617 100644
--- a/indra/newview/llfloatercamera.h
+++ b/indra/newview/llfloatercamera.h
@@ -95,6 +95,8 @@ private:
static LLFloaterCamera* findInstance();
// Phototools camera
static LLFloaterCamera* findPhototoolsInstance();
+ // Optional small camera floater
+ static LLFloaterCamera* findSmallInstance();
/*virtual*/ BOOL postBuild();
diff --git a/indra/newview/llfloaterconversationpreview.cpp b/indra/newview/llfloaterconversationpreview.cpp
index 75d2341ed8..3bd05cd86d 100644
--- a/indra/newview/llfloaterconversationpreview.cpp
+++ b/indra/newview/llfloaterconversationpreview.cpp
@@ -102,11 +102,15 @@ BOOL LLFloaterConversationPreview::postBuild()
file = "chat";
}
mChatHistoryFileName = file;
- // Obsolete because of https://bitbucket.org/lindenlab/viewer/commits/57b32eb01cd35bbac440569df885036eb24f2369
- //if (mIsGroup && !LLStringUtil::endsWith(mChatHistoryFileName, GROUP_CHAT_SUFFIX))
- //{
- // mChatHistoryFileName += GROUP_CHAT_SUFFIX;
- //}
+ // Broken version got removed in https://bitbucket.org/lindenlab/viewer/commits/57b32eb01cd35bbac440569df885036eb24f2369
+ // but this is actually needed in the fixed form: If a group chat
+ // log is stored in conversation.log without the suffix, the filename
+ // will not be updated until the conversation is removed from the log,
+ // resulting in the old chat log being displayed.
+ if (mIsGroup && !LLStringUtil::endsWith(mChatHistoryFileName, GROUP_CHAT_SUFFIX))
+ {
+ mChatHistoryFileName += GROUP_CHAT_SUFFIX;
+ }
//
LLStringUtil::format_map_t args;
args["[NAME]"] = name;
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index 7b41808c94..f7ef007017 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -2513,7 +2513,6 @@ void LLFloaterPreference::disableUnavailableSettings()
LLComboBox* ctrl_reflections = getChild("Reflections");
LLCheckBoxCtrl* ctrl_avatar_vp = getChild("AvatarVertexProgram");
LLCheckBoxCtrl* ctrl_avatar_cloth = getChild("AvatarCloth");
- LLCheckBoxCtrl* ctrl_shader_enable = getChild("BasicShaders");
LLCheckBoxCtrl* ctrl_wind_light = getChild("WindLightUseAtmosShaders");
LLCheckBoxCtrl* ctrl_deferred = getChild("UseLightShaders");
LLComboBox* ctrl_shadows = getChild("ShadowDetail");
@@ -2521,39 +2520,6 @@ void LLFloaterPreference::disableUnavailableSettings()
LLCheckBoxCtrl* ctrl_dof = getChild("UseDoF");
LLSliderCtrl* sky = getChild("SkyMeshDetail");
- // if vertex shaders off, disable all shader related products
- if (!LLFeatureManager::getInstance()->isFeatureAvailable("VertexShaderEnable"))
- {
- ctrl_shader_enable->setEnabled(FALSE);
- ctrl_shader_enable->setValue(FALSE);
-
- ctrl_wind_light->setEnabled(FALSE);
- ctrl_wind_light->setValue(FALSE);
-
- sky->setEnabled(FALSE);
-
- ctrl_reflections->setEnabled(FALSE);
- ctrl_reflections->setValue(0);
-
- ctrl_avatar_vp->setEnabled(FALSE);
- ctrl_avatar_vp->setValue(FALSE);
-
- ctrl_avatar_cloth->setEnabled(FALSE);
- ctrl_avatar_cloth->setValue(FALSE);
-
- ctrl_shadows->setEnabled(FALSE);
- ctrl_shadows->setValue(0);
-
- ctrl_ssao->setEnabled(FALSE);
- ctrl_ssao->setValue(FALSE);
-
- ctrl_dof->setEnabled(FALSE);
- ctrl_dof->setValue(FALSE);
-
- ctrl_deferred->setEnabled(FALSE);
- ctrl_deferred->setValue(FALSE);
- }
-
// disabled windlight
if (!LLFeatureManager::getInstance()->isFeatureAvailable("WindLightUseAtmosShaders"))
{
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 91f9c85dbb..b50057f3d5 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -4392,7 +4392,9 @@ void LLFolderBridge::buildContextMenuOptions(U32 flags, menuentry_vec_t& items
}
//
// Fix "outfits" context menu
- if (outfits_id == mUUID)
+ if (model->isObjectDescendentOf(mUUID, outfits_id) && getCategory() &&
+ (getCategory()->getPreferredType() == LLFolderType::FT_NONE ||
+ getCategory()->getPreferredType() == LLFolderType::FT_MY_OUTFITS))
{
items.push_back(std::string("New Outfit"));
}
@@ -4498,17 +4500,17 @@ void LLFolderBridge::buildContextMenuOptions(U32 flags, menuentry_vec_t& items
// Not sure what the right thing is to do here.
if (!isCOFFolder() && cat && (cat->getPreferredType() != LLFolderType::FT_OUTFIT))
{
- // Fix "outfits" context menu
- //if (!isInboxFolder()) // don't allow creation in inbox
- if (!isInboxFolder() && outfits_id != mUUID) // don't allow creation in inbox
- //
+ if (!isInboxFolder()) // don't allow creation in inbox
{
// Do not allow to create 2-level subfolder in the Calling Card/Friends folder. EXT-694.
if (!LLFriendCardsManager::instance().isCategoryInFriendFolder(cat))
{
items.push_back(std::string("New Folder"));
}
- if (!isMarketplaceListingsFolder())
+ // Fix "outfits" context menu
+ //if (!isMarketplaceListingsFolder())
+ if (!isMarketplaceListingsFolder() && !model->isObjectDescendentOf(mUUID, outfits_id))
+ //
{
items.push_back(std::string("New Script"));
items.push_back(std::string("New Note"));
diff --git a/indra/newview/lllogchat.cpp b/indra/newview/lllogchat.cpp
index 6a23d9acf1..3a8397fa37 100644
--- a/indra/newview/lllogchat.cpp
+++ b/indra/newview/lllogchat.cpp
@@ -470,7 +470,13 @@ void LLLogChat::loadChatHistory(const std::string& file_name, std::list& m
if (is_group)
{
std::string old_name(file_name);
- old_name.erase(old_name.size() - GROUP_CHAT_SUFFIX.size());
+ // FIRE-30582: Fix out of range crash
+ //old_name.erase(old_name.size() - GROUP_CHAT_SUFFIX.size());
+ if (LLStringUtil::endsWith(old_name, GROUP_CHAT_SUFFIX))
+ {
+ old_name.erase(old_name.size() - GROUP_CHAT_SUFFIX.size());
+ }
+ //
fptr = LLFile::fopen(LLLogChat::makeLogFileName(old_name), "r");
if (fptr)
{
@@ -1234,7 +1240,13 @@ void LLLoadHistoryThread::loadHistory(const std::string& file_name, std::list FIRE-30582: Fix out of range crash
+ //old_name.erase(old_name.size() - GROUP_CHAT_SUFFIX.size());
+ if (LLStringUtil::endsWith(old_name, GROUP_CHAT_SUFFIX))
+ {
+ old_name.erase(old_name.size() - GROUP_CHAT_SUFFIX.size());
+ }
+ //
fptr = LLFile::fopen(LLLogChat::makeLogFileName(old_name), "r");
if (fptr)
{
diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp
index 3621570aa2..de780f17ac 100644
--- a/indra/newview/llpanelmaininventory.cpp
+++ b/indra/newview/llpanelmaininventory.cpp
@@ -182,6 +182,7 @@ LLPanelMainInventory::LLPanelMainInventory(const LLPanel::Params& p)
mFilterMap["filter_type_textures"] = 0x01 << LLInventoryType::IT_TEXTURE;
mFilterMap["filter_type_snapshots"] = 0x01 << LLInventoryType::IT_SNAPSHOT;
mFilterMap["filter_type_meshes"] = 0x01 << LLInventoryType::IT_MESH;
+ mFilterMap["filter_type_settings"] = 0x01 << LLInventoryType::IT_SETTINGS;
// initialize empty filter mask
mFilterMask = 0;
diff --git a/indra/newview/llpanelpresetscamerapulldown.cpp b/indra/newview/llpanelpresetscamerapulldown.cpp
index d21a484fb0..b1cbbe7931 100644
--- a/indra/newview/llpanelpresetscamerapulldown.cpp
+++ b/indra/newview/llpanelpresetscamerapulldown.cpp
@@ -146,5 +146,9 @@ void LLPanelPresetsCameraPulldown::onViewButtonClick(const LLSD& user_data)
// close the minicontrol, we're bringing up the big one
setVisible(FALSE);
- LLFloaterReg::toggleInstanceOrBringToFront("camera");
+ // Optional small camera floater
+ //LLFloaterReg::toggleInstanceOrBringToFront("camera");
+ std::string floater_name = gSavedSettings.getBOOL("FSUseSmallCameraFloater") ? "fs_camera_small" : "camera";
+ LLFloaterReg::toggleInstanceOrBringToFront(floater_name);
+ //
}
diff --git a/indra/newview/llpanelprofile.cpp b/indra/newview/llpanelprofile.cpp
index 4b1ca0db89..4601e83b34 100644
--- a/indra/newview/llpanelprofile.cpp
+++ b/indra/newview/llpanelprofile.cpp
@@ -226,6 +226,20 @@ public:
};
LLAgentHandler gAgentHandler;
+// FIRE-30611: "You" in transcript is underlined
+class FSAgentSelfHandler : public LLCommandHandler
+{
+public:
+ // requires trusted browser to trigger
+ FSAgentSelfHandler() : LLCommandHandler("agentself", UNTRUSTED_THROTTLE) { }
+
+ bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
+ {
+ return gAgentHandler.handle(params, query_map, web);
+ }
+};
+FSAgentSelfHandler gAgentSelfHandler;
+//
//////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/lltoolgrab.cpp b/indra/newview/lltoolgrab.cpp
index a0513b8c44..99138bbbd5 100644
--- a/indra/newview/lltoolgrab.cpp
+++ b/indra/newview/lltoolgrab.cpp
@@ -1162,7 +1162,9 @@ LLVector3d LLToolGrabBase::getGrabPointGlobal()
void send_ObjectGrab_message(LLViewerObject* object, const LLPickInfo & pick, const LLVector3 &grab_offset)
{
- if (!object) return;
+ // Crash fix
+ //if (!object) return;
+ if (!object || !object->getRegion()) return;
LLMessageSystem *msg = gMessageSystem;
@@ -1199,7 +1201,9 @@ void send_ObjectGrab_message(LLViewerObject* object, const LLPickInfo & pick, co
void send_ObjectDeGrab_message(LLViewerObject* object, const LLPickInfo & pick)
{
- if (!object) return;
+ // Crash fix
+ //if (!object) return;
+ if (!object || !object->getRegion()) return;
LLMessageSystem *msg = gMessageSystem;
diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp
index 48f9ed7477..eebce59f9a 100644
--- a/indra/newview/llviewercontrol.cpp
+++ b/indra/newview/llviewercontrol.cpp
@@ -1019,6 +1019,20 @@ void handleRenderHiDPIChanged(const LLSD& newvalue)
}
// FIRE-24081
+// Optional small camera floater
+void handleSmallCameraFloaterChanged(const LLSD& newValue)
+{
+ std::string old_floater_name = newValue.asBoolean() ? "camera" : "fs_camera_small";
+ std::string new_floater_name = newValue.asBoolean() ? "fs_camera_small" : "camera";
+
+ if (LLFloaterReg::instanceVisible(old_floater_name))
+ {
+ LLFloaterReg::hideInstance(old_floater_name);
+ LLFloaterReg::showInstance(new_floater_name);
+ }
+}
+//
+
////////////////////////////////////////////////////////////////////////////
void settings_setup_listeners()
@@ -1263,6 +1277,9 @@ void settings_setup_listeners()
// Dynamic texture memory calculation
gSavedSettings.getControl("FSDynamicTextureMemory")->getSignal()->connect(boost::bind(&handleDynamicTextureMemoryChanged, _2));
+
+ // Optional small camera floater
+ gSavedSettings.getControl("FSUseSmallCameraFloater")->getSignal()->connect(boost::bind(&handleSmallCameraFloaterChanged, _2));
}
#if TEST_CACHED_CONTROL
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index 81f7325292..860b44d6f4 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -266,6 +266,8 @@ void LLViewerFloaterReg::registerFloaters()
LLFloaterReg::add("bumps", "floater_bumps.xml", (LLFloaterBuildFunc)&LLFloaterReg::build);
LLFloaterReg::add("camera", "floater_camera.xml", (LLFloaterBuildFunc)&LLFloaterReg::build);
+ // Optional small camera floater
+ LLFloaterReg::add("fs_camera_small", "floater_fs_camera_small.xml", (LLFloaterBuildFunc)&LLFloaterReg::build);
LLFloaterReg::add("camera_presets", "floater_camera_presets.xml", (LLFloaterBuildFunc)&LLFloaterReg::build);
LLFloaterReg::add("chat_voice", "floater_voice_chat_volume.xml", (LLFloaterBuildFunc)&LLFloaterReg::build);
// [FS communication UI]
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 0ab5905eaa..4508822330 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -11404,6 +11404,27 @@ bool use_http_textures()
}
//
+// Optional small camera floater
+class FSToggleCameraFloater : public view_listener_t
+{
+ bool handleEvent(const LLSD& userdata)
+ {
+ std::string floater_name = gSavedSettings.getBOOL("FSUseSmallCameraFloater") ? "fs_camera_small" : "camera";
+ LLFloaterReg::toggleInstance(floater_name);
+ return true;
+ }
+};
+
+class FSCheckCameraFloater : public view_listener_t
+{
+ bool handleEvent(const LLSD& userdata)
+ {
+ static LLCachedControl fsUseSmallCameraFloater(gSavedSettings, "FSUseSmallCameraFloater");
+ return LLFloaterReg::instanceVisible(fsUseSmallCameraFloater ? "fs_camera_small" : "camera");
+ }
+};
+//
+
void initialize_menus()
{
// A parameterized event handler used as ctrl-8/9/0 zoom controls below.
@@ -11499,7 +11520,11 @@ void initialize_menus()
// Add reset camera angles menu
view_listener_t::addMenu(new LLViewResetCameraAngles(), "View.ResetCameraAngles");
//
-
+ // Optional small camera floater
+ view_listener_t::addMenu(new FSToggleCameraFloater(), "View.ToggleCameraFloater");
+ view_listener_t::addMenu(new FSCheckCameraFloater(), "View.CheckCameraFloater");
+ //
+
// Me > Movement
view_listener_t::addMenu(new LLAdvancedAgentFlyingInfo(), "Agent.getFlying");
diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp
index 8db4a9fd16..2192234f48 100644
--- a/indra/newview/llviewermenufile.cpp
+++ b/indra/newview/llviewermenufile.cpp
@@ -84,6 +84,10 @@
#include "llviewernetwork.h"
+// FIRE-30632: Bulk Windlight import
+#include "llenvironment.h"
+#include "llsettingsvo.h"
+
class LLFileEnableUpload : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
@@ -1032,6 +1036,100 @@ void upload_new_resource(
}
}
+// FIRE-30632: Bulk Windlight import
+static std::set windlight_filenames;
+static bool bulk_windlight_import_active = false;
+
+void on_windlight_imported(LLUUID inventory_id, LLSD results, const std::string& name)
+{
+ if (inventory_id.isNull() || !results["success"].asBoolean())
+ {
+ LLSD args;
+ args["NAME"] = name;
+ LLNotificationsUtil::add("CantCreateInventoryName", args);
+ }
+
+ windlight_filenames.erase(name);
+
+ if (windlight_filenames.empty())
+ {
+ bulk_windlight_import_active = false;
+ LLUploadDialog::modalUploadFinished();
+ LLNotificationsUtil::add("WindlightBulkImportFinished");
+ }
+}
+
+const void import_windlight_bulk(const std::vector& filenames, LLFilePicker::ELoadFilter filter_type, LLSettingsType::type_e settings_type)
+{
+ LLSD messages;
+ LLSettingsBase::ptr_t settings;
+ if (filenames.size() < 1) return;
+
+ bulk_windlight_import_active = true;
+ LLUploadDialog::modalUploadDialog(LLTrans::getString("ImportingWindlightBulk"));
+
+ const LLUUID parent_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_SETTINGS);
+
+ windlight_filenames.clear();
+ windlight_filenames.insert(filenames.begin(), filenames.end());
+
+ for (auto& filename : filenames)
+ {
+ switch (settings_type)
+ {
+ case LLSettingsType::ST_SKY:
+ settings = LLEnvironment::createSkyFromLegacyPreset(filename, messages);
+ break;
+ case LLSettingsType::ST_WATER:
+ settings = LLEnvironment::createWaterFromLegacyPreset(filename, messages);
+ break;
+ case LLSettingsType::ST_DAYCYCLE:
+ settings = LLEnvironment::createDayCycleFromLegacyPreset(filename, messages);
+ break;
+ default:
+ settings.reset();
+ break;
+ }
+
+ if (settings)
+ {
+ LLSettingsVOBase::createInventoryItem(settings, parent_id, LLURI::unescape(gDirUtilp->getBaseFileName(filename, true)),
+ [filename](LLUUID asset_id, LLUUID inventory_id, LLUUID, LLSD results) { on_windlight_imported(inventory_id, results, filename); });
+ }
+ else
+ {
+ LLNotificationsUtil::add("WLImportFail", messages);
+ windlight_filenames.erase(filename);
+ }
+ }
+
+ // For error cases
+ if (windlight_filenames.empty())
+ {
+ bulk_windlight_import_active = false;
+ LLUploadDialog::modalUploadFinished();
+ LLNotificationsUtil::add("WindlightBulkImportFinished");
+ }
+}
+
+class FSFileImportWindlightBulk : public view_listener_t
+{
+ bool handleEvent(const LLSD& userdata)
+ {
+ LLSettingsType::type_e settings_type = (LLSettingsType::type_e)userdata.asInteger();
+ (new LLFilePickerReplyThread(boost::bind(&import_windlight_bulk, _1, _2, settings_type), LLFilePicker::FFLOAD_XML, true))->getFile();
+ return true;
+ }
+};
+
+class FSFileEnableImportWindlightBulk : public view_listener_t
+{
+ bool handleEvent(const LLSD& userdata)
+ {
+ return !bulk_windlight_import_active;
+ }
+};
+//
void init_menu_file()
{
@@ -1053,5 +1151,10 @@ void init_menu_file()
view_listener_t::addMenu(new LLMeshUploadVisible(), "File.VisibleUploadModel");
view_listener_t::addCommit(new FSFileImportLinkset(), "File.ImportLinkset"); // Import linkset item
+ // FIRE-30632: Bulk Windlight import
+ view_listener_t::addCommit(new FSFileImportWindlightBulk(), "File.ImportWindlightBulk");
+ view_listener_t::addEnable(new FSFileEnableImportWindlightBulk(), "File.EnableImportWindlightBulk");
+ //
+
// "File.SaveTexture" moved to llpanelmaininventory so that it can be properly handled.
}
diff --git a/indra/newview/quickprefs.cpp b/indra/newview/quickprefs.cpp
index 81570ce6e7..b9d272ec4f 100644
--- a/indra/newview/quickprefs.cpp
+++ b/indra/newview/quickprefs.cpp
@@ -61,12 +61,17 @@
class FSSettingsCollector : public LLInventoryCollectFunctor
{
public:
- FSSettingsCollector() {}
+ FSSettingsCollector()
+ {
+ mMarketplaceFolderUUID = gInventory.findCategoryUUIDForType(LLFolderType::FT_MARKETPLACE_LISTINGS, false);
+ }
+
virtual ~FSSettingsCollector() {}
bool operator()(LLInventoryCategory* cat, LLInventoryItem* item)
{
if (item && item->getType() == LLAssetType::AT_SETTINGS &&
+ !gInventory.isObjectDescendentOf(item->getUUID(), mMarketplaceFolderUUID) &&
mSeen.find(item->getAssetUUID()) == mSeen.end())
{
mSeen.insert(item->getAssetUUID());
@@ -79,6 +84,7 @@ public:
}
protected:
+ LLUUID mMarketplaceFolderUUID;
std::set mSeen;
};
diff --git a/indra/newview/res/viewerRes.rc b/indra/newview/res/viewerRes.rc
index 4323cdcd17..eb32856565 100755
--- a/indra/newview/res/viewerRes.rc
+++ b/indra/newview/res/viewerRes.rc
@@ -160,7 +160,7 @@ BEGIN
VALUE "FileDescription", "Firestorm"
VALUE "FileVersion", "${VIEWER_VERSION_MAJOR}.${VIEWER_VERSION_MINOR}.${VIEWER_VERSION_PATCH}.${VIEWER_VERSION_REVISION}"
VALUE "InternalName", "Firestorm"
- VALUE "LegalCopyright", "Copyright \251 2010-2020, The Phoenix Firestorm Project, Inc."
+ VALUE "LegalCopyright", "Copyright \251 2010-2021, The Phoenix Firestorm Project, Inc."
VALUE "OriginalFilename", "Firestorm.exe"
VALUE "ProductName", "Firestorm"
VALUE "ProductVersion", "${VIEWER_VERSION_MAJOR}.${VIEWER_VERSION_MINOR}.${VIEWER_VERSION_PATCH}.${VIEWER_VERSION_REVISION}"
diff --git a/indra/newview/skins/ansastorm/textures/bottomtray/Cam_Rotate_In.png b/indra/newview/skins/ansastorm/textures/bottomtray/Cam_Rotate_In.png
new file mode 100644
index 0000000000..afcfbf6071
Binary files /dev/null and b/indra/newview/skins/ansastorm/textures/bottomtray/Cam_Rotate_In.png differ
diff --git a/indra/newview/skins/ansastorm/textures/bottomtray/Cam_Tracking_In.png b/indra/newview/skins/ansastorm/textures/bottomtray/Cam_Tracking_In.png
new file mode 100644
index 0000000000..1df98a8f29
Binary files /dev/null and b/indra/newview/skins/ansastorm/textures/bottomtray/Cam_Tracking_In.png differ
diff --git a/indra/newview/skins/ansastorm/themes/blood/textures/bottomtray/Cam_Rotate_In.png b/indra/newview/skins/ansastorm/themes/blood/textures/bottomtray/Cam_Rotate_In.png
new file mode 100644
index 0000000000..6b37e0db87
Binary files /dev/null and b/indra/newview/skins/ansastorm/themes/blood/textures/bottomtray/Cam_Rotate_In.png differ
diff --git a/indra/newview/skins/ansastorm/themes/blood/textures/bottomtray/Cam_Tracking_In.png b/indra/newview/skins/ansastorm/themes/blood/textures/bottomtray/Cam_Tracking_In.png
new file mode 100644
index 0000000000..e1ce710bf6
Binary files /dev/null and b/indra/newview/skins/ansastorm/themes/blood/textures/bottomtray/Cam_Tracking_In.png differ
diff --git a/indra/newview/skins/ansastorm/themes/classic_brown/textures/bottomtray/Cam_Rotate_In.png b/indra/newview/skins/ansastorm/themes/classic_brown/textures/bottomtray/Cam_Rotate_In.png
new file mode 100644
index 0000000000..e734d4a3bf
Binary files /dev/null and b/indra/newview/skins/ansastorm/themes/classic_brown/textures/bottomtray/Cam_Rotate_In.png differ
diff --git a/indra/newview/skins/ansastorm/themes/classic_brown/textures/bottomtray/Cam_Tracking_In.png b/indra/newview/skins/ansastorm/themes/classic_brown/textures/bottomtray/Cam_Tracking_In.png
new file mode 100644
index 0000000000..873702f8bf
Binary files /dev/null and b/indra/newview/skins/ansastorm/themes/classic_brown/textures/bottomtray/Cam_Tracking_In.png differ
diff --git a/indra/newview/skins/ansastorm/themes/ectoplasma/textures/bottomtray/Cam_Rotate_In.png b/indra/newview/skins/ansastorm/themes/ectoplasma/textures/bottomtray/Cam_Rotate_In.png
new file mode 100644
index 0000000000..be2bb347bc
Binary files /dev/null and b/indra/newview/skins/ansastorm/themes/ectoplasma/textures/bottomtray/Cam_Rotate_In.png differ
diff --git a/indra/newview/skins/ansastorm/themes/ectoplasma/textures/bottomtray/Cam_Tracking_In.png b/indra/newview/skins/ansastorm/themes/ectoplasma/textures/bottomtray/Cam_Tracking_In.png
new file mode 100644
index 0000000000..c95c076362
Binary files /dev/null and b/indra/newview/skins/ansastorm/themes/ectoplasma/textures/bottomtray/Cam_Tracking_In.png differ
diff --git a/indra/newview/skins/ansastorm/xui/de/panel_main_inventory.xml b/indra/newview/skins/ansastorm/xui/de/panel_main_inventory.xml
index cda2003bd7..0ce6df3cfe 100644
--- a/indra/newview/skins/ansastorm/xui/de/panel_main_inventory.xml
+++ b/indra/newview/skins/ansastorm/xui/de/panel_main_inventory.xml
@@ -93,7 +93,8 @@
-
+
+
diff --git a/indra/newview/skins/ansastorm/xui/en/floater_camera.xml b/indra/newview/skins/ansastorm/xui/en/floater_camera.xml
index cc5f62062f..1a8e1977cc 100644
--- a/indra/newview/skins/ansastorm/xui/en/floater_camera.xml
+++ b/indra/newview/skins/ansastorm/xui/en/floater_camera.xml
@@ -170,7 +170,6 @@
left_pad="2">
diff --git a/indra/newview/skins/ansastorm/xui/en/panel_main_inventory.xml b/indra/newview/skins/ansastorm/xui/en/panel_main_inventory.xml
index 0e67c9e937..20cda26f42 100644
--- a/indra/newview/skins/ansastorm/xui/en/panel_main_inventory.xml
+++ b/indra/newview/skins/ansastorm/xui/en/panel_main_inventory.xml
@@ -522,6 +522,7 @@
+
diff --git a/indra/newview/skins/ansastorm/xui/pl/panel_main_inventory.xml b/indra/newview/skins/ansastorm/xui/pl/panel_main_inventory.xml
index a68437d9c1..5194cc65b2 100644
--- a/indra/newview/skins/ansastorm/xui/pl/panel_main_inventory.xml
+++ b/indra/newview/skins/ansastorm/xui/pl/panel_main_inventory.xml
@@ -92,6 +92,7 @@
+
diff --git a/indra/newview/skins/ansastorm/xui/ru/panel_main_inventory.xml b/indra/newview/skins/ansastorm/xui/ru/panel_main_inventory.xml
index 56df130050..ea0a4c56e2 100644
--- a/indra/newview/skins/ansastorm/xui/ru/panel_main_inventory.xml
+++ b/indra/newview/skins/ansastorm/xui/ru/panel_main_inventory.xml
@@ -89,6 +89,7 @@
+
diff --git a/indra/newview/skins/default/xui/de/floater_fs_camera_small.xml b/indra/newview/skins/default/xui/de/floater_fs_camera_small.xml
new file mode 100644
index 0000000000..6751954dee
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_fs_camera_small.xml
@@ -0,0 +1,57 @@
+
+
+
+ Kamera um Fokus drehen
+
+
+ Kamera auf Fokus zoomen
+
+
+ Kamera nach oben, unten, links und rechts bewegen
+
+
+ Objekt ansehen
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/de/menu_viewer.xml b/indra/newview/skins/default/xui/de/menu_viewer.xml
index 21d9634579..48bcf1f4a4 100644
--- a/indra/newview/skins/default/xui/de/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/de/menu_viewer.xml
@@ -122,6 +122,11 @@
+
+
+
+ Coûts du physique
+
+
+Enveloppe :
+Maillage :
+Analysé :
+
+
+
+
+
+ Contrôles de l'aperçu
+
+
+ Élevé
+ Moyen
+ Faible
+ Le plus faible
+
+
+
+
+
+
+
+ Aperçu :
+
+
+
+
+
+
Remarque :
@@ -287,33 +388,6 @@
- Aperçu :
+ Aperçu :
-
-
-
- Élevé
-
-
- Moyen
-
-
- Faible
-
-
- Le plus faible
-
-
-
- Afficher...
-
-
-
-
-
-
-
- Décomposition de l'aperçu :
-
-
diff --git a/indra/newview/skins/default/xui/it/floater_phototools_camera.xml b/indra/newview/skins/default/xui/it/floater_phototools_camera.xml
index e40a20f586..296f55b88c 100644
--- a/indra/newview/skins/default/xui/it/floater_phototools_camera.xml
+++ b/indra/newview/skins/default/xui/it/floater_phototools_camera.xml
@@ -27,7 +27,7 @@
Vista laterale
- />
+
Vista retro
diff --git a/indra/newview/skins/default/xui/pl/floater_fs_camera_small.xml b/indra/newview/skins/default/xui/pl/floater_fs_camera_small.xml
new file mode 100644
index 0000000000..edfb94bd9e
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/floater_fs_camera_small.xml
@@ -0,0 +1,38 @@
+
+
+
+ Obróć kamerę wokół punktu skupienia
+
+
+ Przybliż kamerę do punktu skupienia
+
+
+ Poruszaj kamerą w górę, w dół, w lewo i w prawo
+
+
+ Pokaż obiekt
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pl/floater_model_preview.xml b/indra/newview/skins/default/xui/pl/floater_model_preview.xml
index 9fca4cda88..0b89eea908 100644
--- a/indra/newview/skins/default/xui/pl/floater_model_preview.xml
+++ b/indra/newview/skins/default/xui/pl/floater_model_preview.xml
@@ -198,7 +198,7 @@
- Kolory podglądu przesyłania:
+ Kolory podglądu przesyłania:
Ogólne:
@@ -249,13 +249,13 @@ Tekstury:
Model:
-
+
Koszty fizyki
diff --git a/indra/newview/skins/default/xui/pl/floater_phototools.xml b/indra/newview/skins/default/xui/pl/floater_phototools.xml
index 586c39d3aa..1ba9fa3e6d 100644
--- a/indra/newview/skins/default/xui/pl/floater_phototools.xml
+++ b/indra/newview/skins/default/xui/pl/floater_phototools.xml
@@ -166,6 +166,7 @@
+
diff --git a/indra/newview/skins/default/xui/pl/menu_viewer.xml b/indra/newview/skins/default/xui/pl/menu_viewer.xml
index 6590b785f8..947dd30567 100644
--- a/indra/newview/skins/default/xui/pl/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/pl/menu_viewer.xml
@@ -114,6 +114,11 @@
+
+
+
+
+