Computation
The Computation
class is a high-level class in the luma.gl API. It brings together all GPU functionality needed to run GPU compute shaders, in a single, easy-to-use interface.
Computation
manages the following responsibilities:
- bindings these can reference textures and uniform buffers
- shader module injection
- debugging - Detailed debug logging of draw calls
The Computation
class integrates with
- The
@luma.gl/shadertools
shader module system: seeShader Assembly
.
Usage
import {Computation} from `@luma.gl/engine`;
One of the simplest way to provide attribute data is by using a Geometry object.
Create model object by passing shaders, uniforms, geometry and render it by passing updated uniforms.
import {Computation} from `@luma.gl/engine`;
// construct the model.
const model = new Computation(device, {
source: COMPUTE_SHADER,
bindings: {
uSampler: texture
},
})
Provide attribute data using Buffer
When using Buffer
objects, data remains on GPU and same Buffer
object can be shared between multiple models.
// construct the model.
const model = new Computation(device, {
source: COMPUTE_SHADER,
attributes: {
attributeName1: bufferObject,
attributeName2: device.createBuffer(new Float32Array(...))
},
uniforms: {uSampler: texture},
})
On each frame, call the model.draw()
function after updating any uniforms (typically matrices).
model.setUniforms({
uPMatrix: currentProjectionMatrix,
uMVMatrix: current ComputationViewMatrix
});
model.draw();
Debug shader source (even when shader successful)
// construct the model.
const model = new Computation(device, {
source: COMPUTE_SHADER,
debugShaders: 'always'
});
Types
ComputationProps
Property | Type | Description |
---|---|---|
source | Shader | string | A vertex shader object, or source as a string. |
modules | shader modules to be applied (shadertools). | |
pipelineFactory? | PipelineFactory to use for program creation and caching. | |
debugShaders? | 'error' | 'never' | 'warnings' | 'always' | Specify in what triggers the display shader compilation log (default: 'error' ). |
ComputationProps
also include ComputePipelineProps
, which are passed through to the ComputePipeline
constructor, e.g:
Property | Type | Description |
---|---|---|
layout | ShaderLayout | Describes how shader attributes and bindings are laid out. |
bindings? | Record<string, any> |
Fields
pipeline: ComputePipeline
The model's ComputePipeline
instance
Methods
constructor(device: Device, props: ComputationProps)
The constructor for the Computation class. Use this to create a new Computation.
destroy(): void
Free GPU resources associated with this model immediately, instead of waiting for garbage collection.
dispatch(pass: ComputePass, x, y, z)
Renders the model with provided uniforms, attributes and samplers
computation.dispatch(computePass, 1);