Add _swrast_span_default_secondary_color() for use with glBitmap, glDrawPixels, etc.
authorBrian <brian@yutani.localnet.net>
Mon, 26 Mar 2007 17:30:05 +0000 (11:30 -0600)
committerBrian <brian@yutani.localnet.net>
Mon, 26 Mar 2007 17:30:05 +0000 (11:30 -0600)
Secondary color wasn't getting added to post-texture color when drawing
bitmaps, images.  See bug 10409.

src/mesa/swrast/s_bitmap.c
src/mesa/swrast/s_copypix.c
src/mesa/swrast/s_drawpix.c
src/mesa/swrast/s_span.c
src/mesa/swrast/s_span.h

index 25a1ef89d049f9a225dcaf095af54469cbf05bdc..59c42e524f0b112e665de8cb16b0314aae7be544 100644 (file)
@@ -85,6 +85,8 @@ _swrast_Bitmap( GLcontext *ctx, GLint px, GLint py,
    INIT_SPAN(span, GL_BITMAP, width, 0, SPAN_XY);
 
    _swrast_span_default_color(ctx, &span);
+   if (ctx->Light.Model.ColorControl == GL_SEPARATE_SPECULAR_COLOR)
+      _swrast_span_default_secondary_color(ctx, &span);
    if (ctx->Depth.Test)
       _swrast_span_default_z(ctx, &span);
    if (swrast->_FogEnabled)
index 2051e1f3b73579832c51c9f3c3059455b3c7c313..7ba7424aa9953452b10e3361ec71f2317ecca244 100644 (file)
@@ -109,7 +109,8 @@ copy_conv_rgba_pixels(GLcontext *ctx, GLint srcx, GLint srcy,
       _swrast_span_default_z(ctx, &span);
    if (swrast->_FogEnabled)
       _swrast_span_default_fog(ctx, &span);
-
+   if (ctx->Light.Model.ColorControl == GL_SEPARATE_SPECULAR_COLOR)
+      _swrast_span_default_secondary_color(ctx, &span);
 
    /* allocate space for GLfloat image */
    tmpImage = (GLfloat *) _mesa_malloc(width * height * 4 * sizeof(GLfloat));
@@ -244,6 +245,8 @@ copy_rgba_pixels(GLcontext *ctx, GLint srcx, GLint srcy,
       _swrast_span_default_z(ctx, &span);
    if (swrast->_FogEnabled)
       _swrast_span_default_fog(ctx, &span);
+   if (ctx->Light.Model.ColorControl == GL_SEPARATE_SPECULAR_COLOR)
+      _swrast_span_default_secondary_color(ctx, &span);
 
    if (overlapping) {
       tmpImage = (GLfloat *) _mesa_malloc(width * height * sizeof(GLfloat) * 4);
@@ -489,6 +492,8 @@ copy_depth_pixels( GLcontext *ctx, GLint srcx, GLint srcy,
    }
 
    _swrast_span_default_color(ctx, &span);
+   if (ctx->Light.Model.ColorControl == GL_SEPARATE_SPECULAR_COLOR)
+      _swrast_span_default_secondary_color(ctx, &span);
    if (swrast->_FogEnabled)
       _swrast_span_default_fog(ctx, &span);
 
index 50147f329f6c47543bb81a2fc1655f108f5d808a..70b57b917c9f704bb48b69f9cc026effff7f5889 100644 (file)
@@ -71,6 +71,8 @@ fast_draw_rgba_pixels(GLcontext *ctx, GLint x, GLint y,
    }
 
    INIT_SPAN(span, GL_BITMAP, 0, 0, SPAN_RGBA);
+   if (ctx->Light.Model.ColorControl == GL_SEPARATE_SPECULAR_COLOR)
+      _swrast_span_default_secondary_color(ctx, &span);
    if (ctx->Depth.Test)
       _swrast_span_default_z(ctx, &span);
    if (swrast->_FogEnabled)
@@ -441,7 +443,8 @@ draw_depth_pixels( GLcontext *ctx, GLint x, GLint y,
    INIT_SPAN(span, GL_BITMAP, 0, 0, SPAN_Z);
 
    _swrast_span_default_color(ctx, &span);
-
+   if (ctx->Light.Model.ColorControl == GL_SEPARATE_SPECULAR_COLOR)
+      _swrast_span_default_secondary_color(ctx, &span);
    if (swrast->_FogEnabled)
       _swrast_span_default_fog(ctx, &span);
    if (ctx->Texture._EnabledCoordUnits)
@@ -562,6 +565,8 @@ draw_rgba_pixels( GLcontext *ctx, GLint x, GLint y,
       return;
 
    INIT_SPAN(span, GL_BITMAP, 0, 0, SPAN_RGBA);
+   if (ctx->Light.Model.ColorControl == GL_SEPARATE_SPECULAR_COLOR)
+      _swrast_span_default_secondary_color(ctx, &span);
    if (ctx->Depth.Test)
       _swrast_span_default_z(ctx, &span);
    if (swrast->_FogEnabled)
index fa7761269d9e7462468935d3fbf88e6dc2c0d9a8..dab3d548fc939b79bb458b88200aa6c41242a177 100644 (file)
@@ -121,6 +121,35 @@ _swrast_span_default_color( GLcontext *ctx, SWspan *span )
 }
 
 
+void
+_swrast_span_default_secondary_color(GLcontext *ctx, SWspan *span)
+{
+   if (ctx->Visual.rgbMode) {
+      GLchan r, g, b, a;
+      UNCLAMPED_FLOAT_TO_CHAN(r, ctx->Current.RasterSecondaryColor[0]);
+      UNCLAMPED_FLOAT_TO_CHAN(g, ctx->Current.RasterSecondaryColor[1]);
+      UNCLAMPED_FLOAT_TO_CHAN(b, ctx->Current.RasterSecondaryColor[2]);
+      UNCLAMPED_FLOAT_TO_CHAN(a, ctx->Current.RasterSecondaryColor[3]);
+#if CHAN_TYPE == GL_FLOAT
+      span->specRed = r;
+      span->specGreen = g;
+      span->specBlue = b;
+      /8span->specAlpha = a;*/
+#else
+      span->specRed   = IntToFixed(r);
+      span->specGreen = IntToFixed(g);
+      span->specBlue  = IntToFixed(b);
+      /*span->specAlpha = IntToFixed(a);*/
+#endif
+      span->specRedStep = 0;
+      span->specGreenStep = 0;
+      span->specBlueStep = 0;
+      /*span->specAlphaStep = 0;*/
+      span->interpMask |= SPAN_SPEC;
+   }
+}
+
+
 /**
  * Init span's texcoord interpolation values to the RasterPos texcoords.
  * Used during setup for glDraw/CopyPixels.
index 8a9b9eb21c792c526212a53ac571192e129041f7..f650a27d6650f6f4d1869301bcab81301feec61e 100644 (file)
@@ -222,6 +222,9 @@ _swrast_span_default_fog( GLcontext *ctx, SWspan *span );
 extern void
 _swrast_span_default_color( GLcontext *ctx, SWspan *span );
 
+extern void
+_swrast_span_default_secondary_color(GLcontext *ctx, SWspan *span);
+
 extern void
 _swrast_span_default_texcoords( GLcontext *ctx, SWspan *span );