import type { GeometryAttributeLike } from '../../shared'; export interface GlAttribute extends Omit { location: number; } export interface GlUniform { name: string; index: number; type: string; size: number; isArray: boolean; value: any; /** cached uniform location, looked up lazily on first upload (undefined = not yet resolved) */ location?: WebGLUniformLocation | null; } export interface GlProgramOptions { fragment: string; vertex: string; name?: string; preferredVertexPrecision?: string; preferredFragmentPrecision?: string; transformFeedbackVaryings?: { names: string[]; bufferMode: 'separate' | 'interleaved'; }; } export declare class GlProgram { static defaultOptions: Partial; readonly id: number; fragment: string; vertex: string; transformFeedbackVaryings?: { names: string[]; bufferMode: 'separate' | 'interleaved'; }; _cacheKey?: string; attributes: Record; uniforms: Record; constructor(options: GlProgramOptions); destroy(): void; static from(options: GlProgramOptions): GlProgram; }