2#ifndef LIBSBX_GRAPHICS_SWAPCHAIN_SWAPCHAIN_HPP_
3#define LIBSBX_GRAPHICS_SWAPCHAIN_SWAPCHAIN_HPP_
9#include <vulkan/vulkan.hpp>
11#include <libsbx/memory/tracking_allocator.hpp>
13namespace sbx::graphics {
19 static constexpr auto max_frames_in_flight = std::uint32_t{2};
21 swapchain(
const std::unique_ptr<swapchain>& old_swapchain =
nullptr);
25 auto handle()
const noexcept ->
const VkSwapchainKHR&;
27 operator const VkSwapchainKHR&()
const noexcept;
29 auto extent()
const noexcept ->
const VkExtent2D&;
31 auto is_outdated(
const VkExtent2D& extent)
const noexcept ->
bool {
32 return _extent.width != extent.width || _extent.height != extent.height;
35 auto active_image_index()
const noexcept -> std::uint32_t;
37 auto image_count()
const noexcept -> std::uint32_t;
39 auto pre_transform()
const noexcept -> VkSurfaceTransformFlagsKHR;
41 auto composite_alpha()
const noexcept -> VkCompositeAlphaFlagBitsKHR;
43 auto present_mode()
const noexcept -> VkPresentModeKHR;
45 auto image(std::uint32_t index)
const noexcept ->
const VkImage&;
47 auto image_view(std::uint32_t index)
const noexcept ->
const VkImageView&;
49 auto acquire_next_image(
const VkSemaphore& image_available_semaphore =
nullptr,
const VkFence& fence =
nullptr) -> VkResult;
51 auto present(
const VkSemaphore& wait_semaphore =
nullptr) -> VkResult;
53 auto format()
const noexcept -> VkFormat {
59 auto _choose_present_mode()
const -> VkPresentModeKHR;
61 auto _create_image_view(
const VkImage&
image, VkFormat format, VkImageAspectFlags aspect, VkImageView& image_view) -> void;
64 VkPresentModeKHR _present_mode{};
67 std::uint32_t _active_image_index{};
68 std::uint32_t _image_count{};
70 VkSurfaceTransformFlagsKHR _pre_transform{};
71 VkCompositeAlphaFlagBitsKHR _composite_alpha{};
73 std::vector<VkImage> _images{};
74 std::vector<VkImageView> _image_views{};
76 VkSwapchainKHR _handle{};
Definition: swapchain.hpp:15