export interface IWindData {
    uMin: number;
    uMax: number;
    vMin: number;
    vMax: number;
    image: HTMLImageElement;
}
export interface IWind {
    width: number;
    height: number;
    fadeOpacity: number;
    speedFactor: number;
    dropRate: number;
    dropRateBump: number;
    setWind: (windData: IWindData) => void;
    draw: () => {
        d: Uint8Array;
        w: number;
        h: number;
    };
    updateParticelNum: (num: number) => void;
    updateWindDir: (uMin: number, uMax: number, vMin: number, vMax: number) => void;
    updateColorRampTexture: (rampColors: {
        [key: number]: string;
    }) => void;
    reSize: (width: number, height: number) => void;
    destroy: () => void;
}
export interface IWindProps {
    glContext: WebGLRenderingContext;
    imageWidth: number;
    imageHeight: number;
    fadeOpacity: number;
    speedFactor: number;
    dropRate: number;
    dropRateBump: number;
    rampColors: {
        [key: number]: string;
    };
}
export declare class Wind {
    width: number;
    height: number;
    pixels: Uint8Array;
    fadeOpacity: number;
    speedFactor: number;
    dropRate: number;
    dropRateBump: number;
    private gl;
    private drawProgram;
    private fullScreenProgram;
    private updateProgram;
    private rampColors;
    private numParticles;
    private numParticlesSize;
    private particleStateResolution;
    private quadBuffer;
    private particleIndexBuffer;
    private framebuffer;
    private colorRampTexture;
    private backgroundTexture;
    private screenTexture;
    private particleStateTexture0;
    private particleStateTexture1;
    private windTexture;
    private windData;
    constructor(options: IWindProps);
    init(): void;
    setWind(windData: IWindData): void;
    /**
     * 更新风场粒子数量
     * @param num
     */
    updateParticelNum(num: number): void;
    /**
     * 更新风场风向风速
     * @param uMin
     * @param uMax
     * @param vMin
     * @param vMax
     */
    updateWindDir(uMin: number, uMax: number, vMin: number, vMax: number): void;
    /**
     * update rampColors
     * @param rampColors
     */
    updateColorRampTexture(rampColors: {
        [key: number]: string;
    }): void;
    isColorChanged(rampColors: {
        [key: number]: string;
    }): boolean;
    reSize(width: number, height: number): void;
    draw(): {
        d: Uint8Array;
        w: number;
        h: number;
    };
    drawScreen(): void;
    drawFullTexture(texture: any, opacity: number): void;
    drawParticles(): void;
    updateParticles(): void;
    destroy(): void;
}
