mirror of
https://github.com/DrBeef/Raze.git
synced 2024-12-15 15:11:01 +00:00
611dad7f69
Not hooked up yet.
54 lines
1.3 KiB
C++
54 lines
1.3 KiB
C++
#pragma once
|
|
|
|
#include "vk_device.h"
|
|
|
|
class VulkanSemaphore;
|
|
class VulkanFence;
|
|
class VulkanFramebuffer;
|
|
|
|
class VulkanSwapChain
|
|
{
|
|
public:
|
|
VulkanSwapChain(VulkanDevice *device);
|
|
~VulkanSwapChain();
|
|
|
|
uint32_t AcquireImage(int width, int height, VulkanSemaphore *semaphore = nullptr, VulkanFence *fence = nullptr);
|
|
void QueuePresent(uint32_t imageIndex, VulkanSemaphore *semaphore = nullptr);
|
|
|
|
void Recreate();
|
|
|
|
bool IsHdrModeActive() const;
|
|
|
|
VkSwapchainKHR swapChain = VK_NULL_HANDLE;
|
|
VkSurfaceFormatKHR swapChainFormat;
|
|
VkPresentModeKHR swapChainPresentMode;
|
|
|
|
std::vector<VkImage> swapChainImages;
|
|
std::vector<VkImageView> swapChainImageViews;
|
|
std::vector<std::unique_ptr<VulkanFramebuffer>> framebuffers;
|
|
|
|
VkExtent2D actualExtent;
|
|
|
|
private:
|
|
void SelectFormat();
|
|
void SelectPresentMode();
|
|
bool CreateSwapChain(VkSwapchainKHR oldSwapChain = VK_NULL_HANDLE);
|
|
void CreateViews();
|
|
void GetImages();
|
|
void ReleaseResources();
|
|
void ReleaseViews();
|
|
|
|
VkSurfaceCapabilitiesKHR GetSurfaceCapabilities();
|
|
std::vector<VkSurfaceFormatKHR> GetSurfaceFormats();
|
|
std::vector<VkPresentModeKHR> GetPresentModes();
|
|
|
|
VulkanDevice *device = nullptr;
|
|
|
|
int lastSwapWidth = 0;
|
|
int lastSwapHeight = 0;
|
|
bool lastVsync = false;
|
|
bool lastHdr = false;
|
|
|
|
VulkanSwapChain(const VulkanSwapChain &) = delete;
|
|
VulkanSwapChain &operator=(const VulkanSwapChain &) = delete;
|
|
};
|