diff --git a/include/Nazara/Vulkan/VkDevice.inl b/include/Nazara/Vulkan/VkDevice.inl index 77dc1e254..81b784ae2 100644 --- a/include/Nazara/Vulkan/VkDevice.inl +++ b/include/Nazara/Vulkan/VkDevice.inl @@ -29,6 +29,8 @@ namespace Nz { vkDeviceWaitIdle(m_device); vkDestroyDevice(m_device, (m_allocator.pfnAllocation) ? &m_allocator : nullptr); + + m_device = nullptr; } } diff --git a/include/Nazara/Vulkan/VkDeviceObject.inl b/include/Nazara/Vulkan/VkDeviceObject.inl index a3136156c..24499a7d0 100644 --- a/include/Nazara/Vulkan/VkDeviceObject.inl +++ b/include/Nazara/Vulkan/VkDeviceObject.inl @@ -57,7 +57,10 @@ namespace Nz inline void DeviceObject::Destroy() { if (m_handle != VK_NULL_HANDLE) + { C::DestroyHelper(m_device, m_handle, (m_allocator.pfnAllocation) ? &m_allocator : nullptr); + m_handle = VK_NULL_HANDLE; + } } template diff --git a/include/Nazara/Vulkan/VkInstance.inl b/include/Nazara/Vulkan/VkInstance.inl index 801691855..bea7164fb 100644 --- a/include/Nazara/Vulkan/VkInstance.inl +++ b/include/Nazara/Vulkan/VkInstance.inl @@ -50,7 +50,10 @@ namespace Nz inline void Instance::Destroy() { if (m_instance) + { vkDestroyInstance(m_instance, (m_allocator.pfnAllocation) ? &m_allocator : nullptr); + m_instance = nullptr; + } } inline PFN_vkVoidFunction Instance::GetDeviceProcAddr(VkDevice device, const char* name) diff --git a/include/Nazara/Vulkan/VkSurface.inl b/include/Nazara/Vulkan/VkSurface.inl index f64c24af0..a79d9c65d 100644 --- a/include/Nazara/Vulkan/VkSurface.inl +++ b/include/Nazara/Vulkan/VkSurface.inl @@ -165,7 +165,10 @@ namespace Nz inline void Surface::Destroy() { if (m_surface != VK_NULL_HANDLE) + { m_instance.vkDestroySurfaceKHR(m_instance, m_surface, (m_allocator.pfnAllocation) ? &m_allocator : nullptr); + m_surface = VK_NULL_HANDLE; + } } inline VkResult Surface::GetLastErrorCode() const