My Project
GLTexture2D.h
1 #pragma once
2 #include "GLType.h"
3 #include <map>
4 
5 namespace ParaEngine
6 {
7  class Image;
8  class GLProgram;
9  typedef struct _MipmapInfo MipmapInfo;
10 
11 
12  class Texture2D : public CRefCountedOne
13  {
14  public:
15  enum class PixelFormat
16  {
18  AUTO,
20  BGRA8888,
22  RGBA8888,
24  RGB888,
26  RGB565,
28  A8,
30  I8,
32  AI88,
34  RGBA4444,
36  RGB5A1,
38  PVRTC4,
40  PVRTC4A,
42  PVRTC2,
44  PVRTC2A,
46  ETC,
48  S3TC_DXT1,
50  S3TC_DXT3,
52  S3TC_DXT5,
54  ATC_RGB,
60  DEFAULT = AUTO,
61 
62  NONE = -1
63  };
64 
65 
66  struct PixelFormatInfo {
67 
68  PixelFormatInfo(GLenum anInternalFormat, GLenum aFormat, GLenum aType, int aBpp, bool aCompressed, bool anAlpha)
69  : internalFormat(anInternalFormat)
70  , format(aFormat)
71  , type(aType)
72  , bpp(aBpp)
73  , compressed(aCompressed)
74  , alpha(anAlpha)
75  {}
76 
77  GLenum internalFormat;
78  GLenum format;
79  GLenum type;
80  int bpp;
81  bool compressed;
82  bool alpha;
83  };
84 
85  typedef std::map<Texture2D::PixelFormat, const PixelFormatInfo> PixelFormatInfoMap;
86 
87 
88  typedef struct _TexParams {
89  GLuint minFilter;
90  GLuint magFilter;
91  GLuint wrapS;
92  GLuint wrapT;
93  }TexParams;
94 
95  Texture2D();
96  virtual ~Texture2D();
97 
98  bool initWithImage(Image * image);
99  bool initWithImage(Image * image, PixelFormat format);
100 
101 
102 
103  int getNumberOfMipmaps();
104 
105 
107  int getPixelsWide() const;
108 
110  int getPixelsHigh() const;
111 
112 
113  bool initWithData(const void *data, size_t dataLen, Texture2D::PixelFormat pixelFormat, int pixelsWide, int pixelsHigh, const Size& contentSize);
114 
115  bool updateWithData(const void *data, int offsetX, int offsetY, int width, int height);
116 
117  GLuint getName() const;
118  void setTexParameters(const TexParams& texParams);
119  void setAliasTexParameters();
120  void setAntiAliasTexParameters();
121 
122  static const PixelFormatInfoMap& getPixelFormatInfoMap();
123 
124  private:
125  static Texture2D::PixelFormat g_defaultAlphaPixelFormat;
126 
128  Texture2D::PixelFormat _pixelFormat;
129 
131  int _pixelsWide;
132 
134  int _pixelsHigh;
135 
137  GLuint _name;
138 
140  GLfloat _maxS;
141 
143  GLfloat _maxT;
144 
146  Size _contentSize;
147 
149  bool _hasPremultipliedAlpha;
150 
152  bool _hasMipmaps;
153 
155  GLProgram* _shaderProgram;
156 
157  static const PixelFormatInfoMap _pixelFormatInfoTables;
158 
159  bool _antialiasEnabled;
160 
161  bool _valid;
162  std::string _filePath;
163 
164  Texture2D* _alphaTexture;
165 
166 
167 
168  bool initWithMipmaps(MipmapInfo* mipmaps, int mipmapsNum, PixelFormat pixelFormat, int pixelsWide, int pixelsHigh);
169 
170  void setGLProgram(GLProgram* shaderProgram);
171 
172  static Texture2D::PixelFormat convertDataToFormat(const unsigned char* data, size_t dataLen, PixelFormat originFormat, PixelFormat format, unsigned char** outData, size_t* outDataLen);
173 
174  static PixelFormat convertI8ToFormat(const unsigned char* data, size_t dataLen, PixelFormat format, unsigned char** outData, size_t* outDataLen);
175  static PixelFormat convertAI88ToFormat(const unsigned char* data, size_t dataLen, PixelFormat format, unsigned char** outData, size_t* outDataLen);
176  static PixelFormat convertRGB888ToFormat(const unsigned char* data, size_t dataLen, PixelFormat format, unsigned char** outData, size_t* outDataLen);
177  static PixelFormat convertRGBA8888ToFormat(const unsigned char* data, size_t dataLen, PixelFormat format, unsigned char** outData, size_t* outDataLen);
178 
179  //I8 to XXX
180  static void convertI8ToRGB888(const unsigned char* data, size_t dataLen, unsigned char* outData);
181  static void convertI8ToRGBA8888(const unsigned char* data, size_t dataLen, unsigned char* outData);
182  static void convertI8ToRGB565(const unsigned char* data, size_t dataLen, unsigned char* outData);
183  static void convertI8ToRGBA4444(const unsigned char* data, size_t dataLen, unsigned char* outData);
184  static void convertI8ToRGB5A1(const unsigned char* data, size_t dataLen, unsigned char* outData);
185  static void convertI8ToAI88(const unsigned char* data, size_t dataLen, unsigned char* outData);
186 
187  //AI88 to XXX
188  static void convertAI88ToRGB888(const unsigned char* data, size_t dataLen, unsigned char* outData);
189  static void convertAI88ToRGBA8888(const unsigned char* data, size_t dataLen, unsigned char* outData);
190  static void convertAI88ToRGB565(const unsigned char* data, size_t dataLen, unsigned char* outData);
191  static void convertAI88ToRGBA4444(const unsigned char* data, size_t dataLen, unsigned char* outData);
192  static void convertAI88ToRGB5A1(const unsigned char* data, size_t dataLen, unsigned char* outData);
193  static void convertAI88ToA8(const unsigned char* data, size_t dataLen, unsigned char* outData);
194  static void convertAI88ToI8(const unsigned char* data, size_t dataLen, unsigned char* outData);
195 
196  //RGB888 to XXX
197  static void convertRGB888ToRGBA8888(const unsigned char* data, size_t dataLen, unsigned char* outData);
198  static void convertRGB888ToRGB565(const unsigned char* data, size_t dataLen, unsigned char* outData);
199  static void convertRGB888ToA8(const unsigned char* data, size_t dataLen, unsigned char* outData);
200  static void convertRGB888ToI8(const unsigned char* data, size_t dataLen, unsigned char* outData);
201  static void convertRGB888ToAI88(const unsigned char* data, size_t dataLen, unsigned char* outData);
202  static void convertRGB888ToRGBA4444(const unsigned char* data, size_t dataLen, unsigned char* outData);
203  static void convertRGB888ToRGB5A1(const unsigned char* data, size_t dataLen, unsigned char* outData);
204 
205  //RGBA8888 to XXX
206  static void convertRGBA8888ToRGB888(const unsigned char* data, size_t dataLen, unsigned char* outData);
207  static void convertRGBA8888ToRGB565(const unsigned char* data, size_t dataLen, unsigned char* outData);
208  static void convertRGBA8888ToI8(const unsigned char* data, size_t dataLen, unsigned char* outData);
209  static void convertRGBA8888ToA8(const unsigned char* data, size_t dataLen, unsigned char* outData);
210  static void convertRGBA8888ToAI88(const unsigned char* data, size_t dataLen, unsigned char* outData);
211  static void convertRGBA8888ToRGBA4444(const unsigned char* data, size_t dataLen, unsigned char* outData);
212  static void convertRGBA8888ToRGB5A1(const unsigned char* data, size_t dataLen, unsigned char* outData);
213  };
214 }
Definition: GLType.h:217
int getPixelsWide() const
Gets the width of the texture in pixels.
Definition: GLTexture2D.cpp:288
Definition: GLTexture2D.h:66
ETC-compressed texture: ETC.
Definition: GLImage.h:16
ATITC-compressed texture: ATC_EXPLICIT_ALPHA.
Definition: GLTexture2D.h:88
int getPixelsHigh() const
Gets the height of the texture in pixels.
Definition: GLTexture2D.cpp:296
S3TC-compressed texture: S3TC_Dxt1.
Base class for a reference counted asset.
Definition: PERef.h:55
S3TC-compressed texture: S3TC_Dxt5.
different physics engine has different winding order.
Definition: EventBinding.h:32
ATITC-compressed texture: ATC_INTERPOLATED_ALPHA.
4-bit PVRTC-compressed texture: PVRTC4 (has alpha channel)
Default texture format: AUTO.
S3TC-compressed texture: S3TC_Dxt3.
PixelFormat
Definition: GLTexture2D.h:15
2-bit PVRTC-compressed texture: PVRTC2 (has alpha channel)
8-bit textures used as masks
Definition: GLTexture2D.h:12
16-bit texture without Alpha channel
4-bit PVRTC-compressed texture: PVRTC4
16-bit textures used as masks
ATITC-compressed texture: ATC_RGB.
Definition: GLImage.h:8
GLProgram Class that implements a glProgram.
Definition: GLProgram.h:43
2-bit PVRTC-compressed texture: PVRTC2