import { Color } from './color';
import { Texture } from './texture';
import { Buffer } from './buffer';
export declare class Program {
    private vertShaderSource;
    private fragShaderSource;
    private programs;
    constructor(vertShaderSource: string, fragShaderSource: string);
    _program(gl: WebGLRenderingContext): WebGLProgram;
    use(gl: WebGLRenderingContext): void;
    endUse(gl: WebGLRenderingContext): void;
    dispose(): void;
}
export declare class Uniform {
    private program;
    private name;
    private optional;
    private locations;
    constructor(program: Program, name: string, optional: boolean);
    _location(gl: WebGLRenderingContext): WebGLUniformLocation;
}
export declare class Uniform1f extends Uniform {
    constructor(program: Program, name: string, optional?: boolean);
    setData(gl: WebGLRenderingContext, x: number): void;
}
export declare class Uniform2f extends Uniform {
    constructor(program: Program, name: string, optional?: boolean);
    setData(gl: WebGLRenderingContext, x: number, y: number): void;
}
export declare class Uniform3f extends Uniform {
    constructor(program: Program, name: string, optional?: boolean);
    setData(gl: WebGLRenderingContext, x: number, y: number, z: number): void;
}
export declare class Uniform4f extends Uniform {
    constructor(program: Program, name: string, optional?: boolean);
    setData(gl: WebGLRenderingContext, x: number, y: number, z: number, w: number): void;
}
export declare class UniformMatrix4f extends Uniform {
    constructor(program: Program, name: string, optional?: boolean);
    setData(gl: WebGLRenderingContext, value: Float32Array, transpose?: boolean): void;
}
export declare class Uniform1i extends Uniform {
    constructor(program: Program, name: string, optional?: boolean);
    setData(gl: WebGLRenderingContext, x: number): void;
}
export declare class Uniform2i extends Uniform {
    constructor(program: Program, name: string, optional?: boolean);
    setData(gl: WebGLRenderingContext, x: number, y: number): void;
}
export declare class Uniform3i extends Uniform {
    constructor(program: Program, name: string, optional?: boolean);
    setData(gl: WebGLRenderingContext, x: number, y: number, z: number): void;
}
export declare class Uniform4i extends Uniform {
    constructor(program: Program, name: string, optional?: boolean);
    setData(gl: WebGLRenderingContext, x: number, y: number, z: number, w: number): void;
}
export declare class UniformColor extends Uniform {
    constructor(program: Program, name: string, optional?: boolean);
    setData(gl: WebGLRenderingContext, color: Color): void;
}
export declare class UniformSampler2D extends Uniform {
    private currentTexture;
    constructor(program: Program, name: string, optional?: boolean);
    setDataAndBind(gl: WebGLRenderingContext, textureUnit: number, texture: Texture): void;
    unbind(gl: WebGLRenderingContext): void;
}
export declare class Attribute {
    private program;
    private name;
    private locations;
    constructor(program: Program, name: string);
    _location(gl: WebGLRenderingContext): number;
    setDataAndEnable(gl: WebGLRenderingContext, buffer: Buffer, size: number, type: number, normalized?: boolean, stride?: number, offset?: number): void;
    disable(gl: WebGLRenderingContext): void;
}
