diff options
| author | iwubcode <iwubcode@users.noreply.github.com> | 2025-11-13 21:44:29 -0600 |
|---|---|---|
| committer | iwubcode <iwubcode@users.noreply.github.com> | 2025-11-20 00:35:01 -0600 |
| commit | a4599a1adda5c1d445b70d0dfe70b50fe3888662 (patch) | |
| tree | e9989a4c9ea04d84b1ce44dde2746940362bc752 /Source/Core/VideoCommon/AbstractGfx.cpp | |
| parent | 2acb49544cdc7f5bd937f56ca5771d52ab336528 (diff) | |
VideoCommon: avoid assuming global state exists for 'EndUtilityDrawing', use last stored viewport/scissor rect instead
Diffstat (limited to 'Source/Core/VideoCommon/AbstractGfx.cpp')
| -rw-r--r-- | Source/Core/VideoCommon/AbstractGfx.cpp | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/Source/Core/VideoCommon/AbstractGfx.cpp b/Source/Core/VideoCommon/AbstractGfx.cpp index 0e7e05e0f0..3e31468f78 100644 --- a/Source/Core/VideoCommon/AbstractGfx.cpp +++ b/Source/Core/VideoCommon/AbstractGfx.cpp @@ -34,10 +34,15 @@ void AbstractGfx::BeginUtilityDrawing() void AbstractGfx::EndUtilityDrawing() { - // Reset framebuffer/scissor/viewport. Pipeline will be reset at next draw. + // Reset framebuffer. Pipeline will be reset at next draw. g_framebuffer_manager->BindEFBFramebuffer(); - BPFunctions::SetScissorAndViewport(g_framebuffer_manager.get(), bpmem.scissorTL, bpmem.scissorBR, - bpmem.scissorOffset, xfmem.viewport); + + // Reset our viewport and scissor to the last stored value + SetViewport(m_viewport_and_scissor.viewport_x, m_viewport_and_scissor.viewport_y, + m_viewport_and_scissor.viewport_width, m_viewport_and_scissor.viewport_height, + m_viewport_and_scissor.viewport_near_depth, + m_viewport_and_scissor.viewport_far_depth); + SetScissorRect(m_viewport_and_scissor.scissor_rect); } void AbstractGfx::SetFramebuffer(AbstractFramebuffer* framebuffer) @@ -87,6 +92,11 @@ void AbstractGfx::ClearRegion(const MathUtil::Rectangle<int>& target_rc, bool co EndUtilityDrawing(); } +void AbstractGfx::StoreViewportAndScissor(const ViewportAndScissor& viewport_and_scissor) +{ + m_viewport_and_scissor = viewport_and_scissor; +} + void AbstractGfx::SetViewportAndScissor(const MathUtil::Rectangle<int>& rect, float min_depth, float max_depth) { |
