Used as a base to create a Material.
The purpose of Material is to create and update the bind groups and their bindings (GPU buffers, textures and samplers), create a PipelineEntry and use them to render.

A Material automatically creates a TextureBindGroup, but it is actually added to the active bind groups array only if necessary, which means if your shaders use a GPUSampler, a GPUTexture or a GPUExternalTexture.

Another BindGroup will be created if you pass any uniforms or storages parameters.

Finally, you can also pass already created BindGroup to a Material via the bindGroups parameter.


Note that this class is not intended to be used as is, but as a base for ComputeMaterial and RenderMaterial classes.

Hierarchy (View Summary)

Constructors

Properties

type: string

The type of the Material.

uuid: string

The universal unique id of the Material.

renderer: Renderer

The Renderer used.

Options used to create this Material.

pipelineEntry: AllowedPipelineEntries

Pipeline entry used by this Material.

bindGroups: AllowedBindGroups[]

Array of bind groups used by this Material. This array respects a specific order:

  1. The textures bind groups.
  2. The bind group created using uniforms and storages parameters if any.
  3. Additional bind groups parameters if any.
texturesBindGroups: TextureBindGroup[]

Array of texture bind groups used by this Material.

inputsBindGroups: BindGroup[]

Array of bind groups created using the uniforms and storages parameters when instancing this Material.

clonedBindGroups: AllowedBindGroups[]

Array of cloned bind groups created by this Material.

uniforms: Record<string, Record<string, BufferBindingInput>>

Object containing all uniforms inputs handled by this Material.

storages: Record<string, Record<string, BufferBindingInput>>

Object containing all read only or read/write storages inputs handled by this Material.

inputsBindings: Map<string, BindGroupBindingElement>

Map of bindings created using the uniforms and storages parameters when instancing this Material.

textures: MaterialTexture[]

Array of Texture or MediaTexture handled by this Material.

samplers: Sampler[]

Array of Sampler handled by this Material.

Accessors

  • get ready(): boolean
  • Get whether the renderer is ready, our pipeline entry and pipeline have been created and successfully compiled

    Returns boolean

Methods

  • Get the complete code of a given shader including all the WGSL fragment code snippets added by the pipeline

    Parameters

    Returns string

    • The corresponding shader code
  • Get the added code of a given shader, i.e. all the WGSL fragment code snippets added by the pipeline

    Parameters

    Returns string

    • The corresponding shader code
  • Force setting a given buffer binding shouldUpdate flag to true to update it at next render

    Parameters

    • OptionalbufferBindingName: string

      the buffer binding name

    • OptionalbindingName: string

      the binding name

    Returns void

  • Prepare our samplers array and always add a default sampler if not already passed as parameter

    Returns void

  • Add a sampler to our array, and add it to the textures bind group only if used in the shaders (avoid binding useless data)

    Parameters

    Returns void