javascript - WebGL。它是在 GPU 中创建缓冲区吗?

标签 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,
          -175,  100]),
      gl.STATIC_DRAW);
}

并想澄清一些事情:

  • gl.ARRAY_BUFFER 是否在 GPU 内而不是 RAM 内创建缓冲区?

  • WebGL 在 Linux 上稳定吗?

<小时/>

更新:还想澄清一下,是否可以通过索引仅更新 gl 缓冲区的一部分。

最佳答案

gl.createBuffergl.bufferData 为 WebGL 创建缓冲区。这些是否在 GPU 上取决于平台和浏览器。 AFAIK 所有 Intel GPU 都将顶点数据与其他 CPU 数据存储在同一内存中。此外,某些 WebGL 实现也可能在 CPU 内存中存储缓冲区的副本,因此实际上无法知道。

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 的一部分,那么您可以创建 View

const someTypedArray = new Uint8Array(1024);

...

const bufferOffset = 200;
cconstonst bufferLength = 50;
var someOtherTypedArray = new Uint8Array(
       someTypedArray.buffer, 
       someTypedArray.byteOffset + bufferOffset,
       bufferLength);

这使得 someOtherTypedArray 成为 someTypedArray 的一个 View ,它从 someTypedArray 的 200 字节开始,长度为 50 字节。

关于javascript - WebGL。它是在 GPU 中创建缓冲区吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33997975/

相关文章:

javascript - 如何使用铯缩放实体/数据源?

javascript - 用 Cucumber 和 Capybara 测试排序

android - Opengl Es 2.0 - 显示多个纹理

Android - 丰富的图形和动画

html - 用于渲染视频的 2d 上下文与 WebGL

javascript - WebGL iOS 渲染到浮点纹理

php - Onsubmit javascript 将值发送到 php 并返回值

javascript - 在 clojure 中运行 D3.js

android - 如何拦截 Android OpenGL ES 中的触摸屏事件?

javascript - 即时调整形状大小