删除opengl中未使用的纹理

时间:2014-06-01 22:05:35

标签: c++ opengl textures

在浏览时here我注意到了一些奇怪的事情。

加载压缩纹理并将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 );

1 个答案:

答案 0 :(得分:2)

是的,这是正确的。

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