gpu-curtains
Version:
gpu-curtains is a 3D WebGPU rendering engine. It can be used as a standalone 3D engine, but also includes extra classes focused on mapping 3d objects to DOM elements; It allows users to synchronize values such as position, sizing, or scale between them.
90 lines (89 loc) • 4.54 kB
TypeScript
import { ComputePass, ComputePassOptions, ComputePassParams } from '../../core/computePasses/ComputePass';
import { Renderer } from '../../core/renderers/utils';
import { ShaderPass, ShaderPassParams } from '../../core/renderPasses/ShaderPass';
import { Sampler } from '../../core/samplers/Sampler';
import { Texture, TextureParams } from '../../core/textures/Texture';
import type { GPUCurtains } from '../../curtains/GPUCurtains';
/** Define the {@link Texture | storage texture} parameters used in the compute shader. */
export interface ComputeStorageTextureParams {
/** Name of the {@link Texture | storage texture} used in the compute shader. Default to `storageRenderTexture`. */
name?: TextureParams['name'];
/** Format of the {@link Texture | storage texture} used in the compute shader, must be compatible with storage textures. Default to `rgba8unorm`. */
format?: TextureParams['format'];
}
/** Define the specific additional options to use with a {@link ComputeShaderPass}. */
export interface ComputeShaderPassSpecificOptions {
/** Options used to create the {@link Texture | storage texture} used in the compute shader. */
storageTextureParams: ComputeStorageTextureParams;
/** Workgroup size of the compute shader to use. Divided internally by the {@link Texture | storage texture} `[width, height]`. Default to `[16, 16]`. */
textureDispatchSize: number | number[];
/** Optional {@link Sampler} to use in the {@link ShaderPass} to sample the result. */
shaderPassSampler: Sampler;
}
/** Define the parameters used to create a {@link ComputeShaderPass}. */
export interface ComputeShaderPassParams extends Omit<ComputePassParams, 'dispatchSize' | 'autoRender' | 'renderOrder' | 'active'>, Omit<ShaderPassParams, 'label' | 'textures' | 'shaders' | 'samplers' | 'texturesOptions'>, Partial<ComputeShaderPassSpecificOptions> {
}
/** Define the {@link ComputeShaderPass} options */
export interface ComputeShaderPassOptions extends ComputePassOptions, ComputeShaderPassSpecificOptions {
}
/**
* A special class used to leverage {@link ComputePass} shaders and {@link ShaderPass} for post processing effects.
*
* Allows to write post processing effects to a storage texture using a compute shader, which can be faster than regular {@link ShaderPass} in some cases.
*
* @example
* ```javascript
* // set our main GPUCurtains instance
* const gpuCurtains = new GPUCurtains({
* container: '#canvas' // selector of our WebGPU canvas container
* })
*
* // set the GPU device
* // note this is asynchronous
* await gpuCurtains.setDevice()
*
* const computeShaderPass = new ComputeShaderPass(gpuCurtains, {
* label: 'My compute shader pass',
* shaders: {
* compute: {
* code: computeShaderPassCode, // assume it is a valid WGSL compute shader
* },
* },
* textureDispatchSize: [16, 16], // divided by the render texture [width, height] internally
* })
* ```
*/
export declare class ComputeShaderPass extends ComputePass {
/** Associated {@link ShaderPass} that just displays the result of the {@link ComputeShaderPass} compute shader. */
shaderPass: ShaderPass;
/** {@link Texture | Storage texture} to write onto by the {@link ComputeShaderPass} compute shader. */
storageTexture: Texture;
/** The same texture as {@link storageTexture} but with a different binding type, used to render the result in the {@link shaderPass}. */
renderTexture: Texture;
/** Workgroup size of the compute shader. Divided internally by the {@link storageTexture} `[width, height]`. */
textureDispatchSize: number[];
/** Options used to create this {@link ComputeShaderPass}. */
options: ComputeShaderPassOptions;
/**
* ComputeShaderPass constructor
* @param renderer - {@link Renderer} class object or {@link GPUCurtains} class object used to create this {@link ComputeShaderPass}.
* @param parameters - {@link ComputeShaderPassParams | parameters} used to create our {@link ComputeShaderPass}.
*/
constructor(renderer: Renderer | GPUCurtains, parameters?: ComputeShaderPassParams);
/**
* Get whether the {@link ComputePass} and {@link ShaderPass} should run.
*/
get visible(): boolean;
/**
* Set whether the {@link ComputePass} and {@link ShaderPass} should run.
*/
set visible(value: boolean);
/**
* Update the dispatch size and resize.
*/
resize(): void;
/**
* Destroy the {@link ComputeShaderPass}.
*/
destroy(): void;
}