diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/renderer_opengl/gl_texture_cache.cpp | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/src/video_core/renderer_opengl/gl_texture_cache.cpp b/src/video_core/renderer_opengl/gl_texture_cache.cpp index 5d14bfc97..8b86136e0 100644 --- a/src/video_core/renderer_opengl/gl_texture_cache.cpp +++ b/src/video_core/renderer_opengl/gl_texture_cache.cpp | |||
| @@ -939,17 +939,21 @@ bool Image::Scale(bool scale_src, bool scale_dst) { | |||
| 939 | const auto& draw_fbo = runtime->rescale_draw_fbo; | 939 | const auto& draw_fbo = runtime->rescale_draw_fbo; |
| 940 | glBindFramebuffer(GL_DRAW_FRAMEBUFFER, draw_fbo.handle); | 940 | glBindFramebuffer(GL_DRAW_FRAMEBUFFER, draw_fbo.handle); |
| 941 | glBindFramebuffer(GL_READ_FRAMEBUFFER, read_fbo.handle); | 941 | glBindFramebuffer(GL_READ_FRAMEBUFFER, read_fbo.handle); |
| 942 | for (s32 level = 0; level < info.resources.levels; ++level) { | 942 | for (s32 layer = 0; layer < info.resources.layers; ++layer) { |
| 943 | const u32 src_level_width = std::max(1u, src_width >> level); | 943 | for (s32 level = 0; level < info.resources.levels; ++level) { |
| 944 | const u32 src_level_height = std::max(1u, src_height >> level); | 944 | const u32 src_level_width = std::max(1u, src_width >> level); |
| 945 | const u32 dst_level_width = std::max(1u, dst_width >> level); | 945 | const u32 src_level_height = std::max(1u, src_height >> level); |
| 946 | const u32 dst_level_height = std::max(1u, dst_height >> level); | 946 | const u32 dst_level_width = std::max(1u, dst_width >> level); |
| 947 | 947 | const u32 dst_level_height = std::max(1u, dst_height >> level); | |
| 948 | glNamedFramebufferTexture(read_fbo.handle, attachment, texture.handle, level); | 948 | |
| 949 | glNamedFramebufferTexture(draw_fbo.handle, attachment, dst_texture.handle, level); | 949 | glNamedFramebufferTextureLayer(read_fbo.handle, attachment, texture.handle, level, |
| 950 | glBlitNamedFramebuffer(read_fbo.handle, draw_fbo.handle, 0, 0, src_level_width, | 950 | layer); |
| 951 | src_level_height, 0, 0, dst_level_width, dst_level_height, mask, | 951 | glNamedFramebufferTextureLayer(draw_fbo.handle, attachment, dst_texture.handle, level, |
| 952 | filter); | 952 | layer); |
| 953 | glBlitNamedFramebuffer(read_fbo.handle, draw_fbo.handle, 0, 0, src_level_width, | ||
| 954 | src_level_height, 0, 0, dst_level_width, dst_level_height, mask, | ||
| 955 | filter); | ||
| 956 | } | ||
| 953 | } | 957 | } |
| 954 | texture = std::move(dst_texture); | 958 | texture = std::move(dst_texture); |
| 955 | 959 | ||