import { Dimensions } from '@vertexvis/geometry';
import { Timing, TimingMeter } from '../meters';
import { StencilBufferManager, Viewport } from '../types';
import { Frame } from '../types/frame';
import { FrameRenderer } from './renderer';
export interface DrawFrame {
    canvas: CanvasRenderingContext2D;
    canvasDimensions: Dimensions.Dimensions;
    frame: Frame;
    viewport: Viewport;
    predicate?: () => boolean;
    beforeDraw?: VoidFunction;
}
export type CanvasRenderer = FrameRenderer<DrawFrame, Frame | undefined>;
export type ReportTimingsCallback = (timing: Timing[]) => void;
export declare function measureCanvasRenderer(meter: TimingMeter, renderer: CanvasRenderer, logFrameRate: boolean, callback: ReportTimingsCallback, intervalMs?: number): CanvasRenderer;
export declare function createCanvasRenderer(): CanvasRenderer;
export declare function debugStencilBuffer(stencilManager: StencilBufferManager, drawStencil: () => boolean, renderer: CanvasRenderer): CanvasRenderer;
