Fix issue with freeing geometries
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user