import { GLShader } from "gl-shader";
import { GLVAO } from "gl-vao";
import createBuffer from "gl-buffer";
import createTexture from "gl-texture2d";
declare type GLBuffer = ReturnType<typeof createBuffer>;
declare type Mat4 = [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number];
declare type Position = [number, number, number];
export declare type DrawParam = {
    model?: Mat4;
    view?: Mat4;
    projection: Mat4;
};
export declare type GLPlaneOption = {
    gl: WebGLRenderingContext;
    model?: Mat4;
    view?: Mat4;
    projection?: Mat4;
    opacity?: number;
    points: [Position, Position, Position, Position];
    texture?: HTMLImageElement;
};
export declare class GLPlane {
    bounds: number[][];
    option: Required<Omit<GLPlaneOption, "texture">> & {
        texture?: HTMLImageElement;
    };
    vao: GLVAO;
    vertextBuffer: GLBuffer;
    trangleShader: GLShader<{
        model: Mat4;
        view: Mat4;
        projection: Mat4;
    }, "position">;
    texture: ReturnType<typeof createTexture>;
    constructor(opt: GLPlaneOption);
    private getVertexCoords;
    private updateBounds;
    pick(): null;
    isOpaque(): boolean;
    isTransparent(): boolean;
    update(opt: Partial<GLPlaneOption>): void;
    draw(param: DrawParam): void;
    drawTransparent(param: DrawParam): void;
}
export {};
