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 setIndexBuffer()
-Methode des GPURenderPassEncoder
-Interfaces legt den aktuellen GPUBuffer
fest, der Indexdaten für nachfolgende Zeichenbefehle bereitstellen wird.
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. indexFormat
-
Ein aufgelisteter 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, wo die Indexdaten beginnen. Wenn weggelassen, ist der Standardwert vonoffset
0. size
Optional-
Eine Zahl, die die Größe in Bytes der im
buffer
enthaltenen Indexdaten darstellt. Wenn weggelassen, entsprichtsize
derGPUBuffer.size
desbuffers
minusoffset
.
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"
) angibt, den Primitive-Restart-Wert. Der Primitive-Restart-Wert ist ein Indexwert, der anzeigt, dass eine neue Primitive gestartet werden soll, anstatt den Streifen mit den vorher indizierten Scheitelpunkten fortzusetzen. 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
generiert und der GPURenderPassEncoder
wird ungültig:
buffer
'sGPUBuffer.usage
enthält dasGPUBufferUsage.INDEX
-Flag.offset
+size
ist kleiner oder gleich derGPUBuffer.size
desbuffers
.offset
ist ein Vielfaches der Bytegröße vonindexFormat
(2 für"uint16"
, 4 für"uint32"
).
Beispiele
Im WebGPU-Beispiel Shadow Mapping wird setIndexBuffer()
in zwei separaten Render-Passagen in jedem Animationsframe verwendet, eine zum Zeichnen des Hauptmodells und eine, um seinen Schatten zu zeichnen. Untersuchen Sie die Beispielcode-Auflistung 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
Specification |
---|
WebGPU # dom-gpurendercommandsmixin-setindexbuffer |
Browser-Kompatibilität
BCD tables only load in the browser
Siehe auch
- Die WebGPU API