GPURenderBundleEncoder:setVertexBuffer() 方法

可用性有限

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

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

注意:此功能在 Web Workers 中可用。

GPURenderBundleEncoder 介面的 setVertexBuffer() 方法用於設定或取消設定指定槽位中當前將為後續繪製命令提供頂點資料的 GPUBuffer

注意: 此方法的功能與其在 GPURenderPassEncoder 上的等效方法 — setVertexBuffer() — 完全相同。

語法

js
setVertexBuffer(slot, buffer, offset, size)

引數

slot

一個數字,引用要為其設定頂點緩衝區的頂點緩衝區槽位。

buffer

一個 GPUBuffer,代表包含要用於後續繪製命令的頂點資料的緩衝區,或者為 null,在這種情況下,指定槽位中先前設定的任何緩衝區都將被取消設定。

offset 可選

一個數字,表示 buffer 中頂點資料開始位置的偏移量(以位元組為單位)。如果省略,offset 預設為 0。

size 可選

一個數字,表示 buffer 中頂點資料的大小(以位元組為單位)。如果省略,size 預設為 bufferGPUBuffer.size - offset

返回值

無 (Undefined)。

驗證

呼叫 setVertexBuffer() 時必須滿足以下條件,否則將生成 GPUValidationError,並且 GPURenderBundleEncoder 將變得無效

示例

設定頂點緩衝區

js
function recordRenderPass(passEncoder) {
  if (settings.dynamicOffsets) {
    passEncoder.setPipeline(dynamicPipeline);
  } else {
    passEncoder.setPipeline(pipeline);
  }
  passEncoder.setVertexBuffer(0, vertexBuffer);
  passEncoder.setBindGroup(0, timeBindGroup);
  const dynamicOffsets = [0];
  for (let i = 0; i < numTriangles; ++i) {
    if (settings.dynamicOffsets) {
      dynamicOffsets[0] = i * alignedUniformBytes;
      passEncoder.setBindGroup(1, dynamicBindGroup, dynamicOffsets);
    } else {
      passEncoder.setBindGroup(1, bindGroups[i]);
    }
    passEncoder.draw(3, 1, 0, 0);
  }
}

上面的程式碼片段摘自 WebGPU 示例 Animometer 示例

取消設定頂點緩衝區

js
// Set vertex buffer in slot 0
passEncoder.setVertexBuffer(0, vertexBuffer);

// Later, unset vertex buffer in slot 0
passEncoder.setVertexBuffer(0, null);

規範

規範
WebGPU
# dom-gpurendercommandsmixin-setvertexbuffer

瀏覽器相容性

另見