/**
 * Copyright (c) 2018-2021 mol* contributors, licensed under MIT, See LICENSE file for more info.
 *
 * @author Alexander Rose <alexander.rose@weirdbyte.de>
 */
import { ICamera } from '../mol-canvas3d/camera';
import { Scene } from './scene';
import { WebGLContext } from './webgl/context';
import { GraphicsRenderVariant } from './webgl/render-item';
import { ParamDefinition as PD } from '../mol-util/param-definition';
import { Clipping } from '../mol-theme/clipping';
import { Texture } from './webgl/texture';
export interface RendererStats {
    programCount: number;
    shaderCount: number;
    attributeCount: number;
    elementsCount: number;
    framebufferCount: number;
    renderbufferCount: number;
    textureCount: number;
    vertexArrayCount: number;
    drawCount: number;
    instanceCount: number;
    instancedDrawCount: number;
}
interface Renderer {
    readonly stats: RendererStats;
    readonly props: Readonly<RendererProps>;
    clear: (toBackgroundColor: boolean) => void;
    clearDepth: () => void;
    update: (camera: ICamera) => void;
    renderPick: (group: Scene.Group, camera: ICamera, variant: GraphicsRenderVariant, depthTexture: Texture | null) => void;
    renderDepth: (group: Scene.Group, camera: ICamera, depthTexture: Texture | null) => void;
    renderMarkingDepth: (group: Scene.Group, camera: ICamera, depthTexture: Texture | null) => void;
    renderMarkingMask: (group: Scene.Group, camera: ICamera, depthTexture: Texture | null) => void;
    renderBlended: (group: Scene.Group, camera: ICamera, depthTexture: Texture | null) => void;
    renderBlendedOpaque: (group: Scene.Group, camera: ICamera, depthTexture: Texture | null) => void;
    renderBlendedTransparent: (group: Scene.Group, camera: ICamera, depthTexture: Texture | null) => void;
    renderBlendedVolumeOpaque: (group: Scene.Group, camera: ICamera, depthTexture: Texture | null) => void;
    renderBlendedVolumeTransparent: (group: Scene.Group, camera: ICamera, depthTexture: Texture | null) => void;
    renderWboitOpaque: (group: Scene.Group, camera: ICamera, depthTexture: Texture | null) => void;
    renderWboitTransparent: (group: Scene.Group, camera: ICamera, depthTexture: Texture | null) => void;
    setProps: (props: Partial<RendererProps>) => void;
    setViewport: (x: number, y: number, width: number, height: number) => void;
    setTransparentBackground: (value: boolean) => void;
    setDrawingBufferSize: (width: number, height: number) => void;
    setPixelRatio: (value: number) => void;
    dispose: () => void;
}
export declare const RendererParams: {
    backgroundColor: PD.Color;
    pickingAlphaThreshold: PD.Numeric;
    interiorDarkening: PD.Numeric;
    interiorColorFlag: PD.BooleanParam;
    interiorColor: PD.Color;
    highlightColor: PD.Color;
    selectColor: PD.Color;
    highlightStrength: PD.Numeric;
    selectStrength: PD.Numeric;
    markerPriority: PD.Select<number>;
    xrayEdgeFalloff: PD.Numeric;
    style: PD.Mapped<PD.NamedParams<PD.Normalize<unknown>, "flat"> | PD.NamedParams<PD.Normalize<unknown>, "metallic"> | PD.NamedParams<PD.Normalize<{
        lightIntensity: number;
        ambientIntensity: number;
        metalness: number;
        roughness: number;
        reflectivity: number;
    }>, "custom"> | PD.NamedParams<PD.Normalize<unknown>, "matte"> | PD.NamedParams<PD.Normalize<unknown>, "glossy"> | PD.NamedParams<PD.Normalize<unknown>, "plastic">>;
    clip: PD.Group<PD.Normalize<{
        variant: Clipping.Variant;
        objects: PD.Normalize<{
            type: any;
            invert: any;
            position: any;
            rotation: any;
            scale: any;
        }>[];
    }>>;
};
export declare type RendererProps = PD.Values<typeof RendererParams>;
export declare type Style = {
    lightIntensity: number;
    ambientIntensity: number;
    metalness: number;
    roughness: number;
    reflectivity: number;
};
export declare function getStyle(props: RendererProps['style']): Style;
declare namespace Renderer {
    function create(ctx: WebGLContext, props?: Partial<RendererProps>): Renderer;
}
export { Renderer };
