ComputeMaterial constructor
our Renderer class object
parameters used to create our ComputeMaterial
Compute pipeline entry used by this ComputeMaterial
Options used to create this ComputeMaterial
Optional
dispatchDefault work group dispatch size to use with this ComputeMaterial
function assigned to the useCustomRender callback
function assigned to the useCustomRender callback
The type of the Material
The universal unique id of the Material
The Renderer used
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 DOMTexture 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
When all bind groups are created, add them to the ComputePipelineEntry
Compile the ComputePipelineEntry
Check if all bind groups are ready, create them if needed, set ComputePipelineEntry bind group buffers and compile the pipeline
Get the complete code of a given shader including all the WGSL fragment code snippets added by the pipeline
Optional
shaderType: FullShadersType = 'compute'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 = 'compute'shader to get the code from
If a custom render function has been defined instead of the default one, register the callback
callback to run instead of the default render behaviour, which is to set the bind groups and dispatch the work groups based on the default dispatch size. This is where you will have to set all the bind groups and dispatch the workgroups by yourself.
Get the result GPU buffer content by binding and buffer element names
parameters used to get the result
Optional
bindingbinding name from which to get the result
Optional
bufferoptional buffer element (i.e. struct member) name if the result needs to be restrained to only one element
Called when the device has been lost to prepare everything for restoration. Basically set all the GPUBuffer to null so they will be reset next time we try to render
Called when the device has been restored to recreate our samplers, textures and bind groups.
Process all BindGroup struct and add them to the corresponding objects based on their binding types. Also store them in a inputsBindings array to facilitate further access to struct.
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
bindthe BindGroup to clone
Optional
bindings?: BindGroupBindingElement[]our input binding buffers
Optional
keepwhether 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 DOMTexture or Texture, only if it is not used by another object or cached.
DOMTexture or Texture to eventually destroy
Add a sampler to our array, and add it to the textures bind group only if used in the shaders (avoid binding useless data)
sampler to add
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 Then render the domTextures Finally updates all the bind groups
Use the renderer pipelineManager to only set the bind groups that are not already set.
current pass encoder
Create a Material specifically built to run computations on the GPU. Internally used by ComputePass.
Compute pipeline
A ComputeMaterial automatically creates a ComputePipelineEntry. Once all the BindGroup have been created, they are sent with the compute shader code to the ComputePipelineEntry, which is in turns responsible for creating the GPUComputePipeline.
After the GPUComputePipeline has been successfully compiled, the ComputeMaterial is considered to be ready and it can start running the compute shader computations.