import type { GeometryAttributeLike } from '../../shared';
export interface GlAttribute extends Omit<GeometryAttributeLike, 'buffer'> {
    location: number;
}
export interface GlUniform {
    name: string;
    index: number;
    type: string;
    size: number;
    isArray: boolean;
    value: any;
}
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<GlProgramOptions>;
    readonly id: number;
    fragment: string;
    vertex: string;
    transformFeedbackVaryings?: {
        names: string[];
        bufferMode: 'separate' | 'interleaved';
    };
    _cacheKey?: string;
    attributes: Record<string, GlAttribute>;
    uniforms: Record<string, GlUniform>;
    constructor(options: GlProgramOptions);
    destroy(): void;
    static from(options: GlProgramOptions): GlProgram;
}
