[PATCH] WineD3D: Implement EXP and EXP2 fog in GLSL=0A=

Stefan Doesinger stefan at codeweavers.com
Fri Jan 2 01:59:13 CST 2009


=0A=
---=0A=
 dlls/wined3d/glsl_shader.c |   10 ++++++++--=0A=
 1 files changed, 8 insertions(+), 2 deletions(-)=0A=
=0A=
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c=0A=
index 28270f3..7256cf0 100644=0A=
--- a/dlls/wined3d/glsl_shader.c=0A=
+++ b/dlls/wined3d/glsl_shader.c=0A=
@@ -3872,10 +3872,16 @@ static GLuint =
shader_glsl_generate_pshader(IWineD3DPixelShader *iface, SHADER_BU=0A=
                 shader_addline(buffer, "%s.xyz =3D =
mix(gl_Fog.color.xyz, %s.xyz, Fog);\n", fragcolor, fragcolor);=0A=
                 break;=0A=
             case FOG_EXP:=0A=
-                FIXME("Implement EXP fog in glsl\n");=0A=
+                /* Fog =3D e^(-gl_Fog.density * gl_FogFragCoord) */=0A=
+                shader_addline(buffer, "float Fog =3D =
exp(-gl_Fog.density * gl_FogFragCoord);\n");=0A=
+                shader_addline(buffer, "Fog =3D clamp(Fog, 0.0, 1.0);");=0A=
+                shader_addline(buffer, "%s.xyz =3D =
mix(gl_Fog.color.xyz, %s.xyz, Fog);\n", fragcolor, fragcolor);=0A=
                 break;=0A=
             case FOG_EXP2:=0A=
-                FIXME("Implement EXP2 fog in glsl\n");=0A=
+                /* Fog =3D e^(-(gl_Fog.density * gl_FogFragCoord)^2) */=0A=
+                shader_addline(buffer, "float Fog =3D =
exp(-gl_Fog.density * gl_Fog.density * gl_FogFragCoord * =
gl_FogFragCoord);\n");=0A=
+                shader_addline(buffer, "Fog =3D clamp(Fog, 0.0, 1.0);");=0A=
+                shader_addline(buffer, "%s.xyz =3D =
mix(gl_Fog.color.xyz, %s.xyz, Fog);\n", fragcolor, fragcolor);=0A=
                 break;=0A=
         }=0A=
     }=0A=
-- =0A=
1.6.0.6=0A=
=0A=

------=_NextPart_000_0047_01C97A6D.FC8A3630--




More information about the wine-patches mailing list