import { BoundsUnmodifiable } from './bounds';
export interface TextureHelper {
    target(gl: WebGLRenderingContext): number;
    init(gl: WebGLRenderingContext, target: number): void;
}
export declare class Texture {
    private helper;
    private textures;
    constructor(helper: TextureHelper);
    bind(gl: WebGLRenderingContext, textureUnit: number): void;
    unbind(gl: WebGLRenderingContext): void;
    dispose(): void;
}
export declare type ImageDrawer = (context: CanvasRenderingContext2D) => void;
export declare class FloatDataTexture2D extends Texture {
    private _w;
    private _h;
    get w(): number;
    get h(): number;
    constructor(w: number, h: number, array: Float32Array);
}
export declare class Texture2D extends Texture {
    private _w;
    private _h;
    get w(): number;
    get h(): number;
    constructor(w: number, h: number, minFilter: number, magFilter: number, draw: ImageDrawer);
}
export interface TextureDrawOptions {
    xAnchor?: number;
    yAnchor?: number;
    rotation_CCWRAD?: number;
    width?: number;
    height?: number;
}
export declare class TextureRenderer {
    private textureRenderer_VERTSHADER;
    private textureRenderer_FRAGSHADER;
    private program;
    private u_XyFrac;
    private u_Anchor;
    private u_Rotation_CCWRAD;
    private u_ImageSize;
    private u_ViewportSize;
    private u_Sampler;
    private a_ImageFrac;
    private imageFracData;
    private wViewport;
    private hViewport;
    constructor();
    begin(gl: WebGLRenderingContext, viewport: BoundsUnmodifiable): void;
    draw(gl: WebGLRenderingContext, texture: Texture2D, xFrac: number, yFrac: number, options?: TextureDrawOptions): void;
    end(gl: WebGLRenderingContext): void;
}
