From 080981ae8b14b71c5832de11fb968a31a4b5810c Mon Sep 17 00:00:00 2001 From: Graham Madarasz Date: Tue, 7 May 2013 12:43:15 -0700 Subject: NORSPEC-119 another attempt at individual faces edits without side-effects --- indra/newview/llpanelface.cpp | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'indra') diff --git a/indra/newview/llpanelface.cpp b/indra/newview/llpanelface.cpp index 1fbf4a39e6..f55d53fa29 100644 --- a/indra/newview/llpanelface.cpp +++ b/indra/newview/llpanelface.cpp @@ -1791,6 +1791,8 @@ void LLPanelFace::updateMaterial() LLMaterialPtr material_to_set = mMaterial; + bool subselection = false; + // If we're editing a single face and not the entire material for an object, // we need to clone the material so that our changes to the material's settings // don't automatically propagate to the non-selected faces @@ -1804,6 +1806,7 @@ void LLPanelFace::updateMaterial() { llinfos << "Cloning material to apply to subselection." << llendl; material_to_set = new LLMaterial(mMaterial->asLLSD()); + subselection = true; } else { @@ -1888,7 +1891,21 @@ void LLPanelFace::updateMaterial() LL_DEBUGS("Materials") << "Updating material: " << material_to_set->asLLSD() << LL_ENDL; - LLSelectMgr::getInstance()->selectionSetMaterial( material_to_set ); + + if (node && node->getObject() && node->getObject()->permModify() && subselection) + { + int selected_te = node->getLastSelectedTE(); + if (selected_te >= 0) + { + LLMaterialMgr::getInstance()->put(node->getObject()->getID(),selected_te,*material_to_set); + node->getObject()->getTE(selected_te)->setMaterialParams(material_to_set); + node->getObject()->sendTEUpdate(); + } + } + else + { + LLSelectMgr::getInstance()->selectionSetMaterial( material_to_set ); + } } else { -- cgit v1.2.3 From b5ecd3865728e048be8bf394fc8d1a06a317d88f Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Tue, 7 May 2013 17:11:47 -0500 Subject: Fix for bad light map generation/sampling. --- .../app_settings/shaders/class1/deferred/blurLightF.glsl | 14 +++++++++++++- .../app_settings/shaders/class2/deferred/sunLightF.glsl | 13 +++++-------- .../shaders/class2/deferred/sunLightSSAOF.glsl | 13 +++++-------- 3 files changed, 23 insertions(+), 17 deletions(-) (limited to 'indra') diff --git a/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl index f400eb7a5b..c030c23515 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl @@ -64,11 +64,23 @@ vec4 getPosition(vec2 pos_screen) return pos; } +vec3 decode_normal (vec2 enc) +{ + vec2 fenc = enc*4-2; + float f = dot(fenc,fenc); + float g = sqrt(1-f/4); + vec3 n; + n.xy = fenc*g; + n.z = 1-f/2; + return n; +} + void main() { vec2 tc = vary_fragcoord.xy; vec3 norm = texture2DRect(normalMap, tc).xyz; - norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm + norm = decode_normal(norm.xy); // unpack norm + vec3 pos = getPosition(tc).xyz; vec4 ccol = texture2DRect(lightMap, tc).rgba; diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl index 1e835ae49e..fa2f415e15 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl @@ -136,11 +136,9 @@ void main() vec4 pos = getPosition(pos_screen); - vec4 nmap4 = texture2DRect(normalMap, pos_screen); - nmap4 = vec4(decode_normal(nmap4.xy),nmap4.w); // unpack norm - float displace = nmap4.w; - vec3 norm = nmap4.xyz; - + vec3 norm = texture2DRect(normalMap, pos_screen).xyz; + norm = decode_normal(norm.xy); // unpack norm + /*if (pos.z == 0.0) // do nothing for sky *FIX: REMOVE THIS IF/WHEN THE POSITION MAP IS BEING USED AS A STENCIL { frag_color = vec4(0.0); // doesn't matter @@ -149,9 +147,8 @@ void main() float shadow = 0.0; float dp_directional_light = max(0.0, dot(norm, sun_dir.xyz)); - dp_directional_light = pow(dp_directional_light, 0.7); - - vec3 shadow_pos = pos.xyz + displace*norm; + + vec3 shadow_pos = pos.xyz; vec3 offset = sun_dir.xyz * (1.0-dp_directional_light); vec4 spos = vec4(shadow_pos+offset*shadow_offset, 1.0); diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl index a995e9cba1..847fea6c08 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl @@ -197,11 +197,9 @@ void main() vec4 pos = getPosition(pos_screen); - vec4 nmap4 = texture2DRect(normalMap, pos_screen); - nmap4 = vec4(decode_normal(nmap4.xy),nmap4.w); // unpack norm - float displace = nmap4.w; - vec3 norm = nmap4.xyz; - + vec3 norm = texture2DRect(normalMap, pos_screen).xyz; + norm = decode_normal(norm.xy); // unpack norm + /*if (pos.z == 0.0) // do nothing for sky *FIX: REMOVE THIS IF/WHEN THE POSITION MAP IS BEING USED AS A STENCIL { frag_color = vec4(0.0); // doesn't matter @@ -210,9 +208,8 @@ void main() float shadow = 0.0; float dp_directional_light = max(0.0, dot(norm, sun_dir.xyz)); - dp_directional_light = pow(dp_directional_light, 0.7); - - vec3 shadow_pos = pos.xyz + displace*norm; + + vec3 shadow_pos = pos.xyz; vec3 offset = sun_dir.xyz * (1.0-dp_directional_light); vec4 spos = vec4(shadow_pos+offset*shadow_offset, 1.0); -- cgit v1.2.3