00001
00002 #ifndef _TP_TEXTURE_H
00003 #define _TP_TEXTURE_H
00004
00005 #include "GLResource.h"
00006 #include "GL/GLPlatform.h"
00007 #include "Image.h"
00008 #include "ImageArray.h"
00009
00010
00011 namespace gk {
00012
00013
00014 class GLTexture : public GLResource
00015 {
00016 protected:
00017 GLuint m_name;
00018 GLuint m_target;
00019 GLenum m_format;
00020 GLenum m_data_format;
00021 GLenum m_data_type;
00022 int m_width;
00023 int m_height;
00024 int m_depth;
00025
00026
00027 GLTexture( const GLTexture& );
00028 GLTexture& operator= ( const GLTexture& );
00029
00030 public:
00031 GLTexture( const GLenum target )
00032 :
00033 GLResource(),
00034 m_target(target),
00035 m_format(0),
00036 m_data_format(0),
00037 m_data_type(0),
00038 m_width(0),
00039 m_height(0),
00040 m_depth(0)
00041 {
00042 glGenTextures(1, &m_name);
00043 }
00044
00045 virtual ~GLTexture( )
00046 {
00047 glDeleteTextures(1, &m_name);
00048 }
00049
00050 int createGLResource( )
00051 {
00052 return (m_name != 0) ? 0 : -1;
00053 }
00054
00055 int releaseGLResource( )
00056 {
00057 return (m_name != 0) ? 0 : -1;
00058 }
00059
00060 GLuint name( ) const
00061 {
00062 return m_name;
00063 }
00064
00065 GLenum target( ) const
00066 {
00067 return m_target;
00068 }
00069
00070 GLenum format( ) const
00071 {
00072 return m_format;
00073 }
00074
00075 GLenum dataFormat( ) const
00076 {
00077 return m_data_format;
00078 }
00079
00080 GLenum dataType( ) const
00081 {
00082 return m_data_type;
00083 }
00084
00085 int width( ) const
00086 {
00087 return m_width;
00088 }
00089
00090 int height( ) const
00091 {
00092 return m_height;
00093 }
00094
00095 int depth( ) const
00096 {
00097 return m_depth;
00098 }
00099 };
00100
00101 class GLTexture1D : public GLTexture
00102 {
00103 public:
00104 GLTexture1D( )
00105 :
00106 GLTexture(GL_TEXTURE_1D)
00107 {}
00108
00109 ~GLTexture1D( ) {}
00110 };
00111
00112 class GLTexture1DArray : public GLTexture
00113 {
00114 public:
00115 GLTexture1DArray( )
00116 :
00117 GLTexture(GL_TEXTURE_1D_ARRAY)
00118 {}
00119
00120 ~GLTexture1DArray( ) {}
00121 };
00122
00123 class GLTexture2D : public GLTexture
00124 {
00125 public:
00126 GLTexture2D( const GLenum target )
00127 :
00128 GLTexture(target)
00129 {}
00130
00131 virtual ~GLTexture2D( ) {}
00132
00133 GLTexture2D( const int unit, const int w, const int h, const GLenum format= GL_RGBA,
00134 const GLenum data_format= GL_RGBA, const GLenum data_type= GL_UNSIGNED_BYTE );
00135
00136 GLTexture2D( const int unit, const HDRImage *image, const GLenum format= GL_RGBA32F,
00137 const GLenum data_format= GL_RGBA, const GLenum data_type= GL_FLOAT );
00138
00139 GLTexture2D( const int unit, const Image *image, const GLenum format= GL_RGBA,
00140 const GLenum data_format= GL_RGBA, const GLenum data_type=GL_UNSIGNED_BYTE );
00141 };
00142
00143 class GLDepthTexture : public GLTexture2D
00144 {
00145 public:
00146 GLDepthTexture( )
00147 :
00148 GLTexture2D(GL_TEXTURE_2D)
00149 {}
00150
00151 GLDepthTexture( const int unit, const int w, const int h, const GLenum format= GL_DEPTH_COMPONENT,
00152 const GLenum data_format= GL_DEPTH_COMPONENT, const GLenum data_type= GL_FLOAT);
00153
00154 ~GLDepthTexture( ) {}
00155 };
00156
00157 class GLTexture2DArray : public GLTexture2D
00158 {
00159 public:
00160 GLTexture2DArray( )
00161 :
00162 GLTexture2D(GL_TEXTURE_2D_ARRAY)
00163 {}
00164
00165 ~GLTexture2DArray( ) {}
00166
00167 GLTexture2DArray( const int unit, const int w, const int h, const int count, const GLenum format= GL_RGBA,
00168 const GLenum data_format= GL_RGBA, const GLenum data_type= GL_UNSIGNED_BYTE );
00169
00170 GLTexture2DArray( const int unit, const HDRImageArray *images, const GLenum format= GL_RGBA32F,
00171 const GLenum data_format= GL_RGBA, const GLenum data_type= GL_FLOAT );
00172
00173 GLTexture2DArray( const int unit, const ImageArray *images, const GLenum format= GL_RGBA,
00174 const GLenum data_format= GL_RGBA, const GLenum data_type=GL_UNSIGNED_BYTE );
00175 };
00176
00177 class GLTextureCube : public GLTexture2D
00178 {
00179 public:
00180 GLTextureCube( )
00181 :
00182 GLTexture2D(GL_TEXTURE_CUBE_MAP)
00183 {}
00184
00185 ~GLTextureCube( ) {}
00186
00187 GLTextureCube( const int unit, const int w, const int h, const GLenum format= GL_RGBA,
00188 const GLenum data_format= GL_RGBA, const GLenum data_type= GL_UNSIGNED_BYTE );
00189
00190 GLTextureCube( const int unit, const HDRImageCube *faces, const GLenum format= GL_RGBA32F,
00191 const GLenum data_format= GL_RGBA, const GLenum data_type= GL_FLOAT );
00192
00193 GLTextureCube( const int unit, const ImageCube *faces, const GLenum format= GL_RGBA,
00194 const GLenum data_format= GL_RGBA, const GLenum data_type=GL_UNSIGNED_BYTE );
00195 };
00196
00197 class GLTextureCubeArray : public GLTexture
00198 {
00199 public:
00200 GLTextureCubeArray( )
00201 :
00202 GLTexture(GL_TEXTURE_CUBE_MAP_ARRAY_ARB)
00203 {
00204
00205 }
00206
00207 ~GLTextureCubeArray( ) {}
00208 };
00209
00210
00211 class GLTexture3D : public GLTexture
00212 {
00213 public:
00214 GLTexture3D( )
00215 :
00216 GLTexture(GL_TEXTURE_3D)
00217 {}
00218
00219 ~GLTexture3D( ) {}
00220 };
00221
00222 }
00223
00224 #endif