标签:64位
在win32环境下,已经提供了GLAUX库,但对于x64位,基本上该库没有提供64为支持。会出现以下错误:
------ 已启动生成: 项目: OpenGL, 配置: Debug x64 ------
1> OpenGL.cpp
1>OpenGL.cpp(746): warning C4244: “return”: 从“WPARAM”转换到“int”,可能丢失数据
1>OpenGL.obj : error LNK2019: 无法解析的外部符号 auxDIBImageLoadA,该符号在函数 "struct _AUX_RGBImageRec * __cdecl LoadBMP(char *)" (?LoadBMP@@YAPEAU_AUX_RGBImageRec@@PEAD@Z) 中被引用
1>F:\OpenGL\x64\Debug\OpenGL.exe : fatal error LNK1120: 1 个无法解析的外部命令
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
对此研究了一下午,并没有什么重大发现;所以索性自己写了一个加载bmp的函数,考虑到上下的兼容性。在此我用到了AUX_RGBImageRec结构,其实就是一个结构体,不愿意用的话可以自己重写一下,具体如下:
typedef struct _AUX_RGBImageRec {
GLint sizeX, sizeY;
unsigned char *data;
} AUX_RGBImageRec;
自己写的bmp函数如下:
//自定义加载bmp文件
AUX_RGBImageRec * LoadBMP(char *Filename)
{
unsigned int Texture;
AUX_RGBImageRec * tex_result=new AUX_RGBImageRec; //be careful
FILE* img = NULL;
img = fopen(Filename, "r");
GLint bWidth = 0;
GLint bHeight = 0;
DWORD size = 0;
fseek(img, 18, SEEK_SET);
fread(&bWidth, 4, 1, img);
fread(&bHeight, 4, 1, img);
fseek(img, 0, SEEK_END);
size = ftell(img) - 54;
unsigned char *data = (unsigned char*)malloc(size);
fseek(img, 54, SEEK_SET); // image data
fread(data, size, 1, img);
fclose(img);
glGenTextures(1, &Texture);
glBindTexture(GL_TEXTURE_2D, Texture);
gluBuild2DMipmaps(GL_TEXTURE_2D, 3, bWidth, bHeight, GL_BGRA, GL_UNSIGNED_BYTE, data);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
tex_result->sizeX = bWidth;
tex_result->sizeY = bHeight;
tex_result->data = data;
// if (data)
// free(data);
return tex_result;
}
此处有几个需要注意是地方:(1)注意像素格式,是GL_BGRA、GL_RGBA、GL_RGB等的哪一种,否则解析结果不对;
(2)用此函数需要弄清你所用图像位深格式:32还是24
OpenGL中x64 debug下bmp图像导入出错解决方案
标签:64位
原文地址:http://blog.csdn.net/gggg_ggg/article/details/49870135