import { type BloomOptions, type ChromaticAberrationOptions, type ColorGradeOptions, type DepthOfFieldOptions, type FXAAOptions, type FilmGrainOptions, type MotionBlurOptions, type OutlineOptions, type SSAOOptions, type SSROptions, type TAAOptions, type ToneMappingOptions, type ToneMappingPresetName } from "../PostProcessPass";
import { type RenderDevice, type RenderTarget } from "../RenderDevice";
import { type TextureFormat } from "../Texture";
export type PostProcessComposerPass = {
    readonly name: "bloom";
    readonly options?: BloomOptions;
} | {
    readonly name: "tone-mapping";
    readonly options?: ToneMappingOptions;
} | {
    readonly name: "tone-mapping-preset";
    readonly preset: ToneMappingPresetName;
    readonly options?: {
        readonly previousExposure?: number;
        readonly deltaTimeSeconds?: number;
    } & ToneMappingOptions;
} | {
    readonly name: "color-grade";
    readonly options?: ColorGradeOptions;
} | {
    readonly name: "chromatic-aberration";
    readonly options?: ChromaticAberrationOptions;
} | {
    readonly name: "film-grain";
    readonly options?: FilmGrainOptions;
} | {
    readonly name: "depth-of-field";
    readonly options: DepthOfFieldOptions;
} | {
    readonly name: "motion-blur";
    readonly options: MotionBlurOptions;
} | {
    readonly name: "ssao";
    readonly options: SSAOOptions;
} | {
    readonly name: "ssr";
    readonly options: SSROptions;
} | {
    readonly name: "taa";
    readonly options: TAAOptions;
} | {
    readonly name: "outline";
    readonly options?: OutlineOptions;
} | {
    readonly name: "fxaa";
    readonly options?: FXAAOptions;
};
export interface PostProcessComposerOptions {
    readonly device: RenderDevice;
    readonly width: number;
    readonly height: number;
    readonly format?: Extract<TextureFormat, "rgba8">;
    readonly label?: string;
}
export interface PostProcessComposerRenderOptions {
    readonly source: RenderTarget;
    readonly target?: RenderTarget;
    readonly passes?: readonly PostProcessComposerPass[];
}
export interface PostProcessComposerDiagnostics {
    readonly width: number;
    readonly height: number;
    readonly passCount: number;
    readonly pingPongTargets: number;
    readonly textureCount: number;
    readonly lastPasses: readonly string[];
    readonly presentedToBackbuffer: boolean;
    readonly outputTargetLabel: string | null;
}
export interface PostProcessUnsupportedEffect {
    readonly name: string;
    readonly reason: string;
    readonly requiredCapability?: string;
}
export interface PostProcessCapabilityReport {
    readonly backend: string;
    readonly supportedEffects: readonly string[];
    readonly unsupportedEffects: readonly PostProcessUnsupportedEffect[];
    readonly supportsRenderTargets: boolean;
    readonly supportsPresentation: boolean;
    readonly supportsPixelReadback: boolean;
    readonly supportsFloatReadback: boolean;
    readonly supportsHdrTargets: boolean;
    readonly supportsRendererOwnedDepthEffects: boolean;
}
export declare class PostProcessComposer {
    private readonly device;
    private readonly label;
    private width;
    private height;
    private passes;
    private pingPongTargets;
    private disposed;
    private lastDiagnostics;
    constructor(options: PostProcessComposerOptions);
    addPass(pass: PostProcessComposerPass): this;
    setPasses(passes: readonly PostProcessComposerPass[]): this;
    clearPasses(): this;
    resize(width: number, height: number): void;
    render(options: PostProcessComposerRenderOptions): PostProcessComposerDiagnostics;
    getDiagnostics(): PostProcessComposerDiagnostics;
    dispose(): void;
    private createPingPongTargets;
    private validateSource;
    private validateTarget;
    private createDiagnostics;
    private assertAlive;
}
export declare function createPostProcessCapabilityReport(device: RenderDevice): PostProcessCapabilityReport;
//# sourceMappingURL=EffectComposer.d.ts.map