PixelBullet  0.0.1
A C++ game engine
Loading...
Searching...
No Matches
Image.hpp
1#pragma once
2
3#include "PixelBullet/Graphics/Commands/CommandBuffer.hpp"
4#include "PixelBullet/Graphics/Descriptors/Descriptor.hpp"
5
6#include <glm/vec2.hpp>
7
8#include <vector>
9
10namespace PixelBullet
11{
12 class Bitmap;
13
17 class Image : public Descriptor
18 {
19 public:
32 Image(VkFilter filter, VkSamplerAddressMode addressMode, VkSampleCountFlagBits samples, VkImageLayout layout,
33 VkImageUsageFlags usage, VkFormat format, uint32_t mipLevels, uint32_t arrayLayers,
34 const VkExtent3D& extent);
35
36 ~Image();
37
38 WriteDescriptorSet GetWriteDescriptor(uint32_t binding, VkDescriptorType descriptorType,
39 const std::optional<OffsetSize>& offsetSize) const override;
40 static VkDescriptorSetLayoutBinding GetDescriptorSetLayout(uint32_t binding, VkDescriptorType descriptorType,
41 VkShaderStageFlags stage, uint32_t count);
42
50 std::unique_ptr<Bitmap> GetBitmap(uint32_t mipLevel = 0, uint32_t arrayLayer = 0) const;
51
52 const VkExtent3D& GetExtent() const
53 {
54 return m_Extent;
55 }
56 glm::uvec2 GetSize() const
57 {
58 return { m_Extent.width, m_Extent.height };
59 }
60 VkFormat GetFormat() const
61 {
62 return m_Format;
63 }
64 VkSampleCountFlagBits GetSamples() const
65 {
66 return m_Samples;
67 }
68 VkImageUsageFlags GetUsage() const
69 {
70 return m_Usage;
71 }
72 uint32_t GetMipLevels() const
73 {
74 return m_MIPLevels;
75 }
76 uint32_t GetArrayLevels() const
77 {
78 return m_ArrayLayers;
79 }
80 VkFilter GetFilter() const
81 {
82 return m_Filter;
83 }
84 VkSamplerAddressMode GetAddressMode() const
85 {
86 return m_AddressMode;
87 }
88 VkImageLayout GetLayout() const
89 {
90 return m_Layout;
91 }
92 const VkImage& GetImage()
93 {
94 return m_Image;
95 }
96 const VkDeviceMemory& GetMemory()
97 {
98 return m_Memory;
99 }
100 const VkSampler& GetSampler() const
101 {
102 return m_Sampler;
103 }
104 const VkImageView& GetView() const
105 {
106 return m_View;
107 }
108
109 static uint32_t GetMipLevels(const VkExtent3D& extent);
110
118 static VkFormat FindSupportedFormat(const std::vector<VkFormat>& candidates, VkImageTiling tiling,
119 VkFormatFeatureFlags features);
120
126 static bool HasDepth(VkFormat format);
127
133 static bool HasStencil(VkFormat format);
134
135 static void CreateImage(VkImage& image, VkDeviceMemory& memory, const VkExtent3D& extent, VkFormat format,
136 VkSampleCountFlagBits samples, VkImageTiling tiling, VkImageUsageFlags usage,
137 VkMemoryPropertyFlags properties, uint32_t mipLevels, uint32_t arrayLayers,
138 VkImageType type);
139 static void CreateImageSampler(VkSampler& sampler, VkFilter filter, VkSamplerAddressMode addressMode,
140 bool anisotropic, uint32_t mipLevels);
141 static void CreateImageView(const VkImage& image, VkImageView& imageView, VkImageViewType type, VkFormat format,
142 VkImageAspectFlags imageAspect, uint32_t mipLevels, uint32_t baseMipLevel,
143 uint32_t layerCount, uint32_t baseArrayLayer);
144 static void CreateMipmaps(const VkImage& image, const VkExtent3D& extent, VkFormat format,
145 VkImageLayout dstImageLayout, uint32_t mipLevels, uint32_t baseArrayLayer,
146 uint32_t layerCount);
147 static void TransitionImageLayout(const VkImage& image, VkFormat format, VkImageLayout srcImageLayout,
148 VkImageLayout dstImageLayout, VkImageAspectFlags imageAspect,
149 uint32_t mipLevels, uint32_t baseMipLevel, uint32_t layerCount,
150 uint32_t baseArrayLayer);
151 static void InsertImageMemoryBarrier(const CommandBuffer& commandBuffer, const VkImage& image,
152 VkAccessFlags srcAccessMask, VkAccessFlags dstAccessMask,
153 VkImageLayout oldImageLayout, VkImageLayout newImageLayout,
154 VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask,
155 VkImageAspectFlags imageAspect, uint32_t mipLevels, uint32_t baseMipLevel,
156 uint32_t layerCount, uint32_t baseArrayLayer);
157 static void CopyBufferToImage(const VkBuffer& buffer, const VkImage& image, const VkExtent3D& extent,
158 uint32_t layerCount, uint32_t baseArrayLayer);
159 static bool CopyImage(const VkImage& srcImage, VkImage& dstImage, VkDeviceMemory& dstImageMemory,
160 VkFormat srcFormat, const VkExtent3D& extent, VkImageLayout srcImageLayout,
161 uint32_t mipLevel, uint32_t arrayLayer);
162
163 protected:
164 VkExtent3D m_Extent;
165 VkSampleCountFlagBits m_Samples;
166 VkImageUsageFlags m_Usage;
167 VkFormat m_Format = VK_FORMAT_UNDEFINED;
168 uint32_t m_MIPLevels = 0;
169 uint32_t m_ArrayLayers;
170
171 VkFilter m_Filter;
172 VkSamplerAddressMode m_AddressMode;
173
174 VkImageLayout m_Layout;
175
176 VkImage m_Image = VK_NULL_HANDLE;
177 VkDeviceMemory m_Memory = VK_NULL_HANDLE;
178 VkSampler m_Sampler = VK_NULL_HANDLE;
179 VkImageView m_View = VK_NULL_HANDLE;
180 };
181} // namespace PixelBullet
Class that represents a command buffer.
Definition CommandBuffer.hpp:15
Definition Descriptor.hpp:75
A representation of a Vulkan image, sampler, and view.
Definition Image.hpp:18
Image(VkFilter filter, VkSamplerAddressMode addressMode, VkSampleCountFlagBits samples, VkImageLayout layout, VkImageUsageFlags usage, VkFormat format, uint32_t mipLevels, uint32_t arrayLayers, const VkExtent3D &extent)
Definition Image.cpp:17
static bool HasStencil(VkFormat format)
Definition Image.cpp:145
static bool HasDepth(VkFormat format)
Definition Image.cpp:136
std::unique_ptr< Bitmap > GetBitmap(uint32_t mipLevel=0, uint32_t arrayLayer=0) const
Definition Image.cpp:74
static VkFormat FindSupportedFormat(const std::vector< VkFormat > &candidates, VkImageTiling tiling, VkFormatFeatureFlags features)
Definition Image.cpp:113
Definition Descriptor.hpp:45