From ff0b1feca80155d16ac84b4407f275fa3399cc12 Mon Sep 17 00:00:00 2001 From: GeorgH93 Date: Mon, 15 Jul 2024 14:28:58 +0200 Subject: [PATCH] Fix crash on windows because msvc does not like forward declarations of deleter classes --- openVulkanoCpp/Vulkan/Resources/ManagedBuffer.hpp | 4 ++++ openVulkanoCpp/Vulkan/Resources/MemoryPool.cpp | 7 ++++++- openVulkanoCpp/Vulkan/Resources/MemoryPool.hpp | 14 +++++--------- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/openVulkanoCpp/Vulkan/Resources/ManagedBuffer.hpp b/openVulkanoCpp/Vulkan/Resources/ManagedBuffer.hpp index 86c1629..998a7fc 100644 --- a/openVulkanoCpp/Vulkan/Resources/ManagedBuffer.hpp +++ b/openVulkanoCpp/Vulkan/Resources/ManagedBuffer.hpp @@ -27,6 +27,10 @@ namespace OpenVulkano::Vulkan vk::MemoryPropertyFlags properties; void* mapped = nullptr; + ManagedBuffer(MemoryAllocation* alloc, vk::DeviceSize offset, vk::DeviceSize size, vk::Buffer buffer, vk::BufferUsageFlags usageFlags, vk::MemoryPropertyFlags memProperties) + : allocation(alloc), offset(offset), size(size), buffer(buffer), usage(usageFlags), properties(memProperties), mapped(nullptr) + {} + ~ManagedBuffer() { allocation->device.destroy(buffer); diff --git a/openVulkanoCpp/Vulkan/Resources/MemoryPool.cpp b/openVulkanoCpp/Vulkan/Resources/MemoryPool.cpp index 6fe32c5..4292dc3 100644 --- a/openVulkanoCpp/Vulkan/Resources/MemoryPool.cpp +++ b/openVulkanoCpp/Vulkan/Resources/MemoryPool.cpp @@ -131,7 +131,7 @@ namespace OpenVulkano::Vulkan uint32_t offset = Utils::Align(allocation->used, memoryRequirements.alignment); device->device.bindBufferMemory(buffer, allocation->memory, offset); allocation->used += size + (offset - allocation->used); - return ManagedBufferPtr{ new ManagedBuffer({allocation, offset, size, buffer, usage, properties, nullptr}) }; + return ManagedBufferPtr{ new ManagedBuffer(allocation, offset, size, buffer, usage, properties) }; } MemoryPool::ManagedBufferPtr MemoryPool::CreateSharedMemoryBuffer(size_t size) @@ -150,4 +150,9 @@ namespace OpenVulkano::Vulkan } return CreateBuffer(size, vk::BufferUsageFlagBits::eVertexBuffer, vk::MemoryPropertyFlagBits::eHostCoherent/* | vk::MemoryPropertyFlagBits::eDeviceLocal*/); } + + void ManagedBufferDeleter::operator()(ManagedBuffer* buffer) + { + MemoryPool::ReleaseBuffer(buffer); + } } diff --git a/openVulkanoCpp/Vulkan/Resources/MemoryPool.hpp b/openVulkanoCpp/Vulkan/Resources/MemoryPool.hpp index abd75df..2d5129e 100644 --- a/openVulkanoCpp/Vulkan/Resources/MemoryPool.hpp +++ b/openVulkanoCpp/Vulkan/Resources/MemoryPool.hpp @@ -17,7 +17,11 @@ namespace OpenVulkano::Vulkan class Device; class MemoryAllocation; class ManagedBuffer; - struct ManagedBufferDeleter; + + struct ManagedBufferDeleter + { + void operator()(ManagedBuffer* buffer); + }; class MemoryPool { @@ -55,12 +59,4 @@ namespace OpenVulkano::Vulkan static void ReleaseBuffer(ManagedBuffer* buffer); }; - - struct ManagedBufferDeleter - { - void operator()(ManagedBuffer* buffer) - { - MemoryPool::ReleaseBuffer(buffer); - } - }; } \ No newline at end of file