2
* Copyright 2010 Inalogic Inc.
4
* This program is free software: you can redistribute it and/or modify it
5
* under the terms of the GNU Lesser General Public License version 3, as
6
* published by the Free Software Foundation.
8
* This program is distributed in the hope that it will be useful, but
9
* WITHOUT ANY WARRANTY; without even the implied warranties of
10
* MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR
11
* PURPOSE. See the applicable version of the GNU Lesser General Public
12
* License for more details.
14
* You should have received a copy of both the GNU Lesser General Public
15
* License version 3 along with this program. If not, see
16
* <http://www.gnu.org/licenses/>
18
* Authored by: Jay Taoko <jay.taoko_AT_gmail_DOT_com>
23
#ifndef GLTEXTURERESOURCEMANAGER_H
24
#define GLTEXTURERESOURCEMANAGER_H
26
#include "GLResourceManager.h"
27
#include "IOpenGLBaseTexture.h"
35
NTexture* CreateTextureFromFile(const TCHAR* TextureFilename);
36
NTexture* CreateTextureFromBitmapData(const NBitmapData* BitmapData);
38
class NTexture: public NResource
40
DECLARE_OBJECT_TYPE(NTexture, NResource);
45
virtual bool Update(const NBitmapData* BitmapData) = 0;
46
virtual bool Update(const TCHAR* filename) = 0;
48
virtual void GetData(void* Buffer, int MipIndex, int StrideY, int face = 0) = 0;
49
virtual int GetWidth() const = 0;
50
virtual int GetHeight() const = 0;
51
virtual int GetDepth() const = 0;
52
virtual bool IsPowerOfTwo() const = 0;
53
virtual BitmapFormat GetFormat() const = 0;
54
virtual int GetNumMipLevel() const = 0;
55
virtual bool IsNull() const = 0;
56
TRefGL<IOpenGLBaseTexture> GetDeviceTexture();
57
TRefGL<NGLTexture> GetCachedTexture();
60
class NTexture2D: public NTexture
62
DECLARE_OBJECT_TYPE(NTexture2D, NTexture);
66
NTexture2D(const NTexture2D& texture);
67
NTexture2D(const NTextureData& TextureData);
68
NTexture2D& operator = (const NTexture2D& texture);
71
virtual bool Update(const NBitmapData* BitmapData);
72
virtual bool Update(const TCHAR* filename);
74
virtual bool IsNull() const {return m_Image.IsNull();}
75
void GetData(void* Buffer, int MipIndex, int StrideY, int face = 0);
76
int GetNumMipLevel() const {return m_Image.GetNumMipmap();}
77
int GetWidth() const {return m_Image.GetWidth();}
78
int GetHeight() const {return m_Image.GetHeight();}
79
int GetDepth() const {return 1;}
80
BitmapFormat GetFormat() const {return m_Image.GetFormat();}
81
bool IsPowerOfTwo() const {return IsPowerOf2(m_Image.GetWidth()) && IsPowerOf2(m_Image.GetHeight());}
83
virtual NString GetResourceName() { return NString(TEXT("NTexture2D")); }
89
class NRectangleTexture: public NTexture
91
DECLARE_OBJECT_TYPE(NRectangleTexture, NTexture);
95
//NRectangleTexture(const NTextureData& Image);
96
NRectangleTexture(const NRectangleTexture& texture);
97
NRectangleTexture& operator = (const NRectangleTexture& texture);
100
virtual bool Update(const NBitmapData* BitmapData);
101
virtual bool Update(const TCHAR* filename);
103
virtual bool IsNull() const {return m_Image.IsNull();}
104
void GetData(void* Buffer, int MipIndex, int StrideY, int face = 0);
105
int GetNumMipLevel() const {return m_Image.GetNumMipmap();}
106
int GetWidth() const {return m_Image.GetWidth();}
107
int GetHeight() const {return m_Image.GetHeight();}
108
int GetDepth() const {return 1;}
109
BitmapFormat GetFormat() const {return m_Image.GetFormat();}
110
bool IsPowerOfTwo() const {return IsPowerOf2(m_Image.GetWidth()) && IsPowerOf2(m_Image.GetHeight());}
112
virtual NString GetResourceName() { return NString(TEXT("NRectangleTexture")); }
115
NTextureData m_Image;
118
class NTextureCube: public NTexture
120
DECLARE_OBJECT_TYPE(NTextureCube, NTexture);
124
//NTexture2D(const NTextureData& Image);
125
NTextureCube(const NTextureCube& texture);
126
NTextureCube& operator = (const NTextureCube& texture);
129
virtual bool Update(const NBitmapData* BitmapData);
130
virtual bool Update(const TCHAR* filename);
132
virtual bool IsNull() const {return m_Image.IsNull();}
133
void GetData(void* Buffer, int MipIndex, int StrideY, int face = 0);
134
int GetNumMipLevel() const {return m_Image.GetNumMipmap();}
135
int GetWidth() const {return m_Image.GetWidth();}
136
int GetHeight() const {return m_Image.GetHeight();}
137
int GetDepth() const {return 1;}
138
BitmapFormat GetFormat() const {return m_Image.GetFormat();}
139
bool IsPowerOfTwo() const {return IsPowerOf2(m_Image.GetWidth()) && IsPowerOf2(m_Image.GetHeight());}
141
virtual NString GetResourceName() { return NString(TEXT("NTextureCube")); }
143
NCubemapData m_Image;
146
class NTextureVolume: public NTexture
148
DECLARE_OBJECT_TYPE(NTextureVolume, NTexture);
152
//NTexture2D(const NTextureData& Image);
153
NTextureVolume(const NTextureVolume& texture);
154
NTextureVolume& operator = (const NTextureVolume& texture);
157
virtual bool Update(const NBitmapData* BitmapData);
158
virtual bool Update(const TCHAR* filename);
160
virtual bool IsNull() const {return m_Image.IsNull();}
161
void GetData(void* Buffer, int MipIndex, int StrideY, int slice = 0);
162
int GetNumMipLevel() const {return m_Image.GetNumMipmap();}
163
int GetWidth() const {return m_Image.GetWidth();}
164
int GetHeight() const {return m_Image.GetHeight();}
165
int GetDepth() const {return m_Image.GetDepth();}
166
BitmapFormat GetFormat() const {return m_Image.GetFormat();}
167
bool IsPowerOfTwo() const {return IsPowerOf2(m_Image.GetWidth()) && IsPowerOf2(m_Image.GetHeight());}
171
virtual NString GetResourceName() { return NString(TEXT("NTextureVolume")); }
173
//NVolumeData m_Image;
176
class NAnimatedTexture: public NTexture
178
DECLARE_OBJECT_TYPE(NAnimatedTexture, NTexture);
182
NAnimatedTexture(const NAnimatedTexture& texture);
183
NAnimatedTexture& operator = (const NAnimatedTexture& texture);
186
virtual bool Update(const NBitmapData* BitmapData);
187
virtual bool Update(const TCHAR* filename);
189
virtual bool IsNull() const {return m_Image.IsNull();}
190
void GetData(void* Buffer, int MipIndex, int StrideY, int slice = 0);
191
int GetFrameTime(int Frame);
192
int GetNumMipLevel() const {return m_Image.GetNumMipmap();}
193
int GetWidth() const {return m_Image.GetWidth();}
194
int GetHeight() const {return m_Image.GetHeight();}
195
int GetDepth() const {return m_Image.GetDepth();}
196
BitmapFormat GetFormat() const {return m_Image.GetFormat();}
197
bool IsPowerOfTwo() const {return IsPowerOf2(m_Image.GetWidth()) && IsPowerOf2(m_Image.GetHeight());}
199
NAnimatedTextureData m_Image;
201
virtual NString GetResourceName() { return NString(TEXT("NAnimatedTexture")); }
203
//NVolumeData m_Image;
206
class NGLTexture: public NGLResource
208
DECLARE_OBJECT_TYPE(NGLTexture, NGLResource);
210
TRefGL<IOpenGLBaseTexture> m_Texture;
212
NGLTexture(NResourceSet* ResourceManager)
213
: NGLResource(ResourceManager),
217
SourceFormat(BITFMT_UNKNOWN)
226
virtual void LoadMipLevel(NTexture* SourceTexture, int MipLevel) = 0;
228
virtual bool UpdateResource(NResource* Resource)
230
UpdateTexture((NTexture*)Resource);
234
bool RecreateTexture(NTexture* Source);
236
virtual void UpdateTexture(NTexture* Source) = 0;
238
unsigned int SourceWidth;
239
unsigned int SourceHeight;
240
unsigned int SourceDepth;
241
BitmapFormat SourceFormat;
244
class NGLTexture2D: public NGLTexture
246
DECLARE_OBJECT_TYPE(NGLTexture2D, NGLTexture);
248
NGLTexture2D(NResourceSet* ResourceManager, NTexture2D* SourceTexture);
251
virtual void UpdateTexture(NTexture* Source);
252
virtual void LoadMipLevel(NTexture* SourceTexture, int MipLevel);
255
class NGLRectangleTexture: public NGLTexture
257
DECLARE_OBJECT_TYPE(NGLRectangleTexture, NGLTexture);
259
NGLRectangleTexture(NResourceSet* ResourceManager, NRectangleTexture* SourceTexture);
260
~NGLRectangleTexture();
262
virtual void UpdateTexture(NTexture* Source);
263
virtual void LoadMipLevel(NTexture* SourceTexture, int MipLevel);
266
class NGLTextureCube: public NGLTexture
268
DECLARE_OBJECT_TYPE(NGLTextureCube, NGLTexture);
270
NGLTextureCube(NResourceSet* ResourceManager, NTextureCube* SourceTexture);
273
virtual void UpdateTexture(NTexture* Source);
274
virtual void LoadMipLevel(NTexture* SourceTexture, int MipLevel);
277
class NGLTextureVolume: public NGLTexture
279
DECLARE_OBJECT_TYPE(NGLTextureVolume, NGLTexture);
281
NGLTextureVolume(NResourceSet* ResourceManager, NTextureVolume* SourceTexture);
284
virtual void UpdateTexture(NTexture* Source);
285
virtual void LoadMipLevel(NTexture* SourceTexture, int MipLevel);
288
class NGLAnimatedTexture: public NGLTexture
290
DECLARE_OBJECT_TYPE(NGLAnimatedTexture, NGLTexture);
292
NGLAnimatedTexture(NResourceSet* ResourceManager, NAnimatedTexture* SourceTexture);
293
~NGLAnimatedTexture();
295
virtual void UpdateTexture(NTexture* Source);
296
virtual void LoadMipLevel(NTexture* SourceTexture, int MipLevel);
301
#endif // GLTEXTURERESOURCEMANAGER_H