WebGL2添加到WebGL1 api中,因此WebGL2有4个版本 gl.bufferData ,来自WebGL1的3和一个新的。
gl.bufferData
他们是
void gl.bufferData(target, size, usage);
ArrayBuffer
void gl.bufferData(target, ArrayBuffer? srcData, usage);
ArrayBufferView
Uint8Array
Float32Array
void gl.bufferData(target,ArrayBufferView srcData,usage);
// WebGL2: void gl.bufferData(target, ArrayBufferView srcData, usage, srcOffset, length);
最后一个可以为WebAssembly添加。问题是如果你有大的 ArrayBufferView 并且只想上传你必须创建的新部分 ArrayBufferView 转到覆盖您要上传的部分的同一个缓冲区。即使是 ArrayBufferView 一样的 ArrayBuffer 是相对便宜的,仍然有一个视图的分配,最终将不得不收集垃圾。添加新版本 gl.bufferData 删除该问题。您不必创建临时的 ArrayBufferView 只是为了上传一部分 ArrayBuffer 。