Javascript WebGL。是在GPU中创建缓冲区吗?
正在寻找一个关于实时绘制相当大的数据流的决策。我想通过GPU处理它,以减少内存成本 我发现了一个WebGL示例:Javascript WebGL。是在GPU中创建缓冲区吗?,javascript,opengl-es,webgl,Javascript,Opengl Es,Webgl,正在寻找一个关于实时绘制相当大的数据流的决策。我想通过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
// 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\U BUFFER是否在GPU内而不是RAM内创建缓冲区
WebGL在linux上稳定吗
更新:还想澄清一下,是否可以通过索引仅更新gl缓冲区的一部分。谷歌快速回答了这个问题: 缓冲区是在GPU上获取顶点和其他逐顶点数据的方法。gl.createBuffer创建一个缓冲区。gl.bindBuffer将该缓冲区设置为要处理的缓冲区。gl.bufferData将数据复制到缓冲区中 gl.Array_buffer是gl.bufferData方法的参数,该方法将数据复制到先前在GPU中创建和绑定的缓冲区中
如果它在linux上是稳定的,可能取决于linux版本和发行版。它还取决于您的硬件,如果您的电脑的GPU支持或不支持WebGl。一个快速的谷歌回答了这个问题: 缓冲区是在GPU上获取顶点和其他逐顶点数据的方法。gl.createBuffer创建一个缓冲区。gl.bindBuffer将该缓冲区设置为要处理的缓冲区。gl.bufferData将数据复制到缓冲区中 gl.Array_buffer是gl.bufferData方法的参数,该方法将数据复制到先前在GPU中创建和绑定的缓冲区中 如果它在linux上是稳定的,可能取决于linux版本和发行版。它还取决于您的硬件,如果您的电脑的GPU支持或不支持WebGl。gl.createBuffer和gl.bufferData为WebGl创建缓冲区。这些是否在GPU上取决于平台和浏览器。AFAIK所有Intel 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);
您不希望将数据以大小而不是类型Darray的形式放入其中
// 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一次将数据放入其中一点。范例
Darray就是这样,就像
在这种情况下,缓冲区将使用someTypedArray的内容更新字节100到144
// 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);
或者,如果您想使用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字节 gl.createBuffer和gl.bufferData为WebGL创建缓冲区。这些是否在GPU上取决于平台和浏览器。AFAIK所有Intel 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);
您不希望将数据以大小而不是类型Darray的形式放入其中
// 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一次将数据放入其中一点。范例
Darray就是这样,就像
在这种情况下,缓冲区将使用someTypedArray的内容更新字节100到144
// 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);
或者,如果您想使用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。我认为浏览器支持webgl,系统的驱动程序可以选择在专用gpu或集成gpu上以不同的方式执行webgl命令,甚至可能在cpu上进行软件渲染,或者出错。是否可以只更新部分缓冲区,例如通过索引?我认为gpu不支持webgl。我认为浏览器支持webgl,系统的驱动程序可以选择以不同的方式在专用gpu或集成gpu上执行webgl命令,甚至可能在cpu上进行软件渲染,或者错误输出。缓冲区相当大,因此我希望在gpu内保持可绘制副本。缓冲区相当大,因此我希望在gpu内保持可绘制副本。