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 bea8d05982..c78e5812c6 100644 --- a/autobuild.xml +++ b/autobuild.xml @@ -964,11 +964,11 @@ archive hash - fc2d285da5298b666fc3c54015a8669a + 87c4984c2bddcdaf6ca403a06f22ce4e hash_algorithm md5 url - file:///opt/firestorm/fmodstudio-2.01.05-darwin-202981448.tar.bz2 + file:///opt/firestorm/fmodstudio-2.01.07-darwin-210010951.tar.bz2 name darwin @@ -978,11 +978,11 @@ archive hash - ee3c5e3449e06bc3dbb1c9dc29aca53d + d33d848660ca7e4c2de789e325706d24 hash_algorithm md5 url - file:///opt/firestorm/fmodstudio-2.01.05-linux64-202931144.tar.bz2 + file:///opt/firestorm/fmodstudio-2.01.07-linux64-203630250.tar.bz2 name linux64 @@ -992,11 +992,11 @@ archive hash - b88e70667efc230a00d6a2d982af8fc5 + 9e9f303912776014519c18a0205250ee hash_algorithm md5 url - file:///c:/cygwin/opt/firestorm/fmodstudio-2.01.05-windows-202860859.tar.bz2 + file:///c:/cygwin/opt/firestorm/fmodstudio-2.01.07-windows-203561745.tar.bz2 name windows @@ -1006,18 +1006,18 @@ archive hash - 401829b65cac61a2f96179fadf7eb015 + ae336fe814a6867f6449d0401ea7a9e4 hash_algorithm md5 url - file:///c:/cygwin/opt/firestorm/fmodstudio-2.01.05-windows64-202860900.tar.bz2 + file:///c:/cygwin/opt/firestorm/fmodstudio-2.01.07-windows64-203561747.tar.bz2 name windows64 version - 2.01.05 + 2.01.07 fontconfig @@ -3709,7 +3709,7 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors canonical_repo https://bitbucket.org/lindenlab/viewer copyright - Copyright (c) 2020, The Phoenix Firestorm Project, Inc. + Copyright (c) 2021, The Phoenix Firestorm Project, Inc. description Firestorm Viewer license diff --git a/doc/contributions.txt b/doc/contributions.txt index 22bd4ae794..6a47b53121 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -1358,7 +1358,8 @@ Sovereign Engineer MAINT-7343 SL-11079 OPEN-343 - SL-11625 + SL-11625 + BUG-229030 SpacedOut Frye VWR-34 VWR-45 diff --git a/indra/llaudio/llstreamingaudio_fmodstudio.cpp b/indra/llaudio/llstreamingaudio_fmodstudio.cpp index 5fef19d6d2..0d3e58b3e5 100644 --- a/indra/llaudio/llstreamingaudio_fmodstudio.cpp +++ b/indra/llaudio/llstreamingaudio_fmodstudio.cpp @@ -392,6 +392,7 @@ void LLStreamingAudio_FMODSTUDIO::setGain(F32 vol) Check_FMOD_Error(mFMODInternetStreamChannelp->setVolume(vol), "FMOD::Channel::setVolume"); } } + // Streamtitle display // virtual bool LLStreamingAudio_FMODSTUDIO::getNewMetadata(LLSD& metadata) @@ -404,14 +405,17 @@ bool LLStreamingAudio_FMODSTUDIO::getNewMetadata(LLSD& metadata) mNewMetadata = false; return true; } - - return mNewMetadata; + else + { + return false; + } } metadata = LLSD(); return false; } // + /////////////////////////////////////////////////////// // manager of possibly-multiple internet audio streams diff --git a/indra/llcommon/llerror.cpp b/indra/llcommon/llerror.cpp index 58d90d46df..59f27c20bf 100644 --- a/indra/llcommon/llerror.cpp +++ b/indra/llcommon/llerror.cpp @@ -1208,7 +1208,9 @@ namespace { LLError::RecorderPtr r = *i; - if (!r->enabled()) + // Crash fix + //if (!r->enabled()) + if (!r || !r->enabled()) { continue; } diff --git a/indra/llcommon/llsingleton.cpp b/indra/llcommon/llsingleton.cpp index 83a4b64e8f..ad933154c2 100644 --- a/indra/llcommon/llsingleton.cpp +++ b/indra/llcommon/llsingleton.cpp @@ -388,7 +388,7 @@ LLSingletonBase::vec_t LLSingletonBase::dep_sort() // extracts just the first (key) element from each sorted_iterator, then // uses vec_t's range constructor... but frankly this is more // straightforward, as long as we remember the above reserve() call! - for (const SingletonDeps::sorted_iterator::value_type& pair : sdeps.sort()) + for (const SingletonDeps::sorted_iterator::value_type pair : sdeps.sort()) { ret.push_back(pair.first); } diff --git a/indra/llplugin/llpluginprocessparent.cpp b/indra/llplugin/llpluginprocessparent.cpp index bf7c7ddba2..3d21e7e55d 100644 --- a/indra/llplugin/llpluginprocessparent.cpp +++ b/indra/llplugin/llpluginprocessparent.cpp @@ -895,16 +895,24 @@ void LLPluginProcessParent::poll(F64 timeout) { // timed out with no incoming data. Just return. } - else if(status == EBADF) + // better logging of poll issues + // else if(status == EBADF) + else if(APR_STATUS_IS_EBADF(status)) { // This happens when one of the file descriptors in the pollset is destroyed, which happens whenever a plugin's socket is closed. // The pollset has been or will be recreated, so just return. LL_DEBUGS("PluginPoll") << "apr_pollset_poll returned EBADF" << LL_ENDL; } - else if(status != APR_SUCCESS) + // better logging of poll issues + // else if(status != APR_SUCCESS) + // { + // LL_WARNS("PluginPoll") << "apr_pollset_poll failed with status " << status << LL_ENDL; + // } + else { - LL_WARNS("PluginPoll") << "apr_pollset_poll failed with status " << status << LL_ENDL; + LL_WARNS("PluginPoll") << "apr_pollset_poll failed with status " << status << " (" << APR_TO_OS_ERROR(status) << ")" << LL_ENDL; } + // } // Remove instances in the done state from the sInstances map. diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp index beed5a2c51..975160ee72 100644 --- a/indra/llrender/llrender.cpp +++ b/indra/llrender/llrender.cpp @@ -874,10 +874,11 @@ void LLTexUnit::setTextureColorSpace(eTextureColorSpace space) } } else -#endif +// #endif // Colour space and shader fixes for BUG-228586 (Rye) { glTexParameteri(sGLTextureType[mCurrTexType], GL_TEXTURE_SRGB_DECODE_EXT, GL_SKIP_DECODE_EXT); } +#endif // Colour space and shader fixes for BUG-228586 (Rye) } LLLightState::LLLightState(S32 index) diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp index 8c805e31d9..c0bfb4d6e7 100644 --- a/indra/llui/llmenugl.cpp +++ b/indra/llui/llmenugl.cpp @@ -4207,6 +4207,9 @@ void LLContextMenu::show(S32 x, S32 y, LLView* spawning_view) { y += height; } + + // FIRE-10883: Prevent context menu from going off screen + y = llmin(y, menu_region_rect.mTop); } // Open out to the left if menu extends past right edge @@ -4220,6 +4223,9 @@ void LLContextMenu::show(S32 x, S32 y, LLView* spawning_view) { x -= width; } + + // FIRE-10883: Prevent context menu from going off screen + x = llmax(x, menu_region_rect.mLeft); } S32 local_x, local_y; diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp index 0c3fff25a5..f5206462a4 100644 --- a/indra/llui/llscrolllistctrl.cpp +++ b/indra/llui/llscrolllistctrl.cpp @@ -932,6 +932,8 @@ BOOL LLScrollListCtrl::selectFirstItem() // virtual BOOL LLScrollListCtrl::selectNthItem( S32 target_index ) { + // FIRE-30571: Comboboxes select all items then pressing Page-Up + target_index = llclamp(target_index, 0, (S32)mItemList.size() - 1); return selectItemRange(target_index, target_index); } diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp index 053e00fcc1..339694dfa6 100644 --- a/indra/llui/llurlentry.cpp +++ b/indra/llui/llurlentry.cpp @@ -971,6 +971,30 @@ std::string LLUrlEntryAgentRLVAnonymizedName::getName(const LLAvatarName& avatar } // [/RLVa:KB] +// FIRE-30611: "You" in transcript is underlined +/// +/// FSUrlEntryAgentSelf Describes the agent's Second Life agent Url, e.g., +/// secondlife:///app/agentself/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about +FSUrlEntryAgentSelf::FSUrlEntryAgentSelf() : LLUrlEntryAgent() +// +{ + mPattern = boost::regex(APP_HEADER_REGEX "/agentself/[\\da-f-]+/\\w+", + boost::regex::perl|boost::regex::icase); +} + +std::string FSUrlEntryAgentSelf::getLabel(const std::string &url, const LLUrlLabelCallback &cb) +{ + if (LLUI::getInstance()->mSettingGroups["config"]->getBOOL("FSChatHistoryShowYou")) + { + return LLTrans::getString("AgentNameSubst"); + } + else + { + return LLUrlEntryAgent::getLabel(url, cb); + } +} +// + // // LLUrlEntryGroup Describes a Second Life group Url, e.g., // secondlife:///app/group/00005ff3-4044-c79f-9de8-fb28ae0df991/about diff --git a/indra/llui/llurlentry.h b/indra/llui/llurlentry.h index ae439e307b..e2fdd51343 100644 --- a/indra/llui/llurlentry.h +++ b/indra/llui/llurlentry.h @@ -350,6 +350,20 @@ private: }; // [/RLVa:KB] +// FIRE-30611: "You" in transcript is underlined +/// +/// FSUrlEntryAgentSelf Describes the agent's Second Life agent Url, e.g., +/// secondlife:///app/agentself/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about +class FSUrlEntryAgentSelf : public LLUrlEntryAgent +{ +public: + FSUrlEntryAgentSelf(); +private: + /*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb); +}; +// + + /// /// LLUrlEntryExperienceProfile Describes a Second Life experience profile Url, e.g., /// secondlife:///app/experience/0e346d8b-4433-4d66-a6b0-fd37083abc4c/profile diff --git a/indra/llui/llurlregistry.cpp b/indra/llui/llurlregistry.cpp index 568ac92a4c..aa02f32b90 100644 --- a/indra/llui/llurlregistry.cpp +++ b/indra/llui/llurlregistry.cpp @@ -71,6 +71,7 @@ LLUrlRegistry::LLUrlRegistry() // [RLVa:KB] - Checked: 2010-11-01 (RLVa-1.2.2a) | Added: RLVa-1.2.2a registerUrl(new LLUrlEntryAgentRLVAnonymizedName()); // [/RLVa:KB] + registerUrl(new FSUrlEntryAgentSelf());// FIRE-30611: "You" in transcript is underlined // LLUrlEntryAgent*Name must appear before LLUrlEntryAgent since // LLUrlEntryAgent is a less specific (catchall for agent urls) registerUrl(new LLUrlEntryAgent()); diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 8bc5e22c70..4d42add516 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -2642,7 +2642,7 @@ if (DARWIN) set(MACOSX_BUNDLE_BUNDLE_NAME "Firestorm") set(MACOSX_BUNDLE_SHORT_VERSION_STRING "${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}") set(MACOSX_BUNDLE_BUNDLE_VERSION "${VIEWER_SHORT_VERSION}${VIEWER_MACOSX_PHASE}${VIEWER_REVISION}") - set(MACOSX_BUNDLE_COPYRIGHT "Copyright 2010-2020 The Phoenix Firestorm Project, Inc.") + set(MACOSX_BUNDLE_COPYRIGHT "Copyright 2010-2021 The Phoenix Firestorm Project, Inc.") set(MACOSX_BUNDLE_NSMAIN_NIB_FILE "Firestorm.nib") set(MACOSX_BUNDLE_NSPRINCIPAL_CLASS "LLApplication") diff --git a/indra/newview/English.lproj/InfoPlist.strings b/indra/newview/English.lproj/InfoPlist.strings index 4e0275a728..0be5b92c3c 100644 --- a/indra/newview/English.lproj/InfoPlist.strings +++ b/indra/newview/English.lproj/InfoPlist.strings @@ -3,4 +3,4 @@ CFBundleName = "Firestorm"; CFBundleShortVersionString = "Firestorm version %%VERSION%%"; -CFBundleGetInfoString = "Firestorm version %%VERSION%%, Copyright 2010-2020 The Phoenix Firestorm Project, Inc."; +CFBundleGetInfoString = "Firestorm version %%VERSION%%, Copyright 2010-2021 The Phoenix Firestorm Project, Inc."; diff --git a/indra/newview/app_settings/commands.xml b/indra/newview/app_settings/commands.xml index ec4458ee66..8b3e8996e5 100644 --- a/indra/newview/app_settings/commands.xml +++ b/indra/newview/app_settings/commands.xml @@ -278,10 +278,8 @@ icon="Command_View_Icon" label_ref="Command_View_Label" tooltip_ref="Command_View_Tooltip" - execute_function="Floater.Toggle" - execute_parameters="camera" - is_running_function="Floater.IsOpen" - is_running_parameters="camera" + execute_function="View.ToggleCameraFloater" + is_running_function="View.CheckCameraFloater" /> Value 1 + FSUseSmallCameraFloater + + Comment + If enabled, the camera floater will be smaller and not contain the camera preset controls. + Persist + 1 + Type + Boolean + Value + 0 + 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 0b266ec91e..03a55eb220 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(); @@ -590,6 +631,19 @@ void LLFloaterCamera::onClickCameraItem(const LLSD& param) camera_floater->updateItemsSelection(); } // + + // 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) @@ -604,6 +658,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"); } @@ -620,6 +680,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); } } @@ -688,6 +754,15 @@ void LLFloaterCamera::switchToPreset(const std::string& name) camera_floater->switchMode(CAMERA_CTRL_MODE_PRESETS); } // + + // Optional small camera floater + camera_floater = LLFloaterCamera::findSmallInstance(); + if (camera_floater) + { + camera_floater->updateItemsSelection(); + camera_floater->fromFreeToPresets(); + } + // } void LLFloaterCamera::populatePresetCombo() diff --git a/indra/newview/llfloatercamera.h b/indra/newview/llfloatercamera.h index a830fda013..f718e8248d 100644 --- a/indra/newview/llfloatercamera.h +++ b/indra/newview/llfloatercamera.h @@ -91,6 +91,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 39ba5a76f7..2738b4c0d5 100644 --- a/indra/newview/lllogchat.cpp +++ b/indra/newview/lllogchat.cpp @@ -492,7 +492,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) { @@ -1256,7 +1262,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 b17b52ccea..345ac191e3 100644 --- a/indra/newview/llpanelprofile.cpp +++ b/indra/newview/llpanelprofile.cpp @@ -213,6 +213,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; +// //-- LLPanelProfile::ChildStack begins ---------------------------------------- LLPanelProfile::ChildStack::ChildStack() 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 0375a3391a..643249ddd9 100644 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -265,6 +265,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 49fccd73ef..b9a6b37123 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -11367,6 +11367,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. @@ -11462,7 +11483,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 @@ + + + + + diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml index 7c9d72e37c..26c5d3fb04 100644 --- a/indra/newview/skins/default/xui/de/notifications.xml +++ b/indra/newview/skins/default/xui/de/notifications.xml @@ -5478,4 +5478,10 @@ Falls Sie diesen Nutzungsbestimmungen nicht zustimmen, sollten keinerlei finanzi HiDPI kann negative Effekte aufweisen und die Leistung beeinträchtigen. + + Dieses Inventar kann nicht erstellt werden: [NAME] + + + Mehrfach-Import von Windlight abgeschlossen. + diff --git a/indra/newview/skins/default/xui/de/panel_main_inventory.xml b/indra/newview/skins/default/xui/de/panel_main_inventory.xml index d8990fe940..e60c1bbef5 100644 --- a/indra/newview/skins/default/xui/de/panel_main_inventory.xml +++ b/indra/newview/skins/default/xui/de/panel_main_inventory.xml @@ -28,7 +28,8 @@ - + + diff --git a/indra/newview/skins/default/xui/de/panel_preferences_UI.xml b/indra/newview/skins/default/xui/de/panel_preferences_UI.xml index 45d25ba9e3..bab6df298b 100644 --- a/indra/newview/skins/default/xui/de/panel_preferences_UI.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_UI.xml @@ -119,6 +119,7 @@ + Eigene Fenster verwenden für: diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml index 42609da7d5..ab6bcfc305 100644 --- a/indra/newview/skins/default/xui/de/strings.xml +++ b/indra/newview/skins/default/xui/de/strings.xml @@ -7147,4 +7147,7 @@ Ihre aktuelle Position: [AVATAR_POS] [COST] L$ + + Importiere Windlight... + diff --git a/indra/newview/skins/default/xui/en/floater_camera.xml b/indra/newview/skins/default/xui/en/floater_camera.xml index 19ff362a24..3347c4b23e 100644 --- a/indra/newview/skins/default/xui/en/floater_camera.xml +++ b/indra/newview/skins/default/xui/en/floater_camera.xml @@ -74,7 +74,6 @@ left_pad="2"> diff --git a/indra/newview/skins/default/xui/en/floater_fs_camera_small.xml b/indra/newview/skins/default/xui/en/floater_fs_camera_small.xml new file mode 100644 index 0000000000..4e6ad8ef75 --- /dev/null +++ b/indra/newview/skins/default/xui/en/floater_fs_camera_small.xml @@ -0,0 +1,413 @@ + + + + + Rotate Camera Around Focus + + + Zoom Camera Towards Focus + + + Move Camera Up and Down, Left and Right + + +camera_modes_title + + +pan_mode_title + + +presets_mode_title + + +free_mode_title + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + "" + + + + + + + + + + "" + + + + + + + + + + "" + + + + + + + + + + + + + "" + + + + + + + + + + "" + + + + + + + + + + "" + + + + diff --git a/indra/newview/skins/default/xui/en/floater_phototools.xml b/indra/newview/skins/default/xui/en/floater_phototools.xml index 050dc393d6..edcf55702d 100644 --- a/indra/newview/skins/default/xui/en/floater_phototools.xml +++ b/indra/newview/skins/default/xui/en/floater_phototools.xml @@ -1461,7 +1461,7 @@ label="Depth of Field focus follows pointer" layout="topleft" name="FSFocusPointFollowsPointer" - tool_tip="Depth of Field focus will follow your mouse, this behaviour matches that seen when using flycam. Use in conjunction with lock" + tool_tip="Depth of Field (DoF) focus will follow your mouse, this behaviour matches that seen when using flycam. Use in conjunction with DoF focus lock" top_pad="4" width="256"/> + function="View.CheckCameraFloater" /> + function="View.ToggleCameraFloater" /> @@ -1115,7 +1113,38 @@ function="RLV.EnableIfNot" parameter="setenv" /> - + + + + + + + + + + + + + + + + + + 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 @@ + + + + +