export const READ_BUFFER: number = 0x0C02;
export const UNPACK_ROW_LENGTH: number = 0x0CF2;
export const UNPACK_SKIP_ROWS: number = 0x0CF3;
export const UNPACK_SKIP_PIXELS: number = 0x0CF4;
export const PACK_ROW_LENGTH: number = 0x0D02;
export const PACK_SKIP_ROWS: number = 0x0D03;
export const PACK_SKIP_PIXELS: number = 0x0D04;
export const COLOR: number = 0x1800;
export const DEPTH: number = 0x1801;
export const STENCIL: number = 0x1802;
export const RED: number = 0x1903;
export const RGB8: number = 0x8051;
export const RGBA8: number = 0x8058;
export const RGB10_A2: number = 0x8059;
export const TEXTURE_BINDING_3D: number = 0x806A;
export const UNPACK_SKIP_IMAGES: number = 0x806D;
export const UNPACK_IMAGE_HEIGHT: number = 0x806E;
export const TEXTURE_3D: number = 0x806F;
export const TEXTURE_WRAP_R: number = 0x8072;
export const MAX_3D_TEXTURE_SIZE: number = 0x8073;
export const UNSIGNED_INT_2_10_10_10_REV: number = 0x8368;
export const MAX_ELEMENTS_VERTICES: number = 0x80E8;
export const MAX_ELEMENTS_INDICES: number = 0x80E9;
export const TEXTURE_MIN_LOD: number = 0x813A;
export const TEXTURE_MAX_LOD: number = 0x813B;
export const TEXTURE_BASE_LEVEL: number = 0x813C;
export const TEXTURE_MAX_LEVEL: number = 0x813D;
export const MIN: number = 0x8007;
export const MAX: number = 0x8008;
export const DEPTH_COMPONENT24: number = 0x81A6;
export const MAX_TEXTURE_LOD_BIAS: number = 0x84FD;
export const TEXTURE_COMPARE_MODE: number = 0x884C;
export const TEXTURE_COMPARE_FUNC: number = 0x884D;
export const CURRENT_QUERY: number = 0x8865;
export const QUERY_RESULT: number = 0x8866;
export const QUERY_RESULT_AVAILABLE: number = 0x8867;
export const STREAM_READ: number = 0x88E1;
export const STREAM_COPY: number = 0x88E2;
export const STATIC_READ: number = 0x88E5;
export const STATIC_COPY: number = 0x88E6;
export const DYNAMIC_READ: number = 0x88E9;
export const DYNAMIC_COPY: number = 0x88EA;
export const MAX_DRAW_BUFFERS: number = 0x8824;
export const DRAW_BUFFER0: number = 0x8825;
export const DRAW_BUFFER1: number = 0x8826;
export const DRAW_BUFFER2: number = 0x8827;
export const DRAW_BUFFER3: number = 0x8828;
export const DRAW_BUFFER4: number = 0x8829;
export const DRAW_BUFFER5: number = 0x882A;
export const DRAW_BUFFER6: number = 0x882B;
export const DRAW_BUFFER7: number = 0x882C;
export const DRAW_BUFFER8: number = 0x882D;
export const DRAW_BUFFER9: number = 0x882E;
export const DRAW_BUFFER10: number = 0x882F;
export const DRAW_BUFFER11: number = 0x8830;
export const DRAW_BUFFER12: number = 0x8831;
export const DRAW_BUFFER13: number = 0x8832;
export const DRAW_BUFFER14: number = 0x8833;
export const DRAW_BUFFER15: number = 0x8834;
export const MAX_FRAGMENT_UNIFORM_COMPONENTS: number = 0x8B49;
export const MAX_VERTEX_UNIFORM_COMPONENTS: number = 0x8B4A;
export const SAMPLER_3D: number = 0x8B5F;
export const SAMPLER_2D_SHADOW: number = 0x8B62;
export const FRAGMENT_SHADER_DERIVATIVE_HINT: number = 0x8B8B;
export const PIXEL_PACK_BUFFER: number = 0x88EB;
export const PIXEL_UNPACK_BUFFER: number = 0x88EC;
export const PIXEL_PACK_BUFFER_BINDING: number = 0x88ED;
export const PIXEL_UNPACK_BUFFER_BINDING: number = 0x88EF;
export const FLOAT_MAT2x3: number = 0x8B65;
export const FLOAT_MAT2x4: number = 0x8B66;
export const FLOAT_MAT3x2: number = 0x8B67;
export const FLOAT_MAT3x4: number = 0x8B68;
export const FLOAT_MAT4x2: number = 0x8B69;
export const FLOAT_MAT4x3: number = 0x8B6A;
export const SRGB: number = 0x8C40;
export const SRGB8: number = 0x8C41;
export const SRGB8_ALPHA8: number = 0x8C43;
export const COMPARE_REF_TO_TEXTURE: number = 0x884E;
export const RGBA32F: number = 0x8814;
export const RGB32F: number = 0x8815;
export const RGBA16F: number = 0x881A;
export const RGB16F: number = 0x881B;
export const VERTEX_ATTRIB_ARRAY_INTEGER: number = 0x88FD;
export const MAX_ARRAY_TEXTURE_LAYERS: number = 0x88FF;
export const MIN_PROGRAM_TEXEL_OFFSET: number = 0x8904;
export const MAX_PROGRAM_TEXEL_OFFSET: number = 0x8905;
export const MAX_VARYING_COMPONENTS: number = 0x8B4B;
export const TEXTURE_2D_ARRAY: number = 0x8C1A;
export const TEXTURE_BINDING_2D_ARRAY: number = 0x8C1D;
export const R11F_G11F_B10F: number = 0x8C3A;
export const UNSIGNED_INT_10F_11F_11F_REV: number = 0x8C3B;
export const RGB9_E5: number = 0x8C3D;
export const UNSIGNED_INT_5_9_9_9_REV: number = 0x8C3E;
export const TRANSFORM_FEEDBACK_BUFFER_MODE: number = 0x8C7F;
export const MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS: number = 0x8C80;
export const RANSFORM_FEEDBACK_VARYINGS: number = 0x8C83;
export const TRANSFORM_FEEDBACK_BUFFER_START: number = 0x8C84;
export const TRANSFORM_FEEDBACK_BUFFER_SIZE: number = 0x8C85;
export const TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN: number = 0x8C88;
export const RASTERIZER_DISCARD: number = 0x8C89;
export const MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS: number = 0x8C8A;
export const MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS: number = 0x8C8B;
export const INTERLEAVED_ATTRIBS: number = 0x8C8C;
export const SEPARATE_ATTRIBS: number = 0x8C8D;
export const TRANSFORM_FEEDBACK_BUFFER: number = 0x8C8E;
export const TRANSFORM_FEEDBACK_BUFFER_BINDING: number = 0x8C8F;
export const RGBA32UI: number = 0x8D70;
export const RGB32UI: number = 0x8D71;
export const RGBA16UI: number = 0x8D76;
export const RGB16UI: number = 0x8D77;
export const RGBA8UI: number = 0x8D7C;
export const RGB8UI: number = 0x8D7D;
export const RGBA32I: number = 0x8D82;
export const RGB32I: number = 0x8D83;
export const RGBA16I: number = 0x8D88;
export const RGB16I: number = 0x8D89;
export const RGBA8I: number = 0x8D8E;
export const RGB8I: number = 0x8D8F;
export const RED_INTEGER: number = 0x8D94;
export const RGB_INTEGER: number = 0x8D98;
export const RGBA_INTEGER: number = 0x8D99;
export const SAMPLER_2D_ARRAY: number = 0x8DC1;
export const SAMPLER_2D_ARRAY_SHADOW: number = 0x8DC4;
export const SAMPLER_CUBE_SHADOW: number = 0x8DC5;
export const UNSIGNED_INT_VEC2: number = 0x8DC6;
export const UNSIGNED_INT_VEC3: number = 0x8DC7;
export const UNSIGNED_INT_VEC4: number = 0x8DC8;
export const INT_SAMPLER_2D: number = 0x8DCA;
export const INT_SAMPLER_3D: number = 0x8DCB;
export const INT_SAMPLER_CUBE: number = 0x8DCC;
export const INT_SAMPLER_2D_ARRAY: number = 0x8DCF;
export const UNSIGNED_INT_SAMPLER_2D: number = 0x8DD2;
export const UNSIGNED_INT_SAMPLER_3D: number = 0x8DD3;
export const UNSIGNED_INT_SAMPLER_CUBE: number = 0x8DD4;
export const UNSIGNED_INT_SAMPLER_2D_ARRAY: number = 0x8DD7;
export const DEPTH_COMPONENT32F: number = 0x8CAC;
export const DEPTH32F_STENCIL8: number = 0x8CAD;
export const FLOAT_32_UNSIGNED_INT_24_8_REV: number = 0x8DAD;
export const FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING: number = 0x8210;
export const FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE: number = 0x8211;
export const FRAMEBUFFER_ATTACHMENT_RED_SIZE: number = 0x8212;
export const FRAMEBUFFER_ATTACHMENT_GREEN_SIZE: number = 0x8213;
export const FRAMEBUFFER_ATTACHMENT_BLUE_SIZE: number = 0x8214;
export const FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE: number = 0x8215;
export const FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE: number = 0x8216;
export const FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE: number = 0x8217;
export const FRAMEBUFFER_DEFAULT: number = 0x8218;
export const UNSIGNED_INT_24_8: number = 0x84FA;
export const DEPTH24_STENCIL8: number = 0x88F0;
export const UNSIGNED_NORMALIZED: number = 0x8C17;
export const DRAW_FRAMEBUFFER_BINDING: number = 0x8CA6; /* Same as FRAMEBUFFER_BINDING */
export const READ_FRAMEBUFFER: number = 0x8CA8;
export const DRAW_FRAMEBUFFER: number = 0x8CA9;
export const READ_FRAMEBUFFER_BINDING: number = 0x8CAA;
export const RENDERBUFFER_SAMPLES: number = 0x8CAB;
export const FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER: number = 0x8CD4;
export const MAX_COLOR_ATTACHMENTS: number = 0x8CDF;
export const COLOR_ATTACHMENT1: number = 0x8CE1;
export const COLOR_ATTACHMENT2: number = 0x8CE2;
export const COLOR_ATTACHMENT3: number = 0x8CE3;
export const COLOR_ATTACHMENT4: number = 0x8CE4;
export const COLOR_ATTACHMENT5: number = 0x8CE5;
export const COLOR_ATTACHMENT6: number = 0x8CE6;
export const COLOR_ATTACHMENT7: number = 0x8CE7;
export const COLOR_ATTACHMENT8: number = 0x8CE8;
export const COLOR_ATTACHMENT9: number = 0x8CE9;
export const COLOR_ATTACHMENT10: number = 0x8CEA;
export const COLOR_ATTACHMENT11: number = 0x8CEB;
export const COLOR_ATTACHMENT12: number = 0x8CEC;
export const COLOR_ATTACHMENT13: number = 0x8CED;
export const COLOR_ATTACHMENT14: number = 0x8CEE;
export const COLOR_ATTACHMENT15: number = 0x8CEF;
export const FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: number = 0x8D56;
export const MAX_SAMPLES: number = 0x8D57;
export const HALF_FLOAT: number = 0x140B;
export const RG: number = 0x8227;
export const RG_INTEGER: number = 0x8228;
export const R8: number = 0x8229;
export const RG8: number = 0x822B;
export const R16F: number = 0x822D;
export const R32F: number = 0x822E;
export const RG16F: number = 0x822F;
export const RG32F: number = 0x8230;
export const R8I: number = 0x8231;
export const R8UI: number = 0x8232;
export const R16I: number = 0x8233;
export const R16UI: number = 0x8234;
export const R32I: number = 0x8235;
export const R32UI: number = 0x8236;
export const RG8I: number = 0x8237;
export const RG8UI: number = 0x8238;
export const RG16I: number = 0x8239;
export const RG16UI: number = 0x823A;
export const RG32I: number = 0x823B;
export const RG32UI: number = 0x823C;
export const VERTEX_ARRAY_BINDING: number = 0x85B5;
export const R8_SNORM: number = 0x8F94;
export const RG8_SNORM: number = 0x8F95;
export const RGB8_SNORM: number = 0x8F96;
export const RGBA8_SNORM: number = 0x8F97;
export const SIGNED_NORMALIZED: number = 0x8F9C;
export const COPY_READ_BUFFER: number = 0x8F36;
export const COPY_WRITE_BUFFER: number = 0x8F37;
export const COPY_READ_BUFFER_BINDING: number = 0x8F36; /* Same as COPY_READ_BUFFER */
export const COPY_WRITE_BUFFER_BINDING: number = 0x8F37; /* Same as COPY_WRITE_BUFFER */
export const UNIFORM_BUFFER: number = 0x8A11;
export const UNIFORM_BUFFER_BINDING: number = 0x8A28;
export const UNIFORM_BUFFER_START: number = 0x8A29;
export const UNIFORM_BUFFER_SIZE: number = 0x8A2A;
export const MAX_VERTEX_UNIFORM_BLOCKS: number = 0x8A2B;
export const MAX_FRAGMENT_UNIFORM_BLOCKS: number = 0x8A2D;
export const MAX_COMBINED_UNIFORM_BLOCKS: number = 0x8A2E;
export const MAX_UNIFORM_BUFFER_BINDINGS: number = 0x8A2F;
export const MAX_UNIFORM_BLOCK_SIZE: number = 0x8A30;
export const MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS: number = 0x8A31;
export const MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS: number = 0x8A33;
export const UNIFORM_BUFFER_OFFSET_ALIGNMENT: number = 0x8A34;
export const ACTIVE_UNIFORM_BLOCKS: number = 0x8A36;
export const UNIFORM_TYPE: number = 0x8A37;
export const UNIFORM_SIZE: number = 0x8A38;
export const UNIFORM_BLOCK_INDEX: number = 0x8A3A;
export const UNIFORM_OFFSET: number = 0x8A3B;
export const UNIFORM_ARRAY_STRIDE: number = 0x8A3C;
export const UNIFORM_MATRIX_STRIDE: number = 0x8A3D;
export const UNIFORM_IS_ROW_MAJOR: number = 0x8A3E;
export const UNIFORM_BLOCK_BINDING: number = 0x8A3F;
export const UNIFORM_BLOCK_DATA_SIZE: number = 0x8A40;
export const UNIFORM_BLOCK_ACTIVE_UNIFORMS: number = 0x8A42;
export const UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES: number = 0x8A43;
export const UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER: number = 0x8A44;
export const UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER: number = 0x8A46;
export const INVALID_INDEX: number = 0xFFFFFFFF;
export const MAX_VERTEX_OUTPUT_COMPONENTS: number = 0x9122;
export const MAX_FRAGMENT_INPUT_COMPONENTS: number = 0x9125;
export const MAX_SERVER_WAIT_TIMEOUT: number = 0x9111;
export const OBJECT_TYPE: number = 0x9112;
export const SYNC_CONDITION: number = 0x9113;
export const SYNC_STATUS: number = 0x9114;
export const SYNC_FLAGS: number = 0x9115;
export const SYNC_FENCE: number = 0x9116;
export const SYNC_GPU_COMMANDS_COMPLETE: number = 0x9117;
export const UNSIGNALED: number = 0x9118;
export const SIGNALED: number = 0x9119;
export const ALREADY_SIGNALED: number = 0x911A;
export const TIMEOUT_EXPIRED: number = 0x911B;
export const CONDITION_SATISFIED: number = 0x911C;
export const WAIT_FAILED: number = 0x911D;
export const SYNC_FLUSH_COMMANDS_BIT: number = 0x00000001;
export const VERTEX_ATTRIB_ARRAY_DIVISOR: number = 0x88FE;
export const ANY_SAMPLES_PASSED: number = 0x8C2F;
export const ANY_SAMPLES_PASSED_CONSERVATIVE: number = 0x8D6A;
export const SAMPLER_BINDING: number = 0x8919;
export const RGB10_A2UI: number = 0x906F;
export const INT_2_10_10_10_REV: number = 0x8D9F;
export const TRANSFORM_FEEDBACK: number = 0x8E22;
export const TRANSFORM_FEEDBACK_PAUSED: number = 0x8E23;
export const TRANSFORM_FEEDBACK_ACTIVE: number = 0x8E24;
export const TRANSFORM_FEEDBACK_BINDING: number = 0x8E25;
export const TEXTURE_IMMUTABLE_FORMAT: number = 0x912F;
export const MAX_ELEMENT_INDEX: number = 0x8D6B;
export const TEXTURE_IMMUTABLE_LEVELS: number = 0x82DF;

