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)
{
editorContext.SetScene(scene);
for (auto& widget : widgets)
{
widget->OnSceneChanged(scene);
}
}
Ref<Scene> SceneEditorWindow::GetScene() const

View File

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

View File

@@ -182,4 +182,22 @@ void ViewportWidget::Draw()
ImGui::PopStyleVar();
}
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:
void Update(float ts) override;
void Draw() override;
void OnSceneChanged(Ref<Nuake::Scene> scene) override;
};