Grindstone Game Engine v0.2.0
An open source game engine and toolkit.
Loading...
Searching...
No Matches
VulkanWindowGraphicsBinding.hpp
1#pragma once
2
3#include <Windows.h>
4#include <Common/Window/Window.hpp>
5#include <Common/Graphics/WindowGraphicsBinding.hpp>
6
7#include "VulkanCore.hpp"
8#include "VulkanImage.hpp"
9#include <vector>
10
12 class Framebuffer;
13 class RenderPass;
14
15 struct ImageSet {
16 Framebuffer* framebuffer;
17 Image* swapChainTarget;
18 VkFence fence;
19 };
20
22 VkImage image;
23 VkImageView imageView;
24 VkFramebuffer framebuffer;
25 };
26
28 VkSwapchainKHR swapChain;
29 VkRenderPass renderPass;
30 uint32_t width;
31 uint32_t height;
32 uint32_t imageSetCount;
33 VkSurfaceFormatKHR surfaceFormat;
34 ImageSetNative* imageSets;
35 };
36
38 public:
40
41 void CreateSwapChain();
42 virtual VkSurfaceKHR GetSurface();
43 virtual VkSwapchainKHR GetSwapchain();
44 virtual void SubmitWindowObjects(WindowBindingDataNative& windowBindingData);
45 SwapChainSupportDetails QuerySwapChainSupport(VkPhysicalDevice device);
46 void CreateSyncObjects();
47
48 // Inherited via WindowGraphicsBinding
49 virtual bool Initialize(Window *window) override;
50 virtual void WaitForRenderingFence() override;
51 virtual bool AcquireNextImage() override;
52 virtual void SubmitCommandBufferNoSynchronization(GraphicsAPI::CommandBuffer* buffer) override;
53 virtual void SubmitCommandBufferForCurrentFrame(GraphicsAPI::CommandBuffer* buffer) override;
54 virtual bool PresentSwapchain() override;
55 virtual Grindstone::GraphicsAPI::RenderPass* GetRenderPass() const override;
56 virtual Grindstone::GraphicsAPI::Framebuffer* GetCurrentFramebuffer() const 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; }
68 private:
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();
75 private:
76 bool isSwapchainDirty = false;
77 Window* window = nullptr;
78 RenderPass* renderPass = nullptr;
79 std::vector<ImageSet> imageSets;
80
81 Format swapchainFormat = Format::Invalid;
82 VkFormat swapchainVulkanFormat;
83
84 VkSurfaceKHR surface = nullptr;
85 VkSwapchainKHR swapChain = nullptr;
86
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;
95 };
96}
Definition CommandBuffer.hpp:109
Definition Framebuffer.hpp:16
Definition Image.hpp:49
Definition RenderPass.hpp:10
Definition VulkanFramebuffer.hpp:14
Definition VulkanImage.hpp:7
Definition VulkanRenderPass.hpp:10
Definition VulkanWindowGraphicsBinding.hpp:37
Definition WindowGraphicsBinding.hpp:19
Definition Window.hpp:12
Definition ImguiRendererVulkan.hpp:11
Definition VulkanWindowGraphicsBinding.hpp:21
Definition VulkanWindowGraphicsBinding.hpp:15
Definition VulkanWindowGraphicsBinding.hpp:27