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

问题描述 投票:0回答:2

正在寻找有关实时绘制相当大的数据流的决定。我想通过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上稳定吗?


[UPDATE:也想弄清楚,是否有可能仅通过索引更新gl缓冲区的一部分。

javascript opengl-es webgl
2个回答
1
投票

[gl.createBuffergl.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);

您不想在其中放入数据,而不是输入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的视图,该视图从200字节开始到someTypedArray,长度为50字节。


0
投票

一个快速的Google回答了这个问题:http://webglfundamentals.org/webgl/lessons/webgl-how-it-works.html

缓冲区是将顶点和其他每个顶点数据获取到GPU的方法。 gl.createBuffer创建一个缓冲区。 gl.bindBuffer将该缓冲区设置为要处理的缓冲区。 gl.bufferData将数据复制到缓冲区中。

gl.Array_buffer是gl.bufferData()方法的参数,该方法将数据复制到先前在GPU中创建并绑定的缓冲区中。

如果它在Linux上稳定,则可能取决于Linux的版本和发行版。如果您的PC的GPU是否支持WebGl,这也取决于您的硬件。

© www.soinside.com 2019 - 2024. All rights reserved.