import { Box3, Material, Object3D, WebGLRenderer } from 'three';
import SpeckleMesh from '../objects/SpeckleMesh';
import { NodeRenderView } from '../tree/NodeRenderView';
import { Batch, BatchUpdateRange, GeometryType } from './Batch';
import { TransformStorage } from './Batcher';
export default class MeshBatch implements Batch {
    id: string;
    subtreeId: string;
    renderViews: NodeRenderView[];
    private transformStorage;
    private geometry;
    batchMaterial: Material;
    mesh: SpeckleMesh;
    private gradientIndexBuffer;
    private indexBuffer0;
    private indexBuffer1;
    private indexBufferIndex;
    get bounds(): Box3;
    constructor(id: string, subtreeId: string, renderViews: NodeRenderView[], transformStorage: TransformStorage);
    get geometryType(): GeometryType;
    get renderObject(): Object3D;
    getCount(): number;
    setBatchMaterial(material: Material): void;
    onUpdate(deltaTime: number): void;
    onRender(renderer: WebGLRenderer): void;
    setVisibleRange(...ranges: BatchUpdateRange[]): void;
    getVisibleRange(): BatchUpdateRange;
    setDrawRanges(...ranges: BatchUpdateRange[]): void;
    insertDrawRanges(...ranges: BatchUpdateRange[]): void;
    removeDrawRanges(id: string): void;
    private getDrawRangeCollision;
    private getCurrentIndexBuffer;
    private getNextIndexBuffer;
    autoFillDrawRanges(): void;
    private autoFillDrawRangesShuffleIBO;
    /** This is the initial basic way of dealing with auto-completing draw groups
     *  It's simpler, but it cand add a lot of redundant draw calls. I'm keeping it
     *  for now
     */
    private createRenderViewMapping;
    resetDrawRanges(): void;
    buildBatch(): void;
    getRenderView(index: number): NodeRenderView;
    getMaterialAtIndex(index: number): Material;
    private makeMeshGeometry;
    private updateGradientIndexBufferData;
    private updateGradientIndexBuffer;
    purge(): void;
}
