import type { BufferLike, GeometryLike, Topology } from '../../shared'; import type { GlProgram } from '../shader'; import type { WebGLRenderer } from '../WebGLRenderer'; import { GlSystem } from '../system'; export interface GlDrawOptions { topology?: Topology; size?: number; start?: number; instanceCount?: number; } export declare class GlGeometrySystem extends GlSystem { protected _geometryVaoHash: Record>; hasInstance: boolean; current: GeometryLike | null; currentVao: WebGLVertexArrayObject | null; install(renderer: WebGLRenderer): 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; }