/**
 * @module vim-loader
 */
import { G3dMesh } from 'vim-format';
import { G3dSubset } from './g3dSubset';
/**
 * Makes sure both instanced meshes and merged meshes are requested in the right order
 * Also decouples downloads and processing.
 */
export declare class LoadingSynchronizer {
    done: boolean;
    uniques: G3dSubset;
    nonUniques: G3dSubset;
    getMesh: (mesh: number) => Promise<G3dMesh>;
    mergeAction: (mesh: G3dMesh, index: number) => void;
    instanceAction: (mesh: G3dMesh, index: number) => void;
    mergeQueue: (() => void)[];
    instanceQueue: (() => void)[];
    constructor(uniques: G3dSubset, nonUniques: G3dSubset, getMesh: (mesh: number) => Promise<G3dMesh>, mergeAction: (mesh: G3dMesh, index: number) => void, instanceAction: (mesh: G3dMesh, index: number) => void);
    get isDone(): boolean;
    abort(): void;
    loadAll(): Promise<void>;
    private consumeQueues;
    private getSortedPromises;
    merge(mesh: number, index: number): Promise<void>;
    instance(mesh: number, index: number): Promise<void>;
}
