Started Vulkan Waster management 🗑️

This commit is contained in:
antopilo
2025-01-29 23:20:56 -05:00
parent 7d0af312ef
commit f6dd41ed9a
4 changed files with 24 additions and 5 deletions

View File

@@ -14,6 +14,7 @@
#include <volk/volk.h>
#include <stack>
#include <array>
#include <map>
@@ -123,6 +124,7 @@ namespace Nuake
VkSampler SamplerLinear;
VkSampler SamplerNearest;
std::stack<std::function<void()>> DeletionQueue;
public:
ModelData ModelTransforms;
@@ -182,6 +184,9 @@ namespace Nuake
void RecreateBindlessTextures();
void RecreateBindlessCameras();
void UpdateBuffers();
void QueueDeletion(std::function<void()> func);
void CleanUp();
private:
void CreateBindlessLayout();
};

View File

@@ -761,6 +761,8 @@ void VkRenderer::EndDraw()
ImGui::RenderPlatformWindowsDefault();
}
GPUResources::Get().CleanUp();
// Increase the number of frames drawn
FrameNumber++;
}

View File

@@ -167,8 +167,6 @@ namespace Nuake
DeletionQueue MainDeletionQueue;
DescriptorAllocator GlobalDescriptorAllocator;
public:
VkDescriptorSet DrawImageDescriptors;
VkDescriptorSetLayout DrawImageDescriptorLayout;
@@ -180,8 +178,6 @@ namespace Nuake
Ref<VkSceneRenderer> SceneRenderer;
public:
static VkRenderer& Get()
{
@@ -227,9 +223,10 @@ namespace Nuake
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();
void DrawSceneViewport(const Ref<Scene>& scene, const UUID& viewportId);
void BeginScene(const UUID& camera);
bool Draw();

View File

@@ -491,3 +491,18 @@ uint32_t GPUResources::GetBindlessMaterialID(const UUID& id)
}
return MeshMaterialMapping[id];
}
void GPUResources::QueueDeletion(std::function<void()> func)
{
DeletionQueue.push(func);
}
void GPUResources::CleanUp()
{
while (!DeletionQueue.empty())
{
DeletionQueue.top()();
DeletionQueue.pop();
Logger::Log("Deleted GPU resource", "vulkan", VERBOSE);
}
}