47 bool create(
VKContext& context, vk::SurfaceKHR surface,
49 const std::vector<uint32_t>& sharing_families = {});
70 std::optional<uint32_t> acquire_next_image(
71 vk::Semaphore signal_semaphore,
72 uint64_t timeout_ns = UINT64_MAX);
81 bool present(uint32_t image_index,
82 vk::Semaphore wait_semaphore,
83 vk::Queue present_queue =
nullptr);
86 [[nodiscard]] vk::SwapchainKHR
get_swapchain()
const {
return m_swapchain; }
88 [[nodiscard]] vk::Extent2D
get_extent()
const {
return m_extent; }
89 [[nodiscard]] uint32_t
get_image_count()
const {
return static_cast<uint32_t
>(m_images.size()); }
90 [[nodiscard]]
const std::vector<vk::Image>&
get_images()
const {
return m_images; }
91 [[nodiscard]]
const std::vector<vk::ImageView>&
get_image_views()
const {
return m_image_views; }
97 vk::PhysicalDevice physical_device,
98 vk::SurfaceKHR surface);
116 [[nodiscard]] vk::SurfaceFormatKHR choose_surface_format(
117 const std::vector<vk::SurfaceFormatKHR>& available_formats,
124 [[nodiscard]] vk::PresentModeKHR choose_present_mode(
125 const std::vector<vk::PresentModeKHR>& available_modes,
131 [[nodiscard]] vk::Extent2D choose_extent(
132 const vk::SurfaceCapabilitiesKHR& capabilities,
139 [[nodiscard]] std::optional<vk::SurfaceFormatKHR> find_hdr_format(
140 const std::vector<vk::SurfaceFormatKHR>& available_formats)
const;
145 bool create_image_views();
150 void cleanup_swapchain();
High-level wrapper for Vulkan instance and device.