GPURenderPassEncoder: Methode setBindGroup()
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 Methode setBindGroup() des Interfaces GPURenderPassEncoder legt die GPUBindGroup fest, die für nachfolgende Renderbefehle an einem bestimmten Index verwendet wird.
Syntax
setBindGroup(index, bindGroup)
setBindGroup(index, bindGroup, dynamicOffsets)
setBindGroup(index, bindGroup, dynamicOffsets, dynamicOffsetsStart,
dynamicOffsetsLength)
Parameter
index-
Der Index, an dem die Bind Group festgelegt wird. Er entspricht dem Indexwert
ndes zugehörigen Attributs@group(n)im Shader-Code (GPUShaderModule), der in der zugehörigen Pipeline verwendet wird. bindGroup-
Die
GPUBindGroup, die für nachfolgende Renderbefehle verwendet wird, odernull. Beinullwird eine zuvor im angegebenen Slot festgelegte Bind Group entfernt. dynamicOffsetsOptional-
Ein Wert, der für jeden Eintrag in
bindGroup, für denhasDynamicOffset: truegesetzt ist, den Offset in Byte angibt (d.h. im Deskriptor des Aufrufs vonGPUDevice.createBindGroupLayout(), mit dem das ObjektGPUBindGroupLayouterstellt wurde, auf dembindGroupbasiert). Dieser Wert kann Folgendes sein:- Ein Array von Zahlen, die die verschiedenen Offsets angeben.
- Ein
Uint32Arraymit Zahlen, die die Offsets angeben.
Wenn für dynamicOffsets ein Uint32Array angegeben wird, sind zusätzlich beide folgenden Parameter erforderlich:
dynamicOffsetsStart-
Eine Zahl, die den Offset in Array-Elementen innerhalb von
dynamicOffsetsDataangibt, ab dem die Daten für die dynamischen Offsets beginnen. dynamicOffsetsLength-
Eine Zahl, die angibt, wie viele Werte für dynamische Offsets aus
dynamicOffsetsDatagelesen werden.
Rückgabewert
Keiner (undefined).
Ausnahmen
Wenn bei einem Aufruf von setBindGroup() für dynamicOffsets ein Uint32Array verwendet wird, löst der Aufruf in folgenden Fällen einen RangeError aus:
dynamicOffsetsStartist kleiner als 0.dynamicOffsetsStart+dynamicOffsetsLengthist größer alsdynamicOffsets.length.
Validierung
Beim Aufruf von setBindGroup() müssen die folgenden Bedingungen erfüllt sein. Andernfalls wird ein GPUValidationError erzeugt und der GPURenderPassEncoder wird ungültig:
indexist kleiner oder gleich dem LimitmaxBindGroupsdesGPUDevice.dynamicOffsets.lengthentspricht der Anzahl der Einträge inbindGroup, für diehasDynamicOffset: truegesetzt ist.- Bei Einträgen in
bindGroup, deren gebundenerbufferdentype"uniform"hat (sieheGPUDevice.createBindGroupLayout()), ist jede Zahl indynamicOffsetsein Vielfaches des LimitsminUniformBufferOffsetAlignmentdesGPUDevice. - Bei Einträgen in
bindGroup, deren gebundenerbufferdentype"storage"oder"read-only-storage"hat (sieheGPUDevice.createBindGroupLayout()), ist jede Zahl indynamicOffsetsein Vielfaches des LimitsminStorageBufferOffsetAlignmentdesGPUDevice. - Für jeden Eintrag in
bindGroupist die Summe aus demoffsetdes gebundenenbuffer, demminBindingSizedes entsprechenden Layout-Eintrags und dem entsprechenden indynamicOffsetsangegebenen dynamischen Offset kleiner oder gleich dersizedes gebundenenbuffer.
Beispiele
>Bind Group festlegen
Im Beispiel „Textured Cube“ der WebGPU Samples wird setBindGroup() verwendet, um uniformBindGroup an Indexposition 0 zu binden. Den vollständigen Zusammenhang finden Sie im Beispiel.
// …
const commandEncoder = device.createCommandEncoder();
const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);
passEncoder.setPipeline(pipeline);
passEncoder.setBindGroup(0, uniformBindGroup);
passEncoder.setVertexBuffer(0, verticesBuffer);
passEncoder.draw(cubeVertexCount, 1, 0, 0);
passEncoder.end();
device.queue.submit([commandEncoder.finish()]);
// …
Hinweis:
Weitere Beispiele für die Verwendung von setBindGroup() finden Sie in den anderen WebGPU Samples.
Bind Group entfernen
// Set bind group in slot 0
passEncoder.setBindGroup(0, uniformBindGroup);
// Later, unset bind group in slot 0
passEncoder.setBindGroup(0, null);
Spezifikationen
| Spezifikation |
|---|
| WebGPU> # programmable-passes-bind-groups> |
Browser-Kompatibilität
Siehe auch
- Die WebGPU API