Bindings
Bindings are the GPU resources that shader code accesses through declared binding points:
- uniform buffers
- storage buffers
- textures
- samplers
In luma.gl, bindings are passed by name and matched against a
ShaderLayout.
Types
Binding
type Binding =
| TextureView
| Texture
| Sampler
| Buffer
| {buffer: Buffer; offset?: number; size?: number};
This is the value type for one named binding.
Bindings
type Bindings = Record<string, Binding>;
This is the flat binding map used throughout luma.gl for compatibility and convenience.
Example:
const bindings = {
frameUniforms,
lightingUniforms,
materialUniforms,
baseColorTexture: textureView,
baseColorSampler: sampler
};
BindingsByGroup
type BindingsByGroup = Partial<Record<number, Bindings>>;
This is the grouped binding map keyed by bind-group index.
Example:
const bindGroups = {
0: {frameUniforms},
2: {lightingUniforms},
3: {
materialUniforms,
baseColorTexture: textureView,
baseColorSampler: sampler
}
};
Groups can be sparse. For example, {0: ..., 2: ..., 3: ...} is valid.
How luma.gl uses groups
The group field is declared on each binding in the
ShaderLayout.
When you pass flat bindings, luma.gl partitions them into groups using that
layout metadata. When you pass grouped bindGroups, luma.gl uses the grouping
you provide directly.
This means:
- flat
bindingsremain supported - grouped
bindGroupsare available when you want explicit bind-group structure - the shader layout is the source of truth for which group each named binding belongs to
WebGPU vs WebGL
WebGPU
WebGPU uses native bind groups, so luma.gl maps each logical group to the corresponding WebGPU bind-group slot.
WebGL
WebGL does not support bind groups natively. luma.gl emulates them logically and then applies the actual bindings through WebGL uniform blocks and texture units.
WebGL reflection does not expose group indices, so grouped behavior on WebGL depends on explicit shader-layout metadata.
Where bindings are accepted
RenderPipelinebindingsbindGroups
ComputePipelinesetBindings(bindingsOrBindGroups)