diff --git a/Nuake/Source/Nuake/Rendering/Vulkan/SceneRenderPipeline.cpp b/Nuake/Source/Nuake/Rendering/Vulkan/SceneRenderPipeline.cpp index 9a045769..b563e852 100644 --- a/Nuake/Source/Nuake/Rendering/Vulkan/SceneRenderPipeline.cpp +++ b/Nuake/Source/Nuake/Rendering/Vulkan/SceneRenderPipeline.cpp @@ -14,7 +14,6 @@ using namespace Nuake; -RenderPipeline SceneRenderPipeline::GBufferPipeline; RenderPipeline ShadowRenderPipeline::ShadowPipeline; ShadowRenderPipeline::ShadowRenderPipeline() diff --git a/Nuake/Source/Nuake/Rendering/Vulkan/SceneRenderPipeline.h b/Nuake/Source/Nuake/Rendering/Vulkan/SceneRenderPipeline.h index 07665483..8edafa6a 100644 --- a/Nuake/Source/Nuake/Rendering/Vulkan/SceneRenderPipeline.h +++ b/Nuake/Source/Nuake/Rendering/Vulkan/SceneRenderPipeline.h @@ -111,7 +111,7 @@ namespace Nuake OutlineConstant outlineConstant; BloomConstant bloomConstant; - static RenderPipeline GBufferPipeline; + RenderPipeline GBufferPipeline; // Delegates MulticastDelegate DebugDrawDelegate; diff --git a/Nuake/Source/Nuake/Rendering/Vulkan/VulkanRenderer.cpp b/Nuake/Source/Nuake/Rendering/Vulkan/VulkanRenderer.cpp index c95cf009..1f67b035 100644 --- a/Nuake/Source/Nuake/Rendering/Vulkan/VulkanRenderer.cpp +++ b/Nuake/Source/Nuake/Rendering/Vulkan/VulkanRenderer.cpp @@ -372,7 +372,8 @@ void VkRenderer::DrawScenes() ctx.Size = viewport->GetRenderTarget()->GetSize(); ctx.ViewportImage = viewport->GetRenderTarget(); ctx.SelectedEntityID = viewport->GetSelectedEntityID(); - SceneRenderer->DrawSceneView(ctx); + + SceneRenderers[view]->DrawSceneView(ctx); } } } @@ -428,7 +429,6 @@ void VkRenderer::RemoveViewport(const UUID& viewportId) // 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) { @@ -467,7 +467,10 @@ void VkRenderer::RegisterSceneViewport(const Ref& scene, const UUID& view SceneViewports[scene].push_back(viewportId); // Each viewport has its own scene renderer - SceneRenderers[viewportId] = CreateRef(); + Ref sceneRenderer = CreateRef(); + sceneRenderer->Init(); + + SceneRenderers[viewportId] = std::move(sceneRenderer); } void DrawSceneViewport(const Ref& scene, const UUID& viewportId) @@ -480,7 +483,9 @@ void VkRenderer::InitImgui() // 1: create descriptor pool for IMGUI // the size of the pool is very oversize, but it's copied from imgui demo // itself. - VkDescriptorPoolSize pool_sizes[] = { { VK_DESCRIPTOR_TYPE_SAMPLER, 1000 }, + VkDescriptorPoolSize pool_sizes[] + { + { VK_DESCRIPTOR_TYPE_SAMPLER, 1000 }, { VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1000 }, { VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, 1000 }, { VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, 1000 }, @@ -490,7 +495,8 @@ void VkRenderer::InitImgui() { VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1000 }, { VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, 1000 }, { VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, 1000 }, - { VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, 1000 } }; + { VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, 1000 } + }; VkDescriptorPoolCreateInfo pool_info = {}; pool_info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO; @@ -503,10 +509,7 @@ void VkRenderer::InitImgui() VK_CALL(vkCreateDescriptorPool(Device, &pool_info, nullptr, &imguiPool)); // 2: initialize imgui library - - // this initializes the core structures of imgui ImGui::CreateContext(); - { ImGuiIO& io = ImGui::GetIO(); (void)io; io.Fonts->AddFontFromMemoryTTF(StaticResources::Data_Fonts_Poppins_Regular_ttf, StaticResources::Data_Fonts_Poppins_Regular_ttf_len, 16.0); diff --git a/Nuake/Source/Nuake/Rendering/Vulkan/VulkanSceneRenderer.cpp b/Nuake/Source/Nuake/Rendering/Vulkan/VulkanSceneRenderer.cpp index da9e7156..400e3cd4 100644 --- a/Nuake/Source/Nuake/Rendering/Vulkan/VulkanSceneRenderer.cpp +++ b/Nuake/Source/Nuake/Rendering/Vulkan/VulkanSceneRenderer.cpp @@ -278,6 +278,7 @@ void VkSceneRenderer::PrepareScenes(const std::vector>& scenes, Rende gpu.UpdateBuffers(); + // TODO: Move shadow map creation into its own pass per scene renderer for (auto& scene : scenes) { PassRenderContext passCtx = { };