GPURenderBundleEncoder: setVertexBuffer() Methode

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.

Hinweis: Diese Funktion ist in Web Workers verfügbar.

Die setVertexBuffer()-Methode der GPURenderBundleEncoder Schnittstelle setzt oder entfernt den aktuellen GPUBuffer für den angegebenen Slot, der Vertex-Daten für nachfolgende Zeichenbefehle bereitstellen wird.

Hinweis: Diese Methode ist funktional identisch mit ihrem Äquivalent auf GPURenderPassEncodersetVertexBuffer().

Syntax

js
setVertexBuffer(slot, buffer, offset, size)

Parameter

slot

Eine Zahl, die den Vertex-Buffer-Slot referenziert, für den der Vertex-Buffer gesetzt werden soll.

buffer

Ein GPUBuffer, der den Puffer darstellt, der die Vertex-Daten für nachfolgende Zeichenbefehle enthält, oder null, in welchem Fall ein zuvor gesetzter Puffer im angegebenen Slot entfernt wird.

offset Optional

Eine Zahl, die den Offset in Bytes in den buffer darstellt, wo die Vertex-Daten beginnen. Wenn weggelassen, ist der Standardwert für offset 0.

size Optional

Eine Zahl, die die Größe der im buffer enthaltenen Vertex-Daten in Bytes darstellt. Wenn weggelassen, ist der Standardwert für size die Größe von GPUBuffer.size des buffer - offset.

Rückgabewert

Keiner (Undefined).

Validierung

Die folgenden Kriterien müssen erfüllt sein, wenn setVertexBuffer() aufgerufen wird, andernfalls wird ein GPUValidationError erzeugt und die GPURenderBundleEncoder wird ungültig:

  • GPUBuffer.usage des buffer enthält das GPUBufferUsage.VERTEX-Flag.
  • slot ist kleiner als das maxVertexBuffers-Limit des GPUDevice.
  • offset + size ist kleiner oder gleich der Größe des buffer's GPUBuffer.size.
  • offset ist ein Vielfaches von 4.

Beispiele

Vertex-Buffer setzen

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);
  }
}

Der obige Code-Snippet stammt aus dem WebGPU Samples Animometer-Beispiel.

Vertex-Buffer aufheben

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

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

Spezifikationen

Specification
WebGPU
# dom-gpurendercommandsmixin-setvertexbuffer

Browser-Kompatibilität

Siehe auch