Advertisement
Guest User

Untitled

a guest
Mar 13th, 2013
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.79 KB | None | 0 0
  1. bool Texture::loadTexture2D(std::string _file, bool generateMipmaps)
  2. {
  3.     Logger::getInstance()->write(StringUtils::format("Loading texture '%s'", _file.c_str()));
  4.  
  5.     is3D = false;
  6.  
  7.     FREE_IMAGE_FORMAT fifmt = FreeImage_GetFileType(_file.c_str(), 0);
  8.     FIBITMAP *dib = FreeImage_Load(fifmt, _file.c_str(),0);
  9.     FreeImage_SetTransparent(dib,true);
  10.     dib = FreeImage_ConvertTo32Bits(dib);
  11.    
  12.     if( dib != NULL )
  13.     {
  14.         glGenTextures(1, &textureId);
  15.         glBindTexture(GL_TEXTURE_2D, textureId);
  16.  
  17.         BYTE *bytes = new BYTE[FreeImage_GetWidth(dib) * FreeImage_GetHeight(dib) * 4];
  18.  
  19.         width = FreeImage_GetWidth(dib);
  20.         height = FreeImage_GetHeight(dib);
  21.  
  22.         BYTE *pixels = (BYTE*)FreeImage_GetBits(dib);
  23.  
  24.         for(unsigned int pixel = 0; pixel < FreeImage_GetWidth(dib) * FreeImage_GetHeight(dib); pixel++)
  25.         {
  26.             bytes[pixel*3+0] = pixels[pixel*3+2];
  27.             bytes[pixel*3+1] = pixels[pixel*3+1];
  28.             bytes[pixel*3+2] = pixels[pixel*3+0];
  29.             bytes[pixel*3+3] = pixels[pixel*3+3];
  30.         }
  31.          
  32.         glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, FreeImage_GetWidth(dib), FreeImage_GetHeight(dib), 0,
  33.                 GL_RGBA, GL_UNSIGNED_BYTE, bytes);
  34.  
  35.         bitsPerPixel = FreeImage_GetBPP(dib);
  36.  
  37.         if(generateMipmaps)
  38.         {
  39.             glGenerateMipmap(GL_TEXTURE_2D);
  40.             mipMapsGenerated = true;
  41.         }
  42.  
  43.         glGenSamplers(1, &samplerId);
  44.        
  45.         FreeImage_Unload(dib);
  46.         delete bytes;
  47.  
  48.         setFiltering(TextureFiltering::TEXTURE_FILTER_MAG_BILINEAR, TextureFiltering::TEXTURE_FILTER_MIN_BILINEAR);
  49.         setSamplerParameter(GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
  50.         setSamplerParameter(GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
  51.  
  52.         Logger::getInstance()->write(StringUtils::format("Loaded texture '%s'", _file.c_str()));
  53.  
  54.         return true;
  55.     }
  56.  
  57.     Logger::getInstance()->write(StringUtils::format("Error loading texture '%s'", _file.c_str()));
  58.  
  59.     return false;
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement