From c8e714df013cdf360602f9cc96d26cb732b19a32 Mon Sep 17 00:00:00 2001 From: "M.Froehlich@science-computing.de" Date: Tue, 10 Aug 2010 21:19:46 -0600 Subject: [PATCH] swrast: fix span color array pointer assignment for 32-bit/channel rendering See fd.o bug 29487. NOTE: This is a candidate for the 7.8 branch. Signed-off-by: Brian Paul --- src/mesa/swrast/s_span.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/mesa/swrast/s_span.c b/src/mesa/swrast/s_span.c index 3b3929a41be..8931cdec1bc 100644 --- a/src/mesa/swrast/s_span.c +++ b/src/mesa/swrast/s_span.c @@ -970,6 +970,10 @@ shade_texture_span(GLcontext *ctx, SWspan *span) if (span->primitive == GL_BITMAP && span->array->ChanType != GL_FLOAT) { convert_color_type(span, GL_FLOAT, 0); } + else { + span->array->rgba = (void *) span->array->attribs[FRAG_ATTRIB_COL0]; + } + if (span->primitive != GL_POINT || (span->interpMask & SPAN_RGBA) || ctx->Point.PointSprite) { @@ -1221,9 +1225,22 @@ _swrast_write_rgba_span( GLcontext *ctx, SWspan *span) GLchan rgbaSave[MAX_WIDTH][4]; const GLuint fragOutput = multiFragOutputs ? buf : 0; + /* set span->array->rgba to colors for render buffer's datatype */ if (rb->DataType != span->array->ChanType || fragOutput > 0) { convert_color_type(span, rb->DataType, fragOutput); } + else { + if (rb->DataType == GL_UNSIGNED_BYTE) { + span->array->rgba = span->array->rgba8; + } + else if (rb->DataType == GL_UNSIGNED_SHORT) { + span->array->rgba = (void *) span->array->rgba16; + } + else { + span->array->rgba = (void *) + span->array->attribs[FRAG_ATTRIB_COL0]; + } + } if (!multiFragOutputs && numBuffers > 1) { /* save colors for second, third renderbuffer writes */ -- 2.30.2