Progressia/desktop/graphics/vulkan_swap_chain.h
OLEGSHA ae4e265a90
Squash improve-ide-compat into main
Fixes GH-5

- cppcheck replaced with clang-tidy
- clang-tidy lint warnings fixed
- Reworked build tools from scratch to make IDE setup easier
- Added 1.5 IDE setup guides
2023-11-10 21:30:55 +01:00

57 lines
1.4 KiB
C++

#pragma once
#include "vulkan_adapter.h"
#include "vulkan_common.h"
namespace progressia::desktop {
class SwapChain : public VkObjectWrapper {
public:
struct SupportDetails {
VkSurfaceCapabilitiesKHR capabilities;
std::vector<VkSurfaceFormatKHR> formats;
std::vector<VkPresentModeKHR> presentModes;
};
static SupportDetails querySwapChainSupport(VkPhysicalDevice device,
Vulkan &vulkan);
static bool isSwapChainSuitable(const SupportDetails &details);
private:
VkSwapchainKHR vk;
Attachment *colorBuffer;
std::vector<VkImageView> colorBufferViews;
VkExtent2D extent;
Image *depthBuffer;
std::vector<VkFramebuffer> framebuffers;
Vulkan &vulkan;
void create();
void destroy();
VkSurfaceFormatKHR
chooseSurfaceFormat(const std::vector<VkSurfaceFormatKHR> &);
bool isTripleBufferingSupported(const std::vector<VkPresentModeKHR> &);
VkPresentModeKHR choosePresentMode(const std::vector<VkPresentModeKHR> &,
bool avoidVsync);
VkExtent2D chooseExtent(const VkSurfaceCapabilitiesKHR &);
public:
SwapChain(Vulkan &);
~SwapChain();
void recreate();
VkSwapchainKHR getVk() const;
VkFramebuffer getFramebuffer(std::size_t index) const;
VkExtent2D getExtent() const;
};
} // namespace progressia::desktop