![]() |
TAPs 0.7.7.3
|
00001 /****************************************************************************** 00002 TAPsOpenGLTexture.hpp 00003 00004 OpenGL Material Properties 00005 00006 SUKITTI PUNAK (05/12/2007) 00007 MAJOR UPDATE (08/14/2009) 00008 ******************************************************************************/ 00015 #ifndef TAPs_OPENGL_TEXTURE_HPP 00016 #define TAPs_OPENGL_TEXTURE_HPP 00017 00018 #include "TAPsOpenGLEnumList.hpp" 00019 00020 BEGIN_NAMESPACE_TAPs__OpenGL 00021 //============================================================================= 00022 class Texture { 00023 //============================================================================= 00024 //------------------------------------------------------------------------- 00025 // put it through ostream 00026 friend std::ostream & operator<< ( std::ostream &output, Texture const &o ) 00027 { 00028 output << "TAPs Texture:" 00029 << "\n-------------" 00030 << "\n The numbers are OpenGL defined." 00031 << "\n-------------" 00032 << "\nTarget: " << o.m_Target 00033 << "\nLevel: " << o.m_Level 00034 << "\nInternalFormat: " << o.m_InternalFormat 00035 << "\n#InternalFormatComponents: " << (int) o.m_InternalFormatNumOfComponents 00036 << "\nWidth: " << o.m_Width 00037 << "\nHeight: " << o.m_Height 00038 << "\nDepth: " << o.m_Depth 00039 << "\nBorder: " << o.m_Border 00040 << "\nPixelFormat: " << o.m_PixelFormat 00041 << "\n#PixelFormatComponents: " << (int) o.m_PixelFormatNumOfComponents 00042 << "\nDataType: " << o.m_DataType 00043 << "\n#Textures: " << o.m_NumOfTextures 00044 << "\nMaxCoord: " << o.m_MaxCoordS << ", " << o.m_MaxCoordT << ", " << o.m_MaxCoordR 00045 << "\nMinCoord: " << o.m_MinCoordS << ", " << o.m_MinCoordT << ", " << o.m_MinCoordR 00046 << "\nWrapS: " << o.m_ParamTex_Wrap_S 00047 << "\nWrapT: " << o.m_ParamTex_Wrap_T 00048 << "\nWrapR: " << o.m_ParamTex_Wrap_R 00049 << "\nMagFilter: " << o.m_ParamTex_MagFilter 00050 << "\nMinFilter: " << o.m_ParamTex_MinFilter 00051 << "\n-------------\n"; 00052 return output; 00053 } 00054 //----------------------------------------------------------------------------- 00055 public: 00056 // Member Functions =================================================== 00057 //------------------------------------------------------------------------- 00061 Texture (); 00065 Texture ( 00066 GLenum target, 00067 GLint level, 00068 GLint internalFormat, 00069 GLsizei width, 00070 GLint border, 00071 GLenum pixelFormat, 00072 GLenum dataType, 00073 //----------------------------- 00074 GLvoid * texels = NULL, // texel data 00075 //----------------------------- 00076 unsigned short numOfTextures = 1, // number of textures 00077 //----------------------------- 00078 GLint magFilter = GL_NEAREST, 00079 GLint minFilter = GL_NEAREST, 00080 GLint wrapS = GL_CLAMP, 00081 GLint wrapT = GL_CLAMP, 00082 GLint wrapR = GL_CLAMP 00083 //----------------------------- 00084 ); 00088 Texture ( 00089 GLenum target, 00090 GLint level, 00091 GLint internalFormat, 00092 GLsizei width, 00093 GLsizei height, 00094 GLint border, 00095 GLenum pixelFormat, 00096 GLenum dataType, 00097 //----------------------------- 00098 GLvoid * texels = NULL, // texel data 00099 //----------------------------- 00100 unsigned short numOfTextures = 1, // number of textures 00101 //----------------------------- 00102 GLint magFilter = GL_NEAREST, 00103 GLint minFilter = GL_NEAREST, 00104 GLint wrapS = GL_CLAMP, 00105 GLint wrapT = GL_CLAMP, 00106 GLint wrapR = GL_CLAMP 00107 //----------------------------- 00108 ); 00112 Texture ( 00113 GLenum target, 00114 GLint level, 00115 GLint internalFormat, 00116 GLsizei width, 00117 GLsizei height, 00118 GLsizei depth, 00119 GLint border, 00120 GLenum pixelFormat, 00121 GLenum dataType, 00122 //----------------------------- 00123 GLvoid * texels = NULL, // texel data 00124 //----------------------------- 00125 unsigned short numOfTextures = 1, // number of textures 00126 //----------------------------- 00127 GLint magFilter = GL_NEAREST, 00128 GLint minFilter = GL_NEAREST, 00129 GLint wrapS = GL_CLAMP, 00130 GLint wrapT = GL_CLAMP, 00131 GLint wrapR = GL_CLAMP 00132 //----------------------------- 00133 ); 00137 ~Texture (); 00138 //------------------------------------------------------------------------- 00139 // Init/Setup/Create/Define 00140 void ChangeTexture ( // 1D Texture 00141 GLenum target, 00142 GLint level, 00143 GLint internalFormat, 00144 GLsizei width, 00145 GLint border, 00146 GLenum pixelFormat, 00147 GLenum dataType, 00148 //----------------------------- 00149 GLvoid * texels = NULL, // texel data 00150 //----------------------------- 00151 unsigned short numOfTextures = 1 // number of textures 00152 //----------------------------- 00153 ); 00154 void ChangeTexture ( // 2D Texture 00155 GLenum target, 00156 GLint level, 00157 GLint internalFormat, 00158 GLsizei width, 00159 GLsizei height, 00160 GLint border, 00161 GLenum pixelFormat, 00162 GLenum dataType, 00163 //----------------------------- 00164 GLvoid * texels = NULL, // texel data 00165 //----------------------------- 00166 unsigned short numOfTextures = 1 // number of textures 00167 //----------------------------- 00168 ); 00169 void ChangeTexture ( // 3D Texture 00170 GLenum target, 00171 GLint level, 00172 GLint internalFormat, 00173 GLsizei width, 00174 GLsizei height, 00175 GLsizei depth, 00176 GLint border, 00177 GLenum pixelFormat, 00178 GLenum dataType, 00179 //----------------------------- 00180 GLvoid * texels = NULL, // texel data 00181 //----------------------------- 00182 unsigned short numOfTextures = 1 // number of textures 00183 //----------------------------- 00184 ); 00185 void CreateTexture ( GLvoid const * texels ); 00186 void DeleteTexture (); 00187 //------------------------------------------------------------------------- 00188 // Get/Set Fns 00189 inline void SetTarget ( GLenum target ) { m_Target = target; } 00190 inline void SetLevel ( GLint level ) { m_Level = level; } 00191 inline void SetInternalFormat ( GLint inFormat ) { m_InternalFormat = inFormat; } 00192 inline void SetWidth ( GLsizei width ) { m_Width = width; } 00193 inline void SetHeight ( GLsizei height ) { m_Height = height; } 00194 inline void SetDepth ( GLsizei depth ) { m_Depth = depth; } 00195 inline void SetBorder ( GLint border ) { m_Border = border; } 00196 inline void SetPixelFormat ( GLenum pixFormat ) { m_PixelFormat = pixFormat; } 00197 inline void SetDataType ( GLenum dataType ) { m_DataType = dataType; } 00198 inline void SetNumberOfTextures ( unsigned short numOfTextures ) 00199 { m_NumOfTextures = numOfTextures; } 00205 inline void SetMaxCoordS ( short maxCoordS ) { m_MaxCoordS = maxCoordS; } 00206 inline void SetMaxCoordT ( short maxCoordT ) { m_MaxCoordT = maxCoordT; } 00207 inline void SetMaxCoordR ( short maxCoordR ) { m_MaxCoordR = maxCoordR; } 00208 inline void SetMinCoordS ( short minCoordS ) { m_MinCoordS = minCoordS; } 00209 inline void SetMinCoordT ( short minCoordT ) { m_MinCoordT = minCoordT; } 00210 inline void SetMinCoordR ( short minCoordR ) { m_MinCoordR = minCoordR; } 00211 // 00212 //inline void SetNumberOfTextures ( unsigned int numOfTextures ) 00213 // { m_NumOfTextures = numOfTextures; } 00214 // 00215 inline GLenum GetTarget () const { return m_Target; } 00216 inline GLint GetLevel () const { return m_Level; } 00217 inline GLint GetInternalFormat () const { return m_InternalFormat; } 00218 inline GLsizei GetWidth () const { return m_Width; } 00219 inline GLsizei GetHeight () const { return m_Height; } 00220 inline GLsizei GetDepth () const { return m_Depth; } 00221 inline GLint GetBorder () const { return m_Border; } 00222 inline GLenum GetPixelFormat () const { return m_PixelFormat; } 00223 inline GLenum GetDataType () const { return m_DataType; } 00224 // 00225 inline unsigned char GetInternalFormatNumberOfComponents () const 00226 { return m_InternalFormatNumOfComponents; } 00227 inline unsigned char GetPixelFormatNumberOfComponents () const 00228 { return m_PixelFormatNumOfComponents; } 00229 // 00230 inline short GetMaxCoordS () const { return m_MaxCoordS; } 00231 inline short GetMaxCoordT () const { return m_MaxCoordT; } 00232 inline short GetMaxCoordR () const { return m_MaxCoordR; } 00233 inline short GetMinCoordS () const { return m_MinCoordS; } 00234 inline short GetMinCoordT () const { return m_MinCoordT; } 00235 inline short GetMinCoordR () const { return m_MinCoordR; } 00236 // 00237 inline unsigned short GetNumberOfTextures () const { return m_NumOfTextures; } 00238 // 00239 GLuint GetTexture ( unsigned short idx = 0 ) const 00240 { 00241 assert( 0 <= idx && idx < m_NumOfTextures ); 00242 return m_TextureNames[ idx ]; 00243 } 00247 // GLuint SetTextureID ( unsigned short idx = 0, GLuint texName ) 00248 // { m_TextureNames[ idx ] = texName; } 00255 void NextOfCircularBuffer () { 00256 unsigned short i = 0; 00257 GLuint tempTexName = m_TextureNames[i]; 00258 while ( i < m_NumOfTextures-1 ) { 00259 m_TextureNames[i] = m_TextureNames[i+1]; 00260 ++i; 00261 } 00262 m_TextureNames[i] = tempTexName; 00263 } 00264 //------------------------------------------------------------------------- 00265 void SetParameterMagFilter ( GLint param ) { m_ParamTex_MagFilter = param; } 00266 void SetParameterMinFilter ( GLint param ) { m_ParamTex_MinFilter = param; } 00267 void SetParameterWrapS ( GLint param ) { m_ParamTex_Wrap_S = param; } 00268 void SetParameterWrapT ( GLint param ) { m_ParamTex_Wrap_T = param; } 00269 void SetParameterWrapR ( GLint param ) { m_ParamTex_Wrap_R = param; } 00270 //... 00271 void EnableTextureTarget () const { 00272 glEnable( m_Target ); 00273 } 00274 void DisableTextureTarget () const { 00275 glDisable( m_Target ); 00276 } 00277 void BindTexture( unsigned short idx = 0 ) const { 00278 assert( 0 <= idx && idx < m_NumOfTextures ); 00279 glBindTexture( m_Target, m_TextureNames[ idx ] ); 00280 } 00281 void UseParameters () const { 00282 glTexParameteri( m_Target, GL_TEXTURE_WRAP_S, m_ParamTex_Wrap_S ); 00283 glTexParameteri( m_Target, GL_TEXTURE_WRAP_T, m_ParamTex_Wrap_T ); 00284 glTexParameteri( m_Target, GL_TEXTURE_WRAP_R, m_ParamTex_Wrap_R ); 00285 glTexParameteri( m_Target, GL_TEXTURE_MAG_FILTER, m_ParamTex_MagFilter ); 00286 glTexParameteri( m_Target, GL_TEXTURE_MIN_FILTER, m_ParamTex_MinFilter ); 00287 } 00288 void UnbindTexture() const { 00289 glBindTexture( m_Target, 0 ); 00290 } 00291 //------------------------------------------------------------------------- 00292 void PrintTextureData ( unsigned short texNum = 0 ); 00293 //template <typename T> T* GetTextureData () const; 00294 //template <typename T> void LoadTextureDataFrom ( T const * const inData ); 00295 //------------------------------------------------------------------------- 00296 //----------------------------------------------------------------------------- 00297 protected: 00298 //------------------------------------------------------------------------- 00299 // Helper Functions 00300 //------------------------------------------------------------------------- 00301 template <typename T> void CreateTexImageFrom ( T const * texels ); 00302 template <typename T> void PrintTextureData ( unsigned short texNum, T * outData, unsigned int size ); 00303 //------------------------------------------------------------------------- 00304 // Data Members ======================================================= 00305 //------------------------------------------------------------------------- 00306 GLenum m_Target; 00307 GLint m_Level; 00308 GLint m_InternalFormat; 00309 GLsizei m_Width; 00310 GLsizei m_Height; 00311 GLsizei m_Depth; 00312 GLint m_Border; 00313 GLenum m_PixelFormat; 00314 GLenum m_DataType; 00315 //----------------------------- 00316 unsigned char m_InternalFormatNumOfComponents; // set according to internalFormat 00317 unsigned char m_PixelFormatNumOfComponents; // set according to pixelFormat 00318 //----------------------------- 00327 short m_MaxCoordS; // max coordinate s 00328 short m_MaxCoordT; // max coordinate t 00329 short m_MaxCoordR; // max coordinate r 00330 short m_MinCoordS; // min coordinate s 00331 short m_MinCoordT; // min coordinate t 00332 short m_MinCoordR; // min coordinate r 00333 //----------------------------- 00334 unsigned short m_NumOfTextures; // number of textures 00335 //----------------------------- 00336 GLuint * m_TextureNames; // List of texture names 00337 //----------------------------- 00338 // Parameters 00339 GLint m_ParamTex_Wrap_S; 00340 GLint m_ParamTex_Wrap_T; 00341 GLint m_ParamTex_Wrap_R; 00342 GLint m_ParamTex_MagFilter; 00343 GLint m_ParamTex_MinFilter; 00344 //GLint m_ParamTex_Priority; 00345 //... 00346 //------------------------------------------------------------------------- 00347 }; // end class Texture 00348 //============================================================================= 00349 END_NAMESPACE_TAPs__OpenGL 00350 //----------------------------------------------------------------------------- 00351 // Include definition if TAPs_USE_EXPORT is not defined 00352 #if !defined( TAPs_USE_EXPORT ) 00353 #include "TAPsOpenGLTexture.cpp" 00354 #endif 00355 //----------------------------------------------------------------------------- 00356 #endif 00357 //34567890123456789012345678901234567890123456789012345678901234567890123456789 00358 //--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----