【发布时间】:2019-01-26 09:40:19
【问题描述】:
我一直在阅读著名的 webgl 教程 https://webgl2fundamentals.org/webgl 并学习如何使用 bufferData 将数据放入缓冲区。本教程以这种形式广泛使用bufferData
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
这里的第二个参数是我们要发送到 GPU 缓冲区的实际数组或数据。但是,我今天遇到了 API 的这种新用法。
gl.bufferData(gl.ARRAY_BUFFER, 8*maxNumVertices, gl.STATIC_DRAW);
这里的第二个参数表示缓冲区的大小。
所以我对此感到困惑。我在 MDN https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/bufferData 上查看了这个 API,上面写着
// WebGL1:
void gl.bufferData(target, size, usage);
void gl.bufferData(target, ArrayBuffer? srcData, usage);
void gl.bufferData(target, ArrayBufferView srcData, usage);
// WebGL2:
void gl.bufferData(target, ArrayBufferView srcData, usage, srcOffset, length);
这是否意味着对于 webgl1.0,我们可以将实际的数据数组或缓冲区的大小作为第二个参数传递给 API。但是对于 WebGL2.0,我们只能将实际的数据数组传递给 API?
我还不清楚这一点。请帮忙。
【问题讨论】: