在opengl中删除未使用的纹理

Deleting unused textures in opengl

本文关键字:纹理 未使用 删除 opengl      更新时间:2023-10-16

在浏览这里时,我注意到一些奇怪的事情。

加载压缩纹理并获取ID到着色器统一后

    GLuint Texture = loadDDS("uvtemplate.DDS");
    // Get a handle for our "myTextureSampler" uniform
    GLuint TextureID  = glGetUniformLocation(programID, "myTextureSampler");

他用从glGetUniformLocation获取的ID删除了纹理

    glDeleteTextures(1, &TextureID);

他不该用这个代替吗?

    glDeleteTextures(1, &Texture );

是的,这是正确的。

一些OpenGL实现(如AMD和nVidia驱动)倾向于返回升序的资源ID,从1开始。如果这是代码分配的第一个纹理,并且采样器是着色器程序中的第一个统一,那么id将匹配,并且代码意外地工作。然而,它可能会在其他平台(如英特尔驱动程序)上中断,或者当使用更多资源时。