GPURenderPassEncoder: Methode setIndexBuffer()

Limited availability

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

Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig vor der Verwendung auf produktiven Webseiten.

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 Methode setIndexBuffer() 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 zu verwendenden Indexdaten für nachfolgende Zeichenbefehle enthält.

indexFormat

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

  • "uint16"
  • "uint32"
offset Optional

Eine Zahl, die das Offset, in Bytes, in den buffer darstellt, wo 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 abzüglich offset.

Hinweis zu indexFormat

indexFormat bestimmt sowohl den Datentyp der Indexwerte in einem Puffer als auch, wann es mit einer Pipeline verwendet wird, die eine Streifen-Primitive-Topologie ( "line-strip" oder "triangle-strip") angibt, den Primitive-Restart-Wert. Der Primitive-Restart-Wert ist ein Indexwert, der angibt, dass ein neues Primitiv begonnen werden soll, anstatt den Streifen mit den vorher indizierten Scheitelpunkten 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:

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

Beispiele

Im WebGPU-Beispiel Shadow Mapping wird setIndexBuffer() in zwei separaten Render-Passes in jedem Animationsframe verwendet, einer um das Hauptmodell und einer um dessen Schatten zu zeichnen. Untersuchen Sie die Beispielcodeliste 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

Specification
WebGPU
# dom-gpurendercommandsmixin-setindexbuffer

Browser-Kompatibilität

Siehe auch