C++ 没有实例的属性除数?

C++ 没有实例的属性除数?,c++,opengl,opengl-3,C++,Opengl,Opengl 3,我知道glVertexAttributeDivisor可以用于修改实例化渲染期间常规顶点属性的前进速度,但我想知道是否有任何方法可以在不实例化的情况下以特定速度前进属性 以下是我的意思的一个例子: 假设您正在定义一个顶点位置列表,该列表由一系列直线组成,并且您希望与每条直线关联一个ID。因此,您创建了两个VBO,每个VBO包含与其中一个属性(所有顶点位置或所有顶点ID)相关的数据。传统上,这意味着每个vbo的大小(以元素为单位)必须为行数x2(因为每个点包含两行)。这当然意味着我要为一条直线上的

我知道
glVertexAttributeDivisor
可以用于修改实例化渲染期间常规顶点属性的前进速度,但我想知道是否有任何方法可以在不实例化的情况下以特定速度前进属性

以下是我的意思的一个例子:

假设您正在定义一个顶点位置列表,该列表由一系列直线组成,并且您希望与每条直线关联一个ID。因此,您创建了两个VBO,每个VBO包含与其中一个属性(所有顶点位置或所有顶点ID)相关的数据。传统上,这意味着每个vbo的大小(以元素为单位)必须为行数x2(因为每个点包含两行)。这当然意味着我要为一条直线上的每个点复制相同的ID值


相反,我想做的是为顶点位置缓冲区前进的每2个元素指定IDs前进1个元素。我知道这需要首先声明我的顶点位置缓冲区(以便我可以引用它来告诉OpenGL多长时间推进一次ID缓冲区),但这似乎仍然是可能的。然而,我在OpenGL规范中找不到任何允许这种操作的函数

您想要的东西在OpenGL中通常是不可能的。它实际上是一种约束形式,因此您必须使用其中一种技术来获得它。

在这种情况下,是否可以使用
glMultiDrawArraysIndirect()
一次绘制一段线,在ID VBO上使用属性除数1,并使用间接命令结构的
baseIndex
部分来增加ID VBO中每个绘图的索引?这可能会在GPU内存中存储更多数据,但在理论上是可能的?它适用于特定情况,但不是一般情况。