summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsyrjala <syrjala>2003-11-12 21:47:43 +0000
committersyrjala <syrjala>2003-11-12 21:47:43 +0000
commitad58b82fb750ac92524b694587295b34cb17ff5e (patch)
tree09f956f30ebe1b0c760d9c1d4b21cba0bfa911d7
parente3d081978d6d1ebf11a0e0d6a581237a0a27b93d (diff)
Fixed logic op handling.
-rw-r--r--xc/extras/Mesa/src/blend.c5
-rw-r--r--xc/extras/Mesa/src/context.c1
-rw-r--r--xc/extras/Mesa/src/enable.c15
-rw-r--r--xc/extras/Mesa/src/mtypes.h1
-rw-r--r--xc/extras/Mesa/src/swrast/s_blend.c2
-rw-r--r--xc/extras/Mesa/src/swrast/s_context.c2
-rw-r--r--xc/extras/Mesa/src/swrast/s_span.c6
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) {