我试图弄清楚缓冲区在 WebGL 中到底是如何工作的,但我有点卡住了。以下是我的猜测 - 请确认或否认。
const positions = new Float32Array([
-1, 1,
-0.5, 0,
-0.25, 0.25,
]);
let buffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
gl.bufferData(gl.ARRAY_BUFFER, positions, gl.STATIC_DRAW);
gl.bindBuffer(gl.ARRAY_BUFFER, null);
我们通过 JS 在 RAM 上创建一个浮点数组。
WebGL 直接在 GPU 上创建一个空缓冲区,并将该缓冲区的引用返回给 JS。现在变量buffer
是一个指针。
将缓冲区上的指针设置为gl.ARRAY_BUFFER
。
现在我们将数据从 RAM复制到 GPU 缓冲区。
取消绑定缓冲区gl.ARRAY_BUFFER
(但缓冲区在 GPU 上仍然可用,我们可以多次重新绑定它)。
那么为什么我们不能只调用createBuffer()
withpositions
而不是 usingARRAY_BUFFER
作为 JS 和 GPU 之间的桥梁呢?这些只是 OpenGL API 的限制还是我们有充分的理由不这样做?如果我错了,请纠正我,但是分配已知大小的内存比分配一些内存并positions
在调用后重新分配大小要快bufferData
。
qq_遁去的一_1
相关分类