Started Vulkan Waster management 🗑️
This commit is contained in:
@@ -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();
|
||||
};
|
||||
|
||||
@@ -761,6 +761,8 @@ void VkRenderer::EndDraw()
|
||||
ImGui::RenderPlatformWindowsDefault();
|
||||
}
|
||||
|
||||
GPUResources::Get().CleanUp();
|
||||
|
||||
// Increase the number of frames drawn
|
||||
FrameNumber++;
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user