diff options
Diffstat (limited to 'src/resources/image.cpp')
-rw-r--r-- | src/resources/image.cpp | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/resources/image.cpp b/src/resources/image.cpp new file mode 100644 index 0000000..0c51b2d --- /dev/null +++ b/src/resources/image.cpp @@ -0,0 +1,43 @@ +#include "resources/image.h" +#include "vulkan_helper.h" +#include <vulkan/vulkan_core.h> + +namespace iris { + +VkImageView Image_tt::get_image_view(const ImageViewDesc &desc) { + auto it = image_views.find(desc); + if (it != image_views.end()) { + return it->second; + } + + // Not found, create the image view + VkImageViewCreateInfo view_create_info = { + .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, + .image = handle, + .viewType = desc.view_type, + .format = desc.format, + .components = { + .r = VK_COMPONENT_SWIZZLE_IDENTITY, + .g = VK_COMPONENT_SWIZZLE_IDENTITY, + .b = VK_COMPONENT_SWIZZLE_IDENTITY, + .a = VK_COMPONENT_SWIZZLE_IDENTITY, + }, + .subresourceRange = { + .aspectMask = desc.aspect_mask, + .baseMipLevel = desc.base_mip_level, + .levelCount = desc.mip_levels, + .baseArrayLayer = desc.base_array_layer, + .layerCount = desc.array_layers, + }, + }; + VkImageView view; + CHECK_VULKAN(vkCreateImageView( + device, + &view_create_info, + nullptr, + &view)); + image_views[desc] = view; + return view; +} + +} // namespace iris
\ No newline at end of file |