sandbox
Loading...
Searching...
No Matches
image.hpp
1#ifndef LIBSBX_GRAPHICS_IMAGES_IMAGE_HPP_
2#define LIBSBX_GRAPHICS_IMAGES_IMAGE_HPP_
3
4#include <cinttypes>
5
6#include <vulkan/vulkan.hpp>
7
8#include <libsbx/utility/noncopyable.hpp>
9
10#include <libsbx/math/vector2.hpp>
11
12#include <libsbx/graphics/commands/command_buffer.hpp>
13
14#include <libsbx/graphics/descriptor/descriptor.hpp>
15
16namespace sbx::graphics {
17
18class image : public utility::noncopyable, public descriptor {
19
20public:
21
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);
23
24 virtual ~image();
25
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;
27
28 static auto mip_levels(const VkExtent3D& extent) noexcept -> std::uint32_t;
29
30 static auto find_supported_format(const std::vector<VkFormat>& candidates, VkImageTiling tiling, VkFormatFeatureFlags features) noexcept -> VkFormat;
31
32 static auto has_depth_component(VkFormat format) noexcept -> bool;
33
34 static auto has_stencil_component(VkFormat format) noexcept -> bool;
35
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;
37
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;
39
40 static auto create_image_sampler(VkSampler& sampler, VkFilter filter, VkSamplerAddressMode address_mode, bool anisotropic, std::uint32_t mip_levels) -> void;
41
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;
43
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;
45
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;
47
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;
49
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;
51
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;
53
54 auto write_descriptor_set(std::uint32_t binding, VkDescriptorType descriptor_type) const noexcept -> graphics::write_descriptor_set override;
55
56 auto extent() const noexcept -> const VkExtent3D&;
57
58 auto size() const noexcept -> math::vector2u;
59
60 auto format() const noexcept -> VkFormat;
61
62 auto samples() const noexcept -> VkSampleCountFlagBits;
63
64 auto usage() const noexcept -> VkImageUsageFlags;
65
66 auto mip_levels() const noexcept -> std::uint32_t;
67
68 auto array_layers() const noexcept -> std::uint32_t;
69
70 auto filter() const noexcept -> VkFilter;
71
72 auto address_mode() const noexcept -> VkSamplerAddressMode;
73
74 auto layout() const noexcept -> VkImageLayout;
75
76 auto handle() const noexcept -> const VkImage&;
77
78 operator const VkImage&() const noexcept;
79
80 auto view() const noexcept -> const VkImageView&;
81
82 auto memory() const noexcept -> const VkDeviceMemory&;
83
84 auto sampler() const noexcept -> const VkSampler&;
85
86protected:
87
88 VkExtent3D _extent;
89
90 VkFilter _filter;
91 VkSamplerAddressMode _address_mode;
92
93 VkSampleCountFlagBits _samples;
94 VkImageLayout _layout;
95 VkImageUsageFlags _usage;
96 VkFormat _format;
97 std::uint32_t _mip_levels;
98 std::uint32_t _array_layers;
99
100 VkImage _handle;
101 VkDeviceMemory _memory;
102 VkImageView _view;
103 VkSampler _sampler;
104
105}; // class image
106
107} // namespace sbx::graphics
108
109#endif // LIBSBX_GRAPHICS_IMAGES_IMAGE_HPP_
Definition: command_buffer.hpp:14
Definition: descriptor.hpp:33
Definition: image.hpp:18
Definition: descriptor.hpp:12
A vector in two-dimensional space.
Definition: vector2.hpp:27
Definition: noncopyable.hpp:6