GPUDevice:createBuffer() 方法

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

安全上下文: 此功能仅在安全上下文(HTTPS)中可用,且支持此功能的浏览器数量有限。

注意:此功能在 Web Workers 中可用。

createBuffer() 方法是 GPUDevice 接口的一个方法,用于创建一个 GPUBuffer,以便在 GPU 操作中存储原始数据。

语法

js
createBuffer(descriptor)

参数

描述符(descriptor)

包含以下属性的对象:

label 可选

一个字符串,提供可用于识别对象的标签,例如在 GPUError 消息或控制台警告中。

mappedAtCreation 可选

一个布尔值。如果设置为 true,则缓冲区将在创建时被映射,这意味着您可以通过调用 GPUBuffer.getMappedRange() 来立即设置缓冲区内的值。默认值为 false

请注意,即使未设置 GPUBufferUsage.MAP_READGPUBufferUsage.MAP_WRITE 使用标志,也可以将 mappedAtCreation: true 设置为缓冲区设置初始数据。

size

一个表示缓冲区大小(以字节为单位)的数字。如果 mappedAtCreation 设置为 true,则此值必须是 4 的倍数。

usage

表示 GPUBuffer 允许使用的 位标志。可能的值在 GPUBuffer.usage 值表 中。

请注意,可以通过按位 OR 分隔值来指定多个可能的用法,例如:GPUBufferUsage.COPY_SRC | GPUBufferUsage.MAP_WRITE

返回值

一个 GPUBuffer 对象实例。

异常

RangeError DOMException

如果 mappedAtCreation 设置为 true,并且指定的 size 不是 4 的倍数,则会抛出此错误。

验证

调用 createBuffer() 时必须满足以下条件,否则会生成 GPUValidationError 并返回一个无效的 GPUBuffer 对象。

  • 指定了有效的 usage
  • 指定了 GPUBufferUsage.MAP_READ,并且除了 GPUBufferUsage.COPY_DST 之外没有指定其他标志。
  • 指定了 GPUBufferUsage.MAP_WRITE,并且除了 GPUBufferUsage.COPY_SRC 之外没有指定其他标志。

注意:如果缓冲区分配失败而没有任何特定副作用,则会生成一个 GPUOutOfMemoryError 对象。

示例

在我们的 基础计算演示 中,我们创建了一个用于读取 GPU 计算结果的输出缓冲区,以及一个用于 JavaScript 访问的映射暂存缓冲区。

js
const output = device.createBuffer({
  size: BUFFER_SIZE,
  usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC,
});

const stagingBuffer = device.createBuffer({
  size: BUFFER_SIZE,
  usage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST,
});

规范

规范
WebGPU
# dom-gpudevice-createbuffer

浏览器兼容性

另见