最近在优化项目性能,偶然发现一个有关效率的问题:
同一帧中:
对于某个vertexBuffer3D,如果已经渲染完毕,再对vertexBuffer3D调用uploadFromVector,耗时会特别长;
所以,同一帧中,在对某个vertexBuffer3D渲染之前,一定要先把该buffer相关的upload全都调用完毕。
case:
项目优化之前的情况是:
地图和角色合用了一个vertexBuffer,然后渲染如下:
//map
vertexBuffer.uploadFromVector...
vertexBuffer.draw.....
//entity
vertexBuffer.uploadFromVector...
vertexBuffer.draw.....
项目优化之后的情况是把地图和角色的upload放在一起,然后draw放在一起:
//map & entity
vertexBuffer.uploadFromVector...
vertexBuffer.draw.....
结果发现每帧时间平均缩短了8-10ms,这也是一个惊吓啊!!!
对于这种情况作了种种猜测,并进行测试,后来发现比较好的做法是,对于同一个verteBuffer,在同一帧中,最好是先把所有的upload都执行完毕,再draw。
至于原因:不得而知,还望各位前辈和同道不吝赐教