export const TIMEOUT_IGNORED: number = -1;

/* WebGL-specific enums */
export const MAX_CLIENT_WAIT_TIMEOUT_WEBGL: number = 0x9247;


export const TEXTURE0: number = 0x84c0;
export const DYNAMIC_DRAW: number = 0x88e8;
export const ARRAY_BUFFER: number = 0x8892;
export const ELEMENT_ARRAY_BUFFER: number = 0x8893;
export const COMPILE_STATUS: number = 0x8b81;
export const LINK_STATUS: number = 0x8b82;
export const FRAGMENT_SHADER: number = 0x8b30;
export const VERTEX_SHADER: number = 0x8b31;
export const ACTIVE_UNIFORMS: number = 0x8b86;
export const ACTIVE_ATTRIBUTES: number = 0x8b89;
export const FLOAT: number = 0x1406;
export const FLOAT_VEC2: number = 0x8B50;
export const FLOAT_VEC3: number = 0x8B51;
export const FLOAT_VEC4: number = 0x8B52;
export const INT: number = 0x1404;
export const INT_VEC2: number = 0x8B53;
export const INT_VEC3: number = 0x8B54;
export const INT_VEC4: number = 0x8B55;
export const BOOL: number = 0x8B56;
export const BOOL_VEC2: number = 0x8B57;
export const BOOL_VEC3: number = 0x8B58;
export const BOOL_VEC4: number = 0x8B59;
export const FLOAT_MAT2: number = 0x8B5A;
export const FLOAT_MAT3: number = 0x8B5B;
export const FLOAT_MAT4: number = 0x8B5C;
export const SAMPLER_2D: number = 0x8B5E;
export const SAMPLER_CUBE: number = 0x8B60;
export const TEXTURE_2D: number = 0x0DE1;
export const TEXTURE_CUBE_MAP: number = 0x8513;


