summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2009-07-16 18:41:03 -0700
committerEric Anholt <eric@anholt.net>2009-07-16 19:02:04 -0700
commit9cea84b6b5f96bf3bb42546e49b76024d7126e30 (patch)
tree687e9f7f919ea90b745d7d1e63d4837d8f7f253c
parent99174e7630676307f618c252755a20ba61ad9158 (diff)
texenv: Calculate whether we need to do secondary color on our own.
The _TriangleCaps bit is deprecated, not updated when we require, and is set based on state that hasn't been updated at that point in _mesa_update_state_locked(). Fixes incorrect clear color in glsl/twoside.c with meta_clear_tris.
-rw-r--r--src/mesa/main/state.c2
-rw-r--r--src/mesa/main/texenvprogram.c18
2 files changed, 16 insertions, 4 deletions
diff --git a/src/mesa/main/state.c b/src/mesa/main/state.c
index 9ba131bee5..d8191ab518 100644
--- a/src/mesa/main/state.c
+++ b/src/mesa/main/state.c
@@ -546,7 +546,7 @@ _mesa_update_state_locked( GLcontext *ctx )
/* Determine which state flags effect vertex/fragment program state */
if (ctx->FragmentProgram._MaintainTexEnvProgram) {
- prog_flags |= (_NEW_TEXTURE | _NEW_FOG | _DD_NEW_SEPARATE_SPECULAR |
+ prog_flags |= (_NEW_TEXTURE | _NEW_FOG |
_NEW_ARRAY | _NEW_LIGHT | _NEW_POINT | _NEW_RENDERMODE);
}
if (ctx->VertexProgram._MaintainTnlProgram) {
diff --git a/src/mesa/main/texenvprogram.c b/src/mesa/main/texenvprogram.c
index a3f1246c98..6b090ff399 100644
--- a/src/mesa/main/texenvprogram.c
+++ b/src/mesa/main/texenvprogram.c
@@ -62,6 +62,18 @@ struct texenvprog_cache_item
struct texenvprog_cache_item *next;
};
+static GLboolean
+texenv_doing_secondary_color(GLcontext *ctx)
+{
+ if (ctx->Light.Enabled &&
+ (ctx->Light.Model.ColorControl == GL_SEPARATE_SPECULAR_COLOR))
+ return GL_TRUE;
+
+ if (ctx->Fog.ColorSumEnabled)
+ return GL_TRUE;
+
+ return GL_FALSE;
+}
/**
* Up to nine instructions per tex unit, plus fog, specular color.
@@ -298,7 +310,7 @@ static GLbitfield get_fp_input_mask( GLcontext *ctx )
if (ctx->Light.Enabled) {
fp_inputs |= FRAG_BIT_COL0;
- if (ctx->_TriangleCaps & DD_SEPARATE_SPECULAR)
+ if (texenv_doing_secondary_color(ctx))
fp_inputs |= FRAG_BIT_COL1;
}
@@ -416,8 +428,8 @@ static void make_state_key( GLcontext *ctx, struct state_key *key )
}
}
- /* _DD_NEW_SEPARATE_SPECULAR */
- if (ctx->_TriangleCaps & DD_SEPARATE_SPECULAR) {
+ /* _NEW_LIGHT | _NEW_FOG */
+ if (texenv_doing_secondary_color(ctx)) {
key->separate_specular = 1;
inputs_referenced |= FRAG_BIT_COL1;
}