Shaders: Remove unnecessary 'if' statements
authorLars Hofhansl <larsh@apache.org>
Thu, 8 Dec 2016 05:14:18 +0000 (21:14 -0800)
committerparamat <mat.gregory@virginmedia.com>
Sat, 24 Dec 2016 00:22:16 +0000 (00:22 +0000)
Pull if GENERATE_NORMALMAPS == 1 into the template to avoid evaluating
it for each fragment.
Remove if (fogDistance != 0.0).

client/shaders/nodes_shader/opengl_fragment.glsl
client/shaders/water_surface_shader/opengl_fragment.glsl
client/shaders/wielded_shader/opengl_fragment.glsl

index 71ded2b9d3b47d0b78564ded47917c9cac01ef26..914f9f8730428fbc0174b9ce6cd9fcbdef925853 100644 (file)
@@ -163,7 +163,8 @@ void main(void)
        }
 #endif
 
-       if (GENERATE_NORMALMAPS == 1 && normalTexturePresent == false) {
+#if GENERATE_NORMALMAPS == 1
+       if (normalTexturePresent == false) {
                float tl = get_rgb_height(vec2(uv.x - SAMPLE_STEP, uv.y + SAMPLE_STEP));
                float t  = get_rgb_height(vec2(uv.x - SAMPLE_STEP, uv.y - SAMPLE_STEP));
                float tr = get_rgb_height(vec2(uv.x + SAMPLE_STEP, uv.y + SAMPLE_STEP));
@@ -177,7 +178,7 @@ void main(void)
                bump = vec4(normalize(vec3 (dX, dY, NORMALMAPS_STRENGTH)), 1.0);
                use_normalmap = true;
        }
-
+#endif
        vec4 base = texture2D(baseTexture, uv).rgba;
 
 #ifdef ENABLE_BUMPMAPPING
@@ -200,20 +201,18 @@ void main(void)
        col = applyToneMapping(col);
 #endif
 
-       if (fogDistance != 0.0) {
-               // Due to a bug in some (older ?) graphics stacks (possibly in the glsl compiler ?),
-               // the fog will only be rendered correctly if the last operation before the
-               // clamp() is an addition. Else, the clamp() seems to be ignored.
-               // E.g. the following won't work:
-               //      float clarity = clamp(fogShadingParameter
-               //              * (fogDistance - length(eyeVec)) / fogDistance), 0.0, 1.0);
-               // As additions usually come for free following a multiplication, the new formula
-               // should be more efficient as well.
-               // Note: clarity = (1 - fogginess)
-               float clarity = clamp(fogShadingParameter
-                       - fogShadingParameter * length(eyeVec) / fogDistance, 0.0, 1.0);
-               col = mix(skyBgColor, col, clarity);
-       }
+       // Due to a bug in some (older ?) graphics stacks (possibly in the glsl compiler ?),
+       // the fog will only be rendered correctly if the last operation before the
+       // clamp() is an addition. Else, the clamp() seems to be ignored.
+       // E.g. the following won't work:
+       //      float clarity = clamp(fogShadingParameter
+       //              * (fogDistance - length(eyeVec)) / fogDistance), 0.0, 1.0);
+       // As additions usually come for free following a multiplication, the new formula
+       // should be more efficient as well.
+       // Note: clarity = (1 - fogginess)
+       float clarity = clamp(fogShadingParameter
+               - fogShadingParameter * length(eyeVec) / fogDistance, 0.0, 1.0);
+       col = mix(skyBgColor, col, clarity);
        col = vec4(col.rgb, base.a);
 
        gl_FragColor = col;
index c4e78470d1b4ff9f7b29e3d713752a8d303b868e..19f6ac80fb4e334bcfc4babba66afd7057a8ce22 100644 (file)
@@ -114,7 +114,8 @@ void main(void)
        } 
 #endif
 
