import { BufferGeometry, DataTexture, Material, Matrix4, Mesh, Raycaster } from 'three';
import { BatchObject } from '../batching/BatchObject';
import { TopLevelAccelerationStructure } from './TopLevelAccelerationStructure';
export declare enum TransformStorage {
    VERTEX_TEXTURE = 0,
    UNIFORM_ARRAY = 1
}
export default class SpeckleMesh extends Mesh {
    static MeshBatchNumber: number;
    private tas;
    private batchMaterial;
    private materialCache;
    private materialStack;
    private _batchObjects;
    private transformsBuffer;
    private transformStorage;
    transformsTextureUniform: DataTexture;
    transformsArrayUniforms: Matrix4[];
    private debugBatchBox;
    private boxHelper;
    get TAS(): TopLevelAccelerationStructure;
    get batchObjects(): BatchObject[];
    constructor(geometry: BufferGeometry);
    setBatchMaterial(material: Material): void;
    setBatchObjects(batchObjects: BatchObject[], transformStorage: TransformStorage): void;
    setOverrideMaterial(material: Material): void;
    getCachedMaterial(material: Material, copy?: boolean): Material;
    restoreMaterial(): void;
    updateMaterialTransformsUniform(material: Material): void;
    updateTransformsUniform(): void;
    buildTAS(): void;
    getBatchObjectMaterial(batchObject: BatchObject): Material;
    private convertRaycastIntersect;
    raycast(raycaster: Raycaster, intersects: any): void;
}
