【发布时间】:2014-11-15 17:01:18
【问题描述】:
我正在尝试使用实例化渲染来渲染多维数据集。我得到了这个工作,我用 glDrawArraysInstanced 渲染。
但是,我现在想将每个实例的数据(在本例中为定位和颜色)传递给着色器,并且我知道我打算使用函数 glVertexAttribDivisor 来实现这一点。问题是该功能仅在 OpenGL 3.3 及更高版本中可用,而我使用的是 3.2
如何在 OpenGL 3.2 中以正确的方式实现这一点?
【问题讨论】:
-
我不知道“正确的方式”,但在 GL 3.3 之前,顶点着色器中有
gl_InstanceID,您可以将其用作统一支持的数组的索引缓冲区对象。 -
@AndonM.Coleman 是的,这是一种可能的方法,但是 afaik 统一数组只是静态大小,所以如果我有很多不同数量的对象,那么它就行不通了。还是我错过了什么?
-
它确实限制了您可以绘制的实例数量,是的。无论您使用什么解决方案,您都会遇到存储限制。或者,您可以使用缓冲区纹理 - 它们允许您存储比 UBO 更多的数据,并且不必提前声明大小。
-
@AndonM.Coleman 嗯,没错,但我想有一个硬编码的限制对我来说似乎很奇怪。使用 GL 3.3 顶点属性方法,似乎没有任何这样的硬编码限制,您只需发送您需要的确切数量。
-
你有哪个 OpenGL 实现提供 3.2 而不是 3.3?