在我的应用程序中,我使用大约7到8个纹理。我也在进行多次纹理处理。当我使用glDeleteTexture cmd删除所有纹理并使用glIsTexture命令检查然后获取某些纹理的GL_True。 我想知道glDeleteTexture()函数在哪些条件下无法删除纹理?
编辑:好的,我调试我的代码,现在我知道主要有两个问题: 在我的应用程序的一个阶段,我有一个3D模型和不同的触摸输入我正在改变其上的纹理。所以在每次触摸输入时我都会调用以下代码
glDeleteTextures(1, &tex1);
switch(case)
{
case 1:
tex1 = CreateTexture("xyz.pvr");
break;
case 2:
tex1 = CreateTexture("abc.pvr");
...
...
下面给出了CreateTexture
UploadImage(file);
GLuint name;
glEnable(GL_TEXTURE_2D);
glGenTextures(1, &name);
glBindTexture(GL_TEXTURE_2D, name);
glTexEnvf( GL_TEXTURE_2D, GL_TEXTURE_ENV_MODE, GL_DECAL);
glTexParameterf(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
GLfloat fLargest;
glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &fLargest);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, fLargest);
glTexImage2D(GL_TEXTURE_2D, level, format, w, h, 0, format, type, data);
UnloadImage();
此代码在每次触摸输入时都会给我一些泄漏。 其次,最后我必须释放所有纹理并加载不同的数据。所以我使用以下命令删除所有纹理
glDeleteTextures(1, &tex1);
glDeleteTextures(1, &tex2);
glDeleteTextures(1, &tex3);
glDeleteTextures(1, &tex4);
glDeleteTextures(1, &tex5);
glDeleteTextures(1, &tex6)
然后使用
检查其已删除或未删除 glIsTexture(tex1);
glIsTexture(tex2);
glIsTexture(tex3);
glIsTexture(tex4);
glIsTexture(tex5);
glIsTexture(tex6);
但是对于某些纹理来说是真实的。
答案 0 :(得分:1)
您应该通过添加代码来跟踪从OpenGL返回的错误来自行调查。也许你在代码中的一个不好的地方进行删除,而纹理仍然在使用,或者某些东西。在您要调查的OpenGL调用之后调用glGetError()
,并记录结果。