import { Box3, Material, Object3D, WebGLRenderer } from 'three'; import { type FilterMaterialOptions } from '../materials/Materials.js'; import { NodeRenderView } from '../tree/NodeRenderView.js'; import { MeshBatch } from './MeshBatch.js'; import { InstancedMeshBatch } from './InstancedMeshBatch.js'; import TextBatch from './TextBatch.js'; export declare enum GeometryType { MESH = 0, LINE = 1, POINT = 2, POINT_CLOUD = 3, TEXT = 4 } export interface DrawGroup { start: number; count: number; materialIndex: number; } /** TO DO: Unify point and mesh batch implementations */ export interface Batch { id: string; subtreeId: string; renderViews: NodeRenderView[]; batchMaterial: Material; renderObject: Object3D; geometryType: GeometryType; get bounds(): Box3; get drawCalls(): number; get minDrawCalls(): number; get materials(): Material[]; get groups(): DrawGroup[]; get triCount(): number; get pointCount(): number; get lineCount(): number; get vertCount(): number; getCount(): number; setBatchMaterial(material: Material): void; setBatchBuffers(range: BatchUpdateRange[]): void; setVisibleRange(range: BatchUpdateRange[]): void; getVisibleRange(): BatchUpdateRange; setDrawRanges(ranges: BatchUpdateRange[]): void; resetDrawRanges(): void; buildBatch(): Promise; getRenderView(index: number): NodeRenderView | null; getMaterialAtIndex(index: number): Material | null; getMaterial(rv: NodeRenderView): Material | null; getOpaque(): BatchUpdateRange; getTransparent(): BatchUpdateRange; getStencil(): BatchUpdateRange; getDepth(): BatchUpdateRange; onUpdate(deltaTime?: number): void; onRender?(renderer: WebGLRenderer): void; purge(): void; } export interface BatchUpdateRange { offset: number; count: number; material?: Material; materialOptions?: FilterMaterialOptions; } export declare const NoneBatchUpdateRange: BatchUpdateRange; export declare const AllBatchUpdateRange: BatchUpdateRange; export declare const INSTANCE_TRANSFORM_BUFFER_STRIDE = 16; export declare const INSTANCE_GRADIENT_BUFFER_STRIDE = 1; export declare const getNextBatchIndex: () => number; export type AcceleratedBatchTypes = MeshBatch | InstancedMeshBatch | TextBatch; export declare function isAcceleratedBatchType(batch: Batch): batch is AcceleratedBatchTypes; export declare function isNoneBatchUpdateRange(range: BatchUpdateRange): boolean; export declare function isAllBatchUpdateRange(range: BatchUpdateRange, totalCount?: number): boolean;