15 std::vector<vk::SurfaceFormatKHR>
formats;
49 const std::vector<uint32_t>& sharing_families = {});
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);
97 vk::PhysicalDevice physical_device,
98 vk::SurfaceKHR surface);
117 const std::vector<vk::SurfaceFormatKHR>& available_formats,
125 const std::vector<vk::PresentModeKHR>& available_modes,
132 const vk::SurfaceCapabilitiesKHR& capabilities,
140 const std::vector<vk::SurfaceFormatKHR>& available_formats)
const;
High-level wrapper for Vulkan instance and device.
vk::Extent2D choose_extent(const vk::SurfaceCapabilitiesKHR &capabilities, uint32_t width, uint32_t height) const
Choose swap extent based on capabilities.
vk::PresentModeKHR choose_present_mode(const std::vector< vk::PresentModeKHR > &available_modes, GraphicsSurfaceInfo::PresentMode desired_mode) const
Choose best present mode from available modes based on config.
vk::Format get_image_format() const
vk::SwapchainKHR get_swapchain() const
const std::vector< vk::Image > & get_images() const
bool create_image_views()
Create image views for swapchain images.
VKSwapchain(const VKSwapchain &)=delete
vk::Format m_image_format
vk::Extent2D get_extent() const
static SwapchainSupportDetails query_support(vk::PhysicalDevice physical_device, vk::SurfaceKHR surface)
Query swapchain support details for a device.
bool present(uint32_t image_index, vk::Semaphore wait_semaphore, vk::Queue present_queue=nullptr)
Present image to screen.
std::optional< uint32_t > acquire_next_image(vk::Semaphore signal_semaphore, uint64_t timeout_ns=UINT64_MAX)
Acquire next image from swapchain.
VKSwapchain & operator=(const VKSwapchain &)=delete
bool recreate(uint32_t width, uint32_t height)
Recreate swapchain (for window resize)
uint32_t get_image_count() const
void cleanup()
Cleanup swapchain resources.
bool create(VKContext &context, vk::SurfaceKHR surface, const WindowCreateInfo &window_config, const std::vector< uint32_t > &sharing_families={})
Create swapchain for the given surface using VKContext.
std::optional< vk::SurfaceFormatKHR > find_hdr_format(const std::vector< vk::SurfaceFormatKHR > &available_formats) const
Find an HDR-capable format from available formats.
vk::SurfaceFormatKHR choose_surface_format(const std::vector< vk::SurfaceFormatKHR > &available_formats, GraphicsSurfaceInfo::SurfaceFormat desired_format, GraphicsSurfaceInfo::ColorSpace desired_color_space) const
Choose best surface format from available formats based on config.
void cleanup_swapchain()
Cleanup old swapchain during recreation.
const std::vector< vk::ImageView > & get_image_views() const
std::vector< vk::Image > m_images
std::vector< uint32_t > m_sharing_families
std::vector< vk::ImageView > m_image_views
const WindowCreateInfo * m_window_config
vk::SwapchainKHR m_swapchain
Manages Vulkan swapchain using C++ API (vulkan.hpp)
ColorSpace
Default color space for window surfaces.
SurfaceFormat
Default pixel format for window surfaces (Vulkan-compatible)
PresentMode
Frame presentation strategy.
std::vector< vk::PresentModeKHR > present_modes
std::vector< vk::SurfaceFormatKHR > formats
vk::SurfaceCapabilitiesKHR capabilities
Holds swapchain capability information for a physical device.
Configuration for creating a single window instance.