Skip to content

Commit cf65167

Browse files
author
Pier-Olivier Boulianne
committed
WIP: RENDERING PROPERLY, WOOHOOOO
- WASD movement + mouse - QE for up and down - LEFT + RIGHT + MIDDLE mouse - ALT pan
1 parent 9a650b5 commit cf65167

5 files changed

Lines changed: 385 additions & 325 deletions

File tree

Core/Source/Lux/Editor/EditorCamera.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ namespace Lux {
123123

124124
m_InitialMousePosition = mouse;
125125
m_Position += m_PositionDelta;
126-
m_Yaw += m_YawDelta;
126+
m_Yaw -= m_YawDelta;
127127
m_Pitch += m_PitchDelta;
128128

129129
if (m_CameraMode == CameraMode::ARCBALL)

Core/Source/Lux/ImGui/ImGuiLayer.cpp

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)