6

What is the difference between uniform location and uniform index in OpenGL? It seems like you need the location to assign a value to the uniform, and you need the index to query information about the uniform.

Why is there a need of two values? Why can't one of them fulfill both purposes?

4

1 回答 1

10

似乎您需要为制服分配值的位置,并且您需要索引来查询有关制服的信息。

是的,这就是两者的区别。

为什么需要两个值?

不要假设 OpenGL API 所做的任何事情都纯粹基于“需要”。有时只是“我们很愚蠢”或“这在某个时候是个好主意,但现在它不再有意义了。”

统一地点一般属于后者。

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

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

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

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

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

于 2013-04-30T14:51:10.673 回答