TAPs 0.7.7.3
TAPsOpenGLTexture.hpp
Go to the documentation of this file.
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----+----
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines