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, bevor Sie diese produktiv verwenden.
Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.
Hinweis: Dieses Feature ist verfügbar in Web Workers.
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 auf GPURenderPassEncoder
— drawIndirect()
.
Syntax
drawIndirect(indirectBuffer, indirectOffset)
Parameter
indirectBuffer
-
Ein
GPUBuffer
, der die WertevertexCount
,instanceCount
,firstVertex
undfirstInstance
enthält, die für den Zeichenbetrieb benötigt werden. Der Puffer muss einen fest gepackten Block von vier 32-Bit-unsigned-Integer-Werten enthalten, die die Werte darstellen (insgesamt 16 Bytes), in der gleichen Reihenfolge wie die Argumente fürGPURenderBundleEncoder.draw()
. 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, um nicht-nullfirstInstance
Werte zu verwenden. Wenn dieindirect-first-instance
Funktion nicht aktiviert ist undfirstInstance
ungleich null ist, wird derdrawIndirect()
Aufruf als No-Op behandelt. indirectOffset
-
Der Offset, in Bytes, in
indirectBuffer
, an dem die Wertedaten 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:
GPUBuffer.usage
vonindirectBuffer
enthält dasGPUBufferUsage.INDIRECT
Flag.indirectOffset
+ die durch die Werteparameter 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
BCD tables only load in the browser
Siehe auch
- Die WebGPU API