PixelBullet  0.0.1
A C++ game engine
Loading...
Searching...
No Matches
Swapchain.hpp
1#pragma once
2
3#include <volk.h>
4
5#include <vector>
6
7namespace PixelBullet
8{
9 class PhysicalDevice;
10 class Surface;
11 class LogicalDevice;
12
14 {
15 public:
16 Swapchain(const PhysicalDevice& physicalDevice, const Surface& surface, const LogicalDevice& logicalDevice,
17 const VkExtent2D& extent, const Swapchain* oldSwapchain = nullptr);
18 ~Swapchain();
19
27 VkResult AcquireNextImage(const VkSemaphore& presentCompleteSemaphore = VK_NULL_HANDLE,
28 VkFence fence = VK_NULL_HANDLE);
29
36 VkResult QueuePresent(const VkQueue& presentQueue, const VkSemaphore& waitSemaphore = VK_NULL_HANDLE);
37
38 bool IsSameExtent(const VkExtent2D& extent2D)
39 {
40 return m_Extent.width == extent2D.width && m_Extent.height == extent2D.height;
41 }
42
43 operator const VkSwapchainKHR&() const
44 {
45 return m_Swapchain;
46 }
47
48 const VkExtent2D& GetExtent() const
49 {
50 return m_Extent;
51 }
52 uint32_t GetImageCount() const
53 {
54 return m_ImageCount;
55 }
56 VkSurfaceTransformFlagsKHR GetPreTransform() const
57 {
58 return m_PreTransform;
59 }
60 VkCompositeAlphaFlagBitsKHR GetCompositeAlpha() const
61 {
62 return m_CompositeAlpha;
63 }
64 const std::vector<VkImage>& GetImages() const
65 {
66 return m_Images;
67 }
68 const VkImage& GetActiveImage() const
69 {
70 return m_Images[m_ActiveImageIndex];
71 }
72 const std::vector<VkImageView>& GetImageViews() const
73 {
74 return m_ImageViews;
75 }
76 const VkSwapchainKHR& GetSwapchain() const
77 {
78 return m_Swapchain;
79 }
80 uint32_t GetActiveImageIndex() const
81 {
82 return m_ActiveImageIndex;
83 }
84
85 private:
86 const PhysicalDevice& m_PhysicalDevice;
87 const Surface& m_Surface;
88 const LogicalDevice& m_LogicalDevice;
89
90 VkExtent2D m_Extent;
91 VkPresentModeKHR m_PresentMode;
92
93 uint32_t m_ImageCount = 0;
94 VkSurfaceTransformFlagsKHR m_PreTransform;
95 VkCompositeAlphaFlagBitsKHR m_CompositeAlpha;
96 std::vector<VkImage> m_Images;
97 std::vector<VkImageView> m_ImageViews;
98 VkSwapchainKHR m_Swapchain = VK_NULL_HANDLE;
99
100 VkFence m_FenceImage = VK_NULL_HANDLE;
101 uint32_t m_ActiveImageIndex;
102 };
103} // namespace PixelBullet
Definition LogicalDevice.hpp:13
Definition PhysicalDevice.hpp:12
Definition Surface.hpp:12
Definition Swapchain.hpp:14
VkResult AcquireNextImage(const VkSemaphore &presentCompleteSemaphore=VK_NULL_HANDLE, VkFence fence=VK_NULL_HANDLE)
Definition Swapchain.cpp:156
VkResult QueuePresent(const VkQueue &presentQueue, const VkSemaphore &waitSemaphore=VK_NULL_HANDLE)
Definition Swapchain.cpp:175