2023-03-12 16:14:55 +00:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <tuple>
|
2023-03-13 20:27:47 +00:00
|
|
|
#include <vector>
|
2023-03-12 16:14:55 +00:00
|
|
|
|
|
|
|
#include <SDL2/SDL_vulkan.h>
|
|
|
|
|
2023-03-13 17:35:22 +00:00
|
|
|
#include <volk.h>
|
2023-03-12 16:14:55 +00:00
|
|
|
|
2023-03-13 20:27:47 +00:00
|
|
|
#include <vk_mem_alloc.h>
|
|
|
|
|
2023-03-12 16:14:55 +00:00
|
|
|
namespace engine {
|
|
|
|
|
|
|
|
struct Swapchain {
|
|
|
|
VkSwapchainKHR swapchain = VK_NULL_HANDLE;
|
|
|
|
VkDevice device = VK_NULL_HANDLE; // the associated device
|
2023-03-13 20:27:47 +00:00
|
|
|
VmaAllocator allocator = VK_NULL_HANDLE; // the associated allocator
|
2023-03-12 16:14:55 +00:00
|
|
|
VkSurfaceFormatKHR surfaceFormat{};
|
|
|
|
VkSurfaceCapabilitiesKHR surfaceCapabilities{};
|
|
|
|
VkPresentModeKHR presentMode{};
|
|
|
|
VkExtent2D extent{};
|
|
|
|
VkRenderPass renderpass = VK_NULL_HANDLE;
|
|
|
|
std::vector<std::tuple<VkImage, VkImageView, VkFramebuffer>> images{};
|
2023-03-13 20:27:47 +00:00
|
|
|
struct DepthStencil {
|
|
|
|
VkImage image = VK_NULL_HANDLE;
|
|
|
|
VmaAllocation allocation = VK_NULL_HANDLE;
|
|
|
|
VkImageView view = VK_NULL_HANDLE;
|
|
|
|
VkFormat format{};
|
|
|
|
} depthStencil{};
|
2023-03-12 16:14:55 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
struct SwapchainInfo {
|
|
|
|
VkDevice device;
|
|
|
|
VkPhysicalDevice physicalDevice;
|
|
|
|
VkSurfaceKHR surface;
|
|
|
|
SDL_Window* window;
|
2023-03-13 20:27:47 +00:00
|
|
|
VmaAllocator allocator;
|
2023-03-12 16:14:55 +00:00
|
|
|
bool vsync;
|
|
|
|
bool waitForPresent;
|
|
|
|
};
|
|
|
|
|
|
|
|
void createSwapchain(Swapchain* sc, const SwapchainInfo& info);
|
|
|
|
void destroySwapchain(const Swapchain& sc);
|
|
|
|
|
2023-03-13 17:35:22 +00:00
|
|
|
}
|