123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- import type { Nullable } from "../types";
- import { Observable } from "../Misc/observable";
- import type { IComputePipelineContext } from "./IComputePipelineContext";
- import type { AbstractEngine } from "../Engines/abstractEngine";
- /**
- * Defines the route to the shader code. The priority is as follows:
- * * object: `{ computeSource: "compute shader code string"}` for directly passing the shader code
- * * object: `{ computeElement: "vertexShaderCode" }`, used with shader code in script tags
- * * object: `{ compute: "custom" }`, used with `Effect.ShadersStore["customVertexShader"]` and `Effect.ShadersStore["customFragmentShader"]`
- * * string: `"./COMMON_NAME"`, used with external files COMMON_NAME.vertex.fx and COMMON_NAME.fragment.fx in index.html folder.
- */
- export type IComputeShaderPath = {
- /**
- * Directly pass the shader code
- */
- computeSource?: string;
- /**
- * Used with Effect.ShadersStore. If the `vertex` is set to `"custom`, then
- * Babylon.js will read from Effect.ShadersStore["customVertexShader"]
- */
- compute?: string;
- /**
- * Used with shader code in script tags
- */
- computeElement?: string;
- };
- /**
- * Options to be used when creating a compute effect.
- */
- export interface IComputeEffectCreationOptions {
- /**
- * Define statements that will be set in the shader.
- */
- defines: any;
- /**
- * The name of the entry point in the shader source (default: "main")
- */
- entryPoint?: string;
- /**
- * Callback that will be called when the shader is compiled.
- */
- onCompiled: Nullable<(effect: ComputeEffect) => void>;
- /**
- * Callback that will be called if an error occurs during shader compilation.
- */
- onError: Nullable<(effect: ComputeEffect, errors: string) => void>;
- /**
- * If provided, will be called with the shader code so that this code can be updated before it is compiled by the GPU
- */
- processFinalCode?: Nullable<(code: string) => string>;
- }
- /**
- * Effect wrapping a compute shader and let execute (dispatch) the shader
- */
- export declare class ComputeEffect {
- private static _UniqueIdSeed;
- /**
- * Enable logging of the shader code when a compilation error occurs
- */
- static LogShaderCodeOnCompilationError: boolean;
- /**
- * Name of the effect.
- */
- name: IComputeShaderPath | string;
- /**
- * String container all the define statements that should be set on the shader.
- */
- defines: string;
- /**
- * Callback that will be called when the shader is compiled.
- */
- onCompiled: Nullable<(effect: ComputeEffect) => void>;
- /**
- * Callback that will be called if an error occurs during shader compilation.
- */
- onError: Nullable<(effect: ComputeEffect, errors: string) => void>;
- /**
- * Unique ID of the effect.
- */
- uniqueId: number;
- /**
- * Observable that will be called when the shader is compiled.
- * It is recommended to use executeWhenCompile() or to make sure that scene.isReady() is called to get this observable raised.
- */
- onCompileObservable: Observable<ComputeEffect>;
- /**
- * Observable that will be called if an error occurs during shader compilation.
- */
- onErrorObservable: Observable<ComputeEffect>;
- /**
- * Observable that will be called when effect is bound.
- */
- onBindObservable: Observable<ComputeEffect>;
- /**
- * @internal
- * Specifies if the effect was previously ready
- */
- _wasPreviouslyReady: boolean;
- private _engine;
- private _isReady;
- private _compilationError;
- /** @internal */
- _key: string;
- private _computeSourceCodeOverride;
- /** @internal */
- _pipelineContext: Nullable<IComputePipelineContext>;
- /** @internal */
- _computeSourceCode: string;
- private _rawComputeSourceCode;
- private _entryPoint;
- private _shaderLanguage;
- private _shaderStore;
- private _shaderRepository;
- private _includeShaderStore;
- /**
- * Creates a compute effect that can be used to execute a compute shader
- * @param baseName Name of the effect
- * @param options Set of all options to create the effect
- * @param engine The engine the effect is created for
- * @param key Effect Key identifying uniquely compiled shader variants
- */
- constructor(baseName: IComputeShaderPath | string, options: IComputeEffectCreationOptions, engine: AbstractEngine, key?: string);
- private _useFinalCode;
- /**
- * Unique key for this effect
- */
- get key(): string;
- /**
- * If the effect has been compiled and prepared.
- * @returns if the effect is compiled and prepared.
- */
- isReady(): boolean;
- private _isReadyInternal;
- /**
- * The engine the effect was initialized with.
- * @returns the engine.
- */
- getEngine(): AbstractEngine;
- /**
- * The pipeline context for this effect
- * @returns the associated pipeline context
- */
- getPipelineContext(): Nullable<IComputePipelineContext>;
- /**
- * The error from the last compilation.
- * @returns the error string.
- */
- getCompilationError(): string;
- /**
- * Adds a callback to the onCompiled observable and call the callback immediately if already ready.
- * @param func The callback to be used.
- */
- executeWhenCompiled(func: (effect: ComputeEffect) => void): void;
- private _checkIsReady;
- private _loadShader;
- /**
- * Gets the compute shader source code of this effect
- */
- get computeSourceCode(): string;
- /**
- * Gets the compute shader source code before it has been processed by the preprocessor
- */
- get rawComputeSourceCode(): string;
- /**
- * Prepares the effect
- * @internal
- */
- _prepareEffect(): void;
- private _processCompilationErrors;
- /**
- * Release all associated resources.
- **/
- dispose(): void;
- /**
- * This function will add a new compute shader to the shader store
- * @param name the name of the shader
- * @param computeShader compute shader content
- */
- static RegisterShader(name: string, computeShader: string): void;
- }
|