diff --git a/Nuake/src/Rendering/Vulkan/VkResources.h b/Nuake/src/Rendering/Vulkan/VkResources.h index e901693d..28218f65 100644 --- a/Nuake/src/Rendering/Vulkan/VkResources.h +++ b/Nuake/src/Rendering/Vulkan/VkResources.h @@ -14,6 +14,7 @@ #include +#include #include #include @@ -123,6 +124,7 @@ namespace Nuake VkSampler SamplerLinear; VkSampler SamplerNearest; + std::stack> DeletionQueue; public: ModelData ModelTransforms; @@ -182,6 +184,9 @@ namespace Nuake void RecreateBindlessTextures(); void RecreateBindlessCameras(); void UpdateBuffers(); + + void QueueDeletion(std::function func); + void CleanUp(); private: void CreateBindlessLayout(); }; diff --git a/Nuake/src/Rendering/Vulkan/VulkanRenderer.cpp b/Nuake/src/Rendering/Vulkan/VulkanRenderer.cpp index 097c3106..19def9c1 100644 --- a/Nuake/src/Rendering/Vulkan/VulkanRenderer.cpp +++ b/Nuake/src/Rendering/Vulkan/VulkanRenderer.cpp @@ -761,6 +761,8 @@ void VkRenderer::EndDraw() ImGui::RenderPlatformWindowsDefault(); } + GPUResources::Get().CleanUp(); + // Increase the number of frames drawn FrameNumber++; } diff --git a/Nuake/src/Rendering/Vulkan/VulkanRenderer.h b/Nuake/src/Rendering/Vulkan/VulkanRenderer.h index 27a45d7d..61561a15 100644 --- a/Nuake/src/Rendering/Vulkan/VulkanRenderer.h +++ b/Nuake/src/Rendering/Vulkan/VulkanRenderer.h @@ -167,8 +167,6 @@ namespace Nuake DeletionQueue MainDeletionQueue; DescriptorAllocator GlobalDescriptorAllocator; - - public: VkDescriptorSet DrawImageDescriptors; VkDescriptorSetLayout DrawImageDescriptorLayout; @@ -180,8 +178,6 @@ namespace Nuake Ref SceneRenderer; - - public: static VkRenderer& Get() { @@ -227,9 +223,10 @@ namespace Nuake void RegisterSceneViewport(const Ref& scene, const UUID& viewportId); void UnRegisterSceneViewport(const Ref& scene, const UUID& viewportId); + // Actual rendering + public: void PrepareSceneData(RenderContext ctx); void DrawScenes(); - void DrawSceneViewport(const Ref& scene, const UUID& viewportId); void BeginScene(const UUID& camera); bool Draw(); diff --git a/Nuake/src/Rendering/Vulkan/VulkanResources.cpp b/Nuake/src/Rendering/Vulkan/VulkanResources.cpp index fe3cc613..a99e8e62 100644 --- a/Nuake/src/Rendering/Vulkan/VulkanResources.cpp +++ b/Nuake/src/Rendering/Vulkan/VulkanResources.cpp @@ -491,3 +491,18 @@ uint32_t GPUResources::GetBindlessMaterialID(const UUID& id) } return MeshMaterialMapping[id]; } + +void GPUResources::QueueDeletion(std::function func) +{ + DeletionQueue.push(func); +} + +void GPUResources::CleanUp() +{ + while (!DeletionQueue.empty()) + { + DeletionQueue.top()(); + DeletionQueue.pop(); + Logger::Log("Deleted GPU resource", "vulkan", VERBOSE); + } +}