Sta*_*fan 14 opengl performance
这可能已经被一遍又一遍地问过,但我找不到任何有用的东西,所以在这里再说一次......
在我的应用程序中,我需要渲染一个相当大的网格(几百万个三角形或更多),并且我遇到了一些问题,从中获得了不错的帧速率.CPU几乎是空闲的,所以我绝对是GPU限制的.更改分辨率不会影响性能,因此它不会受碎片或栅格限制.
网格是动态的(但本地是静态的)所以我无法将整个内容存储在视频卡中并通过一次调用来呈现它.由于应用程序特定的原因,数据存储为八叶树,叶片中有体素,这意味着我基本上可以免费获得视锥体剔除.顶点数据由坐标,法线和颜色组成 - 不使用纹理或着色器.
我的第一种方法是使用一个大的STREAM_DRAWVBO 从内存中渲染所有东西,结果证明它太慢了.我最初的想法是,我可能会使总线过载(每帧推动约150 MiB),所以我实现了一个缓存方案,该方案存储最近用于在显卡上的静态VBO中渲染对象的几何体,每个VBO存储几个100 KiB到几个MiB值的数据(每个VBO存储更多会产生更多的缓存抖动,所以这里有一个权衡).下面的图片是数据的示例,其中所有颜色为红色的都是从缓存的VBO中提取的.
渲染数据示例http://gimaker.users.sourceforge.net/0010.png
如下面的数字所示,使用缓存时,我没有看到性能的惊人增长.对于大约1百万个三角形的完全静态网格,我得到以下帧速率:
STATIC_DRAWVBO进行缓存:2.4 Hz所以我的问题是如何加快速度呢?即:
GL_FLOAT和GL_UNSIGNED_BYTE用于颜色,与一个填充字节以获得4字节对齐(28个字节/顶点总数).我对建议LOD(我已经测试过这个),特定于供应商的提示或使用1.5以上的OpenGL功能的答案不感兴趣.
你可能不会喜欢这种回应....
我发现了你的问题:带有开源Linux驱动程序的英特尔GM965
虽然我目前的工作没有达到您的数据量,但我们已经在VBO中渲染了数百万个顶点,并且英特尔图形硬件/驱动程序已被证明是无用的.给自己一张NVidia卡(并且不得不使用二进制驱动程序,它只是工作),你就可以了.即使是高端Quadro(如果工作正在付费)或高端GTX 400系列(如果你付钱或者只是想在工作中节省一些钱),甚至不必是当代的,应该做得很好w /最新驱动程序.您还可以尝试找到具有此硬件的计算机,以测试是否无法升级您的计算机.