GPURenderPassEncoder: setIndexBuffer() 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 setIndexBuffer() Methode der GPURenderPassEncoder Schnittstelle legt den aktuellen GPUBuffer fest, der Indexpunkte für nachfolgende Zeichenbefehle bereitstellen wird.

Syntax

js
setIndexBuffer(buffer, indexFormat, offset, size)

Parameter

buffer

Ein GPUBuffer, der den Puffer darstellt, der die Indexpunkte für nachfolgende Zeichenbefehle enthält.

indexFormat

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

  • "uint16"
  • "uint32"
offset Optional

Eine Zahl, die den Versatz in Bytes in den buffer angibt, an dem die Indexpunkte beginnen. Wenn weggelassen, wird offset auf 0 gesetzt.

size Optional

Eine Zahl, die die Größe in Bytes der im buffer enthaltenen Indexpunkte angibt. Wenn weggelassen, wird size auf die buffer's GPUBuffer.size - offset gesetzt.

Hinweis zu indexFormat

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

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

Beispiele

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