Program Listing for File VulkanImageView.cpp

Program Listing for File VulkanImageView.cpp#

Return to documentation for file (Src/GraphicsEngineVulkan/vulkan_base/VulkanImageView.cpp)

module;

#include "common/Utilities.hpp"
#include <cstdint>
#include <utility>
#include <vulkan/vulkan.hpp>

module kataglyphis.vulkan.image_view;

import kataglyphis.vulkan.device;

Kataglyphis::VulkanImageView::VulkanImageView() = default;

Kataglyphis::VulkanImageView::VulkanImageView(VulkanImageView &&other) noexcept
  : device(other.device), imageView(other.imageView)
{
    other.device = nullptr;
    other.imageView = nullptr;
}

auto Kataglyphis::VulkanImageView::operator=(VulkanImageView &&other) noexcept -> VulkanImageView &
{
    if (this != &other) {
        cleanUp();

        device = other.device;
        imageView = other.imageView;

        other.device = nullptr;
        other.imageView = nullptr;
    }

    return *this;
}

void Kataglyphis::VulkanImageView::setImageView(vk::ImageView in_imageView) { this->imageView = in_imageView; }

void Kataglyphis::VulkanImageView::create(VulkanDevice *in_device,
  vk::Image image,
  vk::Format format,
  vk::ImageAspectFlags aspect_flags,
  uint32_t mip_levels)
{
    this->device = in_device;

    vk::ImageViewCreateInfo view_create_info{};
    view_create_info.image = image;// image to create view for
    view_create_info.viewType = vk::ImageViewType::e2D;// typ of image
    view_create_info.format = format;
    view_create_info.components.r = vk::ComponentSwizzle::eIdentity;// allows remapping of rgba components to
                                                                    // other rgba values
    view_create_info.components.g = vk::ComponentSwizzle::eIdentity;
    view_create_info.components.b = vk::ComponentSwizzle::eIdentity;
    view_create_info.components.a = vk::ComponentSwizzle::eIdentity;

    // subresources allow the view to view only a part of an image
    view_create_info.subresourceRange.aspectMask = aspect_flags;// which aspect of an image to view (e.g. color bit for
                                                                // viewing color)
    view_create_info.subresourceRange.baseMipLevel = 0;// start mipmap level to view from
    view_create_info.subresourceRange.levelCount = mip_levels;// number of mipmap levels to view
    view_create_info.subresourceRange.baseArrayLayer = 0;// start array level to view from
    view_create_info.subresourceRange.layerCount = 1;// number of array levels to view

    // create image view
    imageView = device->getLogicalDevice().createImageView(view_create_info).value;
}

void Kataglyphis::VulkanImageView::cleanUp()
{
    if (device != nullptr && imageView) { device->getLogicalDevice().destroyImageView(imageView); }

    imageView = nullptr;
}

Kataglyphis::VulkanImageView::~VulkanImageView() = default;