nngn
Loading...
Searching...
No Matches
swapchain.h
Go to the documentation of this file.
1#ifndef NNGN_GRAPHICS_VULKAN_SWAPCHAIN_H
2#define NNGN_GRAPHICS_VULKAN_SWAPCHAIN_H
3
4#include <span>
5#include <tuple>
6
7#include "graphics/graphics.h"
8
9#include "resource.h"
10#include "vulkan.h"
11
12namespace nngn {
13
14class Device;
15class DeviceMemory;
16class Instance;
17
19class SwapChain {
20public:
26 std::uint32_t img_idx;
29 };
31 SwapChain(void) = default;
32 ~SwapChain(void);
33 VkSwapchainKHR id(void) const { return this->h; }
34 VkSurfaceKHR surface(void) const { return this->m_surface; }
36 std::span<const VkImageView> img_views() const
37 { return std::span{this->m_img_views}; }
39 std::span<const VkFramebuffer> frame_buffers() const
40 { return std::span{this->m_frame_buffers}; }
41 std::size_t cur_frame() const { return this->i_frame; }
43 void set_present_mode(VkPresentModeKHR m) { this->present_mode = m; }
44 void set_surface(VkSurfaceKHR s) { this->m_surface = s; }
45 void init(
46 VkInstance inst, DeviceMemory *dev_mem,
47 VkSurfaceFormatKHR format, VkFormat depth_format,
48 VkPresentModeKHR mode);
50 bool recreate(
51 const Instance &inst, const Device &dev, std::uint32_t n_images,
52 VkRenderPass render_pass, VkExtent2D extent,
53 VkSurfaceTransformFlagBitsKHR transform);
55 std::pair<PresentContext, VkResult> acquire_img();
56private:
57 bool create_img_views(const Instance &inst);
58 bool create_depth_img(const Instance &inst, VkExtent2D extent);
59 bool create_sync_objects(const Instance &inst);
61 const Instance &inst, VkExtent2D extent, VkRenderPass render_pass);
62 void destroy();
63 VkSwapchainKHR h = {};
64 VkInstance instance = {};
65 VkSurfaceKHR m_surface = {};
66 VkDevice dev = {};
68 VkSurfaceFormatKHR format = {};
69 VkPresentModeKHR present_mode = {};
70 std::vector<VkImageView> m_img_views = {};
71 VkFormat depth_format = {};
74 struct {
76 std::vector<VkSemaphore> render;
78 std::vector<VkSemaphore> present;
79 } semaphores = {};
80 struct {
82 std::vector<VkFence> render;
88 std::vector<VkFence> present;
89 } fences = {};
90 std::vector<VkFramebuffer> m_frame_buffers = {};
91 std::size_t i_frame = {};
92};
93
96 VkSurfaceTransformFlagBitsKHR cur_transform = {};
97 std::vector<VkSurfaceFormatKHR> formats = {};
98 std::vector<Graphics::PresentMode> present_modes = {};
100 void init(VkSurfaceKHR s, VkPhysicalDevice d);
102 VkSurfaceFormatKHR find_format(VkSurfaceFormatKHR f) const;
104 VkPresentModeKHR find_present_mode(Graphics::PresentMode m) const;
105};
106
107}
108
109#endif
Manages device memory queries, allocations, and lifetime.
Definition: memory.h:20
Owning wrapper for a VkDevice.
Definition: device.h:16
Owning wrapper for a Vulkan instance.
Definition: instance.h:19
Presentation swap chain and associated objects.
Definition: swapchain.h:19
void set_present_mode(VkPresentModeKHR m)
Changes the presentation mode used on the next recreate.
Definition: swapchain.h:43
VkPresentModeKHR present_mode
Definition: swapchain.h:69
std::vector< VkFence > present
Signaled when all rendering commands targeting an image finished.
Definition: swapchain.h:88
void destroy()
Definition: swapchain.cpp:61
VkSurfaceKHR m_surface
Definition: swapchain.h:65
Image depth_img
Definition: swapchain.h:72
void init(VkInstance inst, DeviceMemory *dev_mem, VkSurfaceFormatKHR format, VkFormat depth_format, VkPresentModeKHR mode)
Definition: swapchain.cpp:49
VkImageView depth_img_view
Definition: swapchain.h:73
std::vector< VkFence > render
Signaled when an image has been acquired and rendering can begin.
Definition: swapchain.h:82
std::vector< VkSemaphore > present
Signaled when an image has been presented.
Definition: swapchain.h:78
VkSurfaceKHR surface(void) const
Definition: swapchain.h:34
VkInstance instance
Definition: swapchain.h:64
std::size_t cur_frame() const
Definition: swapchain.h:41
std::span< const VkFramebuffer > frame_buffers() const
Frame buffers for each swap chain image.
Definition: swapchain.h:39
VkSwapchainKHR h
Definition: swapchain.h:63
VkSurfaceFormatKHR format
Definition: swapchain.h:68
bool create_img_views(const Instance &inst)
Definition: swapchain.cpp:115
bool create_depth_img(const Instance &inst, VkExtent2D extent)
Definition: swapchain.cpp:148
bool create_frame_buffers(const Instance &inst, VkExtent2D extent, VkRenderPass render_pass)
Definition: swapchain.cpp:204
std::vector< VkImageView > m_img_views
Definition: swapchain.h:70
std::vector< VkSemaphore > render
Signaled when an image has been acquired and rendering can begin.
Definition: swapchain.h:76
VkDevice dev
Definition: swapchain.h:66
struct nngn::SwapChain::@5 fences
void set_surface(VkSurfaceKHR s)
Definition: swapchain.h:44
VkFormat depth_format
Definition: swapchain.h:71
std::vector< VkFramebuffer > m_frame_buffers
Definition: swapchain.h:90
DeviceMemory * dev_mem
Definition: swapchain.h:67
bool recreate(const Instance &inst, const Device &dev, std::uint32_t n_images, VkRenderPass render_pass, VkExtent2D extent, VkSurfaceTransformFlagBitsKHR transform)
Destroys resources and recreate them.
Definition: swapchain.cpp:75
bool create_sync_objects(const Instance &inst)
Definition: swapchain.cpp:169
struct nngn::SwapChain::@4 semaphores
std::span< const VkImageView > img_views() const
Views for the swap chain images.
Definition: swapchain.h:36
std::size_t i_frame
Definition: swapchain.h:91
std::pair< PresentContext, VkResult > acquire_img()
Acquires an image from the swap chain for rendering.
Definition: swapchain.cpp:229
Definition: debug.h:45
COMMAND_BUFFER DESCRIPTOR_POOL DESCRIPTOR_SET_LAYOUT VkFence
Definition: types.h:71
COMMAND_BUFFER DESCRIPTOR_POOL DESCRIPTOR_SET_LAYOUT FENCE IMAGE PIPELINE PIPELINE_CACHE RENDER_PASS SEMAPHORE BUFFER COMMAND_POOL DESCRIPTOR_SET DEVICE_MEMORY FRAMEBUFFER VkImageView
Definition: types.h:77
COMMAND_BUFFER DESCRIPTOR_POOL DESCRIPTOR_SET_LAYOUT FENCE IMAGE PIPELINE PIPELINE_CACHE VkRenderPass
Definition: types.h:71
COMMAND_BUFFER DESCRIPTOR_POOL DESCRIPTOR_SET_LAYOUT FENCE IMAGE PIPELINE PIPELINE_CACHE RENDER_PASS VkSemaphore
Definition: types.h:71
m
Definition: input.lua:19
function f()) end
Definition: graphics.h:162
PresentMode
Definition: graphics.h:108
Definition: resource.h:69
Aggregate type for information about a surface.
Definition: swapchain.h:95
std::vector< VkSurfaceFormatKHR > formats
Definition: swapchain.h:97
VkSurfaceTransformFlagBitsKHR cur_transform
Definition: swapchain.h:96
std::vector< Graphics::PresentMode > present_modes
Definition: swapchain.h:98
void init(VkSurfaceKHR s, VkPhysicalDevice d)
Initializes all members.
Definition: swapchain.cpp:252
VkPresentModeKHR find_present_mode(Graphics::PresentMode m) const
Returns m if supported or a usable mode for the surface.
Definition: swapchain.cpp:286
VkSurfaceFormatKHR find_format(VkSurfaceFormatKHR f) const
Returns f if supported or a usable format for the surface.
Definition: swapchain.cpp:277
Information used to present an image.
Definition: swapchain.h:25
std::uint32_t img_idx
Definition: swapchain.h:26
VkSemaphore wait
Definition: swapchain.h:27
VkSemaphore signal
Definition: swapchain.h:27
VkFence fence
Definition: swapchain.h:28
std::chrono::seconds s
Definition: timing.cpp:6
#define NNGN_MOVE_ONLY(x)
Definition: utils.h:39