2011-12-22 52 views
0

在我的应用程序中,我使用了大约7到8个纹理。我也在做多个纹理。当我使用glDeleteTexture cmd删除所有纹理并使用glIsTexture命令检查,然后获取某些纹理的GL_True。 我想知道在哪些条件下glDeleteTexture()函数无法删除纹理?在opengl中不删除纹理

编辑:好吧,我调试我的代码,现在我知道主要有两个问题: 在我的应用程序的一个阶段,我有一个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(); 

给这个代码是给我在每个触摸输入一些泄漏。 其次到底我必须释放所有纹理和加载不同data.So我用下面的命令对应的

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

你能否将此问题简化为删除失败的简短代码片段? – Kos 2011-12-22 10:19:48

回答

1

您应该自己调查一下,通过添加代码来跟踪OpenGL返回的错误。也许你正在代码中的糟糕的地方进行删除,而纹理仍在使用中,或者其他东西。调用OpenGL调用后调用glGetError(),并记录结果。

+0

使用glgetError()后得到GL_NO_ERROR – LebRon 2011-12-22 12:17:51