mirror of
https://github.com/antopilo/Nuake.git
synced 2026-01-03 14:09:46 +03:00
Added a mapping of viewport -> scene renderer
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user