Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenGL允许您在使用GLMultiDrawArray时提供数组属性吗?_Opengl - Fatal编程技术网

OpenGL允许您在使用GLMultiDrawArray时提供数组属性吗?

OpenGL允许您在使用GLMultiDrawArray时提供数组属性吗?,opengl,Opengl,我正在使用glMultiDrawArrays命令绘制一组基本体(在我的示例行中)。每个数组(行)都具有特定于该数组的一些附加属性 基本上,我希望将这些“数组属性”作为特定于每个数组的单独uniforms进行传递 我现在能想到的两种方法是: 在单独的绘制调用中绘制每个数组(线),并将属性指定为统一的 将这些属性作为顶点属性传递。这将需要存储与顶点数量相同的值的副本(数组中最多可以有100k)。如果我真的要存储它们,那就别无选择 在OpenGL中有更聪明的方法吗 假设我有n个要绘制的基本体。 glM

我正在使用
glMultiDrawArrays
命令绘制一组基本体(在我的示例行中)。每个数组(行)都具有特定于该数组的一些附加属性

基本上,我希望将这些“数组属性”作为特定于每个数组的单独
uniform
s进行传递

我现在能想到的两种方法是:

  • 在单独的绘制调用中绘制每个数组(线),并将属性指定为统一的
  • 将这些属性作为顶点属性传递。这将需要存储与顶点数量相同的值的副本(数组中最多可以有100k)。如果我真的要存储它们,那就别无选择 在OpenGL中有更聪明的方法吗

    假设我有
    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。