import { ProxiedTuple, ShaderCallNodeInternal, ShaderNodeFn, Struct } from 'three/src/nodes/TSL.js'; import { NodeBuilder, Texture3DNode, TextureNode } from 'three/webgpu'; import { Node, NodeType } from './node'; type FnLayoutType = NodeType | Struct | 'texture' | 'texture3D'; export interface FnLayoutInput { name: string; type: T; } export interface FnLayout { typeOnly?: boolean; name: string; type: T; inputs?: Inputs; } type InferNodeObject = T extends NodeType ? Node : T extends Struct ? ReturnType : T extends 'texture' ? TextureNode : T extends 'texture3D' ? Texture3DNode : never; type InferNodeObjects = { [K in keyof Inputs]: Inputs[K] extends FnLayoutInput ? InferNodeObject : never; }; export type FnLayoutResult> = (callback: (...args: [] extends Nodes ? [NodeBuilder] : [Nodes, NodeBuilder]) => InferNodeObject | ShaderCallNodeInternal) => ShaderNodeFn>; export declare function FnLayout({ typeOnly, ...layout }: FnLayout): FnLayoutResult; export {};