import Materials from '../materials/Materials';
import { NodeRenderView } from '../tree/NodeRenderView';
import { Batch, BatchUpdateRange, GeometryType } from './Batch';
import { Material, WebGLRenderer } from 'three';
import { RenderTree } from '../tree/RenderTree';
import { SpeckleType } from '../loaders/GeometryConverter';
import { WorldTree } from '../..';
export default class Batcher {
    private maxHardwareUniformCount;
    private floatTextures;
    private maxBatchObjects;
    private maxBatchVertices;
    private minInstancedBatchVertices;
    materials: Materials;
    batches: {
        [id: string]: Batch;
    };
    constructor(maxUniformCount: number, floatTextures: boolean);
    makeBatches(worldTree: WorldTree, renderTree: RenderTree, speckleType: SpeckleType[], batchType?: GeometryType): AsyncGenerator<Batch, void, unknown>;
    private splitBatch;
    private buildInstancedBatch;
    private buildBatch;
    update(deltaTime: number): void;
    render(renderer: WebGLRenderer): void;
    saveVisiblity(): Record<string, BatchUpdateRange>;
    applyVisibility(ranges: Record<string, BatchUpdateRange>): void;
    getTransparent(): Record<string, BatchUpdateRange>;
    getStencil(): Record<string, BatchUpdateRange>;
    getOpaque(): Record<string, BatchUpdateRange>;
    overrideMaterial(ranges: Record<string, BatchUpdateRange>, material: Material): void;
    restoreMaterial(ranges: Record<string, BatchUpdateRange>): void;
    purgeBatches(subtreeId: string): void;
    getBatches(subtreeId?: string, geometryType?: GeometryType): Batch[];
    getBatch(rv: NodeRenderView): Batch;
    getRenderView(batchId: string, index: number): NodeRenderView;
    getRenderViewMaterial(batchId: string, index: number): Material;
    resetBatchesDrawRanges(): void;
    /**
     * Used for debuggin only
     */
    isolateRenderViewBatch(id: string, renderTree: RenderTree): Promise<void>;
    isolateBatch(batchId: string): Promise<void>;
}
