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#ifdef 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 PluginObjectImpl, 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 static const TextureImpl * GetDummyTexture();
94#ifdef VENOM_BINDLESS_TEXTURES
95 inline int GetTextureID() const { return _GetResourceToCache()->As<TextureResource>()->GetTextureID(); }
96#endif
97 virtual bool HasTexture() const = 0;
98
99 vc::Error SetMemoryAccess(const TextureMemoryAccess access);
100
101 virtual vc::Error LoadImage(unsigned char * pixels, int width, int height, int channels) = 0;
102 virtual vc::Error LoadImageRGBA(unsigned char * pixels, int width, int height, int channels) = 0;
103 virtual vc::Error LoadImage(uint16_t * pixels, int width, int height, int channels) = 0;
104 inline void SetTexturePeakLuminance(float peakLuminance) { __peakLuminance = peakLuminance; }
105 inline void SetTextureAverageLuminance(float averageLuminance) { __averageLuminance = averageLuminance; }
106 inline const float & GetTexturePeakLuminance() const { return __peakLuminance; }
107 inline const float & GetTextureAverageLuminance() const { return __averageLuminance; }
108 inline const TextureMemoryAccess & GetMemoryAccess() const { return __memoryAccess; }
109 bool operator==(const GraphicsCachedResource * res) const;
110
111 vc::Error GetGUITextureID(void ** ptrToTextureId);
112
113 virtual int GetWidth() const = 0;
114 virtual int GetHeight() const = 0;
115 virtual void SetDimensions(int width, int height) = 0;
116
117protected:
118 virtual vc::Error _InitDepthBuffer(int width, int height) = 0;
119 virtual vc::Error _CreateAttachment(int width, int height, int imageCount, vc::ShaderVertexFormat format) = 0;
120 virtual vc::Error _SetMemoryAccess(const TextureMemoryAccess access) = 0;
121 virtual vc::Error _CreateReadWriteTexture(int width, int height, vc::ShaderVertexFormat format, int mipMapLevels, int arrayLayers) = 0;
122 virtual vc::Error _CreateShadowMaps(int dimension) = 0;
123 virtual vc::Error _CreateShadowCubeMaps(int dimension) = 0;
124 virtual vc::Error _SaveImageToFile(const char * path) = 0;
125
126private:
127 friend class Texture;
128 void __CreateDummyTexture();
129
130protected:
131 TextureType _textureType;
132 TextureUsage _textureUsage;
133
134public:
139 class VENOM_COMMON_API GUITexture
140 {
141 public:
142 GUITexture();
143 virtual ~GUITexture() = default;
144
145 void * GetTextureId();
146 vc::Error LoadTextureToGUI(vc::TextureImpl * impl);
147 vc::Error UnloadTextureFromGUI();
148
149 protected:
150 virtual vc::Error _UnloadTextureFromGUI(void * guiTextureId) = 0;
151 virtual vc::Error _LoadTextureToGUI(vc::TextureImpl * impl, void ** ptrToGuiTextureId) = 0;
152
153 private:
154 void * __guiTextureId;
155 };
156protected:
157 virtual GUITexture * _NewGuiTextureInstance() = 0;
158 static void UnloadAllGuiTextures();
159
160private:
161 TextureMemoryAccess __memoryAccess;
162 float __peakLuminance, __averageLuminance;
163
164 UPtr<GUITexture> __guiTexture;
165};
166
167enum class ColorAttachmentType
168{
169 Present = 0,
170 NormalSpecular = 1,
171 MetallicRougnessAO = 2,
172 Position = 3,
173 Depth = 4,
174 LightingAddition = 5,
175 Count
176};
177
178class VENOM_COMMON_API Texture : public PluginObjectImplWrapper
179{
180public:
181 Texture();
182 Texture(const char * path);
183 Texture(const char * path, int id, char * bgraData, unsigned int width, unsigned int height);
184 ~Texture();
185
186 bool operator==(const GraphicsCachedResource * res) const { return _impl->As<TextureImpl>()->operator==(res); }
187 bool operator==(const vc::SPtr<GraphicsCachedResource> & res) const { return _impl->As<TextureImpl>()->operator==(res.get()); }
188 inline vc::Error LoadImageFromFile(const char * path) { return _impl->As<TextureImpl>()->LoadImageFromFile(path); }
189 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); }
190 inline void LoadImageFromCachedResource(const SPtr<GraphicsCachedResource> res) { _impl->As<TextureImpl>()->SetResource(res); }
191 inline vc::Error InitDepthBuffer(int width, int height) { return _impl->As<TextureImpl>()->InitDepthBuffer(width, height); }
192 inline vc::Error CreateAttachment(int width, int height, int imageCount, vc::ShaderVertexFormat format) { return _impl->As<TextureImpl>()->CreateAttachment(width, height, imageCount, format); }
193 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); }
194 inline vc::Error CreateShadowMaps(int dimension) { return _impl->As<TextureImpl>()->CreateShadowMaps(dimension); }
195 inline vc::Error CreateShadowCubeMaps(int dimension) { return _impl->As<TextureImpl>()->CreateShadowCubeMaps(dimension); }
196 inline vc::Error SetMemoryAccess(const TextureMemoryAccess access) { return _impl->As<TextureImpl>()->SetMemoryAccess(access); }
197 inline bool HasTexture() const { return _impl->As<TextureImpl>()->HasTexture(); }
198 inline const vc::String & GetName() { return _impl->As<TextureImpl>()->GetResourceName(); }
199 inline const vc::String & GetShortName() { return _impl->As<TextureImpl>()->GetResourceShortName(); }
200 inline int GetWidth() const { return _impl->As<TextureImpl>()->GetWidth(); }
201 inline int GetHeight() const { return _impl->As<TextureImpl>()->GetHeight(); }
202 inline const TextureMemoryAccess & GetMemoryAccess() const { return _impl->As<TextureImpl>()->GetMemoryAccess(); }
203 inline const float & GetTexturePeakLuminance() const { return _impl->As<TextureImpl>()->GetTexturePeakLuminance(); }
204 inline const float & GetTextureAverageLuminance() const { return _impl->As<TextureImpl>()->GetTextureAverageLuminance(); }
205 inline vc::Error SaveImageToFile(const char * path) { return _impl->As<TextureImpl>()->SaveImageToFile(path); }
206
207 inline vc::Error GetGUITextureID(void ** ptrToTextureId) const { return _impl->As<TextureImpl>()->GetGUITextureID(ptrToTextureId); }
208#ifdef VENOM_BINDLESS_TEXTURES
209 inline int GetTextureID() const { return _impl->As<TextureImpl>()->GetTextureID(); }
210#endif
211
212 inline static void UnloadAllGuiTextures() { TextureImpl::UnloadAllGuiTextures(); }
213private:
214 friend class GraphicsApplication;
215 inline void __CreateDummyTexture() { _impl->As<TextureImpl>()->__CreateDummyTexture(); }
216};
217
218}
219}
Definition GraphicsApplication.h:28
Base class for cached resources.
Definition GraphicsPluginObject.h:29
Definition Texture.h:179
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:401
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