GPUCommandEncoder: copyTextureToBuffer() 方法
copyTextureToBuffer() 方法是 GPUCommandEncoder 介面的一部分,它會編碼一個命令,將資料從 GPUTexture 複製到 GPUBuffer。
語法
copyTextureToBuffer(source, destination, copySize)
引數
source-
一個定義了要從中複製資料的紋理的物件。與
copySize結合使用,定義了源紋理子資源的區域。source可以包含以下屬性:aspect可選-
一個列舉值,定義要從中複製資料的紋理的哪個方面。可能的值有:
"all"-
將複製紋理格式的所有可用方面,這可能意味著顏色、深度和模板,具體取決於您處理的格式型別。
"depth-only"-
只會從 深度或模板格式 中複製深度方面。
"stencil-only"-
只會從深度或模板格式中複製模板方面。
如果省略,
aspect的值為"all"。 mipLevel可選-
一個數字,表示要從中複製資料的紋理的 mip-map 級別。如果省略,
mipLevel預設為 0。 origin可選-
一個物件或陣列,指定複製的起點——要從中複製資料的紋理區域的最小角。與
size一起,這定義了要從中複製的區域的完整範圍。如果省略了origin的任何部分,則x、y和z值將預設為 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:
mipLevel小於GPUTexture.mipLevelCount。origin.x是GPUTexture.format的 texel 塊寬度的倍數。origin.y是GPUTexture.format的 texel 塊高度的倍數。- 如果
GPUTexture.format是 深度或模板格式,或者GPUTexture.sampleCount大於 1,則子資源大小等於size。 source的GPUTexture.usage包含GPUTextureUsage.COPY_SRC標誌。source的GPUTexture.sampleCount為 1。source.aspect指的是GPUTexture.format的單個方面。- 該方面根據 深度或模板格式 是有效的影像複製源。
source與copySize相容。
對於 destination:
destination.bytesPerRow是 256 的倍數。destination.buffer的GPUBuffer.usage包含GPUBufferUsage.COPY_DST標誌。
示例
commandEncoder.copyTextureToBuffer(
{
texture: sourceTexture,
},
{
buffer: destinationBuffer,
},
{
width: 16,
height: 16,
depthOrArrayLayers: 2,
},
);
規範
| 規範 |
|---|
| WebGPU # dom-gpucommandencoder-copytexturetobuffer |
瀏覽器相容性
載入中…