|
|
@ -322,9 +322,6 @@ std::pair<Surface, Surface> RasterizerOpenGL::ConfigureFramebuffers(bool using_c |
|
|
bool using_depth_fb) { |
|
|
bool using_depth_fb) { |
|
|
const auto& regs = Core::System().GetInstance().GPU().Maxwell3D().regs; |
|
|
const auto& regs = Core::System().GetInstance().GPU().Maxwell3D().regs; |
|
|
|
|
|
|
|
|
// Sync the depth test state before configuring the framebuffer surfaces.
|
|
|
|
|
|
SyncDepthTestState(); |
|
|
|
|
|
|
|
|
|
|
|
// TODO(bunnei): Implement this
|
|
|
// TODO(bunnei): Implement this
|
|
|
const bool has_stencil = false; |
|
|
const bool has_stencil = false; |
|
|
|
|
|
|
|
|
@ -389,6 +386,13 @@ void RasterizerOpenGL::Clear() { |
|
|
if (regs.clear_buffers.Z) { |
|
|
if (regs.clear_buffers.Z) { |
|
|
clear_mask |= GL_DEPTH_BUFFER_BIT; |
|
|
clear_mask |= GL_DEPTH_BUFFER_BIT; |
|
|
use_depth_fb = true; |
|
|
use_depth_fb = true; |
|
|
|
|
|
|
|
|
|
|
|
// Always enable the depth write when clearing the depth buffer. The depth write mask is
|
|
|
|
|
|
// ignored when clearing the buffer in the Switch, but OpenGL obeys it so we set it to true.
|
|
|
|
|
|
state.depth.test_enabled = true; |
|
|
|
|
|
state.depth.write_mask = GL_TRUE; |
|
|
|
|
|
state.depth.test_func = GL_ALWAYS; |
|
|
|
|
|
state.Apply(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if (clear_mask == 0) |
|
|
if (clear_mask == 0) |
|
|
@ -423,6 +427,7 @@ void RasterizerOpenGL::DrawArrays() { |
|
|
auto [dirty_color_surface, dirty_depth_surface] = |
|
|
auto [dirty_color_surface, dirty_depth_surface] = |
|
|
ConfigureFramebuffers(true, regs.zeta.Address() != 0); |
|
|
ConfigureFramebuffers(true, regs.zeta.Address() != 0); |
|
|
|
|
|
|
|
|
|
|
|
SyncDepthTestState(); |
|
|
SyncBlendState(); |
|
|
SyncBlendState(); |
|
|
SyncCullMode(); |
|
|
SyncCullMode(); |
|
|
|
|
|
|
|
|
|