GPURenderPassEncoder: setVertexBuffer() Methode
Eingeschränkt verfügbar
Diese Funktion ist nicht Baseline, da sie in einigen der am weitesten verbreiteten Browser nicht funktioniert.
Want more browser support for this feature? Tell us why.
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