【问题标题】:Difference between uniform location and uniform index?统一位置和统一索引的区别?
【发布时间】:2013-04-30 22:51:10
【问题描述】:

OpenGL中统一位置和统一索引有什么区别?似乎您需要位置来为制服分配值,并且您需要索引来查询有关制服的信息。

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

【问题讨论】:

    标签: opengl


    【解决方案1】:

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

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

    为什么需要两个值?

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

    统一位置一般属于后者。

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

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

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

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

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

    【讨论】:

    • 是否可以通过统一名称检索索引,就像您使用统一位置一样,或者您在上一段中描述的是获取索引的唯一方法?
    • @DanWebster:是的,您可以get indices by name. 通常,您通过索引查询的内容是您如果有名字就已经知道的内容。但你可以做到。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-14
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 2021-01-30
    • 2021-03-30
    相关资源
    最近更新 更多