2014-03-03 41 views
1

我有一個計算着色器爲我生成數十萬條路徑(例如GL_LINE_STRIPs),每條路徑的大小爲128。我將它們全部存儲在一個大的SSBO中,我想渲染它們。OpenGL渲染來自單個VBO的很多條紋

[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上存儲另一個陣列以進行間接渲染也會起作用嗎?我只是想知道是否有類似「原始重啓每個'頂點'類型的函數。

回答

0

由於您從SSBO而不是VBO拉取頂點數據,並且每個路徑具有相同數量的頂點,因此您可能需要使用無屬性的實例化渲染?

綁定一個空的VAO並呼叫glDrawArraysInstanced(GL_LINE_STRIP, 0, 128, n)(其中n是路徑數)。在頂點着色器中,計算gl_InstanceID * 128 + gl_VertexID以獲取SSBO中當前頂點的索引。