我有一个计算着色器为我生成数十万个路径(例如GL_LINE_STRIPs),每个路径大小为128。我将它们存储在一个大的SSBO中,我想渲染它们。
[x1 y1 x2 y2 ... x127 y127] //path 0
[x1 y1 x2 y2 ... x127 y127] //path 1
...
[x1 y1 x2 y2 ... x127 y127] //path n
有没有一种很好的方法来渲染它?最初我在考虑使用原始重启,但multiDrawArrays也可能有用吗?我不想发送数十万个索引以及绘制调用。
似乎在GPU上存储另一个阵列以进行间接渲染也会起作用吗?我只是想知道是否有类似“原始重启每个'm'顶点”的功能。
答案 0 :(得分:0)
由于您从SSBO而不是VBO中提取顶点数据,并且每个路径具有相同数量的顶点,因此您可能需要无属性实例渲染吗?
绑定一个空的VAO并调用glDrawArraysInstanced(GL_LINE_STRIP, 0, 128, n)
(其中n是路径数)。在顶点着色器中,计算gl_InstanceID * 128 + gl_VertexID
以获取SSBO中当前顶点的索引。