export enum ShaderType {
    VERTEX = VERTEX_SHADER,
    FRAGMENT = FRAGMENT_SHADER
}

export enum WrapType {

    FRAGMENT = FRAGMENT_SHADER
}

export enum TextureFilter {

}

export enum TextureEncoding { }
// /* Buffer objects */
// void copyBufferSubData(readTarget, writeTarget, GLintptr readOffset,
//     GLintptr writeOffset, GLsizeiptr size);
// // MapBufferRange, in particular its read-only and write-only modes,
// // can not be exposed safely to JavaScript. GetBufferSubData
// // replaces it for the purpose of fetching data back from the GPU.
// void getBufferSubData(target, GLintptr srcByteOffset, [AllowShared] ArrayBufferView dstBuffer,
//     optional GLuint dstOffset:number= 0, optional GLuint length:number= 0);

// /* Framebuffer objects */
// void blitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0,
//     GLint dstX1, GLint dstY1, GLbitfield mask, filter);
// void framebufferTextureLayer(target, attachment, WebGLTexture ? texture, GLint level,
//     GLint layer);
// void invalidateFramebuffer(target, sequence <  > attachments);
// void invalidateSubFramebuffer(target, sequence <  > attachments,
//     GLint x, GLint y, GLsizei width, GLsizei height);
// void readBuffer(src);

