GPURenderBundleEncoder: drawIndirect()-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 drawIndirect()
-Methode der GPURenderBundleEncoder
-Schnittstelle zeichnet Primitive mithilfe von Parametern, die von 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 zur Durchführung des Zeichenoperation benötigt werden. Der Buffer muss einen eng gepackten Block aus vier 32-Bit-Ganzzahlen ohne Vorzeichen enthalten, der die Werte in derselben Reihenfolge repräsentiert wie die Argumente fürGPURenderBundleEncoder.draw()
(insgesamt 16 Bytes). 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: Das
indirect-first-instance
-Feature muss aktiviert sein, damit Nicht-Null-firstInstance
-Werte verwendet werden können. Wenn dasindirect-first-instance
-Feature nicht aktiviert ist undfirstInstance
nicht null ist, wird derdrawIndirect()
-Aufruf als No-Op behandelt. indirectOffset
-
Der Offset in Bytes, ab 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:
- Die
GPUBuffer.usage
vonindirectBuffer
enthält dasGPUBufferUsage.INDIRECT
-Flag. indirectOffset
plus die durch die Wertparameter imindirectBuffer
angegebene Gesamtgröße ist kleiner oder gleich derGPUBuffer.size
desindirectBuffer
.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