GPURenderBundleEncoder: drawIndirect()-Methode
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 drawIndirect()
-Methode des GPURenderBundleEncoder
-Interfaces zeichnet Primitive unter Verwendung von Parametern, die aus einem GPUBuffer
gelesen werden.
Hinweis:
Diese Methode ist funktional identisch mit ihrem Äquivalent in GPURenderPassEncoder
— drawIndirect()
.
Syntax
drawIndirect(indirectBuffer, indirectOffset)
Parameter
indirectBuffer
-
Ein
GPUBuffer
, der die benötigten WertevertexCount
,instanceCount
,firstVertex
undfirstInstance
enthält, um die Zeichenoperation durchzuführen. Der Puffer muss einen dicht gepackten Block von vier 32-Bit-Ganzzahlen ohne Vorzeichen enthalten, die die Werte in der gleichen Reihenfolge wie die Argumente fürGPURenderBundleEncoder.draw()
darstellen (insgesamt 16 Byte). Zum Beispiel:jsconst uint32 = new Uint32Array(4); uint32[0] = 3; // The vertexCount value uint32[1] = 1; // The instanceCount value uint32[2] = 0; // The firstVertex value uint32[3] = 0; // The firstInstance value // Write values into a GPUBuffer device.queue.writeBuffer(buffer, 0, uint32, 0, uint32.length);
Hinweis: Die
indirect-first-instance
Funktion muss aktiviert sein, damit nicht-nullfirstInstance
-Werte verwendet werden können. Wenn dieindirect-first-instance
-Funktion nicht aktiviert ist undfirstInstance
nicht null ist, wird derdrawIndirect()
-Aufruf als no-op behandelt. indirectOffset
-
Der Offset in Bytes, an dem die Wertedaten im
indirectBuffer
beginnen.
Rückgabewert
Keiner (Undefined
).
Validierung
Die folgenden Kriterien müssen erfüllt sein, wenn drawIndirect()
aufgerufen wird, andernfalls wird ein GPUValidationError
generiert und der GPURenderBundleEncoder
wird ungültig:
indirectBuffer
'sGPUBuffer.usage
enthält dasGPUBufferUsage.INDIRECT
-Flag.indirectOffset
+ die durch die Wertparameter imindirectBuffer
angegebene Gesamtgröße ist kleiner oder gleich derGPUBuffer.size
vonindirectBuffer
.indirectOffset
ist ein Vielfaches von 4.
Beispiele
// …
// Create GPURenderBundleEncoder
const bundleEncoder = device.createRenderBundleEncoder(descriptor);
// Set pipeline and vertex buffer
bundleEncoder.setPipeline(renderPipeline);
bundleEncoder.setVertexBuffer(0, vertexBuffer);
// Create drawIndirect values
const uint32 = new Uint32Array(4);
uint32[0] = 3;
uint32[1] = 1;
uint32[2] = 0;
uint32[3] = 0;
// Create a GPUBuffer and write the draw values into it
const drawValues = device.createBuffer({
size: 16,
usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.INDIRECT,
});
device.queue.writeBuffer(drawValues, 0, uint32, 0, uint32.length);
// Draw the vertices
bundleEncoder.drawIndirect(drawValues, 0);
// End the bundle recording
const renderBundle = bundleEncoder.finish();
// …
Spezifikationen
Specification |
---|
WebGPU # dom-gpurendercommandsmixin-drawindirect |
Browser-Kompatibilität
Siehe auch
- Die WebGPU API