import type { Framebuffer } from '@luma.gl/core';
import Pass from './pass';
import type Viewport from '../viewports/viewport';
import type View from '../views/view';
import type Layer from '../lib/layer';
import type { Effect } from '../lib/effect';
export type Rect = {
    x: number;
    y: number;
    width: number;
    height: number;
};
export type LayersPassRenderOptions = {
    /** @deprecated TODO v9 recommend we rename this to framebuffer to minimize confusion */
    target?: Framebuffer | null;
    isPicking?: boolean;
    pass: string;
    layers: Layer[];
    viewports: Viewport[];
    onViewportActive?: (viewport: Viewport) => void;
    cullRect?: Rect;
    views?: Record<string, View>;
    effects?: Effect[];
    /** If true, recalculates render index (z) from 0. Set to false if a stack of layers are rendered in multiple passes. */
    clearStack?: boolean;
    clearCanvas?: boolean;
    clearColor?: number[];
    layerFilter?: ((context: FilterContext) => boolean) | null;
    moduleParameters?: any;
    /** Stores returned results from Effect.preRender, for use downstream in the render pipeline */
    preRenderStats?: Record<string, any>;
};
type DrawLayerParameters = {
    shouldDrawLayer: boolean;
    layerRenderIndex?: number;
    moduleParameters?: any;
    layerParameters?: any;
};
export type FilterContext = {
    layer: Layer;
    viewport: Viewport;
    isPicking: boolean;
    renderPass: string;
    cullRect?: Rect;
};
export type RenderStats = {
    totalCount: number;
    visibleCount: number;
    compositeCount: number;
    pickableCount: number;
};
/** A Pass that renders all layers */
export default class LayersPass extends Pass {
    _lastRenderIndex: number;
    render(options: LayersPassRenderOptions): any;
    /** Draw a list of layers in a list of viewports */
    private _drawLayers;
    protected _getDrawLayerParams(viewport: Viewport, { layers, pass, isPicking, layerFilter, cullRect, effects, moduleParameters }: LayersPassRenderOptions, 
    /** Internal flag, true if only used to determine whether each layer should be drawn */
    evaluateShouldDrawOnly?: boolean): DrawLayerParameters[];
    private _drawLayersInViewport;
    shouldDrawLayer(layer: Layer): boolean;
    protected getModuleParameters(layer: Layer, effects?: Effect[]): any;
    protected getLayerParameters(layer: Layer, layerIndex: number, viewport: Viewport): any;
    private _shouldDrawLayer;
    private _getModuleParameters;
}
export declare function layerIndexResolver(startIndex?: number, layerIndices?: Record<string, number>): (layer: Layer, isDrawn: boolean) => number;
export {};
//# sourceMappingURL=layers-pass.d.ts.map