1#ifndef LIBSBX_GRAPHICS_IMAGES_IMAGE_HPP_
2#define LIBSBX_GRAPHICS_IMAGES_IMAGE_HPP_
6#include <vulkan/vulkan.hpp>
8#include <libsbx/utility/noncopyable.hpp>
10#include <libsbx/math/vector2.hpp>
12#include <libsbx/graphics/commands/command_buffer.hpp>
14#include <libsbx/graphics/descriptor/descriptor.hpp>
16namespace sbx::graphics {
22 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);
26 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;
28 static auto mip_levels(
const VkExtent3D& extent)
noexcept -> std::uint32_t;
30 static auto find_supported_format(
const std::vector<VkFormat>& candidates, VkImageTiling tiling, VkFormatFeatureFlags features)
noexcept -> VkFormat;
32 static auto has_depth_component(VkFormat format)
noexcept -> bool;
34 static auto has_stencil_component(VkFormat format)
noexcept -> bool;
36 static auto create_image(VkImage&
image, VkDeviceMemory& memory,
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;
38 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;
40 static auto create_image_sampler(VkSampler& sampler, VkFilter filter, VkSamplerAddressMode address_mode,
bool anisotropic, std::uint32_t mip_levels) -> void;
42 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;
44 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;
46 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;
48 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;
50 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;
52 static auto copy_image(
const VkImage& src_image, VkImage& dst_image, VkDeviceMemory& dst_image_memory, VkFormat src_format,
const VkExtent3D& extent, VkImageLayout src_image_layout, std::uint32_t mip_level, std::uint32_t array_layer) -> bool;
56 auto extent()
const noexcept ->
const VkExtent3D&;
60 auto format()
const noexcept -> VkFormat;
62 auto samples()
const noexcept -> VkSampleCountFlagBits;
64 auto usage()
const noexcept -> VkImageUsageFlags;
66 auto mip_levels()
const noexcept -> std::uint32_t;
68 auto array_layers()
const noexcept -> std::uint32_t;
70 auto filter()
const noexcept -> VkFilter;
72 auto address_mode()
const noexcept -> VkSamplerAddressMode;
74 auto layout()
const noexcept -> VkImageLayout;
76 auto handle()
const noexcept ->
const VkImage&;
78 operator const VkImage&()
const noexcept;
80 auto view()
const noexcept ->
const VkImageView&;
82 auto memory()
const noexcept ->
const VkDeviceMemory&;
84 auto sampler()
const noexcept ->
const VkSampler&;
91 VkSamplerAddressMode _address_mode;
93 VkSampleCountFlagBits _samples;
94 VkImageLayout _layout;
95 VkImageUsageFlags _usage;
97 std::uint32_t _mip_levels;
98 std::uint32_t _array_layers;
101 VkDeviceMemory _memory;
Definition: command_buffer.hpp:14
Definition: descriptor.hpp:33
Definition: descriptor.hpp:12
A vector in two-dimensional space.
Definition: vector2.hpp:27
Definition: noncopyable.hpp:6