From 3233fa5dc8780975497dc8ce70d10d0186e50b62 Mon Sep 17 00:00:00 2001 From: ameerj <52414509+ameerj@users.noreply.github.com> Date: Thu, 7 Oct 2021 23:55:40 -0400 Subject: [PATCH] gl_texture_cache: Disable scissor test when scaling textures Fixes a bug on BOTW where some objects were no longer being rendered after blitting --- src/video_core/renderer_opengl/gl_texture_cache.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/video_core/renderer_opengl/gl_texture_cache.cpp b/src/video_core/renderer_opengl/gl_texture_cache.cpp index c68a51ebbe..3dfd13d6a9 100644 --- a/src/video_core/renderer_opengl/gl_texture_cache.cpp +++ b/src/video_core/renderer_opengl/gl_texture_cache.cpp @@ -939,6 +939,11 @@ bool Image::Scale() { dst_info.size.height = scaled_height; upscaled_backup = MakeImage(dst_info, gl_internal_format); } + // TODO (ameerj): Investigate other GL states that affect blitting. + GLboolean scissor_test; + glGetBooleani_v(GL_SCISSOR_TEST, 0, &scissor_test); + glDisablei(GL_SCISSOR_TEST, 0); + const GLuint read_fbo = runtime->rescale_read_fbos[fbo_index].handle; const GLuint draw_fbo = runtime->rescale_draw_fbos[fbo_index].handle; for (s32 layer = 0; layer < info.resources.layers; ++layer) { @@ -955,6 +960,9 @@ bool Image::Scale() { 0, dst_level_width, dst_level_height, mask, filter); } } + if (scissor_test != GL_FALSE) { + glEnablei(GL_SCISSOR_TEST, 0); + } current_texture = upscaled_backup.handle; return true; }