import { ExtensionType } from '../../../../extensions/Extensions';
import { BufferResource } from '../../shared/buffer/BufferResource';
import { UniformGroup } from '../../shared/shader/UniformGroup';
import type { Shader } from '../../shared/shader/Shader';
import type { GlRenderingContext } from '../context/GlRenderingContext';
import type { WebGLRenderer } from '../WebGLRenderer';
import type { GlProgram } from './GlProgram';
import type { GlProgramData } from './GlProgramData';
export declare class GlShaderSystem {
    /** @ignore */
    static extension: {
        readonly type: readonly [ExtensionType.WebGLSystem];
        readonly name: "shader";
    };
    activeProgram: GlProgram;
    private _programDataHash;
    private readonly _renderer;
    private _gl;
    private _maxBindings;
    private _nextIndex;
    private _boundUniformsIdsToIndexHash;
    private _boundIndexToUniformsHash;
    constructor(renderer: WebGLRenderer);
    protected contextChange(gl: GlRenderingContext): void;
    bind(shader: Shader, skipSync?: boolean): void;
    private _updateUniformGroup;
    bindUniformBlock(uniformGroup: UniformGroup | BufferResource, name: string, index?: number): void;
    private _setProgram;
    getProgramData(program: GlProgram): GlProgramData;
    private _createProgramData;
    destroy(): void;
}
