Stefan Dösinger : wined3d: Implement EXP and EXP2 fog in GLSL.
Alexandre Julliard
julliard at winehq.org
Wed Feb 11 09:24:28 CST 2009
Module: wine
Branch: master
Commit: 66778ed9ec005248106f59e07f716e8e4317e1fc
URL: http://source.winehq.org/git/wine.git/?a=commit;h=66778ed9ec005248106f59e07f716e8e4317e1fc
Author: Stefan Dösinger <stefan at codeweavers.com>
Date: Fri Jan 2 01:59:13 2009 +0100
wined3d: Implement EXP and EXP2 fog in GLSL.
---
dlls/wined3d/glsl_shader.c | 10 ++++++++--
1 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
index d83eecb..f67fdd5 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -3872,10 +3872,16 @@ static GLuint shader_glsl_generate_pshader(IWineD3DPixelShader *iface, SHADER_BU
shader_addline(buffer, "%s.xyz = mix(gl_Fog.color.xyz, %s.xyz, Fog);\n", fragcolor, fragcolor);
break;
case FOG_EXP:
- FIXME("Implement EXP fog in glsl\n");
+ /* Fog = e^(-gl_Fog.density * gl_FogFragCoord) */
+ shader_addline(buffer, "float Fog = exp(-gl_Fog.density * gl_FogFragCoord);\n");
+ shader_addline(buffer, "Fog = clamp(Fog, 0.0, 1.0);");
+ shader_addline(buffer, "%s.xyz = mix(gl_Fog.color.xyz, %s.xyz, Fog);\n", fragcolor, fragcolor);
break;
case FOG_EXP2:
- FIXME("Implement EXP2 fog in glsl\n");
+ /* Fog = e^(-(gl_Fog.density * gl_FogFragCoord)^2) */
+ shader_addline(buffer, "float Fog = exp(-gl_Fog.density * gl_Fog.density * gl_FogFragCoord * gl_FogFragCoord);\n");
+ shader_addline(buffer, "Fog = clamp(Fog, 0.0, 1.0);");
+ shader_addline(buffer, "%s.xyz = mix(gl_Fog.color.xyz, %s.xyz, Fog);\n", fragcolor, fragcolor);
break;
}
}
More information about the wine-cvs
mailing list