// /* Renderbuffer objects */
// any getInternalformatParameter(target, internalformat, pname);
// void renderbufferStorageMultisample(target, GLsizei samples, internalformat,
//     GLsizei width, GLsizei height);

// /* Texture objects */
// void texStorage2D(target, GLsizei levels, internalformat, GLsizei width,
//     GLsizei height);
// void texStorage3D(target, GLsizei levels, internalformat, GLsizei width,
//     GLsizei height, GLsizei depth);

// void texImage3D(target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
//     GLsizei depth, GLint border, format, type, GLintptr pboOffset);
// void texImage3D(target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
//     GLsizei depth, GLint border, format, type,
//     TexImageSource source); // May throw DOMException
// void texImage3D(target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
//     GLsizei depth, GLint border, format, type, [AllowShared] ArrayBufferView ? srcData);
// void texImage3D(target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
//     GLsizei depth, GLint border, format, type, [AllowShared] ArrayBufferView srcData,
//     GLuint srcOffset);

// void texSubImage3D(target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
//     GLsizei width, GLsizei height, GLsizei depth, format, type,
//     GLintptr pboOffset);
// void texSubImage3D(target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
//     GLsizei width, GLsizei height, GLsizei depth, format, type,
//     TexImageSource source); // May throw DOMException
// void texSubImage3D(target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
//     GLsizei width, GLsizei height, GLsizei depth, format, type,
//     [AllowShared] ArrayBufferView ? srcData, optional GLuint srcOffset:number= 0);

