When downloading from a surface into gl_buffer, ingore any x/y offsets in rect and use 0,0 as the origin
This commit is contained in:
parent
7e673af527
commit
4e053220a8
1 changed files with 5 additions and 2 deletions
|
@ -780,6 +780,7 @@ void CachedSurface::UploadGLTexture(const MathUtil::Rectangle<u32>& rect) {
|
||||||
scaled_rect, type);
|
scaled_rect, type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CachedSurface::DownloadGLTexture(const MathUtil::Rectangle<u32>& rect) {
|
void CachedSurface::DownloadGLTexture(const MathUtil::Rectangle<u32>& rect) {
|
||||||
if (type == SurfaceType::Fill)
|
if (type == SurfaceType::Fill)
|
||||||
return;
|
return;
|
||||||
|
@ -801,7 +802,6 @@ void CachedSurface::DownloadGLTexture(const MathUtil::Rectangle<u32>& rect) {
|
||||||
size_t buffer_offset = (rect.bottom * stride + rect.left) * GetGLBytesPerPixel(pixel_format);
|
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
|
// If not 1x scale, blit scaled texture to a new 1x texture and use that to flush
|
||||||
OGLTexture unscaled_tex;
|
|
||||||
if (res_scale != 1) {
|
if (res_scale != 1) {
|
||||||
auto scaled_rect = rect;
|
auto scaled_rect = rect;
|
||||||
scaled_rect.left *= res_scale;
|
scaled_rect.left *= res_scale;
|
||||||
|
@ -809,9 +809,12 @@ void CachedSurface::DownloadGLTexture(const MathUtil::Rectangle<u32>& rect) {
|
||||||
scaled_rect.right *= res_scale;
|
scaled_rect.right *= res_scale;
|
||||||
scaled_rect.bottom *= res_scale;
|
scaled_rect.bottom *= res_scale;
|
||||||
|
|
||||||
|
OGLTexture unscaled_tex;
|
||||||
unscaled_tex.Create();
|
unscaled_tex.Create();
|
||||||
|
|
||||||
|
MathUtil::Rectangle<u32> unscaled_tex_rect{0, rect.GetHeight(), rect.GetWidth(), 0};
|
||||||
AllocateSurfaceTexture(unscaled_tex.handle, tuple, rect.GetWidth(), rect.GetHeight());
|
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.texture_units[0].texture_2d = unscaled_tex.handle;
|
||||||
state.Apply();
|
state.Apply();
|
||||||
|
|
Loading…
Reference in a new issue