import { BaseGlNodeType } from '../../_Base';
import { TypedNodeTraverser } from '../../../utils/shaders/NodeTraverser';
import { ShaderName } from '../../../utils/shaders/ShaderName';
import { ParamConfigsController } from '../../../../nodes/utils/code/controllers/ParamConfigsController';
import { ShadersCollectionController } from './ShadersCollectionController';
import { LineType } from './LineType';
import { GlParamConfig } from './ParamConfig';
import { ParamType } from '../../../../poly/ParamType';
import { NodeContext } from '../../../../poly/NodeContext';
declare type RootNodesForShaderMethod = (shader_name: ShaderName) => BaseGlNodeType[];
export declare class CodeBuilder {
    private _node_traverser;
    private _root_nodes_for_shader_method;
    _param_configs_controller: ParamConfigsController<GlParamConfig<ParamType>>;
    _param_configs_set_allowed: boolean;
    private _shaders_collection_controller;
    _lines: Map<ShaderName, Map<LineType, string[]>>;
    constructor(_node_traverser: TypedNodeTraverser<NodeContext.GL>, _root_nodes_for_shader_method: RootNodesForShaderMethod);
    shader_names(): ShaderName[];
    build_from_nodes(root_nodes: BaseGlNodeType[], param_nodes: BaseGlNodeType[]): void;
    shaders_collection_controller(): ShadersCollectionController | undefined;
    disallow_new_param_configs(): void;
    allow_new_param_configs(): void;
    private reset;
    param_configs(): readonly GlParamConfig<ParamType>[];
    lines(shader_name: ShaderName, line_type: LineType): string[];
    all_lines(): Map<ShaderName, Map<LineType, string[]>>;
    set_param_configs(nodes: BaseGlNodeType[]): void;
    set_code_lines(nodes: BaseGlNodeType[]): void;
    add_code_lines(nodes: BaseGlNodeType[], shader_name: ShaderName): void;
    private add_definitions;
    add_code_line_for_nodes_and_line_type(nodes: BaseGlNodeType[], shader_name: ShaderName, line_type: LineType): void;
    add_code_line_for_node_and_line_type(node: BaseGlNodeType, shader_name: ShaderName, line_type: LineType, is_last: boolean): void;
}
export {};