// void copyTexSubImage3D(target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
//     GLint x, GLint y, GLsizei width, GLsizei height);

// void compressedTexImage3D(target, GLint level, internalformat, GLsizei width,
//     GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, GLintptr offset);
// void compressedTexImage3D(target, GLint level, internalformat, GLsizei width,
//     GLsizei height, GLsizei depth, GLint border, [AllowShared] ArrayBufferView srcData,
//     optional GLuint srcOffset:number= 0, optional GLuint srcLengthOverride:number= 0);

// void compressedTexSubImage3D(target, GLint level, GLint xoffset, GLint yoffset,
//     GLint zoffset, GLsizei width, GLsizei height, GLsizei depth,
//     format, GLsizei imageSize, GLintptr offset);
// void compressedTexSubImage3D(target, GLint level, GLint xoffset, GLint yoffset,
//     GLint zoffset, GLsizei width, GLsizei height, GLsizei depth,
//     format, [AllowShared] ArrayBufferView srcData,
//     optional GLuint srcOffset:number= 0,
//     optional GLuint srcLengthOverride:number= 0);

// /* Programs and shaders */
// [WebGLHandlesContextLoss] GLint getFragDataLocation(WebGLProgram program, DOMString name);

// /* Uniforms */
// void uniform1ui(WebGLUniformLocation ? location, GLuint v0);
// void uniform2ui(WebGLUniformLocation ? location, GLuint v0, GLuint v1);
// void uniform3ui(WebGLUniformLocation ? location, GLuint v0, GLuint v1, GLuint v2);
// void uniform4ui(WebGLUniformLocation ? location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);

