我已经准备好了关于常量顶点属性和Uniforms.Have的几个主题,找到了一些differences,但不明白为什么我需要它们。看来我总能用制服代替履历。对他们有什么用处吗?
发布于 2015-05-20 03:38:08
我不认为常数顶点属性(或CVA)是标准术语。至少我从未听说过,你链接的游戏开发问题中的人也对此感到困惑。所以我不认为它被广泛使用。
但根据上下文,我弄清楚了你在问什么。您正在考虑在顶点着色器中使用属性的情况。但是,在进行抽签调用之前,不要将它们从缓冲区中提取出来,而是使用类似于glVertexAttrib4f()的调用来设置它们,这意味着值在再次更改之前保持不变。规范将这些值简单地称为“当前顶点属性值”。
现在,如果以这种方式使用属性,或者使用制服,就没有明确的答案。通常情况下,相对性能将非常依赖于平台/硬件。我个人的观点是:
这也符合规范的规定。在关于制服的介绍部分中,它说(重点是另加的):
这些制服的值在原语上是不变的,而且通常在许多原语中是常量。
在某些平台上,统一更新是非常有效的,而且应用程序经常更改统一值也并不少见。但IMHO,这不是制服的本意。他们不是毫无意义地被称为uniform!
根据用例的不同,还有一些额外的差异可能使其中一种或另一种更有吸引力:
发布于 2016-07-28 13:17:44
这里的关键点是glEnableVertexAttribArray和glDisableVertexAttribArray的用法。来自OpenGL es3.0编程指南第二版.
命令glEnableVertexAttribArray和glDisableVertexAttribArray分别用于启用和禁用通用顶点属性数组。如果为泛型属性索引禁用顶点属性数组,则将使用为该索引指定的常量顶点属性数据。
考虑以下场景:您有一些对象要用统一的颜色绘制,还有一些要为每个顶点指定颜色。您可以使用一个顶点着色器,并传递与顶点关联的常量颜色,就好像它是可变的,但是这样做会使内存增加一倍。当然,您可以使用另一个着色器,其中您有一个制服,以指定颜色,所以您优化内存,但您需要两个着色器。禁用顶点属性的颜色代替,让您使用相同的着色器,并优化使用的内存在同一时间。
https://stackoverflow.com/questions/30324845
复制相似问题