GPUBuffer: mapAsync() 方法
注意:此功能在 Web Workers 中可用。
GPUBuffer 接口的 mapAsync() 方法用于映射 GPUBuffer 的指定范围。它返回一个 Promise,该 Promise 在 GPUBuffer 的内容准备好访问时解析。当 GPUBuffer 被映射时,它不能用于任何 GPU 命令。
一旦缓冲区成功映射(可以通过 GPUBuffer.mapState 检查),调用 GPUBuffer.getMappedRange() 将返回一个包含 GPUBuffer 当前值的 ArrayBuffer,供 JavaScript 按需读取和更新。
完成对 GPUBuffer 值的操作后,请调用 GPUBuffer.unmap() 来取消映射,使其再次可供 GPU 访问。
语法
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的末尾。
返回值
验证
调用 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 |
浏览器兼容性
加载中…