Texture.cpp
上传用户:sz83729876
上传日期:2013-03-07
资源大小:4140k
文件大小:2k
源码类别:

OpenGL

开发平台:

Windows_Unix

  1. #include "Texture.h"
  2. #include "Image.h"
  3. Texture::Texture()
  4. {
  5.     m_strTextureDir = "";
  6.     m_iFilter = GL_LINEAR;
  7.     m_bMips = false;
  8. }
  9. unsigned int Texture::UploadTexture( CImage* pImage )
  10. {
  11.     unsigned int iTexture=0;
  12.     int uType;
  13.     switch( pImage->m_dwDepth )
  14.     {
  15.         case 24: 
  16.             uType = GL_RGB; 
  17.             break;
  18.         case 32:
  19.             uType = GL_RGBA;
  20.             break;
  21.         default:
  22.             return 0xffff;
  23.     }
  24.     glGenTextures( 1, &iTexture );
  25.     glBindTexture( GL_TEXTURE_2D, iTexture );
  26.     glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT );
  27.     glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT );    
  28.     if (m_bMips)
  29.     {
  30.         glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
  31.         glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
  32.         gluBuild2DMipmaps( GL_TEXTURE_2D, uType, pImage->m_dwWidth, pImage->m_dwHeight, 
  33.                            uType, GL_UNSIGNED_BYTE, pImage->m_cData );
  34.     } else
  35.     {
  36.         glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, m_iFilter );
  37.         glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, m_iFilter );
  38.         glTexImage2D( GL_TEXTURE_2D, 0, uType, pImage->m_dwWidth, pImage->m_dwHeight,
  39.                       0, uType, GL_UNSIGNED_BYTE, pImage->m_cData );
  40.     }
  41.     return iTexture;
  42. }
  43. unsigned int Texture::LoadTexture( std::string strFile )
  44. {
  45.     unsigned int iTexture;
  46.     CImage* pImage;
  47.     strFile = m_strTextureDir + strFile;
  48.     pImage = new CImage();
  49.     if (!pImage->LoadFromJPEG( strFile ))
  50.         return 0xffff;
  51.     iTexture = UploadTexture( pImage );
  52.     delete pImage;
  53.     Log::Print( "Texture loaded "%s"...", strFile.c_str() );
  54.     return iTexture;
  55. }