00001
00002 #ifndef _TP_TEXTURE_H
00003 #define _TP_TEXTURE_H
00004
00005 #include "GL/GLPlatform.h"
00006 #include "GLResource.h"
00007 #include "Image.h"
00008 #include "ImageArray.h"
00009 #include "GL/TPProgramName.h"
00010
00011
00012 namespace gk {
00013
00014 enum
00015 {
00016 UNIT0= 0,
00017 UNIT1= 1,
00018 UNIT2= 2,
00019 UNIT3= 3,
00020 UNIT4= 4,
00021 UNIT5= 5,
00022 UNIT6= 6,
00023 UNIT7= 7
00024 };
00025
00026
00027 class GLTexture : public GLResource
00028 {
00029
00030 GLTexture( const GLTexture& );
00031 GLTexture& operator= ( const GLTexture& );
00032
00033 protected:
00034 GLuint m_target;
00035 GLenum m_format;
00036 GLenum m_data_format;
00037 GLenum m_data_type;
00038 int m_width;
00039 int m_height;
00040 int m_depth;
00041
00042 public:
00043
00044 GLTexture( const GLenum target )
00045 :
00046 GLResource(),
00047 m_target(target),
00048 m_format(0),
00049 m_data_format(0),
00050 m_data_type(0),
00051 m_width(0),
00052 m_height(0),
00053 m_depth(0)
00054 {
00055 glGenTextures(1, &m_name);
00056 }
00057
00058
00059 virtual ~GLTexture( )
00060 {
00061 glDeleteTextures(1, &m_name);
00062 }
00063
00064
00065 int createGLResource( )
00066 {
00067 return (m_name != 0) ? 0 : -1;
00068 }
00069
00070
00071 int releaseGLResource( )
00072 {
00073 return (m_name != 0) ? 0 : -1;
00074 }
00075
00076
00077 GLenum target( ) const
00078 {
00079 return m_target;
00080 }
00081
00082
00083 GLenum format( ) const
00084 {
00085 return m_format;
00086 }
00087
00088
00089 GLenum dataFormat( ) const
00090 {
00091 return m_data_format;
00092 }
00093
00094
00095 GLenum dataType( ) const
00096 {
00097 return m_data_type;
00098 }
00099
00100
00101 int width( ) const
00102 {
00103 return m_width;
00104 }
00105
00106
00107 int height( ) const
00108 {
00109 return m_height;
00110 }
00111
00112
00113 int depth( ) const
00114 {
00115 return m_depth;
00116 }
00117
00118
00119 int count( ) const
00120 {
00121 if(m_target == GL_TEXTURE_1D_ARRAY)
00122 return m_height;
00123 else if(m_target == GL_TEXTURE_2D_ARRAY)
00124 return m_depth;
00125 else if(m_target == GL_TEXTURE_CUBE_MAP)
00126 return 6;
00127
00128
00129
00130 return 0;
00131 }
00132
00133
00134
00135 Image *getImage( const int unit, const int level= 0 ) const;
00136
00137
00138
00139 HDRImage *getHDRImage( const int unit, const int level= 0 ) const;
00140
00141
00142
00143 ImageArray *getImageArray( const int unit, const int level= 0 ) const;
00144
00145
00146
00147 HDRImageArray *getHDRImageArray( const int unit, const int level= 0 ) const;
00148
00149
00150
00151 };
00152
00153 class GLTexture1D : public GLTexture
00154 {
00155 public:
00156 GLTexture1D( )
00157 :
00158 GLTexture(GL_TEXTURE_1D)
00159 {}
00160
00161 ~GLTexture1D( ) {}
00162 };
00163
00164 class GLTexture1DArray : public GLTexture
00165 {
00166 public:
00167 GLTexture1DArray( )
00168 :
00169 GLTexture(GL_TEXTURE_1D_ARRAY)
00170 {}
00171
00172 ~GLTexture1DArray( ) {}
00173 };
00174
00175 class GLTexture2D : public GLTexture
00176 {
00177 public:
00178 GLTexture2D( const GLenum target )
00179 :
00180 GLTexture(target)
00181 {}
00182
00183 virtual ~GLTexture2D( ) {}
00184
00185 GLTexture2D( const int unit, const int w, const int h, const GLenum format= GL_RGBA,
00186 const GLenum data_format= GL_RGBA, const GLenum data_type= GL_UNSIGNED_BYTE );
00187
00188 GLTexture2D( const int unit, const HDRImage *image, const GLenum format= GL_RGBA32F,
00189 const GLenum data_format= GL_RGBA, const GLenum data_type= GL_FLOAT );
00190
00191 GLTexture2D( const int unit, const Image *image, const GLenum format= GL_RGBA,
00192 const GLenum data_format= GL_RGBA, const GLenum data_type=GL_UNSIGNED_BYTE );
00193 };
00194
00195 class GLDepthTexture : public GLTexture2D
00196 {
00197 public:
00198 GLDepthTexture( )
00199 :
00200 GLTexture2D(GL_TEXTURE_2D)
00201 {}
00202
00203 GLDepthTexture( const int unit, const int w, const int h, const GLenum format= GL_DEPTH_COMPONENT,
00204 const GLenum data_format= GL_DEPTH_COMPONENT, const GLenum data_type= GL_FLOAT);
00205
00206 ~GLDepthTexture( ) {}
00207
00208 HDRImage *getHDRImage( const int unit ) const;
00209 };
00210
00211 class GLTexture2DArray : public GLTexture2D
00212 {
00213 public:
00214 GLTexture2DArray( )
00215 :
00216 GLTexture2D(GL_TEXTURE_2D_ARRAY)
00217 {}
00218
00219 ~GLTexture2DArray( ) {}
00220
00221 GLTexture2DArray( const int unit, const int w, const int h, const int count, const GLenum format= GL_RGBA,
00222 const GLenum data_format= GL_RGBA, const GLenum data_type= GL_UNSIGNED_BYTE );
00223
00224 GLTexture2DArray( const int unit, const HDRImageArray *images, const GLenum format= GL_RGBA32F,
00225 const GLenum data_format= GL_RGBA, const GLenum data_type= GL_FLOAT );
00226
00227 GLTexture2DArray( const int unit, const ImageArray *images, const GLenum format= GL_RGBA,
00228 const GLenum data_format= GL_RGBA, const GLenum data_type=GL_UNSIGNED_BYTE );
00229 };
00230
00231 class GLTextureCube : public GLTexture2D
00232 {
00233 public:
00234 GLTextureCube( )
00235 :
00236 GLTexture2D(GL_TEXTURE_CUBE_MAP)
00237 {}
00238
00239 ~GLTextureCube( ) {}
00240
00241 GLTextureCube( const int unit, const int w, const int h, const GLenum format= GL_RGBA,
00242 const GLenum data_format= GL_RGBA, const GLenum data_type= GL_UNSIGNED_BYTE );
00243
00244 GLTextureCube( const int unit, const HDRImageCube *faces, const GLenum format= GL_RGBA32F,
00245 const GLenum data_format= GL_RGBA, const GLenum data_type= GL_FLOAT );
00246
00247 GLTextureCube( const int unit, const ImageCube *faces, const GLenum format= GL_RGBA,
00248 const GLenum data_format= GL_RGBA, const GLenum data_type=GL_UNSIGNED_BYTE );
00249 };
00250
00251 class GLDepthTextureCube : public GLTexture2D
00252 {
00253 public:
00254 GLDepthTextureCube( )
00255 :
00256 GLTexture2D(GL_TEXTURE_CUBE_MAP)
00257 {}
00258
00259 ~GLDepthTextureCube( ) {}
00260
00261 GLDepthTextureCube( const int unit, const int w, const int h, const GLenum format= GL_DEPTH_COMPONENT,
00262 const GLenum data_format= GL_DEPTH_COMPONENT, const GLenum data_type= GL_FLOAT );
00263 };
00264
00265 class GLTextureCubeArray : public GLTexture
00266 {
00267 public:
00268 GLTextureCubeArray( )
00269 :
00270 GLTexture(GL_TEXTURE_CUBE_MAP_ARRAY_ARB)
00271 {
00272
00273 }
00274
00275 ~GLTextureCubeArray( ) {}
00276 };
00277
00278
00279 class GLTexture3D : public GLTexture
00280 {
00281 public:
00282 GLTexture3D( )
00283 :
00284 GLTexture(GL_TEXTURE_3D)
00285 {}
00286
00287 ~GLTexture3D( ) {}
00288 };
00289
00290 }
00291
00292 #endif