GPUCommandEncoder: copyTextureToBuffer() 方法

可用性有限

此特性不是基線特性,因為它在一些最廣泛使用的瀏覽器中不起作用。

安全上下文: 此功能僅在安全上下文(HTTPS)中可用,且支援此功能的瀏覽器數量有限。

copyTextureToBuffer() 方法是 GPUCommandEncoder 介面的一部分,它會編碼一個命令,將資料從 GPUTexture 複製到 GPUBuffer

語法

js
copyTextureToBuffer(source, destination, copySize)

引數

source

一個定義了要從中複製資料的紋理的物件。與 copySize 結合使用,定義了源紋理子資源的區域。source 可以包含以下屬性:

aspect 可選

一個列舉值,定義要從中複製資料的紋理的哪個方面。可能的值有:

"all"

將複製紋理格式的所有可用方面,這可能意味著顏色、深度和模板,具體取決於您處理的格式型別。

"depth-only"

只會從 深度或模板格式 中複製深度方面。

"stencil-only"

只會從深度或模板格式中複製模板方面。

如果省略,aspect 的值為 "all"

mipLevel 可選

一個數字,表示要從中複製資料的紋理的 mip-map 級別。如果省略,mipLevel 預設為 0。

origin 可選

一個物件或陣列,指定複製的起點——要從中複製資料的紋理區域的最小角。與 size 一起,這定義了要從中複製的區域的完整範圍。如果省略了 origin 的任何部分,則 xyz 值將預設為 0。

例如,您可以傳遞一個數組 [0, 0, 0],或等效的物件 { x: 0, y: 0, z: 0 }

texture

一個表示要從中複製資料的紋理的 GPUTexture 物件。

destination

一個定義要寫入資料的緩衝區以及寫入緩衝區的資料佈局的物件。與 copySize 結合使用,它定義了目標緩衝區的區域。source 可以包含以下屬性:

buffer

要寫入的 GPUBuffer

offset 可選

data 開始到寫入複製資料的起始位置的位元組偏移量。如果省略,offset 預設為 0。

bytesPerRow 可選

一個數字,表示每個塊行(即,一個完整的 texel 塊行)和後續塊行之間的位元組步長。如果存在多個塊行(即,複製高度或深度大於一個塊),則此項是必需的。

rowsPerImage 可選

每張影像的塊行數。bytesPerRow × rowsPerImage 將為您提供每張完整影像開始之間的步幅(以位元組為單位)。如果需要複製多張影像,則此項是必需的。

copySize

一個物件或陣列,指定複製資料的寬度、高度和深度/陣列層數。寬度值必須始終指定,而高度和深度/陣列層數是可選的,如果省略則預設為 1。

例如,您可以傳遞一個數組 [16, 16, 2],或等效的物件 { width: 16, height: 16, depthOrArrayLayers: 2 }

返回值

無 (Undefined)。

驗證

在呼叫 copyTextureToBuffer() 時必須滿足以下條件,否則將生成 GPUValidationError,並且 GPUCommandEncoder 將失效。

對於 source

對於 destination

  • destination.bytesPerRow 是 256 的倍數。
  • destination.bufferGPUBuffer.usage 包含 GPUBufferUsage.COPY_DST 標誌。

示例

js
commandEncoder.copyTextureToBuffer(
  {
    texture: sourceTexture,
  },
  {
    buffer: destinationBuffer,
  },
  {
    width: 16,
    height: 16,
    depthOrArrayLayers: 2,
  },
);

規範

規範
WebGPU
# dom-gpucommandencoder-copytexturetobuffer

瀏覽器相容性

另見