均匀位置和均匀指数之间的差异?

Dan*_*ter 6 opengl

OpenGL中统一位置和统一索引之间有什么区别?看起来您需要为统一分配值的位置,并且您需要索引来查询有关统一的信息.

为什么需要两个值?为什么其中一个不能同时满足这两个目的?

Nic*_*las 10

看起来您需要为统一分配值的位置,并且您需要索引来查询有关统一的信息.

是的,这是两者之间的区别.

为什么需要两个值?

不要假设OpenGL API所做的任何事情完全基于"需要".有时它只是"我们是愚蠢的"或"这在某一点上是一个好主意,但现在它已经没有意义了."

统一的位置通常属于后者.

最初的想法,回到3D实验室的原始GLSL提案,是统一的位置可能代表某种字节偏移.该位置是一个有意义的数字,表示制服记忆所在的实际位置.因此,实现不必使用查找表将任意数字转换为实际内存所在的字节偏移量.位置将是字节偏移或任何其他需要的数据.

但是,除了可能是3D Labs自己的GLSL实现之外,实现从未实际使用过.统一位置几乎总是第二种形式的索引,并且glUniform调用将在表格中查找它们.

这就是我们现在能够明确指定统一位置的原因.这基本上是ARB说的,"我们放弃了;他们现在是指数".但他们不能只改变具有区别的旧API,因此他们必须保持两种不同的方式来谈论制服.

他们并不是真的想要.在某些方面,保持这种区别使得查询API更容易使用.可用的统一索引是从0到某些可查询计数(GL_ACTIVE_UNIFORMS)的所有索引.一旦您可以明确指定统一位置,二分法就变得有用了,因为索引只是一个可查询的数字计数,它与位置无关.

这样,API就不必具有"获取所有可用的统一位置"查询.您只需查询计数,然后进行从0到该计数的循环以查询信息.对用户来说更容易,实施起来也更容易.