如何删除一次制作的所有纹理?

Cpp*_*Ogl 0 c++ opengl

如何删除我制作的所有纹理?假设我加载了一些纹理:

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);
Run Code Online (Sandbox Code Playgroud)

然后使用它们:

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)
Run Code Online (Sandbox Code Playgroud)

当游戏结束时,删除它们:

glDeleteTextures(1,&tx_wall);
glDeleteTextures(1,&tx_floor);
glDeleteTextures(1,&tx_tiles);
Run Code Online (Sandbox Code Playgroud)

一切正常,但如果我有10或20个纹理,我将如何终止它们而不取名字?

San*_*ker 5

如果将所有纹理标识符放在一个数组中,您可以使用一次调用将它们全部删除glDeleteTextures(就像您可以在一次调用中使用它们一样生成它们glGenTextures).

GLuint textures[3];
glGenTextures(3, textures);

/* ... */

glDeleteTextures(3, textures);
Run Code Online (Sandbox Code Playgroud)

  • @CppOgl:我没有(并且没有)在你原来的问题中看到这一点,但也许Adam Bowen解释的方法可以更好地满足你的需求呢?虽然我试图直接回答您的问题,但他的方法是处理(纹理)资源管理的推荐方法. (2认同)