@@ -138,8 +138,12 @@ namespace Lux {
138138 data->SC ->Create ((uint32_t )viewport->Size .x , (uint32_t )viewport->Size .y );
139139 data->WindowOwned = true ;
140140
141+ // Per-viewport renderer: pass the main renderer's shared registry so
142+ // ALL texture handles (font, framebuffer images, etc.) are resolvable
143+ // regardless of which renderer instance decodes the draw command.
144+ ImGuiRenderer* mainRenderer = Application::Get ().GetImGuiLayer ()->GetImGuiRenderer ();
141145 data->Renderer = std::make_unique<ImGuiRenderer>();
142- data->Renderer ->Init ();
146+ data->Renderer ->Init (mainRenderer-> GetRegistry () );
143147 }
144148
145149 static void ImGuiRenderer_DestroyWindow (ImGuiViewport* viewport)
@@ -189,7 +193,15 @@ namespace Lux {
189193
190194 void ImGuiLayer::Begin ()
191195 {
192- ImGui::SetMouseCursor (Input::GetCursorMode () == CursorMode::Normal ? ImGuiMouseCursor_Arrow : ImGuiMouseCursor_None);
196+ // Advance the shared registry for the new frame:
197+ // - clears per-frame texture slots registered last frame
198+ // - increments the frame counter used in stale-handle detection
199+ // This runs BEFORE any rendering (main or per-viewport) so all
200+ // renderers operate on consistent, up-to-date frame texture state.
201+ m_ImGuiRenderer->GetRegistry ()->NewFrame ();
202+
203+ ImGui::SetMouseCursor (Input::GetCursorMode () == CursorMode::Normal
204+ ? ImGuiMouseCursor_Arrow : ImGuiMouseCursor_None);
193205
194206 m_ImGuiRenderer->UpdateFontTexture ();
195207 ImGui_ImplGlfw_NewFrame ();
@@ -202,9 +214,12 @@ namespace Lux {
202214 {
203215 ImGui::Render ();
204216
205- m_ImGuiRenderer->RenderToSwapchain (ImGui::GetMainViewport (), &Application::Get ().GetWindow ().GetSwapChain ());
217+ m_ImGuiRenderer->RenderToSwapchain (ImGui::GetMainViewport (),
218+ &Application::Get ().GetWindow ().GetSwapChain ());
206219
207- // Update and Render additional Platform Windows
220+ // Per-viewport windows rendered here all share the same registry,
221+ // so their texture handles are still valid even though the main
222+ // renderer rendered first.
208223 if (ImGui::GetIO ().ConfigFlags & ImGuiConfigFlags_ViewportsEnable)
209224 {
210225 ImGui::UpdatePlatformWindows ();
@@ -354,7 +369,7 @@ namespace Lux {
354369 // g_DisableImGuiEvents = !allowEvents;
355370 }
356371
357- Lux:: ImGuiRenderer* ImGuiLayer::GetImGuiRenderer ()
372+ ImGuiRenderer* ImGuiLayer::GetImGuiRenderer ()
358373 {
359374 return m_ImGuiRenderer.get ();
360375 }
0 commit comments