GPUBuffer: mapAsync() 方法

可用性有限

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

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

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

GPUBuffer 接口的 mapAsync() 方法用于映射 GPUBuffer 的指定范围。它返回一个 Promise,该 Promise 在 GPUBuffer 的内容准备好访问时解析。当 GPUBuffer 被映射时,它不能用于任何 GPU 命令。

一旦缓冲区成功映射(可以通过 GPUBuffer.mapState 检查),调用 GPUBuffer.getMappedRange() 将返回一个包含 GPUBuffer 当前值的 ArrayBuffer,供 JavaScript 按需读取和更新。

完成对 GPUBuffer 值的操作后,请调用 GPUBuffer.unmap() 来取消映射,使其再次可供 GPU 访问。

语法

js
mapAsync(mode)
mapAsync(mode, offset, size)

参数

模式

一个 按位标志,指定 GPUBuffer 是为读取还是写入而映射的。可能的值为:

GPUMapMode.READ

GPUBuffer 为读取而映射。可以读取值,但对 ArrayBuffer 的任何更改(由 GPUBuffer.getMappedRange() 返回)将在调用 GPUBuffer.unmap() 后被丢弃。

读取模式映射只能用于使用 GPUBufferUsage.MAP_READ 创建的 GPUBuffer(即,在使用 GPUDevice.createBuffer() 创建时设置了该用法)。

GPUMapMode.WRITE

GPUBuffer 为写入而映射。可以读取和更新值——对 ArrayBuffer 的任何更改(由 GPUBuffer.getMappedRange() 返回)将在调用 GPUBuffer.unmap() 后保存到 GPUBuffer

写入模式映射只能用于使用 GPUBufferUsage.MAP_WRITE 创建的 GPUBuffer(即,在使用 GPUDevice.createBuffer() 创建时设置了该用法)。

offset 可选

一个数字,表示从缓冲区开始到要映射的范围开始的偏移量(以字节为单位)。如果省略 offset,则默认为 0。

size 可选

一个数字,表示要映射的范围的大小(以字节为单位)。如果省略 size,则映射的范围将扩展到 GPUBuffer 的末尾。

返回值

一个 Promise,当 GPUBuffer 的内容准备好访问时,它会解析为 Undefined

验证

调用 mapAsync() 时必须满足以下条件,否则将抛出 OperationError DOMException,Promise 将被拒绝,并生成 GPUValidationError

  • offset 是 8 的倍数。
  • 要映射的总范围(如果指定了 size,则为 size,否则为 GPUBuffer.size - offset)是 4 的倍数。
  • 要映射的总范围在 GPUBuffer 的边界内。
  • 如果 mode 是 GPUMapMode.READ,则 GPUBuffer 的用法必须是 GPUBufferUsage.MAP_READ
  • 如果 mode 是 GPUMapMode.WRITE,则 GPUBuffer 的用法必须是 GPUBufferUsage.MAP_WRITE

示例

请参阅 GPUBuffer 页面中的示例。

规范

规范
WebGPU
# dom-gpubuffer-mapasync

浏览器兼容性

另见