import * as THREE from "three";
import type { BaseViewer } from "../viewers/BaseViewer";
/**
 * Visual effect manager for viewers.
 */
export declare class EffectManager {
    private viewer;
    private composerEnabled;
    private composer;
    private renderPass;
    private effectFxaaPass?;
    private saoPass?;
    private ssaoPass?;
    private outlinePass?;
    private ssaaRenderPass?;
    private bloomPass?;
    private unrealBloomPass?;
    /** Last pass: tone mapping + output color space (composer RT is linear / half-float). */
    private composerOutputPass?;
    private vertexNormalsHelpers?;
    private selectionLineOverlay?;
    /** Line selection highlights parented on source lines so transforms stay in sync. */
    private lineHighlightOverlays;
    constructor(viewer: BaseViewer);
    get enabled(): boolean;
    set enabled(enable: boolean);
    get renderPassEnabled(): boolean;
    set renderPassEnabled(enable: boolean);
    get fxaaPassEnabled(): boolean;
    set fxaaPassEnabled(enable: boolean);
    get saoPassEnabled(): boolean;
    set saoPassEnabled(enable: boolean);
    setSaoPassParams(params: {
        output?: number;
        saoBias?: number;
        saoIntensity?: number;
        saoScale?: number;
        saoKernelRadius?: number;
        saoMinResolution?: number;
    }): void;
    setSaoPassBlurParams(params: {
        saoBlur?: boolean;
        saoBlurRadius?: number;
        saoBlurSigma?: number;
        saoBlurDepth?: number;
    }): void;
    get ssaoPassEnabled(): boolean;
    set ssaoPassEnabled(enable: boolean);
    setSsaoPassOutput(output: number): void;
    setSsaoPassParams(params: {
        kernelRadius?: number;
        minDistance?: number;
        maxDistance?: number;
    }): void;
    get outlinePassEnabled(): boolean;
    set outlinePassEnabled(enable: boolean);
    get ssaaPassEnabled(): boolean;
    set ssaaPassEnabled(enable: boolean);
    get bloomPassEnabled(): boolean;
    set bloomPassEnabled(enable: boolean);
    get unrealBloomPassEnabled(): boolean;
    set unrealBloomPassEnabled(enable: boolean);
    setOutlinePassSelectObjects(objects: THREE.Object3D[]): void;
    /**
     * Sets current selection outline objects.
     * When objects is empty, the pass is disabled.
     *
     * Intended for 3D viewer selection highlighting; 2D callers should avoid using this.
     */
    setSelectionOutline(objects: THREE.Object3D[]): void;
    private updateSelectionLineOverlay;
    private clearSelectionLineOverlay;
    private collectSelectedLineObjects;
    private createLineHighlightOverlay;
    /**
     * OutlinePass is screen-space (depth/normal): not every geometric edge appears.
     * Colors are sRGB display values (no HDR boost): outline runs after {@link OutputPass}, so it is not
     * washed out by tone mapping.
     */
    private applySelectionOutlineAppearance;
    /**
     * The stock {@link OutlinePass} overlay material uses `AdditiveBlending`.
     * Additive blend on a white background: `clamp(1 + x) = 1` — the outline is **mathematically invisible**.
     *
     * Replace the overlay with `NormalBlending` + a shader that outputs proper alpha so the edge color
     * **covers** the background instead of being added to it. This works on any background brightness.
     */
    private patchOutlineOverlayBlending;
    /**
     * Internal buffers must use the same pixel dimensions as {@link EffectComposer} (logical size × DPR);
     * otherwise on HiDPI screens edges are detected on an undersized grid and look ~1px thin and dim.
     */
    private outlinePassResolution;
    enableModelEdges(enable: boolean): void;
    showVertexNormals(show: boolean, size?: number): void;
    setSize(width: number, height: number): void;
    /**
     * Most postprocessing passes cache the camera reference in constructor.
     * Keep them synced with current viewer camera when projection switches.
     */
    private syncPostprocessingCamera;
    render(): void;
    destroy(): void;
    private createWatermarkPass;
    /** Creates the watermark pass, enables it, and applies the default text and layout. */
    private initWatermark;
    private syncWatermarkResolution;
    private ensureComposerOutputPass;
    /**
     * Order: …other passes… → watermark (linear) → {@link composerOutputPass} (tone map + output encoding)
     * → {@link outlinePass} when present (selection outline avoids tone mapping by compositing last).
     */
    private ensurePostprocessPassOrder;
}
