diff options
author | Brian <[email protected]> | 2007-03-26 11:30:05 -0600 |
---|---|---|
committer | Brian <[email protected]> | 2007-03-26 11:30:05 -0600 |
commit | 38a1c2b4959d35236933c14d3944cce94283ca30 (patch) | |
tree | c82629e61cc04ad279deaeae578bc5e584d425ce | |
parent | b5d988dd19291e4e1e6f18e4163c2acac66729de (diff) |
Add _swrast_span_default_secondary_color() for use with glBitmap, glDrawPixels, etc.
Secondary color wasn't getting added to post-texture color when drawing
bitmaps, images. See bug 10409.
-rw-r--r-- | src/mesa/swrast/s_bitmap.c | 2 | ||||
-rw-r--r-- | src/mesa/swrast/s_copypix.c | 7 | ||||
-rw-r--r-- | src/mesa/swrast/s_drawpix.c | 7 | ||||
-rw-r--r-- | src/mesa/swrast/s_span.c | 29 | ||||
-rw-r--r-- | src/mesa/swrast/s_span.h | 3 |
5 files changed, 46 insertions, 2 deletions
diff --git a/src/mesa/swrast/s_bitmap.c b/src/mesa/swrast/s_bitmap.c index 25a1ef89d04..59c42e524f0 100644 --- a/src/mesa/swrast/s_bitmap.c +++ b/src/mesa/swrast/s_bitmap.c @@ -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) diff --git a/src/mesa/swrast/s_copypix.c b/src/mesa/swrast/s_copypix.c index 2051e1f3b73..7ba7424aa99 100644 --- a/src/mesa/swrast/s_copypix.c +++ b/src/mesa/swrast/s_copypix.c @@ -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); diff --git a/src/mesa/swrast/s_drawpix.c b/src/mesa/swrast/s_drawpix.c index 50147f329f6..70b57b917c9 100644 --- a/src/mesa/swrast/s_drawpix.c +++ b/src/mesa/swrast/s_drawpix.c @@ -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) diff --git a/src/mesa/swrast/s_span.c b/src/mesa/swrast/s_span.c index fa7761269d9..dab3d548fc9 100644 --- a/src/mesa/swrast/s_span.c +++ b/src/mesa/swrast/s_span.c @@ -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. diff --git a/src/mesa/swrast/s_span.h b/src/mesa/swrast/s_span.h index 8a9b9eb21c7..f650a27d665 100644 --- a/src/mesa/swrast/s_span.h +++ b/src/mesa/swrast/s_span.h @@ -223,6 +223,9 @@ 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 ); extern GLfloat |