在ogl纹理崩溃的窗户上的lodepng

时间:2012-12-11 19:33:42

标签: opengl png texturing

我正在使用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/

1 个答案:

答案 0 :(得分:1)

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

glBindTexture(GL_TEXTURE_2D, texture[0]);

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

添加:

glGenTextures(1,&texture[0]);

在此之前:

glBindTexture(GL_TEXTURE_2D, texture[0]);

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