From b4cc743608ea6ff12fbb6bbe0ca70b8046641a1d Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Thu, 27 Jul 2023 15:34:21 +0300 Subject: [PATCH] [GL] Add stencil enable to state tracker --- include/renderer_gl/gl_state.hpp | 16 ++++++++++++++++ src/core/renderer_gl/gl_state.cpp | 6 ++++++ src/core/renderer_gl/renderer_gl.cpp | 6 +++--- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/include/renderer_gl/gl_state.hpp b/include/renderer_gl/gl_state.hpp index 82531c7a..78e8a386 100644 --- a/include/renderer_gl/gl_state.hpp +++ b/include/renderer_gl/gl_state.hpp @@ -21,6 +21,7 @@ struct GLStateManager { bool blendEnabled; bool depthEnabled; bool scissorEnabled; + bool stencilEnabled; // Colour/depth masks bool redMask, greenMask, blueMask, alphaMask; @@ -40,6 +41,7 @@ struct GLStateManager { void resetVBO(); void resetProgram(); void resetScissor(); + void resetStencil(); void enableDepth() { if (!depthEnabled) { @@ -83,6 +85,20 @@ struct GLStateManager { } } + void enableStencil() { + if (!stencilEnabled) { + stencilEnabled = true; + OpenGL::enableStencil(); + } + } + + void disableStencil() { + if (stencilEnabled) { + stencilEnabled = false; + OpenGL::disableStencil(); + } + } + void bindVAO(GLuint handle) { if (boundVAO != handle) { boundVAO = handle; diff --git a/src/core/renderer_gl/gl_state.cpp b/src/core/renderer_gl/gl_state.cpp index 691eb7b6..e965f944 100644 --- a/src/core/renderer_gl/gl_state.cpp +++ b/src/core/renderer_gl/gl_state.cpp @@ -26,6 +26,11 @@ void GLStateManager::resetScissor() { OpenGL::setScissor(0, 0, 0, 0); } +void GLStateManager::resetStencil() { + stencilEnabled = false; + OpenGL::disableStencil(); +} + void GLStateManager::resetVAO() { boundVAO = 0; glBindVertexArray(0); @@ -50,4 +55,5 @@ void GLStateManager::reset() { resetVBO(); resetProgram(); resetScissor(); + resetStencil(); } \ No newline at end of file diff --git a/src/core/renderer_gl/renderer_gl.cpp b/src/core/renderer_gl/renderer_gl.cpp index c1c79b2f..fc25ef5d 100644 --- a/src/core/renderer_gl/renderer_gl.cpp +++ b/src/core/renderer_gl/renderer_gl.cpp @@ -207,7 +207,7 @@ void RendererGL::setupBlending() { void RendererGL::setupStencilTest(bool stencilEnable) { if (!stencilEnable) { - OpenGL::disableStencil(); + gl.disableStencil(); return; } @@ -221,7 +221,7 @@ void RendererGL::setupStencilTest(bool stencilEnable) { GL_GREATER, GL_GEQUAL }; - OpenGL::enableStencil(); + gl.enableStencil(); const u32 stencilConfig = regs[PICA::InternalRegs::StencilTest]; const u32 stencilFunc = getBits<4, 3>(stencilConfig); @@ -583,7 +583,7 @@ void RendererGL::displayTransfer(u32 inputAddr, u32 outputAddr, u32 inputSize, u gl.disableBlend(); gl.disableDepth(); gl.disableScissor(); - OpenGL::disableStencil(); + gl.disableStencil(); gl.setColourMask(true, true, true, true); gl.useProgram(displayProgram); gl.bindVAO(dummyVAO);