在绑定不同的纹理时再次重用 GL_TEXTURE0 是不是不好的做法?

Is it bad practice to reuse GL_TEXTURE0 over again when binding different textures?

在许多示例中,一些示例针对不同的纹理反复使用 GL_TEXTURE0,而在其他示例中,它们增加了纹理插槽,如下所示:

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, woodTexture);
...
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, metalTexture);
...
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, plasticTexture);

相对于

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, woodTexture);
...
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, metalTexture);
...
glActiveTexture(GL_TEXTURE2);
glBindTexture(GL_TEXTURE_2D, plasticTexture);

一个或另一个不好的做法,或者效率更差,还是根本不重要?

多个纹理单元适用于具有多个纹理的一个几何体。例如,一些光照着色器需要两个光照贴图用于漫反射和镜面反射。然后你需要为两个采样器提供两个纹理。在这种情况下,您必须激活两个纹理。见以下结构:

struct Material {
    sampler2D diffuse;
    sampler2D specular;    
    float shininess;
}; 

如果几何图形只有 1 个纹理,那么只使用 GL_TEXTURE0 就可以了。不需要多次激活它,它会自动激活为默认纹理