Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
GPUDevice: createRenderBundleEncoder() 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 insicheren Kontexten (HTTPS) in einigen oder allenunterstützenden Browsern verfügbar.
Hinweis: Diese Funktion ist inWeb Workers verfügbar.
DiecreateRenderBundleEncoder() Methode derGPUDevice Schnittstelle erstellt einenGPURenderBundleEncoder, der verwendet werden kann, um Befehlssätze vorab aufzuzeichnen. Diese können imGPURenderPassEncoder über dieexecuteBundles() Methode beliebig oft wiederverwendet werden.
In diesem Artikel
Syntax
createRenderBundleEncoder(descriptor)Parameter
descriptorEin Objekt, das die folgenden Eigenschaften enthält:
colorFormatsEin Array von aufgezählten Werten, das die erwarteten Farbformate für Renderziele angibt. Für mögliche Werte siehe die
GPUTextureFormatDefinition in der Spezifikation.depthReadOnlyOptionalEin boolescher Wert. Falls
true, wird angegeben, dass das Ausführen eines durch denGPURenderBundleEncodererstelltenGPURenderBundlenicht die Tiefenkomponente desdepthStencilFormatbeim Ausführen verändert. Falls weggelassen, istdepthReadOnlystandardmäßigfalse.depthStencilFormatOptionalEin aufgezählter Wert, der das erwartete Tiefen- oder Schablonenformat für Renderziele angibt. Für mögliche Werte siehe den AbschnittDepth-stencil formats der Spezifikation.
labelOptionalEine Zeichenkette, die ein Label bereitstellt, das zur Identifizierung des Objekts verwendet werden kann, zum Beispiel in
GPUErrorMeldungen oder Konsolenwarnungen.sampleCountOptionalEine Zahl, die die erwartete Abtastanzahl für Renderziele repräsentiert.
stencilReadOnlyOptionalEin boolescher Wert. Falls
true, wird angegeben, dass das Ausführen eines durch denGPURenderBundleEncodererstelltenGPURenderBundlenicht die Schablonenkomponente desdepthStencilFormatbeim Ausführen verändert. Falls weggelassen, iststencilReadOnlystandardmäßigfalse.
Rückgabewert
EinGPURenderBundleEncoder Objektinstanz.
Beispiele
Im WebGPU SamplesAnimometer Beispiel werden zahlreiche ähnliche Operationen gleichzeitig auf vielen verschiedenen Objekten durchgeführt. Ein Befehlssatz wird mit der folgenden Funktion kodiert:
function recordRenderPass( passEncoder: GPURenderBundleEncoder | GPURenderPassEncoder) { if (settings.dynamicOffsets) { passEncoder.setPipeline(dynamicPipeline); } else { passEncoder.setPipeline(pipeline); } passEncoder.setVertexBuffer(0, vertexBuffer); passEncoder.setBindGroup(0, timeBindGroup); const dynamicOffsets = [0]; for (let i = 0; i < numTriangles; ++i) { if (settings.dynamicOffsets) { dynamicOffsets[0] = i * alignedUniformBytes; passEncoder.setBindGroup(1, dynamicBindGroup, dynamicOffsets); } else { passEncoder.setBindGroup(1, bindGroups[i]); } passEncoder.draw(3, 1, 0, 0); }}Später wird einGPURenderBundleEncoder mitcreateRenderBundleEncoder() erstellt, die Funktion aufgerufen, und der Befehlssatz in einGPURenderBundle mitGPURenderBundleEncoder.finish() aufgezeichnet:
const renderBundleEncoder = device.createRenderBundleEncoder({ colorFormats: [presentationFormat],});recordRenderPass(renderBundleEncoder);const renderBundle = renderBundleEncoder.finish();GPURenderPassEncoder.executeBundles() wird dann verwendet, um die Arbeit über mehrere Renderdurchläufe hinweg wiederzuverwenden und die Leistung zu verbessern. Studieren Sie das Beispiel-Code-Listing für den vollständigen Kontext.
// …return function doDraw(timestamp) { if (startTime === undefined) { startTime = timestamp; } uniformTime[0] = (timestamp - startTime) / 1000; device.queue.writeBuffer(uniformBuffer, timeOffset, uniformTime.buffer); renderPassDescriptor.colorAttachments[0].view = context .getCurrentTexture() .createView(); const commandEncoder = device.createCommandEncoder(); const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor); if (settings.renderBundles) { passEncoder.executeBundles([renderBundle]); } else { recordRenderPass(passEncoder); } passEncoder.end(); device.queue.submit([commandEncoder.finish()]);};// …Spezifikationen
| Specification |
|---|
| WebGPU> # dom-gpudevice-createrenderbundleencoder> |
Browser-Kompatibilität
Siehe auch
- DieWebGPU API