// void uniform1uiv(WebGLUniformLocation ? location, Uint32List data, optional GLuint srcOffset:number= 0,
//     optional GLuint srcLength:number= 0);
// void uniform2uiv(WebGLUniformLocation ? location, Uint32List data, optional GLuint srcOffset:number= 0,
//     optional GLuint srcLength:number= 0);
// void uniform3uiv(WebGLUniformLocation ? location, Uint32List data, optional GLuint srcOffset:number= 0,
//     optional GLuint srcLength:number= 0);
// void uniform4uiv(WebGLUniformLocation ? location, Uint32List data, optional GLuint srcOffset:number= 0,
//     optional GLuint srcLength:number= 0);
// void uniformMatrix3x2fv(WebGLUniformLocation ? location, GLboolean transpose, Float32List data,
//     optional GLuint srcOffset:number= 0, optional GLuint srcLength:number= 0);
// void uniformMatrix4x2fv(WebGLUniformLocation ? location, GLboolean transpose, Float32List data,
//     optional GLuint srcOffset:number= 0, optional GLuint srcLength:number= 0);

// void uniformMatrix2x3fv(WebGLUniformLocation ? location, GLboolean transpose, Float32List data,
//     optional GLuint srcOffset:number= 0, optional GLuint srcLength:number= 0);
// void uniformMatrix4x3fv(WebGLUniformLocation ? location, GLboolean transpose, Float32List data,
//     optional GLuint srcOffset:number= 0, optional GLuint srcLength:number= 0);

// void uniformMatrix2x4fv(WebGLUniformLocation ? location, GLboolean transpose, Float32List data,
//     optional GLuint srcOffset:number= 0, optional GLuint srcLength:number= 0);
// void uniformMatrix3x4fv(WebGLUniformLocation ? location, GLboolean transpose, Float32List data,
//     optional GLuint srcOffset:number= 0, optional GLuint srcLength:number= 0);

// /* Vertex attribs */
// void vertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w);
// void vertexAttribI4iv(GLuint index, Int32List values);
// void vertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
// void vertexAttribI4uiv(GLuint index, Uint32List values);
// void vertexAttribIPointer(GLuint index, GLint size, type, GLsizei stride, GLintptr offset);

// /* Writing to the drawing buffer */
// void vertexAttribDivisor(GLuint index, GLuint divisor);
// void drawArraysInstanced(mode, GLint first, GLsizei count, GLsizei instanceCount);
// void drawElementsInstanced(mode, GLsizei count, type, GLintptr offset, GLsizei instanceCount);
// void drawRangeElements(mode, GLuint start, GLuint end, GLsizei count, type, GLintptr offset);

// /* Multiple Render Targets */
// void drawBuffers(sequence <  > buffers);

// void clearBufferfv(buffer, GLint drawbuffer, Float32List values,
//     optional GLuint srcOffset:number= 0);
// void clearBufferiv(buffer, GLint drawbuffer, Int32List values,
//     optional GLuint srcOffset:number= 0);
// void clearBufferuiv(buffer, GLint drawbuffer, Uint32List values,
//     optional GLuint srcOffset:number= 0);

// void clearBufferfi(buffer, GLint drawbuffer, GLfloat depth, GLint stencil);

