Use eye->TearDown method to restore glColorMask.

Restore assert in i_system.cpp that was interfering with my debugging.
Restore scoped colorMask-ing in gl_portal.cpp and gl_drawinfo.cpp.
This commit is contained in:
Christopher Bruns 2015-10-30 21:48:42 -04:00
parent b82d611936
commit 89328e685c
4 changed files with 76 additions and 76 deletions

View file

@ -1014,8 +1014,7 @@ void FDrawInfo::SetupFloodStencil(wallseg * ws)
glStencilOp(GL_KEEP, GL_KEEP, GL_INCR); // increment stencil of valid pixels glStencilOp(GL_KEEP, GL_KEEP, GL_INCR); // increment stencil of valid pixels
{ {
// Use revertible color mask, to avoid stomping on anaglyph 3D state // Use revertible color mask, to avoid stomping on anaglyph 3D state
// ScopedColorMask colorMask(0, 0, 0, 0); ScopedColorMask colorMask(0, 0, 0, 0); // glColorMask(0, 0, 0, 0); // don't write to the graphics buffer
glColorMask(0, 0, 0, 0); // don't write to the graphics buffer
gl_RenderState.EnableTexture(false); gl_RenderState.EnableTexture(false);
gl_RenderState.ResetColor(); gl_RenderState.ResetColor();
glEnable(GL_DEPTH_TEST); glEnable(GL_DEPTH_TEST);
@ -1037,7 +1036,7 @@ void FDrawInfo::SetupFloodStencil(wallseg * ws)
glStencilFunc(GL_EQUAL, recursion + 1, ~0); // draw sky into stencil glStencilFunc(GL_EQUAL, recursion + 1, ~0); // draw sky into stencil
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); // this stage doesn't modify the stencil glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); // this stage doesn't modify the stencil
} glColorMask(1, 1, 1, 1); // don't write to the graphics buffer } // glColorMask(1, 1, 1, 1); // don't write to the graphics buffer
gl_RenderState.EnableTexture(true); gl_RenderState.EnableTexture(true);
glDisable(GL_DEPTH_TEST); glDisable(GL_DEPTH_TEST);
glDepthMask(false); glDepthMask(false);
@ -1051,8 +1050,7 @@ void FDrawInfo::ClearFloodStencil(wallseg * ws)
gl_RenderState.EnableTexture(false); gl_RenderState.EnableTexture(false);
{ {
// Use revertible color mask, to avoid stomping on anaglyph 3D state // Use revertible color mask, to avoid stomping on anaglyph 3D state
// ScopedColorMask colorMask(0, 0, 0, 0); ScopedColorMask colorMask(0, 0, 0, 0); // glColorMask(0,0,0,0); // don't write to the graphics buffer
glColorMask(0,0,0,0); // don't write to the graphics buffer
gl_RenderState.ResetColor(); gl_RenderState.ResetColor();
gl_RenderState.Apply(); gl_RenderState.Apply();
@ -1071,7 +1069,7 @@ void FDrawInfo::ClearFloodStencil(wallseg * ws)
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
glStencilFunc(GL_EQUAL, recursion, ~0); glStencilFunc(GL_EQUAL, recursion, ~0);
gl_RenderState.EnableTexture(true); gl_RenderState.EnableTexture(true);
} glColorMask(1, 1, 1, 1); } // glColorMask(1, 1, 1, 1);
glEnable(GL_DEPTH_TEST); glEnable(GL_DEPTH_TEST);
glDepthMask(true); glDepthMask(true);
} }

View file

