diff --git a/Common/UI/ScreenManager.cpp b/Common/UI/ScreenManager.cpp index ea370b718a..d4341f16ed 100644 --- a/Common/UI/ScreenManager.cpp +++ b/Common/UI/ScreenManager.cpp @@ -187,7 +187,7 @@ void ScreenManager::resized() { } } -ScreenRenderFlags ScreenManager::render() { +ScreenRenderFlags ScreenManager::Render(std::function afterPreRender) { using namespace Draw; ScreenRenderFlags flags = ScreenRenderFlags::NONE; @@ -203,6 +203,8 @@ ScreenRenderFlags ScreenManager::render() { flags |= layer.screen->PreRender(mode); } + afterPreRender(); + // Now, start the final render pass. This is now the ONLY place where binding the null fb is allowed. draw_->BindFramebufferAsRenderTarget(nullptr, {RPAction::CLEAR, RPAction::CLEAR, RPAction::CLEAR}, "BackBuffer"); getUIContext()->BeginFrame(); diff --git a/Common/UI/ScreenManager.h b/Common/UI/ScreenManager.h index 6635db1b68..9e3ed9af18 100644 --- a/Common/UI/ScreenManager.h +++ b/Common/UI/ScreenManager.h @@ -47,7 +47,7 @@ public: postRenderUserdata_ = userdata; } - ScreenRenderFlags render(); + ScreenRenderFlags Render(std::function afterPreRender); void resized(); void shutdown(); diff --git a/UI/NativeApp.cpp b/UI/NativeApp.cpp index 60f3a6507b..71ad7df558 100644 --- a/UI/NativeApp.cpp +++ b/UI/NativeApp.cpp @@ -1285,15 +1285,14 @@ void NativeFrame(GraphicsContext *graphicsContext) { Core_ProcessCPUQueue(); // All actual rendering (and also emulation) happens in this render() call. - renderFlags = g_screenManager->render(); + renderFlags = g_screenManager->Render([]() { + runImDebugger(g_draw); + }); + renderImDebugger(g_draw); if (g_screenManager->getUIContext()->Text()) { g_screenManager->getUIContext()->Text()->OncePerFrame(); } - ui_draw2d.PopDrawMatrix(); - - runImDebugger(g_draw); - renderImDebugger(g_draw); } g_draw->EndFrame();