GPURenderPassEncoder: executeBundles() 方法

可用性有限

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

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

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

GPURenderPassEncoder 介面的 executeBundles() 方法執行先前記錄到引用的 GPURenderBundles 中的命令,作為此渲染通道的一部分。

注意: 呼叫 executeBundles() 後,當前設定的頂點緩衝區、索引緩衝區、繫結組和管道都會被清除,即使沒有實際執行任何 bundle。

語法

js
executeBundles(bundles)

引數

bundles

一個 GPURenderBundle 物件陣列,包含要執行的預先錄製的命令。

返回值

無 (Undefined)。

驗證

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

對於每個 GPURenderBundle

示例

在 WebGPU 示例 Animometer 示例中,在許多不同的物件上同時執行了許多類似的操作。executeBundles() 用於在多個渲染通道中重用工作以提高效能。請研究示例程式碼列表以獲取完整上下文。

js
// …

return function doDraw(timestamp) {
  if (startTime === undefined) {
    startTime = timestamp;
  }
  uniformTime[0] = (timestamp - startTime) / 1000;
  device.queue.writeBuffer(uniformBuffer, timeOffset, uniformTime.buffer);

  renderPassDescriptor.colorAttachments[0].view = context
    .getCurrentTexture()
    .createView();

  const commandEncoder = device.createCommandEncoder();
  const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);

  if (settings.renderBundles) {
    passEncoder.executeBundles([renderBundle]);
  } else {
    recordRenderPass(passEncoder);
  }

  passEncoder.end();
  device.queue.submit([commandEncoder.finish()]);
};

// …

規範

規範
WebGPU
# dom-gpurenderpassencoder-executebundles

瀏覽器相容性

另見