Program Listing for File Texture.hpp

Return to documentation for file (Src/GraphicsEngineVulkan/scene/Texture.hpp)

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

#include <string>

#include "vulkan_base/VulkanBuffer.hpp"
#include "vulkan_base/VulkanBufferManager.hpp"
#include "vulkan_base/VulkanImage.hpp"
#include "vulkan_base/VulkanImageView.hpp"
namespace Kataglyphis {
class Texture
{
  public:
    Texture();

    void createFromFile(VulkanDevice *device, VkCommandPool commandPool, const std::string &fileName);

    void setImage(VkImage image);
    void setImageView(VkImageView imageView);

    uint32_t getMipLevel() { return mip_levels; };
    VulkanImage &getVulkanImage() { return vulkanImage; };
    VulkanImageView &getVulkanImageView() { return vulkanImageView; };
    VkImage &getImage() { return vulkanImage.getImage(); };
    VkImageView &getImageView() { return vulkanImageView.getImageView(); };

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

    void createImageView(VulkanDevice *device, VkFormat format, VkImageAspectFlags aspect_flags, uint32_t mip_levels);

    void cleanUp();

    ~Texture();

  private:
    uint32_t mip_levels = 0;

    stbi_uc *loadTextureData(const std::string &file_name, int *width, int *height, VkDeviceSize *image_size);

    void generateMipMaps(VkPhysicalDevice physical_device,
      VkDevice device,
      VkCommandPool command_pool,
      VkQueue queue,
      VkImage image,
      VkFormat image_format,
      int32_t width,
      int32_t height,
      uint32_t mip_levels);

    Kataglyphis::VulkanRendererInternals::CommandBufferManager commandBufferManager;
    VulkanBufferManager vulkanBufferManager;

    VulkanImage vulkanImage;
    VulkanImageView vulkanImageView;
};
}// namespace Kataglyphis