From 4e053220a826676d0765ef9eee313a4b13e3cd0e Mon Sep 17 00:00:00 2001 From: James Rowe Date: Sat, 16 Dec 2017 10:42:06 -0700 Subject: [PATCH] When downloading from a surface into gl_buffer, ingore any x/y offsets in rect and use 0,0 as the origin --- src/video_core/renderer_opengl/gl_rasterizer_cache.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp index 6b52d2798..37c2abe3d 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp @@ -780,6 +780,7 @@ void CachedSurface::UploadGLTexture(const MathUtil::Rectangle& rect) { scaled_rect, type); } } + void CachedSurface::DownloadGLTexture(const MathUtil::Rectangle& rect) { if (type == SurfaceType::Fill) return; @@ -801,7 +802,6 @@ void CachedSurface::DownloadGLTexture(const MathUtil::Rectangle& rect) { size_t buffer_offset = (rect.bottom * stride + rect.left) * GetGLBytesPerPixel(pixel_format); // If not 1x scale, blit scaled texture to a new 1x texture and use that to flush - OGLTexture unscaled_tex; if (res_scale != 1) { auto scaled_rect = rect; scaled_rect.left *= res_scale; @@ -809,9 +809,12 @@ void CachedSurface::DownloadGLTexture(const MathUtil::Rectangle& rect) { scaled_rect.right *= res_scale; scaled_rect.bottom *= res_scale; + OGLTexture unscaled_tex; unscaled_tex.Create(); + + MathUtil::Rectangle unscaled_tex_rect{0, rect.GetHeight(), rect.GetWidth(), 0}; AllocateSurfaceTexture(unscaled_tex.handle, tuple, rect.GetWidth(), rect.GetHeight()); - BlitTextures(texture.handle, scaled_rect, unscaled_tex.handle, rect, type); + BlitTextures(texture.handle, scaled_rect, unscaled_tex.handle, unscaled_tex_rect, type); state.texture_units[0].texture_2d = unscaled_tex.handle; state.Apply();