import { TgdColor } from "../color";
import { TgdContext } from "../context";
import { TgdEvent } from "../event";
import type { TgdFilter } from "../filter";
import { TgdVec4 } from "../math";
import { TgdProgram } from "../program";
import { ArrayNumber4, type WebglImage, type WebglTexParameter } from "../types";
import { type WebglTextureParameters } from "../webgl";
import { type LoadBmpOptions } from "./types";
interface TgdTexture2DStorage {
    width: number;
    height: number;
    levels: number;
    flipY: boolean;
    /**
     * Do we want to use premultiplied alpha?
     * Default to `false`.
     */
    premultipliedAlpha: boolean;
    format: "R8 / RED / UNSIGNED_BYTE" | "R8_SNORM / RED / BYTE" | "R16F / RED / HALF_FLOAT" | "R16F / RED / FLOAT" | "R32F / RED / FLOAT" | "R8UI / RED_INTEGER / UNSIGNED_BYTE" | "R8I / RED_INTEGER / BYTE" | "R16UI / RED_INTEGER / UNSIGNED_SHORT" | "R16I / RED_INTEGER / SHORT" | "R32UI / RED_INTEGER / UNSIGNED_INT" | "R32I / RED_INTEGER / INT" | "RG8 / RG / UNSIGNED_BYTE" | "RG8_SNORM / RG / BYTE" | "RG16F / RG / HALF_FLOAT" | "RG16F / RG / FLOAT" | "RG32F / RG / FLOAT" | "RG8UI / RG_INTEGER / UNSIGNED_BYTE" | "RG8I / RG_INTEGER / BYTE" | "RG16UI / RG_INTEGER / UNSIGNED_SHORT" | "RG16I / RG_INTEGER / SHORT" | "RG32UI / RG_INTEGER / UNSIGNED_INT" | "RG32I / RG_INTEGER / INT" | "RGB8 / RGB / UNSIGNED_BYTE" | "SRGB8 / RGB / UNSIGNED_BYTE" | "RGB565 / RGB / UNSIGNED_BYTE" | "RGB565 / RGB / UNSIGNED_SHORT_5_6_5" | "RGB8_SNORM / RGB / BYTE" | "R11F_G11F_B10F / RGB / UNSIGNED_INT_10F_11F_11F_REV" | "R11F_G11F_B10F / RGB / HALF_FLOAT" | "R11F_G11F_B10F / RGB / FLOAT" | "RGB9_E5 / RGB / UNSIGNED_INT_5_9_9_9_REV" | "RGB9_E5 / RGB / HALF_FLOAT" | "RGB9_E5 / RGB / FLOAT" | "RGB16F / RGB / HALF_FLOAT" | "RGB16F / RGB / FLOAT" | "RGB32F / RGB / FLOAT" | "RGB8UI / RGB_INTEGER / UNSIGNED_BYTE" | "RGB8I / RGB_INTEGER / BYTE" | "RGB16UI / RGB_INTEGER / UNSIGNED_SHORT" | "RGB16I / RGB_INTEGER / SHORT" | "RGB32UI / RGB_INTEGER / UNSIGNED_INT" | "RGB32I / RGB_INTEGER / INT" | "RGBA8 / RGBA / UNSIGNED_BYTE" | "SRGB8_ALPHA8 / RGBA / UNSIGNED_BYTE" | "RGBA8_SNORM / RGBA / BYTE" | "RGB5_A1 / RGBA / UNSIGNED_BYTE" | "RGB5_A1 / RGBA / UNSIGNED_SHORT_5_5_5_1" | "RGB5_A1 / RGBA / UNSIGNED_INT_2_10_10_10_REV" | "RGBA4 / RGBA / UNSIGNED_BYTE" | "RGBA4 / RGBA / UNSIGNED_SHORT_4_4_4_4" | "RGB10_A2 / RGBA / UNSIGNED_INT_2_10_10_10_REV" | "RGBA16F / RGBA / HALF_FLOAT" | "RGBA16F / RGBA / FLOAT" | "RGBA32F / RGBA / FLOAT" | "RGBA8UI / RGBA_INTEGER / UNSIGNED_BYTE" | "RGBA8I / RGBA_INTEGER / BYTE" | "RGBA16UI / RGBA_INTEGER / UNSIGNED_SHORT" | "RGBA16I / RGBA_INTEGER / SHORT" | "RGBA32UI / RGBA_INTEGER / UNSIGNED_INT" | "RGBA32I / RGBA_INTEGER / INT" | "DEPTH_COMPONENT16 / DEPTH_COMPONENT / UNSIGNED_SHORT" | "DEPTH_COMPONENT16 / DEPTH_COMPONENT / UNSIGNED_INT" | "DEPTH_COMPONENT24 / DEPTH_COMPONENT / UNSIGNED_INT" | "DEPTH_COMPONENT32F / DEPTH_COMPONENT / FLOAT" | "DEPTH24_STENCIL8 / DEPTH_STENCIL / UNSIGNED_INT_24_8" | "DEPTH32F_STENCIL8 / DEPTH_STENCIL / FLOAT_32_UNSIGNED_INT_24_8_REV";
}
export interface TgdTexture2DOptions {
    name?: string;
    storage?: Partial<TgdTexture2DStorage>;
    params?: WebglTextureParameters;
    load?: WebglImage | string | LoadBmpOptions;
    filter?: TgdFilter;
    /**
     * The texture starts as a 1x1 black transparent pixel.
     * You can specify another color with this.
     */
    color?: ArrayNumber4 | TgdVec4 | TgdColor;
}
export declare class TgdTexture2D {
    readonly context: TgdContext;
    private readonly options;
    name: string;
    readonly gl: WebGL2RenderingContext;
    readonly eventChange: TgdEvent<TgdTexture2D>;
    private _texture;
    private _width;
    private _height;
    private readonly storage;
    private params;
    private videoUpdater;
    private static counter;
    constructor(context: TgdContext, options?: TgdTexture2DOptions);
    clone(name?: string): TgdTexture2D;
    get format(): TgdTexture2DStorage["format"];
    private set format(value);
    get internalFormat(): number;
    get sourceFormat(): number;
    get sourceType(): number;
    delete(): void;
    get width(): number;
    get height(): number;
    private createTexture;
    private splitFormat;
    resize(w: number, h: number): void;
    private checkError;
    get glTexture(): WebGLTexture;
    bind(): void;
    unbind(): void;
    loadVideo(url: string, options?: {
        onLoad?: () => void;
    }): this;
    loadBitmap(bmp: string | WebglImage | null | Promise<WebglImage | null> | undefined, options?: {
        level?: number;
        generateMipmap?: boolean;
        onLoad?: () => void;
    }): this;
    applyFilter(filter: TgdFilter): this;
    loadData(data: Uint8Array | Uint8ClampedArray | Float32Array, options: {
        width: number;
        height: number;
        level?: number;
        offset?: number;
        format?: TgdTexture2DStorage["format"];
    }): this;
    /**
     *
     * @param unit Unit to link the texture to
     * @param program The program or uniform block object that owns the uniform to update
     * @param uniformName The uniform that holds the texture
     */
    activate(unit: number, program?: TgdProgram, uniformName?: string): this;
    generateMipmap(): this;
    setParams(parameters: WebglTextureParameters): this;
    set textureBaseLevel(value: number);
    get textureBaseLevel(): number;
    set textureMaxLevel(value: number);
    get textureMaxLevel(): number;
    getParameter(parameter: WebglTexParameter): number | boolean | null;
    debug(title?: string): void;
}
export {};
//# sourceMappingURL=texture2d.d.ts.map