from pipeline.getBindGroupLayout(0); the layout is derived automatically from the shader because loadShader uses layout: "auto"
input and
intermediate buffers in binding order; a plain GPUBuffer binds the whole buffer, or pass
{buffer, offset, size} to bind a sub-range — e.g. many small per-call param structs packed
into one shared buffer instead of allocating a separate tiny buffer per call
OptionalstartBinding: number = 0
binding index of buffers[0]; nonzero only when a shader's
own bindings don't start at 0 — e.g. a module built by concatenating two .wgsl files where
the second file's bindings continue after the first's own bindings (if any)
Creates a
GPUBindGroupby mapping each buffer to sequential binding indices (startBinding, startBinding + 1, …). The order ofbuffersmust match the@bindings declared in the shader.