import { GpuShaderDefinition } from './gpu/contract'; /** * Make a user-defined shader findable by its `name`, so preset JSON can reference it as `type: 'Halo'`. * * Returns the definition, so it can wrap `defineShader` inline. Registering the same object * again does nothing. A different definition under a taken name replaces it (live editing, * hot reload) and notifies `onShaderRegistered` listeners. `` calls this for * you on mount; `createShader(canvas, preset, {components: [Halo]})` is the other way to * make a name resolvable without registering globally. * * @example * ```ts * import {createShader} from 'shaders/js' * import {Halo} from './halo' * * registerShader(Halo) * const shader = await createShader(canvas, {components: [{type: 'Halo', props: {bands: 6}}]}) * ``` * @see defineShader, unregisterShader, getRegisteredShader, onShaderRegistered */ export declare function registerShader>(definition: T): T; /** * Forget a user-defined shader by name. * * Does nothing for a name that was never registered. Listeners from `onShaderRegistered` are * told with a `null` definition. * * @example * ```ts * unregisterShader('Halo') * ``` * @see registerShader */ export declare function unregisterShader(name: string): void; /** * Look up a user-defined shader by name. * * Returns `undefined` for unknown names. The library's own shaders are not in this registry. * * @example * ```ts * const definition = getRegisteredShader('Halo') * ``` * @see getRegisteredShaders, registerShader */ export declare function getRegisteredShader(name: string): GpuShaderDefinition | undefined; /** * Every user-defined shader currently registered, oldest first. * * @example * ```ts * const names = getRegisteredShaders().map((d) => d.name) * ``` * @see getRegisteredShader, onShaderRegistered */ export declare function getRegisteredShaders(): GpuShaderDefinition[]; /** * Be told when a user-defined shader is registered, replaced or removed. * * The listener gets the name and the new definition, or `null` on removal. Returns a function * that unsubscribes. Useful for a component picker or a live editor that lists custom shaders. * * @example * ```ts * const stop = onShaderRegistered((name, definition) => refreshPicker()) * ``` * @see registerShader, getRegisteredShaders */ export declare function onShaderRegistered(listener: (name: string, definition: GpuShaderDefinition | null) => void): () => void; //# sourceMappingURL=customShaders.d.ts.map