diff options
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.cpp | 25 | 
1 files changed, 18 insertions, 7 deletions
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index 7b0cd1b66..7e09e4712 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp @@ -237,13 +237,24 @@ void RasterizerOpenGL::DrawTriangles() {      glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,                             color_surface != nullptr ? color_surface->texture.handle : 0, 0); -    glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, -                           depth_surface != nullptr ? depth_surface->texture.handle : 0, 0); -    bool has_stencil = -        regs.framebuffer.framebuffer.depth_format == Pica::FramebufferRegs::DepthFormat::D24S8; -    glFramebufferTexture2D( -        GL_DRAW_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_TEXTURE_2D, -        (has_stencil && depth_surface != nullptr) ? depth_surface->texture.handle : 0, 0); +    if (depth_surface != nullptr) { +        if (regs.framebuffer.framebuffer.depth_format == +            Pica::FramebufferRegs::DepthFormat::D24S8) { +            // attach both depth and stencil +            glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D, +                                   depth_surface->texture.handle, 0); +        } else { +            // attach depth +            glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, +                                   depth_surface->texture.handle, 0); +            // clear stencil attachment +            glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_TEXTURE_2D, 0, 0); +        } +    } else { +        // clear both depth and stencil attachment +        glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D, 0, +                               0); +    }      // Sync the viewport      // These registers hold half-width and half-height, so must be multiplied by 2  | 
