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 <brianp@vmware.com>
This commit is contained in:
Marek Olšák 2013-03-28 02:48:17 +01:00
parent 755648c37f
commit 9d4f67600b
4 changed files with 40 additions and 36 deletions

View File

@ -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 */

View File

@ -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 );

View File

@ -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);
}

View File

@ -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))