127 bool initialize(const
std::shared_ptr<Core::VulkanBackend>& backend);
140 [[nodiscard]]
bool is_initialized()
const {
return m_backend !=
nullptr; }
158 std::shared_ptr<Core::VKImage> create_2d(
162 const void* data =
nullptr,
163 uint32_t mip_levels = 1);
187 [[nodiscard]] std::shared_ptr<Core::VKImage> create_2d_uninitialized(
191 uint32_t mip_levels = 1);
202 std::shared_ptr<Core::VKImage> create_3d(
207 const void* data =
nullptr);
216 std::shared_ptr<Core::VKImage> create_cubemap(
219 const void* data =
nullptr);
239 std::shared_ptr<Core::VKImage> create_2d_array(
244 const void* data =
nullptr);
256 std::shared_ptr<Core::VKImage> create_render_target(
268 std::shared_ptr<Core::VKImage> create_depth_buffer(
271 bool with_stencil =
false);
280 std::shared_ptr<Core::VKImage> create_storage_image(
291 [[nodiscard]] std::shared_ptr<Core::VKImage> acquire_cached_image(
303 [[nodiscard]] std::shared_ptr<Core::VKImage> refresh_cached_image(
306 std::span<const uint8_t>
pixels,
307 const std::shared_ptr<Buffers::VKBuffer>& staging = {});
322 [[nodiscard]] std::shared_ptr<Core::VKImage> create_2d(
326 ImageFormat
format = ImageFormat::RGBA32F);
342 const std::shared_ptr<Core::VKImage>&
image,
358 const std::shared_ptr<Core::VKImage>&
image,
361 const std::shared_ptr<Buffers::VKBuffer>& staging,
bool deferred =
false);
387 const std::shared_ptr<Core::VKImage>&
image,
390 const std::shared_ptr<Buffers::VKBuffer>& staging,
391 bool deferred =
false,
392 vk::ImageLayout restore_layout = vk::ImageLayout::eShaderReadOnlyOptimal,
393 vk::PipelineStageFlags restore_stage = vk::PipelineStageFlagBits::eFragmentShader);
410 [[nodiscard]] std::optional<Kakshya::ImageData> download_image(
411 const std::shared_ptr<Core::VKImage>&
image,
412 const std::shared_ptr<Buffers::VKBuffer>& staging =
nullptr,
413 vk::ImageLayout restore_layout = vk::ImageLayout::eShaderReadOnlyOptimal,
414 vk::PipelineStageFlags restore_stage = vk::PipelineStageFlagBits::eFragmentShader);
429 void transition_layout(
430 const std::shared_ptr<Core::VKImage>&
image,
431 vk::ImageLayout old_layout,
432 vk::ImageLayout new_layout,
433 uint32_t mip_levels = 1,
434 uint32_t array_layers = 1,
435 vk::ImageAspectFlags aspect_mask = vk::ImageAspectFlagBits::eColor);
451 const std::shared_ptr<Core::VKImage>&
image,
455 const std::shared_ptr<Buffers::VKBuffer>& staging =
nullptr,
456 bool deferred =
false);
472 const std::shared_ptr<Core::VKImage>&
src,
473 const std::shared_ptr<Core::VKImage>&
dst,
474 const LayerBlit& blit = {},
475 bool deferred =
false);
480 [[nodiscard]]
bool can_blit(
481 const std::shared_ptr<Core::VKImage>&
src,
482 const std::shared_ptr<Core::VKImage>&
dst,
483 FilterMode filter = FilterMode::LINEAR)
const;
497 vk::Sampler get_or_create_sampler(
const SamplerConfig& config);
502 vk::Sampler get_default_sampler();
507 vk::Sampler get_nearest_sampler();
516 static vk::Format to_vulkan_format(ImageFormat
format);
521 static size_t get_bytes_per_pixel(ImageFormat
format);
529 static std::optional<ImageFormat> from_vulkan_format(vk::Format vk_format);
545 [[nodiscard]]
static std::optional<ImageFormat> readable_format(
546 const std::shared_ptr<Core::VKImage>&
image);
558 [[nodiscard]]
static std::optional<ImageFormat> writable_format(
559 const std::shared_ptr<Core::VKImage>&
image);
564 static size_t calculate_image_size(
573 static uint32_t get_channel_count(ImageFormat
format);
576 static std::optional<ImageFormat> transfer_format(
577 const std::shared_ptr<Core::VKImage>&
image,
578 vk::ImageUsageFlagBits required_usage);
596 static size_t hash_sampler_config(
const SamplerConfig& config);
TextureLoom(const TextureLoom &)=delete
std::shared_ptr< Core::VulkanBackend > m_backend
TextureLoom(TextureLoom &&) noexcept=default
TextureLoom & operator=(const TextureLoom &)=delete
std::vector< std::shared_ptr< Core::VKImage > > m_textures
std::unordered_map< size_t, vk::Sampler > m_sampler_cache
Portal-level texture creation and management.
std::variant< std::vector< double >, std::vector< float >, std::vector< uint8_t >, std::vector< uint16_t >, std::vector< uint32_t >, std::vector< std::complex< float > >, std::vector< std::complex< double > >, std::vector< glm::vec2 >, std::vector< glm::vec3 >, std::vector< glm::vec4 >, std::vector< glm::mat4 > > DataVariant
Multi-type data storage for different precision needs.
Image retained by the producing owner.