summaryrefslogtreecommitdiffstats
path: root/src/mesa/swrast/s_span.c
diff options
context:
space:
mode:
authorBrian <[email protected]>2007-06-21 09:15:32 -0600
committerBrian <[email protected]>2007-06-21 09:15:32 -0600
commit171dcdfa27dda30916a7f9bfed89577feee5d350 (patch)
tree88624d960231df741ceaa2e5ed2005ebb97d7e22 /src/mesa/swrast/s_span.c
parentfe11b2c04bf206bd50654c31e6789519c6c07563 (diff)
Another round of fixing attribute interpolation for glDraw/CopyPixels.
Need to turn off FRAG_BIT_COL0 in swrast->_ActiveAttribMask when doing glRead/CopyPixels to prevent the user's colors from getting overwritten when a fragment program is active. This was happening in the DRI drivers when MaintainTexEnv program was used (the texenv fragment program was enabled when _swrast_DrawPixels was called). This still isn't an ideal solution, but fixes things for now.
Diffstat (limited to 'src/mesa/swrast/s_span.c')
-rw-r--r--src/mesa/swrast/s_span.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/src/mesa/swrast/s_span.c b/src/mesa/swrast/s_span.c
index 3aaa3395e4c..431629efb1f 100644
--- a/src/mesa/swrast/s_span.c
+++ b/src/mesa/swrast/s_span.c
@@ -171,6 +171,11 @@ interpolate_active_attribs(GLcontext *ctx, SWspan *span, GLbitfield attrMask)
{
const SWcontext *swrast = SWRAST_CONTEXT(ctx);
+ /* for glDraw/CopyPixels() we may have turned off some bits in
+ * the _ActiveAttribMask - be sure to obey that mask now.
+ */
+ attrMask &= swrast->_ActiveAttribMask;
+
ATTRIB_LOOP_BEGIN
if (attrMask & (1 << attr)) {
const GLfloat dwdx = span->attrStepX[FRAG_ATTRIB_WPOS][3];
@@ -1169,15 +1174,10 @@ shade_texture_span(GLcontext *ctx, SWspan *span)
if (ctx->FragmentProgram._Current ||
ctx->ATIFragmentShader._Enabled) {
/* programmable shading */
- if (span->primitive == GL_BITMAP) {
- if (span->array->ChanType != GL_FLOAT)
- convert_color_type(span, GL_FLOAT, 0);
- interpolate_active_attribs(ctx, span, ~FRAG_ATTRIB_COL0);
- }
- else {
- /* point, line, triangle */
- interpolate_active_attribs(ctx, span, ~0);
+ if (span->primitive == GL_BITMAP && span->array->ChanType != GL_FLOAT) {
+ convert_color_type(span, GL_FLOAT, 0);
}
+ interpolate_active_attribs(ctx, span, ~0);
span->array->ChanType = GL_FLOAT;
if (!(span->arrayMask & SPAN_Z))