Added a mapping of viewport -> scene renderer

This commit is contained in:
antopilo
2025-02-02 10:47:29 -05:00
parent e95787824c
commit 8d92f68cc6
2 changed files with 20 additions and 25 deletions

View File

@@ -433,15 +433,25 @@ void VkRenderer::RemoveViewport(const UUID& viewportId)
for (auto& [scene, views] : SceneViewports)
{
auto it = std::find(views.begin(), views.end(), viewportId);
if (it != views.end())
if (it == std::end(views))
{
views.erase(it);
continue;
}
if (SceneViewports[scene].empty())
{
SceneViewports.erase(scene);
return;
}
views.erase(it);
// Erase scene renderer associated with scene viewport
if (auto sceneRendererIt = SceneRenderers.find(viewportId);
sceneRendererIt != std::end(SceneRenderers))
{
SceneRenderers.erase(sceneRendererIt);
}
// Erase link between scene and viewport
if (SceneViewports[scene].empty())
{
SceneViewports.erase(scene);
return;
}
}
}
@@ -455,22 +465,9 @@ void VkRenderer::RegisterSceneViewport(const Ref<Scene>& scene, const UUID& view
}
SceneViewports[scene].push_back(viewportId);
}
void VkRenderer::UnRegisterSceneViewport(const Ref<Scene>& scene, const UUID& viewportId)
{
if (SceneViewports.find(scene) == SceneViewports.end())
{
Logger::Log("Failed to unregister scene viewport: scene not found", "vulkan", CRITICAL);
return;
}
auto& viewports = SceneViewports[scene];
auto it = std::find(viewports.begin(), viewports.end(), viewportId);
if (it != viewports.end())
{
viewports.erase(it);
}
// Each viewport has its own scene renderer
SceneRenderers[viewportId] = CreateRef<VkSceneRenderer>();
}
void DrawSceneViewport(const Ref<Scene>& scene, const UUID& viewportId)

View File

@@ -174,6 +174,7 @@ namespace Nuake
VkCommandBuffer ImguiCommandBuffer;
VkCommandPool ImguiCommandPool;
std::map<UUID, Ref<VkSceneRenderer>> SceneRenderers;
Ref<VkSceneRenderer> SceneRenderer;
public:
@@ -217,11 +218,8 @@ namespace Nuake
Ref<Viewport> CreateViewport(const UUID& viewId, const Vector2& size);
void RemoveViewport(const UUID& viewportId);
void RegisterSceneViewport(const Ref<Scene>& scene, const UUID& viewportId);
void UnRegisterSceneViewport(const Ref<Scene>& scene, const UUID& viewportId);
// Actual rendering
public:
void PrepareSceneData(RenderContext ctx);
void DrawScenes();