import { Device, Framebuffer } from '@luma.gl/core';
import { ShaderInputs } from "../../shader-inputs.js";
import { pickingUniforms } from "./picking-uniforms.js";
declare const COLOR_PICKING_MAX_OBJECT_INDEX = 16777214;
declare const COLOR_PICKING_MAX_BATCH_INDEX = 254;
/** Information about picked object */
export type PickInfo = {
    batchIndex: number | null;
    objectIndex: number | null;
};
export type PickingMode = 'auto' | 'index' | 'color';
export type ResolvedPickingMode = Exclude<PickingMode, 'auto'>;
/** @deprecated Use `PickingMode`. */
export type PickingBackend = PickingMode;
/** @deprecated Use `ResolvedPickingMode`. */
export type ResolvedPickingBackend = ResolvedPickingMode;
export type PickingManagerProps = {
    /** Shader inputs from models to pick */
    shaderInputs?: ShaderInputs<{
        picking: typeof pickingUniforms.props;
    }>;
    /** Callback */
    onObjectPicked?: (info: PickInfo) => void;
    /** Select a picking mode. Defaults to `color`. Use `auto` to prefer `index` when supported. */
    mode?: PickingMode;
    /** @deprecated Use `mode`. */
    backend?: PickingBackend;
};
export declare function resolvePickingMode(deviceType: Device['type'], mode?: PickingMode, indexPickingSupported?: boolean): ResolvedPickingMode;
export declare function supportsIndexPicking(device: Device): boolean;
/** @deprecated Use `resolvePickingMode`. */
export declare const resolvePickingBackend: typeof resolvePickingMode;
export declare function decodeIndexPickInfo(pixelData: Int32Array): PickInfo;
export declare function decodeColorPickInfo(pixelData: Uint8Array): PickInfo;
/**
 * Helper class for using object picking with backend-specific readback.
 * @todo Support multiple models
 * @todo Switching picking module
 */
export declare class PickingManager {
    device: Device;
    props: Required<PickingManagerProps>;
    mode: ResolvedPickingMode;
    /** Info from latest pick operation */
    pickInfo: PickInfo;
    /** Framebuffer used for picking */
    framebuffer: Framebuffer | null;
    static defaultProps: Required<PickingManagerProps>;
    constructor(device: Device, props: PickingManagerProps);
    destroy(): void;
    getFramebuffer(): Framebuffer;
    /** Clear highlighted / picked object */
    clearPickState(): void;
    /** Prepare for rendering picking colors */
    beginRenderPass(): import("@luma.gl/core").RenderPass;
    updatePickInfo(mousePosition: [number, number]): Promise<PickInfo | null>;
    /**
     * Get pick position in device pixel range
     * use the center pixel location in device pixel range
     */
    getPickPosition(mousePosition: [number, number]): [number, number];
    protected createIndexFramebuffer(): Framebuffer;
    protected createColorFramebuffer(): Framebuffer;
    protected setPickingProps(props: Partial<typeof pickingUniforms.props>): void;
    protected readPickInfo(framebuffer: Framebuffer, pickPosition: [number, number]): Promise<PickInfo | null>;
    protected readIndexPickInfo(framebuffer: Framebuffer, [pickX, pickY]: [number, number]): Promise<PickInfo | null>;
    protected readColorPickInfo(framebuffer: Framebuffer, [pickX, pickY]: [number, number]): Promise<PickInfo | null>;
    protected hasPickInfoChanged(pickInfo: PickInfo): boolean;
}
export { COLOR_PICKING_MAX_BATCH_INDEX, COLOR_PICKING_MAX_OBJECT_INDEX };
//# sourceMappingURL=picking-manager.d.ts.map