Fix shaders on some GPUs
authorNovatux <nathanael.courant@laposte.net>
Sun, 8 Dec 2013 07:01:20 +0000 (08:01 +0100)
committerNovatux <nathanael.courant@laposte.net>
Sun, 8 Dec 2013 07:01:20 +0000 (08:01 +0100)
client/shaders/alpha_shader/opengl_fragment.glsl
client/shaders/leaves_shader/opengl_fragment.glsl
client/shaders/liquids_shader/opengl_fragment.glsl
client/shaders/plants_shader/opengl_fragment.glsl
client/shaders/solids_shader/opengl_fragment.glsl
src/shader.cpp

index e72c1b9a6f8df3b8fb987b06da583fc9e50f2e1d..3c0f35eaec9a68d95dd4572840e4bb8bbb6701fd 100644 (file)
@@ -21,14 +21,16 @@ const float e = 2.718281828459;
 \r
 void main (void)\r
 {\r
-       float use_normalmap = texture2D(useNormalmap,vec2(1.0,1.0)).r;\r
-       float enable_bumpmapping = enableBumpmapping;\r
-\r
        vec3 color;\r
        vec2 uv = gl_TexCoord[0].st;\r
+       \r
+#ifdef NORMALS\r
        float height;\r
        vec2 tsEye = vec2(tsEyeVec.x,-tsEyeVec.y);\r
        \r
+       float use_normalmap = texture2D(useNormalmap,vec2(1.0,1.0)).r;\r
+       float enable_bumpmapping = enableBumpmapping;\r
+       \r
        if ((enableParallaxOcclusion == 1.0) && (use_normalmap > 0.0)) {\r
                float map_height = texture2D(normalTexture, uv).a;\r
                        if (map_height < 1.0){\r
@@ -49,6 +51,9 @@ void main (void)
        } else {\r
                color = texture2D(baseTexture, uv).rgb;\r
        }\r
+#else\r
+       color = texture2D(baseTexture, uv).rgb;\r
+#endif\r
 \r
        float alpha = texture2D(baseTexture, uv).a;\r
        vec4 col = vec4(color.r, color.g, color.b, alpha);\r
index 127b32d51b660b48beb0998b9a482fb7219948fb..00b6884ab8222ed16029a0998e3439b5f287a7f6 100644 (file)
@@ -18,12 +18,13 @@ const float e = 2.718281828459;
 \r
 void main (void)\r
 {\r
-       float use_normalmap = texture2D(useNormalmap,vec2(1.0,1.0)).r;\r
-       float enable_bumpmapping = enableBumpmapping;\r
-\r
        vec3 color;\r
        vec2 uv = gl_TexCoord[0].st;\r
 \r
+#ifdef NORMALS\r
+       float use_normalmap = texture2D(useNormalmap,vec2(1.0,1.0)).r;\r
+       float enable_bumpmapping = enableBumpmapping;\r
+\r
        if ((enable_bumpmapping == 1.0) && (use_normalmap > 0.0)) {\r
                vec3 base = texture2D(baseTexture, uv).rgb;\r
                vec3 vVec = normalize(eyeVec);\r
@@ -36,6 +37,9 @@ void main (void)
        } else {\r
                color = texture2D(baseTexture, uv).rgb;\r
        }\r
+#else\r
+       color = texture2D(baseTexture, uv).rgb;\r
+#endif\r
 \r
        float alpha = texture2D(baseTexture, uv).a;\r
        vec4 col = vec4(color.r, color.g, color.b, alpha);\r
index a5ffd71bb825a74668e090ef596094a784c4c1eb..b9156d06e88cdb0bb56dc3518e549bf9b7453852 100644 (file)
@@ -17,11 +17,12 @@ const float e = 2.718281828459;
 \r
 void main (void)\r
 {\r
-       float use_normalmap = texture2D(useNormalmap,vec2(1.0,1.0)).r;\r
-       float enable_bumpmapping = enableBumpmapping;\r
-\r
        vec3 color;\r
        vec2 uv = gl_TexCoord[0].st;\r
+       \r
+#ifdef NORMALS\r
+       float use_normalmap = texture2D(useNormalmap,vec2(1.0,1.0)).r;\r
+       float enable_bumpmapping = enableBumpmapping;\r
 \r
        if ((enable_bumpmapping == 1.0) && (use_normalmap > 0.0)) {\r
                vec3 base = texture2D(baseTexture, uv).rgb;\r
@@ -35,6 +36,9 @@ void main (void)
        } else {\r
                color = texture2D(baseTexture, uv).rgb;\r
        }\r
+#else\r
+       color = texture2D(baseTexture, uv).rgb;\r
+#endif\r
 \r
        float alpha = gl_Color.a;\r
        vec4 col = vec4(color.r, color.g, color.b, alpha);\r
index de6ad4c0553a70621bb9c6078ac4acb9d73c17d9..abbcada88e23be685763faf04ae0d4ba884107c8 100644 (file)
@@ -17,11 +17,12 @@ const float e = 2.718281828459;
 \r
 void main (void)\r
 {\r
-       float use_normalmap = texture2D(useNormalmap,vec2(1.0,1.0)).r;\r
-       float enable_bumpmapping = enableBumpmapping;\r
-\r
        vec3 color;\r
        vec2 uv = gl_TexCoord[0].st;\r
+       \r
+#ifdef NORMALS\r
+       float use_normalmap = texture2D(useNormalmap,vec2(1.0,1.0)).r;\r
+       float enable_bumpmapping = enableBumpmapping;\r
 \r
        if ((enable_bumpmapping == 1.0) && (use_normalmap > 0.0)) {\r
                vec3 base = texture2D(baseTexture, uv).rgb;\r
@@ -35,6 +36,9 @@ void main (void)
        } else {\r
                color = texture2D(baseTexture, uv).rgb;\r
        }\r
+#else\r
+       color = texture2D(baseTexture, uv).rgb;\r
+#endif\r
 \r
        float alpha = texture2D(baseTexture, uv).a;\r
        vec4 col = vec4(color.r, color.g, color.b, alpha);\r
index 80efc86a7272d4e69ff4104acc6758d9d26a6e5b..0b6d8f3fccf7703d871d1b708f897823b697b8c7 100644 (file)
@@ -23,14 +23,16 @@ const float e = 2.718281828459;
 \r
 void main (void)\r
 {\r
-       float use_normalmap = texture2D(useNormalmap,vec2(1.0,1.0)).r;\r
-       float enable_bumpmapping = enableBumpmapping;\r
-\r
        vec3 color;\r
        vec2 uv = gl_TexCoord[0].st;\r
+       \r
+#ifdef NORMALS\r
        float height;\r
        vec2 tsEye = vec2(tsEyeVec.x,-tsEyeVec.y);\r
        \r
+       float use_normalmap = texture2D(useNormalmap,vec2(1.0,1.0)).r;\r
+       float enable_bumpmapping = enableBumpmapping;\r
+       \r
        if ((enableParallaxOcclusion == 1.0) && (use_normalmap > 0.0)) {\r
                float map_height = texture2D(normalTexture, uv).a;\r
                        if (map_height < 1.0){\r
@@ -69,6 +71,9 @@ void main (void)
        } else {\r
                color = texture2D(baseTexture, uv).rgb;\r
        }\r
+#else\r
+       color = texture2D(baseTexture, uv).rgb;\r
+#endif\r
 \r
        float alpha = texture2D(baseTexture, uv).a;\r
        vec4 col = vec4(color.r, color.g, color.b, alpha);\r
index ec192b9a2c1e102f0fcd400872c9d78d81cbbb32..76af23686b8aedb7d00fc716b47e45ec0c903dcf 100644 (file)
@@ -673,6 +673,15 @@ ShaderInfo generate_shader(std::string name, IrrlichtDevice *device,
        if(vertex_program == "" && pixel_program == "" && geometry_program == "")
                return shaderinfo;
 
+       if (g_settings->getBool("enable_bumpmapping") || g_settings->getBool("enable_parallax_occlusion")) {
+               if(vertex_program != "")
+                       vertex_program = "#define NORMALS\n" + vertex_program;
+               if(pixel_program != "")
+                       pixel_program = "#define NORMALS\n" + pixel_program;
+               if(geometry_program != "")
+                       geometry_program = "#define NORMALS\n" + geometry_program;
+       }
+       
        // Call addHighLevelShaderMaterial() or addShaderMaterial()
        const c8* vertex_program_ptr = 0;
        const c8* pixel_program_ptr = 0;