GPUCommandEncoder: beginRenderPass()-Methode
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig vor der Verwendung auf produktiven Webseiten.
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 Renderings genutzt werden kann.
Syntax
beginRenderPass(descriptor)
Parameter
descriptor
-
Ein Objekt, das die folgenden Eigenschaften enthält:
colorAttachments
-
Ein Array von Objekten (siehe Aufbau von Farb-Anhangsobjekten), das die Farbanhänge definiert, auf die beim Ausführen dieses Render-Passes ausgegeben wird.
depthStencilAttachment
Optional-
Ein Objekt (siehe Aufbau von Tiefen/Stencil-Anhangsobjekten), das den Tiefen/Stencil-Anhang definiert, auf den beim Ausführen dieses Render-Passes ausgegeben und gegen den getestet wird.
label
Optional-
Ein String, der ein Label bereitstellt, das zur Identifizierung des Objekts verwendet werden kann, z.B. in
GPUError
-Meldungen oder Konsolenwarnungen. maxDrawCount
Optional-
Eine Zahl, die die maximale Anzahl von Zeichenaufrufen angibt, die im Render-Pass ausgeführt werden. Dies wird von einigen Implementierungen genutzt, um Arbeiten vor dem Render-Pass zu dimensionieren. Sie sollten den Standardwert - 50000000 - beibehalten, es sei denn, Sie wissen, dass mehr Zeichenaufrufe ausgeführt werden.
occlusionQuerySet
Optional-
Das
GPUQuerySet
, das die Okklusionsabfragergebnisse für diesen Pass speichern wird. timestampWrites
Optional-
Ein Array von Objekten, das definiert, wo und wann Zeitstempelabfragewerte für diesen Pass geschrieben werden. Diese Objekte haben die folgenden Eigenschaften:
querySet
-
Ein
GPUQuerySet
vom Typ"timestamp"
, in das die Zeitstempelabfrageergebnisse geschrieben werden. beginningOfPassWriteIndex
-
Eine Zahl, die den Abfrageindex in
querySet
angibt, an dem 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
querySet
angibt, an dem 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: Das
timestamp-query
Merkmal muss aktiviert sein, um Zeitstempelabfragen zu verwenden. Zeitstempelabfragewerte werden in Nanosekunden geschrieben, die Art und Weise, wie der Wert bestimmt wird, ist jedoch implementierungsabhängig.
Aufbau von Farb-Anhangsobjekten
Farb-Anhangsobjekte können die folgenden Eigenschaften haben:
clearValue
Optional-
Ein Farbwert, mit dem die
view
-Textur vor der Ausführung des Render-Passes gelöscht wird. Dieser Wert wird ignoriert, wennloadOp
nicht auf"clear"
gesetzt ist.clearValue
akzeptiert ein Array oder Objekt, das die vier Farbkomponentenr
,g
,b
unda
als Dezimalzahlen darstellt.Zum Beispiel können Sie ein Array wie
[0.0, 0.5, 1.0, 1.0]
oder das entsprechende Objekt{ r: 0.0, g: 0.5, b: 1.0, a: 1.0 }
übergeben.Wenn
clearValue
weggelassen wird, wird der Standard{ r: 0, g: 0, b: 0, a: 0 }
verwendet. depthSlice
Optional-
Eine Zahl, die den Index des 3D-Tiefenslicers darstellt, auf den bei diesem Farbanhang ausgegeben wird, im Falle eines 3D-
GPUTextureView
-view
. Wenn angegeben, erlaubt dies WebGPU, direkt auf Slices von 3D-Texturen innerhalb von Render-Passes zu rendern. loadOp
-
Ein enumerierter Wert, der die Ladevorgänge angibt, die auf
view
vor der Ausführung des Render-Passes ausgeführt werden. Mögliche Werte sind:"clear"
: Lädt denclearValue
für diesen Anhang in den Render-Pass."load"
: Lädt den bestehenden Wert für diesen Anhang in den Render-Pass.
Hinweis: Es wird empfohlen, immer
"clear"
zu verwenden, wenn der Anfangswert keine Rolle spielt, da dies auf einigen Geräten wie Mobilgeräten eine bessere Leistung bietet. storeOp
-
Ein enumerierter Wert, der den Speichervorgang angibt, der auf
view
nach der Ausführung des Render-Passes ausgeführt wird. Mögliche Werte sind:"discard"
: Verwift den resultierenden Wert des Render-Passes für diesen Anhang."store"
: Speichert den resultierenden Wert des Render-Passes für diesen Anhang.
resolveTarget
Optional-
Ein
GPUTextureView
-Objekt, das die Textur-Subressource darstellt, die das aufgelöste Ergebnis für diesen Farbanhang empfängt, wennview
mehrfach abgetastet ist. view
-
Ein
GPUTextureView
-Objekt, das die Textur-Subressource darstellt, auf die für diesen Farbanhang ausgegeben wird.Hinweis: Jeder Farb- oder Tiefen/Stencil-Anhang muss eine eindeutige Textur-Subressource sein, und Textur-Subressourcen, die als Anhänge verwendet werden, können nicht innerhalb des Render-Passes verwendet werden.
Aufbau von Tiefen/Stencil-Anhangsobjekten
Das depthStencilAttachment
-Objekt kann die folgenden Eigenschaften haben:
depthClearValue
Optional-
Eine Zahl, die den Wert angibt, auf den die Tiefenkomponente von
view
vor der Ausführung des Render-Passes gelöscht werden soll. Dies wird ignoriert, wenndepthLoadOp
nicht auf"clear"
gesetzt ist.Der Wert muss zwischen 0.0 und 1.0 liegen, inklusive.
depthLoadOp
Optional-
Ein enumerierter Wert, der die Ladevorgänge angibt, die auf die Tiefenkomponente von
view
vor der Ausführung des Render-Passes ausgeführt werden. Mögliche Werte sind:"clear"
: Lädt denclearValue
für diesen Anhang in den Render-Pass."load"
: Lädt den bestehenden Wert für diesen Anhang in den Render-Pass.
Hinweis: Es wird empfohlen, immer
"clear"
zu verwenden, wenn der Anfangswert keine Rolle spielt, da dies auf einigen Geräten wie Mobilgeräten eine bessere Leistung bietet. depthReadOnly
Optional-
Ein Boolean. Setzen des Wertes auf
true
bewirkt, dass die Tiefenkomponente vonview
schreibgeschützt ist. WenndepthReadOnly
weggelassen wird, ist der Standardwertfalse
. depthStoreOp
Optional-
Ein enumerierter Wert, der den Speichervorgang angibt, der auf die Tiefenkomponente von
view
nach der Ausführung des Render-Passes ausgeführt wird. Mögliche Werte sind:"discard"
: Verwift den resultierenden Wert des Render-Passes für diesen Anhang."store"
: Speichert den resultierenden Wert des Render-Passes für diesen Anhang.
stencilClearValue
Optional-
Eine Zahl, die den Wert angibt, auf den die Stencil-Komponente von
view
vor der Ausführung des Render-Passes gelöscht werden soll. Dies wird ignoriert, wennstencilLoadOp
nicht auf"clear"
gesetzt ist.Wenn
stencilClearValue
weggelassen wird, ist der Standardwert 0. stencilLoadOp
Optional-
Ein enumerierter Wert, der die Ladevorgänge angibt, die auf die Stencil-Komponente von
view
vor der Ausführung des Render-Passes ausgeführt werden. Mögliche Werte sind:"clear"
: Lädt denclearValue
für diesen Anhang in den Render-Pass."load"
: Lädt den bestehenden Wert für diesen Anhang in den Render-Pass.
Hinweis: Es wird empfohlen, immer
"clear"
zu verwenden, wenn der Anfangswert keine Rolle spielt, da dies auf einigen Geräten wie Mobilgeräten eine bessere Leistung bietet. stencilReadOnly
Optional-
Ein Boolean. Setzen des Wertes auf
true
bewirkt, dass die Stencil-Komponente vonview
schreibgeschützt ist. WennstencilReadOnly
weggelassen wird, ist der Standardwertfalse
. stencilStoreOp
Optional-
Ein enumerierter Wert, der den Speichervorgang angibt, der auf die Stencil-Komponente von
view
nach der Ausführung des Render-Passes ausgeführt wird. Mögliche Werte sind:"discard"
: Verwift den resultierenden Wert des Render-Passes für diesen Anhang."store"
: Speichert den resultierenden Wert des Render-Passes für diesen Anhang.
view
-
Ein
GPUTextureView
-Objekt, das die Textur-Subressource darstellt, auf die für diesen Tiefen/Stencil-Anhang ausgegeben und von der gelesen wird.
Rückgabewert
Ein GPURenderPassEncoder
-Objektinstanz.
Validierung
Die folgenden Kriterien müssen beim Aufrufen von beginRenderPass()
erfüllt sein, andernfalls wird ein GPUValidationError
generiert und ein ungültiger GPURenderPassEncoder
zurückgegeben.
Allgemein:
colorAttachments.length
ist kleiner oder gleich demmaxColorAttachments
-Limit desGPUDevice
.- Wenn
colorAttachments
nurnull
-Werte enthält, wirddepthStencilAttachment
bereitgestellt. - Alle
view
s incolorAttachments
unddepthStencilAttachment
haben gleiche [GPUTexture.sampleCount
]-Werte (/de/docs/Web/API/GPUTexture/sampleCount) und Render-Bereiche (GPUTexture.height
,GPUTexture.width
undGPUTexture.depthOrArrayLayers
). - Wenn
occlusionQuerySet
gesetzt ist, hat das referenzierteGPUQuerySet
einentype
von"occlusion"
.
Für Farb-Anhangsobjekte
- Die
view
ist renderbar und das Format vonview
(d.h. im Deskriptor des ursprünglichenGPUTexture.createView()
-Aufrufs angegeben) ist ein Farbrenderformat. - Wenn
resolveTarget
bereitgestellt wird:- Die ursprüngliche
GPUTexture
derview
hat einensampleCount
größer als 1. - Die ursprüngliche
GPUTexture
desresolveTarget
hat einensampleCount
von 1. resolveTarget
ist renderbar.- Die Größen der Subressourcen, die
view
undresolveTarget
bereitstellen, stimmen überein. - Die Formate von
view
undresolveTarget
stimmen überein.
- Die ursprüngliche
- Bytes pro Probe der Farbanhänge ist kleiner oder gleich dem
maxColorAttachmentBytesPerSample
-Limit desGPUDevice
.
Für Tiefen/Stencil-Anhangsobjekte:
- Die
view
ist renderbar und ihr Format ist ein Tiefen-oder-Stencil- Format. - Wenn
depthLoadOp
auf"clear"
gesetzt ist, muss ein gültigerdepthClearValue
angegeben werden. - Wenn das Format von
view
ein kombiniertes Tiefen-oder-Stencil-Format ist, stimmendepthReadOnly
undstencilReadOnly
überein. - Wenn das Format von
view
einen Tiefenaspekt hat unddepthReadOnly
false
ist, werdendepthLoadOp
unddepthStoreOp
bereitgestellt. - Wenn das Format von
view
einen Tiefenaspekt hat unddepthReadOnly
true
ist, werdendepthLoadOp
unddepthStoreOp
nicht bereitgestellt. - Wenn das Format von
view
einen Stencilaspekt hat undstencilReadOnly
false
ist, werdenstencilLoadOp
undstencilStoreOp
bereitgestellt. - Wenn das Format von
view
einen Stencilaspekt hat undstencilReadOnly
true
ist, werdenstencilLoadOp
undstencilStoreOp
nicht bereitgestellt.
Für Zeitstempelabfragen:
Beispiele
In unserem Basis-Render-Demo werden eine Anzahl von Befehlen über einen GPUCommandEncoder
aufgezeichnet. Diese Befehle stammen vom GPURenderPassEncoder
, der über beginRenderPass()
erstellt wurde:
// …
// 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()]);
// …
Spezifikationen
Specification |
---|
WebGPU # dom-gpucommandencoder-beginrenderpass |
Browser-Kompatibilität
Siehe auch
- Die WebGPU-API