Vulkan resource deallocation function for texture class

This commit is contained in:
saschawillems 2017-01-07 21:52:59 +01:00
parent ebd614439f
commit 93bdd86917

View file

@ -24,6 +24,7 @@ namespace vkTools
*/ */
struct VulkanTexture struct VulkanTexture
{ {
VkDevice device;
VkSampler sampler; VkSampler sampler;
VkImage image; VkImage image;
VkImageLayout imageLayout; VkImageLayout imageLayout;
@ -41,6 +42,18 @@ namespace vkTools
descriptor.imageView = view; descriptor.imageView = view;
descriptor.imageLayout = imageLayout; descriptor.imageLayout = imageLayout;
} }
/** @brief Release all Vulkan resources held by this texture */
void destroy()
{
vkDestroyImageView(device, view, nullptr);
vkDestroyImage(device, image, nullptr);
if (sampler)
{
vkDestroySampler(device, sampler, nullptr);
}
vkFreeMemory(device, deviceMemory, nullptr);
}
}; };
/** /**
@ -134,6 +147,7 @@ namespace vkTools
#endif #endif
assert(!tex2D.empty()); assert(!tex2D.empty());
texture->device = vulkanDevice->logicalDevice;
texture->width = static_cast<uint32_t>(tex2D[0].dimensions().x); texture->width = static_cast<uint32_t>(tex2D[0].dimensions().x);
texture->height = static_cast<uint32_t>(tex2D[0].dimensions().y); texture->height = static_cast<uint32_t>(tex2D[0].dimensions().y);
texture->mipLevels = static_cast<uint32_t>(tex2D.levels()); texture->mipLevels = static_cast<uint32_t>(tex2D.levels());
@ -464,6 +478,7 @@ namespace vkTools
#endif #endif
assert(!texCube.empty()); assert(!texCube.empty());
texture->device = vulkanDevice->logicalDevice;
texture->width = static_cast<uint32_t>(texCube.dimensions().x); texture->width = static_cast<uint32_t>(texCube.dimensions().x);
texture->height = static_cast<uint32_t>(texCube.dimensions().y); texture->height = static_cast<uint32_t>(texCube.dimensions().y);
texture->mipLevels = static_cast<uint32_t>(texCube.levels()); texture->mipLevels = static_cast<uint32_t>(texCube.levels());
@ -687,6 +702,7 @@ namespace vkTools
assert(!tex2DArray.empty()); assert(!tex2DArray.empty());
texture->device = vulkanDevice->logicalDevice;
texture->width = static_cast<uint32_t>(tex2DArray.dimensions().x); texture->width = static_cast<uint32_t>(tex2DArray.dimensions().x);
texture->height = static_cast<uint32_t>(tex2DArray.dimensions().y); texture->height = static_cast<uint32_t>(tex2DArray.dimensions().y);
texture->layerCount = static_cast<uint32_t>(tex2DArray.layers()); texture->layerCount = static_cast<uint32_t>(tex2DArray.layers());
@ -892,6 +908,7 @@ namespace vkTools
{ {
assert(buffer); assert(buffer);
texture->device = vulkanDevice->logicalDevice;
texture->width = width; texture->width = width;
texture->height = height; texture->height = height;
texture->mipLevels = 1; texture->mipLevels = 1;