From 5b6fde2aafa30db3d36342e441c6ed00b93bfc01 Mon Sep 17 00:00:00 2001 From: Georg Hagen Date: Wed, 3 Jul 2024 15:54:05 +0200 Subject: [PATCH] Fix issue with freeing geometries --- openVulkanoCpp/Vulkan/Resources/ResourceManager.cpp | 4 ++++ openVulkanoCpp/Vulkan/Resources/ResourceManager.hpp | 2 ++ openVulkanoCpp/Vulkan/Scene/VulkanGeometry.hpp | 1 + 3 files changed, 7 insertions(+) diff --git a/openVulkanoCpp/Vulkan/Resources/ResourceManager.cpp b/openVulkanoCpp/Vulkan/Resources/ResourceManager.cpp index 838e80b..2e54ebc 100644 --- a/openVulkanoCpp/Vulkan/Resources/ResourceManager.cpp +++ b/openVulkanoCpp/Vulkan/Resources/ResourceManager.cpp @@ -85,6 +85,8 @@ namespace OpenVulkano::Vulkan cmdPools = nullptr; cmdBuffers = nullptr; semaphores = nullptr; + geometries.clear(); + nodes.clear(); device.destroyDescriptorPool(descriptorPool); allocations.clear(); lastAllocation = nullptr; @@ -134,6 +136,7 @@ namespace OpenVulkano::Vulkan CreateDeviceOnlyBufferWithData(Utils::EnumAsInt(geometry->indexType) * geometry->GetIndexCount(), vk::BufferUsageFlagBits::eIndexBuffer, geometry->GetIndices()), freeFunction); VulkanGeometry* vkGeo = new VulkanGeometry(geometry, vertexBuffer, indexBuffer); + geometries.emplace_back(vkGeo); geometry->renderGeo = 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); vkNode->Init(node, uBuffer); node->renderNode = vkNode; + nodes.emplace_back(vkNode); } return static_cast(node->renderNode); } diff --git a/openVulkanoCpp/Vulkan/Resources/ResourceManager.hpp b/openVulkanoCpp/Vulkan/Resources/ResourceManager.hpp index 6277af5..7c73dcf 100644 --- a/openVulkanoCpp/Vulkan/Resources/ResourceManager.hpp +++ b/openVulkanoCpp/Vulkan/Resources/ResourceManager.hpp @@ -49,6 +49,8 @@ namespace OpenVulkano vk::Semaphore* semaphores = nullptr; std::vector> allocations; std::vector> shaders; + std::vector> geometries; + std::vector> nodes; MemoryAllocation* lastAllocation = nullptr; std::mutex mutex; vk::DeviceSize uniformBufferAlignment; diff --git a/openVulkanoCpp/Vulkan/Scene/VulkanGeometry.hpp b/openVulkanoCpp/Vulkan/Scene/VulkanGeometry.hpp index 4d6c9f2..a2f2363 100644 --- a/openVulkanoCpp/Vulkan/Scene/VulkanGeometry.hpp +++ b/openVulkanoCpp/Vulkan/Scene/VulkanGeometry.hpp @@ -57,6 +57,7 @@ namespace OpenVulkano::Vulkan void Close() override { + m_geometry->renderGeo = nullptr; m_vertexBuffer.reset(); m_indexBuffer.reset(); }