UNPKG

@lightningtv/renderer

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