0

我正在使用 lodePNG 从 png 文件中加载纹理,但是当我加载纹理时程序崩溃了。

char* filename = "texture.png";
unsigned width, height;
std::vector<unsigned char>image;
GLuint texture[1];
//decode
unsigned error = lodepng::decode(image, width, height, filename);
if(error) std::cerr << "decoder error " << error << ": " << lodepng_error_text(error) << std::endl;
glBindTexture(GL_TEXTURE_2D, texture[0]);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0,
GL_RGBA, GL_UNSIGNED_BYTE, &image[0]);

我用VS 2010编译,没有错误,但是调用glTexImage2D的时候就崩溃了。我的系统是 Windows 7,显卡支持 OGL 3.3。

我有另一个系统,它是 Mac OSX 10.6,我一直在移植代码,在 Mac 上完全没有问题。有没有我可以提出的修复建议,以便在 Windows 上正确加载纹理?

这是我获得 lodePNG 文件的网站:http: //lodev.org/lodepng/

4

1 回答 1

1

在您的代码中,您声明了 GLuint texture[1],这是一个由一个纹理句柄组成的数组。然后在这一行绑定到这个未初始化的纹理句柄:

glBindTexture(GL_TEXTURE_2D, texture[0]);

这是不正确的。您正在绑定到尚未初始化的纹理句柄。相反,您需要做的是通过调用 glGenTextures 来生成纹理句柄。然后你可以绑定到纹理。所以试试这个:

添加这个:

glGenTextures(1,&texture[0]);

在此行之前:

glBindTexture(GL_TEXTURE_2D, texture[0]);

调用 glGenTextures 后,您的句柄 (texture[0]) 应该是一个非零值。

于 2013-04-05T12:16:36.413 回答