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 |
瀏覽器相容性
載入中…