VenomEngine
Cross-Platform Modern Graphics Engine
Loading...
Searching...
No Matches
Texture.h
Go to the documentation of this file.
1
8#pragma once
9
12
13#include <venom/common/Types.h>
14
16
17namespace venom
18{
19namespace common
20{
22class Texture;
23
24enum class TextureMemoryAccess
25{
26 None = -1,
27 ReadOnly = 0,
28 WriteOnly,
29 ReadWrite,
30 Count
31};
32
33enum class TextureType
34{
35 None = -1,
36 Texture2D = 0,
37 TextureCube,
38 Texture3D,
39 Count
40};
41
42enum TextureUsage
43{
44 None = -1,
45 Sampled = 0x1,
46 Storage = 0x2,
47 Attachment = 0x4,
48 DepthStencil = 0x8,
49 Immutable = 0x10,
50 TextureUsageCount
51};
52
53class VENOM_COMMON_API TextureResource : public GraphicsCachedResource
54{
55public:
56 TextureResource();
57 virtual ~TextureResource();
58
59#if defined(VENOM_BINDLESS_TEXTURES)
60 inline int GetTextureID() const { return __textureID; }
61private:
62 const int __textureID;
63#endif
64};
65
66vc::Error VENOM_COMMON_API SaveImageToExr(const void * data, const char * path, int width, int height, int channels = 4);
67vc::Error VENOM_COMMON_API SaveImageToPng(const void * data, const char * path, int width, int height, int channels = 4);
68
69class VENOM_COMMON_API TextureImpl : public GraphicsPluginObject, public GraphicsCachedResourceHolder
70{
71public:
72 TextureImpl();
73 virtual ~TextureImpl();
74
75 vc::Error SaveImageToFile(const char * path);
76 vc::Error LoadImageFromFile(const char * path);
77 vc::Error LoadImage(const char * path, int id, char * bgraData, unsigned int width, unsigned int height);
78 vc::Error InitDepthBuffer(int width, int height);
89 vc::Error CreateReadWriteTexture(int width, int height, vc::ShaderVertexFormat format, int mipMapLevels, int arrayLayers = 1);
90 vc::Error CreateAttachment(int width, int height, int imageCount, vc::ShaderVertexFormat format);
91 vc::Error CreateShadowMaps(int dimension);
92 vc::Error CreateShadowCubeMaps(int dimension);
93#if defined(VENOM_BINDLESS_TEXTURES)
94 inline int GetTextureID() const { return _GetResourceToCache()->As<TextureResource>()->GetTextureID(); }
95#endif
96 virtual bool HasTexture() const = 0;
97
98 vc::Error SetMemoryAccess(const TextureMemoryAccess access);
99
100 virtual vc::Error LoadImage(unsigned char * pixels, int width, int height, int channels) = 0;
101 virtual vc::Error LoadImageRGBA(unsigned char * pixels, int width, int height, int channels) = 0;
102 virtual vc::Error LoadImage(uint16_t * pixels, int width, int height, int channels) = 0;
103 inline void SetTexturePeakLuminance(float peakLuminance) { __peakLuminance = peakLuminance; }
104 inline void SetTextureAverageLuminance(float averageLuminance) { __averageLuminance = averageLuminance; }
105 inline const float & GetTexturePeakLuminance() const { return __peakLuminance; }
106 inline const float & GetTextureAverageLuminance() const { return __averageLuminance; }
107 inline const TextureMemoryAccess & GetMemoryAccess() const { return __memoryAccess; }
108 bool operator==(const GraphicsCachedResource * res) const;
109
110 vc::Error GetGUITextureID(void ** ptrToTextureId);
111
112 virtual int GetWidth() const = 0;
113 virtual int GetHeight() const = 0;
114 virtual void SetDimensions(int width, int height) = 0;
115
116protected:
117 virtual vc::Error _InitDepthBuffer(int width, int height) = 0;
118 virtual vc::Error _CreateAttachment(int width, int height, int imageCount, vc::ShaderVertexFormat format) = 0;
119 virtual vc::Error _SetMemoryAccess(const TextureMemoryAccess access) = 0;
120 virtual vc::Error _CreateReadWriteTexture(int width, int height, vc::ShaderVertexFormat format, int mipMapLevels, int arrayLayers) = 0;
121 virtual vc::Error _CreateShadowMaps(int dimension) = 0;
122 virtual vc::Error _CreateShadowCubeMaps(int dimension) = 0;
123 virtual vc::Error _SaveImageToFile(const char * path) = 0;
124
125private:
126 friend class Texture;
127 void __CreateDummyTexture();
128
129protected:
130 TextureType _textureType;
131 TextureUsage _textureUsage;
132
133public:
138 class VENOM_COMMON_API GUITexture
139 {
140 public:
141 GUITexture();
142 virtual ~GUITexture() = default;
143
144 void * GetTextureId();
145 vc::Error LoadTextureToGUI(vc::TextureImpl * impl);
146 vc::Error UnloadTextureFromGUI();
147
148 protected:
149 virtual vc::Error _UnloadTextureFromGUI(void * guiTextureId) = 0;
150 virtual vc::Error _LoadTextureToGUI(vc::TextureImpl * impl, void ** ptrToGuiTextureId) = 0;
151
152 private:
153 void * __guiTextureId;
154 };
155protected:
156 virtual GUITexture * _NewGuiTextureInstance() = 0;
157 static void UnloadAllGuiTextures();
158
159private:
160 TextureMemoryAccess __memoryAccess;
161 float __peakLuminance, __averageLuminance;
162
163 UPtr<GUITexture> __guiTexture;
164};
165
166enum class ColorAttachmentType
167{
168 Present = 0,
169 NormalSpecular = 1,
170 MetallicRougnessAO = 2,
171 Position = 3,
172 Depth = 4,
173 LightingAddition = 5,
174 Count
175};
176
177class VENOM_COMMON_API Texture : public PluginObjectWrapper
178{
179public:
180 Texture();
181 Texture(const char * path);
182 Texture(const char * path, int id, char * bgraData, unsigned int width, unsigned int height);
183 ~Texture();
184
185 bool operator==(const GraphicsCachedResource * res) const { return _impl->As<TextureImpl>()->operator==(res); }
186 bool operator==(const vc::SPtr<GraphicsCachedResource> & res) const { return _impl->As<TextureImpl>()->operator==(res.get()); }
187 inline vc::Error LoadImageFromFile(const char * path) { return _impl->As<TextureImpl>()->LoadImageFromFile(path); }
188 inline vc::Error LoadImage(const char * path, int id, char * bgraData, unsigned int width, unsigned int height) { return _impl->As<TextureImpl>()->LoadImage(path, id, bgraData, width, height); }
189 inline void LoadImageFromCachedResource(const SPtr<GraphicsCachedResource> res) { _impl->As<TextureImpl>()->SetResource(res); }
190 inline vc::Error InitDepthBuffer(int width, int height) { return _impl->As<TextureImpl>()->InitDepthBuffer(width, height); }
191 inline vc::Error CreateAttachment(int width, int height, int imageCount, vc::ShaderVertexFormat format) { return _impl->As<TextureImpl>()->CreateAttachment(width, height, imageCount, format); }
192 inline vc::Error CreateReadWriteTexture(int width, int height, vc::ShaderVertexFormat format, int mipMapLevels, int arraLayers = 1) { return _impl->As<TextureImpl>()->CreateReadWriteTexture(width, height, format, mipMapLevels, arraLayers); }
193 inline vc::Error CreateShadowMaps(int dimension) { return _impl->As<TextureImpl>()->CreateShadowMaps(dimension); }
194 inline vc::Error CreateShadowCubeMaps(int dimension) { return _impl->As<TextureImpl>()->CreateShadowCubeMaps(dimension); }
195 inline vc::Error SetMemoryAccess(const TextureMemoryAccess access) { return _impl->As<TextureImpl>()->SetMemoryAccess(access); }
196 inline bool HasTexture() const { return _impl->As<TextureImpl>()->HasTexture(); }
197 inline const vc::String & GetName() { return _impl->As<TextureImpl>()->GetResourceName(); }
198 inline const vc::String & GetShortName() { return _impl->As<TextureImpl>()->GetResourceShortName(); }
199 inline int GetWidth() const { return _impl->As<TextureImpl>()->GetWidth(); }
200 inline int GetHeight() const { return _impl->As<TextureImpl>()->GetHeight(); }
201 inline const TextureMemoryAccess & GetMemoryAccess() const { return _impl->As<TextureImpl>()->GetMemoryAccess(); }
202 inline const float & GetTexturePeakLuminance() const { return _impl->As<TextureImpl>()->GetTexturePeakLuminance(); }
203 inline const float & GetTextureAverageLuminance() const { return _impl->As<TextureImpl>()->GetTextureAverageLuminance(); }
204 inline vc::Error SaveImageToFile(const char * path) { return _impl->As<TextureImpl>()->SaveImageToFile(path); }
205
206 inline vc::Error GetGUITextureID(void ** ptrToTextureId) const { return _impl->As<TextureImpl>()->GetGUITextureID(ptrToTextureId); }
207#if defined(VENOM_BINDLESS_TEXTURES)
208 inline int GetTextureID() const { return _impl->As<TextureImpl>()->GetTextureID(); }
209#endif
210
211 inline static void UnloadAllGuiTextures() { TextureImpl::UnloadAllGuiTextures(); }
212private:
213 friend class GraphicsApplication;
214 inline void __CreateDummyTexture() { _impl->As<TextureImpl>()->__CreateDummyTexture(); }
215};
216
217}
218}
Definition GraphicsApplication.h:28
Base class for cached resources.
Definition GraphicsPluginObject.h:29
Definition Texture.h:178
Definition Texture.h:70
vc::Error CreateReadWriteTexture(int width, int height, vc::ShaderVertexFormat format, int mipMapLevels, int arrayLayers=1)
Corresponds to Storage Images / Sampled Images for Vulkan for instance Switch between layouts or type...
Definition Texture.cc:511
Definition Texture.h:54
High-Level Frontend of the VenomEngine project. It also contains all the code shared between every AP...
Definition Callback.h:15
Contains the entirety of the code of the VenomEngine project.
Definition Callback.h:13