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

瀏覽器相容性

另見