@lightningtv/renderer
Version:
Lightning 3 Renderer
60 lines (59 loc) • 2.55 kB
TypeScript
import { type CoreNode } from '../CoreNode.js';
import type { Stage } from '../Stage.js';
export interface AdvShaderProp<T = any, Props = Record<string, unknown>> {
/**
* default value
*/
default: T;
resolve?: (this: AdvShaderProp<T, Props>, value: T, props: Props) => T;
transform?: (start: T, end: T, progress: number) => T;
}
export type AdvancedShaderProp<T = any, Props = Record<string, unknown>> = (AdvShaderProp<T, Props> & {
set: (value: T, props: Props) => void;
get: (props: Props) => T;
}) | (AdvShaderProp<T, Props> & {
set?: never;
get?: never;
});
export type ShaderProp<T, Props> = T | AdvancedShaderProp<T, Props>;
export type ShaderProps<Props> = {
[K in keyof Props]: ShaderProp<Props[K], Props>;
};
export declare function isAdvancedShaderProp(obj: any): obj is AdvancedShaderProp;
export declare function resolveShaderProps(props: Record<string, unknown>, propsConfig: ShaderProps<Record<string, unknown>>): void;
/**
* CoreShaderType is a template for ShaderTypes the renderer.
* You could view a ShaderType as a configuration object that contains methods,
* and values that you can use to alter the way a node is drawn by the Renderer.
*/
export interface CoreShaderType<Props extends object = Record<string, unknown>> {
/**
* Values you use to draw the Shader
*/
props?: ShaderProps<Props>;
/**
* used for making a cache key to check for reusability, currently only used for webgl ShaderTypes but might be needed for other types of renderer
*/
getCacheMarkers?: (props: Props) => string;
}
/**
* CoreShaderNode is a base class that manages the shader prop values.
* When a prop is being updated the CoreShaderNode will notify either the associated CoreNode,
* or the Stage that there has been a change and a new render of the scene.
*/
export declare class CoreShaderNode<Props extends object = Record<string, unknown>> {
readonly shaderKey: string;
readonly stage: Stage;
readonly shaderType: CoreShaderType<Props>;
protected propsConfig: ShaderProps<Props> | undefined;
protected resolvedProps: Props | undefined;
protected definedProps: Props | undefined;
protected node: CoreNode | null;
update: (() => void) | undefined;
constructor(shaderKey: string, type: CoreShaderType<Props>, stage: Stage, props?: Props);
private defineProps;
attachNode(node: CoreNode): void;
getResolvedProps(): Props | undefined;
get props(): Props | undefined;
set props(props: Props | undefined);
}