GPURenderPassEncoder: setBindGroup()-Methode
Eingeschränkt verfügbar
Diese Funktion ist nicht Baseline, da sie in einigen der am weitesten verbreiteten Browser nicht funktioniert.
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 setBindGroup()-Methode der
GPURenderPassEncoder-Schnittstelle legt die GPUBindGroup fest, die für nachfolgende Render-Befehle bei einem gegebenen Index verwendet wird.
Syntax
setBindGroup(index, bindGroup)
setBindGroup(index, bindGroup, dynamicOffsets)
setBindGroup(index, bindGroup, dynamicOffsets, dynamicOffsetsStart,
dynamicOffsetsLength)
Parameter
index-
Der Index, bei dem die Bindgruppe festgelegt wird. Dieser entspricht dem
n-Indexwert des entsprechenden@group(n)-Attributs im Shader-Code (GPUShaderModule), der in der zugehörigen Pipeline verwendet wird. bindGroup-
Die zu verwendende
GPUBindGroupfür nachfolgende Render-Befehle odernull, wobei jede zuvor festgelegte Bindgruppe im gegebenen Slot aufgehoben wird. dynamicOffsetsOptional-
Ein Wert, der den Offset in Bytes für jeden Eintrag in
bindGroupangibt, bei demhasDynamicOffset: truegesetzt ist (d.h. im Deskriptor des Aufrufs vonGPUDevice.createBindGroupLayout(), der dasGPUBindGroupLayout-Objekt erstellt hat, auf dem diebindGroupbasiert). Dieser Wert kann sein:- Ein Array von Zahlen, das die verschiedenen Offsets angibt.
- Ein
Uint32Array, das Zahlen enthält, die die Offsets angeben.
Wenn ein Uint32Array-Wert für dynamicOffsets angegeben ist, sind beide der folgenden Parameter ebenfalls erforderlich:
dynamicOffsetsStart-
Eine Zahl, die den Offset in Array-Elementen in
dynamicOffsetsDataangibt, wo die dynamischen Offset-Daten beginnen. dynamicOffsetsLength-
Eine Zahl, die die Anzahl der dynamischen Offset-Werte angibt, die in
dynamicOffsetsDatagelesen werden sollen.
Rückgabewert
Keiner (undefined).
Ausnahmen
Bei setBindGroup()-Aufrufen, die einen Uint32Array-Wert für dynamicOffsets verwenden, wird der Aufruf mit einem RangeError-DOMException fehlschlagen, wenn:
dynamicOffsetsStartkleiner als 0 ist.dynamicOffsetsStart+dynamicOffsetsLengthgrößer alsdynamicOffsets.lengthist.
Validierung
Die folgenden Kriterien müssen erfüllt sein, wenn setBindGroup() aufgerufen wird, andernfalls wird ein GPUValidationError erzeugt und der GPURenderPassEncoder wird ungültig:
indexist kleiner oder gleich demmaxBindGroups- Limit desGPUDevice.dynamicOffsets.lengthentspricht der Anzahl der Einträge inbindGroupmithasDynamicOffset: truegesetzt.- Bei
bindGroup-Einträgen, bei denen der gebundenebuffer-type"uniform"ist (sieheGPUDevice.createBindGroupLayout()), ist jede Zahl indynamicOffsetsein Vielfaches desminUniformBufferOffsetAlignment- Limits desGPUDevice. - Bei
bindGroup-Einträgen, bei denen der gebundenebuffer-type"storage"oder"read-only-storage"ist (sieheGPUDevice.createBindGroupLayout()), ist jede Zahl indynamicOffsetsein Vielfaches desminStorageBufferOffsetAlignment- Limits desGPUDevice. - Für jeden
bindGroup-Eintrag ist derbuffer-offsetdes gebundenen Buffers, plus dieminBindingSizedes entsprechenden Layout-Eintrags, plus der entsprechende dynamische Offset, der indynamicOffsetsangegeben ist, kleiner oder gleich dersizedes gebundenen Buffers.
Beispiele
>Bindgruppe festlegen
Im WebGPU-Beispiel "Texturwürfel" (Textured Cube example) wird setBindGroup() verwendet, um die uniformBindGroup an der Indexposition 0 zu binden. Schauen Sie sich das Beispiel für den kompletten Kontext an.
// …
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:
Untersuchen Sie die anderen WebGPU-Beispiele, um weitere Beispiele für die Verwendung von setBindGroup() zu finden.
Bindgruppe aufheben
// 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