Fixed viewport leaks + compilation issues

This commit is contained in:
antopilo
2025-01-27 21:30:18 -05:00
parent 83de729716
commit 5347fab0ed
3 changed files with 33 additions and 8 deletions

View File

@@ -14,7 +14,6 @@ using namespace Nuake;
ViewportWidget::ViewportWidget(EditorContext& context) : IEditorWidget(context)
{
const Vector2& defaultSize = { 1280, 720 };
const UUID viewId = editorContext.GetScene()->m_EditorCamera->ID;
auto& vkRenderer = Nuake::VkRenderer::Get();
@@ -47,7 +46,7 @@ void ViewportWidget::Draw()
Vector2 viewportPanelSize = glm::vec2(regionAvail.x, regionAvail.y);
// This is important for make UI mouse coord relative to viewport
// Input::SetViewportDimensions(m_ViewportPos, viewportPanelSize);
// Nuake::Input::SetViewportDimensions(m_ViewportPos, viewportPanelSize);
VkDescriptorSet textureDesc = VkRenderer::Get().DrawImage->GetImGuiDescriptorSet();

View File

@@ -6,7 +6,7 @@
class EditorContext;
namespace MyNamespace
namespace Nuake
{
class Viewport;
}
@@ -14,7 +14,7 @@ namespace MyNamespace
class ViewportWidget : public IEditorWidget
{
private:
Ref<Viewport> sceneViewport;
Ref<Nuake::Viewport> sceneViewport;
ImGuizmo::OPERATION CurrentOperation = ImGuizmo::TRANSLATE;
ImGuizmo::MODE CurrentMode = ImGuizmo::WORLD;
@@ -22,7 +22,7 @@ private:
Nuake::Vector3 CurrentSnapping = { 0.05f, 0.05f, 0.05f };
public:
ViewportWidget(EditorContext& context) : IEditorWidget(context);
ViewportWidget(EditorContext& context);
~ViewportWidget();
public:

View File

@@ -16,7 +16,7 @@
#include "VulkanAllocatedBuffer.h"
#include "VkResources.h"
#include "SceneViewport.h"
#include "src/Rendering/Vertex.h"
#include "VulkanSceneRenderer.h"
@@ -362,6 +362,12 @@ void VkRenderer::InitDescriptors()
}
}
void VkRenderer::DrawScene(RenderContext ctx)
{
SceneRenderer->BeginScene(ctx);
SceneRenderer->EndScene();
}
void VkRenderer::UpdateDescriptorSets()
{
VkDescriptorImageInfo imgInfo{};
@@ -382,15 +388,35 @@ void VkRenderer::UpdateDescriptorSets()
Ref<Viewport> VkRenderer::CreateViewport(const UUID& viewId, const Vector2& size)
{
Ref<Viewport> newViewport = CreateRef<Viewport>(viewId, size);
Viewports[viewId] = newViewport;
Viewports[newViewport->GetID()] = newViewport;
return newViewport;
}
void VkRenderer::RemoveViewport(const UUID& viewportId)
{
Viewports.erase(viewportId);
// Make sure we erase them from the Scene -> Viewport map.
// Also remove the scene if the view count reaches 0 to avoid
// dangling reference to the scenes. We should use Scene ID instead
// of shared pointers.
//
// TODO(antopilo) make scene resources.
for (auto& [scene, views] : SceneViewports)
{
auto it = std::find(views.begin(), views.end(), viewportId);
if (it != views.end())
{
views.erase(it);
if (SceneViewports[scene].empty())
{
SceneViewports.erase(scene);
return;
}
}
}
}
void VkRenderer::RegisterSceneViewport(const Ref<Scene>& scene, const UUID& viewportId)