From 47e3c3aa216f72cae9b940a8f308c7de7c7c695c Mon Sep 17 00:00:00 2001 From: Rider Linden Date: Fri, 29 Mar 2019 15:57:22 -0700 Subject: BUG-226611, BUG-226617, BUG-226618: Update contrib file for Geenz Spad --- doc/contributions.txt | 3 +++ 1 file changed, 3 insertions(+) (limited to 'doc') diff --git a/doc/contributions.txt b/doc/contributions.txt index a09b6aff43..05c548ad09 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -481,6 +481,9 @@ Geenz Spad STORM-1900 STORM-1905 NORSPEC-229 + BUG-226611 + BUG-226617 + BUG-226618 Gene Frostbite GeneJ Composer Geneko Nemeth -- cgit v1.3 From f89490c1dee0024c19ca711ff0af62e7145b4b9b Mon Sep 17 00:00:00 2001 From: Graham Linden Date: Tue, 2 Apr 2019 17:03:35 -0700 Subject: Add attributions. --- doc/contributions.txt | 3 +++ 1 file changed, 3 insertions(+) (limited to 'doc') diff --git a/doc/contributions.txt b/doc/contributions.txt index 4fa5860f7e..d1355652e4 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -486,6 +486,9 @@ Geenz Spad BUG-226611 BUG-226617 BUG-226618 + BUG-226646 + BUG-226647 + BUG-226648 Gene Frostbite GeneJ Composer Geneko Nemeth -- cgit v1.3 From 2013578ca90261c20501166e508174bfdaeca7d7 Mon Sep 17 00:00:00 2001 From: Geenz Date: Wed, 3 Apr 2019 16:07:39 -0700 Subject: Update contributions. --HG-- branch : BUG-226620 --- doc/contributions.txt | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'doc') diff --git a/doc/contributions.txt b/doc/contributions.txt index d1355652e4..c9a382d455 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -483,12 +483,14 @@ Geenz Spad STORM-1900 STORM-1905 NORSPEC-229 - BUG-226611 - BUG-226617 - BUG-226618 - BUG-226646 - BUG-226647 - BUG-226648 + BUG-226611 + BUG-226617 + BUG-226618 + BUG-226646 + BUG-226647 + BUG-226648 + OPEN-339 + BUG-226620 Gene Frostbite GeneJ Composer Geneko Nemeth -- cgit v1.3 From dcd8117b85f45886f78a1a2e9756cb1709d6572a Mon Sep 17 00:00:00 2001 From: Geenz Date: Tue, 9 Apr 2019 22:35:40 -0700 Subject: First stab at moving atmospheric var calcs to its own utility shader. Still some work to go here. Largely related to how certain values (i.e., SSAO mix values) are supplied. But so far, so good. --HG-- branch : OPEN-340 --- doc/contributions.txt | 1 + indra/llrender/llshadermgr.cpp | 8 ++ .../class1/windlight/atmosphericsFuncs.glsl | 116 +++++++++++++++++++++ .../shaders/class2/deferred/softenLightF.glsl | 6 +- indra/newview/llviewershadermgr.cpp | 4 +- 5 files changed, 133 insertions(+), 2 deletions(-) create mode 100644 indra/newview/app_settings/shaders/class1/windlight/atmosphericsFuncs.glsl (limited to 'doc') diff --git a/doc/contributions.txt b/doc/contributions.txt index c9a382d455..5bf45bc6c7 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -491,6 +491,7 @@ Geenz Spad BUG-226648 OPEN-339 BUG-226620 + OPEN-340 Gene Frostbite GeneJ Composer Geneko Nemeth diff --git a/indra/llrender/llshadermgr.cpp b/indra/llrender/llshadermgr.cpp index 4303c3ed11..071f40d924 100644 --- a/indra/llrender/llshadermgr.cpp +++ b/indra/llrender/llshadermgr.cpp @@ -96,6 +96,10 @@ BOOL LLShaderMgr::attachShaderFeatures(LLGLSLShader * shader) { return FALSE; } + + if (!shader->attachObject("windlight/atmosphericsFuncs.glsl")) { + return FALSE; + } } if (features->calculatesLighting) @@ -194,6 +198,10 @@ BOOL LLShaderMgr::attachShaderFeatures(LLGLSLShader * shader) { return FALSE; } + + if (!shader->attachObject("windlight/atmosphericsFuncs.glsl")) { + return FALSE; + } } // we want this BEFORE shadows and AO because those facilities use pos/norm access diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsFuncs.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsFuncs.glsl new file mode 100644 index 0000000000..2854fb8139 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsFuncs.glsl @@ -0,0 +1,116 @@ +uniform vec4 gamma; +uniform vec4 lightnorm; +uniform vec4 sunlight_color; +uniform vec4 moonlight_color; +uniform int sun_up_factor; +uniform vec4 ambient; +uniform vec4 blue_horizon; +uniform vec4 blue_density; +uniform float haze_horizon; +uniform float haze_density; +uniform float cloud_shadow; +uniform float density_multiplier; +uniform float distance_multiplier; +uniform float max_y; +uniform vec4 glow; +uniform float scene_light_strength; +uniform mat3 ssao_effect_mat; +uniform int no_atmo; +uniform float sun_moon_glow_factor; + +vec3 nothing() { + return vec3(0, 0, 0); +} + +void calcAtmosphericVars(vec3 inPositionEye, float ambFactor, out vec3 sunlit, out vec3 amblit, out vec3 additive, out vec3 atten) { + + vec3 P = inPositionEye; + + //(TERRAIN) limit altitude + if (P.y > max_y) P *= (max_y / P.y); + if (P.y < -max_y) P *= (-max_y / P.y); + + vec3 tmpLightnorm = lightnorm.xyz; + + vec3 Pn = normalize(P); + float Plen = length(P); + + vec4 temp1 = vec4(0); + vec3 temp2 = vec3(0); + vec4 blue_weight; + vec4 haze_weight; + vec4 sunlight = (sun_up_factor == 1) ? sunlight_color : moonlight_color; + vec4 light_atten; + + //sunlight attenuation effect (hue and brightness) due to atmosphere + //this is used later for sunlight modulation at various altitudes + light_atten = (blue_density + vec4(haze_density * 0.25)) * (density_multiplier * max_y); + //I had thought blue_density and haze_density should have equal weighting, + //but attenuation due to haze_density tends to seem too strong + + temp1 = blue_density + vec4(haze_density); + blue_weight = blue_density / temp1; + haze_weight = vec4(haze_density) / temp1; + + //(TERRAIN) compute sunlight from lightnorm only (for short rays like terrain) + temp2.y = max(0.0, tmpLightnorm.y); + if (temp2.y > 0.001f) + { + temp2.y = 1. / temp2.y; + } + temp2.y = max(0.001f, temp2.y); + sunlight *= exp(-light_atten * temp2.y); + + // main atmospheric scattering line integral + temp2.z = Plen * density_multiplier; + + // Transparency (-> temp1) + // ATI Bugfix -- can't store temp1*temp2.z*distance_multiplier in a variable because the ati + // compiler gets confused. + temp1 = exp(-temp1 * temp2.z * distance_multiplier); + + //final atmosphere attenuation factor + atten = temp1.rgb; + + //compute haze glow + //(can use temp2.x as temp because we haven't used it yet) + temp2.x = dot(Pn, tmpLightnorm.xyz); + temp2.x = 1. - temp2.x; + //temp2.x is 0 at the sun and increases away from sun + temp2.x = max(temp2.x, .03); //was glow.y + //set a minimum "angle" (smaller glow.y allows tighter, brighter hotspot) + temp2.x *= glow.x; + //higher glow.x gives dimmer glow (because next step is 1 / "angle") + temp2.x = pow(temp2.x, glow.z); + //glow.z should be negative, so we're doing a sort of (1 / "angle") function + + //add "minimum anti-solar illumination" + temp2.x += .25; + + temp2.x *= sun_moon_glow_factor; + + //increase ambient when there are more clouds + vec4 tmpAmbient = ambient + (vec4(1.) - ambient) * cloud_shadow * 0.5; + + /* decrease value and saturation (that in HSV, not HSL) for occluded areas + * // for HSV color/geometry used here, see http://gimp-savvy.com/BOOK/index.html?node52.html + * // The following line of code performs the equivalent of: + * float ambAlpha = tmpAmbient.a; + * float ambValue = dot(vec3(tmpAmbient), vec3(0.577)); // projection onto <1/rt(3), 1/rt(3), 1/rt(3)>, the neutral white-black axis + * vec3 ambHueSat = vec3(tmpAmbient) - vec3(ambValue); + * tmpAmbient = vec4(RenderSSAOEffect.valueFactor * vec3(ambValue) + RenderSSAOEffect.saturationFactor *(1.0 - ambFactor) * ambHueSat, ambAlpha); + */ + tmpAmbient = vec4(mix(ssao_effect_mat * tmpAmbient.rgb, tmpAmbient.rgb, ambFactor), tmpAmbient.a); + + //haze color + additive = + vec3(blue_horizon * blue_weight * (sunlight*(1.-cloud_shadow) + tmpAmbient) + + (haze_horizon * haze_weight) * (sunlight*(1.-cloud_shadow) * temp2.x + + tmpAmbient)); + + //brightness of surface both sunlight and ambient + sunlit = vec3(sunlight.rgb); + amblit = vec3(tmpAmbient * .25); + additive = normalize(additive); + additive *= vec3(1.0 - exp(-temp2.z * distance_multiplier)) * 0.5; +} \ No newline at end of file diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl index 8814587fbc..4c7c50315f 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl @@ -72,6 +72,8 @@ vec3 atmosFragLighting(vec3 l, vec3 additive, vec3 atten); vec3 fullbrightScaleSoftClipFrag(vec3 l, vec3 add, vec3 atten); vec3 scaleSoftClipFrag(vec3 l); +void calcAtmosphericVars(vec3 inPositionEye, float ambFactor, out vec3 sunlit, out vec3 amblit, out vec3 additive, out vec3 atten); + vec3 atmosTransportFrag(vec3 light, vec3 additive, vec3 atten); vec3 fullbrightAtmosTransportFrag(vec3 light, vec3 additive, vec3 atten); vec3 fullbrightShinyAtmosTransportFrag(vec3 light, vec3 additive, vec3 atten); @@ -79,6 +81,8 @@ vec3 fullbrightShinyAtmosTransportFrag(vec3 light, vec3 additive, vec3 atten); vec4 getPositionWithDepth(vec2 pos_screen, float depth); vec4 getPosition(vec2 pos_screen); +vec3 nothing(); + #ifdef WATER_FOG vec4 applyWaterFogView(vec3 pos, vec4 color); #endif @@ -121,7 +125,7 @@ void main() vec3 additive; vec3 atten; - calcFragAtmospherics(pos.xyz, ambocc, sunlit, amblit, additive, atten); + calcAtmosphericVars(pos.xyz, ambocc, sunlit, amblit, additive, atten); float ambient = da; ambient *= 0.5; diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp index c6d727430c..cc5b0a090c 100644 --- a/indra/newview/llviewershadermgr.cpp +++ b/indra/newview/llviewershadermgr.cpp @@ -932,6 +932,7 @@ BOOL LLViewerShaderMgr::loadBasicShaders() shaders.push_back( make_pair( "windlight/atmosphericsVarsV.glsl", mShaderLevel[SHADER_WINDLIGHT] ) ); shaders.push_back( make_pair( "windlight/atmosphericsVarsWaterV.glsl", mShaderLevel[SHADER_WINDLIGHT] ) ); shaders.push_back( make_pair( "windlight/atmosphericsHelpersV.glsl", mShaderLevel[SHADER_WINDLIGHT] ) ); + shaders.push_back( make_pair( "windlight/atmosphericsFuncs.glsl", mShaderLevel[SHADER_WINDLIGHT] ) ); shaders.push_back( make_pair( "lighting/lightFuncV.glsl", mShaderLevel[SHADER_LIGHTING] ) ); shaders.push_back( make_pair( "lighting/sumLightsV.glsl", sum_lights_class ) ); shaders.push_back( make_pair( "lighting/lightV.glsl", mShaderLevel[SHADER_LIGHTING] ) ); @@ -977,6 +978,7 @@ BOOL LLViewerShaderMgr::loadBasicShaders() index_channels.push_back(-1); shaders.push_back( make_pair( "windlight/atmosphericsVarsF.glsl", mShaderLevel[SHADER_WINDLIGHT] ) ); index_channels.push_back(-1); shaders.push_back( make_pair( "windlight/atmosphericsVarsWaterF.glsl", mShaderLevel[SHADER_WINDLIGHT] ) ); index_channels.push_back(-1); shaders.push_back( make_pair( "windlight/atmosphericsHelpersF.glsl", mShaderLevel[SHADER_WINDLIGHT] ) ); + index_channels.push_back(-1); shaders.push_back( make_pair( "windlight/atmosphericsFuncs.glsl", mShaderLevel[SHADER_WINDLIGHT] ) ); index_channels.push_back(-1); shaders.push_back( make_pair( "windlight/gammaF.glsl", mShaderLevel[SHADER_WINDLIGHT]) ); index_channels.push_back(-1); shaders.push_back( make_pair( "windlight/atmosphericsF.glsl", mShaderLevel[SHADER_WINDLIGHT] ) ); index_channels.push_back(-1); shaders.push_back( make_pair( "windlight/transportF.glsl", mShaderLevel[SHADER_WINDLIGHT] ) ); @@ -1006,7 +1008,7 @@ BOOL LLViewerShaderMgr::loadBasicShaders() index_channels.push_back(ch); shaders.push_back( make_pair( "lighting/lightWaterAlphaMaskF.glsl", mShaderLevel[SHADER_LIGHTING] ) ); index_channels.push_back(ch); shaders.push_back( make_pair( "lighting/lightFullbrightWaterF.glsl", mShaderLevel[SHADER_LIGHTING] ) ); index_channels.push_back(ch); shaders.push_back( make_pair( "lighting/lightFullbrightWaterAlphaMaskF.glsl", mShaderLevel[SHADER_LIGHTING] ) ); - index_channels.push_back(ch); shaders.push_back( make_pair( "lighting/lightShinyF.glsl", mShaderLevel[SHADER_LIGHTING] ) ); + index_channels.push_back(ch); shaders.push_back( make_pair( "lighting/lightShinyF.glsl", mShaderLevel[SHADER_LIGHTING] ) ); index_channels.push_back(ch); shaders.push_back( make_pair( "lighting/lightFullbrightShinyF.glsl", mShaderLevel[SHADER_LIGHTING] ) ); index_channels.push_back(ch); shaders.push_back( make_pair( "lighting/lightShinyWaterF.glsl", mShaderLevel[SHADER_LIGHTING] ) ); index_channels.push_back(ch); shaders.push_back( make_pair( "lighting/lightFullbrightShinyWaterF.glsl", mShaderLevel[SHADER_LIGHTING] ) ); -- cgit v1.3 From d7d8a15092c91f6fa55547515b243b61a78868ff Mon Sep 17 00:00:00 2001 From: Geenz Date: Wed, 10 Apr 2019 02:49:25 -0700 Subject: Fullbright + elimination of all references to calcFragAtmospherics. --HG-- branch : OPEN-340 --- doc/contributions.txt | 2 ++ indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl | 4 ++-- indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl | 5 +++++ indra/newview/app_settings/shaders/class1/deferred/materialF.glsl | 4 ++-- indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl | 4 +--- indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl | 3 +-- 6 files changed, 13 insertions(+), 9 deletions(-) (limited to 'doc') diff --git a/doc/contributions.txt b/doc/contributions.txt index 5bf45bc6c7..cfc98584bc 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -492,6 +492,7 @@ Geenz Spad OPEN-339 BUG-226620 OPEN-340 + OPEN-343 Gene Frostbite GeneJ Composer Geneko Nemeth @@ -1327,6 +1328,7 @@ Sovereign Engineer STORM-2143 STORM-2148 MAINT-7343 + OPEN-343 SpacedOut Frye VWR-34 VWR-45 diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl index 4fe0d1351d..ca82dd9432 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl @@ -77,7 +77,7 @@ vec2 encode_normal (vec3 n); vec3 scaleSoftClipFrag(vec3 l); vec3 atmosFragLighting(vec3 light, vec3 additive, vec3 atten); -void calcFragAtmospherics(vec3 inPositionEye, float ambFactor, out vec3 sunlit, out vec3 amblit, out vec3 atten, out vec3 additive); +void calcAtmosphericVars(vec3 inPositionEye, float ambFactor, out vec3 sunlit, out vec3 amblit, out vec3 atten, out vec3 additive); #ifdef HAS_SHADOW float sampleDirectionalShadow(vec3 pos, vec3 norm, vec2 pos_screen); @@ -184,7 +184,7 @@ void main() vec3 additive; vec3 atten; - calcFragAtmospherics(pos.xyz, 1.0, sunlit, amblit, additive, atten); + calcAtmosphericVars(pos.xyz, 1.0, sunlit, amblit, additive, atten); vec2 abnormal = encode_normal(norm.xyz); diff --git a/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl index d5ef010017..f98fc0d518 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl @@ -45,6 +45,9 @@ VARYING vec2 vary_texcoord0; vec4 applyWaterFogView(vec3 pos, vec4 color); #endif +vec3 fullbrightAtmosTransport(vec3 light); +vec3 fullbrightScaleSoftClip(vec3 light); + #ifdef HAS_ALPHA_MASK uniform float minimum_alpha; #endif @@ -74,6 +77,8 @@ void main() color.rgb = fogged.rgb; color.a = fogged.a; #else + color.rgb = fullbrightAtmosTransport(color.rgb); + color.rgb = fullbrightScaleSoftClip(color.rgb); color.a = final_alpha; #endif diff --git a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl index 6d7162b5a2..9b07c11361 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl @@ -41,7 +41,7 @@ vec4 applyWaterFogView(vec3 pos, vec4 color); vec3 atmosFragLighting(vec3 l, vec3 additive, vec3 atten); vec3 scaleSoftClipFrag(vec3 l); -void calcFragAtmospherics(vec3 inPositionEye, float ambFactor, out vec3 sunlit, out vec3 amblit, out vec3 additive, out vec3 atten); +void calcAtmosphericVars(vec3 inPositionEye, float ambFactor, out vec3 sunlit, out vec3 amblit, out vec3 additive, out vec3 atten); vec3 srgb_to_linear(vec3 cs); vec3 linear_to_srgb(vec3 cs); @@ -290,7 +290,7 @@ void main() vec3 additive; vec3 atten; - calcFragAtmospherics(pos.xyz, 1.0, sunlit, amblit, additive, atten); + calcAtmosphericVars(pos.xyz, 1.0, sunlit, amblit, additive, atten); vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz)); diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl index c599c14b43..b166f45bce 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl @@ -71,8 +71,6 @@ vec3 getNorm(vec2 pos_screen); vec3 atmosFragLighting(vec3 l, vec3 additive, vec3 atten); vec3 fullbrightAtmosTransportFrag(vec3 l, vec3 additive, vec3 atten); -void calcFragAtmospherics(vec3 inPositionEye, float ambFactor, out vec3 sunlit, out vec3 amblit, out vec3 additive, out vec3 atten); - void calcAtmosphericVars(vec3 inPositionEye, float ambFactor, out vec3 sunlit, out vec3 amblit, out vec3 additive, out vec3 atten); vec3 scaleSoftClipFrag(vec3 l); @@ -168,7 +166,7 @@ vec3 post_diffuse = col.rgb; col = mix(col.rgb, refcol, envIntensity); } - if (norm.w < 0.5) + //if (norm.w < 0.5) { col = atmosFragLighting(col, additive, atten); col = scaleSoftClipFrag(col); diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl index 2a772e6741..e1e299edee 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl @@ -67,7 +67,6 @@ uniform vec2 screen_res; vec3 getNorm(vec2 pos_screen); -void calcFragAtmospherics(vec3 inPositionEye, float ambFactor, out vec3 sunlit, out vec3 amblit, out vec3 additive, out vec3 atten); vec3 atmosFragLighting(vec3 l, vec3 additive, vec3 atten); vec3 fullbrightScaleSoftClipFrag(vec3 l, vec3 add, vec3 atten); vec3 scaleSoftClipFrag(vec3 l); @@ -184,7 +183,7 @@ vec3 post_diffuse = col.rgb; col = mix(col.rgb, refcol, envIntensity); } - if (norm.w < 0.5) + //if (norm.w < 0.5) { //col = mix(atmosFragLighting(col, additive, atten), fullbrightAtmosTransportFrag(col, additive, atten), diffuse.a); //col = mix(scaleSoftClipFrag(col), fullbrightScaleSoftClipFrag(col, additive, atten), diffuse.a); -- cgit v1.3 From be0c609eaf48fe876b47ac94627c9237c457348a Mon Sep 17 00:00:00 2001 From: maxim_productengine Date: Thu, 2 May 2019 13:11:18 +0300 Subject: SL-11072 FIXED Crash in LLInventoryAction::doToSelected(2406) --- doc/contributions.txt | 1 + indra/newview/llinventoryfunctions.cpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) (limited to 'doc') diff --git a/doc/contributions.txt b/doc/contributions.txt index 4e92559256..2d2a5c51fc 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -1079,6 +1079,7 @@ Nicky Dasmijn STORM-2010 STORM-2082 MAINT-6665 + SL-11072 Nicky Perian OPEN-1 STORM-1087 diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp index b0004c5e58..646d92b9e1 100644 --- a/indra/newview/llinventoryfunctions.cpp +++ b/indra/newview/llinventoryfunctions.cpp @@ -2402,7 +2402,7 @@ void LLInventoryAction::doToSelected(LLInventoryModel* model, LLFolderView* root LLFolderViewItem* folder_item = *set_iter; if (folder_item) { - LLInvFVBridge* bridge = (LLInvFVBridge*)folder_item->getViewModelItem(); + LLInvFVBridge* bridge = dynamic_cast(folder_item->getViewModelItem()); if (!bridge || !bridge->isMultiPreviewAllowed()) { open_multi_preview = false; -- cgit v1.3 From 9c31597e5e798d40b00e55187949ef2687917022 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Thu, 30 Apr 2020 17:51:46 +0300 Subject: SL-13141 Crashfix contribution --- doc/contributions.txt | 1 + indra/newview/llvovolume.cpp | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) (limited to 'doc') diff --git a/doc/contributions.txt b/doc/contributions.txt index 2153e10888..0f43daa6eb 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -1086,6 +1086,7 @@ Nicky Dasmijn SL-10293 SL-11061 SL-11072 + SL-13141 Nicky Perian OPEN-1 STORM-1087 diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 2ffd462ac3..a6500d1399 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -261,7 +261,10 @@ void LLVOVolume::markDead() { if (!mDead) { - LLSculptIDSize::instance().rem(getVolume()->getParams().getSculptID()); + if (getVolume()) + { + LLSculptIDSize::instance().rem(getVolume()->getParams().getSculptID()); + } if(getMDCImplCount() > 0) { -- cgit v1.3