Skip to content

Commit

Permalink
Fix stencil shadows in mirrors
Browse files Browse the repository at this point in the history
GL_Cull already handles if the view is a mirror or not. By also handling
it in RB_DoShadowTessEnd it renders the wrong side of the shadow
geometry. This is fixed by simply removing the mirror handling in
RB_DoShadowTessEnd.
  • Loading branch information
SomaZ committed Oct 25, 2019
1 parent e8b5c13 commit 9f27132
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 44 deletions.
28 changes: 6 additions & 22 deletions code/rd-vanilla/tr_shadows.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -350,31 +350,15 @@ void RB_DoShadowTessEnd( vec3_t lightPos )
qglDepthFunc(GL_LESS);

//now using the Carmack Reverse<tm> -rww
if ( backEnd.viewParms.isMirror ) {
//qglCullFace( GL_BACK );
GL_Cull(CT_BACK_SIDED);
qglStencilOp( GL_KEEP, GL_INCR, GL_KEEP );

R_RenderShadowEdges();

//qglCullFace( GL_FRONT );
GL_Cull(CT_FRONT_SIDED);
qglStencilOp( GL_KEEP, GL_DECR, GL_KEEP );

R_RenderShadowEdges();
} else {
//qglCullFace( GL_FRONT );
GL_Cull(CT_FRONT_SIDED);
qglStencilOp( GL_KEEP, GL_INCR, GL_KEEP );
GL_Cull(CT_FRONT_SIDED);
qglStencilOp( GL_KEEP, GL_INCR, GL_KEEP );

R_RenderShadowEdges();
R_RenderShadowEdges();

//qglCullFace( GL_BACK );
GL_Cull(CT_BACK_SIDED);
qglStencilOp( GL_KEEP, GL_DECR, GL_KEEP );
GL_Cull(CT_BACK_SIDED);
qglStencilOp( GL_KEEP, GL_DECR, GL_KEEP );

R_RenderShadowEdges();
}
R_RenderShadowEdges();

qglDepthFunc(GL_LEQUAL);
#else
Expand Down
28 changes: 6 additions & 22 deletions codemp/rd-vanilla/tr_shadows.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -350,31 +350,15 @@ void RB_DoShadowTessEnd( vec3_t lightPos )
qglDepthFunc(GL_LESS);

//now using the Carmack Reverse<tm> -rww
if ( backEnd.viewParms.isMirror ) {
//qglCullFace( GL_BACK );
GL_Cull(CT_BACK_SIDED);
qglStencilOp( GL_KEEP, GL_INCR, GL_KEEP );

R_RenderShadowEdges();

//qglCullFace( GL_FRONT );
GL_Cull(CT_FRONT_SIDED);
qglStencilOp( GL_KEEP, GL_DECR, GL_KEEP );

R_RenderShadowEdges();
} else {
//qglCullFace( GL_FRONT );
GL_Cull(CT_FRONT_SIDED);
qglStencilOp( GL_KEEP, GL_INCR, GL_KEEP );
GL_Cull(CT_FRONT_SIDED);
qglStencilOp( GL_KEEP, GL_INCR, GL_KEEP );

R_RenderShadowEdges();
R_RenderShadowEdges();

//qglCullFace( GL_BACK );
GL_Cull(CT_BACK_SIDED);
qglStencilOp( GL_KEEP, GL_DECR, GL_KEEP );
GL_Cull(CT_BACK_SIDED);
qglStencilOp( GL_KEEP, GL_DECR, GL_KEEP );

R_RenderShadowEdges();
}
R_RenderShadowEdges();

qglDepthFunc(GL_LEQUAL);
#else
Expand Down

0 comments on commit 9f27132

Please sign in to comment.