我使用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]);我使用VS2010编译,没有错误,但当我调用glTexImage2D时发生崩溃。我的系统是Windows7,显卡支持OGL 3.3。
我有另一个系统,它是MacOSX10.6,我总是在移植代码,在Mac上完全没有问题。有什么建议的修复方法可以让它在窗口中正确加载纹理吗?
这是我获得lodePNG文件的站点:http://lodev.org/lodepng/
发布于 2013-04-05 20:16:36
在代码中,声明GLuint texture1,这是一个纹理句柄的数组。然后在该行上绑定到这个未初始化的纹理句柄:
glBindTexture(GL_TEXTURE_2D, texture[0]);这是不正确的。您正在绑定到尚未初始化的纹理句柄。相反,您需要做的是通过调用glGenTextures来生成纹理句柄。然后,您可以绑定到纹理。所以试试这个:
添加以下内容:
glGenTextures(1,&texture[0]);在此行之前:
glBindTexture(GL_TEXTURE_2D, texture[0]);调用glGenTextures后,句柄(纹理)应为非零值。
https://stackoverflow.com/questions/13827162
复制相似问题