WebGL。它是在 GPU 中创建缓冲区吗?
WebGL. Is it creating a buffer in GPU?
寻找关于实时绘制相当大的数据流的决定。我想通过 GPU 处理它以减少内存成本。
我找到了一个 WebGL 示例:
// Fill the buffer with the values that define a triangle.
function setGeometry(gl) {
gl.bufferData(
gl.ARRAY_BUFFER,
new Float32Array([
0, -100,
150, 125,
-175, 100]),
gl.STATIC_DRAW);
}
并想澄清一些事情:
gl.ARRAY_BUFFER是否在 GPU 中创建缓冲区,而不是在 RAM 中?
WebGL 在 linux 上稳定吗?
更新: 还想澄清一下,是否可以通过索引仅更新一部分 gl 缓冲区。
快速 google 回答了这个问题:http://webglfundamentals.org/webgl/lessons/webgl-how-it-works.html
Buffers are the way of getting vertex and other per vertex data onto the GPU. gl.createBuffer creates a buffer. gl.bindBuffer sets that buffer as the buffer to be worked on. gl.bufferData copies data into the buffer.
gl.Array_buffer 是 gl.bufferData() 方法的参数,它将数据复制到先前在 GPU 中创建和绑定的缓冲区中。
如果它在 linux 上稳定,可能取决于 linux 版本和发行版。这也取决于您的硬件,您的 PC 的 GPU 是否支持 WebGl。
gl.createBuffer
和 gl.bufferData
为 WebGL 创建缓冲区。这些是否在 GPU 上取决于平台和浏览器。 AFAIK 所有英特尔 GPU 都将顶点数据存储在与其他 CPU 数据相同的内存中。此外,一些 WebGL 实现可能也会将缓冲区的副本存储在 CPU ram 中,所以真的没有办法知道。
gl.bufferData
设置缓冲区的大小并将数据放入其中。
// create buffer
const buf = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, buf);
// set it's size to size of data and copy data into it
const data = new Uint8Array([1, 2, 3, 4, 5]);
gl.bufferData(g.ARRAY_BUFFER, data, gl.STATIC_DATA);
您不想将数据放入其中传递大小而不是 TypedArray
// create buffer
const buf = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, buf);
// set it's size to 1024 bytes
gl.bufferData(g.ARRAY_BUFFER, 1024, gl.STATIC_DATA);
之后,您可以使用 gl.bufferSubData
一次将数据放入其中。例子
const offset = 100;
gl.bufferSubData(gl.ARRAY_BUFFER, offset, someTypedArray);
someTypedArray
就是这样,一个TypedArray像
const someTypedArray = new Uint8Array(45);
在这种情况下,缓冲区的字节 100 到 144 将更新为 someTypedArray
的内容
或者如果你想使用 TypedArray 的一部分,那么你可以创建视图
const someTypedArray = new Uint8Array(1024);
...
const bufferOffset = 200;
cconstonst bufferLength = 50;
var someOtherTypedArray = new Uint8Array(
someTypedArray.buffer,
someTypedArray.byteOffset + bufferOffset,
bufferLength);
这使得 someOtherTypedArray
成为 someTypedArray
的视图,从 someTypedArray
的 200 字节开始,长度为 50 字节。
寻找关于实时绘制相当大的数据流的决定。我想通过 GPU 处理它以减少内存成本。
我找到了一个 WebGL 示例:
// Fill the buffer with the values that define a triangle.
function setGeometry(gl) {
gl.bufferData(
gl.ARRAY_BUFFER,
new Float32Array([
0, -100,
150, 125,
-175, 100]),
gl.STATIC_DRAW);
}
并想澄清一些事情:
gl.ARRAY_BUFFER是否在 GPU 中创建缓冲区,而不是在 RAM 中?
WebGL 在 linux 上稳定吗?
更新: 还想澄清一下,是否可以通过索引仅更新一部分 gl 缓冲区。
快速 google 回答了这个问题:http://webglfundamentals.org/webgl/lessons/webgl-how-it-works.html
Buffers are the way of getting vertex and other per vertex data onto the GPU. gl.createBuffer creates a buffer. gl.bindBuffer sets that buffer as the buffer to be worked on. gl.bufferData copies data into the buffer.
gl.Array_buffer 是 gl.bufferData() 方法的参数,它将数据复制到先前在 GPU 中创建和绑定的缓冲区中。
如果它在 linux 上稳定,可能取决于 linux 版本和发行版。这也取决于您的硬件,您的 PC 的 GPU 是否支持 WebGl。
gl.createBuffer
和 gl.bufferData
为 WebGL 创建缓冲区。这些是否在 GPU 上取决于平台和浏览器。 AFAIK 所有英特尔 GPU 都将顶点数据存储在与其他 CPU 数据相同的内存中。此外,一些 WebGL 实现可能也会将缓冲区的副本存储在 CPU ram 中,所以真的没有办法知道。
gl.bufferData
设置缓冲区的大小并将数据放入其中。
// create buffer
const buf = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, buf);
// set it's size to size of data and copy data into it
const data = new Uint8Array([1, 2, 3, 4, 5]);
gl.bufferData(g.ARRAY_BUFFER, data, gl.STATIC_DATA);
您不想将数据放入其中传递大小而不是 TypedArray
// create buffer
const buf = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, buf);
// set it's size to 1024 bytes
gl.bufferData(g.ARRAY_BUFFER, 1024, gl.STATIC_DATA);
之后,您可以使用 gl.bufferSubData
一次将数据放入其中。例子
const offset = 100;
gl.bufferSubData(gl.ARRAY_BUFFER, offset, someTypedArray);
someTypedArray
就是这样,一个TypedArray像
const someTypedArray = new Uint8Array(45);
在这种情况下,缓冲区的字节 100 到 144 将更新为 someTypedArray
或者如果你想使用 TypedArray 的一部分,那么你可以创建视图
const someTypedArray = new Uint8Array(1024);
...
const bufferOffset = 200;
cconstonst bufferLength = 50;
var someOtherTypedArray = new Uint8Array(
someTypedArray.buffer,
someTypedArray.byteOffset + bufferOffset,
bufferLength);
这使得 someOtherTypedArray
成为 someTypedArray
的视图,从 someTypedArray
的 200 字节开始,长度为 50 字节。