在绑定不同的纹理时再次重用 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 就可以了。不需要多次激活它,它会自动激活为默认纹理
在许多示例中,一些示例针对不同的纹理反复使用 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 就可以了。不需要多次激活它,它会自动激活为默认纹理