关于之前提到vbo速度的问题

之前因为要用到NVPerfHud,所以装的是78.01的driver
然后结果即像提到的那样,不管如何优化,vbo相比var,fps总会掉近1/5
怎么试都是一样,情况不像想象中那么简单: 应该会和D3D中VB的lock/unlock一样吧(<--- 天真)

最后看到有人说nvidia和ati的实现不一样,nvidia有做MRU之类的优化,ati则在处理STATIC_DRAW会简单得video memory > AGP memory > system memory,最重要的是OpenGL是依赖于driver的
所以去下了个最新的81.98装上
结果发现差距没有了,晕~

结论:
        1.  因为目前ogl的驱动已经很成熟的情况下,一些过去的Efficient方法,现在并不一定实用了:像是说带Range的比普通DrawElements要快一说
        2.  var是system memory级,在draw时会copy到AGP或Video的memory中;而vbo会由client指定由driver决定将data放在哪,通常会放在“比较合适”的地方
        3.  vbo在create和lock时要注意,类似D3D的VB在使用中要注意的:WRITE_ONLY、DISCARD、NOOVERWRITE,这些flag的使用,会很大程度上影响到效率,以下是说明
                非WRITE_ONLY的数据,即会READ,而我们知道Video memory在READ起来是很慢的
                在lock住VB写数据时,DISCARD会告诉driver,不需要等待GPU的同步,因为不需要之前旧的数据
                在lock住VB写数据时,NOOVERWRITE会告诉driver,不需要等待GPU的同步,因为不会影响到已有的数据
        4.  vbo适合static buffer,这时通常会比var快近一倍;而dynamic buffer,就目前来看,至少OpenGL在nvidia的drvier实现中差别不大
        5.  vbo是存在有“最佳传输量”的,在不同的显卡上,其“最佳数据量/fps影响”也不同,有人做了专门的benchmark

PS,以上乱说一气,保持了一直以来的记流水帐的风格,见谅见谅~
posted @ 2006-02-13 10:25  千里马肝  阅读(746)  评论(0编辑  收藏  举报