GPURenderPassEncoder: setVertexBuffer() Methode
Eingeschränkt verfügbar
Diese Funktion ist nicht Baseline, da sie in einigen der am weitesten verbreiteten Browser nicht funktioniert.
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 setVertexBuffer() Methode der GPURenderPassEncoder Schnittstelle legt den aktuellen GPUBuffer für den angegebenen Slot fest oder hebt ihn auf, der die Vertex-Daten für nachfolgende Zeichnungsbefehle bereitstellen wird.
Syntax
setVertexBuffer(slot, buffer, offset, size)
Parameter
slot-
Eine Zahl, die auf den Vertex-Buffer-Slot verweist, für den der Vertex-Buffer festgelegt werden soll.
buffer-
Ein
GPUBuffer, der den Puffer repräsentiert, der die Vertex-Daten enthält, die für nachfolgende Zeichnungsbefehle verwendet werden sollen, odernull, in diesem Fall wird jeder zuvor festgelegte Puffer im angegebenen Slot aufgehoben. offsetOptional-
Eine Zahl, die den Offset in Bytes in
bufferangibt, an dem die Vertex-Daten beginnen. Wenn weggelassen, wirdoffsetstandardmäßig auf 0 gesetzt. sizeOptional-
Eine Zahl, die die Größe in Bytes der im
bufferenthaltenen Vertex-Daten darstellt. Falls weggelassen, wirdsizestandardmäßig auf dieGPUBuffer.sizedesbuffers-offsetgesetzt.
Rückgabewert
Keine (undefined).
Validierung
Die folgenden Kriterien müssen erfüllt sein, wenn setVertexBuffer() aufgerufen wird, andernfalls wird ein GPUValidationError erzeugt und der GPURenderPassEncoder wird ungültig:
- Der
GPUBuffer.usagevonbufferenthält dasGPUBufferUsage.VERTEXFlag. slotist kleiner als dasGPUDevice'smaxVertexBuffersLimit.offset+sizeist kleiner oder gleich derGPUBuffer.sizedesbuffers.offsetist ein Vielfaches von 4.
Beispiele
>Vertex-Buffer setzen
In unserem Grundlegenden Render-Demo werden mehrere Befehle über einen GPUCommandEncoder aufgezeichnet. Die meisten dieser Befehle stammen aus dem GPURenderPassEncoder, der über GPUCommandEncoder.beginRenderPass() erstellt wurde. setVertexBuffer() wird entsprechend verwendet, um die Quelle der Vertex-Daten festzulegen.
// …
const renderPipeline = device.createRenderPipeline(pipelineDescriptor);
// Create GPUCommandEncoder to issue commands to the GPU
// Note: render pass descriptor, command encoder, etc. are destroyed after use, fresh one needed for each frame.
const commandEncoder = device.createCommandEncoder();
// Create GPURenderPassDescriptor to tell WebGPU which texture to draw into, then initiate render pass
const renderPassDescriptor = {
colorAttachments: [
{
clearValue: clearColor,
loadOp: "clear",
storeOp: "store",
view: context.getCurrentTexture().createView(),
},
],
};
const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);
// Draw the triangle
passEncoder.setPipeline(renderPipeline);
passEncoder.setVertexBuffer(0, vertexBuffer);
passEncoder.draw(3);
// End the render pass
passEncoder.end();
// End frame by passing array of command buffers to command queue for execution
device.queue.submit([commandEncoder.finish()]);
// …
Vertex-Buffer aufheben
// Set vertex buffer in slot 0
passEncoder.setVertexBuffer(0, vertexBuffer);
// Later, unset vertex buffer in slot 0
passEncoder.setVertexBuffer(0, null);
Spezifikationen
| Spezifikation |
|---|
| WebGPU> # dom-gpurendercommandsmixin-setvertexbuffer> |
Browser-Kompatibilität
Siehe auch
- Die WebGPU API