From 2e905455b152129e4efc0e95f104bf65dfdfdf7d Mon Sep 17 00:00:00 2001 From: Stenzek Date: Thu, 4 Oct 2018 00:43:48 +1000 Subject: [PATCH] OGL: Disable scissor test when calling glBlitFramebuffer() glBlitFramebuffer() does not bypass the scissor test, which meant that part of texture copies (e.g. XFB) could have been clipped when running under OpenGL ES, as glCopyImageSubData() is not supported. --- Source/Core/VideoBackends/OGL/OGLTexture.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Source/Core/VideoBackends/OGL/OGLTexture.cpp b/Source/Core/VideoBackends/OGL/OGLTexture.cpp index 5399a11d04a8..1efb650eebcc 100644 --- a/Source/Core/VideoBackends/OGL/OGLTexture.cpp +++ b/Source/Core/VideoBackends/OGL/OGLTexture.cpp @@ -234,6 +234,9 @@ void OGLTexture::BlitFramebuffer(OGLTexture* srcentry, const MathUtil::Rectangle dst_layer); } + // glBlitFramebuffer is still affected by the scissor test, which is enabled by default. + glDisable(GL_SCISSOR_TEST); + glBlitFramebuffer(src_rect.left, src_rect.top, src_rect.right, src_rect.bottom, dst_rect.left, dst_rect.top, dst_rect.right, dst_rect.bottom, GL_COLOR_BUFFER_BIT, GL_NEAREST); @@ -252,6 +255,9 @@ void OGLTexture::BlitFramebuffer(OGLTexture* srcentry, const MathUtil::Rectangle 0); } + // The default state for the scissor test is enabled. We don't need to do a full state + // restore, as the framebuffer and scissor test are the only things we changed. + glEnable(GL_SCISSOR_TEST); FramebufferManager::SetFramebuffer(0); }