fix fog color bug
authorBrian Paul <brian.paul@tungstengraphics.com>
Tue, 17 Oct 2006 22:22:42 +0000 (22:22 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Tue, 17 Oct 2006 22:22:42 +0000 (22:22 +0000)
src/mesa/swrast/s_fog.c

index 1d6c4cd024a850f8872d117604ecd8c57b8d4955..396118582494fd0f8eda919c7b992a595d803268 100644 (file)
@@ -110,15 +110,30 @@ void
 _swrast_fog_rgba_span( const GLcontext *ctx, SWspan *span )
 {
    const SWcontext *swrast = SWRAST_CONTEXT(ctx);
-   const GLfloat rFog = ctx->Fog.Color[RCOMP] * CHAN_MAX;
-   const GLfloat gFog = ctx->Fog.Color[GCOMP] * CHAN_MAX;
-   const GLfloat bFog = ctx->Fog.Color[BCOMP] * CHAN_MAX;
+   GLfloat rFog, gFog, bFog;
    const GLuint haveW = (span->interpMask & SPAN_W);
 
    ASSERT(swrast->_FogEnabled);
    ASSERT((span->interpMask | span->arrayMask) & SPAN_FOG);
    ASSERT(span->arrayMask & SPAN_RGBA);
 
+   if (span->array->ChanType == GL_UNSIGNED_BYTE) {
+      rFog = ctx->Fog.Color[RCOMP] * 255.0;
+      gFog = ctx->Fog.Color[GCOMP] * 255.0;
+      bFog = ctx->Fog.Color[BCOMP] * 255.0;
+   }
+   else if (span->array->ChanType == GL_UNSIGNED_SHORT) {
+      rFog = ctx->Fog.Color[RCOMP] * 65535.0;
+      gFog = ctx->Fog.Color[GCOMP] * 65535.0;
+      bFog = ctx->Fog.Color[BCOMP] * 65535.0;
+   }
+   else {
+      rFog = ctx->Fog.Color[RCOMP];
+      gFog = ctx->Fog.Color[GCOMP];
+      bFog = ctx->Fog.Color[BCOMP];
+   }
+
+
    /* NOTE: if haveW is true, that means the fog start/step values are
     * perspective-corrected and we have to divide each fog coord by W.
     */