diff pytouhou/ui/shaders/eosd.py @ 401:3ce4065840e9

Calculate the fog per-fragment and remove the fixed-pipeline glFog* functions; now both vertex shaders are the same.
author Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
date Thu, 14 Feb 2013 20:07:23 +0100
parents 346614f788f1
children a71b912b45b7
line wrap: on
line diff
--- a/pytouhou/ui/shaders/eosd.py
+++ b/pytouhou/ui/shaders/eosd.py
@@ -60,37 +60,33 @@ class BackgroundShader(Shader):
             attribute vec2 in_texcoord;
             attribute vec4 in_color;
 
-            uniform mat4 model_view;
-            uniform mat4 projection;
+            uniform mat4 mvp;
 
             varying vec2 texcoord;
             varying vec4 color;
-            varying float fog_density;
 
             void main()
             {
-                vec4 position = model_view * vec4(in_position, 1.0);
+                gl_Position = mvp * vec4(in_position, 1.0);
                 texcoord = in_texcoord;
                 color = in_color;
-
-                float fog_position = -position.z / position.w;
-                fog_density = clamp((gl_Fog.end - fog_position) * gl_Fog.scale, 0.0f, 1.0f);
-
-                gl_Position = projection * position;
             }
         '''], ['''
             #version 120
 
             varying vec2 texcoord;
             varying vec4 color;
-            varying float fog_density;
 
             uniform sampler2D color_map;
+            uniform float fog_scale;
+            uniform float fog_end;
+            uniform vec4 fog_color;
 
             void main()
             {
                 vec4 temp_color = texture2D(color_map, texcoord) * color;
-                gl_FragColor = mix(gl_Fog.color, temp_color, fog_density);
-                gl_FragColor.a = temp_color.a;
+                float depth = gl_FragCoord.z / gl_FragCoord.w;
+                float fog_density = clamp((fog_end - depth) * fog_scale, 0.0f, 1.0f);
+                gl_FragColor = vec4(mix(fog_color, temp_color, fog_density).rgb, temp_color.a);
             }
         '''])