summaryrefslogtreecommitdiffstats
path: root/src/video_core/renderer_opengl/gl_rasterizer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/video_core/renderer_opengl/gl_rasterizer.cpp')
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer.cpp18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp
index 8e1171161..08c4df5dc 100644
--- a/src/video_core/renderer_opengl/gl_rasterizer.cpp
+++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp
@@ -300,6 +300,20 @@ bool RasterizerOpenGL::AccelerateDrawBatch(bool is_indexed) {
void RasterizerOpenGL::Clear() {
const auto& regs = Core::System().GetInstance().GPU().Maxwell3D().regs;
+ GLbitfield clear_mask = 0;
+ if (regs.clear_buffers.R && regs.clear_buffers.G && regs.clear_buffers.B &&
+ regs.clear_buffers.A) {
+ clear_mask |= GL_COLOR_BUFFER_BIT;
+ }
+ if (regs.clear_buffers.Z)
+ clear_mask |= GL_DEPTH_BUFFER_BIT;
+
+ if (clear_mask == 0)
+ return;
+
+ // Sync the depth test state before configuring the framebuffer surfaces.
+ SyncDepthTestState();
+
// TODO(bunnei): Implement these
const bool has_stencil = false;
const bool using_color_fb = true;
@@ -353,10 +367,6 @@ void RasterizerOpenGL::Clear() {
regs.clear_color[3]);
glClearDepth(regs.clear_depth);
- GLbitfield clear_mask = GL_COLOR_BUFFER_BIT;
- if (regs.clear_buffers.Z)
- clear_mask |= GL_DEPTH_BUFFER_BIT;
-
glClear(clear_mask);
// Mark framebuffer surfaces as dirty