调用glDeleteTextures出现E0167类型不兼容错误及代码求助
解决glDeleteTextures参数类型不兼容的E0167错误
这个错误的根源非常清晰——你搞混了纹理ID和图像数据缓冲区的用途:
glDeleteTextures 函数的第二个参数要求传入的是 const GLuint* 类型,也就是你通过 glGenTextures 生成的纹理ID的指针,它的作用是告诉OpenGL要销毁哪个纹理对象。但你现在传入的是 LocalBuffer,这是 unsigned char* 类型的图像像素数据缓冲区,和纹理ID完全不是一回事,编译器自然会报类型不兼容的错误。
再看你的代码,构造函数里已经通过 stbi_image_free(LocalBuffer) 释放了图像数据缓冲区,所以析构函数里根本不需要处理它。你真正需要传给 glDeleteTextures 的是类里保存的 TextID(也就是 glGenTextures 生成的那个纹理ID)。
修正后的析构函数应该是这样:
~Texture() { glDeleteTextures(1, &TextID); }
额外提醒:
TextID是OpenGL用来标识纹理对象的唯一ID,glGenTextures创建它,glDeleteTextures销毁它,这一对函数要配合使用。LocalBuffer只是stbi库加载图像时临时存放像素数据的缓冲区,数据上传到OpenGL(glTexImage2D)之后,就可以释放了,你的构造函数里已经做了这件事,非常正确。
内容的提问来源于stack exchange,提问作者user13807163
相关产品推荐
相关产品推荐

