OpenGL允许您在使用GLMultiDrawArray时提供数组属性吗?
我正在使用OpenGL允许您在使用GLMultiDrawArray时提供数组属性吗?,opengl,Opengl,我正在使用glMultiDrawArrays命令绘制一组基本体(在我的示例行中)。每个数组(行)都具有特定于该数组的一些附加属性 基本上,我希望将这些“数组属性”作为特定于每个数组的单独uniforms进行传递 我现在能想到的两种方法是: 在单独的绘制调用中绘制每个数组(线),并将属性指定为统一的 将这些属性作为顶点属性传递。这将需要存储与顶点数量相同的值的副本(数组中最多可以有100k)。如果我真的要存储它们,那就别无选择 在OpenGL中有更聪明的方法吗 假设我有n个要绘制的基本体。 glM
glMultiDrawArrays
命令绘制一组基本体(在我的示例行中)。每个数组(行)都具有特定于该数组的一些附加属性
基本上,我希望将这些“数组属性”作为特定于每个数组的单独uniform
s进行传递
我现在能想到的两种方法是:
n
个要绘制的基本体。
glMultiDrawArrays
命令已经要求我传递两个大小为n
的数组。一个起始索引数组(lineStartIndex
)和一个存储每个数组包含多少顶点的数组(lineCount
)
在我看来,应该可以以类似的方式指定顶点数组属性。例如,一个大小为n
的arrayAttributes
向量也可以与draw调用一起传递
因此,我不想使用VertexAttributeArray
而是希望使用类似于VertexArrayAtriBarray
;)
顺便说一句,我只使用一个VAO和一个VBO
在我看来,应该可以以类似的方式指定顶点数组属性
为什么??顶点属性适用于每个顶点发生变化的事物;为什么您希望能够将它们用于每个顶点不变的对象
嗯,你可以(我会解释),但我不知道你为什么认为这是可能的
可以使用(ab)为绘制调用中的着色器提供统一的值
您需要将要提供“每行”的属性设置为。因此,您将使用glvertexattributedivisior
,该属性的值为1
然后,对于每一行,您将调用gldrawArrayInstancedBaseInstance
。每个调用代表一行,因此您将提供一个实例计数1。但基本实例表示该行“每行”值的属性数组中的索引
是的,您没有使用多重绘制。但是OpenGL的绘图调用开销是最小的;它将draw调用与状态更改相结合,让您。而且您不会在通话之间更改状态,所以没有问题
但是,如果您关心这个较小的开销,并且能够访问功能,那么您可以始终使用它。在多重绘制调用中,每一行都是一个单独的绘制
当然,基本实例需要GL 4.2或ARB_基本实例。如果您无法访问这种性质的硬件,那么您必须坚持使用统一变量方法。为什么?顶点属性适用于每个顶点发生变化的事物;为什么您希望能够将它们用于每个顶点不变的对象?我不是这么说的。我不是说“VertexAttributeArray”,我是指类似“vertexArrayAttribArray”的东西。我还在我的原始帖子中编辑了这句话,也许是为了澄清我的意思。@c'Bam:“我的意思是(顶点)'arrayattribaray'”我不知道这是什么意思。而且,您可能会注意到,渲染命令不指定属性。完全他们来自VAO。