c – 并行构建OpenGL模型?
我有一个程序可以绘制一些地形并模拟流过它的水(以便宜又简单的方式).
使用OpenMP更新水很容易并行化,因此我每秒可以进行约50次更新.问题是,即使用少量的水,我的每秒抽吸量也非常低(从5开始,一旦有大量的水就下降到2左右). 这对视频卡来说不是问题,因为地形更加复杂并且绘制得如此之快以至于boost :: timer告诉我,如果我关掉水,我每秒都会得到无限远.它可能与内存带宽有关(因为我假设模型保留在卡上而不必每次都被转移). 我关心的是,在每次抽奖时,我称glVertex3f()大约一百万次(最大尺寸为450 * 600,每个顶点4个),并且完全按顺序完成,因为Glut不会让我调用任何东西在平行下. 那么..是否有某种方法可以并行构建列表然后将其一次性传递给OpenGL?或者其他一些方法让它更快地画出来?我使用了错误的方法(除了明显的“使用较少的顶点”)? 解决方法
您并行绘制的方法与您应该做的完全相反.
图形硬件本质上是并行的,并且尝试在很短的时间内尽可能多地调用它就没有多大用处.重要的是进行单个大量调用,将数据发送到可以进行并行处理的硬件.你所有的glVertex()调用恰恰相反. 正如Georg指出的那样:伴随glDrawElements()或glDrawArrays()的glVertexPointer()非常适合您的情况,如果这些还不够,您应该采取升级到顶点缓冲对象.另一种方法是使用着色器直接计算GPU.在所有这些方法中,你几乎可以免费获得GPU中的并行性. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |