From 9d4f67600b0a8f4b37eb2ed45b194e153669d11a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Thu, 28 Mar 2013 02:48:17 +0100 Subject: [PATCH] mesa: move updating clamp control derived state out of mesa_update_state_locked It has 2 dependencies: glClampColor and the framebuffer, we might just as well do the update where those two are changed. v2: cosmetic changes from Brian's email Reviewed-by: Brian Paul --- src/mesa/main/blend.c | 30 ++++++++++++++++++++++++++++++ src/mesa/main/blend.h | 6 ++++++ src/mesa/main/framebuffer.c | 4 ++++ src/mesa/main/state.c | 36 ------------------------------------ 4 files changed, 40 insertions(+), 36 deletions(-) diff --git a/src/mesa/main/blend.c b/src/mesa/main/blend.c index 15b0dc759cd..906ff3efdfb 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); @@ -814,6 +816,34 @@ _mesa_get_clamp_read_color(const struct gl_context *ctx) return get_clamp_color(ctx->ReadBuffer, ctx->Color.ClampReadColor); } +/** + * Update the ctx->Color._ClampFragmentColor field + */ +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) +{ + ctx->Light._ClampVertexColor = _mesa_get_clamp_vertex_color(ctx); +} + /**********************************************************************/ /** \name Initialization */ diff --git a/src/mesa/main/blend.h b/src/mesa/main/blend.h index 694fc5af385..621311d55a8 100644 --- a/src/mesa/main/blend.h +++ b/src/mesa/main/blend.h @@ -108,6 +108,12 @@ _mesa_get_clamp_vertex_color(const struct gl_context *ctx); extern GLboolean _mesa_get_clamp_read_color(const struct gl_context *ctx); +extern void +_mesa_update_clamp_fragment_color(struct gl_context *ctx); + +extern void +_mesa_update_clamp_vertex_color(struct gl_context *ctx); + extern void _mesa_init_color( struct gl_context * ctx ); diff --git a/src/mesa/main/framebuffer.c b/src/mesa/main/framebuffer.c index 757c4b055d1..6c697743146 100644 --- a/src/mesa/main/framebuffer.c +++ b/src/mesa/main/framebuffer.c @@ -32,6 +32,7 @@ #include "glheader.h" #include "imports.h" +#include "blend.h" #include "buffers.h" #include "context.h" #include "enums.h" @@ -742,6 +743,9 @@ _mesa_update_framebuffer(struct gl_context *ctx) update_framebuffer(ctx, drawFb); if (readFb != drawFb) update_framebuffer(ctx, readFb); + + _mesa_update_clamp_vertex_color(ctx); + _mesa_update_clamp_fragment_color(ctx); } diff --git a/src/mesa/main/state.c b/src/mesa/main/state.c index 73c5a1c263f..251c1aea934 100644 --- a/src/mesa/main/state.c +++ b/src/mesa/main/state.c @@ -308,36 +308,6 @@ update_multisample(struct gl_context *ctx) } -/** - * Update the ctx->Color._ClampFragmentColor field - */ -static void -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 - */ -static void -update_clamp_vertex_color(struct gl_context *ctx) -{ - ctx->Light._ClampVertexColor = _mesa_get_clamp_vertex_color(ctx); -} - - /** * Update the ctx->VertexProgram._TwoSideEnabled flag. */ @@ -497,9 +467,6 @@ _mesa_update_state_locked( struct gl_context *ctx ) if (new_state & (_NEW_LIGHT | _NEW_PROGRAM)) update_twoside( ctx ); - if (new_state & (_NEW_LIGHT | _NEW_BUFFERS)) - update_clamp_vertex_color(ctx); - if (new_state & (_NEW_STENCIL | _NEW_BUFFERS)) _mesa_update_stencil( ctx ); @@ -515,9 +482,6 @@ _mesa_update_state_locked( struct gl_context *ctx ) if (new_state & (_NEW_MULTISAMPLE | _NEW_BUFFERS)) update_multisample( ctx ); - if(new_state & (_NEW_FRAG_CLAMP | _NEW_BUFFERS)) - update_clamp_fragment_color(ctx); - #if 0 if (new_state & (_NEW_POINT | _NEW_LINE | _NEW_POLYGON | _NEW_LIGHT | _NEW_STENCIL | _MESA_NEW_SEPARATE_SPECULAR)) -- 2.30.2