TheAtlasEngine
 
Loading...
Searching...
No Matches
vk_swapchain.hpp
1#pragma once
2#include <core/utilities/types.hpp>
3#include <drivers/vulkan-cpp/vk_driver.hpp>
4#include <vulkan-cpp/command_buffer.hpp>
5#include <vulkan-cpp/framebuffer.hpp>
6#include <vulkan-cpp/renderpass.hpp>
7#include <vulkan-cpp/sample_image.hpp>
8#include <vulkan-cpp/surface.hpp>
9#include <vulkan-cpp/device_present_queue.hpp>
10#include <span>
11
12namespace atlas::vk {
20 public:
21 vk_swapchain() = default;
22
28 vk_swapchain(const VkSurfaceKHR& p_surface,
29 const window_settings& p_settings);
30
33
35 [[nodiscard]] ::vk::command_buffer active_command(
36 uint32_t p_frame_index) {
37 return m_swapchain_command_buffers[p_frame_index];
38 }
39
40 [[nodiscard]] VkFramebuffer active_framebuffer(uint32_t p_frame) const {
41 return m_swapchain_framebuffers[p_frame];
42 }
43
44 [[nodiscard]] VkRenderPass swapchain_renderpass() const {
45 return m_final_renderpass;
46 }
47
48 [[nodiscard]] window_settings settings() const {
49 return m_window_settings;
50 }
51
52 [[nodiscard]] uint32_t image_size() const { return m_image_size; }
53
54 [[nodiscard]] surface_properties data() const {
55 return m_surface_properties;
56 }
57
58 void destroy();
59
60 void submit(std::span<const VkCommandBuffer> p_command);
61
62 [[nodiscard]] ::vk::sample_image active_image(uint32_t p_index) const {
63 return m_swapchain_images[p_index];
64 }
65
66 operator VkSwapchainKHR() const { return m_swapchain_handler; }
67
68 operator VkSwapchainKHR() { return m_swapchain_handler; }
69
70 void present(const uint32_t& p_current_frame);
71
72 private:
73 void invalidate();
74 void create();
75
76 uint32_t select_images_size(const VkSurfaceCapabilitiesKHR&);
77
78 private:
79 vk_physical_driver m_physical{};
80 vk_driver m_driver{};
81 VkSurfaceKHR m_current_surface_handler = nullptr;
82 VkSwapchainKHR m_swapchain_handler = nullptr;
83 VkExtent2D m_swapchain_extent{};
84 window_settings m_window_settings{};
85
86 uint32_t m_image_size = 0;
87
88 VkSurfaceKHR m_current_surface = nullptr;
89 surface_properties m_surface_properties{};
90 std::vector<::vk::command_buffer> m_swapchain_command_buffers{};
91 std::vector<::vk::framebuffer> m_swapchain_framebuffers;
92
94 std::vector<::vk::sample_image> m_swapchain_images;
95 std::vector<::vk::sample_image> m_swapchain_depth_images;
96
97 ::vk::renderpass m_final_renderpass;
98
99 ::vk::device_present_queue m_present_to_queue;
100 };
101
102};
Definition vk_swapchain.hpp:19
::vk::command_buffer active_command(uint32_t p_frame_index)
Definition vk_swapchain.hpp:35
vk_swapchain(const VkSurfaceKHR &p_surface, const window_settings &p_settings)
Constructs a new vulkan swapchain with a window settings to apply to this swapchain.
uint32_t read_acquired_image()
settings for specification for atlas::window
Definition types.hpp:9