import { CoreShaderNode, type CoreShaderType } from './renderers/CoreShaderNode.js'; import type { CoreShaderProgram } from './renderers/CoreShaderProgram.js'; import type { Stage } from './Stage.js'; export type ShaderMap = Record; export type ExtractProps = { [K in keyof Props]: Props[K] extends { default: infer D; } ? D : Props[K]; }; export type PartialShaderProps = Partial>; export type ExtractShaderProps = ExtractProps; export type OptionalShaderProps = PartialShaderProps; export declare class CoreShaderManager { readonly stage: Stage; protected shTypes: ShaderMap; protected shCache: Map; /** * valuesCache is used to store calculations that can be shared between shader nodes. */ protected valuesCache: Map>; protected valuesCacheUsage: Map; protected attachedShader: CoreShaderProgram | null; constructor(stage: Stage); registerShaderType(name: string, shType: CoreShaderType): void; /** * Loads a shader (if not already loaded) and returns a controller for it. * * @param shType * @param props * @returns */ createShader(name: Name, props?: Record): CoreShaderNode | null; mutateShaderValueUsage(key: string, mutation: number): void; getShaderValues(key: string): Record | undefined; setShaderValues(key: string, values: Record): void; cleanup(): void; useShader(shader: CoreShaderProgram): void; }