Program Listing for File VulkanImage.hpp

Return to documentation for file (Src/GraphicsEngineVulkan/vulkan_base/VulkanImage.hpp)

#pragma once
#include <vulkan/vulkan.h>

#include "renderer/CommandBufferManager.hpp"
#include "vulkan_base/VulkanDevice.hpp"

namespace Kataglyphis {
class VulkanImage
{
  public:
    VulkanImage();

    void create(VulkanDevice *device,
      uint32_t width,
      uint32_t height,
      uint32_t mip_levels,
      VkFormat format,
      VkImageTiling tiling,
      VkImageUsageFlags use_flags,
      VkMemoryPropertyFlags prop_flags);

    void transitionImageLayout(VkDevice device,
      VkQueue queue,
      VkCommandPool command_pool,
      VkImageLayout old_layout,
      VkImageLayout new_layout,
      VkImageAspectFlags aspectMask,
      uint32_t mip_levels);

    void transitionImageLayout(VkCommandBuffer command_buffer,
      VkImageLayout old_layout,
      VkImageLayout new_layout,
      uint32_t mip_levels,
      VkImageAspectFlags aspectMask);

    void setImage(VkImage image);
    VkImage &getImage() { return image; };

    void cleanUp();

    ~VulkanImage();

  private:
    VulkanDevice *device{ VK_NULL_HANDLE };
    Kataglyphis::VulkanRendererInternals::CommandBufferManager commandBufferManager;

    VkImage image;
    VkDeviceMemory imageMemory;

    VkAccessFlags accessFlagsForImageLayout(VkImageLayout layout);
    VkPipelineStageFlags pipelineStageForLayout(VkImageLayout oldImageLayout);
};
}// namespace Kataglyphis