GPURenderPassEncoder: setBindGroup()-Methode
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 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