我使用glMultiDrawArrays
命令绘制了一堆基元(在我的例子中是行)。每个数组(行)都有一些特定于该数组的附加属性。
我基本上想要传递这些"数组属性"作为每个数组特定的单独uniform
。
我现在想到的两种方式是:
uniform
。在OpenGL中有更聪明的方法吗?
说我要绘制n
个原语。
glMultiDrawArrays
命令已经要求我传递两个大小为n
的数组。一个数组(lineStartIndex
)的起始索引和一个数组(lineCount
)存储每个数组包含多少个顶点。
对我而言似乎应该可以以类似的方式指定顶点数组属性。例如。大小为arrayAttributes
的{{1}}向量,也可以与绘制调用一起传递。
所以不是n
我喜欢像vertexAttribArray
;)
答案 0 :(得分:0)
对我而言似乎应该可以以类似的方式指定顶点数组属性。
为什么呢?顶点属性适用于每顶点变化的事物;你为什么希望能够将它们用于不每顶点变化的东西?
嗯,你可以(我会解释),但我不知道为什么你认为它应该是可能的。
instancing and base instance feature可以(ab)用于为绘制调用中的着色器提供类似于统一的值。
您需要设置要提供的属性" per-line"作为instanced array attribute。因此,对于该属性,您将使用值{1}的glVertexAttribDivisor
。
然后,对于每一行,您将调用glDrawArraysInstancedBaseInstance
。每个调用代表一行,因此您将提供实例计数1.但基本实例表示该行的属性数组中的索引"每行"值。
是的,你没有使用多次抽奖。但OpenGL的绘制调用开销很小;它将绘制调用与状态变化相结合。并且你不会在通话之间改变状态,所以没有问题。
但是,如果您担心这种轻微的开销,并且可以访问multi-draw indirect功能,那么您始终可以使用它。每一行都是多次抽奖中的单独抽奖。
当然,基本实例需要GL 4.2或ARB_base_instance。如果您无法访问此类硬件,那么您将不得不坚持使用uniform
变量方法。