diff options
| author | ReinUsesLisp <reinuseslisp@airmail.cc> | 2019-12-29 22:56:21 -0300 |
|---|---|---|
| committer | ReinUsesLisp <reinuseslisp@airmail.cc> | 2020-02-28 17:56:42 -0300 |
| commit | 40a2c57df5459ff965f1ea507bbca0e36ab17c94 (patch) | |
| tree | 264b74193808efb987305fae4743109d2db33eb4 /src/video_core/renderer_opengl/gl_rasterizer.cpp | |
| parent | b910a83a47a2b566a760dbd20ff5902f303044d4 (diff) | |
gl_state_tracker: Implement depth dirty flags
Diffstat (limited to 'src/video_core/renderer_opengl/gl_rasterizer.cpp')
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.cpp | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index 6d87b4e29..d747e29ad 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp @@ -1024,13 +1024,23 @@ void RasterizerOpenGL::SyncPrimitiveRestart() { } void RasterizerOpenGL::SyncDepthTestState() { - const auto& regs = system.GPU().Maxwell3D().regs; + auto& gpu = system.GPU().Maxwell3D(); + auto& flags = gpu.dirty.flags; - glDepthMask(regs.depth_write_enabled ? GL_TRUE : GL_FALSE); + const auto& regs = gpu.regs; + if (flags[Dirty::DepthMask]) { + flags[Dirty::DepthMask] = false; + glDepthMask(regs.depth_write_enabled ? GL_TRUE : GL_FALSE); + } - oglEnable(GL_DEPTH_TEST, regs.depth_test_enable); - if (regs.depth_test_enable) { - glDepthFunc(MaxwellToGL::ComparisonOp(regs.depth_test_func)); + if (flags[Dirty::DepthTest]) { + flags[Dirty::DepthTest] = false; + if (regs.depth_test_enable) { + glEnable(GL_DEPTH_TEST); + glDepthFunc(MaxwellToGL::ComparisonOp(regs.depth_test_func)); + } else { + glDisable(GL_DEPTH_TEST); + } } } |
