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<TGeometry extends BufferGeometry = BufferGeometry, TMaterial extends Material | Material[] = Material | Material[]> 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<void>;
    abstract getRenderView(index: number): NodeRenderView | null;
    abstract getMaterialAtIndex(index: number): Material | null;
    getMaterial(rv: NodeRenderView): Material | null;
    purge(): void;
}
