GPURenderPassEncoder: setVertexBuffer() 方法

可用性有限

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

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

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

GPURenderPassEncoder 介面的 setVertexBuffer() 方法用於為給定的插槽設定或取消設定當前的 GPUBuffer,該緩衝區將為後續的繪製命令提供頂點資料。

語法

js
setVertexBuffer(slot, buffer, offset, size)

引數

slot

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

buffer

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

offset 可選

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

size 可選

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

返回值

無 (Undefined)。

驗證

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

示例

設定頂點緩衝區

在我們的 基礎渲染演示 中,透過 GPUCommandEncoder 記錄了幾個命令。其中大多數命令源自透過 GPUCommandEncoder.beginRenderPass() 建立的 GPURenderPassEncodersetVertexBuffer() 會根據需要用於設定頂點資料的源。

js
// …

const renderPipeline = device.createRenderPipeline(pipelineDescriptor);

// Create GPUCommandEncoder to issue commands to the GPU
// Note: render pass descriptor, command encoder, etc. are destroyed after use, fresh one needed for each frame.
const commandEncoder = device.createCommandEncoder();

// Create GPURenderPassDescriptor to tell WebGPU which texture to draw into, then initiate render pass
const renderPassDescriptor = {
  colorAttachments: [
    {
      clearValue: clearColor,
      loadOp: "clear",
      storeOp: "store",
      view: context.getCurrentTexture().createView(),
    },
  ],
};

const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);

// Draw the triangle
passEncoder.setPipeline(renderPipeline);
passEncoder.setVertexBuffer(0, vertexBuffer);
passEncoder.draw(3);

// End the render pass
passEncoder.end();

// End frame by passing array of command buffers to command queue for execution
device.queue.submit([commandEncoder.finish()]);

// …

取消設定頂點緩衝區

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

瀏覽器相容性

另見