diff --git a/liblava/resource/image_array.cpp b/liblava/resource/image_array.cpp index 7e627b2a012ed4cf911211f3592bc4ec6dc938ca..69065ef054347b8a8da2689f6429c6ba241b11d1 100644 --- a/liblava/resource/image_array.cpp +++ b/liblava/resource/image_array.cpp @@ -70,7 +70,20 @@ namespace lava { view_info.image = vk_image; view_info.subresourceRange = subresource_range; - return device->vkCreateImageView(&view_info, &view); + if (!device->vkCreateImageView(&view_info, &view)) { + return false; + } + + layer_views.resize(layer_count); + for (uint32_t i = 0; i < layer_count; ++i) { + view_info.subresourceRange.baseArrayLayer = i; + view_info.subresourceRange.layerCount = 1; + if (!device->vkCreateImageView(&view_info, &layer_views[i])) { + return false; + } + } + + return true; } void image_array::destroy(bool view_only) { @@ -78,6 +91,12 @@ namespace lava { device->vkDestroyImageView(view); view = 0; } + for (auto& layer_view : layer_views) { + if (layer_view) { + device->vkDestroyImageView(layer_view); + layer_view = 0; + } + } if (view_only) return; diff --git a/liblava/resource/image_array.hpp b/liblava/resource/image_array.hpp index 09a0529120775e8a41dc969e6b905cc9a105546e..56a4c04910955c427c8d95fc4e98c2067e549545 100644 --- a/liblava/resource/image_array.hpp +++ b/liblava/resource/image_array.hpp @@ -41,6 +41,9 @@ namespace lava { VkImageView get_view() const { return view; } + VkImageView get_layer_view(uint32_t layer_index) const { + return layer_views[layer_index]; + } VkImageCreateInfo const& get_info() const { return info; @@ -94,6 +97,7 @@ namespace lava { VmaAllocation allocation = nullptr; VkImageView view = VK_NULL_HANDLE; + std::vector<VkImageView> layer_views; VkImageViewCreateInfo view_info; VkImageSubresourceRange subresource_range;