Material constructor
our renderer class object.
parameters used to create our Material.
The type of the Material.
Readonly
uuidThe universal unique id of the Material.
The Renderer used.
Options used to create this Material.
Pipeline entry used by this Material.
Array of bind groups used by this Material. This array respects a specific order:
Array of texture bind groups used by this Material.
Array of bind groups created using the uniforms and storages parameters when instancing this Material.
Array of cloned bind groups created by this Material.
Object containing all uniforms inputs handled by this Material.
Object containing all read only or read/write storages inputs handled by this Material.
Array of Texture or MediaTexture handled by this Material.
Get whether the renderer is ready, our pipeline entry and pipeline have been created and successfully compiled
Get the main texture bind group created by this Material to manage all textures related struct
Set or reset this Material renderer. Also reset the bindGroups renderer.
New Renderer or GPUCurtains instance to use.
Called when the device has been restored to recreate our samplers, textures and bind groups.
Get the complete code of a given shader including all the WGSL fragment code snippets added by the pipeline
Optional
shaderType: FullShadersType = 'full'shader to get the code from
Get the added code of a given shader, i.e. all the WGSL fragment code snippets added by the pipeline
Optional
shaderType: FullShadersType = 'vertex'shader to get the code from
Clones a BindGroup from a list of buffers Useful to create a new bind group with already created buffers, but swapped
parameters used to clone the bind group
Optional
bindGroup?: AllowedBindGroupsthe BindGroup to clone
Optional
bindings?: BindGroupBindingElement[]our input binding buffers
Optional
keepLayout?: booleanwhether we should keep original bind group layout or not
Get a corresponding BindGroup or TextureBindGroup from one of its binding name/key
the binding name/key to look for
Destroy a bind group, only if it is not used by another object
bind group to eventually destroy
Look for a binding by name in all input bindings
the binding name or key
Look for a buffer binding by name in all input bindings
the binding name or key
Force setting a given buffer binding shouldUpdate flag to true
to update it at next render
Optional
bufferBindingName: stringthe buffer binding name
Optional
bindingName: stringthe binding name
Prepare our textures array and set the TextureBindGroup
Add a texture to our array, and add it to the textures bind group only if used in the shaders (avoid binding useless data)
texture to add
Destroy a MediaTexture or Texture, only if it is not used by another object or cached.
MediaTexture or Texture to eventually destroy
Map a Buffer's GPU buffer and put a copy of the data into a Float32Array
Map the content of a BufferBinding GPU buffer and put a copy of the data into a Float32Array
The name of the input bindings from which to map the GPU buffer
Map the content of a specific buffer element belonging to a BufferBinding GPU buffer and put a copy of the data into a Float32Array
parameters used to get the result
The name of the input bindings from which to map the GPU buffer
The name of the buffer element from which to extract the data afterwards
Called before rendering the Material. First, check if we need to create our bind groups or pipeline. Finally updates all the bind groups.
Set the current pipeline
current pass encoder
Use the renderer pipelineManager to only set the bind groups that are not already set.
current pass encoder
Render the material if it is ready: Set the current pipeline and set the bind groups
current pass encoder
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.
Bind groups
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.