14class VulkanSwapchain {
16 VulkanSwapchain(
const VulkanCore& core, vk::raii::SurfaceKHR& surface, vk::Extent2D preferred_extent);
17 ~VulkanSwapchain() =
default;
19 VulkanSwapchain(
const VulkanSwapchain&) =
delete;
20 auto operator=(
const VulkanSwapchain&) -> VulkanSwapchain& =
delete;
21 VulkanSwapchain(VulkanSwapchain&&) =
delete;
22 auto operator=(VulkanSwapchain&&) -> VulkanSwapchain& =
delete;
24 void recreate(vk::Extent2D preferred_extent);
27 auto getExtent()
const -> vk::Extent2D {
32 auto getColorFormat()
const -> vk::Format {
33 return m_image_format;
37 auto getImageCount()
const -> uint32_t {
38 return static_cast<uint32_t
>(m_images.size());
42 auto getImage(uint32_t index)
const ->
const vk::Image& {
43 return m_images.at(index);
47 auto getColorAttachment(uint32_t index)
const ->
const vk::raii::ImageView& {
48 return m_image_views.at(index);
52 auto acquireNextImage(uint64_t timeout, vk::Semaphore image_available, vk::Fence in_flight_fence)
const
53 -> vk::ResultValue<uint32_t>;
55 auto present(uint32_t image_index, vk::Semaphore render_finished)
const -> vk::Result;
58 void create(vk::Extent2D preferred_extent);
60 auto findPresentQueueFamilyIndex()
const -> uint32_t;
62 auto selectSurfaceFormat(
const std::vector<vk::SurfaceFormatKHR>& formats)
const -> vk::SurfaceFormatKHR;
64 auto selectPresentMode(
const std::vector<vk::PresentModeKHR>& modes)
const -> vk::PresentModeKHR;
66 auto selectExtent(
const vk::SurfaceCapabilitiesKHR& capabilities, vk::Extent2D preferred_extent)
const -> vk::Extent2D;
69 vk::raii::SurfaceKHR* m_surface =
nullptr;
71 vk::raii::SwapchainKHR m_swapchain =
nullptr;
72 std::vector<vk::Image> m_images;
73 std::vector<vk::raii::ImageView> m_image_views;
75 vk::Extent2D m_extent;
76 vk::Format m_image_format = vk::Format::eUndefined;
77 uint32_t m_present_queue_family_index = 0;
78 vk::Queue m_present_queue =
nullptr;