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
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, wirdoffset
auf 0 gesetzt. size
Optional-
Eine Zahl, die die Größe in Bytes der im
buffer
enthaltenen Indexpunkte angibt. Wenn weggelassen, wirdsize
auf diebuffer
'sGPUBuffer.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
'sGPUBuffer.usage
enthält dasGPUBufferUsage.INDEX
Flag.offset
+size
ist kleiner oder gleich derbuffer
'sGPUBuffer.size
.offset
ist ein Vielfaches der Bytegröße desindexFormat
(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.
// …
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
- Die WebGPU API