/**
 * Copyright (c) 2018-2022 mol* contributors, licensed under MIT, See LICENSE file for more info.
 *
 * @author Alexander Rose <alexander.rose@weirdbyte.de>
 */
export declare type GLRenderingContext = WebGLRenderingContext | WebGL2RenderingContext;
export declare function isWebGL(gl: any): gl is WebGLRenderingContext;
export declare function isWebGL2(gl: any): gl is WebGL2RenderingContext;
export interface COMPAT_instanced_arrays {
    drawArraysInstanced(mode: number, first: number, count: number, primcount: number): void;
    drawElementsInstanced(mode: number, count: number, type: number, offset: number, primcount: number): void;
    vertexAttribDivisor(index: number, divisor: number): void;
    readonly VERTEX_ATTRIB_ARRAY_DIVISOR: number;
}
export declare function getInstancedArrays(gl: GLRenderingContext): COMPAT_instanced_arrays | null;
export interface COMPAT_standard_derivatives {
    readonly FRAGMENT_SHADER_DERIVATIVE_HINT: number;
}
export declare function getStandardDerivatives(gl: GLRenderingContext): COMPAT_standard_derivatives | null;
export interface COMPAT_element_index_uint {
}
export declare function getElementIndexUint(gl: GLRenderingContext): COMPAT_element_index_uint | null;
export interface COMPAT_vertex_array_object {
    readonly VERTEX_ARRAY_BINDING: number;
    bindVertexArray(arrayObject: WebGLVertexArrayObject | null): void;
    createVertexArray(): WebGLVertexArrayObject | null;
    deleteVertexArray(arrayObject: WebGLVertexArrayObject): void;
    isVertexArray(value: any): value is WebGLVertexArrayObject;
}
export declare function getVertexArrayObject(gl: GLRenderingContext): COMPAT_vertex_array_object | null;
export interface COMPAT_texture_float {
}
export declare function getTextureFloat(gl: GLRenderingContext): COMPAT_texture_float | null;
export interface COMPAT_texture_float_linear {
}
export declare function getTextureFloatLinear(gl: GLRenderingContext): COMPAT_texture_float_linear | null;
export interface COMPAT_texture_half_float {
    readonly HALF_FLOAT: number;
}
export declare function getTextureHalfFloat(gl: GLRenderingContext): COMPAT_texture_half_float | null;
export interface COMPAT_texture_half_float_linear {
}
export declare function getTextureHalfFloatLinear(gl: GLRenderingContext): COMPAT_texture_half_float_linear | null;
export interface COMPAT_blend_minmax {
    readonly MIN: number;
    readonly MAX: number;
}
export declare function getBlendMinMax(gl: GLRenderingContext): COMPAT_blend_minmax | null;
export interface COMPAT_frag_depth {
}
export declare function getFragDepth(gl: GLRenderingContext): COMPAT_frag_depth | null;
export interface COMPAT_color_buffer_float {
    readonly RGBA32F: number;
}
export declare function getColorBufferFloat(gl: GLRenderingContext): COMPAT_color_buffer_float | null;
export interface COMPAT_color_buffer_half_float {
    readonly RGBA16F: number;
}
export declare function getColorBufferHalfFloat(gl: GLRenderingContext): COMPAT_color_buffer_half_float | null;
export interface COMPAT_draw_buffers {
    drawBuffers(buffers: number[]): void;
    readonly COLOR_ATTACHMENT0: number;
    readonly COLOR_ATTACHMENT1: number;
    readonly COLOR_ATTACHMENT2: number;
    readonly COLOR_ATTACHMENT3: number;
    readonly COLOR_ATTACHMENT4: number;
    readonly COLOR_ATTACHMENT5: number;
    readonly COLOR_ATTACHMENT6: number;
    readonly COLOR_ATTACHMENT7: number;
    readonly DRAW_BUFFER0: number;
    readonly DRAW_BUFFER1: number;
    readonly DRAW_BUFFER2: number;
    readonly DRAW_BUFFER3: number;
    readonly DRAW_BUFFER4: number;
    readonly DRAW_BUFFER5: number;
    readonly DRAW_BUFFER6: number;
    readonly DRAW_BUFFER7: number;
    readonly MAX_COLOR_ATTACHMENTS: number;
    readonly MAX_DRAW_BUFFERS: number;
}
export declare function getDrawBuffers(gl: GLRenderingContext): COMPAT_draw_buffers | null;
export interface COMPAT_shader_texture_lod {
}
export declare function getShaderTextureLod(gl: GLRenderingContext): COMPAT_shader_texture_lod | null;
export interface COMPAT_depth_texture {
    readonly UNSIGNED_INT_24_8: number;
}
export declare function getDepthTexture(gl: GLRenderingContext): COMPAT_depth_texture | null;
export interface COMPAT_sRGB {
    readonly FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING: number;
    readonly SRGB8_ALPHA8: number;
    readonly SRGB8: number;
    readonly SRGB: number;
}
export declare function getSRGB(gl: GLRenderingContext): COMPAT_sRGB | null;
export interface COMPAT_disjoint_timer_query {
    /** A GLint indicating the number of bits used to hold the query result for the given target. */
    QUERY_COUNTER_BITS: number;
    /** A WebGLQuery object, which is the currently active query for the given target. */
    CURRENT_QUERY: number;
    /** A GLuint64EXT containing the query result. */
    QUERY_RESULT: number;
    /** A GLboolean indicating whether or not a query result is available. */
    QUERY_RESULT_AVAILABLE: number;
    /** Elapsed time (in nanoseconds). */
    TIME_ELAPSED: number;
    /** The current time. */
    TIMESTAMP: number;
    /** A GLboolean indicating whether or not the GPU performed any disjoint operation. */
    GPU_DISJOINT: number;
    /** Creates a new WebGLTimerQueryEXT. */
    createQuery: () => WebGLQuery;
    /** Deletes a given WebGLTimerQueryEXT. */
    deleteQuery: (query: WebGLQuery) => void;
    /** Returns true if a given object is a valid WebGLTimerQueryEXT. */
    isQuery: (query: WebGLQuery) => boolean;
    /** The timer starts when all commands prior to beginQueryEXT have been fully executed. */
    beginQuery: (target: number, query: WebGLQuery) => void;
    /** The timer stops when all commands prior to endQueryEXT have been fully executed. */
    endQuery: (target: number) => void;
    /** Records the current time into the corresponding query object. */
    queryCounter: (query: WebGLQuery, target: number) => void;
    /** Returns information about a query target. */
    getQuery: (target: number, pname: number) => WebGLQuery | number;
    /** Return the state of a query object. */
    getQueryParameter: (query: WebGLQuery, pname: number) => number | boolean;
}
export declare function getDisjointTimerQuery(gl: GLRenderingContext): COMPAT_disjoint_timer_query | null;
export declare function getNoNonInstancedActiveAttribs(gl: GLRenderingContext): boolean;
export declare function testColorBuffer(gl: GLRenderingContext, type: number): boolean;
