import { BaseRenderPass, type RenderPassContext } from "../RenderPass.js";
import { type GPUParticleBackend } from "./GPUParticleBackend.js";
import { ParticleRenderer, type ParticleDrawTarget, type ParticleRenderBatch, type ParticleRenderOptions } from "./ParticleRenderer.js";
import { type ParticleSystem } from "./ParticleSystem.js";
export type ParticleRenderPassUpdateMode = "none" | "cpu" | "gpu";
export interface ParticleRenderPassUpdateOptions {
    readonly deltaTime: number;
    readonly gpuBackend?: GPUParticleBackend;
    readonly preferGPU?: boolean;
    readonly allowCPUFallback?: boolean;
}
export interface ParticleRenderPassOptions {
    readonly system: ParticleSystem;
    readonly target: ParticleDrawTarget;
    readonly renderer?: ParticleRenderer;
    readonly renderOptions?: ParticleRenderOptions;
    readonly update?: ParticleRenderPassUpdateOptions;
    readonly reads?: readonly string[];
    readonly writes?: readonly string[];
}
export declare class ParticleRenderPass extends BaseRenderPass {
    private readonly options;
    readonly renderer: ParticleRenderer;
    private lastBatch;
    private lastUpdateMode;
    constructor(options: ParticleRenderPassOptions);
    execute(_context: RenderPassContext): void;
    executeAsync(_context: RenderPassContext): Promise<void>;
    getLastBatch(): ParticleRenderBatch | null;
    getLastUpdateMode(): ParticleRenderPassUpdateMode;
    private requiresAsyncUpdate;
    private updateSync;
    private updateAsync;
}
//# sourceMappingURL=ParticleRenderPass.d.ts.map