import type { BufferLike, GeometryLike, Topology } from '../../shared';
import type { GlRenderer } from '../GlRenderer';
import type { GlProgram } from '../shader';
import { GlSystem } from '../system';
export interface GlDrawOptions {
    topology?: Topology;
    size?: number;
    start?: number;
    instanceCount?: number;
}
export declare class GlGeometrySystem extends GlSystem {
    protected _geometryVaoHash: Record<number, Record<string, WebGLVertexArrayObject>>;
    hasInstance: boolean;
    current: GeometryLike | null;
    currentVao: WebGLVertexArrayObject | null;
    install(renderer: GlRenderer): void;
    bind(geometry: GeometryLike | null, program?: GlProgram): void;
    protected getVao(geometry: GeometryLike, program: GlProgram): WebGLVertexArrayObject;
    protected _getBuffers(geometry: GeometryLike): BufferLike[];
    protected _ensureAttributes(geometry: GeometryLike, program: GlProgram, buffers: BufferLike[]): void;
    protected _createVao(geometry: GeometryLike, program: GlProgram): WebGLVertexArrayObject;
    protected _activateVao(geometry: GeometryLike, glProgram: GlProgram): void;
    updateBuffers(): void;
    protected _getSignature(geometry: GeometryLike, program: GlProgram): string;
    unbind(): void;
    getSize(geometry: GeometryLike): number;
    draw(options?: GlDrawOptions): this;
    reset(): void;
}
