mesa: add ctx->Stencil._Enabled field
authorBrian Paul <brianp@vmware.com>
Mon, 2 Mar 2009 18:46:49 +0000 (11:46 -0700)
committerBrian Paul <brianp@vmware.com>
Mon, 2 Mar 2009 18:49:37 +0000 (11:49 -0700)
Only true if stenciling is enabled, and there's a stencil buffer.

src/mesa/main/mtypes.h
src/mesa/main/state.c
src/mesa/main/stencil.c

index 1e42de85b8f1c610a11eb13196a39d94cc1161c4..f906de8357e7d4374a1eef8309b39fb3d3cfb098 100644 (file)
@@ -1012,6 +1012,7 @@ struct gl_stencil_attrib
    GLboolean Enabled;          /**< Enabled flag */
    GLboolean TestTwoSide;      /**< GL_EXT_stencil_two_side */
    GLubyte ActiveFace;         /**< GL_EXT_stencil_two_side (0 or 2) */
+   GLboolean _Enabled;          /**< Enabled and stencil buffer present */
    GLboolean _TestTwoSide;
    GLubyte _BackFace;           /**< Current back stencil state (1 or 2) */
    GLenum Function[3];         /**< Stencil function */
index 0a39279bff326bffa116e60bfcfad99273ff33f5..9ea932ea9621e68fb1d67de24175738db577d4f6 100644 (file)
@@ -490,7 +490,7 @@ _mesa_update_state_locked( GLcontext *ctx )
    if (new_state & _NEW_LIGHT)
       _mesa_update_lighting( ctx );
 
-   if (new_state & _NEW_STENCIL)
+   if (new_state & (_NEW_STENCIL | _NEW_BUFFERS))
       _mesa_update_stencil( ctx );
 
 #if FEATURE_pixel_transfer
index e4a255d0a7ef0817ea09830ed428397002b56e73..15c98e2015668db089dfaea90fb3697c8ed0474f 100644 (file)
@@ -536,7 +536,11 @@ _mesa_update_stencil(GLcontext *ctx)
 {
    const GLint face = ctx->Stencil._BackFace;
 
-   ctx->Stencil._TestTwoSide =
+   ctx->Stencil._Enabled = (ctx->Stencil.Enabled &&
+                            ctx->DrawBuffer->Visual.stencilBits > 0);
+
+    ctx->Stencil._TestTwoSide =
+       ctx->Stencil._Enabled &&
        (ctx->Stencil.Function[0] != ctx->Stencil.Function[face] ||
        ctx->Stencil.FailFunc[0] != ctx->Stencil.FailFunc[face] ||
        ctx->Stencil.ZPassFunc[0] != ctx->Stencil.ZPassFunc[face] ||