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 缓冲区的一部分。
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);
您不希望将数据放入其中传递的大小而不是类型数组
// 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 字节。
快速谷歌回答了这个问题: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。
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 为effect Composer创建GodRays效果过程
- 从javascript创建一个列表
- onkeyup无法动态创建多个文本区域
- 如何使用javascript从主svg对象动态创建svg视图框
- 如何访问声音管理器2创建的声音对象
- 我已经创建了一个jquery转盘,并使用if条件来运行和停止转盘
- Kendo:我该如何在树视图中创建一个递归的hieiarchy
- 节点.js从 UTF8 文件创建十六进制缓冲区
- Three.js:如何创建新的'变形'如果我有所有必要的缓冲区
- 我是否必须为每个 webgl 程序创建单独的缓冲区
- 创建导致 nodejs 应用程序崩溃的缓冲区
- 在ESRI Javascript API中创建精确的行缓冲区
- WebGL.它是否在 GPU 中创建缓冲区
- 如何创建一个RxJS缓冲区,将NodeJS中的元素分组,但不依赖于永远运行的间隔
- 从数组javascript流星创建缓冲区
- 创建一个缓冲区和管道数据来播放它
- 垃圾收集跟不上缓冲区的创建和删除
- 如何在Web Audio API中创建一个新的缓冲区来恢复播放?
- 是否可以在浏览器中创建不安全的数组缓冲区