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);
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);
50 std::unique_ptr<Bitmap>
GetBitmap(uint32_t mipLevel = 0, uint32_t arrayLayer = 0)
const;
52 const VkExtent3D& GetExtent()
const
56 glm::uvec2 GetSize()
const
58 return { m_Extent.width, m_Extent.height };
60 VkFormat GetFormat()
const
64 VkSampleCountFlagBits GetSamples()
const
68 VkImageUsageFlags GetUsage()
const
72 uint32_t GetMipLevels()
const
76 uint32_t GetArrayLevels()
const
80 VkFilter GetFilter()
const
84 VkSamplerAddressMode GetAddressMode()
const
88 VkImageLayout GetLayout()
const
92 const VkImage& GetImage()
96 const VkDeviceMemory& GetMemory()
100 const VkSampler& GetSampler()
const
104 const VkImageView& GetView()
const
109 static uint32_t GetMipLevels(
const VkExtent3D& extent);
118 static VkFormat
FindSupportedFormat(
const std::vector<VkFormat>& candidates, VkImageTiling tiling,
119 VkFormatFeatureFlags features);
126 static bool HasDepth(VkFormat format);
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,
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);
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;
172 VkSamplerAddressMode m_AddressMode;
174 VkImageLayout m_Layout;
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;