From c65eb7d54f69b8727f33738d2ee7d115db2ec54f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Sun, 9 Aug 2026 18:29:33 +0200 Subject: [PATCH] Fix the point in time in the frame that we run and render the ImDebugger Turns out it matters quite a lot. Will see if I can clean this up later. --- Common/UI/ScreenManager.cpp | 4 +++- Common/UI/ScreenManager.h | 2 +- UI/NativeApp.cpp | 9 ++++----- 3 files changed, 8 insertions(+), 7 deletions(-) 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();