@lightningtv/renderer
Version:
Lightning 3 Renderer
39 lines (38 loc) • 1.78 kB
TypeScript
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;
}