export class InstancedMeshGroup {
    /**
     *
     * @param {THREE.BufferGeometry} geometry
     * @param {Material} material
     * @returns {InstancedMeshGroup}
     */
    static from(geometry: THREE.BufferGeometry, material: Material): InstancedMeshGroup;
    /**
     * Instanced geometry
     * @type {InstancedBufferGeometry|null}
     * @private
     */
    private __threeGeometry;
    /**
     * Geometry of a single instance
     * @type {BufferGeometry|null}
     * @private
     */
    private __threeInstanceGeometry;
    /**
     * @private
     * @type {number}
     */
    private count;
    /**
     *
     * @type {number}
     */
    capacity: number;
    /**
     *
     * @type {number}
     */
    growFactor: number;
    /**
     * Minimum spare capacity increase during growing
     * @type {number}
     */
    growConstant: number;
    /**
     *
     * @type {number}
     */
    shrinkFactor: number;
    /**
     * Minimum capacity reduction for shrinkage to occur
     * @type {number}
     */
    shrinkConstant: number;
    /**
     *
     * @type {InstancedBufferAttribute}
     * @private
     */
    private __attributeTransform;
    /**
     * Shortcut to buffer attribute data
     * @type {Float32Array}
     * @private
     */
    private __attributeTransformArray;
    /**
     *
     * TODO implement usage
     * @type {InstancedBufferAttribute}
     * @private
     */
    private __attributeColor;
    /**
     * TODO implement usage
     * @type {Uint8Array}
     * @private
     */
    private __attributeColorArray;
    /**
     *
     * @type {Usage}
     * @private
     */
    private __instanceUsage;
    /**
     *
     * @type {Material}
     * @private
     */
    private __material;
    indices: any[];
    references: any[];
    /**
     *
     * @type {DrawMode}
     * @private
     */
    private __draw_mode;
    mesh: Mesh<BufferGeometry, import("three").Material | import("three").Material[]>;
    use_color: boolean;
    __build_mesh(): void;
    /**
     *
     * @param {DrawMode} v
     */
    set draw_mode(v: DrawMode);
    /**
     *
     * @param {Usage} v
     */
    set instance_usage(v: Usage);
    /**
     *
     * @return {Usage}
     */
    get instance_usage(): Usage;
    dispose(): void;
    /**
     *
     * @param {THREE.BufferGeometry} geometry
     */
    setGeometry(geometry: THREE.BufferGeometry): void;
    /**
     *
     * @param {THREE.Material|THREE.ShaderMaterial} sourceMaterial
     */
    setMaterial(sourceMaterial: THREE.Material | THREE.ShaderMaterial): void;
    /**
     *
     * @param {number} size
     */
    setCapacity(size: number): void;
    /**
     *
     * @param {number} size
     */
    ensureCapacity(size: number): void;
    /**
     *
     * @param {number} index
     * @param {number[]|ArrayLike<number>|Float32Array} transform 4x4 transform matrix of the instance
     */
    setTransformAt(index: number, transform: number[] | ArrayLike<number> | Float32Array): void;
    /**
     *
     * @param {number} index
     * @param {number[]|ArrayLike<number>|Float32Array} color RGBA color in uint8 format (0...255), LDR
     */
    setColorAt(index: number, color: number[] | ArrayLike<number> | Float32Array): void;
    /**
     *
     * @param {number} index
     * @param {number} r
     * @param {number} g
     * @param {number} b
     * @param {number} a
     */
    setColorByComponentAt(index: number, r: number, g: number, b: number, a: number): void;
    requestAttributeUpdate(): void;
    /**
     * Swap position in attribute arrays of two elements
     * @param {int} indexA
     * @param {int} indexB
     */
    swap(indexA: int, indexB: int): void;
    /**
     *
     * @param {int} size
     */
    setCount(size: int): void;
    /**
     *
     * @return {number|int}
     */
    getCount(): number | int;
    /**
     *
     * @param {int} reference
     * @returns {int}
     */
    add(reference: int): int;
    /**
     *
     * @param {function(index:int,reference:int)} visitor
     * @param {*} [thisArg]
     */
    traverseReferences(visitor: any, thisArg?: any): void;
    /**
     *
     * @param {int} reference
     */
    remove(reference: int): void;
    build(): void;
    #private;
}
export type CacheKey = {
    color: Material;
    depth: Material;
};
import { BufferGeometry } from 'three';
import { Mesh } from 'three';
import { DrawMode } from "../../ecs/mesh-v2/DrawMode.js";
//# sourceMappingURL=InstancedMeshGroup.d.ts.map