Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript WebGL。是在GPU中创建缓冲区吗?_Javascript_Opengl Es_Webgl - Fatal编程技术网

Javascript WebGL。是在GPU中创建缓冲区吗?

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

正在寻找一个关于实时绘制相当大的数据流的决策。我想通过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\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内保持可绘制副本。