import { Material, Object3D, BufferGeometry, BufferAttribute, Box3 } from 'three'; import { NodeRenderView } from '../../index.js'; import { type Batch, type BatchUpdateRange, GeometryType } from './Batch.js'; import { type DrawGroup } from './Batch.js'; export declare abstract class Primitive extends Object3D { geometry: TGeometry; material: TMaterial; visible: boolean; } export declare abstract class PrimitiveBatch implements Batch { id: string; subtreeId: string; renderViews: NodeRenderView[]; batchMaterial: Material; protected abstract primitive: Primitive; protected gradientIndexBuffer: BufferAttribute; protected needsShuffle: boolean; abstract get geometryType(): GeometryType; abstract get bounds(): Box3; abstract get minDrawCalls(): number; abstract get triCount(): number; abstract get pointCount(): number; abstract get lineCount(): number; get materials(): Material[]; get groups(): DrawGroup[]; set groups(value: DrawGroup[]); get renderObject(): Object3D; get drawCalls(): number; get vertCount(): number; getCount(): number; setBatchMaterial(material: Material): void; onUpdate(): void; setVisibleRange(ranges: BatchUpdateRange[]): void; getVisibleRange(): BatchUpdateRange; getOpaque(): BatchUpdateRange; getDepth(): BatchUpdateRange; getTransparent(): BatchUpdateRange; getStencil(): BatchUpdateRange; setBatchBuffers(ranges: BatchUpdateRange[]): void; protected cleanMaterials(): void; protected abstract getCurrentIndexBuffer(): BufferAttribute; protected abstract getNextIndexBuffer(): BufferAttribute; protected abstract shuffleMaterialOrder(a: DrawGroup, b: DrawGroup): number; private shuffleDrawGroups; protected abstract updateGradientIndexBufferData(start: number, end: number, value: number): { minIndex: number; maxIndex: number; }; protected updateGradientIndexBuffer(rangeMin?: number, rangeMax?: number): void; abstract setDrawRanges(ranges: BatchUpdateRange[]): void; resetDrawRanges(): void; abstract buildBatch(): Promise; abstract getRenderView(index: number): NodeRenderView | null; abstract getMaterialAtIndex(index: number): Material | null; getMaterial(rv: NodeRenderView): Material | null; purge(): void; }