import { type Particle } from "./Particle.js";
import { ParticleEmitter } from "./ParticleEmitter.js";
import type { GPUParticleBackend } from "./GPUParticleBackend.js";
import { type ParticleModule } from "./ParticleModule.js";
export interface ParticleSystemStats {
    liveCount: number;
    capacity: number;
    spawnedCount: number;
    killedCount: number;
    droppedCount: number;
    bufferUploads: number;
    uploadedBytes: number;
    gpuSpawns: number;
    gpuUpdates: number;
}
export interface ParticleSystemOptions {
    maxParticles?: number;
    emitters?: readonly ParticleEmitter[];
    modules?: readonly ParticleModule[];
    gpuBackend?: GPUParticleBackend;
    preferGPU?: boolean;
}
export declare class ParticleSystem {
    readonly particles: Particle[];
    readonly emitters: ParticleEmitter[];
    readonly modules: ParticleModule[];
    readonly maxParticles: number;
    elapsedTime: number;
    paused: boolean;
    private stats;
    private gpuBackend?;
    private preferGPU;
    constructor(options?: ParticleSystemOptions);
    addEmitter(emitter: ParticleEmitter): this;
    addModule(module: ParticleModule): this;
    setGPUBackend(backend: GPUParticleBackend | undefined, preferGPU?: boolean): this;
    clear(): void;
    dispose(): void;
    update(deltaTime: number): void;
    updateOnGPU(deltaTime: number, backend: GPUParticleBackend): Promise<void>;
    updateBest(deltaTime: number): Promise<"gpu" | "cpu">;
    getStats(): ParticleSystemStats;
    recordBufferUpload(bytes: number): void;
    private spawn;
    private initializeSpawnedOnGPU;
    private integrate;
    private integrateOnGPU;
    private compactDeadParticles;
    private createContext;
}
//# sourceMappingURL=ParticleSystem.d.ts.map