Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

GPURenderPassEncoder: setIndexBuffer()-Methode

Eingeschränkt verfügbar

Diese Funktion ist nicht Baseline, da sie in einigen der am weitesten verbreiteten Browser nicht funktioniert.

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 setIndexBuffer()-Methode der GPURenderPassEncoder-Schnittstelle setzt den aktuellen GPUBuffer, der Indexdaten für nachfolgende Zeichenbefehle bereitstellt.

Syntax

js
setIndexBuffer(buffer, indexFormat, offset, size)

Parameter

buffer

Ein GPUBuffer, der den Puffer darstellt, der die Indexdaten enthält, die für nachfolgende Zeichenbefehle verwendet werden sollen.

indexFormat

Ein enumerierter Wert, der das Format der im buffer enthaltenen Indexdaten definiert. Mögliche Werte sind:

  • "uint16"
  • "uint32"
offset Optional

Eine Zahl, die den Offset in Bytes in den buffer darstellt, an dem die Indexdaten beginnen. Wenn weggelassen, ist der Standardwert für offset 0.

size Optional

Eine Zahl, die die Größe in Bytes der im buffer enthaltenen Indexdaten darstellt. Wenn weggelassen, entspricht size der GPUBuffer.size des buffer minus offset.

Hinweis zu indexFormat

indexFormat bestimmt sowohl den Datentyp der Indexwerte in einem Puffer als auch, wenn es mit einer Pipeline verwendet wird, die eine Strip-Primitive-Topologie ("line-strip" oder "triangle-strip") spezifiziert, den Primitive Restart-Wert. Der Primitive Restart-Wert ist ein Indexwert, der angibt, dass ein neues Primär gestartet werden soll, anstatt den Strip mit den zuvor indizierten Vertizes weiter zu konstruieren. Der Wert ist 0xFFFF für "uint16" oder 0xFFFFFFFF für "uint32".

Rückgabewert

Keiner (undefined).

Validierung

Die folgenden Kriterien müssen erfüllt sein, wenn setIndexBuffer() aufgerufen wird, andernfalls wird ein GPUValidationError erzeugt und der GPURenderPassEncoder wird ungültig:

  • Der GPUBuffer.usage von buffer enthält das GPUBufferUsage.INDEX-Flag.
  • offset + size ist kleiner oder gleich der GPUBuffer.size des buffer.
  • offset ist ein Vielfaches der Byte-Größe von indexFormat (2 für "uint16", 4 für "uint32").

Beispiele

Im WebGPU-Beispiele Shadow Mapping-Beispiel wird setIndexBuffer() in zwei separaten Render-Passes in jedem Animationsframe verwendet, eine zum Zeichnen des Hauptmodells und eine zum Zeichnen seines Schattens. Studieren Sie die Beispiel-Codeauflistung für den vollständigen Kontext.

js
// …

const commandEncoder = device.createCommandEncoder();
{
  const shadowPass = commandEncoder.beginRenderPass(shadowPassDescriptor);
  shadowPass.setPipeline(shadowPipeline);
  shadowPass.setBindGroup(0, sceneBindGroupForShadow);
  shadowPass.setBindGroup(1, modelBindGroup);
  shadowPass.setVertexBuffer(0, vertexBuffer);
  shadowPass.setIndexBuffer(indexBuffer, "uint16");
  shadowPass.drawIndexed(indexCount);

  shadowPass.end();
}
{
  const renderPass = commandEncoder.beginRenderPass(renderPassDescriptor);
  renderPass.setPipeline(pipeline);
  renderPass.setBindGroup(0, sceneBindGroupForRender);
  renderPass.setBindGroup(1, modelBindGroup);
  renderPass.setVertexBuffer(0, vertexBuffer);
  renderPass.setIndexBuffer(indexBuffer, "uint16");
  renderPass.drawIndexed(indexCount);

  renderPass.end();
}

// …

Spezifikationen

Spezifikation
WebGPU
# dom-gpurendercommandsmixin-setindexbuffer

Browser-Kompatibilität

Siehe auch