1#ifndef NNGN_GRAPHICS_VULKAN_SWAPCHAIN_H
2#define NNGN_GRAPHICS_VULKAN_SWAPCHAIN_H
8#include "graphics/graphics.h"
27 struct PresentContext {
35 VkSwapchainKHR
id(
void)
const {
return this->
h; }
53 VkPresentModeKHR mode);
58 VkExtent2D extent, VkSurfaceTransformFlagBitsKHR transform,
59 VkExtent2D shadow_map_size, VkExtent2D shadow_cube_size,
60 std::span<const VkImageView> shadow_map,
61 std::span<const VkImageView> shadow_cube);
72 VkExtent2D shadow_map_size, VkExtent2D shadow_cube_size,
73 std::span<const VkImageView> shadow_map,
74 std::span<const VkImageView> shadow_cube);
76 VkSwapchainKHR
h = {};
81 VkSurfaceFormatKHR
format = {};
89 std::vector<VkSemaphore>
render;
91 std::vector<VkSemaphore>
present;
95 std::vector<VkFence>
render;
108struct SurfaceInfo : Graphics::SurfaceInfo {
110 std::vector<VkSurfaceFormatKHR>
formats = {};
113 void init(VkSurfaceKHR
s, VkPhysicalDevice d);
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:21
std::pair< PresentContext, VkResult > acquire_img()
Acquires an image from the swap chain for rendering.
void set_present_mode(VkPresentModeKHR m)
Changes the presentation mode used on the next recreate.
Definition: swapchain.h:48
VkPresentModeKHR present_mode
Definition: swapchain.h:82
struct nngn::SwapChain::@14 semaphores
VkSurfaceKHR m_surface
Definition: swapchain.h:78
Image depth_img
Definition: swapchain.h:85
void init(VkInstance inst, DeviceMemory *dev_mem, VkSurfaceFormatKHR format, VkFormat depth_format, VkPresentModeKHR mode)
VkImageView depth_img_view
Definition: swapchain.h:86
std::vector< VkSemaphore > present
Signaled when an image has been presented.
Definition: swapchain.h:91
VkSurfaceKHR surface(void) const
Definition: swapchain.h:36
VkInstance instance
Definition: swapchain.h:77
std::size_t cur_frame() const
Definition: swapchain.h:46
std::span< const VkFramebuffer > frame_buffers() const
Frame buffers for each swap chain image.
Definition: swapchain.h:41
DeviceMemory * dev_mem
Definition: swapchain.h:80
bool recreate(const Instance &inst, const Device &dev, std::uint32_t n_images, VkRenderPass depth_pass, VkRenderPass render_pass, VkExtent2D extent, VkSurfaceTransformFlagBitsKHR transform, VkExtent2D shadow_map_size, VkExtent2D shadow_cube_size, std::span< const VkImageView > shadow_map, std::span< const VkImageView > shadow_cube)
Destroys resources and recreate them.
VkSwapchainKHR h
Definition: swapchain.h:76
VkSurfaceFormatKHR format
Definition: swapchain.h:81
std::vector< VkFramebuffer > m_depth_frame_buffers
Definition: swapchain.h:103
bool create_img_views(const Instance &inst)
std::span< const VkFramebuffer > depth_frame_buffers() const
Frame buffers for each depth pass image.
Definition: swapchain.h:44
bool create_depth_img(const Instance &inst, VkExtent2D extent)
bool create_frame_buffers(const Instance &inst, VkExtent2D extent, VkRenderPass render_pass)
std::vector< VkSemaphore > render
Signaled when an image has been acquired and rendering can begin.
Definition: swapchain.h:89
VkDevice dev
Definition: swapchain.h:79
bool create_depth_frame_buffers(const Instance &inst, VkRenderPass render_pass, VkExtent2D shadow_map_size, VkExtent2D shadow_cube_size, std::span< const VkImageView > shadow_map, std::span< const VkImageView > shadow_cube)
struct nngn::SwapChain::@15 fences
void set_surface(VkSurfaceKHR s)
Definition: swapchain.h:49
std::vector< VkFramebuffer > m_frame_buffers
Definition: swapchain.h:103
std::vector< VkImageView > m_img_views
Definition: swapchain.h:83
VkFormat depth_format
Definition: swapchain.h:84
bool create_sync_objects(const Instance &inst)
std::span< const VkImageView > img_views() const
Views for the swap chain images.
Definition: swapchain.h:38
std::size_t i_frame
Definition: swapchain.h:104
std::chrono::seconds s
Definition: timing.cpp:6
#define NNGN_MOVE_ONLY(x)
Definition: utils.h:39
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
PresentMode
Definition: graphics.h:148
VkSurfaceTransformFlagBitsKHR cur_transform
Definition: swapchain.h:109
std::vector< Graphics::PresentMode > present_modes
Definition: swapchain.h:111
void init(VkSurfaceKHR s, VkPhysicalDevice d)
Initializes all members.
VkPresentModeKHR find_present_mode(Graphics::PresentMode m) const
Returns m if supported or a usable mode for the surface.
VkSurfaceFormatKHR find_format(VkSurfaceFormatKHR f) const
Returns f if supported or a usable format for the surface.
std::vector< VkSurfaceFormatKHR > formats
Definition: swapchain.h:110
std::uint32_t img_idx
Definition: swapchain.h:28
VkSemaphore wait
Definition: swapchain.h:29
VkSemaphore signal
Definition: swapchain.h:29
VkFence fence
Definition: swapchain.h:30