// /* Query Objects */
// WebGLQuery ? createQuery();
// void deleteQuery(WebGLQuery ? query);
// [WebGLHandlesContextLoss] GLboolean isQuery(WebGLQuery ? query);
// void beginQuery(target, WebGLQuery query);
// void endQuery(target);
// WebGLQuery ? getQuery(target, pname);
// any getQueryParameter(WebGLQuery query, pname);

// /* Sampler Objects */
// WebGLSampler ? createSampler();
// void deleteSampler(WebGLSampler ? sampler);
// [WebGLHandlesContextLoss] GLboolean isSampler(WebGLSampler ? sampler);
// void bindSampler(GLuint unit, WebGLSampler ? sampler);
// void samplerParameteri(WebGLSampler sampler, pname, GLint param);
// void samplerParameterf(WebGLSampler sampler, pname, GLfloat param);
// any getSamplerParameter(WebGLSampler sampler, pname);

// /* Sync objects */
// WebGLSync ? fenceSync(condition, GLbitfield flags);
// [WebGLHandlesContextLoss] GLboolean isSync(WebGLSync ? sync);
// void deleteSync(WebGLSync ? sync);
// clientWaitSync(WebGLSync sync, GLbitfield flags, GLuint64 timeout);
// void waitSync(WebGLSync sync, GLbitfield flags, GLint64 timeout);
// any getSyncParameter(WebGLSync sync, pname);

// /* Transform Feedback */
// WebGLTransformFeedback ? createTransformFeedback();
// void deleteTransformFeedback(WebGLTransformFeedback ? tf);
// [WebGLHandlesContextLoss] GLboolean isTransformFeedback(WebGLTransformFeedback ? tf);
// void bindTransformFeedback(target, WebGLTransformFeedback ? tf);
// void beginTransformFeedback(primitiveMode);
// void endTransformFeedback();
// void transformFeedbackexport constyings(WebGLProgram program, sequence < DOMString > export constyings, bufferMode);
// WebGLActiveInfo ? getTransformFeedbackexport constying(WebGLProgram program, GLuint index);
// void pauseTransformFeedback();
// void resumeTransformFeedback();

// /* Uniform Buffer Objects and Transform Feedback Buffers */
// void bindBufferBase(target, GLuint index, WebGLBuffer ? buffer);
// void bindBufferRange(target, GLuint index, WebGLBuffer ? buffer, GLintptr offset, GLsizeiptr size);
// any getIndexedParameter(target, GLuint index);
// sequence<GLuint>?getUniformIndices(WebGLProgram program, sequence < DOMString > uniformNames);
// any getActiveUniforms(WebGLProgram program, sequence < GLuint > uniformIndices, pname);
// GLuint getUniformBlockIndex(WebGLProgram program, DOMString uniformBlockName);
// any getActiveUniformBlockParameter(WebGLProgram program, GLuint uniformBlockIndex, pname);
// DOMString ? getActiveUniformBlockName(WebGLProgram program, GLuint uniformBlockIndex);
// void uniformBlockBinding(WebGLProgram program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);

// /* Vertex Array Objects */
// WebGLVertexArrayObject ? createVertexArray();
// void deleteVertexArray(WebGLVertexArrayObject ? vertexArray);
// [WebGLHandlesContextLoss] GLboolean isVertexArray(WebGLVertexArrayObject ? vertexArray);
// void bindVertexArray(WebGLVertexArrayObject ? array);
// };

// interface mixin WebGL2RenderingContextOverloads
// {
//     // WebGL1:
//     void bufferData(target, GLsizeiptr size, usage);
//     void bufferData(target, [AllowShared] BufferSource ? srcData, usage);
//     void bufferSubData(target, GLintptr dstByteOffset, [AllowShared] BufferSource srcData);
//     // WebGL2:
//     void bufferData(target, [AllowShared] ArrayBufferView srcData, usage, GLuint srcOffset,
//         optional GLuint length:number= 0);
//     void bufferSubData(target, GLintptr dstByteOffset, [AllowShared] ArrayBufferView srcData,
//         GLuint srcOffset, optional GLuint length:number= 0);

//     // WebGL1 legacy entrypoints:
//     void texImage2D(target, GLint level, GLint internalformat,
//         GLsizei width, GLsizei height, GLint border, format,
//         type, [AllowShared] ArrayBufferView ? pixels);
//     void texImage2D(target, GLint level, GLint internalformat,
//         format, type, TexImageSource source); // May throw DOMException

