From 91b131e448ea12f0e06e82977df1a66d2132dbea Mon Sep 17 00:00:00 2001 From: ocornut Date: Wed, 5 Aug 2026 15:54:39 +0200 Subject: [PATCH] Viewports: fixed viewport->FramebufferScale being reset. Amend 98a66d8. (#9502) --- imgui.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/imgui.cpp b/imgui.cpp index 0dd9fc594..43d8471b1 100644 --- a/imgui.cpp +++ b/imgui.cpp @@ -17425,11 +17425,16 @@ ImGuiViewportP* ImGui::AddUpdateViewport(ImGuiWindow* window, ImGuiID id, const } viewport->Window = window; - viewport->FramebufferScale = g.IO.DisplayFramebufferScale; // Later overidden by Platform_GetWindowFramebufferScale() for platform having it viewport->LastFrameActive = g.FrameCount; viewport->UpdateWorkRect(); IM_ASSERT(window == NULL || viewport->ID == window->ID); + // Initialize FramebufferScale for new viewports, before UpdatePlatformWindows() -> Platform_GetWindowFramebufferScale() has a chance to run. + // FIXME: New viewport on monitors with a different scale will run for a frame with wrong scale? (#9502) + // A workaround could be to cache last known FramebufferScale per monitor, so the heuristic can pull it from monitor. + if (viewport->FramebufferScale.x <= 0.0f || viewport->FramebufferScale.y <= 0.0f) + viewport->FramebufferScale = g.IO.DisplayFramebufferScale; + if (window != NULL) window->ViewportOwned = true;