2011-12-22 49 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