export class ParticleGroup {
    /**
     *
     * @param {ParticleSpecification} spec
     * @param {boolean} [instanced=false]
     * @constructor
     */
    constructor(spec: ParticleSpecification, instanced?: boolean);
    instanced: boolean;
    /**
     *
     * @type {ParticleSpecification}
     */
    spec: ParticleSpecification;
    attributes: any[];
    /**
     *
     * @type {ObservedValue<BufferGeometry>}
     */
    geometry: ObservedValue<BufferGeometry>;
    /**
     *
     * @type {int}
     */
    size: int;
    /**
     *
     * @type {int}
     */
    capacity: int;
    growFactor: number;
    shrinkFactor: number;
    referenceIndexLookup: Map<any, any>;
    indexReferenceLookup: any[];
    /**
     *
     * @type {Array.<Operation>}
     */
    commandQueue: Array<Operation>;
    referencePool: IdPool;
    /**
     *
     * @param {Float64Array|Float32Array|Uint32Array|Uint16Array|Uint8Array|Int32Array|Int16Array|Int8Array} array
     * @param {int} itemSize
     * @returns {InstancedBufferAttribute|BufferAttribute}
     */
    buildNewBufferAttribute(array: Float64Array | Float32Array | Uint32Array | Uint16Array | Uint8Array | Int32Array | Int16Array | Int8Array, itemSize: int): InstancedBufferAttribute | BufferAttribute;
    /**
     *
     * @returns {InstancedBufferGeometry|BufferGeometry}
     */
    buildNewGeometry(): InstancedBufferGeometry | BufferGeometry;
    build(): void;
    /**
     * attributes can not grow, this means that we need to rebuild entire geometry if we want to make that happen
     */
    setCapacity(maxSize: any): void;
    reset(): void;
    /**
     * Flush command queue
     * @returns {boolean} true if some operations were executed, false otherwise
     */
    update(): boolean;
    optimizeCommandQueue(): void;
    /**
     *
     * @param {number} id
     */
    createSpecific(id: number): void;
    /**
     * NOTE: Deferred operation, required update before results can be observed
     * @returns {number} particle reference
     */
    create(): number;
    /**
     * NOTE: Deferred operation, required update before results can be observed
     */
    remove(reference: any): void;
    /**
     * NOTE: this method does not take pending operations into account
     * @param reference
     */
    contains(reference: any): boolean;
    traverseReferences(visitor: any): void;
    /**
     * NOTE: Deferred operation, required update before results can be observed
     * @param {int} reference
     * @param {int} attributeIndex Index of attribute to be written
     * @param {Array.<number>} value
     */
    writeAttribute(reference: int, attributeIndex: int, value: Array<number>): void;
    /**
     *
     * @param {number} index
     * @param {number} attributeIndex
     * @param {Array|Float32Array|Float64Array|Uint8Array} result
     */
    readAttributeByIndex(index: number, attributeIndex: number, result: any[] | Float32Array | Float64Array | Uint8Array): void;
    readAttribute(reference: any, attributeIndex: any, result: any): void;
    /**
     * Produces reference of a particle by its index
     * @param {number} index
     * @returns {number}
     */
    referenceByIndex(index: number): number;
    createImmediate(): number;
    executeOperationAdd(references: any): void;
    executeOperationRemove(references: any): void;
    /**
     *
     * @param reference
     * @param attributeIndex
     * @param {number[]} value
     */
    executeOperationWriteAttribute(reference: any, attributeIndex: any, value: number[]): void;
    /**
     *
     * @param reference
     * @param attributeIndex
     * @param {number} value
     */
    executeOperationWriteAttribute_Scalar(reference: any, attributeIndex: any, value: number): void;
    /**
     *
     * @param reference
     * @param attributeIndex
     * @param x
     * @param y
     * @param z
     */
    executeOperationWriteAttribute_Vector3(reference: any, attributeIndex: any, x: any, y: any, z: any): void;
    /**
     *
     * @param reference
     * @param attributeIndex
     * @param x
     * @param y
     * @param z
     * @param w
     */
    executeOperationWriteAttribute_Vector4(reference: any, attributeIndex: any, x: any, y: any, z: any, w: any): void;
    /**
     *
     * @param {Operation} operation
     */
    executeOperation(operation: Operation): void;
    /**
     *
     * @param {Array.<int>} indices
     */
    deleteIndices(indices: Array<int>): void;
    /**
     * Swap two particles identified by index
     * @param {number} indexA
     * @param {number} indexB
     */
    swapAttributeValues(indexA: number, indexB: number): void;
    /**
     *
     * @param {number} indexA
     * @param {number} indexB
     */
    swap(indexA: number, indexB: number): void;
    /**
     *
     * @param {int} numAdded
     */
    grow(numAdded: int): void;
    preAllocate(itemCount: any): void;
    updateCapacity(newSize: any): void;
    /**
     *
     * @param {int} newSize
     */
    setSize(newSize: int): void;
}
import ObservedValue from "../../../../../core/model/ObservedValue.js";
import { BufferGeometry } from "three";
import { Operation } from "./Operation.js";
import IdPool from "../../../../../core/IdPool.js";
import { InstancedBufferAttribute } from "three";
import { BufferAttribute } from "three";
import { InstancedBufferGeometry } from "three";
//# sourceMappingURL=ParticleGroup.d.ts.map