From 4afa3557971f3a7cf750472112ef1755c7ff98db Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Thu, 16 May 2013 14:36:22 -0500 Subject: NORSPEC-185 Fix for regression caused by accidentally checking in debug code. --- indra/newview/app_settings/shaders/class1/deferred/materialF.glsl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl index 599477ad9e..3c25f49fe0 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl @@ -625,13 +625,13 @@ void main() #define LIGHT_LOOP(i) col.rgb = col.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_LOOP(1) + LIGHT_LOOP(1) LIGHT_LOOP(2) LIGHT_LOOP(3) LIGHT_LOOP(4) LIGHT_LOOP(5) LIGHT_LOOP(6) - LIGHT_LOOP(7)*/ + LIGHT_LOOP(7) frag_color.rgb = col.rgb; glare = min(glare, 1.0); -- cgit v1.2.3 From d9a241aaf545655ca990216106c65ed87897ad56 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Thu, 16 May 2013 15:25:25 -0500 Subject: NORSPEC-190 Fix for local lights not being gamma corrected on alpha objects. --- indra/newview/pipeline.cpp | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) (limited to 'indra/newview') diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index f4b445c2eb..2d8947a19b 100755 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -5700,8 +5700,15 @@ void LLPipeline::setupAvatarLights(BOOL for_edit) LLLightState* light = gGL.getLight(1); - mHWLightColors[1] = diffuse; + if (LLPipeline::sRenderDeferred) + { + diffuse.mV[0] = powf(diffuse.mV[0], 2.2f); + diffuse.mV[1] = powf(diffuse.mV[1], 2.2f); + diffuse.mV[2] = powf(diffuse.mV[2], 2.2f); + } + mHWLightColors[1] = diffuse; + light->setDiffuse(diffuse); light->setAmbient(LLColor4::black); light->setSpecular(LLColor4::black); @@ -5740,6 +5747,13 @@ void LLPipeline::setupAvatarLights(BOOL for_edit) } backlight_diffuse *= backlight_mag / max_component; + if (LLPipeline::sRenderDeferred) + { + backlight_diffuse.mV[0] = powf(backlight_diffuse.mV[0], 2.2f); + backlight_diffuse.mV[1] = powf(backlight_diffuse.mV[1], 2.2f); + backlight_diffuse.mV[2] = powf(backlight_diffuse.mV[2], 2.2f); + } + mHWLightColors[1] = backlight_diffuse; LLLightState* light = gGL.getLight(1); @@ -5946,6 +5960,14 @@ void LLPipeline::setupHWLights(LLDrawPool* pool) LLVector4 light_pos(mSunDir, 0.0f); LLColor4 light_diffuse = mSunDiffuse; + + if (LLPipeline::sRenderDeferred) + { + light_diffuse.mV[0] = powf(light_diffuse.mV[0], 2.2f); + light_diffuse.mV[1] = powf(light_diffuse.mV[1], 2.2f); + light_diffuse.mV[2] = powf(light_diffuse.mV[2], 2.2f); + } + mHWLightColors[0] = light_diffuse; LLLightState* light = gGL.getLight(0); @@ -6014,6 +6036,13 @@ void LLPipeline::setupHWLights(LLDrawPool* pool) F32 x = (3.f * (1.f + light->getLightFalloff())); // why this magic? probably trying to match a historic behavior. float linatten = x / (light_radius); // % of brightness at radius + if (LLPipeline::sRenderDeferred) + { + light_color.mV[0] = powf(light_color.mV[0], 2.2f); + light_color.mV[1] = powf(light_color.mV[1], 2.2f); + light_color.mV[2] = powf(light_color.mV[2], 2.2f); + } + mHWLightColors[cur_light] = light_color; LLLightState* light_state = gGL.getLight(cur_light); @@ -6087,6 +6116,13 @@ void LLPipeline::setupHWLights(LLDrawPool* pool) F32 x = 3.f; float linatten = x / (light_radius); // % of brightness at radius + if (LLPipeline::sRenderDeferred) + { + light_color.mV[0] = powf(light_color.mV[0], 2.2f); + light_color.mV[1] = powf(light_color.mV[1], 2.2f); + light_color.mV[2] = powf(light_color.mV[2], 2.2f); + } + mHWLightColors[2] = light_color; LLLightState* light = gGL.getLight(2); -- cgit v1.2.3 From f18fd226c32747dfb53f4d4f7b00b7d682133d5e Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Thu, 16 May 2013 17:13:16 -0500 Subject: Fix for compilation error in shadows disabled and don't load transform feedback shaders unless transform feedback is enabled. --- indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl | 2 +- indra/newview/llviewershadermgr.cpp | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) (limited to 'indra/newview') diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl index 9cc2eb0cf3..dc497e063b 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl @@ -184,7 +184,7 @@ void main() vary_pointlight_col.rgb = diff; - vary_pointlight_col.a = vertex_color.a; + vary_pointlight_col.a = col.a; col.rgb = vec3(0,0,0); diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp index fce06b9e13..99a9bfd9fa 100755 --- a/indra/newview/llviewershadermgr.cpp +++ b/indra/newview/llviewershadermgr.cpp @@ -463,6 +463,12 @@ void LLViewerShaderMgr::setShaders() S32 deferred_class = 0; S32 transform_class = gGLManager.mHasTransformFeedback ? 1 : 0; + static LLCachedControl use_transform_feedback(gSavedSettings, "RenderUseTransformFeedback"); + if (!use_transform_feedback) + { + transform_class = 0; + } + if (LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred") && gSavedSettings.getBOOL("RenderDeferred") && gSavedSettings.getBOOL("RenderAvatarVP") && -- cgit v1.2.3 From e6c2a7652952f60f26cdee4484128c45340240ee Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Fri, 17 May 2013 12:19:08 -0500 Subject: NORSPEC-187 Directional ambient work in progress. --- .../app_settings/shaders/class2/deferred/softenLightF.glsl | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'indra/newview') diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl index 10a598a85c..ee6aaddb00 100755 --- a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl @@ -296,7 +296,7 @@ void main() float da = max(dot(norm.xyz, sun_dir.xyz), 0.0); vec4 diffuse = texture2DRect(diffuseRect, tc); - + vec3 col; float bloom = 0.0; @@ -310,6 +310,14 @@ void main() calcAtmospherics(pos.xyz, ambocc); col = atmosAmbient(vec3(0)); + + float ambient = min(abs(dot(norm.xyz, sun_dir.xyz)), 1.0); + ambient *= 0.5; + ambient *= ambient; + ambient = (1.0-ambient); + + col *= ambient; + col += atmosAffectDirectionalLight(max(min(da, scol) * 2.6, diffuse.a)); col *= diffuse.rgb; -- cgit v1.2.3 From 559934705fd766430ccdd4b4e41e26a277f63637 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Fri, 17 May 2013 12:27:50 -0500 Subject: Backout OpenGL 2.1 compatibility attempt --- .../app_settings/shaders/class1/deferred/alphaF.glsl | 12 ++++++++---- .../app_settings/shaders/class1/deferred/alphaV.glsl | 13 +++++++++---- indra/newview/featuretable.txt | 2 +- 3 files changed, 18 insertions(+), 9 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl index 84e83d4c8b..50b43f6a8d 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl @@ -60,10 +60,14 @@ VARYING vec3 vary_ambient; VARYING vec3 vary_directional; VARYING vec3 vary_fragcoord; VARYING vec3 vary_position; -VARYING vec4 vary_pointlight_col; +VARYING vec3 vary_pointlight_col; VARYING vec2 vary_texcoord0; VARYING vec3 vary_norm; +#ifdef USE_VERTEX_COLOR +VARYING vec4 vertex_color; +#endif + uniform vec4 light_position[8]; uniform vec3 light_direction[8]; uniform vec3 light_attenuation[8]; @@ -212,7 +216,7 @@ void main() diff.rgb = pow(diff.rgb, vec3(2.2f, 2.2f, 2.2f)); #ifdef USE_VERTEX_COLOR - float vertex_color_alpha = vary_pointlight_col.a; + float vertex_color_alpha = vertex_color.a; #else float vertex_color_alpha = 1.0; #endif @@ -221,7 +225,7 @@ void main() vec3 l = light_position[0].xyz; vec3 dlight = calcDirectionalLight(normal, l) * 2.6; - dlight = dlight * vary_directional.rgb * vary_pointlight_col.rgb; + dlight = dlight * vary_directional.rgb * vary_pointlight_col; #if HAS_SHADOW vec4 col = vec4(vary_ambient + dlight * shadow, vertex_color_alpha); @@ -246,7 +250,7 @@ void main() LIGHT_LOOP(6) LIGHT_LOOP(7) - color.rgb += diff.rgb * vary_pointlight_col.rgb * col.rgb; + color.rgb += diff.rgb * vary_pointlight_col * col.rgb; frag_color = color; } diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl index dc497e063b..77d02b36ff 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl @@ -69,8 +69,11 @@ VARYING vec3 vary_ambient; VARYING vec3 vary_directional; VARYING vec3 vary_fragcoord; VARYING vec3 vary_position; -VARYING vec4 vary_pointlight_col; +VARYING vec3 vary_pointlight_col; +#ifdef USE_VERTEX_COLOR +VARYING vec4 vertex_color; +#endif VARYING vec2 vary_texcoord0; @@ -183,9 +186,9 @@ void main() - vary_pointlight_col.rgb = diff; - vary_pointlight_col.a = col.a; + vary_pointlight_col = diff; + col.rgb = vec3(0,0,0); // Add windlight lights @@ -197,7 +200,9 @@ void main() col.rgb = col.rgb*diff.rgb; - +#ifdef USE_VERTEX_COLOR + vertex_color = col; +#endif #ifdef HAS_SKIN vary_fragcoord.xyz = frag_pos.xyz + vec3(0,0,near_clip); diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt index cd7825ba9f..4030324ecb 100755 --- a/indra/newview/featuretable.txt +++ b/indra/newview/featuretable.txt @@ -441,7 +441,7 @@ list OpenGLPre15 RenderVBOEnable 1 0 list OpenGLPre30 -RenderDeferred 1 0 +RenderDeferred 0 0 RenderMaxTextureIndex 1 1 list Intel -- cgit v1.2.3 From 88a42cd453b19e66551a36d635981da5aaa04933 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Fri, 17 May 2013 13:54:58 -0500 Subject: NORSPEC-187 Add directionality to ambient lighting. --- indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl | 9 +++++++++ .../newview/app_settings/shaders/class1/deferred/materialF.glsl | 8 ++++++++ .../app_settings/shaders/class1/deferred/softenLightF.glsl | 7 +++++++ indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl | 9 +++++++++ 4 files changed, 33 insertions(+) (limited to 'indra/newview') diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl index 77d02b36ff..247ee0a34f 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl @@ -86,6 +86,8 @@ uniform vec3 light_direction[8]; uniform vec3 light_attenuation[8]; uniform vec3 light_diffuse[8]; +uniform vec3 sun_dir; + vec3 calcDirectionalLight(vec3 n, vec3 l) { float a = max(dot(n,l),0.0); @@ -194,6 +196,13 @@ void main() // Add windlight lights col.rgb = atmosAmbient(col.rgb); + float ambient = min(abs(dot(norm.xyz, sun_dir.xyz)), 1.0); + ambient *= 0.5; + ambient *= ambient; + ambient = (1.0-ambient); + + col.rgb *= ambient; + vary_ambient = col.rgb*diff.rgb; vary_directional.rgb = atmosAffectDirectionalLight(1.0f); diff --git a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl index 3c25f49fe0..fc4b8b33f8 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl @@ -579,6 +579,14 @@ void main() final_da = max(final_da, 0.0f); col.rgb = atmosAmbient(col); + + float ambient = min(abs(dot(norm.xyz, sun_dir.xyz)), 1.0); + ambient *= 0.5; + ambient *= ambient; + ambient = (1.0-ambient); + + col.rgb *= ambient; + col.rgb = col.rgb + atmosAffectDirectionalLight(final_da * 2.6); col.rgb *= diffuse.rgb; diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl index a1dff9188f..9197df2628 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl @@ -301,6 +301,13 @@ void main() calcAtmospherics(pos.xyz, 1.0); col = atmosAmbient(vec3(0)); + float ambient = min(abs(dot(norm.xyz, sun_dir.xyz)), 1.0); + ambient *= 0.5; + ambient *= ambient; + ambient = (1.0-ambient); + + col.rgb *= ambient; + col += atmosAffectDirectionalLight(max(min(da, 1.0) * 2.6, diffuse.a)); col *= diffuse.rgb; diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl index 127c1709b8..13c6ffc607 100755 --- a/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl @@ -83,6 +83,8 @@ uniform vec3 light_direction[8]; uniform vec3 light_attenuation[8]; uniform vec3 light_diffuse[8]; +uniform vec3 sun_dir; + vec3 calcDirectionalLight(vec3 n, vec3 l) { float a = max(dot(n,l),0.0); @@ -190,6 +192,13 @@ void main() // Add windlight lights col.rgb = atmosAmbient(col.rgb); + float ambient = min(abs(dot(norm.xyz, sun_dir.xyz)), 1.0); + ambient *= 0.5; + ambient *= ambient; + ambient = (1.0-ambient); + + col.rgb *= ambient; + vary_directional.rgb = atmosAffectDirectionalLight(1.0f); vary_ambient = col.rgb*dff; -- cgit v1.2.3