我是图形编程新手,需要为我们正在创建的演示添加渲染后端。我希望你们能指出我正确的方向。
简短版本:有没有办法向 OpenGL 发送不同元素的数据数组,而不必为每个元素分别发出绘制命令?
长版:我们有一个 CUDA 程序(最终将是 OpenCL),它为我们计算一堆对象的一堆数据。然后我们需要使用例如 OpenGL 来渲染这些对象。
CUDA 内核可以生成我们的顶点,并且使用 OpenGL 互操作,它可以将这些顶点推送到 OpenGL VBO 中,而不必将数据传输回主机设备内存。但问题是我们有一堆(超过一百万是我们的目标)不同的对象。看起来我们最好的选择是分配一个 VBO 并将每个对象的顶点放入其中。然后我们可以调用 glDrawArrays 并使用该 VBO 中每个元素的偏移量和长度。
但是,每个对象可能有可变数量的顶点(尽管场景中的总顶点可以有界。)我想避免必须从 CUDA -> CPU 每帧传输开始索引和长度的列表,特别是给定这些绘图命令会直接返回到 GPU。
有没有办法用数据打包缓冲区,这样我们就可以只调用一次 OpenGL 来渲染缓冲区,并且它可以从该缓冲区渲染许多不同的元素?
(希望我也提供了足够的信息来避免这里出现 XY 问题。)