Files
basalt/include/vulkan/basalt_swapchain.h
Riley King-Saunders e4258318ee Disabled framebuffer caching by physical device
Swapchain is now capable of being recreated in a partially automatic manner (some effort is still required on the developer's side still)
Windows are now allowed to be resizeable
Updated main program to support resizable windows
2025-07-08 23:35:27 +10:00

45 lines
1.5 KiB
C++

#pragma once
#include "vulkan/basalt_device.h"
namespace basalt
{
class Swapchain
{
public:
Swapchain(const Swapchain& src) = delete;
Swapchain& operator =(const Swapchain& src) = delete;
Swapchain(Swapchain&& src) = delete;
Swapchain& operator =(Swapchain&& src) = delete;
Swapchain(basalt::Device& device, basalt::Window& window,
const std::initializer_list<VkSurfaceFormatKHR>& allowed_formats,
const std::initializer_list<VkPresentModeKHR> allowed_present_modes);
~Swapchain();
void recreate(VkRenderPass new_renderpass=VK_NULL_HANDLE);
void create_framebuffers(VkRenderPass render_pass);
u32 wait_acquire_reset(bool wait_all=VK_TRUE, u64 timeout=UINT64_MAX, VkFence fence=VK_NULL_HANDLE);
basalt::darray<VkSemaphore> semaphores_image_available;
basalt::darray<VkSemaphore> semaphores_render_finished;
basalt::darray<VkFence> fences_in_flight;
basalt::SwapchainSupportDetails details;
basalt::darray<VkImage> swapchain_images;
basalt::darray<VkImageView> swapchain_image_views;
basalt::darray<VkFramebuffer> framebuffers;
basalt::Device* device = nullptr;
basalt::Window* window = nullptr;
VkSwapchainKHR swapchain = VK_NULL_HANDLE;
VkExtent2D swapchain_extent;
u32 image_count = -1;
u32 max_frames_in_flight = 2;
u32 current_frame = 0;
bool framebuffers_created = false;
private:
void create (const std::initializer_list<VkSurfaceFormatKHR>& allowed_formats,
const std::initializer_list<VkPresentModeKHR> allowed_present_modes, VkSwapchainKHR prev_swapchain=VK_NULL_HANDLE);
};
}