Toast Engine
Loading...
Searching...
No Matches
vulkan_swapchain.hpp
1
4
5#pragma once
6
7#include "vulkan_common.hpp"
8#include "vulkan_core.hpp"
9
10#include <vector>
11
12namespace renderer {
13
14class VulkanSwapchain {
15public:
16 VulkanSwapchain(const VulkanCore& core, vk::raii::SurfaceKHR& surface, vk::Extent2D preferred_extent);
17 ~VulkanSwapchain() = default;
18
19 VulkanSwapchain(const VulkanSwapchain&) = delete;
20 auto operator=(const VulkanSwapchain&) -> VulkanSwapchain& = delete;
21 VulkanSwapchain(VulkanSwapchain&&) = delete;
22 auto operator=(VulkanSwapchain&&) -> VulkanSwapchain& = delete;
23
24 void recreate(vk::Extent2D preferred_extent);
25
26 [[nodiscard]]
27 auto getExtent() const -> vk::Extent2D {
28 return m_extent;
29 }
30
31 [[nodiscard]]
32 auto getColorFormat() const -> vk::Format {
33 return m_image_format;
34 }
35
36 [[nodiscard]]
37 auto getImageCount() const -> uint32_t {
38 return static_cast<uint32_t>(m_images.size());
39 }
40
41 [[nodiscard]]
42 auto getImage(uint32_t index) const -> const vk::Image& {
43 return m_images.at(index);
44 }
45
46 [[nodiscard]]
47 auto getColorAttachment(uint32_t index) const -> const vk::raii::ImageView& {
48 return m_image_views.at(index);
49 }
50
51 [[nodiscard]]
52 auto acquireNextImage(uint64_t timeout, vk::Semaphore image_available, vk::Fence in_flight_fence) const
53 -> vk::ResultValue<uint32_t>;
54 [[nodiscard]]
55 auto present(uint32_t image_index, vk::Semaphore render_finished) const -> vk::Result;
56
57private:
58 void create(vk::Extent2D preferred_extent);
59 [[nodiscard]]
60 auto findPresentQueueFamilyIndex() const -> uint32_t;
61 [[nodiscard]]
62 auto selectSurfaceFormat(const std::vector<vk::SurfaceFormatKHR>& formats) const -> vk::SurfaceFormatKHR;
63 [[nodiscard]]
64 auto selectPresentMode(const std::vector<vk::PresentModeKHR>& modes) const -> vk::PresentModeKHR;
65 [[nodiscard]]
66 auto selectExtent(const vk::SurfaceCapabilitiesKHR& capabilities, vk::Extent2D preferred_extent) const -> vk::Extent2D;
67
68 const VulkanCore* m_core = nullptr;
69 vk::raii::SurfaceKHR* m_surface = nullptr;
70
71 vk::raii::SwapchainKHR m_swapchain = nullptr;
72 std::vector<vk::Image> m_images;
73 std::vector<vk::raii::ImageView> m_image_views;
74
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;
79};
80
81}
Definition vulkan_core.hpp:48