import { BufferGeometry, Group, Material, type Intersection } from 'three';
import { BatchObject } from '../batching/BatchObject.js';
import { TopLevelAccelerationStructure } from './TopLevelAccelerationStructure.js';
import { type DrawGroup } from '../batching/Batch.js';
import { SpeckleRaycaster } from './SpeckleRaycaster.js';
export default class SpeckleInstancedMesh extends Group {
    static MeshBatchNumber: number;
    private tas;
    private batchMaterial;
    private materialCache;
    private materialStack;
    private batchMaterialStack;
    private materialCacheLUT;
    private _batchObjects;
    private _needsRTE;
    groups: Array<DrawGroup>;
    materials: Material[];
    private instanceGeometry;
    private instances;
    get TAS(): TopLevelAccelerationStructure;
    get batchObjects(): BatchObject[];
    get needsRTE(): boolean;
    constructor(geometry: BufferGeometry, RTE?: boolean);
    setBatchMaterial(material: Material): void;
    setBatchObjects(batchObjects: BatchObject[]): void;
    setOverrideMaterial(material: Material): void;
    setOverrideBatchMaterial(material: Material): void;
    restoreBatchMaterial(): void;
    private lookupMaterial;
    getCachedMaterial(material: Material, copy?: boolean): Material;
    restoreMaterial(): void;
    buildTAS(): void;
    updateDrawGroups(transformBuffer: Float32Array, gradientBuffer: Float32Array, objectIndexBuffer?: Float32Array): void;
    updateTransformsUniform(): void;
    updateMaterialTransformsUniform(material: Material): void;
    getBatchObjectMaterial(batchObject: BatchObject): Material | null;
    /** Three's 'clone' and 'copy' from geometry and buffer attributes
     *  create duplicates of arrays and we don't want that. Most of the
     *  buffer attributes need to be shared to avoid redundancy
     */
    private getInstanceGeometryShallowCopy;
    private convertRaycastIntersect;
    raycast(raycaster: SpeckleRaycaster, intersects: Array<Intersection>): void;
}
