summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/RenderBase.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/VideoCommon/RenderBase.cpp')
-rw-r--r--Source/Core/VideoCommon/RenderBase.cpp22
1 files changed, 14 insertions, 8 deletions
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<int>& rc)
+void Renderer::RenderXFBToScreen(const MathUtil::Rectangle<int>& target_rc,
+ const AbstractTexture* source_texture,
+ const MathUtil::Rectangle<int>& 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<int> 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);
}
}