/** * ShaderGraph.ts * * Node-based shader composition: connects material properties * through a DAG of shader nodes, generates uniform declarations, * and outputs combined shader code. * * @module rendering */ export type ShaderDataType = 'float' | 'vec2' | 'vec3' | 'vec4' | 'mat4' | 'sampler2D' | 'bool' | 'int'; export interface ShaderPort { name: string; type: ShaderDataType; defaultValue?: number | number[]; } export interface ShaderNodeDef { type: string; inputs: ShaderPort[]; outputs: ShaderPort[]; code: string; } export interface ShaderPortRef { id: string; name: string; direction: 'in' | 'out'; type: ShaderDataType; } export interface ShaderNode { id: string; type: string; position: { x: number; y: number; }; overrides: Record; category?: string; inputs?: ShaderPort[]; outputs?: ShaderPort[]; ports?: ShaderPortRef[]; properties?: Record; } export interface ShaderConnection { id: string; fromNode: string; fromPort: string; toNode: string; toPort: string; } export interface ShaderUniform { name: string; type: ShaderDataType; value: number | number[]; } export interface CompiledShader { vertexCode: string; fragmentCode: string; uniforms: ShaderUniform[]; nodeCount: number; connectionCount: number; } export declare const SHADER_NODES: Record; export declare class ShaderGraph { readonly id: string; name: string; nodes: Map; connections: ShaderConnection[]; version: number; readonly createdAt: number; updatedAt: number; private nodeDefs; constructor(id?: string, name?: string); addNode(type: string, x?: number, y?: number, overrides?: Record): ShaderNode | null; createNode(type: string, position: { x: number; y: number; }): ShaderNode | null; /** Add a pre-built ShaderNode directly (used by undo/redo systems). */ addCustomNode(node: ShaderNode): void; removeNode(id: string): boolean; getNode(id: string): ShaderNode | undefined; getNodes(): ShaderNode[]; getNodeCount(): number; setNodePosition(id: string, x: number, y: number): boolean; setNodeProperty(id: string, key: string, value: unknown): boolean; getNodeProperty(id: string, key: string): unknown; connect(fromNode: string, fromPort: string, toNode: string, toPort: string): ShaderConnection | null; /** Check if adding an edge from→to would create a cycle via DFS. */ private _wouldCreateCycle; disconnectPort(nodeId: string, portId: string): void; getConnections(): ShaderConnection[]; getNodeConnections(nodeId: string): ShaderConnection[]; toJSON(): { name: string; id: string; nodes: [string, ShaderNode][]; connections: ShaderConnection[]; }; static fromJSON(json: { name: string; id?: string; nodes: [string, ShaderNode][]; connections: ShaderConnection[]; }): ShaderGraph; serialize(): string; static deserialize(str: string): ShaderGraph; compile(): CompiledShader; private generateVertexShader; private topoSort; } //# sourceMappingURL=ShaderGraph.d.ts.map