/*
 * Copyright (C) 2015 Apple Inc. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
 */

typedef unsigned long GLenum;
typedef boolean GLboolean;
typedef unsigned long GLbitfield;
typedef byte GLbyte; /* 'byte' should be a signed 8 bit type. */
typedef short GLshort;
typedef long GLint;
typedef long GLsizei;
typedef long long GLintptr;
typedef long long GLsizeiptr;
typedef octet GLubyte; /* 'octet' should be an unsigned 8 bit type. */
typedef unsigned short GLushort;
typedef unsigned long GLuint;
typedef unrestricted float GLfloat;
typedef unrestricted float GLclampf;
typedef (ArrayBuffer or ArrayBufferView) BufferDataSource;
typedef (Float32Array or sequence<GLfloat>) Float32List;
typedef (Int32Array or sequence<GLint>) Int32List;

typedef (HTMLCanvasElement or OffscreenCanvas) WebGLCanvas;

[
    Conditional=WEBGL,
    CustomIsReachable,
    CustomToJSObject,
    DoNotCheckConstants,
    JSCustomMarkFunction,
    NoInterfaceObject,
    ExportMacro=WEBCORE_EXPORT,
] interface WebGLRenderingContextBase {

    readonly attribute WebGLCanvas canvas;

    /* ClearBufferMask */
    const GLenum DEPTH_BUFFER_BIT = 0x00000100;
    const GLenum STENCIL_BUFFER_BIT = 0x00000400;
    const GLenum COLOR_BUFFER_BIT = 0x00004000;

    /* BeginMode */
    const GLenum POINTS = 0x0000;
    const GLenum LINES = 0x0001;
    const GLenum LINE_LOOP = 0x0002;
    const GLenum LINE_STRIP = 0x0003;
    const GLenum TRIANGLES = 0x0004;
    const GLenum TRIANGLE_STRIP = 0x0005;
    const GLenum TRIANGLE_FAN = 0x0006;

    /* AlphaFunction (not supported in ES20) */
    /*  NEVER */
    /*  LESS */
    /*  EQUAL */
    /*  LEQUAL */
    /*  GREATER */
    /*  NOTEQUAL */
    /*  GEQUAL */
    /*  ALWAYS */

    /* BlendingFactorDest */
    const GLenum ZERO = 0;
    const GLenum ONE = 1;
    const GLenum SRC_COLOR = 0x0300;
    const GLenum ONE_MINUS_SRC_COLOR = 0x0301;
    const GLenum SRC_ALPHA = 0x0302;
    const GLenum ONE_MINUS_SRC_ALPHA = 0x0303;
    const GLenum DST_ALPHA = 0x0304;
    const GLenum ONE_MINUS_DST_ALPHA = 0x0305;

    /* BlendingFactorSrc */
    /*  ZERO */
    /*  ONE */
    const GLenum DST_COLOR = 0x0306;
    const GLenum ONE_MINUS_DST_COLOR = 0x0307;
    const GLenum SRC_ALPHA_SATURATE = 0x0308;
    /*  SRC_ALPHA */
    /*  ONE_MINUS_SRC_ALPHA */
    /*  DST_ALPHA */
    /*  ONE_MINUS_DST_ALPHA */

    /* BlendEquationSeparate */
    const GLenum FUNC_ADD = 0x8006;
    const GLenum BLEND_EQUATION = 0x8009;
    const GLenum BLEND_EQUATION_RGB = 0x8009;   /* same as BLEND_EQUATION */
    const GLenum BLEND_EQUATION_ALPHA = 0x883D;

    /* BlendSubtract */
    const GLenum FUNC_SUBTRACT = 0x800A;
    const GLenum FUNC_REVERSE_SUBTRACT = 0x800B;

    /* Separate Blend Functions */
    const GLenum BLEND_DST_RGB = 0x80C8;
    const GLenum BLEND_SRC_RGB = 0x80C9;
    const GLenum BLEND_DST_ALPHA = 0x80CA;
    const GLenum BLEND_SRC_ALPHA = 0x80CB;
    const GLenum CONSTANT_COLOR = 0x8001;
    const GLenum ONE_MINUS_CONSTANT_COLOR = 0x8002;
    const GLenum CONSTANT_ALPHA = 0x8003;
    const GLenum ONE_MINUS_CONSTANT_ALPHA = 0x8004;
    const GLenum BLEND_COLOR = 0x8005;

    /* Buffer Objects */
    const GLenum ARRAY_BUFFER = 0x8892;
    const GLenum ELEMENT_ARRAY_BUFFER = 0x8893;
    const GLenum ARRAY_BUFFER_BINDING = 0x8894;
    const GLenum ELEMENT_ARRAY_BUFFER_BINDING = 0x8895;

    const GLenum STREAM_DRAW = 0x88E0;
    const GLenum STATIC_DRAW = 0x88E4;
    const GLenum DYNAMIC_DRAW = 0x88E8;

    const GLenum BUFFER_SIZE = 0x8764;
    const GLenum BUFFER_USAGE = 0x8765;

    const GLenum CURRENT_VERTEX_ATTRIB = 0x8626;

    /* CullFaceMode */
    const GLenum FRONT = 0x0404;
    const GLenum BACK = 0x0405;
    const GLenum FRONT_AND_BACK = 0x0408;

    /* DepthFunction */
    /*  NEVER */
    /*  LESS */
    /*  EQUAL */
    /*  LEQUAL */
    /*  GREATER */
    /*  NOTEQUAL */
    /*  GEQUAL */
    /*  ALWAYS */

    /* EnableCap */
    const GLenum TEXTURE_2D = 0x0DE1;
    const GLenum CULL_FACE = 0x0B44;
    const GLenum BLEND = 0x0BE2;
    const GLenum DITHER = 0x0BD0;
    const GLenum STENCIL_TEST = 0x0B90;
    const GLenum DEPTH_TEST = 0x0B71;
    const GLenum SCISSOR_TEST = 0x0C11;
    const GLenum POLYGON_OFFSET_FILL = 0x8037;
    const GLenum SAMPLE_ALPHA_TO_COVERAGE = 0x809E;
    const GLenum SAMPLE_COVERAGE = 0x80A0;

    /* ErrorCode */
    const GLenum NO_ERROR = 0;
    const GLenum INVALID_ENUM = 0x0500;
    const GLenum INVALID_VALUE = 0x0501;
    const GLenum INVALID_OPERATION = 0x0502;
    const GLenum OUT_OF_MEMORY = 0x0505;

    /* FrontFaceDirection */
    const GLenum CW = 0x0900;
    const GLenum CCW = 0x0901;

    /* GetPName */
    const GLenum LINE_WIDTH = 0x0B21;
    const GLenum ALIASED_POINT_SIZE_RANGE = 0x846D;
    const GLenum ALIASED_LINE_WIDTH_RANGE = 0x846E;
    const GLenum CULL_FACE_MODE = 0x0B45;
    const GLenum FRONT_FACE = 0x0B46;
    const GLenum DEPTH_RANGE = 0x0B70;
    const GLenum DEPTH_WRITEMASK = 0x0B72;
    const GLenum DEPTH_CLEAR_VALUE = 0x0B73;
    const GLenum DEPTH_FUNC = 0x0B74;
    const GLenum STENCIL_CLEAR_VALUE = 0x0B91;
    const GLenum STENCIL_FUNC = 0x0B92;
    const GLenum STENCIL_FAIL = 0x0B94;
    const GLenum STENCIL_PASS_DEPTH_FAIL = 0x0B95;
    const GLenum STENCIL_PASS_DEPTH_PASS = 0x0B96;
    const GLenum STENCIL_REF = 0x0B97;
    const GLenum STENCIL_VALUE_MASK = 0x0B93;
    const GLenum STENCIL_WRITEMASK = 0x0B98;
    const GLenum STENCIL_BACK_FUNC = 0x8800;
    const GLenum STENCIL_BACK_FAIL = 0x8801;
    const GLenum STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802;
    const GLenum STENCIL_BACK_PASS_DEPTH_PASS = 0x8803;
    const GLenum STENCIL_BACK_REF = 0x8CA3;
    const GLenum STENCIL_BACK_VALUE_MASK = 0x8CA4;
    const GLenum STENCIL_BACK_WRITEMASK = 0x8CA5;
    const GLenum VIEWPORT = 0x0BA2;
    const GLenum SCISSOR_BOX = 0x0C10;
    /*  SCISSOR_TEST */
    const GLenum COLOR_CLEAR_VALUE = 0x0C22;
    const GLenum COLOR_WRITEMASK = 0x0C23;
    const GLenum UNPACK_ALIGNMENT = 0x0CF5;
    const GLenum PACK_ALIGNMENT = 0x0D05;
    const GLenum MAX_TEXTURE_SIZE = 0x0D33;
    const GLenum MAX_VIEWPORT_DIMS = 0x0D3A;
    const GLenum SUBPIXEL_BITS = 0x0D50;
    const GLenum RED_BITS = 0x0D52;
    const GLenum GREEN_BITS = 0x0D53;
    const GLenum BLUE_BITS = 0x0D54;
    const GLenum ALPHA_BITS = 0x0D55;
    const GLenum DEPTH_BITS = 0x0D56;
    const GLenum STENCIL_BITS = 0x0D57;
    const GLenum POLYGON_OFFSET_UNITS = 0x2A00;
    /*  POLYGON_OFFSET_FILL */
    const GLenum POLYGON_OFFSET_FACTOR = 0x8038;
    const GLenum TEXTURE_BINDING_2D = 0x8069;
    const GLenum SAMPLE_BUFFERS = 0x80A8;
    const GLenum SAMPLES = 0x80A9;
    const GLenum SAMPLE_COVERAGE_VALUE = 0x80AA;
    const GLenum SAMPLE_COVERAGE_INVERT = 0x80AB;

    /* GetTextureParameter */
    /*  TEXTURE_MAG_FILTER */
    /*  TEXTURE_MIN_FILTER */
    /*  TEXTURE_WRAP_S */
    /*  TEXTURE_WRAP_T */

    const GLenum COMPRESSED_TEXTURE_FORMATS = 0x86A3;

    /* HintMode */
    const GLenum DONT_CARE = 0x1100;
    const GLenum FASTEST = 0x1101;
    const GLenum NICEST = 0x1102;

    /* HintTarget */
    const GLenum GENERATE_MIPMAP_HINT = 0x8192;

    /* DataType */
    const GLenum BYTE = 0x1400;
    const GLenum UNSIGNED_BYTE = 0x1401;
    const GLenum SHORT = 0x1402;
    const GLenum UNSIGNED_SHORT = 0x1403;
    const GLenum INT = 0x1404;
    const GLenum UNSIGNED_INT = 0x1405;
    const GLenum FLOAT = 0x1406;

    /* PixelFormat */
    const GLenum DEPTH_COMPONENT = 0x1902;
    const GLenum ALPHA = 0x1906;
    const GLenum RGB = 0x1907;
    const GLenum RGBA = 0x1908;
    const GLenum LUMINANCE = 0x1909;
    const GLenum LUMINANCE_ALPHA = 0x190A;

    /* PixelType */
    /*  UNSIGNED_BYTE */
    const GLenum UNSIGNED_SHORT_4_4_4_4 = 0x8033;
    const GLenum UNSIGNED_SHORT_5_5_5_1 = 0x8034;
    const GLenum UNSIGNED_SHORT_5_6_5 = 0x8363;

    /* Shaders */
    const GLenum FRAGMENT_SHADER = 0x8B30;
    const GLenum VERTEX_SHADER = 0x8B31;
    const GLenum MAX_VERTEX_ATTRIBS = 0x8869;
    const GLenum MAX_VERTEX_UNIFORM_VECTORS = 0x8DFB;
    const GLenum MAX_VARYING_VECTORS = 0x8DFC;
    const GLenum MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D;
    const GLenum MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C;
    const GLenum MAX_TEXTURE_IMAGE_UNITS = 0x8872;
    const GLenum MAX_FRAGMENT_UNIFORM_VECTORS = 0x8DFD;
    const GLenum SHADER_TYPE = 0x8B4F;
    const GLenum DELETE_STATUS = 0x8B80;
    const GLenum LINK_STATUS = 0x8B82;
    const GLenum VALIDATE_STATUS = 0x8B83;
    const GLenum ATTACHED_SHADERS = 0x8B85;
    const GLenum ACTIVE_UNIFORMS = 0x8B86;
    const GLenum ACTIVE_ATTRIBUTES = 0x8B89;
    const GLenum SHADING_LANGUAGE_VERSION = 0x8B8C;
    const GLenum CURRENT_PROGRAM = 0x8B8D;

    /* StencilFunction */
    const GLenum NEVER = 0x0200;
    const GLenum LESS = 0x0201;
    const GLenum EQUAL = 0x0202;
    const GLenum LEQUAL = 0x0203;
    const GLenum GREATER = 0x0204;
    const GLenum NOTEQUAL = 0x0205;
    const GLenum GEQUAL = 0x0206;
    const GLenum ALWAYS = 0x0207;

    /* StencilOp */
    /*  ZERO */
    const GLenum KEEP = 0x1E00;
    const GLenum REPLACE = 0x1E01;
    const GLenum INCR = 0x1E02;
    const GLenum DECR = 0x1E03;
    const GLenum INVERT = 0x150A;
    const GLenum INCR_WRAP = 0x8507;
    const GLenum DECR_WRAP = 0x8508;

    /* StringName */
    const GLenum VENDOR = 0x1F00;
    const GLenum RENDERER = 0x1F01;
    const GLenum VERSION = 0x1F02;

    /* TextureMagFilter */
    const GLenum NEAREST = 0x2600;
    const GLenum LINEAR = 0x2601;

    /* TextureMinFilter */
    /*  NEAREST */
    /*  LINEAR */
    const GLenum NEAREST_MIPMAP_NEAREST = 0x2700;
    const GLenum LINEAR_MIPMAP_NEAREST = 0x2701;
    const GLenum NEAREST_MIPMAP_LINEAR = 0x2702;
    const GLenum LINEAR_MIPMAP_LINEAR = 0x2703;

    /* TextureParameterName */
    const GLenum TEXTURE_MAG_FILTER = 0x2800;
    const GLenum TEXTURE_MIN_FILTER = 0x2801;
    const GLenum TEXTURE_WRAP_S = 0x2802;
    const GLenum TEXTURE_WRAP_T = 0x2803;

    /* TextureTarget */
    /*  TEXTURE_2D */
    const GLenum TEXTURE = 0x1702;

    const GLenum TEXTURE_CUBE_MAP = 0x8513;
    const GLenum TEXTURE_BINDING_CUBE_MAP = 0x8514;
    const GLenum TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515;
    const GLenum TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516;
    const GLenum TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517;
    const GLenum TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518;
    const GLenum TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519;
    const GLenum TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A;
    const GLenum MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C;

    /* TextureUnit */
    const GLenum TEXTURE0 = 0x84C0;
    const GLenum TEXTURE1 = 0x84C1;
    const GLenum TEXTURE2 = 0x84C2;
    const GLenum TEXTURE3 = 0x84C3;
    const GLenum TEXTURE4 = 0x84C4;
    const GLenum TEXTURE5 = 0x84C5;
    const GLenum TEXTURE6 = 0x84C6;
    const GLenum TEXTURE7 = 0x84C7;
    const GLenum TEXTURE8 = 0x84C8;
    const GLenum TEXTURE9 = 0x84C9;
    const GLenum TEXTURE10 = 0x84CA;
    const GLenum TEXTURE11 = 0x84CB;
    const GLenum TEXTURE12 = 0x84CC;
    const GLenum TEXTURE13 = 0x84CD;
    const GLenum TEXTURE14 = 0x84CE;
    const GLenum TEXTURE15 = 0x84CF;
    const GLenum TEXTURE16 = 0x84D0;
    const GLenum TEXTURE17 = 0x84D1;
    const GLenum TEXTURE18 = 0x84D2;
    const GLenum TEXTURE19 = 0x84D3;
    const GLenum TEXTURE20 = 0x84D4;
    const GLenum TEXTURE21 = 0x84D5;
    const GLenum TEXTURE22 = 0x84D6;
    const GLenum TEXTURE23 = 0x84D7;
    const GLenum TEXTURE24 = 0x84D8;
    const GLenum TEXTURE25 = 0x84D9;
    const GLenum TEXTURE26 = 0x84DA;
    const GLenum TEXTURE27 = 0x84DB;
    const GLenum TEXTURE28 = 0x84DC;
    const GLenum TEXTURE29 = 0x84DD;
    const GLenum TEXTURE30 = 0x84DE;
    const GLenum TEXTURE31 = 0x84DF;
    const GLenum ACTIVE_TEXTURE = 0x84E0;

    /* TextureWrapMode */
    const GLenum REPEAT = 0x2901;
    const GLenum CLAMP_TO_EDGE = 0x812F;
    const GLenum MIRRORED_REPEAT = 0x8370;

    /* Uniform Types */
    const GLenum FLOAT_VEC2 = 0x8B50;
    const GLenum FLOAT_VEC3 = 0x8B51;
    const GLenum FLOAT_VEC4 = 0x8B52;
    const GLenum INT_VEC2 = 0x8B53;
    const GLenum INT_VEC3 = 0x8B54;
    const GLenum INT_VEC4 = 0x8B55;
    const GLenum BOOL = 0x8B56;
    const GLenum BOOL_VEC2 = 0x8B57;
    const GLenum BOOL_VEC3 = 0x8B58;
    const GLenum BOOL_VEC4 = 0x8B59;
    const GLenum FLOAT_MAT2 = 0x8B5A;
    const GLenum FLOAT_MAT3 = 0x8B5B;
    const GLenum FLOAT_MAT4 = 0x8B5C;
    const GLenum SAMPLER_2D = 0x8B5E;
    const GLenum SAMPLER_CUBE = 0x8B60;

    /* Vertex Arrays */
    const GLenum VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622;
    const GLenum VERTEX_ATTRIB_ARRAY_SIZE = 0x8623;
    const GLenum VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624;
    const GLenum VERTEX_ATTRIB_ARRAY_TYPE = 0x8625;
    const GLenum VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886A;
    const GLenum VERTEX_ATTRIB_ARRAY_POINTER = 0x8645;
    const GLenum VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F;

    /* Read Format */
    const GLenum IMPLEMENTATION_COLOR_READ_TYPE = 0x8B9A;
    const GLenum IMPLEMENTATION_COLOR_READ_FORMAT = 0x8B9B;

    /* Shader Source */
    const GLenum COMPILE_STATUS = 0x8B81;

    /* Shader Precision-Specified Types */
    const GLenum LOW_FLOAT = 0x8DF0;
    const GLenum MEDIUM_FLOAT = 0x8DF1;
    const GLenum HIGH_FLOAT = 0x8DF2;
    const GLenum LOW_INT = 0x8DF3;
    const GLenum MEDIUM_INT = 0x8DF4;
    const GLenum HIGH_INT = 0x8DF5;

    /* Framebuffer Object. */
    const GLenum FRAMEBUFFER = 0x8D40;
    const GLenum RENDERBUFFER = 0x8D41;

    const GLenum RGBA4 = 0x8056;
    const GLenum RGB5_A1 = 0x8057;
    const GLenum RGB565 = 0x8D62;
    const GLenum DEPTH_COMPONENT16 = 0x81A5;
    const GLenum STENCIL_INDEX = 0x1901;
    const GLenum STENCIL_INDEX8 = 0x8D48;
    const GLenum DEPTH_STENCIL = 0x84F9;

    const GLenum RENDERBUFFER_WIDTH = 0x8D42;
    const GLenum RENDERBUFFER_HEIGHT = 0x8D43;
    const GLenum RENDERBUFFER_INTERNAL_FORMAT = 0x8D44;
    const GLenum RENDERBUFFER_RED_SIZE = 0x8D50;
    const GLenum RENDERBUFFER_GREEN_SIZE = 0x8D51;
    const GLenum RENDERBUFFER_BLUE_SIZE = 0x8D52;
    const GLenum RENDERBUFFER_ALPHA_SIZE = 0x8D53;
    const GLenum RENDERBUFFER_DEPTH_SIZE = 0x8D54;
    const GLenum RENDERBUFFER_STENCIL_SIZE = 0x8D55;

    const GLenum FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x8CD0;
    const GLenum FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x8CD1;
    const GLenum FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x8CD2;
    const GLenum FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8CD3;

    const GLenum COLOR_ATTACHMENT0 = 0x8CE0;
    const GLenum DEPTH_ATTACHMENT = 0x8D00;
    const GLenum STENCIL_ATTACHMENT = 0x8D20;
    const GLenum DEPTH_STENCIL_ATTACHMENT = 0x821A;

    const GLenum NONE = 0;

    const GLenum FRAMEBUFFER_COMPLETE = 0x8CD5;
    const GLenum FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8CD6;
    const GLenum FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8CD7;
    const GLenum FRAMEBUFFER_INCOMPLETE_DIMENSIONS = 0x8CD9;
    const GLenum FRAMEBUFFER_UNSUPPORTED = 0x8CDD;

    const GLenum FRAMEBUFFER_BINDING = 0x8CA6;
    const GLenum RENDERBUFFER_BINDING = 0x8CA7;
    const GLenum MAX_RENDERBUFFER_SIZE = 0x84E8;

    const GLenum INVALID_FRAMEBUFFER_OPERATION = 0x0506;

    /* WebGL-specific enums */
    const GLenum UNPACK_FLIP_Y_WEBGL = 0x9240;
    const GLenum UNPACK_PREMULTIPLY_ALPHA_WEBGL = 0x9241;
    const GLenum CONTEXT_LOST_WEBGL = 0x9242;
    const GLenum UNPACK_COLORSPACE_CONVERSION_WEBGL = 0x9243;
    const GLenum BROWSER_DEFAULT_WEBGL = 0x9244;

    readonly attribute GLsizei drawingBufferWidth;
    readonly attribute GLsizei drawingBufferHeight;

    void activeTexture(GLenum texture);
    void attachShader(WebGLProgram? program, WebGLShader? shader);
    void bindAttribLocation(WebGLProgram? program, GLuint index, DOMString name);
    void bindBuffer(GLenum target, WebGLBuffer? buffer);
    void bindFramebuffer(GLenum target, WebGLFramebuffer? framebuffer);
    void bindRenderbuffer(GLenum target, WebGLRenderbuffer? renderbuffer);
    void bindTexture(GLenum target, WebGLTexture? texture);
    void blendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
    void blendEquation(GLenum mode);
    void blendEquationSeparate(GLenum modeRGB, GLenum modeAlpha);
    void blendFunc(GLenum sfactor, GLenum dfactor);
    void blendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
    void bufferData(GLenum target, BufferDataSource? data, GLenum usage);
    void bufferData(GLenum target, GLsizeiptr size, GLenum usage);
    void bufferSubData(GLenum target, GLintptr offset, BufferDataSource? data);

    GLenum checkFramebufferStatus(GLenum target);
    void clear(GLbitfield mask);
    void clearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
    void clearDepth(GLclampf depth);
    void clearStencil(GLint s);
    void colorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
    void compileShader(WebGLShader? shader);

    // compressedTexImage2D is split between WebGLRenderingContext and
    // WebGL2RenderingContext because the ArrayBufferView overloads are
    // indistinguishable.

    void compressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
        GLsizei width, GLsizei height, GLenum format, ArrayBufferView data);
    
    void copyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
    void copyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);

    WebGLBuffer createBuffer();
    WebGLFramebuffer createFramebuffer();
    WebGLProgram createProgram();
    WebGLRenderbuffer createRenderbuffer();
    WebGLShader createShader(GLenum type);
    WebGLTexture createTexture();

    void cullFace(GLenum mode);

    void deleteBuffer(WebGLBuffer? buffer);
    void deleteFramebuffer(WebGLFramebuffer? framebuffer);
    void deleteProgram(WebGLProgram? program);
    void deleteRenderbuffer(WebGLRenderbuffer? renderbuffer);
    void deleteShader(WebGLShader? shader);
    void deleteTexture(WebGLTexture? texture);

    void depthFunc(GLenum func);
    void depthMask(GLboolean flag);
    void depthRange(GLclampf zNear, GLclampf zFar);
    void detachShader(WebGLProgram? program, WebGLShader? shader);
    void disable(GLenum cap);
    void disableVertexAttribArray(GLuint index);
    void drawArrays(GLenum mode, GLint first, GLsizei count);
    void drawElements(GLenum mode, GLsizei count, GLenum type, GLintptr offset);

    void enable(GLenum cap);
    void enableVertexAttribArray(GLuint index);
    void finish();
    void flush();
    void framebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, WebGLRenderbuffer? renderbuffer);
    void framebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, WebGLTexture? texture, GLint level);
    void frontFace(GLenum mode);
    void generateMipmap(GLenum target);
    
    WebGLActiveInfo getActiveAttrib(WebGLProgram? program, GLuint index);
    WebGLActiveInfo getActiveUniform(WebGLProgram? program, GLuint index);

    // FIXME: The spec says this should not take a nullable WebGLProgram.
    sequence<WebGLShader>? getAttachedShaders(WebGLProgram? program);

    GLint getAttribLocation(WebGLProgram? program, DOMString name);

    [OverrideIDLType=IDLWebGLAny] any getBufferParameter(GLenum target, GLenum pname);

    WebGLContextAttributes? getContextAttributes();

    GLenum getError();

    sequence<DOMString>? getSupportedExtensions();
    [OverrideIDLType=IDLWebGLExtension] object? getExtension(DOMString name);

    [OverrideIDLType=IDLWebGLAny] any getFramebufferAttachmentParameter(GLenum target, GLenum attachment, GLenum pname);
    [OverrideIDLType=IDLWebGLAny] any getParameter(GLenum pname);
    [OverrideIDLType=IDLWebGLAny] any getProgramParameter(WebGLProgram? program, GLenum pname);
    DOMString? getProgramInfoLog(WebGLProgram? program);
    [OverrideIDLType=IDLWebGLAny] any getRenderbufferParameter(GLenum target, GLenum pname);
    [OverrideIDLType=IDLWebGLAny] any getShaderParameter(WebGLShader? shader, GLenum pname);

    DOMString? getShaderInfoLog(WebGLShader? shader);

    WebGLShaderPrecisionFormat getShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype);

    DOMString? getShaderSource(WebGLShader? shader);

    [OverrideIDLType=IDLWebGLAny] any getTexParameter(GLenum target, GLenum pname);

    [OverrideIDLType=IDLWebGLAny] any getUniform(WebGLProgram? program, WebGLUniformLocation? location);

    WebGLUniformLocation getUniformLocation(WebGLProgram? program, DOMString name);

    [OverrideIDLType=IDLWebGLAny] any getVertexAttrib(GLuint index, GLenum pname);

    GLsizeiptr getVertexAttribOffset(GLuint index, GLenum pname);

    void hint(GLenum target, GLenum mode);
    GLboolean isBuffer(WebGLBuffer? buffer);
    GLboolean isContextLost();
    GLboolean isEnabled(GLenum cap);
    GLboolean isFramebuffer(WebGLFramebuffer? framebuffer);
    GLboolean isProgram(WebGLProgram? program);
    GLboolean isRenderbuffer(WebGLRenderbuffer? renderbuffer);
    GLboolean isShader(WebGLShader? shader);
    GLboolean isTexture(WebGLTexture? texture);
    void lineWidth(GLfloat width);
    void linkProgram(WebGLProgram? program);
    void pixelStorei(GLenum pname, GLint param);
    void polygonOffset(GLfloat factor, GLfloat units);

    void readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, ArrayBufferView pixels);
    
    void releaseShaderCompiler();
    void renderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
    void sampleCoverage(GLclampf value, GLboolean invert);
    void scissor(GLint x, GLint y, GLsizei width, GLsizei height);
    void shaderSource(WebGLShader? shader, DOMString string);
    void stencilFunc(GLenum func, GLint ref, GLuint mask);
    void stencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask);
    void stencilMask(GLuint mask);
    void stencilMaskSeparate(GLenum face, GLuint mask);
    void stencilOp(GLenum fail, GLenum zfail, GLenum zpass);
    void stencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass);

    void texParameterf(GLenum target, GLenum pname, GLfloat param);
    void texParameteri(GLenum target, GLenum pname, GLint param);

    void uniform1f(WebGLUniformLocation? location, GLfloat x);
    void uniform2f(WebGLUniformLocation? location, GLfloat x, GLfloat y);
    void uniform3f(WebGLUniformLocation? location, GLfloat x, GLfloat y, GLfloat z);
    void uniform4f(WebGLUniformLocation? location, GLfloat x, GLfloat y, GLfloat z, GLfloat w);

    void uniform1i(WebGLUniformLocation? location, GLint x);
    void uniform2i(WebGLUniformLocation? location, GLint x, GLint y);
    void uniform3i(WebGLUniformLocation? location, GLint x, GLint y, GLint z);
    void uniform4i(WebGLUniformLocation? location, GLint x, GLint y, GLint z, GLint w);

    void uniform1fv(WebGLUniformLocation? location, Float32List v);
    void uniform2fv(WebGLUniformLocation? location, Float32List v);
    void uniform3fv(WebGLUniformLocation? location, Float32List v);
    void uniform4fv(WebGLUniformLocation? location, Float32List v);

    void uniform1iv(WebGLUniformLocation? location, Int32List v);
    void uniform2iv(WebGLUniformLocation? location, Int32List v);
    void uniform3iv(WebGLUniformLocation? location, Int32List v);
    void uniform4iv(WebGLUniformLocation? location, Int32List v);

    void uniformMatrix2fv(WebGLUniformLocation? location, GLboolean transpose, Float32List array);
    void uniformMatrix3fv(WebGLUniformLocation? location, GLboolean transpose, Float32List array);
    void uniformMatrix4fv(WebGLUniformLocation? location, GLboolean transpose, Float32List array);

    void useProgram(WebGLProgram? program);
    void validateProgram(WebGLProgram? program);

    void vertexAttrib1f(GLuint index, GLfloat x);
    void vertexAttrib2f(GLuint index, GLfloat x, GLfloat y);
    void vertexAttrib3f(GLuint index, GLfloat x, GLfloat y, GLfloat z);
    void vertexAttrib4f(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);

    void vertexAttrib1fv(GLuint index, Float32List values);
    void vertexAttrib2fv(GLuint index, Float32List values);
    void vertexAttrib3fv(GLuint index, Float32List values);
    void vertexAttrib4fv(GLuint index, Float32List values);

    void vertexAttribPointer(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset);

    void viewport(GLint x, GLint y, GLsizei width, GLsizei height);
};
