case GL_CLAMP_FRAGMENT_COLOR_ARB:
if (ctx->API == API_OPENGL_CORE)
goto invalid_enum;
- FLUSH_VERTICES(ctx, _NEW_FRAG_CLAMP);
- ctx->Color.ClampFragmentColor = clamp;
- _mesa_update_clamp_fragment_color(ctx, ctx->DrawBuffer);
+ if (ctx->Color.ClampFragmentColor != clamp) {
+ ctx->Color.ClampFragmentColor = clamp;
+ _mesa_update_clamp_fragment_color(ctx, ctx->DrawBuffer);
+ }
break;
case GL_CLAMP_READ_COLOR_ARB:
ctx->Color.ClampReadColor = clamp;
_mesa_update_clamp_fragment_color(struct gl_context *ctx,
const struct gl_framebuffer *drawFb)
{
+ GLboolean clamp;
+
/* Don't clamp if:
* - there is no colorbuffer
* - all colorbuffers are unsigned normalized, so clamping has no effect
*/
if (!drawFb || !drawFb->_HasSNormOrFloatColorBuffer ||
drawFb->_IntegerBuffers)
- ctx->Color._ClampFragmentColor = GL_FALSE;
+ clamp = GL_FALSE;
else
- ctx->Color._ClampFragmentColor =
- _mesa_get_clamp_fragment_color(ctx, drawFb);
+ clamp = _mesa_get_clamp_fragment_color(ctx, drawFb);
+
+ if (ctx->Color._ClampFragmentColor == clamp)
+ return;
+
+ ctx->NewState |= _NEW_FRAG_CLAMP; /* for state constants */
+ ctx->NewDriverState |= ctx->DriverFlags.NewFragClamp;
+ ctx->Color._ClampFragmentColor = clamp;
}
/**