//     void texSubImage2D(target, GLint level, GLint xoffset, GLint yoffset,
//         GLsizei width, GLsizei height,
//         format, type, [AllowShared] ArrayBufferView ? pixels);
//     void texSubImage2D(target, GLint level, GLint xoffset, GLint yoffset,
//         format, type, TexImageSource source); // May throw DOMException

//     // WebGL2 entrypoints:
//     void texImage2D(target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
//         GLint border, format, type, GLintptr pboOffset);
//     void texImage2D(target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
//         GLint border, format, type,
//         TexImageSource source); // May throw DOMException
//     void texImage2D(target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
//         GLint border, format, type, [AllowShared] ArrayBufferView srcData,
//         GLuint srcOffset);

//     void texSubImage2D(target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
//         GLsizei height, format, type, GLintptr pboOffset);
//     void texSubImage2D(target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
//         GLsizei height, format, type,
//         TexImageSource source); // May throw DOMException
//     void texSubImage2D(target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
//         GLsizei height, format, type, [AllowShared] ArrayBufferView srcData,
//         GLuint srcOffset);

//     void compressedTexImage2D(target, GLint level, internalformat, GLsizei width,
//         GLsizei height, GLint border, GLsizei imageSize, GLintptr offset);
//     void compressedTexImage2D(target, GLint level, internalformat, GLsizei width,
//         GLsizei height, GLint border, [AllowShared] ArrayBufferView srcData,
//         optional GLuint srcOffset:number= 0, optional GLuint srcLengthOverride:number= 0);

//     void compressedTexSubImage2D(target, GLint level, GLint xoffset, GLint yoffset,
//         GLsizei width, GLsizei height, format, GLsizei imageSize, GLintptr offset);
//     void compressedTexSubImage2D(target, GLint level, GLint xoffset, GLint yoffset,
//         GLsizei width, GLsizei height, format,
//         [AllowShared] ArrayBufferView srcData,
//         optional GLuint srcOffset:number= 0,
//         optional GLuint srcLengthOverride:number= 0);

//     void uniform1fv(WebGLUniformLocation ? location, Float32List data, optional GLuint srcOffset:number= 0,
//         optional GLuint srcLength:number= 0);
//     void uniform2fv(WebGLUniformLocation ? location, Float32List data, optional GLuint srcOffset:number= 0,
//         optional GLuint srcLength:number= 0);
//     void uniform3fv(WebGLUniformLocation ? location, Float32List data, optional GLuint srcOffset:number= 0,
//         optional GLuint srcLength:number= 0);
//     void uniform4fv(WebGLUniformLocation ? location, Float32List data, optional GLuint srcOffset:number= 0,
//         optional GLuint srcLength:number= 0);

//     void uniform1iv(WebGLUniformLocation ? location, Int32List data, optional GLuint srcOffset:number= 0,
//         optional GLuint srcLength:number= 0);
//     void uniform2iv(WebGLUniformLocation ? location, Int32List data, optional GLuint srcOffset:number= 0,
//         optional GLuint srcLength:number= 0);
//     void uniform3iv(WebGLUniformLocation ? location, Int32List data, optional GLuint srcOffset:number= 0,
//         optional GLuint srcLength:number= 0);
//     void uniform4iv(WebGLUniformLocation ? location, Int32List data, optional GLuint srcOffset:number= 0,
//         optional GLuint srcLength:number= 0);

//     void uniformMatrix2fv(WebGLUniformLocation ? location, GLboolean transpose, Float32List data,
//         optional GLuint srcOffset:number= 0, optional GLuint srcLength:number= 0);
//     void uniformMatrix3fv(WebGLUniformLocation ? location, GLboolean transpose, Float32List data,
//         optional GLuint srcOffset:number= 0, optional GLuint srcLength:number= 0);
//     void uniformMatrix4fv(WebGLUniformLocation ? location, GLboolean transpose, Float32List data,
//         optional GLuint srcOffset:number= 0, optional GLuint srcLength:number= 0);

//     /* Reading back pixels */
//     // WebGL1:
//     void readPixels(GLint x, GLint y, GLsizei width, GLsizei height, format, type,
//         [AllowShared] ArrayBufferView ? dstData);
//     // WebGL2:
//     void readPixels(GLint x, GLint y, GLsizei width, GLsizei height, format, type,
//         GLintptr offset);
//     void readPixels(GLint x, GLint y, GLsizei width, GLsizei height, format, type,
//         [AllowShared] ArrayBufferView dstData, GLuint dstOffset);
// };