use ABS(Z) when computing blend factors
authorBrian Paul <brian.paul@tungstengraphics.com>
Wed, 25 Feb 2004 16:14:16 +0000 (16:14 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Wed, 25 Feb 2004 16:14:16 +0000 (16:14 +0000)
src/mesa/tnl/t_vb_fog.c

index f9646b24f34ea6cfcc47a8061d2c971e44f9ef66..cb71e67d2fd8ff16c619f87686993568d8c8647a 100644 (file)
@@ -91,6 +91,7 @@ init_static_data( void )
  * evaluating the GL_LINEAR, GL_EXP or GL_EXP2 fog function.
  * Fog coordinates are distances from the eye (typically between the
  * near and far clip plane distances).
+ * Note the fog (eye Z) coords may be negative so we use ABS(z) below.
  * Fog blend factors are in the range [0,1].
  */
 static void
@@ -113,7 +114,7 @@ compute_fog_blend_factors(GLcontext *ctx, GLvector4f *out, const GLvector4f *in)
       else
          d = 1.0F / (ctx->Fog.End - ctx->Fog.Start);
       for ( i = 0 ; i < n ; i++, STRIDE_F(v, stride)) {
-         const GLfloat z = *v;
+         const GLfloat z = FABSF(*v);
          GLfloat f = (end - z) * d;
         data[i][0] = CLAMP(f, 0.0F, 1.0F);
       }
@@ -121,14 +122,14 @@ compute_fog_blend_factors(GLcontext *ctx, GLvector4f *out, const GLvector4f *in)
    case GL_EXP:
       d = ctx->Fog.Density;
       for ( i = 0 ; i < n ; i++, STRIDE_F(v,stride)) {
-         const GLfloat z = *v;
+         const GLfloat z = FABSF(*v);
          NEG_EXP( data[i][0], d * z );
       }
       break;
    case GL_EXP2:
       d = ctx->Fog.Density*ctx->Fog.Density;
       for ( i = 0 ; i < n ; i++, STRIDE_F(v, stride)) {
-         const GLfloat z = *v;
+         const GLfloat z = FABSF(*v);
          NEG_EXP( data[i][0], d * z * z );
       }
       break;
@@ -170,7 +171,6 @@ run_fog_stage(GLcontext *ctx, struct tnl_pipeline_stage *stage)
         plane[1] = -m[6];
         plane[2] = -m[10];
         plane[3] = -m[14];
-
         /* Full eye coords weren't required, just calculate the
          * eye Z values.
          */