import { default as VoxelScene } from '../Data/Models/VoxelScene';
import * as THREE from 'three';
export declare const MAX_TICK = 1000;
export interface VoxelRendererOptions {
    /** Stop accumulating after this many ticks (default 1000). */
    maxTick?: number;
    /**
     * Throttle the trace loop so the page doesn't monopolize the GPU.
     * Infinity (default) = one tick per animation frame; 0 = paused.
     */
    ticksPerSecond?: number;
    /** Called every 10 ticks and on completion. */
    onTick?: (tick: number, msElapsed: number) => void;
    onRendered?: () => void;
}
/**
 * Owns the WebGL2 path-tracing loop: two half-float ping-pong accumulation
 * targets, a trace pass and a copy-to-canvas pass, driven by its own rAF
 * loop. React stays out of the per-tick path.
 */
export declare class VoxelRenderer {
    private renderer;
    private traceMaterial;
    private displayMaterial;
    private traceScene;
    private displayScene;
    private passCamera;
    private targets;
    private readIndex;
    private tick;
    private startTime;
    private rafId;
    private running;
    private sceneTextures;
    private hasScene;
    private options;
    private lastTickAt;
    private lastFrameAt;
    private ticksPerFrame;
    /** Trace ticks per second; Infinity = every frame, 0 = paused. */
    ticksPerSecond: number;
    constructor(canvas: HTMLCanvasElement, options?: VoxelRendererOptions);
    get maxAtlasSize(): number;
    get currentTick(): number;
    get maxTick(): number;
    set maxTick(value: number);
    /** Next-event estimation toward emissive voxels (default on). */
    get emissiveSampling(): boolean;
    set emissiveSampling(enabled: boolean);
    setScene(scene: VoxelScene): void;
    setCamera(camera: THREE.PerspectiveCamera): void;
    setSize(width: number, height: number, pixelRatio: number): void;
    resetAccumulation(): void;
    start(): void;
    stop(): void;
    private renderFrame;
    captureBlob(type?: string, quality?: number): Promise<Blob | null>;
    dispose(): void;
}
