Viewport now resets to the correct camera after changing scene

This commit is contained in:
antopilo
2025-02-08 18:32:02 -05:00
parent e09dbb671a
commit cede05a309
4 changed files with 26 additions and 0 deletions

View File

@@ -121,6 +121,11 @@ bool SceneEditorWindow::IsFocused() const
void SceneEditorWindow::SetScene(Ref<Scene> scene) void SceneEditorWindow::SetScene(Ref<Scene> scene)
{ {
editorContext.SetScene(scene); editorContext.SetScene(scene);
for (auto& widget : widgets)
{
widget->OnSceneChanged(scene);
}
} }
Ref<Scene> SceneEditorWindow::GetScene() const Ref<Scene> SceneEditorWindow::GetScene() const

View File

@@ -20,6 +20,8 @@ public:
virtual void Update(float ts) = 0; virtual void Update(float ts) = 0;
virtual void Draw() = 0; virtual void Draw() = 0;
virtual void OnSceneChanged(Ref<Nuake::Scene> scene) {}
void DockTo(uint32_t dockId) void DockTo(uint32_t dockId)
{ {
ImGui::DockBuilderDockWindow(widgetName.c_str(), dockId); ImGui::DockBuilderDockWindow(widgetName.c_str(), dockId);

View File

@@ -182,4 +182,22 @@ void ViewportWidget::Draw()
ImGui::PopStyleVar(); ImGui::PopStyleVar();
} }
ImGui::End(); ImGui::End();
}
void ViewportWidget::OnSceneChanged(Ref<Nuake::Scene> scene)
{
auto& vkRenderer = Nuake::VkRenderer::Get();
// Recreate new viewport with new scene with the same resolution
const Vector2 currentResolution = sceneViewport->GetViewportSize();
// Remove old viewport
vkRenderer.RemoveViewport(sceneViewport->GetID());
// Create new viewport with same reoslution
const UUID viewId = editorContext.GetScene()->m_EditorCamera->ID;
auto viewport = vkRenderer.CreateViewport(viewId, currentResolution);
vkRenderer.RegisterSceneViewport(scene, viewport->GetID());
sceneViewport = viewport;
} }

View File

@@ -29,4 +29,5 @@ public:
public: public:
void Update(float ts) override; void Update(float ts) override;
void Draw() override; void Draw() override;
void OnSceneChanged(Ref<Nuake::Scene> scene) override;
}; };