GPUCommandEncoder: beginRenderPass() 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 beginRenderPass() Methode der GPUCommandEncoder Schnittstelle startet die Kodierung eines Render-Passes und gibt einen GPURenderPassEncoder zurück, der zur Steuerung des Renderns verwendet werden kann.
Syntax
beginRenderPass(descriptor)
Parameter
descriptor-
Ein Objekt, das die folgenden Eigenschaften enthält:
colorAttachments-
Ein Array von Objekten (siehe Struktur von Farbattachment-Objekten), die die Farbattachments definieren, auf die beim Ausführen dieses Render-Passes ausgegeben wird.
depthStencilAttachmentOptional-
Ein Objekt (siehe Struktur von Tiefen-/Stencilattachment-Objekten), das das Tiefen-/Stencilattachment definiert, auf das ausgegeben wird und gegen das getestet wird, wenn dieser Render-Pass ausgeführt wird.
labelOptional-
Ein String, der ein Label bereitstellt, das zur Identifizierung des Objekts verwendet werden kann, beispielsweise in
GPUError-Meldungen oder Konsolenwarnungen. maxDrawCountOptional-
Eine Zahl, die die maximale Anzahl an Draw-Calls angibt, die im Render-Pass ausgeführt werden. Dies wird von einigen Implementierungen verwendet, um Arbeiten zu dimensionieren, die vor dem Render-Pass eingefügt werden. Sie sollten den Standardwert – 50000000 – beibehalten, es sei denn, Sie wissen, dass mehr Draw-Calls ausgeführt werden.
occlusionQuerySetOptional-
Das
GPUQuerySet, das die Okklusionsabfrageergebnisse für diesen Pass speichert. timestampWritesOptional-
Ein Array von Objekten, die definieren, wo und wann Zeitstempelabfragewerte für diesen Pass geschrieben werden. Diese Objekte haben die folgenden Eigenschaften:
querySet-
Ein
GPUQuerySetvom Typ"timestamp", in das die Ergebnisse der Zeitstempelabfrage geschrieben werden. beginningOfPassWriteIndex-
Eine Zahl, die den Abfrageindex in
querySetangibt, in den der Zeitstempel zu Beginn des Render-Passes geschrieben wird. Dies ist optional – wenn nicht definiert, wird kein Zeitstempel für den Beginn des Passes geschrieben. endOfPassWriteIndex-
Eine Zahl, die den Abfrageindex in
querySetangibt, in den der Zeitstempel am Ende des Render-Passes geschrieben wird. Dies ist optional – wenn nicht definiert, wird kein Zeitstempel für das Ende des Passes geschrieben.
Hinweis: Die
timestamp-queryFunktion muss aktiviert sein, um Zeitstempelabfragen verwenden zu können. Zeitstempelabfragewerte werden in Nanosekunden geschrieben, jedoch ist es implementierungsdefiniert, wie der Wert bestimmt wird.
Struktur von Farbattachment-Objekten
Farbattachment-Objekte können die folgenden Eigenschaften haben:
clearValueOptional-
Ein Farbwert, um die
view-Textur vor der Ausführung des Render-Passes zu löschen. Dieser Wert wird ignoriert, wennloadOpnicht auf"clear"gesetzt ist.clearValuenimmt ein Array oder Objekt, das die vier Farbkomponentenr,g,bundaals Dezimalzahlen darstellt.Zum Beispiel können Sie ein Array wie
[0.0, 0.5, 1.0, 1.0]oder sein äquivalentes Objekt{ r: 0.0, g: 0.5, b: 1.0, a: 1.0 }übergeben.Wenn
clearValueweggelassen wird, ist der Standardwert{ r: 0, g: 0, b: 0, a: 0 }. depthSliceOptional-
Eine Zahl, die den Index des 3D-Tiefenschnitts darstellt, auf den für dieses Farbattachment bei einem 3D
GPUTextureViewviewausgegeben wird. Wenn angegeben, ermöglicht dies WebGPU, direkt auf Scheiben von 3D-Texturen innerhalb von Render-Pässen zu rendern. loadOp-
Ein enumerierter Wert, der die Ladeoperation angibt, die auf
viewvor der Ausführung des Render-Passes ausgeführt werden soll. Mögliche Werte sind:"clear": Lädt denclearValuefür dieses Attachment in den Render-Pass."load": Lädt den vorhandenen Wert für dieses Attachment in den Render-Pass.
Hinweis: Es wird empfohlen, immer
"clear"zu verwenden, wenn der Initialwert keine Rolle spielt, da dies auf einigen Geräten, wie z. B. Mobilgeräten, eine bessere Leistung bietet. storeOp-
Ein enumerierter Wert, der die Speicheroperation angibt, die auf
viewnach der Ausführung des Render-Passes ausgeführt werden soll. Mögliche Werte sind:"discard": Verwirft den resultierenden Wert des Render-Passes für dieses Attachment."store": Speichert den resultierenden Wert des Render-Passes für dieses Attachment.
resolveTargetOptional-
Ein Objekt, das die Textur-Subressource darstellt, die den aufgelösten Output für dieses Farbattachment empfängt, wenn
viewmultisampled ist. Dies kann eines der folgenden sein:GPUTextureViewGPUTexture: Kann anstelle einesGPUTextureViewverwendet werden, vorausgesetzt, eine Standardansicht ist gewünscht. In diesem Kontext istGPUTexturegleichbedeutend mit einemGPUTextureView-Objekt, das mit einemGPUTexture.createView()-Aufruf ohne angegebenes Argument erstellt wurde.
view-
Ein Objekt, das die Textur-Subressource darstellt, die für dieses Farbattachment ausgegeben wird. Dies kann eines der folgenden sein:
GPUTextureViewGPUTexture: Kann anstelle einesGPUTextureViewverwendet werden, vorausgesetzt, eine Standardansicht ist gewünscht. In diesem Kontext istGPUTexturegleichbedeutend mit einemGPUTextureView-Objekt, das mit einemGPUTexture.createView()-Aufruf ohne angegebenes Argument erstellt wurde.
Hinweis: Jedes Farb- oder Tiefen-/Stencilattachment muss eine eindeutige Textur-Subressource sein, und Textur-Subressourcen, die als Attachments verwendet werden, können nicht innerhalb des Render-Passes verwendet werden.
Struktur von Tiefen-/Stencilattachment-Objekten
Das depthStencilAttachment-Objekt kann die folgenden Eigenschaften haben:
depthClearValueOptional-
Eine Zahl, die den Wert angibt, auf den die Tiefenkomponente von
viewvor der Ausführung des Render-Passes gelöscht wird. Dies wird ignoriert, wenndepthLoadOpnicht auf"clear"gesetzt ist.Der Wert muss zwischen 0,0 und 1,0 liegen, inklusive.
depthLoadOpOptional-
Ein enumerierter Wert, der die Ladeoperation angibt, die auf die Tiefenkomponente von
viewvor der Ausführung des Render-Passes ausgeführt wird. Mögliche Werte sind:"clear": Lädt denclearValuefür dieses Attachment in den Render-Pass."load": Lädt den vorhandenen Wert für dieses Attachment in den Render-Pass.
Hinweis: Es wird empfohlen, immer
"clear"zu verwenden, wenn der Initialwert keine Rolle spielt, da dies auf einigen Geräten, wie z. B. Mobilgeräten, eine bessere Leistung bietet. depthReadOnlyOptional-
Ein boolescher Wert. Wenn der Wert auf
truegesetzt ist, wird die Tiefenkomponente vonviewschreibgeschützt. WenndepthReadOnlyweggelassen wird, ist der Standardwertfalse. depthStoreOpOptional-
Ein enumerierter Wert, der die Speicheroperation angibt, die auf die Tiefenkomponente von
viewnach der Ausführung des Render-Passes ausgeführt wird. Mögliche Werte sind:"discard": Verwirft den resultierenden Wert des Render-Passes für dieses Attachment."store": Speichert den resultierenden Wert des Render-Passes für dieses Attachment.
stencilClearValueOptional-
Eine Zahl, die den Wert angibt, auf den die Stencilkomponente von
viewvor der Ausführung des Render-Passes gelöscht wird. Dies wird ignoriert, wennstencilLoadOpnicht auf"clear"gesetzt ist.Wenn
stencilClearValueweggelassen wird, ist der Standardwert 0. stencilLoadOpOptional-
Ein enumerierter Wert, der die Ladeoperation angibt, die auf die Stencilkomponente von
viewvor der Ausführung des Render-Passes ausgeführt wird. Mögliche Werte sind:"clear": Lädt denclearValuefür dieses Attachment in den Render-Pass."load": Lädt den vorhandenen Wert für dieses Attachment in den Render-Pass.
Hinweis: Es wird empfohlen, immer
"clear"zu verwenden, wenn der Initialwert keine Rolle spielt, da dies auf einigen Geräten, wie z. B. Mobilgeräten, eine bessere Leistung bietet. stencilReadOnlyOptional-
Ein boolescher Wert. Wenn der Wert auf
truegesetzt ist, wird die Stencilkomponente vonviewschreibgeschützt. WennstencilReadOnlyweggelassen wird, ist der Standardwertfalse. stencilStoreOpOptional-
Ein enumerierter Wert, der die Speicheroperation angibt, die auf die Stencilkomponente von
viewnach der Ausführung des Render-Passes ausgeführt wird. Mögliche Werte sind:"discard": Verwirft den resultierenden Wert des Render-Passes für dieses Attachment."store": Speichert den resultierenden Wert des Render-Passes für dieses Attachment.
view-
Ein Objekt, das die Textur-Subressource darstellt, die für dieses Tiefen-/Stencilattachment ausgegeben und von ihr gelesen wird. Dies kann eines der folgenden sein:
GPUTextureViewGPUTexture: Kann anstelle einesGPUTextureViewverwendet werden, vorausgesetzt, eine Standardansicht ist gewünscht. In diesem Kontext istGPUTexturegleichbedeutend mit einemGPUTextureView-Objekt, das mit einemGPUTexture.createView()-Aufruf ohne angegebenes Argument erstellt wurde.
Rückgabewert
Eine Instanz des GPURenderPassEncoder Objekts.
Validierung
Die folgenden Kriterien müssen erfüllt sein, wenn beginRenderPass() aufgerufen wird, andernfalls wird ein GPUValidationError generiert und ein ungültiger GPURenderPassEncoder zurückgegeben.
Allgemein:
colorAttachments.lengthist kleiner oder gleich demmaxColorAttachmentsLimit desGPUDevice.- Wenn
colorAttachmentsnurnull-Werte enthält, wirddepthStencilAttachmentbereitgestellt. - Alle
views incolorAttachmentsunddepthStencilAttachmenthaben gleichwertigeGPUTexture.sampleCountWerte und Render-Umfänge (GPUTexture.height,GPUTexture.widthundGPUTexture.depthOrArrayLayers). - Wenn
occlusionQuerySetgesetzt ist, hat das referenzierteGPUQuerySeteinentypevon"occlusion".
Für Farbattachment-Objekte:
- Die
viewist renderbar, und das Format derview(d.h. angegeben im Descriptor des ursprünglichenGPUTexture.createView()-Aufrufs) ist ein renderbares Farbformat. - Wenn
resolveTargetbereitgestellt wird:- Die originelle
GPUTexturederviewhat einesampleCountvon größer als 1. - Die originelle
GPUTexturederresolveTargethat einesampleCountvon 1. resolveTargetist renderbar.- Die Größen der Subressourcen, die
viewundresolveTargetbereitstellen, stimmen überein. - Die Formate von
viewundresolveTargetstimmen überein.
- Die originelle
- Farbattachments Bytes pro Sample sind kleiner oder gleich dem
maxColorAttachmentBytesPerSampleLimit desGPUDevice.
Für Tiefen-/Stencilattachment-Objekte:
- Die
viewist renderbar und ihr Format ist ein depth-or-stencil Format. - Wenn
depthLoadOpauf"clear"gesetzt ist, wird ein gültigerdepthClearValuebereitgestellt. - Wenn das Format der
viewein kombiniertes depth-or-stencil Format ist, stimmendepthReadOnlyundstencilReadOnlyüberein. - Wenn das Format der
vieweinen Tiefenaspekt hat unddepthReadOnlyfalseist, werdendepthLoadOpunddepthStoreOpbereitgestellt. - Wenn das Format der
vieweinen Tiefenaspekt hat unddepthReadOnlytrueist, werdendepthLoadOpunddepthStoreOpnicht bereitgestellt. - Wenn das Format der
vieweinen Stencilaspekt hat undstencilReadOnlyfalseist, werdenstencilLoadOpundstencilStoreOpbereitgestellt. - Wenn das Format der
vieweinen Stencilaspekt hat undstencilReadOnlytrueist, werdenstencilLoadOpundstencilStoreOpnicht bereitgestellt.
Für Zeitstempelabfragen:
Beispiele
In unserem grundlegenden Render-Demo werden eine Vielzahl von Befehlen über einen GPUCommandEncoder aufgezeichnet. Diese Befehle stammen aus dem GPURenderPassEncoder, der über beginRenderPass() erstellt wird:
// …
// Create GPUCommandEncoder
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 a triangle
passEncoder.setPipeline(renderPipeline);
passEncoder.setVertexBuffer(0, vertexBuffer);
passEncoder.draw(3);
// End the render pass
passEncoder.end();
device.queue.submit([commandEncoder.finish()]);
// …
Spezifikation
| Specification |
|---|
| WebGPU> # dom-gpucommandencoder-beginrenderpass> |
Browser-Kompatibilität
Loading…
Siehe auch
- Die WebGPU API