import { BufferGeometry, InstancedBufferGeometry } from 'three/webgpu';
import { VOBufferPool } from './VOBufferPool.js';
import { VertexObjectDescriptor } from './VertexObjectDescriptor.js';
import { VertexObjectPool } from './VertexObjectPool.js';
import type { BufferLike, VertexAttributeUsageType, VertexObjectDescription } from './types.js';
type TouchBuffersType = {
    [Type in VertexAttributeUsageType]?: boolean;
};
type TouchInstancedBuffersType = {
    base?: TouchBuffersType;
    instanced?: TouchBuffersType;
};
export declare class InstancedVOBufferGeometry extends InstancedBufferGeometry {
    #private;
    readonly basePool?: VOBufferPool;
    readonly baseBuffers?: Map<string, BufferLike>;
    readonly baseBufferSerials: Map<string, number>;
    readonly instancedBufferSerials: Map<string, number>;
    readonly instancedPool: VOBufferPool;
    readonly instancedBuffers: Map<string, BufferLike>;
    readonly extraInstancedPools: Map<string, VOBufferPool>;
    readonly extraInstancedBuffers: Map<string, Map<string, BufferLike>>;
    readonly extraInstancedBufferSerials: Map<string, Map<string, number>>;
    constructor(...args: [VOBufferPool | VertexObjectDescriptor | VertexObjectDescription, number, BufferGeometry] | [
        VOBufferPool | VertexObjectDescriptor | VertexObjectDescription,
        number,
        VOBufferPool | VertexObjectDescriptor | VertexObjectDescription,
        number?
    ]);
    attachInstancedPool(name: string, pool: VertexObjectPool<any> | VertexObjectDescriptor | VertexObjectDescription, options?: {
        autoDispose?: boolean;
    }): VertexObjectPool<any>;
    detachInstancedPool(name: string): VOBufferPool | undefined;
    dispose(): void;
    touchAttributes(...attrNames: string[]): void;
    touchBuffers(bufferTypes: TouchInstancedBuffersType | TouchBuffersType): void;
    touch(...args: Array<string | TouchBuffersType | TouchInstancedBuffersType>): void;
    update(): void;
}
export {};
//# sourceMappingURL=InstancedVOBufferGeometry.d.ts.map