From 32359bf2bbeb7ed14f9138719fbe25021a2e90c4 Mon Sep 17 00:00:00 2001 From: Stenzek Date: Sun, 28 Apr 2019 17:00:18 +1000 Subject: Renderer: Adjust target rectangle in the base class --- Source/Core/VideoCommon/RenderBase.cpp | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) (limited to 'Source/Core/VideoCommon/RenderBase.cpp') diff --git a/Source/Core/VideoCommon/RenderBase.cpp b/Source/Core/VideoCommon/RenderBase.cpp index 039da1f189..4c84350bb8 100644 --- a/Source/Core/VideoCommon/RenderBase.cpp +++ b/Source/Core/VideoCommon/RenderBase.cpp @@ -1251,7 +1251,14 @@ void Renderer::Swap(u32 xfb_addr, u32 fb_width, u32 fb_stride, u32 fb_height, u6 { BindBackbuffer({{0.0f, 0.0f, 0.0f, 1.0f}}); UpdateDrawRectangle(); - RenderXFBToScreen(xfb_entry->texture.get(), xfb_rect); + + // Adjust the source rectangle instead of using an oversized viewport to render the XFB. + auto render_target_rc = GetTargetRectangle(); + auto render_source_rc = xfb_rect; + AdjustRectanglesToFitBounds(&render_target_rc, &xfb_rect, m_backbuffer_width, + m_backbuffer_height); + RenderXFBToScreen(render_target_rc, xfb_entry->texture.get(), render_source_rc); + DrawImGui(); // Present to the window system. @@ -1319,23 +1326,22 @@ void Renderer::Swap(u32 xfb_addr, u32 fb_width, u32 fb_stride, u32 fb_height, u6 } } -void Renderer::RenderXFBToScreen(const AbstractTexture* texture, const MathUtil::Rectangle& rc) +void Renderer::RenderXFBToScreen(const MathUtil::Rectangle& target_rc, + const AbstractTexture* source_texture, + const MathUtil::Rectangle& source_rc) { - auto adjusted_rc = rc; - auto target_rc = GetTargetRectangle(); - AdjustRectanglesToFitBounds(&target_rc, &adjusted_rc, m_backbuffer_width, m_backbuffer_height); if (g_ActiveConfig.stereo_mode == StereoMode::SBS || g_ActiveConfig.stereo_mode == StereoMode::TAB) { MathUtil::Rectangle left_rc, right_rc; std::tie(left_rc, right_rc) = ConvertStereoRectangle(target_rc); - m_post_processor->BlitFromTexture(left_rc, adjusted_rc, texture, 0); - m_post_processor->BlitFromTexture(right_rc, adjusted_rc, texture, 1); + m_post_processor->BlitFromTexture(left_rc, source_rc, source_texture, 0); + m_post_processor->BlitFromTexture(right_rc, source_rc, source_texture, 1); } else { - m_post_processor->BlitFromTexture(target_rc, adjusted_rc, texture, 0); + m_post_processor->BlitFromTexture(target_rc, source_rc, source_texture, 0); } } -- cgit v1.2.3