40 template <typename VulkanObjectType, VulkanHandleTypeId>
41 class VulkanObjectWrapper
48 m_pLogicalDevice{
nullptr },
49 m_VkObject {VK_NULL_HANDLE}
52 VulkanObjectWrapper(std::shared_ptr<const VulkanLogicalDevice> pLogicalDevice, VulkanObjectType&& vkObject) :
53 m_pLogicalDevice{pLogicalDevice},
54 m_VkObject {vkObject }
56 vkObject = VK_NULL_HANDLE;
64 VulkanObjectWrapper (
const VulkanObjectWrapper&) =
delete;
65 VulkanObjectWrapper& operator = (
const VulkanObjectWrapper&) =
delete;
68 m_pLogicalDevice{std::move(rhs.m_pLogicalDevice)},
69 m_VkObject {rhs.m_VkObject }
71 rhs.m_VkObject = VK_NULL_HANDLE;
79 m_pLogicalDevice = std::move(rhs.m_pLogicalDevice);
80 m_VkObject = rhs.m_VkObject;
81 rhs.m_VkObject = VK_NULL_HANDLE;
85 operator VulkanObjectType()
const
98 if (m_pLogicalDevice && m_VkObject != VK_NULL_HANDLE)
100 m_pLogicalDevice->ReleaseVulkanObject(std::move(*
this));
102 m_VkObject = VK_NULL_HANDLE;
103 m_pLogicalDevice.reset();
114 std::shared_ptr<const VulkanLogicalDevice> m_pLogicalDevice;
115 VulkanObjectType m_VkObject;