/**
 * Create a cloth solver
 *
 *
 */
import { Object3D } from 'three';
import { CoreGroup } from '../../../core/geometry/Group';
import { NodeParamsConfig } from '../utils/params/ParamsConfig';
import { NodeContext } from '../../poly/NodeContext';
import { SopType } from '../../poly/registers/nodes/types/Sop';
import { PolyScene } from '../../scene/PolyScene';
import { TypedSopNode } from './_Base';
import { AssemblerName } from '../../poly/registers/assemblers/_BaseRegister';
import { GlAssemblerController } from '../gl/code/Controller';
import { ShaderAssemblerCloth } from '../gl/code/assemblers/cloth/ClothAssembler';
import { ClothPersistedConfig } from '../gl/code/assemblers/cloth/ClothPersistedConfig';
import { GlNodeChildrenMap } from '../../poly/registers/nodes/Gl';
import { NodeCreateOptions } from '../utils/hierarchy/ChildrenController';
import { Constructor, valueof } from '../../../types/GlobalTypes';
import { BaseGlNodeType } from '../gl/_Base';
import { ShaderName } from '../utils/shaders/ShaderName';
import { ClothController } from '../../../core/cloth/ClothController';
declare class ClothSolverSopParamsConfig extends NodeParamsConfig {
}
export declare class ClothSolverSopNode extends TypedSopNode<ClothSolverSopParamsConfig> {
    readonly paramsConfig: ClothSolverSopParamsConfig;
    static type(): SopType.CLOTH_SOLVER;
    assemblerController(): GlAssemblerController<ShaderAssemblerCloth> | undefined;
    usedAssembler(): Readonly<AssemblerName.GL_CLOTH>;
    protected _assemblerController: GlAssemblerController<ShaderAssemblerCloth> | undefined;
    private _createAssemblerController;
    readonly persisted_config: ClothPersistedConfig;
    private _globalsHandler;
    private _shadersByName;
    shadersByName(): Map<ShaderName, string>;
    protected _childrenControllerContext: NodeContext;
    protected initializeNode(): void;
    createNode<S extends keyof GlNodeChildrenMap>(node_class: S, options?: NodeCreateOptions): GlNodeChildrenMap[S];
    createNode<K extends valueof<GlNodeChildrenMap>>(node_class: Constructor<K>, options?: NodeCreateOptions): K;
    children(): BaseGlNodeType[];
    nodesByType<K extends keyof GlNodeChildrenMap>(type: K): GlNodeChildrenMap[K][];
    childrenAllowed(): boolean;
    sceneReadonly(): boolean;
    cook(inputCoreGroups: CoreGroup[]): Promise<void>;
    updateObjectOnAdd(object: Object3D): void;
    compileIfRequired(): void;
    run_assembler(): void;
    private _setShaderNames;
    init_with_persisted_config(): void;
    initCoreClothControllerFromPersistedConfig(coreClothController: ClothController): void;
    private _findExportNodes;
}
export declare function getClothControllerNodeFromWorldObject(clothObject: Object3D, scene: PolyScene): ClothSolverSopNode | undefined;
export {};
