From f03376cd2a43b4fe8ef6fe2491b46cb99a042376 Mon Sep 17 00:00:00 2001 From: Shyotl Date: Wed, 13 Nov 2013 12:53:43 -0600 Subject: [PATCH 1/3] Remove hack for nvidia on osx. --- indra/newview/lldrawpoolsimple.cpp | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/indra/newview/lldrawpoolsimple.cpp b/indra/newview/lldrawpoolsimple.cpp index 3f894912a..012a4b9dd 100644 --- a/indra/newview/lldrawpoolsimple.cpp +++ b/indra/newview/lldrawpoolsimple.cpp @@ -37,8 +37,6 @@ #include "llviewershadermgr.h" #include "llrender.h" -#define GE_FORCE_WORKAROUND LL_DARWIN - static LLGLSLShader* simple_shader = NULL; static LLGLSLShader* fullbright_shader = NULL; @@ -664,13 +662,6 @@ void LLDrawPoolFullbrightAlphaMask::beginPostDeferredPass(S32 pass) else { -// Work-around until we can figure out why the right shader causes -// the GeForce driver to go tango uniform on OS X 10.6.8 only -// -#if GE_FORCE_WORKAROUND - gObjectFullbrightAlphaMaskProgram.bind(); - gObjectFullbrightAlphaMaskProgram.uniform1f(LLShaderMgr::TEXTURE_GAMMA, 2.2f); -#else if (LLPipeline::sUnderWaterRender) { gDeferredFullbrightAlphaMaskWaterProgram.bind(); @@ -681,7 +672,6 @@ void LLDrawPoolFullbrightAlphaMask::beginPostDeferredPass(S32 pass) gDeferredFullbrightAlphaMaskProgram.bind(); gDeferredFullbrightAlphaMaskProgram.uniform1f(LLShaderMgr::TEXTURE_GAMMA, 2.2f); } -#endif } } @@ -704,13 +694,6 @@ void LLDrawPoolFullbrightAlphaMask::endPostDeferredPass(S32 pass) } else { - -// Work-around until we can figure out why the right shader causes -// the GeForce driver to go tango uniform on OS X 10.6.8 only -// -#if GE_FORCE_WORKAROUND - gObjectFullbrightAlphaMaskProgram.unbind(); -#else if (LLPipeline::sUnderWaterRender) { gDeferredFullbrightAlphaMaskWaterProgram.unbind(); @@ -719,8 +702,6 @@ void LLDrawPoolFullbrightAlphaMask::endPostDeferredPass(S32 pass) { gDeferredFullbrightAlphaMaskProgram.unbind(); } -#endif - } LLRenderPass::endRenderPass(pass); } From d4a3cb168c6152c74eb159a76084de7c86e7555a Mon Sep 17 00:00:00 2001 From: Shyotl Date: Wed, 13 Nov 2013 12:59:21 -0600 Subject: [PATCH 2/3] Altered the deferred alpha fragment shader to handle alphamasking when drawing avatar hair/skirts. (Special handling for these two seems weird, considering all other mesh parts are also alphamasked.. It also prevents skirts from casting shadows. Future alteration may be desired.) --- .../shaders/class1/deferred/alphaF.glsl | 59 ++++++++++--------- 1 file changed, 31 insertions(+), 28 deletions(-) diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl index 00d691502..cfc9d7c0d 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl @@ -74,6 +74,10 @@ uniform float shadow_bias; uniform sampler2D diffuseMap; #endif +#ifdef IS_AVATAR_SKIN +uniform float minimum_alpha; +#endif + VARYING vec3 vary_fragcoord; VARYING vec3 vary_position; VARYING vec2 vary_texcoord0; @@ -454,7 +458,33 @@ vec3 fullbrightScaleSoftClip(vec3 light) void main() { - +#ifdef USE_INDEXED_TEX + vec4 diff = diffuseLookup(vary_texcoord0.xy); +#else + vec4 diff = texture2D(diffuseMap,vary_texcoord0.xy); +#endif +#ifdef USE_VERTEX_COLOR + float final_alpha = diff.a * vertex_color.a; + diff.rgb *= vertex_color.rgb; +#else + float final_alpha = diff.a; +#endif + +#ifdef IS_AVATAR_SKIN + if(final_alpha < minimum_alpha) + { + discard; + } +#endif +#ifdef FOR_IMPOSTOR + // Insure we don't pollute depth with invis pixels in impostor rendering + // + if (final_alpha < 0.01) + { + discard; + } +#endif + vec4 pos = vec4(vary_position, 1.0); float shadow = 1.0; @@ -528,37 +558,10 @@ void main() } #endif -#ifdef USE_INDEXED_TEX - vec4 diff = diffuseLookup(vary_texcoord0.xy); -#else - vec4 diff = texture2D(diffuseMap,vary_texcoord0.xy); -#endif #ifdef FOR_IMPOSTOR - -#ifdef USE_VERTEX_COLOR - float final_alpha = diff.a * vertex_color.a; - diff.rgb *= vertex_color.rgb; -#else - float final_alpha = diff.a; -#endif - - // Insure we don't pollute depth with invis pixels in impostor rendering - // - if (final_alpha < 0.01) - { - discard; - } vec4 color = vec4(diff.rgb,final_alpha); #else - -#ifdef USE_VERTEX_COLOR - float final_alpha = diff.a * vertex_color.a; - diff.rgb *= vertex_color.rgb; -#else - float final_alpha = diff.a; -#endif - vec4 gamma_diff = diff; diff.rgb = srgb_to_linear(diff.rgb); From 01e27eac769ad5c6b9c93de1e3c00b72cd5de559 Mon Sep 17 00:00:00 2001 From: Shyotl Date: Wed, 13 Nov 2013 13:06:47 -0600 Subject: [PATCH 3/3] Kill a tiny bit of dead code. --- indra/llrender/llshadermgr.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/indra/llrender/llshadermgr.cpp b/indra/llrender/llshadermgr.cpp index 87d1cfd40..e4b7fb7c0 100644 --- a/indra/llrender/llshadermgr.cpp +++ b/indra/llrender/llshadermgr.cpp @@ -668,10 +668,6 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade } } - static const LLCachedControl SHPackDeferredNormals("SHPackDeferredNormals",false); - if(SHPackDeferredNormals) - text[count++] = strdup("#define PACK_NORMALS\n"); - if(defines) { for (std::map::iterator iter = defines->begin(); iter != defines->end(); ++iter)