OpenGLES加载BMP文件为纹理

加载bmp文件为纹理也是比较常用的了。

 

unsigned char *CTestDemoDlg::loadBMP(char *filename, BITMAPINFOHEADER *bmpInfo)
{
 FILE *file;
 BITMAPFILEHEADER bmpFile;
 unsigned char *bmpImage = NULL;
 unsigned char tmpRGB;
 
 file = fopen(filename,"rb");
 
 if (!file)
 {
  ::MessageBox(NULL, "Can't Find Bitmap", "Error", MB_OK);
  return NULL;
 }
 
 fread(&bmpFile,sizeof(BITMAPFILEHEADER),1,file);
 
 if (bmpFile.bfType != 0x4D42)
 {
  ::MessageBox(NULL, "Incorrect texture type", "Error", MB_OK);
  fclose(file);
  return NULL;
 }
 
 fread(bmpInfo,sizeof(BITMAPINFOHEADER),1,file);
 
 fseek(file,bmpFile.bfOffBits,SEEK_SET);
 
 bmpImage = new unsigned char[bmpInfo->biSizeImage];
 
 if (!bmpImage)
 {
  ::MessageBox(NULL, "Out of Memory", "Error", MB_OK);
  delete[] bmpImage;
  fclose(file);
  return NULL;
 }
 
 fread(bmpImage,1,bmpInfo->biSizeImage,file);
 
 if (!bmpImage)
 {
  ::MessageBox(NULL, "Error reading bitmap", "Error", MB_OK);
  fclose(file);
  return NULL;
 }
 
 for (unsigned int i = 0; i < bmpInfo->biSizeImage; i+=3)
 {
  tmpRGB = bmpImage[i];
  bmpImage[i] = bmpImage[i+2];
  bmpImage[i+2] = tmpRGB;
 }
 
 fclose(file);
 
 return bmpImage;
}

 

BOOL CTestDemoDlg::LoadTexture(char *filename, GLuint *id)
{    
 BITMAPINFOHEADER info;
 unsigned char *bitmap;
 
 bitmap = loadBMP(filename, &info);
 
 if (!bitmap)
  return false;
 
 glGenTextures(1, id);
 glBindTexture(GL_TEXTURE_2D, *id);
 glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
 glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
 glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
 glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, info.biWidth, info.biHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, bitmap);
 
 return TRUE;
}

 

 

使用格式:LoadTexture("Data/Compressed.bmp", &m_Texture);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值