Fling Engine  0.00.1
Fling Engine is a game engine written in Vulkan
SwapChain.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "FlingVulkan.h"
4 #include "FlingExports.h"
5 
6 namespace Fling
7 {
9  {
10  VkSurfaceCapabilitiesKHR Capabilities;
11  std::vector<VkSurfaceFormatKHR> Formats;
12  std::vector<VkPresentModeKHR> PresentModes;
13  };
14 
19  class Swapchain
20  {
21  public:
22 
23  explicit Swapchain(const VkExtent2D& t_Extent);
24 
25  ~Swapchain() noexcept {}
26 
27  VkResult AquireNextImage(const VkSemaphore& t_CompletedSemaphore);
28 
29  VkResult QueuePresent(const VkQueue& t_PresentQueue, const VkSemaphore& t_WaitSemaphore);
30 
35  void Recreate(const VkExtent2D& t_Extent);
36 
40  void Cleanup();
41 
42  const VkSwapchainKHR& GetVkSwapChain() const { return m_SwapChain; }
43  const VkPresentModeKHR& GetPresentMode() const { return m_PresentMode; }
44  const VkExtent2D& GetExtents() const { return m_Extents; }
45  const VkFormat& GetImageFormat() const { return m_ImageFormat; }
46 
47  const std::vector<VkImage>& GetImages() const { return m_Images; }
48  const size_t GetImageCount() const { return m_Images.size(); }
49  const VkImage& GetActiveImage() const { return m_Images[m_ActiveImageIndex]; }
50  const UINT32 GetActiveImageIndex() const { return m_ActiveImageIndex; }
51 
52  const size_t GetImageViewCount() const { return m_ImageViews.size(); }
53  const std::vector<VkImageView>& GetImageViews() const { return m_ImageViews; }
54 
55  private:
56 
57  VkSwapchainKHR m_SwapChain = VK_NULL_HANDLE;
58 
59  VkPresentModeKHR m_PresentMode;
60 
61  VkExtent2D m_Extents;
62 
63  VkFormat m_ImageFormat;
64 
66 
68  std::vector<VkImage> m_Images;
69  std::vector<VkImageView> m_ImageViews;
70 
74  void CreateResources();
75 
79  void CreateImageViews();
80 
87  SwapChainSupportDetails QuerySwapChainSupport();
88 
98  VkSurfaceFormatKHR ChooseSwapChainSurfaceFormat(const std::vector<VkSurfaceFormatKHR>& t_AvailableFormats);
99 
108  VkPresentModeKHR ChooseSwapChainPresentMode(const std::vector<VkPresentModeKHR>& t_AvialableFormats);
109  };
110 } // namespace Fling
const VkExtent2D & GetExtents() const
Definition: SwapChain.h:44
const VkPresentModeKHR & GetPresentMode() const
Definition: SwapChain.h:43
const VkFormat & GetImageFormat() const
Definition: SwapChain.h:45
VkFormat m_ImageFormat
Definition: SwapChain.h:63
std::vector< VkSurfaceFormatKHR > Formats
Definition: SwapChain.h:11
VkExtent2D m_Extents
Definition: SwapChain.h:61
VkPresentModeKHR m_PresentMode
Definition: SwapChain.h:59
~Swapchain() noexcept
Definition: SwapChain.h:25
std::vector< VkPresentModeKHR > PresentModes
Definition: SwapChain.h:12
const size_t GetImageViewCount() const
Definition: SwapChain.h:52
Represents a swap chain that can be used throughout the program.
Definition: SwapChain.h:19
std::vector< VkImageView > m_ImageViews
Definition: SwapChain.h:69
const size_t GetImageCount() const
Definition: SwapChain.h:48
const UINT32 GetActiveImageIndex() const
Definition: SwapChain.h:50
std::vector< VkImage > m_Images
The images inside of the swap chain.
Definition: SwapChain.h:68
UINT32 m_ActiveImageIndex
Definition: SwapChain.h:65
VkSurfaceCapabilitiesKHR Capabilities
Definition: SwapChain.h:10
uint32_t UINT32
Definition: FlingTypes.h:10
Definition: Engine.h:13
const std::vector< VkImage > & GetImages() const
Definition: SwapChain.h:47
const VkSwapchainKHR & GetVkSwapChain() const
Definition: SwapChain.h:42
Definition: SwapChain.h:8
const std::vector< VkImageView > & GetImageViews() const
Definition: SwapChain.h:53
const VkImage & GetActiveImage() const
Definition: SwapChain.h:49