Fix issue with freeing geometries

This commit is contained in:
Georg Hagen
2024-07-03 15:54:05 +02:00
parent 002206e9d6
commit 5b6fde2aaf
3 changed files with 7 additions and 0 deletions

View File

@@ -85,6 +85,8 @@ namespace OpenVulkano::Vulkan
cmdPools = nullptr; cmdPools = nullptr;
cmdBuffers = nullptr; cmdBuffers = nullptr;
semaphores = nullptr; semaphores = nullptr;
geometries.clear();
nodes.clear();
device.destroyDescriptorPool(descriptorPool); device.destroyDescriptorPool(descriptorPool);
allocations.clear(); allocations.clear();
lastAllocation = nullptr; lastAllocation = nullptr;
@@ -134,6 +136,7 @@ namespace OpenVulkano::Vulkan
CreateDeviceOnlyBufferWithData(Utils::EnumAsInt(geometry->indexType) * geometry->GetIndexCount(), vk::BufferUsageFlagBits::eIndexBuffer, geometry->GetIndices()), CreateDeviceOnlyBufferWithData(Utils::EnumAsInt(geometry->indexType) * geometry->GetIndexCount(), vk::BufferUsageFlagBits::eIndexBuffer, geometry->GetIndices()),
freeFunction); freeFunction);
VulkanGeometry* vkGeo = new VulkanGeometry(geometry, vertexBuffer, indexBuffer); VulkanGeometry* vkGeo = new VulkanGeometry(geometry, vertexBuffer, indexBuffer);
geometries.emplace_back(vkGeo);
geometry->renderGeo = vkGeo; geometry->renderGeo = vkGeo;
return vkGeo; return vkGeo;
} }
@@ -176,6 +179,7 @@ namespace OpenVulkano::Vulkan
uBuffer->Init(buffer, frameSize, allocSize, GetDescriptorLayoutSet(Scene::Node::DESCRIPTOR_SET_LAYOUT_BINDING), Scene::Node::DESCRIPTOR_SET_LAYOUT_BINDING, 0); uBuffer->Init(buffer, frameSize, allocSize, GetDescriptorLayoutSet(Scene::Node::DESCRIPTOR_SET_LAYOUT_BINDING), Scene::Node::DESCRIPTOR_SET_LAYOUT_BINDING, 0);
vkNode->Init(node, uBuffer); vkNode->Init(node, uBuffer);
node->renderNode = vkNode; node->renderNode = vkNode;
nodes.emplace_back(vkNode);
} }
return static_cast<VulkanNode*>(node->renderNode); return static_cast<VulkanNode*>(node->renderNode);
} }

View File

@@ -49,6 +49,8 @@ namespace OpenVulkano
vk::Semaphore* semaphores = nullptr; vk::Semaphore* semaphores = nullptr;
std::vector<std::unique_ptr<MemoryAllocation>> allocations; std::vector<std::unique_ptr<MemoryAllocation>> allocations;
std::vector<std::unique_ptr<VulkanShader>> shaders; std::vector<std::unique_ptr<VulkanShader>> shaders;
std::vector<std::unique_ptr<VulkanGeometry>> geometries;
std::vector<std::unique_ptr<VulkanNode>> nodes;
MemoryAllocation* lastAllocation = nullptr; MemoryAllocation* lastAllocation = nullptr;
std::mutex mutex; std::mutex mutex;
vk::DeviceSize uniformBufferAlignment; vk::DeviceSize uniformBufferAlignment;

View File

@@ -57,6 +57,7 @@ namespace OpenVulkano::Vulkan
void Close() override void Close() override
{ {
m_geometry->renderGeo = nullptr;
m_vertexBuffer.reset(); m_vertexBuffer.reset();
m_indexBuffer.reset(); m_indexBuffer.reset();
} }