export interface Poolable {
    /** Reset the object state for reuse. */
    reset(): void;
}
export declare class ObjectPool<T extends Poolable> {
    private pool;
    private active;
    private factory;
    private maxSize;
    constructor(factory: () => T, prewarm?: number, maxSize?: number);
    acquire(): T;
    release(obj: T): void;
    releaseAll(): void;
    activeCount(): number;
    pooledCount(): number;
    totalCount(): number;
}
export type AssetPriority = 'critical' | 'high' | 'normal' | 'low';
export interface StreamRequest {
    id: string;
    url: string;
    priority: AssetPriority;
    loaded: boolean;
    progress: number;
    data: unknown;
    error: string | null;
}
export declare class AssetStreamer {
    private queue;
    private loading;
    private loaded;
    private maxConcurrent;
    constructor(maxConcurrent?: number);
    enqueue(id: string, url: string, priority?: AssetPriority): StreamRequest;
    isLoaded(id: string): boolean;
    get(id: string): unknown;
    private processQueue;
    private loadAsset;
    getPendingCount(): number;
    getLoadedCount(): number;
    clear(): void;
}
export interface LODLevel {
    /** Max distance for this LOD. */
    distance: number;
    /** Asset or mesh ID. */
    assetId: string;
    /** Vertex reduction factor (1 = full, 0.5 = half polys). */
    quality: number;
}
export interface LODGroup {
    entityId: number;
    levels: LODLevel[];
    currentLevel: number;
}
export declare function selectLODLevel(group: LODGroup, distance: number): number;
export declare function updateLODGroups(groups: LODGroup[], cameraPos: {
    x: number;
    y: number;
    z: number;
}, positions: Map<number, {
    x: number;
    y: number;
    z: number;
}>): void;
export interface AABB {
    minX: number;
    minY: number;
    minZ: number;
    maxX: number;
    maxY: number;
    maxZ: number;
}
export interface FrustumPlane {
    nx: number;
    ny: number;
    nz: number;
    d: number;
}
export declare function aabbInFrustum(aabb: AABB, planes: FrustumPlane[]): boolean;
/** Simple 2D frustum check for 2D camera views. */
export declare function rectInView(rx: number, ry: number, rw: number, rh: number, viewX: number, viewY: number, viewW: number, viewH: number): boolean;
export declare function measureMemory(): {
    heapUsed: number;
    heapTotal: number;
} | null;
export declare function formatBytes(bytes: number): string;
