import { Box3, DirectionalLight, Material, Object3D, Plane, Scene, Sphere, Texture, Vector3 } from 'three';
import { Batch } from './batching/Batch';
import Batcher from './batching/Batcher';
import Input from './input/Input';
import { Intersections } from './Intersections';
import { NodeRenderView } from './tree/NodeRenderView';
import { Viewer } from './Viewer';
import { TreeNode } from './tree/WorldTree';
import { ObjectLayers, SunLightConfiguration } from '../IViewer';
import { Pipeline, PipelineOptions } from './pipeline/Pipeline';
import { Shadowcatcher } from './Shadowcatcher';
import { ExtendedIntersection } from './objects/SpeckleRaycaster';
import { BatchObject } from './batching/BatchObject';
import { ICameraProvider } from './extensions/core-extensions/Providers';
import { RenderMaterial, DisplayStyle, MaterialOptions, FilterMaterial } from './materials/Materials';
import { SpeckleWebGLRenderer } from './objects/SpeckleWebGLRenderer';
export declare class RenderingStats {
    private renderTimeAcc;
    private renderTimeSamples;
    private readonly renderTimeMaxSamples;
    private renderTimeStart;
    renderTime: number;
    objects: number;
    batchCount: number;
    drawCalls: number;
    trisCount: number;
    vertCount: number;
    batchDetails: Array<{
        drawCalls: number;
        minDrawCalls: number;
        tris: number;
        verts: number;
    }>;
    frameStart(): void;
    frameEnd(): void;
}
export default class SpeckleRenderer {
    private readonly SHOW_HELPERS;
    private readonly IGNORE_ZERO_OPACITY_OBJECTS;
    SHOW_BVH: boolean;
    private container;
    private _renderer;
    private _renderinStats;
    _scene: Scene;
    private _needsRender;
    private rootGroup;
    batcher: Batcher;
    private _intersections;
    input: Input;
    private sun;
    private sunConfiguration;
    private sunTarget;
    viewer: Viewer;
    pipeline: Pipeline;
    private _shadowcatcher;
    private cancel;
    private _cameraProvider;
    private _clippingPlanes;
    private _clippingVolume;
    private _renderOverride;
    /********************************
     * Renderer and rendering flags */
    get renderer(): SpeckleWebGLRenderer;
    set needsRender(value: boolean);
    set shadowMapNeedsUpdate(value: boolean);
    /**********************
     * Bounds and volumes */
    get sceneBox(): Box3;
    get sceneSphere(): Sphere;
    get sceneCenter(): Vector3;
    get clippingVolume(): Box3;
    set clippingVolume(box: Box3);
    /*****************
     * Clipping planes */
    get clippingPlanes(): Plane[];
    set clippingPlanes(value: Plane[]);
    /****************
     * Common Objects */
    get allObjects(): Object3D<import("three").Event>;
    subtree(subtreeId: string): Object3D<import("three").Event>;
    get scene(): Scene;
    /********
     * Lights */
    get sunLight(): DirectionalLight;
    set indirectIBL(texture: Texture);
    set indirectIBLIntensity(value: number);
    /********
     * Camera */
    get cameraProvider(): ICameraProvider;
    set cameraProvider(value: ICameraProvider);
    get renderingCamera(): import("three").PerspectiveCamera | import("three").OrthographicCamera;
    /**********
     * Pipeline */
    set pipelineOptions(value: PipelineOptions);
    get pipelineOptions(): PipelineOptions;
    get shadowcatcher(): Shadowcatcher;
    /**************
     * Intersections */
    get intersections(): Intersections;
    /*****************
     * Rendering Stats */
    get renderingStats(): RenderingStats;
    constructor(viewer: Viewer /** TEMPORARY */);
    create(container: HTMLElement): void;
    update(deltaTime: number): void;
    private updateRTEShadowBuffers;
    private updateRTEShadows;
    private updateTransforms;
    private updateFrustum;
    resetPipeline(): void;
    render(): void;
    resize(width: number, height: number): void;
    addRenderTree(subtreeId: string): AsyncGenerator<any, void, unknown>;
    private addBatch;
    removeRenderTree(subtreeId: string): void;
    cancelRenderTree(subtreeId: string): void;
    setMaterial(rvs: NodeRenderView[], material: Material): any;
    setMaterial(rvs: NodeRenderView[], material: RenderMaterial & DisplayStyle & MaterialOptions): any;
    setMaterial(rvs: NodeRenderView[], material: FilterMaterial): any;
    private setMaterialInstance;
    private setFilterMaterial;
    private setDataMaterial;
    private flattenDrawRanges;
    getMaterial(rv: NodeRenderView): Material;
    getBatchMaterial(rv: NodeRenderView): Material;
    resetMaterials(): void;
    getBatch(id: string): Batch;
    updateClippingPlanes(): void;
    updateShadowCatcher(): void;
    private addDirectLights;
    updateDirectLights(): void;
    setSunLightConfiguration(config: SunLightConfiguration): void;
    updateHelpers(): void;
    queryHits(results: Array<ExtendedIntersection>): Array<{
        node: TreeNode;
        point: Vector3;
    }>;
    queryHitIds(results: Array<ExtendedIntersection>): Array<{
        nodeId: string;
        point: Vector3;
    }>;
    renderViewFromIntersection(intersection: ExtendedIntersection): NodeRenderView;
    private onClick;
    private onDoubleClick;
    boxFromObjects(objectIds: string[]): Box3;
    screenToNDC(clientX: number, clientY: number, width?: number, height?: number): {
        x: number;
        y: number;
    };
    NDCToScreen(clientX: number, clientY: number, width?: number, height?: number): {
        x: number;
        y: number;
    };
    debugShowBatches(): void;
    getBatchIds(): any[];
    getBatchSize(batchId: string): number;
    isolateBatch(batchId: string): void;
    getObjects(): BatchObject[];
    getObject(rv: NodeRenderView): BatchObject;
    enableLayers(layers: ObjectLayers[], value: boolean): void;
}
