summaryrefslogtreecommitdiffstats
path: root/src/mesa/main/fog.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa/main/fog.c')
-rw-r--r--src/mesa/main/fog.c35
1 files changed, 23 insertions, 12 deletions
diff --git a/src/mesa/main/fog.c b/src/mesa/main/fog.c
index d3b8a923aae..df99c6519f6 100644
--- a/src/mesa/main/fog.c
+++ b/src/mesa/main/fog.c
@@ -70,7 +70,15 @@ _mesa_Fogiv(GLenum pname, const GLint *params )
;
}
_mesa_Fogfv(pname, p);
-}
+}
+
+
+#define UPDATE_FOG_SCALE(ctx) do {\
+ if (ctx->Fog.End == ctx->Fog.Start)\
+ ctx->Fog._Scale = 1.0f;\
+ else\
+ ctx->Fog._Scale = 1.0f / (ctx->Fog.End - ctx->Fog.Start);\
+ } while(0)
void GLAPIENTRY
@@ -108,17 +116,19 @@ _mesa_Fogfv( GLenum pname, const GLfloat *params )
ctx->Fog.Density = *params;
break;
case GL_FOG_START:
- if (ctx->Fog.Start == *params)
- return;
- FLUSH_VERTICES(ctx, _NEW_FOG);
- ctx->Fog.Start = *params;
- break;
+ if (ctx->Fog.Start == *params)
+ return;
+ FLUSH_VERTICES(ctx, _NEW_FOG);
+ ctx->Fog.Start = *params;
+ UPDATE_FOG_SCALE(ctx);
+ break;
case GL_FOG_END:
- if (ctx->Fog.End == *params)
- return;
- FLUSH_VERTICES(ctx, _NEW_FOG);
- ctx->Fog.End = *params;
- break;
+ if (ctx->Fog.End == *params)
+ return;
+ FLUSH_VERTICES(ctx, _NEW_FOG);
+ ctx->Fog.End = *params;
+ UPDATE_FOG_SCALE(ctx);
+ break;
case GL_FOG_INDEX:
if (ctx->Fog.Index == *params)
return;
@@ -173,5 +183,6 @@ void _mesa_init_fog( GLcontext * ctx )
ctx->Fog.Start = 0.0;
ctx->Fog.End = 1.0;
ctx->Fog.ColorSumEnabled = GL_FALSE;
- ctx->Fog.FogCoordinateSource = GL_FRAGMENT_DEPTH_EXT;
+ ctx->Fog.FogCoordinateSource = GL_FRAGMENT_DEPTH_EXT;
+ ctx->Fog._Scale = 1.0f;
}