export type RenderQueueBucket = "opaque" | "mask" | "transparent";
export interface RenderQueueSortItem<T = unknown> {
    readonly item: T;
    readonly bucket: RenderQueueBucket;
    readonly depth: number;
    readonly pipelineKey?: string;
    readonly batchKey?: string;
    readonly instanceCount?: number;
    readonly renderOrder?: number;
}
export interface RenderQueueSortOptions {
    readonly transparentBackToFront?: boolean;
    readonly opaqueFrontToBack?: boolean;
    readonly groupOpaqueByPipeline?: boolean;
}
export interface RenderQueuePlan<T = unknown> {
    readonly items: readonly T[];
    readonly diagnostics: RenderQueueSortDiagnostics;
}
export interface RenderQueueSortDiagnostics {
    readonly total: number;
    readonly objectCount: number;
    readonly estimatedDrawCalls: number;
    readonly totalInstances: number;
    readonly batchableGroups: number;
    readonly largestBatch: number;
    readonly materialSwitches: number;
    readonly opaqueCount: number;
    readonly maskedCount: number;
    readonly transparentCount: number;
    readonly pipelineTransitions: number;
    readonly opaqueFrontToBack: boolean;
    readonly transparentBackToFront: boolean;
}
export declare function sortRenderQueueItems<T>(items: readonly RenderQueueSortItem<T>[], options?: RenderQueueSortOptions): RenderQueuePlan<T>;
export interface SortableRenderItem {
    readonly id: string;
    readonly materialBucket: RenderQueueBucket;
    readonly pipelineKey: string;
    readonly depth: number;
}
export declare function sortRenderItems(items: readonly SortableRenderItem[]): SortableRenderItem[];
//# sourceMappingURL=RenderItemSorting.d.ts.map