GPUDevice: createRenderBundleEncoder() Methode - Web-APIs | MDN
Syntax
js
createRenderBundleEncoder(descriptor)
Parameter
descriptor-
Ein Objekt, das die folgenden Eigenschaften enthält:
colorFormats-
Ein Array von aufgezählten Werten, das die erwarteten Farbformate für Renderziele angibt. Für mögliche Werte siehe die
GPUTextureFormatDefinition in der Spezifikation. depthReadOnlyOptional-
Ein boolescher Wert. Falls
true, wird angegeben, dass das Ausführen eines durch denGPURenderBundleEncodererstelltenGPURenderBundlenicht die Tiefenkomponente desdepthStencilFormatbeim Ausführen verändert. Falls weggelassen, istdepthReadOnlystandardmäßigfalse. depthStencilFormatOptional-
Ein aufgezählter Wert, der das erwartete Tiefen- oder Schablonenformat für Renderziele angibt. Für mögliche Werte siehe den Abschnitt Depth-stencil formats der Spezifikation.
labelOptional-
Eine Zeichenkette, die ein Label bereitstellt, das zur Identifizierung des Objekts verwendet werden kann, zum Beispiel in
GPUErrorMeldungen oder Konsolenwarnungen. sampleCountOptional-
Eine Zahl, die die erwartete Abtastanzahl für Renderziele repräsentiert.
stencilReadOnlyOptional-
Ein 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
Ein GPURenderBundleEncoder Objektinstanz.
Beispiele
Im WebGPU Samples Animometer Beispiel werden zahlreiche ähnliche Operationen gleichzeitig auf vielen verschiedenen Objekten durchgeführt. Ein Befehlssatz wird mit der folgenden Funktion kodiert:
js
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 ein GPURenderBundleEncoder mit createRenderBundleEncoder() erstellt, die Funktion aufgerufen, und der Befehlssatz in ein GPURenderBundle mit GPURenderBundleEncoder.finish() aufgezeichnet:
js
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.
js
// …
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
| Spezifikation |
|---|
| WebGPU # dom-gpudevice-createrenderbundleencoder |
Browser-Kompatibilität
Siehe auch
- Die WebGPU API
Help improve MDN
Erfahren Sie, wie Sie beitragen können Diese Seite wurde automatisch aus dem Englischen übersetzt.