渲染“虚拟图库”(纹理)时的OpenGL性能

时间:2010-06-09 21:42:00

标签: performance opengl

我有相当多(120-240)量的640x480图像,将在3D环境中显示为纹理平面(4个顶点多边形)。在给定的框架中可以看到大约30-50%的它们。它们有可能交叉。环境中不会出现任何其他因素。

问题是 - 现代和/或几年前(比如说Radeon 9550)GPU能否解决这个问题,我可以期待什么样的帧速率?我的目标是20FPS,但30-40会很好。将分辨率更改为320x240会更有可能发生吗?

我之前没有任何关于现代GPU上3D图形性能问题的经验,不幸的是我必须做出设计选择。我不想浪费时间做一些无法奏效的事情: - )

2 个答案:

答案 0 :(得分:1)

假设你有RGB纹理,那将是640 * 480 * 3 * 120 Bytes = 105 MB最小纹理数据,它应该适合更新近图形卡的VRAM而不需要交换,所以这不会成为问题。但是,纹理查找可能会有点问题但是如果不尝试就很难判断。鉴于您只需要处理105 MB的50%,即大约50 MB(非常粗略估计),而目标20 FPS意味着20 * 50MB /秒=大约1 GB /秒。即使在旧硬件上也应该可以实现吞吐量。

阅读较旧的Radeon 9600 XT的规格,它表示峰值填充率为2000M像素/秒,如果我没有错误,则需要远低于100M像素/秒。峰值内存b / w指定为9.6GB / s,而您需要大约1 GB / s(如上所述)。

如果做得正确的话,这应该是可能的 - 尤其是当前的硬件应该没有问题。

无论如何,你应该试试:加载一些随机的120个纹理并在大约120个四边形中显示它们可以在很少的代码行中完成,几乎没有任何努力。

答案 1 :(得分:0)

首先,您应该意识到纹理的尺寸通常应该是2的幂,所以如果您可以更改它们,例如512x256(例如)将是一个更好的起点。

从那里,您可以创建原始的MIP地图,这些原始版本只是以2的幂缩小的原始版本,所以如果您从512x256开始,那么您将创建版本为256x128,128x64,64x32,32x16, 16x8,8x4,4x2,2x1和1x1。完成此操作后,OpenGL可以/将选择“正确”的一个,其大小将在最终显示中显示。这通常会减少将纹理缩放到所需大小的工作(并提高质量)。

明显的关键点是纹理内存不足。如果内存服务,在9550时间范围内你可能会期望256 MB的板载内存,这将是足够的,但很可能一些的纹理将在系统RAM中。这种溢出可能会相当小,所以保持你希望的那种帧速率可能不会非常困难。但是,如果你要添加更多纹理,它最终会成为一个问题。在这种情况下,在每个维度(例如)中将原始大小减少2会使内存需求减少4倍,这将使它们更容易适应内存 lot