Free resources when VulkanGeometry is freed

This commit is contained in:
2021-01-09 22:56:17 +01:00
parent 412613c757
commit 5afb752fca
4 changed files with 28 additions and 13 deletions

View File

@@ -14,18 +14,18 @@ namespace openVulkanoCpp::Vulkan
class VulkanGeometry final : virtual public ICloseable
{
Scene::Geometry* m_geometry;
ManagedBuffer* m_vertexBuffer;
ManagedBuffer* m_indexBuffer;
ManagedBuffer::Ptr m_vertexBuffer;
ManagedBuffer::Ptr m_indexBuffer;
vk::IndexType m_indexType;
vk::DeviceSize m_offsets = 0;
public:
VulkanGeometry() : m_geometry(nullptr), m_vertexBuffer(nullptr)
, m_indexBuffer(nullptr), m_indexType(vk::IndexType::eUint32)
VulkanGeometry() : m_geometry(nullptr), m_vertexBuffer(nullptr, nullptr)
, m_indexBuffer(nullptr, nullptr), m_indexType(vk::IndexType::eUint32)
{}
VulkanGeometry(Scene::Geometry* geo, ManagedBuffer* vertexBuffer, ManagedBuffer* indexBuffer)
: m_geometry(geo), m_vertexBuffer(vertexBuffer), m_indexBuffer(indexBuffer)
VulkanGeometry(Scene::Geometry* geo, ManagedBuffer::Ptr& vertexBuffer, ManagedBuffer::Ptr& indexBuffer)
: m_geometry(geo), m_vertexBuffer(std::move(vertexBuffer)), m_indexBuffer(std::move(indexBuffer))
, m_indexType((geo->indexType == Scene::VertexIndexType::UINT16) ? vk::IndexType::eUint16 : vk::IndexType::eUint32)
{}
@@ -34,11 +34,11 @@ namespace openVulkanoCpp::Vulkan
if (m_vertexBuffer) VulkanGeometry::Close();
}
void Init(Scene::Geometry* geo, ManagedBuffer* vertexBuffer, ManagedBuffer* indexBuffer)
void Init(Scene::Geometry* geo, ManagedBuffer::Ptr& vertexBuffer, ManagedBuffer::Ptr& indexBuffer)
{
m_geometry = geo;
m_vertexBuffer = vertexBuffer;
m_indexBuffer = indexBuffer;
m_vertexBuffer = std::move(vertexBuffer);
m_indexBuffer = std::move(indexBuffer);
m_indexType = (geo->indexType == Scene::VertexIndexType::UINT16) ? vk::IndexType::eUint16 : vk::IndexType::eUint32;
}
@@ -55,6 +55,8 @@ namespace openVulkanoCpp::Vulkan
void Close() override
{
m_vertexBuffer.reset();
m_indexBuffer.reset();
}
};
}