41 void CreateSwapChain();
42 virtual VkSurfaceKHR GetSurface();
43 virtual VkSwapchainKHR GetSwapchain();
46 void CreateSyncObjects();
49 virtual bool Initialize(
Window *window)
override;
50 virtual void WaitForRenderingFence()
override;
51 virtual bool AcquireNextImage()
override;
54 virtual bool PresentSwapchain()
override;
57 virtual uint32_t GetCurrentSwapchainIndex()
const override;
58 virtual uint32_t GetCurrentImageIndex()
const override;
59 virtual uint32_t GetCurrentFrame()
const override;
60 virtual uint32_t GetMaxFramesInFlight()
const override;
61 virtual void ImmediateSetContext()
override;
62 virtual void ImmediateSwapBuffers()
override;
63 virtual void Resize(uint32_t width, uint32_t height)
override;
64 virtual GraphicsAPI::Image* GetCurrentSwapchainImage()
const override {
return imageSets[currentSwapchainImageIndex].swapChainTarget; }
65 virtual GraphicsAPI::Image* GetSwapchainImage(uint32_t index)
const override {
return imageSets[index].swapChainTarget; }
66 virtual GraphicsAPI::Format GetSwapchainFormat()
const override {
return swapchainFormat; }
67 VkFormat GetSwapchainVulkanFormat()
const {
return swapchainVulkanFormat; }
69 VkSurfaceFormatKHR ChooseSwapSurfaceFormat(
const std::vector<VkSurfaceFormatKHR>& availableFormats);
70 VkPresentModeKHR ChooseSwapPresentMode(
const std::vector<VkPresentModeKHR>& availablePresentModes);
71 VkExtent2D ChooseSwapExtent(
const VkSurfaceCapabilitiesKHR& capabilities);
72 void CreateImageSets();
73 void CreateRenderPass();
74 void RecreateSwapchain();
76 bool isSwapchainDirty =
false;
79 std::vector<ImageSet> imageSets;
81 Format swapchainFormat = Format::Invalid;
82 VkFormat swapchainVulkanFormat;
84 VkSurfaceKHR surface =
nullptr;
85 VkSwapchainKHR swapChain =
nullptr;
87 VkExtent2D swapExtent;
88 std::vector<VkSemaphore> imageAvailableSemaphores;
89 std::vector<VkSemaphore> renderFinishedSemaphores;
90 std::vector<VkFence> inFlightFences;
91 uint32_t currentFrame = 0;
92 uint32_t currentFrameIndex = 0;
93 uint32_t maxFramesInFlight = 0;
94 uint32_t currentSwapchainImageIndex = 0;