如何刪除我製作的所有紋理?假設我加載了幾個紋理:如何刪除一次製作的所有紋理?
GLuint tx_wall,tx_floor,tx_tiles;
tx_wall=LoadTexture("tex_wall.raw",512,512),
tx_floor=LoadTexture("tex_floor.raw",512,512),
tx_tiles=LoadTexture("tex_tiles.raw",512,512);
然後用它們:
glBindTexture(GL_TEXTURE_2D,tx_wall);
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex3f(0, 0, 0);
glTexCoord2f(1, 0); glVertex3f(0, 50, 0);
glTexCoord2f(1, 1); glVertex3f(0, 0, 14);
glTexCoord2f(0, 1); glVertex3f(0, 50, 14);
glEnd();
glBindTexture(GL_TEXTURE_2D,tx_floor);
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex3f(0, 0, 0);
glTexCoord2f(1, 0); glVertex3f(50, 50, 0);
glTexCoord2f(1, 1); glVertex3f(50, 50, 0);
glTexCoord2f(0, 1); glVertex3f(0, 0, 0);
glEnd();
(and so on)
,當遊戲結束時,將其刪除:
glDeleteTextures(1,&tx_wall);
glDeleteTextures(1,&tx_floor);
glDeleteTextures(1,&tx_tiles);
所有工作正常,但如果我有10或20紋理比我將如何終止他們都沒有采取他們的名字?
已經給出了答案(將所有待刪除的紋理名稱放入數組中,將該數組及其長度傳遞給glDeleteTextures)。但是,當你的應用程序結束時,你不需要刪除你的東西。無論如何,OpenGL都使用抽象的對象模型,所以如果你不清除任何內容就終止了這個過程,這並不是某種內存泄漏。刪除紋理名稱只是將紋理名稱從它可能攜帶的任何數據中分離出來(並且驅動程序的垃圾收集器將會清理它,有時候,也許立即) – datenwolf