69class VENOM_COMMON_API TextureImpl :
public GraphicsPluginObject,
public GraphicsCachedResourceHolder
73 virtual ~TextureImpl();
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(); }
96 virtual bool HasTexture()
const = 0;
98 vc::Error SetMemoryAccess(
const TextureMemoryAccess access);
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; }
110 vc::Error GetGUITextureID(
void ** ptrToTextureId);
112 virtual int GetWidth()
const = 0;
113 virtual int GetHeight()
const = 0;
114 virtual void SetDimensions(
int width,
int height) = 0;
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;
126 friend class Texture;
127 void __CreateDummyTexture();
130 TextureType _textureType;
131 TextureUsage _textureUsage;
138 class VENOM_COMMON_API GUITexture
142 virtual ~GUITexture() =
default;
144 void * GetTextureId();
146 vc::Error UnloadTextureFromGUI();
149 virtual vc::Error _UnloadTextureFromGUI(
void * guiTextureId) = 0;
150 virtual vc::Error _LoadTextureToGUI(
vc::TextureImpl * impl,
void ** ptrToGuiTextureId) = 0;
153 void * __guiTextureId;
156 virtual GUITexture * _NewGuiTextureInstance() = 0;
157 static void UnloadAllGuiTextures();
160 TextureMemoryAccess __memoryAccess;
161 float __peakLuminance, __averageLuminance;
163 UPtr<GUITexture> __guiTexture;
177class VENOM_COMMON_API Texture :
public PluginObjectWrapper
181 Texture(
const char * path);
182 Texture(
const char * path,
int id,
char * bgraData,
unsigned int width,
unsigned int height);
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); }
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(); }
211 inline static void UnloadAllGuiTextures() { TextureImpl::UnloadAllGuiTextures(); }
213 friend class GraphicsApplication;
214 inline void __CreateDummyTexture() { _impl->As<
TextureImpl>()->__CreateDummyTexture(); }
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