Foray Library
rapid prototyping framework for crossplatform development of vulkan hardware ray tracing applications
Loading...
Searching...
No Matches
foray_imageloader.hpp
Go to the documentation of this file.
1#pragma once
2#include "../core/foray_commandbuffer.hpp"
3#include "../core/foray_managedimage.hpp"
4#include "../foray_basics.hpp"
5#include "../foray_vulkan.hpp"
6#include "../osi/foray_env.hpp"
8#include <functional>
9
10namespace foray::util {
11
12 enum class EImageChannel
13 {
14 Unknown = -1,
15 R = 0,
16 G,
17 B,
18 A,
19 Y
20 };
21
27 template <VkFormat FORMAT>
29 {
30 public:
32
34 {
35 public:
36 bool Valid = false;
38 std::string Extension = "";
39 std::string Name = "";
40 std::vector<EImageChannel> Channels;
41 VkExtent2D Extent = VkExtent2D{};
42 };
43
44 inline ImageLoader() {}
45
48 inline bool Init(const osi::Utf8Path& utf8path);
49
51 inline static bool sFormatSupported(core::Context* context);
52
54 inline bool Load();
55
57 inline void Destroy();
58
59 virtual inline ~ImageLoader() { Destroy(); }
60
61 FORAY_GETTER_CR(Info)
62 FORAY_GETTER_CR(RawData)
63
64 inline void InitManagedImage(core::Context* context,
65 core::ManagedImage* image,
67 VkImageLayout afterwrite = VkImageLayout::VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL) const;
68 inline void InitManagedImage(core::Context* context,
70 core::ManagedImage* image,
72 VkImageLayout afterwrite = VkImageLayout::VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL) const;
74 inline void WriteManagedImageData(core::ManagedImage* image, VkImageLayout afterwrite) const;
75 inline void WriteManagedImageData(core::HostSyncCommandBuffer& cmdBuffer, core::ManagedImage* image, VkImageLayout afterwrite) const;
76
77 protected:
79 std::vector<uint8_t> mRawData;
80 void* mCustomLoaderInfo = nullptr;
81 std::function<void(void*)> mCustomLoaderInfoDeleter = {};
82
85 bool Load_TinyExr();
86 bool Load_Stb();
87 };
88
89} // namespace foray::util
90
91#include "foray_imageloader.inl"
Simple types for supressing automatic definition of duplicating move constructors & operator.
Definition foray_basics.hpp:19
Extension of the commandbuffer wrapper for temporary host synchronized command buffer execution.
Definition foray_commandbuffer.hpp:41
Wraps allocation and lifetime functionality of VkImage.
Definition foray_managedimage.hpp:13
Utf8 encoded path wrapper.
Definition foray_env.hpp:28
Describes the traits of a VkFormat value.
Definition foray_imageformattraits.hpp:47
Definition foray_imageloader.hpp:34
std::vector< EImageChannel > Channels
Definition foray_imageloader.hpp:40
std::string Extension
Definition foray_imageloader.hpp:38
std::string Name
Definition foray_imageloader.hpp:39
VkExtent2D Extent
Definition foray_imageloader.hpp:41
osi::Utf8Path Utf8Path
Definition foray_imageloader.hpp:37
bool Valid
Definition foray_imageloader.hpp:36
General purpose image loader.
Definition foray_imageloader.hpp:29
bool PopulateImageInfo_Stb()
Definition foray_imageloader_stb.inl:19
void WriteManagedImageData(core::ManagedImage *image, VkImageLayout afterwrite) const
Definition foray_imageloader.inl:131
bool Load_Stb()
Definition foray_imageloader_stb.inl:98
ImageLoader()
Definition foray_imageloader.hpp:44
bool PopulateImageInfo_TinyExr()
Definition foray_imageloader_exr.inl:138
std::vector< uint8_t > mRawData
Definition foray_imageloader.hpp:79
std::function< void(void *)> mCustomLoaderInfoDeleter
Definition foray_imageloader.hpp:81
virtual ~ImageLoader()
Definition foray_imageloader.hpp:59
void UpdateManagedImageCI(core::ManagedImage::CreateInfo &ci) const
Definition foray_imageloader.inl:121
void Destroy()
Cleans up the loader.
Definition foray_imageloader.inl:77
bool Load()
Loads the file into CPU memory (Init first!)
Definition foray_imageloader.inl:58
ImageInfo mInfo
Definition foray_imageloader.hpp:78
static bool sFormatSupported(core::Context *context)
Checks if format the loader was initialized in supports linear tiling transfer and shader read.
Definition foray_imageloader.inl:13
bool Init(const osi::Utf8Path &utf8path)
Inits the image loader.
Definition foray_imageloader.inl:25
void InitManagedImage(core::Context *context, core::ManagedImage *image, core::ManagedImage::CreateInfo &ci, VkImageLayout afterwrite=VkImageLayout::VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL) const
Definition foray_imageloader.inl:93
bool Load_TinyExr()
Definition foray_imageloader_exr.inl:221
void * mCustomLoaderInfo
Definition foray_imageloader.hpp:80
#define FORAY_GETTER_CR(member)
Return constant reference.
Definition foray_basics.hpp:60
Definition foray_dualbuffer.hpp:5
EImageChannel
Definition foray_imageloader.hpp:13
Non owning context object.
Definition foray_context.hpp:16
Combines all structs used for initialization.
Definition foray_managedimage.hpp:20