import { Vector3 } from '@vertexvis/geometry';
import { Disposable } from '@vertexvis/utils';
import regl from 'regl';
import { Drawable } from '../transforms/drawable';
import { Frame, Viewport } from '../types';
export declare const DEFAULT_PERSPECTIVE_MESH_SCALAR = 0.005;
export declare const DEFAULT_ORTHOGRAPHIC_MESH_SCALAR = 0.00625;
export declare const TRIANGLE_SIZE_CANVAS_AREA_ADJUSTMENT_NUMERATOR = 1580000;
export declare const TRIANGLE_SIZE_CANVAS_AREA_ADJUSTMENT_DENOMINATOR = 520000;
export declare const TRIANGLE_SIZE_CANVAS_HEIGHT_ADJUSTMENT_NUMERATOR = 950;
export declare const TRIANGLE_SIZE_CANVAS_HEIGHT_ADJUSTMENT_DENOMINATOR = 45;
export declare abstract class ReglComponent implements Disposable {
    protected canvasElement: HTMLCanvasElement;
    protected reglCommand?: regl.Regl;
    protected reglFrameDisposable?: regl.Cancellable;
    protected availableElements: Drawable[];
    protected drawableElements: Drawable[];
    protected frame?: Frame;
    protected viewport: Viewport;
    constructor(canvasElement: HTMLCanvasElement);
    dispose(): void;
    updateFrame(frame: Frame, redraw?: boolean): void;
    updateDimensions(canvasElement: HTMLCanvasElement): void;
    updateAndDraw(): void;
    /**
     * @internal - visible for testing
     */
    getDrawableElements(): Drawable[];
    protected draw(): void;
    protected clear(): void;
    protected sortMeshes(frame: Frame, ...drawableElements: Array<Drawable | undefined>): void;
    protected computeTriangleSize(position: Vector3.Vector3, frame: Frame): number;
    protected abstract createOrUpdateElements(): void;
    protected abstract hasData(): boolean;
}
