1#ifndef LIBSBX_GRAPHICS_SWAPCHAIN_SWAPCHAIN_HPP_
2#define LIBSBX_GRAPHICS_SWAPCHAIN_SWAPCHAIN_HPP_
8#include <vulkan/vulkan.hpp>
10namespace sbx::graphics {
16 static constexpr auto max_frames_in_flight = std::uint32_t{2};
18 swapchain(
const std::unique_ptr<swapchain>& old_swapchain =
nullptr);
22 auto handle()
const noexcept ->
const VkSwapchainKHR&;
24 operator const VkSwapchainKHR&()
const noexcept;
26 auto extent()
const noexcept ->
const VkExtent2D&;
28 auto is_outdated(
const VkExtent2D& extent)
const noexcept ->
bool {
29 return _extent.width != extent.width || _extent.height != extent.height;
32 auto active_image_index()
const noexcept -> std::uint32_t;
34 auto image_count()
const noexcept -> std::uint32_t;
36 auto pre_transform()
const noexcept -> VkSurfaceTransformFlagsKHR;
38 auto composite_alpha()
const noexcept -> VkCompositeAlphaFlagBitsKHR;
40 auto present_mode()
const noexcept -> VkPresentModeKHR;
42 auto image(std::uint32_t index)
const noexcept ->
const VkImage&;
44 auto image_view(std::uint32_t index)
const noexcept ->
const VkImageView&;
46 auto acquire_next_image(
const VkSemaphore& image_available_semaphore =
nullptr,
const VkFence&
fence =
nullptr) -> VkResult;
48 auto present(
const VkSemaphore& wait_semaphore =
nullptr) -> VkResult;
52 auto _choose_present_mode()
const -> VkPresentModeKHR;
54 auto _create_image_view(
const VkImage&
image, VkFormat format, VkImageAspectFlags aspect, VkImageView& image_view) -> void;
57 VkPresentModeKHR _present_mode{};
60 std::uint32_t _active_image_index{};
61 std::uint32_t _image_count{};
63 VkSurfaceTransformFlagsKHR _pre_transform{};
64 VkCompositeAlphaFlagBitsKHR _composite_alpha{};
66 std::vector<VkImage> _images{};
67 std::vector<VkImageView> _image_views{};
69 VkSwapchainKHR _handle{};
Definition: swapchain.hpp:12