@ -198,7 +198,8 @@ bool GLPortal::Start(bool usestencil, bool doquery)
// Create stencil // Create stencil
glStencilFunc(GL_EQUAL,recursion,~0); // create stencil glStencilFunc(GL_EQUAL,recursion,~0); // create stencil
glStencilOp(GL_KEEP, GL_KEEP, GL_INCR); // increment stencil of valid pixels glStencilOp(GL_KEEP, GL_KEEP, GL_INCR); // increment stencil of valid pixels
glColorMask(0,0,0,0); // don't write to the graphics buffer {
ScopedColorMask colorMask(0, 0, 0, 0); // glColorMask(0,0,0,0); // don't write to the graphics buffer
gl_RenderState.SetEffect(EFF_STENCIL); gl_RenderState.SetEffect(EFF_STENCIL);
gl_RenderState.EnableTexture(false); gl_RenderState.EnableTexture(false);
gl_RenderState.ResetColor(); gl_RenderState.ResetColor();
@ -234,7 +235,7 @@ bool GLPortal::Start(bool usestencil, bool doquery)
// set normal drawing mode // set normal drawing mode
gl_RenderState.EnableTexture(true); gl_RenderState.EnableTexture(true);
glDepthFunc(GL_LESS); glDepthFunc(GL_LESS);
glColorMask(1, 1, 1, 1); // glColorMask(1, 1, 1, 1);
gl_RenderState.SetEffect(EFF_NONE); gl_RenderState.SetEffect(EFF_NONE);
glDepthRange(0, 1); glDepthRange(0, 1);
@ -264,11 +265,12 @@ bool GLPortal::Start(bool usestencil, bool doquery)
glStencilFunc(GL_EQUAL, recursion + 1, ~0); // draw sky into stencil glStencilFunc(GL_EQUAL, recursion + 1, ~0); // draw sky into stencil
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); // this stage doesn't modify the stencil glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); // this stage doesn't modify the stencil
gl_RenderState.EnableTexture(true); gl_RenderState.EnableTexture(true);
glColorMask(1,1,1,1); // glColorMask(1,1,1,1);
gl_RenderState.SetEffect(EFF_NONE); gl_RenderState.SetEffect(EFF_NONE);
glDisable(GL_DEPTH_TEST); glDisable(GL_DEPTH_TEST);
glDepthMask(false); // don't write to Z-buffer! glDepthMask(false); // don't write to Z-buffer!
} }
}
recursion++; recursion++;
@ -373,8 +375,7 @@ void GLPortal::End(bool usestencil)
GLRenderer->SetupView(viewx, viewy, viewz, viewangle, !!(MirrorFlag & 1), !!(PlaneMirrorFlag & 1)); GLRenderer->SetupView(viewx, viewy, viewz, viewangle, !!(MirrorFlag & 1), !!(PlaneMirrorFlag & 1));
{ {
// ScopedColorMask colorMask(0, 0, 0, 0); ScopedColorMask colorMask(0, 0, 0, 0); // glColorMask(0, 0, 0, 0); // no graphics
glColorMask(0, 0, 0, 0); // no graphics
gl_RenderState.SetEffect(EFF_NONE); gl_RenderState.SetEffect(EFF_NONE);
gl_RenderState.ResetColor(); gl_RenderState.ResetColor();
gl_RenderState.EnableTexture(false); gl_RenderState.EnableTexture(false);
@ -403,7 +404,7 @@ void GLPortal::End(bool usestencil)
gl_RenderState.EnableTexture(true); gl_RenderState.EnableTexture(true);
gl_RenderState.SetEffect(EFF_NONE); gl_RenderState.SetEffect(EFF_NONE);
} glColorMask(1, 1, 1, 1); } // glColorMask(1, 1, 1, 1);
recursion--; recursion--;
// restore old stencil op. // restore old stencil op.

View file

@ -840,6 +840,7 @@ sector_t * FGLRenderer::RenderViewpoint (AActor * camera, GL_IRECT * bounds, flo
ProcessScene(toscreen); ProcessScene(toscreen);
EndDrawScene(viewsector); EndDrawScene(viewsector);
(*eye)->TearDown();
} }
stereo3dMode.TearDown(); stereo3dMode.TearDown();

View file

@ -291,7 +291,7 @@ static void I_SelectTimer()
unsigned int I_MSTime() unsigned int I_MSTime()
{ {
// assert(basetime != 0); assert(basetime != 0);
return timeGetTime() - basetime; return timeGetTime() - basetime;
} }