import type { WebGLRenderer } from "three";
import { Color, type Vector2, type WebGLRenderTarget } from "three";
import { Pass } from "three/examples/jsm/postprocessing/Pass";
/**
 * Alpha-Based Selection Outline Pass (FASTEST)
 *
 * This is the FASTEST possible selection outline implementation because:
 * - ZERO extra render passes for selection mask
 * - ZERO geometry copying
 * - O(pixels) cost - same for 1 or 10,000 selected elements
 *
 * How it works:
 * 1. Selected elements have their alpha set to a special value (SELECTION_ALPHA = 0.99)
 * 2. This pass detects edges where alpha equals SELECTION_ALPHA
 * 3. Applies outline effect at those edges
 *
 * Requirements:
 * - ViralBatchedMesh/ViralInstancedMesh must set alpha = 0.99 for selected vertices
 * - Must run after main render pass but before tone mapping
 */
export interface AlphaSelectionOutlineOptions {
    /** Outline color (default: accent color) */
    outlineColor: Color;
    /** Outline opacity 0-1 (default: 1.0) */
    outlineOpacity: number;
    /** Outline thickness in pixels (default: 2.0) */
    outlineThickness: number;
    /** Alpha value that indicates selection (default: 0.99) */
    selectionAlpha: number;
    /** Tolerance for alpha detection (default: 0.005) */
    alphaTolerance: number;
}
export declare const SELECTION_ALPHA = 0.99;
export declare class AlphaSelectionOutlinePass extends Pass {
    private resolution;
    private options;
    private outlineMaterial;
    private copyMaterial;
    private fsQuad;
    /** Fast bypass during camera movement */
    bypass: boolean;
    /** Whether there's any selection active */
    hasSelection: boolean;
    constructor(resolution: Vector2, options?: Partial<AlphaSelectionOutlineOptions>);
    setOptions(options: Partial<AlphaSelectionOutlineOptions>): void;
    render(renderer: WebGLRenderer, writeBuffer: WebGLRenderTarget, readBuffer: WebGLRenderTarget, _deltaTime?: number, _maskActive?: boolean): void;
    setSize(width: number, height: number): void;
    dispose(): void;
}
