webgl bufferSubData调用成本与传输字节的成本

时间:2019-01-03 17:37:33

标签: performance graphics buffer webgl

我有一个数组缓冲区。缓冲区的某些部分需要更改,而部分不需要更改。如果需要更改的缓冲区部分是后续的,则对需要更改的部分进行调用的bufferSubData比更新整个缓冲区(包括更改不需要更改的字节)更有效。问题是,如果需要更改的字节在缓冲区内相距很远,而它们之间的许多字节则不需要更改。为每个需要更新的块进行两次bufferSubData调用是否更好,还是仅进行一次不必要地更新之间的调用更好?与再更新一个字节的数据相比,bufferSubData调用的代价是多少?

1 个答案:

答案 0 :(得分:0)

假设bufferSubData被路由到驱动程序提供的本机glBufferSubData,最好完全避免。在某些移动GPU驱动程序中,这非常慢。请参阅this page作为参考(搜索glBufferSubData)。 我在Android设备(Mali,PowerVR,Adreno)上使用的最新移动GPU遇到了glBufferSubData的极慢。有趣的是,不是在iOS上使用的PowerVR GPU上,这显然表明存在软件问题。似乎在所有地方都运行良好的实用方法是,每帧用glBufferData替换整个缓冲区一次(或尽可能少地替换一次,组合多次绘制调用的数据)。

相关问题