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
45 lines
1.5 KiB
C++
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);
|
|
};
|
|
} |