From 1ba9e7a45ec372f177736f7fecb3f3b0a9e5404b Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Wed, 29 Oct 2014 01:32:50 -0500 Subject: [PATCH] Always use GL_Cull to change cull state Manually changing cull state can cause later GL_Cull calls to not change the cull state. --- code/renderergl1/tr_backend.c | 2 +- code/renderergl1/tr_shadows.c | 28 +++++++--------------------- code/renderergl2/tr_backend.c | 2 +- code/renderergl2/tr_fbo.c | 2 +- code/renderergl2/tr_shadows.c | 28 +++++++--------------------- 5 files changed, 17 insertions(+), 45 deletions(-) diff --git a/code/renderergl1/tr_backend.c b/code/renderergl1/tr_backend.c index 0a3fe036..788f7801 100644 --- a/code/renderergl1/tr_backend.c +++ b/code/renderergl1/tr_backend.c @@ -710,7 +710,7 @@ void RB_SetGL2D (void) { GLS_SRCBLEND_SRC_ALPHA | GLS_DSTBLEND_ONE_MINUS_SRC_ALPHA ); - qglDisable( GL_CULL_FACE ); + GL_Cull( CT_TWO_SIDED ); qglDisable( GL_CLIP_PLANE0 ); // set time for 2D shaders diff --git a/code/renderergl1/tr_shadows.c b/code/renderergl1/tr_shadows.c index f412b00d..3582ae44 100644 --- a/code/renderergl1/tr_shadows.c +++ b/code/renderergl1/tr_shadows.c @@ -211,7 +211,6 @@ void RB_ShadowTessEnd( void ) { // draw the silhouette edges GL_Bind( tr.whiteImage ); - qglEnable( GL_CULL_FACE ); GL_State( GLS_SRCBLEND_ONE | GLS_DSTBLEND_ZERO ); qglColor3f( 0.2f, 0.2f, 0.2f ); @@ -222,28 +221,15 @@ void RB_ShadowTessEnd( void ) { qglEnable( GL_STENCIL_TEST ); qglStencilFunc( GL_ALWAYS, 1, 255 ); - // mirrors have the culling order reversed - if ( backEnd.viewParms.isMirror ) { - qglCullFace( GL_FRONT ); - qglStencilOp( GL_KEEP, GL_KEEP, GL_INCR ); + GL_Cull( CT_BACK_SIDED ); + qglStencilOp( GL_KEEP, GL_KEEP, GL_INCR ); - R_RenderShadowEdges(); + R_RenderShadowEdges(); - qglCullFace( GL_BACK ); - qglStencilOp( GL_KEEP, GL_KEEP, GL_DECR ); + GL_Cull( CT_FRONT_SIDED ); + qglStencilOp( GL_KEEP, GL_KEEP, GL_DECR ); - R_RenderShadowEdges(); - } else { - qglCullFace( GL_BACK ); - qglStencilOp( GL_KEEP, GL_KEEP, GL_INCR ); - - R_RenderShadowEdges(); - - qglCullFace( GL_FRONT ); - qglStencilOp( GL_KEEP, GL_KEEP, GL_DECR ); - - R_RenderShadowEdges(); - } + R_RenderShadowEdges(); // reenable writing to the color buffer @@ -272,7 +258,7 @@ void RB_ShadowFinish( void ) { qglStencilFunc( GL_NOTEQUAL, 0, 255 ); qglDisable (GL_CLIP_PLANE0); - qglDisable (GL_CULL_FACE); + GL_Cull( CT_TWO_SIDED ); GL_Bind( tr.whiteImage ); diff --git a/code/renderergl2/tr_backend.c b/code/renderergl2/tr_backend.c index 0f21fc13..bb5e57e7 100644 --- a/code/renderergl2/tr_backend.c +++ b/code/renderergl2/tr_backend.c @@ -818,7 +818,7 @@ void RB_SetGL2D (void) { GLS_SRCBLEND_SRC_ALPHA | GLS_DSTBLEND_ONE_MINUS_SRC_ALPHA ); - qglDisable( GL_CULL_FACE ); + GL_Cull( CT_TWO_SIDED ); qglDisable( GL_CLIP_PLANE0 ); // set time for 2D shaders diff --git a/code/renderergl2/tr_fbo.c b/code/renderergl2/tr_fbo.c index ba145e63..c5c641f5 100644 --- a/code/renderergl2/tr_fbo.c +++ b/code/renderergl2/tr_fbo.c @@ -748,7 +748,7 @@ void FBO_BlitFromTexture(struct image_s *src, ivec4_t inSrcBox, vec2_t inSrcTexS Mat4Ortho(0, width, height, 0, 0, 1, projection); - qglDisable( GL_CULL_FACE ); + GL_Cull( CT_TWO_SIDED ); GL_BindToTMU(src, TB_COLORMAP); diff --git a/code/renderergl2/tr_shadows.c b/code/renderergl2/tr_shadows.c index f412b00d..3582ae44 100644 --- a/code/renderergl2/tr_shadows.c +++ b/code/renderergl2/tr_shadows.c @@ -211,7 +211,6 @@ void RB_ShadowTessEnd( void ) { // draw the silhouette edges GL_Bind( tr.whiteImage ); - qglEnable( GL_CULL_FACE ); GL_State( GLS_SRCBLEND_ONE | GLS_DSTBLEND_ZERO ); qglColor3f( 0.2f, 0.2f, 0.2f ); @@ -222,28 +221,15 @@ void RB_ShadowTessEnd( void ) { qglEnable( GL_STENCIL_TEST ); qglStencilFunc( GL_ALWAYS, 1, 255 ); - // mirrors have the culling order reversed - if ( backEnd.viewParms.isMirror ) { - qglCullFace( GL_FRONT ); - qglStencilOp( GL_KEEP, GL_KEEP, GL_INCR ); + GL_Cull( CT_BACK_SIDED ); + qglStencilOp( GL_KEEP, GL_KEEP, GL_INCR ); - R_RenderShadowEdges(); + R_RenderShadowEdges(); - qglCullFace( GL_BACK ); - qglStencilOp( GL_KEEP, GL_KEEP, GL_DECR ); + GL_Cull( CT_FRONT_SIDED ); + qglStencilOp( GL_KEEP, GL_KEEP, GL_DECR ); - R_RenderShadowEdges(); - } else { - qglCullFace( GL_BACK ); - qglStencilOp( GL_KEEP, GL_KEEP, GL_INCR ); - - R_RenderShadowEdges(); - - qglCullFace( GL_FRONT ); - qglStencilOp( GL_KEEP, GL_KEEP, GL_DECR ); - - R_RenderShadowEdges(); - } + R_RenderShadowEdges(); // reenable writing to the color buffer @@ -272,7 +258,7 @@ void RB_ShadowFinish( void ) { qglStencilFunc( GL_NOTEQUAL, 0, 255 ); qglDisable (GL_CLIP_PLANE0); - qglDisable (GL_CULL_FACE); + GL_Cull( CT_TWO_SIDED ); GL_Bind( tr.whiteImage );