每帧绘制的数据量大约300k,每帧数据都可能变化。我使用vbo 开了一个30k的空间,每次当数据量达到30k就调用glBufferSubData函数将数据上传给gpu 绘制,一帧绘制中 可能调用十多次glSubBufferData,vbo的状态是GL_DYNAMIC_DRAW。
vbo调用的是 \android-4\arch-arm\usr\include\GLES \gl.h
问题:对比 vbo方式和顶点数组,在pc上二者帧率差不多:
FPS
vbo 26
va 25
程序中还有其他绘制操作,所以帧率并不高。奇怪的是,在手机上但是vbo的帧率反而要低:
FPS
glDrawArrays 27-29
glDrawElements 27-29
vbo 18-20
有vbo开发经验的 兄弟,请不吝赐教。
------最佳解决方案--------------------
你在绘制的时候调用 glSubBufferData 当然慢了,这个应该是数据准备阶段做的事情,渲染的时候一般只改变着色器里面的 uniform 参数
------其他解决方案--------------------
格式化一下 pc和手机上的统计结果:
FPS
vbo 26
va 25
FPS
glDrawArrays 27-29
glDrawElements 27-29
vbo 18-20
------其他解决方案--------------------
理论上vbo支持动态数组,但是实际如果每帧 数据都改变,VBO效率还不如顶点数组。
VAO 效率没测试不清楚。
------其他解决方案--------------------
呵呵,有机会再来看看