-       if (GENERATE_NORMALMAPS == 1 && use_normalmap == false) {
+#if GENERATE_NORMALMAPS == 1
+       if (use_normalmap == false) {
                float tl = get_rgb_height (vec2(uv.x-SAMPLE_STEP,uv.y+SAMPLE_STEP));
                float t  = get_rgb_height (vec2(uv.x-SAMPLE_STEP,uv.y-SAMPLE_STEP));
                float tr = get_rgb_height (vec2(uv.x+SAMPLE_STEP,uv.y+SAMPLE_STEP));
@@ -128,6 +129,7 @@ void main(void)
                bump = vec4 (normalize(vec3 (dX, -dY, NORMALMAPS_STRENGTH)),1.0);
                use_normalmap = true;
        }
+#endif
 
 vec4 base = texture2D(baseTexture, uv).rgba;
 
@@ -156,20 +158,18 @@ vec4 base = texture2D(baseTexture, uv).rgba;
        col = applyToneMapping(col);
 #endif
 
-       if (fogDistance != 0.0) {
-               // Due to a bug in some (older ?) graphics stacks (possibly in the glsl compiler ?),
-               // the fog will only be rendered correctly if the last operation before the
-               // clamp() is an addition. Else, the clamp() seems to be ignored.
-               // E.g. the following won't work:
-               //      float clarity = clamp(fogShadingParameter
-               //              * (fogDistance - length(eyeVec)) / fogDistance), 0.0, 1.0);
-               // As additions usually come for free following a multiplication, the new formula
-               // should be more efficient as well.
-               // Note: clarity = (1 - fogginess)
-               float clarity = clamp(fogShadingParameter
-                       - fogShadingParameter * length(eyeVec) / fogDistance, 0.0, 1.0);
-               col = mix(skyBgColor, col, clarity);
-       }
+       // Due to a bug in some (older ?) graphics stacks (possibly in the glsl compiler ?),
+       // the fog will only be rendered correctly if the last operation before the
+       // clamp() is an addition. Else, the clamp() seems to be ignored.
+       // E.g. the following won't work:
+       //      float clarity = clamp(fogShadingParameter
+       //              * (fogDistance - length(eyeVec)) / fogDistance), 0.0, 1.0);
+       // As additions usually come for free following a multiplication, the new formula
+       // should be more efficient as well.
+       // Note: clarity = (1 - fogginess)
+       float clarity = clamp(fogShadingParameter
+               - fogShadingParameter * length(eyeVec) / fogDistance, 0.0, 1.0);
+       col = mix(skyBgColor, col, clarity);
        col = vec4(col.rgb, base.a);
 
        gl_FragColor = col;
index ba7a8f12decfeec752bcce0115123faf794cd256..546aef71d92a81520d80ab90db8703f1050e67b1 100644 (file)
@@ -75,7 +75,8 @@ void main(void)
        }
 #endif
 
-       if (GENERATE_NORMALMAPS == 1 && normalTexturePresent == false) {
+#if GENERATE_NORMALMAPS == 1
+       if (normalTexturePresent == false) {
                float tl = get_rgb_height(vec2(uv.x - SAMPLE_STEP, uv.y + SAMPLE_STEP));
                float t  = get_rgb_height(vec2(uv.x - SAMPLE_STEP, uv.y - SAMPLE_STEP));
                float tr = get_rgb_height(vec2(uv.x + SAMPLE_STEP, uv.y + SAMPLE_STEP));
@@ -89,6 +90,7 @@ void main(void)
                bump = vec4(normalize(vec3 (dX, dY, NORMALMAPS_STRENGTH)), 1.0);
                use_normalmap = true;
        }
+#endif
 
        vec4 base = texture2D(baseTexture, uv).rgba;
 
@@ -108,19 +110,18 @@ void main(void)
 
        vec4 col = vec4(color.rgb, base.a);
        col *= gl_Color;
-       if (fogDistance != 0.0) {
-               // Due to a bug in some (older ?) graphics stacks (possibly in the glsl compiler ?),
-               // the fog will only be rendered correctly if the last operation before the
-               // clamp() is an addition. Else, the clamp() seems to be ignored.
-               // E.g. the following won't work:
-               //      float clarity = clamp(fogShadingParameter
-               //              * (fogDistance - length(eyeVec)) / fogDistance), 0.0, 1.0);
-               // As additions usually come for free following a multiplication, the new formula
-               // should be more efficient as well.
-               // Note: clarity = (1 - fogginess)
-               float clarity = clamp(fogShadingParameter
-                       - fogShadingParameter * length(eyeVec) / fogDistance, 0.0, 1.0);
-               col = mix(skyBgColor, col, clarity);
-       }
+       // Due to a bug in some (older ?) graphics stacks (possibly in the glsl compiler ?),
+       // the fog will only be rendered correctly if the last operation before the
+       // clamp() is an addition. Else, the clamp() seems to be ignored.
+       // E.g. the following won't work:
+       //      float clarity = clamp(fogShadingParameter
+       //              * (fogDistance - length(eyeVec)) / fogDistance), 0.0, 1.0);
+       // As additions usually come for free following a multiplication, the new formula
+       // should be more efficient as well.
+       // Note: clarity = (1 - fogginess)
+       float clarity = clamp(fogShadingParameter
+               - fogShadingParameter * length(eyeVec) / fogDistance, 0.0, 1.0);
+       col = mix(skyBgColor, col, clarity);
+
        gl_FragColor = vec4(col.rgb, base.a);
 }