import { Vector2, Scene, WebGLRenderer, Mesh, WebGLRenderTarget, DataTexture, Texture, Material, OrthographicCamera } from 'three';
import { ClothController } from '../ClothController';
import { Ref } from '@vue/reactivity';
export interface ClothMaterialUniformConfigRef {
    tSize: Ref<Vector2>;
    tPosition0: Ref<Texture>;
    tPosition1: Ref<Texture>;
    tNormal: Ref<Texture>;
    tOriginalRT: Ref<Texture>;
    tViscositySpringT: Ref<Texture>;
    tPreviousRT0: Ref<Texture>;
    tPreviousRT1: Ref<Texture>;
    tTargetRT0: Ref<Texture>;
    tTargetRT1: Ref<Texture>;
    tNormalsRT: Ref<Texture>;
    tPositionRT0: Ref<Texture>;
    tPositionRT1: Ref<Texture>;
    tAdjacentsRT0: Ref<Texture>;
    tAdjacentsRT1: Ref<Texture>;
    tDistanceRT0: Ref<Texture>;
    tDistanceRT1: Ref<Texture>;
    integrationMat: Ref<Material>;
}
export type ClothMaterialUniformConfigRefString = Record<keyof ClothMaterialUniformConfigRef, string>;
export declare function clothMaterialCopyConfigRef(src: ClothMaterialUniformConfigRef, target: ClothMaterialUniformConfigRef): void;
export interface ClothMaterialUniformConfig {
    tSize: Vector2;
    tPosition0: Texture;
    tPosition1: Texture;
    tNormal: Texture;
}
export interface ClothMaterialUniformNameConfig {
    tSize: string;
    tPosition0: string;
    tPosition1: string;
    tNormal: string;
}
interface TextureContainer {
    texture: DataTexture | null;
}
export declare class ClothFBOController {
    readonly mainController: ClothController;
    readonly tSize: Vector2;
    readonly fboScene: Scene;
    readonly fboCamera: OrthographicCamera;
    readonly fboMesh: Mesh;
    RESOLUTION: Vector2;
    originalRT: TextureContainer;
    viscositySpringT: TextureContainer;
    readonly previousRT: [WebGLRenderTarget, WebGLRenderTarget];
    readonly targetRT: [WebGLRenderTarget, WebGLRenderTarget];
    normalsRT: WebGLRenderTarget;
    readonly positionRT: [WebGLRenderTarget, WebGLRenderTarget];
    readonly adjacentsRT: [TextureContainer, TextureContainer];
    readonly distancesRT: [TextureContainer, TextureContainer];
    renderer: WebGLRenderer | undefined;
    constructor(mainController: ClothController);
    private _initialized;
    init(renderer: WebGLRenderer): void;
    private copyTexture;
    private createPositionTexture;
    private createViscositySpringTexture;
    private createTexturesFromAllocation;
    private createAdjacentsTexture;
    private createDistancesTexture;
    update(config?: ClothMaterialUniformConfigRef): void;
    private _updateTextureRefs;
    private integrate;
    protected solveConstraints(renderer: WebGLRenderer, secondaryMotionMult: number): void;
    protected mouseOffset(renderer: WebGLRenderer): void;
    protected computeVertexNormals(renderer: WebGLRenderer): void;
}
export {};
