Program Listing for File VulkanSwapChain.ixx

Program Listing for File VulkanSwapChain.ixx#

Return to documentation for file (Src/GraphicsEngineVulkan/vulkan_base/VulkanSwapChain.ixx)

module;

#include <vector>
#include <vulkan/vulkan.hpp>

export module kataglyphis.vulkan.swapchain;

import kataglyphis.vulkan.device;
import kataglyphis.vulkan.texture;
import kataglyphis.vulkan.window;

export namespace Kataglyphis {
class VulkanSwapChain
{
  public:
    VulkanSwapChain();

    void initVulkanContext(VulkanDevice *in_device, Kataglyphis::Frontend::Window *window, const vk::SurfaceKHR &surface);

    const vk::SwapchainKHR &getSwapChain() const { return swapchain; };
    uint32_t getNumberSwapChainImages() const { auto __tmp_sz = swap_chain_images.size(); return static_cast<uint32_t>(__tmp_sz); };
    const vk::Extent2D &getSwapChainExtent() const { return swap_chain_extent; };
    const vk::Format &getSwapChainFormat() const { return swap_chain_image_format; };
    Texture &getSwapChainImage(uint32_t index) { return swap_chain_images[index]; };

    void cleanUp();

    ~VulkanSwapChain();

  private:
    VulkanDevice *device{ nullptr };
    Kataglyphis::Frontend::Window *window{ nullptr };

    vk::SwapchainKHR swapchain{};

    std::vector<Texture> swap_chain_images;
    vk::Format swap_chain_image_format{ vk::Format::eB8G8R8A8Unorm };
    vk::Extent2D swap_chain_extent{ 0, 0 };

    static vk::SurfaceFormatKHR choose_best_surface_format(const std::vector<vk::SurfaceFormatKHR> &formats);
    static vk::PresentModeKHR choose_best_presentation_mode(const std::vector<vk::PresentModeKHR> &presentation_modes);
    vk::Extent2D choose_swap_extent(const vk::SurfaceCapabilitiesKHR &surface_capabilities);
};
}// namespace Kataglyphis