diff options
author | syrjala <syrjala> | 2003-11-12 21:47:43 +0000 |
---|---|---|
committer | syrjala <syrjala> | 2003-11-12 21:47:43 +0000 |
commit | ad58b82fb750ac92524b694587295b34cb17ff5e (patch) | |
tree | 09f956f30ebe1b0c760d9c1d4b21cba0bfa911d7 | |
parent | e3d081978d6d1ebf11a0e0d6a581237a0a27b93d (diff) |
Fixed logic op handling.
-rw-r--r-- | xc/extras/Mesa/src/blend.c | 5 | ||||
-rw-r--r-- | xc/extras/Mesa/src/context.c | 1 | ||||
-rw-r--r-- | xc/extras/Mesa/src/enable.c | 15 | ||||
-rw-r--r-- | xc/extras/Mesa/src/mtypes.h | 1 | ||||
-rw-r--r-- | xc/extras/Mesa/src/swrast/s_blend.c | 2 | ||||
-rw-r--r-- | xc/extras/Mesa/src/swrast/s_context.c | 2 | ||||
-rw-r--r-- | xc/extras/Mesa/src/swrast/s_span.c | 6 |
7 files changed, 22 insertions, 10 deletions
diff --git a/xc/extras/Mesa/src/blend.c b/xc/extras/Mesa/src/blend.c index e031851f9..e56defaa8 100644 --- a/xc/extras/Mesa/src/blend.c +++ b/xc/extras/Mesa/src/blend.c @@ -305,8 +305,9 @@ _mesa_BlendEquation( GLenum mode ) /* This is needed to support 1.1's RGB logic ops AND * 1.0's blending logicops. */ - ctx->Color.ColorLogicOpEnabled = (mode==GL_LOGIC_OP && - ctx->Color.BlendEnabled); + ctx->Color._LogicOpEnabled = (ctx->Color.ColorLogicOpEnabled || + (ctx->Color.BlendEnabled && + mode == GL_LOGIC_OP)); if (ctx->Driver.BlendEquation) (*ctx->Driver.BlendEquation)( ctx, mode ); diff --git a/xc/extras/Mesa/src/context.c b/xc/extras/Mesa/src/context.c index c6baf57ec..8b30cadb4 100644 --- a/xc/extras/Mesa/src/context.c +++ b/xc/extras/Mesa/src/context.c @@ -980,6 +980,7 @@ init_attrib_groups( GLcontext *ctx ) ASSIGN_4V( ctx->Color.BlendColor, 0.0, 0.0, 0.0, 0.0 ); ctx->Color.IndexLogicOpEnabled = GL_FALSE; ctx->Color.ColorLogicOpEnabled = GL_FALSE; + ctx->Color._LogicOpEnabled = GL_FALSE; ctx->Color.LogicOp = GL_COPY; ctx->Color.DitherFlag = GL_TRUE; diff --git a/xc/extras/Mesa/src/enable.c b/xc/extras/Mesa/src/enable.c index a303a72d6..5ffadf1b1 100644 --- a/xc/extras/Mesa/src/enable.c +++ b/xc/extras/Mesa/src/enable.c @@ -195,9 +195,12 @@ void _mesa_set_enable( GLcontext *ctx, GLenum cap, GLboolean state ) return; FLUSH_VERTICES(ctx, _NEW_COLOR); ctx->Color.BlendEnabled = state; - /* The following needed to accomodate 1.0 RGB logic op blending */ - ctx->Color.ColorLogicOpEnabled = - (ctx->Color.BlendEquation == GL_LOGIC_OP && state); + /* This is needed to support 1.1's RGB logic ops AND + * 1.0's blending logicops. + */ + ctx->Color._LogicOpEnabled = + (ctx->Color.ColorLogicOpEnabled || + (state && ctx->Color.BlendEquation == GL_LOGIC_OP)); break; case GL_CLIP_PLANE0: case GL_CLIP_PLANE1: @@ -345,6 +348,12 @@ void _mesa_set_enable( GLcontext *ctx, GLenum cap, GLboolean state ) return; FLUSH_VERTICES(ctx, _NEW_COLOR); ctx->Color.ColorLogicOpEnabled = state; + /* This is needed to support 1.1's RGB logic ops AND + * 1.0's blending logicops. + */ + ctx->Color._LogicOpEnabled = + (state || (ctx->Color.BlendEnabled && + ctx->Color.BlendEquation == GL_LOGIC_OP)); break; case GL_MAP1_COLOR_4: if (ctx->Eval.Map1Color4 == state) diff --git a/xc/extras/Mesa/src/mtypes.h b/xc/extras/Mesa/src/mtypes.h index 0cd191f88..d90326791 100644 --- a/xc/extras/Mesa/src/mtypes.h +++ b/xc/extras/Mesa/src/mtypes.h @@ -339,6 +339,7 @@ struct gl_colorbuffer_attrib { GLenum LogicOp; /* Logic operator */ GLboolean IndexLogicOpEnabled; /* Color index logic op enabled flag */ GLboolean ColorLogicOpEnabled; /* RGBA logic op enabled flag */ + GLboolean _LogicOpEnabled; /* RGBA logic op + ETX_blend_logic_op enabled flag */ GLboolean DitherFlag; /* Dither enable flag */ }; diff --git a/xc/extras/Mesa/src/swrast/s_blend.c b/xc/extras/Mesa/src/swrast/s_blend.c index acd454811..8582f6347 100644 --- a/xc/extras/Mesa/src/swrast/s_blend.c +++ b/xc/extras/Mesa/src/swrast/s_blend.c @@ -781,7 +781,7 @@ _mesa_blend_span( GLcontext *ctx, const struct sw_span *span, ASSERT(span->end <= MAX_WIDTH); ASSERT(span->arrayMask & SPAN_RGBA); - ASSERT(!ctx->Color.ColorLogicOpEnabled); + ASSERT(!ctx->Color._LogicOpEnabled); /* Read span of current frame buffer pixels */ if (span->arrayMask & SPAN_XY) { diff --git a/xc/extras/Mesa/src/swrast/s_context.c b/xc/extras/Mesa/src/swrast/s_context.c index 16acc154a..30740e15c 100644 --- a/xc/extras/Mesa/src/swrast/s_context.c +++ b/xc/extras/Mesa/src/swrast/s_context.c @@ -59,7 +59,7 @@ _swrast_update_rasterflags( GLcontext *ctx ) if (ctx->Visual.rgbMode) { const GLuint colorMask = *((GLuint *) &ctx->Color.ColorMask); if (colorMask != 0xffffffff) RasterMask |= MASKING_BIT; - if (ctx->Color.ColorLogicOpEnabled) RasterMask |= LOGIC_OP_BIT; + if (ctx->Color._LogicOpEnabled) RasterMask |= LOGIC_OP_BIT; if (ctx->Texture._EnabledUnits) RasterMask |= TEXTURE_BIT; } else { diff --git a/xc/extras/Mesa/src/swrast/s_span.c b/xc/extras/Mesa/src/swrast/s_span.c index a43051964..dbff871fe 100644 --- a/xc/extras/Mesa/src/swrast/s_span.c +++ b/xc/extras/Mesa/src/swrast/s_span.c @@ -692,7 +692,7 @@ multi_write_rgba_span( GLcontext *ctx, struct sw_span *span ) /* make copy of incoming colors */ MEMCPY( rgbaTmp, span->array->rgba, 4 * span->end * sizeof(GLchan) ); - if (ctx->Color.ColorLogicOpEnabled) { + if (ctx->Color._LogicOpEnabled) { _mesa_logicop_rgba_span(ctx, span, rgbaTmp); } else if (ctx->Color.BlendEnabled) { @@ -1031,7 +1031,7 @@ _mesa_write_rgba_span( GLcontext *ctx, struct sw_span *span) } else { /* normal: write to exactly one buffer */ - if (ctx->Color.ColorLogicOpEnabled) { + if (ctx->Color._LogicOpEnabled) { _mesa_logicop_rgba_span(ctx, span, span->array->rgba); monoColor = GL_FALSE; } @@ -1278,7 +1278,7 @@ _mesa_write_texture_span( GLcontext *ctx, struct sw_span *span) } else { /* normal: write to exactly one buffer */ - if (ctx->Color.ColorLogicOpEnabled) { + if (ctx->Color._LogicOpEnabled) { _mesa_logicop_rgba_span(ctx, span, span->array->rgba); } else if (ctx->Color.BlendEnabled) { |