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
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
bufferenthaltenen Indexdaten definiert. Mögliche Werte sind:"uint16""uint32"
offsetOptional-
Eine Zahl, die den Offset in Bytes in den
bufferdarstellt, an dem die Indexdaten beginnen. Wenn weggelassen, ist der Standardwert füroffset0. sizeOptional-
Eine Zahl, die die Größe in Bytes der im
bufferenthaltenen Indexdaten darstellt. Wenn weggelassen, entsprichtsizederGPUBuffer.sizedesbufferminusoffset.
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.usagevonbufferenthält dasGPUBufferUsage.INDEX-Flag. offset+sizeist kleiner oder gleich derGPUBuffer.sizedesbuffer.offsetist ein Vielfaches der Byte-Größe vonindexFormat(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.
// …
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
- Die WebGPU API