OpenGL:纹理单元的概念是多余的吗?
OpenGL: Is the concept of texture unit redundant?
当我们想将一个贴图设置为一个uniform时,我们不能将一个贴图id绑定到一个程序中,我们必须建立如下关系:
textureId <-> 纹理单元 <-> 设置统一
"texture unit"的概念是不是有点多余?
这里有什么特别的东西可以用作中间体吗?
您可以创建一个新函数来简化代码,因为它可能是多余的但也很有用:
纹理单元用于多重纹理,没有其他方法可以做到这一点。将纹理分配给数字非常简单。然后它允许快速改变纹理。所以即使只有一个纹理,我们也必须这样做 link。
但是正如我所说,一个小函数需要着色器程序、纹理和可能的纹理单元然后就可以了,只需要 1 行就可以让它工作。
着色器可以访问的纹理数量存在限制(理论上)。这些限制不同于着色器可以访问的制服数量和其他参数的限制。
此外,通过使纹理对象不成为程序状态的一部分,它允许您更改程序而无需更改正在使用的纹理。两个不同的程序可以引用相同的纹理单元(例如,阴影贴图)。按照您的方式,我们必须将阴影贴图附加到每个使用它的程序。按照目前的方式,我们绑定一次,让程序决定他们使用什么。
当我们想将一个贴图设置为一个uniform时,我们不能将一个贴图id绑定到一个程序中,我们必须建立如下关系:
textureId <-> 纹理单元 <-> 设置统一
"texture unit"的概念是不是有点多余?
这里有什么特别的东西可以用作中间体吗?
您可以创建一个新函数来简化代码,因为它可能是多余的但也很有用: 纹理单元用于多重纹理,没有其他方法可以做到这一点。将纹理分配给数字非常简单。然后它允许快速改变纹理。所以即使只有一个纹理,我们也必须这样做 link。
但是正如我所说,一个小函数需要着色器程序、纹理和可能的纹理单元然后就可以了,只需要 1 行就可以让它工作。
着色器可以访问的纹理数量存在限制(理论上)。这些限制不同于着色器可以访问的制服数量和其他参数的限制。
此外,通过使纹理对象不成为程序状态的一部分,它允许您更改程序而无需更改正在使用的纹理。两个不同的程序可以引用相同的纹理单元(例如,阴影贴图)。按照您的方式,我们必须将阴影贴图附加到每个使用它的程序。按照目前的方式,我们绑定一次,让程序决定他们使用什么。