@luma.gl/engine
Version:
3D Engine Components for luma.gl
71 lines • 3.4 kB
TypeScript
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