下面是我的项目中的一个BIG问题:OpenGL纹理映射错误
我喜欢NeHe网站上的教程,并且Windows XP完美地运行了这些程序。但是,当我重新格式化计算机时,将操作系统更改为Windows Vista并重新安装了我的Dev-C++编译器,然后尝试打开任何使用纹理的C++程序,程序崩溃了。
我意识到我的glaux.h失踪了。我在互联网上找到了该文件并重新编译了我的项目,但它仍然崩溃。当我排除纹理函数时一切顺利。
问题在哪里,我能做些什么来解决它?
我在想这些之一是罪魁祸首: Windows Vista操作系统,我的图形卡,glaux.h和库(我知道它有bug),OpenGL本身。
。
更新:我确定了问题的根源。
这个代码块导致我的程序崩溃:
if (TextureImage[0]) {
if (TextureImage[0]->data) {
free(TextureImage[0]->data);
}
free(TextureImage[0]);
}
出于某种原因,我的程序老是死机时,我就以释放内存。当我评论这部分时,我的程序运行正常,除了所有的颜色都变黑(我想这是因为我的位图文件的颜色)。有小费吗?
。
回复:马蒂亚斯Valdenegro
好了,这是从讷河lesson6它工作得很好,当我还在使用Windows XP中的。当我切换到Windows Vista时,绝对没有改变。
只要你知道,这里是整个函数:
#define NoOfTextures 3
GLuint texture[NoOfTextures];
int LoadGLTextures()
{
int Status=FALSE;
AUX_RGBImageRec *TextureImage[NoOfTextures];
memset(TextureImage,0,sizeof(void *)*1);
if (TextureImage[0]=LoadBMP("Data/Bitmaps/texture.bmp"))
{
Status=TRUE;
glGenTextures(1, &texture[0]);
glBindTexture(GL_TEXTURE_2D, texture[0]);
glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
if (TextureImage[0] != NULL) {
if (TextureImage[0]->data != NULL) {
free(TextureImage[0]->data);
}
free(TextureImage[0]);
}
}
return Status;
}
。
附加信息:
我经常重建我的项目,LoadBMP()是相同的头文件的一部分。这是LoadBMP()函数:
AUX_RGBImageRec *LoadBMP(char *Filename)
{
FILE *File=NULL;
if (!Filename)
{
return NULL;
}
File=fopen(Filename,"r");
if (File)
{
fclose(File);
return auxDIBImageLoad(Filename);
}
return NULL;
}
这对我来说似乎很清楚。
它在哪里崩溃?使用调试器来查找。 – 2010-08-05 19:18:23
将__ *图形驱动程序更新到最新版本* __,并发布程序崩溃的代码行。 – SigTerm 2010-08-05 19:19:32
你可以发布LoadBMP功能吗?检查它是否正确分配内存。 – 2010-08-05 21:06:26