有没有一种有效的方法可以通过OpenGL将大量浮点数传递给GPU?

时间:2016-01-31 01:06:43

标签: opengl shader cpu

开展流体模拟项目。我想在CPU上执行邻居搜索和排序,因为这些操作涉及大量内存写入,然后将信息传递给GPU以执行其余的计算。有没有一种有效的方法来使用OpenGL?我的所有信息都在一个浮点数组中(或者可能在一个结构数组中),每个值对应于位置,速度等等。我想以某种方式对这个数组进行排序并以某种形式将它传递给着色器。我该怎么做才能有效?

1 个答案:

答案 0 :(得分:0)

关于high-performance OpenGL buffer streaming techniques is on the OpenGL Wiki的权威性参考。但是,您的特殊需求使得直接在映射缓冲区中生成数据变得有些困难。

例如,快速排序或合并排序可以执行大量的缓冲区内进程。虽然插入排序可以直接进入目标内存,但是它们的O(n 2 )性能还有很多不足之处。因此,您的最终流程是对数据进行排序,然后将其复制到缓冲区。

持久映射等技术可以提供帮助,但实际上它们并不是这个用例的关键。你可以做的只是双缓冲(所以GPU正在使用一个缓冲区,而你正在复制到另一个缓冲区)并且在复制之前使用带有失效调用的glBufferSubData。