On 03/28/2013 03:24 PM, Marek Olšák wrote:
It has 2 dependencies: glClampColor and the framebuffer, we might just as well
do the update where those two are changed.
---
  src/mesa/main/blend.c       |   28 ++++++++++++++++++++++++++++
  src/mesa/main/blend.h       |    6 ++++++
  src/mesa/main/framebuffer.c |    4 ++++
  src/mesa/main/state.c       |   36 ------------------------------------
  4 files changed, 38 insertions(+), 36 deletions(-)

diff --git a/src/mesa/main/blend.c b/src/mesa/main/blend.c
index c1b49b1..6cc2310 100644
--- a/src/mesa/main/blend.c
+++ b/src/mesa/main/blend.c
@@ -767,10 +767,12 @@ _mesa_ClampColor(GLenum target, GLenum clamp)
     case GL_CLAMP_VERTEX_COLOR_ARB:
        FLUSH_VERTICES(ctx, _NEW_LIGHT);
        ctx->Light.ClampVertexColor = clamp;
+      _mesa_update_clamp_vertex_color(ctx);
        break;
     case GL_CLAMP_FRAGMENT_COLOR_ARB:
        FLUSH_VERTICES(ctx, _NEW_FRAG_CLAMP);
        ctx->Color.ClampFragmentColor = clamp;
+      _mesa_update_clamp_fragment_color(ctx);
        break;
     case GL_CLAMP_READ_COLOR_ARB:
        FLUSH_VERTICES(ctx, _NEW_COLOR);
@@ -811,6 +813,32 @@ GLboolean _mesa_get_clamp_read_color(const struct 
gl_context *ctx)
     return _mesa_get_clamp_color(ctx->ReadBuffer, ctx->Color.ClampReadColor);
  }

+/**
+ * Update the ctx->Color._ClampFragmentColor field
+ */
+void _mesa_update_clamp_fragment_color(struct gl_context *ctx)

void
_mesa_update_clamp_fragment_color(struct gl_context *ctx)


+{
+   struct gl_framebuffer *fb = ctx->DrawBuffer;
+
+   /* Don't clamp if:
+    * - there is no colorbuffer
+    * - all colorbuffers are unsigned normalized, so clamping has no effect
+    * - there is an integer colorbuffer
+    */
+   if (!fb || !fb->_HasSNormOrFloatColorBuffer || fb->_IntegerColor)
+      ctx->Color._ClampFragmentColor = GL_FALSE;
+   else
+      ctx->Color._ClampFragmentColor = _mesa_get_clamp_fragment_color(ctx);
+}
+
+/**
+ * Update the ctx->Color._ClampVertexColor field
+ */
+void _mesa_update_clamp_vertex_color(struct gl_context *ctx)

void
_mesa_update_clamp_vertex_color(struct gl_context *ctx)


+{
+   ctx->Light._ClampVertexColor = _mesa_get_clamp_vertex_color(ctx);
+}
+


_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to