mirror of
https://github.com/antopilo/Nuake.git
synced 2026-09-15 20:08:54 +03:00
Fixed viewport leaks + compilation issues
This commit is contained in:
@@ -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();
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user