1#ifndef LIBSBX_GRAPHICS_IMAGES_IMAGE_HPP_
2#define LIBSBX_GRAPHICS_IMAGES_IMAGE_HPP_
6#include <vulkan/vulkan.hpp>
8#include <vk_mem_alloc.h>
10#include <libsbx/utility/noncopyable.hpp>
12#include <libsbx/math/vector2.hpp>
14#include <libsbx/graphics/commands/command_buffer.hpp>
16#include <libsbx/graphics/descriptor/descriptor.hpp>
18namespace sbx::graphics {
24 image(
const VkExtent3D extent, VkFilter filter, VkSamplerAddressMode address_mode, VkSampleCountFlagBits samples, VkImageLayout layout, VkImageUsageFlags usage, VkFormat format, std::uint32_t mip_levels, std::uint32_t array_layers);
28 static auto create_descriptor_set_layout_binding(std::uint32_t binding, VkDescriptorType descriptor_type, VkShaderStageFlags shader_stage_flags, std::uint32_t count = 1u)
noexcept -> VkDescriptorSetLayoutBinding;
30 static auto mip_levels(
const VkExtent3D& extent)
noexcept -> std::uint32_t;
32 static auto find_supported_format(
const std::vector<VkFormat>& candidates, VkImageTiling tiling, VkFormatFeatureFlags features)
noexcept -> VkFormat;
34 static auto has_depth_component(VkFormat format)
noexcept -> bool;
36 static auto has_stencil_component(VkFormat format)
noexcept -> bool;
38 static auto create_image(VkImage&
image, VmaAllocation& allocation,
const VkExtent3D& extent, VkFormat format, VkSampleCountFlagBits samples, VkImageTiling tiling, VkImageUsageFlags usage, VkMemoryPropertyFlags properties, std::uint32_t mip_levels, std::uint32_t array_layers, VkImageType type) -> void;
40 static auto create_image_view(
const VkImage&
image, VkImageView& image_view, VkImageViewType type, VkFormat format, VkImageAspectFlags image_aspect, std::uint32_t mip_levels, std::uint32_t base_mip_level, std::uint32_t layer_count, std::uint32_t base_array_layer) -> void;
42 static auto create_image_sampler(VkSampler& sampler, VkFilter filter, VkSamplerAddressMode address_mode,
bool anisotropic, std::uint32_t mip_levels) -> void;
44 static auto create_mipmaps(
const VkImage&
image,
const VkExtent3D& extent, VkFormat format, VkImageLayout dst_image_layout, std::uint32_t mip_levels, std::uint32_t base_array_layer, std::uint32_t layer_count) -> void;
46 static auto transition_image_layout(
const VkImage&
image, VkFormat format, VkImageLayout src_image_layout, VkImageLayout dst_image_layout, VkImageAspectFlags image_aspect, std::uint32_t mip_levels, std::uint32_t base_mip_level, std::uint32_t layer_count, std::uint32_t base_array_layer) -> void;
48 static auto transition_image_layout(
command_buffer&
command_buffer,
const VkImage&
image, VkFormat format, VkImageLayout src_image_layout, VkImageLayout dst_image_layout, VkImageAspectFlags image_aspect, std::uint32_t mip_levels, std::uint32_t base_mip_level, std::uint32_t layer_count, std::uint32_t base_array_layer) -> void;
50 static auto insert_image_memory_barrier(
command_buffer&
command_buffer,
const VkImage&
image, VkAccessFlags src_access_mask, VkAccessFlags dst_access_mask, VkImageLayout old_image_layout, VkImageLayout new_image_layout, VkPipelineStageFlags src_stage_mask, VkPipelineStageFlags dst_stage_mask, VkImageAspectFlags image_aspect, uint32_t mip_levels, uint32_t base_mip_level, uint32_t layer_count, uint32_t base_array_layer) -> void;
52 static auto copy_buffer_to_image(
const VkBuffer&
buffer,
const VkImage&
image,
const VkExtent3D& extent, std::uint32_t layer_count, std::uint32_t base_array_layer) -> void;
54 static auto copy_image_to_buffer(
const VkImage&
image, VkFormat format,
const VkBuffer&
buffer,
const VkOffset3D& offset,
const VkExtent3D& extent, std::uint32_t layer_count, std::uint32_t base_array_layer) -> void;
56 static auto copy_image(
const VkImage& src_image, VkImage& dst_image, VmaAllocation& dst_allocation, VkFormat src_format,
const VkExtent3D& extent, VkImageLayout src_image_layout, std::uint32_t mip_level, std::uint32_t array_layer) -> bool;
58 static auto channels_from_format(VkFormat format) -> std::uint8_t;
62 auto extent()
const noexcept ->
const VkExtent3D&;
66 auto format()
const noexcept -> VkFormat;
68 auto samples()
const noexcept -> VkSampleCountFlagBits;
70 auto usage()
const noexcept -> VkImageUsageFlags;
72 auto mip_levels()
const noexcept -> std::uint32_t;
74 auto array_layers()
const noexcept -> std::uint32_t;
76 auto filter()
const noexcept -> VkFilter;
78 auto address_mode()
const noexcept -> VkSamplerAddressMode;
80 auto layout()
const noexcept -> VkImageLayout;
82 auto handle()
const noexcept -> VkImage;
84 operator VkImage()
const noexcept;
86 auto view()
const noexcept -> VkImageView;
90 auto sampler()
const noexcept -> VkSampler;
97 VkSamplerAddressMode _address_mode;
99 VkSampleCountFlagBits _samples;
100 VkImageLayout _layout;
101 VkImageUsageFlags _usage;
103 std::uint32_t _mip_levels;
104 std::uint32_t _array_layers;
107 VmaAllocation _allocation;
Definition: buffer.hpp:20
Definition: command_buffer.hpp:14
Definition: descriptor.hpp:37
Definition: descriptor.hpp:12
A vector in two-dimensional space.
Definition: vector2.hpp:27
Definition: noncopyable.hpp:6