import { Object3D } from 'three/webgpu'; import { BaseGroup, Model } from '../objects'; import { InstanceObject } from '../instances/InstanceObject'; import type { InteractionEventMap } from '../interactions/InteractionEvent'; export interface EditableGeometryBatchOptions { maxVerticesPerBatch?: number; maxIndicesPerBatch?: number; /** Bake the current pose of models with animation clips. Playing them later requires materialization. */ freezeAnimations?: boolean; } export interface EditableGeometryBatchStats { instances: number; sourceMeshes: number; batches: number; drawCallsSaved: number; vertices: number; indices: number; unsupportedInstances: number; unsupportedByReason: Record; } export interface EditableGeometryBatchSource { key: string; template: Model; instances: TInstance[]; } export interface UnsupportedEditableGeometryBatch extends EditableGeometryBatchSource { reasons: string[]; } export interface EditableGeometryBatchBuildResult { stats: EditableGeometryBatchStats; unsupported: UnsupportedEditableGeometryBatch[]; } export type EditableGeometryBatchEventMap = InteractionEventMap & { materialize: { instance: TInstance; object: Object3D; }; }; export declare class EditableGeometryBatchLayer extends BaseGroup> { #private; isEditableGeometryBatchLayer: boolean; type: string; readonly options: Required; readonly stats: EditableGeometryBatchStats; constructor(options?: EditableGeometryBatchOptions); addSource(source: EditableGeometryBatchSource): boolean; build(): EditableGeometryBatchBuildResult; materialize(instance: TInstance): Object3D | null; dispose(): void; }