当我们想要将纹理设置为一个制服时,我们不能将纹理id绑定到程序,我们必须建立如下的关系:
textureId< - >纹理单元< - >设置统一
"纹理单元的概念"有点多余?
这里有什么特别之处,以便它作为中间人有用吗?
答案 0 :(得分:2)
着色器可以访问的纹理数量有限(理论上)。这些限制不同于着色器可以访问的制服数量和其他参数的限制。
此外,通过使纹理对象不是程序状态的一部分,它允许您更改程序而不用更改正在使用的纹理。两个不同的程序可以引用相同的纹理单元(例如,阴影贴图)。按照自己的方式,我们必须将阴影贴图附加到使用它的每个程序。使用当前的方式,我们绑定它一次,让程序决定它们使用的是什么。
答案 1 :(得分:1)
您可以创建一个新功能,使代码更简单,因为它可能是多余的,但它也很有用: 纹理单元用于多纹理,并且没有其他方法可以做到这一点。将纹理指定给数字非常简单。然后它允许快速改变纹理。因此,即使只有一个纹理,我们也必须这样做。
但正如我所说,一个小功能,它采用着色器程序,纹理,也许纹理单元,然后它没关系,只有一行使其工作。