并行构建OpenGL模型?

Rei*_*ica 3 c++ opengl parallel-processing

我有一个程序可以绘制一些地形并模拟流过它的水(以便宜又简单的方式).

使用OpenMP更新水很容易并行化,因此我每秒可以进行约50次更新.问题是,即使用少量的水,我的每秒抽吸量也非常低(从5开始,一旦有大量的水就下降到2左右).

这对视频卡来说不是问题,因为地形更加复杂,绘制得如此之快,boost::timer以至于如果我关掉水,我会得到每秒无限的绘制.它可能与内存带宽有关(因为我假设模型保留在卡上而不必每次都被转移).

我关心的是,在每次抽奖时,我都会调用glVertex3f()大约一百万次(最大尺寸为450*600,每个顶点4个),并且它完全按顺序完成,因为Glut不会让我同时调用任何东西.

那么..是否有某种方法可以并行构建列表然后将其一次性传递给OpenGL?或者其他一些方法让它更快地画出来?我使用了错误的方法(除了明显的"使用较少的顶点")?

pmr*_*pmr 8

您并行绘制的方法与您应该做的完全相反.图形硬件本质上是并行的,并且尝试在很短的时间内尽可能多地调用它就没有多大用处.重要的是进行单个大量调用,将数据发送到可以进行并行处理的硬件.你所有的glVertex()电话都恰恰相反.

正如格奥尔指出:glVertexPointer()伴随glDrawElements()glDrawArrays()适合你的情况,如果这些还不够,你应该采取升级到顶点缓冲对象.另一种方法是使用着色器直接计算GPU.在所有这些方法中,你几乎可以免费获得GPU中的并行性.


Geo*_*che 7

我关心的是,每次抽奖时,我都会将glVertex3f()称为大约一百万次

看看glVertexPointer().