#ifndef __gles2_gl3_h_
#define __gles2_gl3_h_ 1

#ifdef __cplusplus
extern "C"
{
#endif

    /*
    ** Copyright 2013-2020 The Khronos Group Inc.
    ** SPDX-License-Identifier: MIT
    **
    ** This header is generated from the Khronos OpenGL / OpenGL ES XML
    ** API Registry. The current version of the Registry, generator scripts
    ** used to make the header, and the header can be found at
    **   https://github.com/KhronosGroup/OpenGL-Registry
    */

#include <GLES3/gl3platform.h>

#ifndef GL_APIENTRYP
#define GL_APIENTRYP GL_APIENTRY*
#endif

#ifndef GL_GLES_PROTOTYPES
#define GL_GLES_PROTOTYPES 1
#endif

    /* Generated on date 20210107 */

    /* Generated C header for:
     * API: gles2
     * Profile: common
     * Versions considered: 2\.[0-9]|3\.0
     * Versions emitted: .*
     * Default extensions included: None
     * Additional extensions included: _nomatch_^
     * Extensions removed: _nomatch_^
     */

#ifndef GL_ES_VERSION_2_0
#define GL_ES_VERSION_2_0 1
#include <KHR/khrplatform.h>
    typedef khronos_int8_t GLbyte;
    typedef khronos_float_t GLclampf;
    typedef khronos_int32_t GLfixed;
    typedef khronos_int16_t GLshort;
    typedef khronos_uint16_t GLushort;
    typedef void GLvoid;
    typedef struct __GLsync* GLsync;
    typedef khronos_int64_t GLint64;
    typedef khronos_uint64_t GLuint64;
    typedef unsigned int GLenum;
    typedef unsigned int GLuint;
    typedef char GLchar;
    typedef khronos_float_t GLfloat;
    typedef khronos_ssize_t GLsizeiptr;
    typedef khronos_intptr_t GLintptr;
    typedef unsigned int GLbitfield;
    typedef int GLint;
    typedef unsigned char GLboolean;
    typedef int GLsizei;
    typedef khronos_uint8_t GLubyte;
#define GL_DEPTH_BUFFER_BIT 0x00000100
#define GL_STENCIL_BUFFER_BIT 0x00000400
#define GL_COLOR_BUFFER_BIT 0x00004000
#define GL_FALSE 0
#define GL_TRUE 1
#define GL_POINTS 0x0000
#define GL_LINES 0x0001
#define GL_LINE_LOOP 0x0002
#define GL_LINE_STRIP 0x0003
#define GL_TRIANGLES 0x0004
#define GL_TRIANGLE_STRIP 0x0005
#define GL_TRIANGLE_FAN 0x0006
#define GL_ZERO 0
#define GL_ONE 1
#define GL_SRC_COLOR 0x0300
#define GL_ONE_MINUS_SRC_COLOR 0x0301
#define GL_SRC_ALPHA 0x0302
#define GL_ONE_MINUS_SRC_ALPHA 0x0303
#define GL_DST_ALPHA 0x0304
#define GL_ONE_MINUS_DST_ALPHA 0x0305
#define GL_DST_COLOR 0x0306
#define GL_ONE_MINUS_DST_COLOR 0x0307
#define GL_SRC_ALPHA_SATURATE 0x0308
#define GL_FUNC_ADD 0x8006
#define GL_BLEND_EQUATION 0x8009
#define GL_BLEND_EQUATION_RGB 0x8009
#define GL_BLEND_EQUATION_ALPHA 0x883D
#define GL_FUNC_SUBTRACT 0x800A
#define GL_FUNC_REVERSE_SUBTRACT 0x800B
#define GL_BLEND_DST_RGB 0x80C8
#define GL_BLEND_SRC_RGB 0x80C9
#define GL_BLEND_DST_ALPHA 0x80CA
#define GL_BLEND_SRC_ALPHA 0x80CB
#define GL_CONSTANT_COLOR 0x8001
#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002
#define GL_CONSTANT_ALPHA 0x8003
#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004
#define GL_BLEND_COLOR 0x8005
#define GL_ARRAY_BUFFER 0x8892
#define GL_ELEMENT_ARRAY_BUFFER 0x8893
#define GL_ARRAY_BUFFER_BINDING 0x8894
#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895
#define GL_STREAM_DRAW 0x88E0
#define GL_STATIC_DRAW 0x88E4
#define GL_DYNAMIC_DRAW 0x88E8
#define GL_BUFFER_SIZE 0x8764
#define GL_BUFFER_USAGE 0x8765
#define GL_CURRENT_VERTEX_ATTRIB 0x8626
#define GL_FRONT 0x0404
#define GL_BACK 0x0405
#define GL_FRONT_AND_BACK 0x0408
#define GL_TEXTURE_2D 0x0DE1
#define GL_CULL_FACE 0x0B44
#define GL_BLEND 0x0BE2
#define GL_DITHER 0x0BD0
#define GL_STENCIL_TEST 0x0B90
#define GL_DEPTH_TEST 0x0B71
#define GL_SCISSOR_TEST 0x0C11
#define GL_POLYGON_OFFSET_FILL 0x8037
#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E
#define GL_SAMPLE_COVERAGE 0x80A0
#define GL_NO_ERROR 0
#define GL_INVALID_ENUM 0x0500
#define GL_INVALID_VALUE 0x0501
#define GL_INVALID_OPERATION 0x0502
#define GL_OUT_OF_MEMORY 0x0505
#define GL_CW 0x0900
#define GL_CCW 0x0901
#define GL_LINE_WIDTH 0x0B21
#define GL_ALIASED_POINT_SIZE_RANGE 0x846D
#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E
#define GL_CULL_FACE_MODE 0x0B45
#define GL_FRONT_FACE 0x0B46
#define GL_DEPTH_RANGE 0x0B70
#define GL_DEPTH_WRITEMASK 0x0B72
#define GL_DEPTH_CLEAR_VALUE 0x0B73
#define GL_DEPTH_FUNC 0x0B74
#define GL_STENCIL_CLEAR_VALUE 0x0B91
#define GL_STENCIL_FUNC 0x0B92
#define GL_STENCIL_FAIL 0x0B94
#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95
#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96
#define GL_STENCIL_REF 0x0B97
#define GL_STENCIL_VALUE_MASK 0x0B93
#define GL_STENCIL_WRITEMASK 0x0B98
#define GL_STENCIL_BACK_FUNC 0x8800
#define GL_STENCIL_BACK_FAIL 0x8801
#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802
#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803
#define GL_STENCIL_BACK_REF 0x8CA3
#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4
#define GL_STENCIL_BACK_WRITEMASK 0x8CA5
#define GL_VIEWPORT 0x0BA2
#define GL_SCISSOR_BOX 0x0C10
#define GL_COLOR_CLEAR_VALUE 0x0C22
#define GL_COLOR_WRITEMASK 0x0C23
#define GL_UNPACK_ALIGNMENT 0x0CF5
#define GL_PACK_ALIGNMENT 0x0D05
#define GL_MAX_TEXTURE_SIZE 0x0D33
#define GL_MAX_VIEWPORT_DIMS 0x0D3A
#define GL_SUBPIXEL_BITS 0x0D50
#define GL_RED_BITS 0x0D52
#define GL_GREEN_BITS 0x0D53
#define GL_BLUE_BITS 0x0D54
#define GL_ALPHA_BITS 0x0D55
#define GL_DEPTH_BITS 0x0D56
#define GL_STENCIL_BITS 0x0D57
#define GL_POLYGON_OFFSET_UNITS 0x2A00
#define GL_POLYGON_OFFSET_FACTOR 0x8038
#define GL_TEXTURE_BINDING_2D 0x8069
#define GL_SAMPLE_BUFFERS 0x80A8
#define GL_SAMPLES 0x80A9
#define GL_SAMPLE_COVERAGE_VALUE 0x80AA
#define GL_SAMPLE_COVERAGE_INVERT 0x80AB
#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2
#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3
#define GL_DONT_CARE 0x1100
#define GL_FASTEST 0x1101
#define GL_NICEST 0x1102
#define GL_GENERATE_MIPMAP_HINT 0x8192
#define GL_BYTE 0x1400
#define GL_UNSIGNED_BYTE 0x1401
#define GL_SHORT 0x1402
#define GL_UNSIGNED_SHORT 0x1403
#define GL_INT 0x1404
#define GL_UNSIGNED_INT 0x1405
#define GL_FLOAT 0x1406
#define GL_FIXED 0x140C
#define GL_DEPTH_COMPONENT 0x1902
#define GL_ALPHA 0x1906
#define GL_RGB 0x1907
#define GL_RGBA 0x1908
#define GL_LUMINANCE 0x1909
#define GL_LUMINANCE_ALPHA 0x190A
#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033
#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034
#define GL_UNSIGNED_SHORT_5_6_5 0x8363
#define GL_FRAGMENT_SHADER 0x8B30
#define GL_VERTEX_SHADER 0x8B31
#define GL_MAX_VERTEX_ATTRIBS 0x8869
#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB
#define GL_MAX_VARYING_VECTORS 0x8DFC
#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D
#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C
#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872
#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD
#define GL_SHADER_TYPE 0x8B4F
#define GL_DELETE_STATUS 0x8B80
#define GL_LINK_STATUS 0x8B82
#define GL_VALIDATE_STATUS 0x8B83
#define GL_ATTACHED_SHADERS 0x8B85
#define GL_ACTIVE_UNIFORMS 0x8B86
#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87
#define GL_ACTIVE_ATTRIBUTES 0x8B89
#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A
#define GL_SHADING_LANGUAGE_VERSION 0x8B8C
#define GL_CURRENT_PROGRAM 0x8B8D
#define GL_NEVER 0x0200
#define GL_LESS 0x0201
#define GL_EQUAL 0x0202
#define GL_LEQUAL 0x0203
#define GL_GREATER 0x0204
#define GL_NOTEQUAL 0x0205
#define GL_GEQUAL 0x0206
#define GL_ALWAYS 0x0207
#define GL_KEEP 0x1E00
#define GL_REPLACE 0x1E01
#define GL_INCR 0x1E02
#define GL_DECR 0x1E03
#define GL_INVERT 0x150A
#define GL_INCR_WRAP 0x8507
#define GL_DECR_WRAP 0x8508
#define GL_VENDOR 0x1F00
#define GL_RENDERER 0x1F01
#define GL_VERSION 0x1F02
#define GL_EXTENSIONS 0x1F03
#define GL_NEAREST 0x2600
#define GL_LINEAR 0x2601
#define GL_NEAREST_MIPMAP_NEAREST 0x2700
#define GL_LINEAR_MIPMAP_NEAREST 0x2701
#define GL_NEAREST_MIPMAP_LINEAR 0x2702
#define GL_LINEAR_MIPMAP_LINEAR 0x2703
#define GL_TEXTURE_MAG_FILTER 0x2800
#define GL_TEXTURE_MIN_FILTER 0x2801
#define GL_TEXTURE_WRAP_S 0x2802
#define GL_TEXTURE_WRAP_T 0x2803
#define GL_TEXTURE 0x1702
#define GL_TEXTURE_CUBE_MAP 0x8513
#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514
#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515
#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516
#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517
#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518
#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519
#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A
#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C
#define GL_TEXTURE0 0x84C0
#define GL_TEXTURE1 0x84C1
#define GL_TEXTURE2 0x84C2
#define GL_TEXTURE3 0x84C3
#define GL_TEXTURE4 0x84C4
#define GL_TEXTURE5 0x84C5
#define GL_TEXTURE6 0x84C6
#define GL_TEXTURE7 0x84C7
#define GL_TEXTURE8 0x84C8
#define GL_TEXTURE9 0x84C9
#define GL_TEXTURE10 0x84CA
#define GL_TEXTURE11 0x84CB
#define GL_TEXTURE12 0x84CC
#define GL_TEXTURE13 0x84CD
#define GL_TEXTURE14 0x84CE
#define GL_TEXTURE15 0x84CF
#define GL_TEXTURE16 0x84D0
#define GL_TEXTURE17 0x84D1
#define GL_TEXTURE18 0x84D2
#define GL_TEXTURE19 0x84D3
#define GL_TEXTURE20 0x84D4
#define GL_TEXTURE21 0x84D5
#define GL_TEXTURE22 0x84D6
#define GL_TEXTURE23 0x84D7
#define GL_TEXTURE24 0x84D8
#define GL_TEXTURE25 0x84D9
#define GL_TEXTURE26 0x84DA
#define GL_TEXTURE27 0x84DB
#define GL_TEXTURE28 0x84DC
#define GL_TEXTURE29 0x84DD
#define GL_TEXTURE30 0x84DE
#define GL_TEXTURE31 0x84DF
#define GL_ACTIVE_TEXTURE 0x84E0
#define GL_REPEAT 0x2901
#define GL_CLAMP_TO_EDGE 0x812F
#define GL_MIRRORED_REPEAT 0x8370
#define GL_FLOAT_VEC2 0x8B50
#define GL_FLOAT_VEC3 0x8B51
#define GL_FLOAT_VEC4 0x8B52
#define GL_INT_VEC2 0x8B53
#define GL_INT_VEC3 0x8B54
#define GL_INT_VEC4 0x8B55
#define GL_BOOL 0x8B56
#define GL_BOOL_VEC2 0x8B57
#define GL_BOOL_VEC3 0x8B58
#define GL_BOOL_VEC4 0x8B59
#define GL_FLOAT_MAT2 0x8B5A
#define GL_FLOAT_MAT3 0x8B5B
#define GL_FLOAT_MAT4 0x8B5C
#define GL_SAMPLER_2D 0x8B5E
#define GL_SAMPLER_CUBE 0x8B60
#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622
#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623
#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624
#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625
#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A
#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645
#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F
#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A
#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B
#define GL_COMPILE_STATUS 0x8B81
#define GL_INFO_LOG_LENGTH 0x8B84
#define GL_SHADER_SOURCE_LENGTH 0x8B88
#define GL_SHADER_COMPILER 0x8DFA
#define GL_SHADER_BINARY_FORMATS 0x8DF8
#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9
#define GL_LOW_FLOAT 0x8DF0
#define GL_MEDIUM_FLOAT 0x8DF1
#define GL_HIGH_FLOAT 0x8DF2
#define GL_LOW_INT 0x8DF3
#define GL_MEDIUM_INT 0x8DF4
#define GL_HIGH_INT 0x8DF5
#define GL_FRAMEBUFFER 0x8D40
#define GL_RENDERBUFFER 0x8D41
#define GL_RGBA4 0x8056
#define GL_RGB5_A1 0x8057
#define GL_RGB565 0x8D62
#define GL_DEPTH_COMPONENT16 0x81A5
#define GL_STENCIL_INDEX8 0x8D48
#define GL_RENDERBUFFER_WIDTH 0x8D42
#define GL_RENDERBUFFER_HEIGHT 0x8D43
#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44
#define GL_RENDERBUFFER_RED_SIZE 0x8D50
#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51
#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52
#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53
#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54
#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55
#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0
#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1
#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2
#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3
#define GL_COLOR_ATTACHMENT0 0x8CE0
#define GL_DEPTH_ATTACHMENT 0x8D00
#define GL_STENCIL_ATTACHMENT 0x8D20
#define GL_NONE 0
#define GL_FRAMEBUFFER_COMPLETE 0x8CD5
#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6
#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7
#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS 0x8CD9
#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD
#define GL_FRAMEBUFFER_BINDING 0x8CA6
#define GL_RENDERBUFFER_BINDING 0x8CA7
#define GL_MAX_RENDERBUFFER_SIZE 0x84E8
#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506
    typedef void(GL_APIENTRYP PFNGLACTIVETEXTUREPROC)(GLenum texture);
    typedef void(GL_APIENTRYP PFNGLATTACHSHADERPROC)(GLuint program,
                                                     GLuint shader);
    typedef void(GL_APIENTRYP PFNGLBINDATTRIBLOCATIONPROC)(GLuint program,
                                                           GLuint index,
                                                           const GLchar* name);
    typedef void(GL_APIENTRYP PFNGLBINDBUFFERPROC)(GLenum target,
                                                   GLuint buffer);
    typedef void(GL_APIENTRYP PFNGLBINDFRAMEBUFFERPROC)(GLenum target,
                                                        GLuint framebuffer);
    typedef void(GL_APIENTRYP PFNGLBINDRENDERBUFFERPROC)(GLenum target,
                                                         GLuint renderbuffer);
    typedef void(GL_APIENTRYP PFNGLBINDTEXTUREPROC)(GLenum target,
                                                    GLuint texture);
    typedef void(GL_APIENTRYP PFNGLBLENDCOLORPROC)(GLfloat red,
                                                   GLfloat green,
                                                   GLfloat blue,
                                                   GLfloat alpha);
    typedef void(GL_APIENTRYP PFNGLBLENDEQUATIONPROC)(GLenum mode);
    typedef void(GL_APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC)(GLenum modeRGB,
                                                              GLenum modeAlpha);
    typedef void(GL_APIENTRYP PFNGLBLENDFUNCPROC)(GLenum sfactor,
                                                  GLenum dfactor);
    typedef void(GL_APIENTRYP PFNGLBLENDFUNCSEPARATEPROC)(GLenum sfactorRGB,
                                                          GLenum dfactorRGB,
                                                          GLenum sfactorAlpha,
                                                          GLenum dfactorAlpha);
    typedef void(GL_APIENTRYP PFNGLBUFFERDATAPROC)(GLenum target,
                                                   GLsizeiptr size,
                                                   const void* data,
                                                   GLenum usage);
    typedef void(GL_APIENTRYP PFNGLBUFFERSUBDATAPROC)(GLenum target,
                                                      GLintptr offset,
                                                      GLsizeiptr size,
                                                      const void* data);
    typedef GLenum(GL_APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC)(GLenum target);
    typedef void(GL_APIENTRYP PFNGLCLEARPROC)(GLbitfield mask);
    typedef void(GL_APIENTRYP PFNGLCLEARCOLORPROC)(GLfloat red,
                                                   GLfloat green,
                                                   GLfloat blue,
                                                   GLfloat alpha);
    typedef void(GL_APIENTRYP PFNGLCLEARDEPTHFPROC)(GLfloat d);
    typedef void(GL_APIENTRYP PFNGLCLEARSTENCILPROC)(GLint s);
    typedef void(GL_APIENTRYP PFNGLCOLORMASKPROC)(GLboolean red,
                                                  GLboolean green,
                                                  GLboolean blue,
                                                  GLboolean alpha);
    typedef void(GL_APIENTRYP PFNGLCOMPILESHADERPROC)(GLuint shader);
    typedef void(GL_APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC)(
        GLenum target,
        GLint level,
        GLenum internalformat,
        GLsizei width,
        GLsizei height,
        GLint border,
        GLsizei imageSize,
        const void* data);
    typedef void(GL_APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC)(
        GLenum target,
        GLint level,
        GLint xoffset,
        GLint yoffset,
        GLsizei width,
        GLsizei height,
        GLenum format,
        GLsizei imageSize,
        const void* data);
    typedef void(GL_APIENTRYP PFNGLCOPYTEXIMAGE2DPROC)(GLenum target,
                                                       GLint level,
                                                       GLenum internalformat,
                                                       GLint x,
                                                       GLint y,
                                                       GLsizei width,
                                                       GLsizei height,
                                                       GLint border);
    typedef void(GL_APIENTRYP PFNGLCOPYTEXSUBIMAGE2DPROC)(GLenum target,
                                                          GLint level,
                                                          GLint xoffset,
                                                          GLint yoffset,
                                                          GLint x,
                                                          GLint y,
                                                          GLsizei width,
                                                          GLsizei height);
    typedef GLuint(GL_APIENTRYP PFNGLCREATEPROGRAMPROC)(void);
    typedef GLuint(GL_APIENTRYP PFNGLCREATESHADERPROC)(GLenum type);
    typedef void(GL_APIENTRYP PFNGLCULLFACEPROC)(GLenum mode);
    typedef void(GL_APIENTRYP PFNGLDELETEBUFFERSPROC)(GLsizei n,
                                                      const GLuint* buffers);
    typedef void(GL_APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC)(
        GLsizei n,
        const GLuint* framebuffers);
    typedef void(GL_APIENTRYP PFNGLDELETEPROGRAMPROC)(GLuint program);
    typedef void(GL_APIENTRYP PFNGLDELETERENDERBUFFERSPROC)(
        GLsizei n,
        const GLuint* renderbuffers);
    typedef void(GL_APIENTRYP PFNGLDELETESHADERPROC)(GLuint shader);
    typedef void(GL_APIENTRYP PFNGLDELETETEXTURESPROC)(GLsizei n,
                                                       const GLuint* textures);
    typedef void(GL_APIENTRYP PFNGLDEPTHFUNCPROC)(GLenum func);
    typedef void(GL_APIENTRYP PFNGLDEPTHMASKPROC)(GLboolean flag);
    typedef void(GL_APIENTRYP PFNGLDEPTHRANGEFPROC)(GLfloat n, GLfloat f);
    typedef void(GL_APIENTRYP PFNGLDETACHSHADERPROC)(GLuint program,
                                                     GLuint shader);
    typedef void(GL_APIENTRYP PFNGLDISABLEPROC)(GLenum cap);
    typedef void(GL_APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC)(GLuint index);
    typedef void(GL_APIENTRYP PFNGLDRAWARRAYSPROC)(GLenum mode,
                                                   GLint first,
                                                   GLsizei count);
    typedef void(GL_APIENTRYP PFNGLDRAWELEMENTSPROC)(GLenum mode,
                                                     GLsizei count,
                                                     GLenum type,
                                                     const void* indices);
    typedef void(GL_APIENTRYP PFNGLENABLEPROC)(GLenum cap);
    typedef void(GL_APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC)(GLuint index);
    typedef void(GL_APIENTRYP PFNGLFINISHPROC)(void);
    typedef void(GL_APIENTRYP PFNGLFLUSHPROC)(void);
    typedef void(GL_APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC)(
        GLenum target,
        GLenum attachment,
        GLenum renderbuffertarget,
        GLuint renderbuffer);
    typedef void(GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC)(GLenum target,
                                                             GLenum attachment,
                                                             GLenum textarget,
                                                             GLuint texture,
                                                             GLint level);
    typedef void(GL_APIENTRYP PFNGLFRONTFACEPROC)(GLenum mode);
    typedef void(GL_APIENTRYP PFNGLGENBUFFERSPROC)(GLsizei n, GLuint* buffers);
    typedef void(GL_APIENTRYP PFNGLGENERATEMIPMAPPROC)(GLenum target);
    typedef void(GL_APIENTRYP PFNGLGENFRAMEBUFFERSPROC)(GLsizei n,
                                                        GLuint* framebuffers);
    typedef void(GL_APIENTRYP PFNGLGENRENDERBUFFERSPROC)(GLsizei n,
                                                         GLuint* renderbuffers);
    typedef void(GL_APIENTRYP PFNGLGENTEXTURESPROC)(GLsizei n,
                                                    GLuint* textures);
    typedef void(GL_APIENTRYP PFNGLGETACTIVEATTRIBPROC)(GLuint program,
                                                        GLuint index,
                                                        GLsizei bufSize,
                                                        GLsizei* length,
                                                        GLint* size,
                                                        GLenum* type,
                                                        GLchar* name);
    typedef void(GL_APIENTRYP PFNGLGETACTIVEUNIFORMPROC)(GLuint program,
                                                         GLuint index,
                                                         GLsizei bufSize,
                                                         GLsizei* length,
                                                         GLint* size,
                                                         GLenum* type,
                                                         GLchar* name);
    typedef void(GL_APIENTRYP PFNGLGETATTACHEDSHADERSPROC)(GLuint program,
                                                           GLsizei maxCount,
                                                           GLsizei* count,
                                                           GLuint* shaders);
    typedef GLint(GL_APIENTRYP PFNGLGETATTRIBLOCATIONPROC)(GLuint program,
                                                           const GLchar* name);
    typedef void(GL_APIENTRYP PFNGLGETBOOLEANVPROC)(GLenum pname,
                                                    GLboolean* data);
    typedef void(GL_APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC)(GLenum target,
                                                             GLenum pname,
                                                             GLint* params);
    typedef GLenum(GL_APIENTRYP PFNGLGETERRORPROC)(void);
    typedef void(GL_APIENTRYP PFNGLGETFLOATVPROC)(GLenum pname, GLfloat* data);
    typedef void(GL_APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)(
        GLenum target,
        GLenum attachment,
        GLenum pname,
        GLint* params);
    typedef void(GL_APIENTRYP PFNGLGETINTEGERVPROC)(GLenum pname, GLint* data);
    typedef void(GL_APIENTRYP PFNGLGETPROGRAMIVPROC)(GLuint program,
                                                     GLenum pname,
                                                     GLint* params);
    typedef void(GL_APIENTRYP PFNGLGETPROGRAMINFOLOGPROC)(GLuint program,
                                                          GLsizei bufSize,
                                                          GLsizei* length,
                                                          GLchar* infoLog);
    typedef void(GL_APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC)(
        GLenum target,
        GLenum pname,
        GLint* params);
    typedef void(GL_APIENTRYP PFNGLGETSHADERIVPROC)(GLuint shader,
                                                    GLenum pname,
                                                    GLint* params);
    typedef void(GL_APIENTRYP PFNGLGETSHADERINFOLOGPROC)(GLuint shader,
                                                         GLsizei bufSize,
                                                         GLsizei* length,
                                                         GLchar* infoLog);
    typedef void(GL_APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC)(
        GLenum shadertype,
        GLenum precisiontype,
        GLint* range,
        GLint* precision);
    typedef void(GL_APIENTRYP PFNGLGETSHADERSOURCEPROC)(GLuint shader,
                                                        GLsizei bufSize,
                                                        GLsizei* length,
                                                        GLchar* source);
    typedef const GLubyte*(GL_APIENTRYP PFNGLGETSTRINGPROC)(GLenum name);
    typedef void(GL_APIENTRYP PFNGLGETTEXPARAMETERFVPROC)(GLenum target,
                                                          GLenum pname,
                                                          GLfloat* params);
    typedef void(GL_APIENTRYP PFNGLGETTEXPARAMETERIVPROC)(GLenum target,
                                                          GLenum pname,
                                                          GLint* params);
    typedef void(GL_APIENTRYP PFNGLGETUNIFORMFVPROC)(GLuint program,
                                                     GLint location,
                                                     GLfloat* params);
    typedef void(GL_APIENTRYP PFNGLGETUNIFORMIVPROC)(GLuint program,
                                                     GLint location,
                                                     GLint* params);
    typedef GLint(GL_APIENTRYP PFNGLGETUNIFORMLOCATIONPROC)(GLuint program,
                                                            const GLchar* name);
    typedef void(GL_APIENTRYP PFNGLGETVERTEXATTRIBFVPROC)(GLuint index,
                                                          GLenum pname,
                                                          GLfloat* params);
    typedef void(GL_APIENTRYP PFNGLGETVERTEXATTRIBIVPROC)(GLuint index,
                                                          GLenum pname,
                                                          GLint* params);
    typedef void(GL_APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC)(GLuint index,
                                                                GLenum pname,
                                                                void** pointer);
    typedef void(GL_APIENTRYP PFNGLHINTPROC)(GLenum target, GLenum mode);
    typedef GLboolean(GL_APIENTRYP PFNGLISBUFFERPROC)(GLuint buffer);
    typedef GLboolean(GL_APIENTRYP PFNGLISENABLEDPROC)(GLenum cap);
    typedef GLboolean(GL_APIENTRYP PFNGLISFRAMEBUFFERPROC)(GLuint framebuffer);
    typedef GLboolean(GL_APIENTRYP PFNGLISPROGRAMPROC)(GLuint program);
    typedef GLboolean(GL_APIENTRYP PFNGLISRENDERBUFFERPROC)(
        GLuint renderbuffer);
    typedef GLboolean(GL_APIENTRYP PFNGLISSHADERPROC)(GLuint shader);
    typedef GLboolean(GL_APIENTRYP PFNGLISTEXTUREPROC)(GLuint texture);
    typedef void(GL_APIENTRYP PFNGLLINEWIDTHPROC)(GLfloat width);
    typedef void(GL_APIENTRYP PFNGLLINKPROGRAMPROC)(GLuint program);
    typedef void(GL_APIENTRYP PFNGLPIXELSTOREIPROC)(GLenum pname, GLint param);
    typedef void(GL_APIENTRYP PFNGLPOLYGONOFFSETPROC)(GLfloat factor,
                                                      GLfloat units);
    typedef void(GL_APIENTRYP PFNGLREADPIXELSPROC)(GLint x,
                                                   GLint y,
                                                   GLsizei width,
                                                   GLsizei height,
                                                   GLenum format,
                                                   GLenum type,
                                                   void* pixels);
    typedef void(GL_APIENTRYP PFNGLRELEASESHADERCOMPILERPROC)(void);
    typedef void(GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC)(
        GLenum target,
        GLenum internalformat,
        GLsizei width,
        GLsizei height);
    typedef void(GL_APIENTRYP PFNGLSAMPLECOVERAGEPROC)(GLfloat value,
                                                       GLboolean invert);
    typedef void(GL_APIENTRYP PFNGLSCISSORPROC)(GLint x,
                                                GLint y,
                                                GLsizei width,
                                                GLsizei height);
    typedef void(GL_APIENTRYP PFNGLSHADERBINARYPROC)(GLsizei count,
                                                     const GLuint* shaders,
                                                     GLenum binaryFormat,
                                                     const void* binary,
                                                     GLsizei length);
    typedef void(GL_APIENTRYP PFNGLSHADERSOURCEPROC)(
        GLuint shader,
        GLsizei count,
        const GLchar* const* string,
        const GLint* length);
    typedef void(GL_APIENTRYP PFNGLSTENCILFUNCPROC)(GLenum func,
                                                    GLint ref,
                                                    GLuint mask);
    typedef void(GL_APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC)(GLenum face,
                                                            GLenum func,
                                                            GLint ref,
                                                            GLuint mask);
    typedef void(GL_APIENTRYP PFNGLSTENCILMASKPROC)(GLuint mask);
    typedef void(GL_APIENTRYP PFNGLSTENCILMASKSEPARATEPROC)(GLenum face,
                                                            GLuint mask);
    typedef void(GL_APIENTRYP PFNGLSTENCILOPPROC)(GLenum fail,
                                                  GLenum zfail,
                                                  GLenum zpass);
    typedef void(GL_APIENTRYP PFNGLSTENCILOPSEPARATEPROC)(GLenum face,
                                                          GLenum sfail,
                                                          GLenum dpfail,
                                                          GLenum dppass);
    typedef void(GL_APIENTRYP PFNGLTEXIMAGE2DPROC)(GLenum target,
                                                   GLint level,
                                                   GLint internalformat,
                                                   GLsizei width,
                                                   GLsizei height,
                                                   GLint border,
                                                   GLenum format,
                                                   GLenum type,
                                                   const void* pixels);
    typedef void(GL_APIENTRYP PFNGLTEXPARAMETERFPROC)(GLenum target,
                                                      GLenum pname,
                                                      GLfloat param);
    typedef void(GL_APIENTRYP PFNGLTEXPARAMETERFVPROC)(GLenum target,
                                                       GLenum pname,
                                                       const GLfloat* params);
    typedef void(GL_APIENTRYP PFNGLTEXPARAMETERIPROC)(GLenum target,
                                                      GLenum pname,
                                                      GLint param);
    typedef void(GL_APIENTRYP PFNGLTEXPARAMETERIVPROC)(GLenum target,
                                                       GLenum pname,
                                                       const GLint* params);
    typedef void(GL_APIENTRYP PFNGLTEXSUBIMAGE2DPROC)(GLenum target,
                                                      GLint level,
                                                      GLint xoffset,
                                                      GLint yoffset,
                                                      GLsizei width,
                                                      GLsizei height,
                                                      GLenum format,
                                                      GLenum type,
                                                      const void* pixels);
    typedef void(GL_APIENTRYP PFNGLUNIFORM1FPROC)(GLint location, GLfloat v0);
    typedef void(GL_APIENTRYP PFNGLUNIFORM1FVPROC)(GLint location,
                                                   GLsizei count,
                                                   const GLfloat* value);
    typedef void(GL_APIENTRYP PFNGLUNIFORM1IPROC)(GLint location, GLint v0);
    typedef void(GL_APIENTRYP PFNGLUNIFORM1IVPROC)(GLint location,
                                                   GLsizei count,
                                                   const GLint* value);
    typedef void(GL_APIENTRYP PFNGLUNIFORM2FPROC)(GLint location,
                                                  GLfloat v0,
                                                  GLfloat v1);
    typedef void(GL_APIENTRYP PFNGLUNIFORM2FVPROC)(GLint location,
                                                   GLsizei count,
                                                   const GLfloat* value);
    typedef void(GL_APIENTRYP PFNGLUNIFORM2IPROC)(GLint location,
                                                  GLint v0,
                                                  GLint v1);
    typedef void(GL_APIENTRYP PFNGLUNIFORM2IVPROC)(GLint location,
                                                   GLsizei count,
                                                   const GLint* value);
    typedef void(GL_APIENTRYP PFNGLUNIFORM3FPROC)(GLint location,
                                                  GLfloat v0,
                                                  GLfloat v1,
                                                  GLfloat v2);
    typedef void(GL_APIENTRYP PFNGLUNIFORM3FVPROC)(GLint location,
                                                   GLsizei count,
                                                   const GLfloat* value);
    typedef void(GL_APIENTRYP PFNGLUNIFORM3IPROC)(GLint location,
                                                  GLint v0,
                                                  GLint v1,
                                                  GLint v2);
    typedef void(GL_APIENTRYP PFNGLUNIFORM3IVPROC)(GLint location,
                                                   GLsizei count,
                                                   const GLint* value);
    typedef void(GL_APIENTRYP PFNGLUNIFORM4FPROC)(GLint location,
                                                  GLfloat v0,
                                                  GLfloat v1,
                                                  GLfloat v2,
                                                  GLfloat v3);
    typedef void(GL_APIENTRYP PFNGLUNIFORM4FVPROC)(GLint location,
                                                   GLsizei count,
                                                   const GLfloat* value);
    typedef void(GL_APIENTRYP PFNGLUNIFORM4IPROC)(GLint location,
                                                  GLint v0,
                                                  GLint v1,
                                                  GLint v2,
                                                  GLint v3);
    typedef void(GL_APIENTRYP PFNGLUNIFORM4IVPROC)(GLint location,
                                                   GLsizei count,
                                                   const GLint* value);
    typedef void(GL_APIENTRYP PFNGLUNIFORMMATRIX2FVPROC)(GLint location,
                                                         GLsizei count,
                                                         GLboolean transpose,
                                                         const GLfloat* value);
    typedef void(GL_APIENTRYP PFNGLUNIFORMMATRIX3FVPROC)(GLint location,
                                                         GLsizei count,
                                                         GLboolean transpose,
                                                         const GLfloat* value);
    typedef void(GL_APIENTRYP PFNGLUNIFORMMATRIX4FVPROC)(GLint location,
                                                         GLsizei count,
                                                         GLboolean transpose,
                                                         const GLfloat* value);
    typedef void(GL_APIENTRYP PFNGLUSEPROGRAMPROC)(GLuint program);
    typedef void(GL_APIENTRYP PFNGLVALIDATEPROGRAMPROC)(GLuint program);
    typedef void(GL_APIENTRYP PFNGLVERTEXATTRIB1FPROC)(GLuint index, GLfloat x);
    typedef void(GL_APIENTRYP PFNGLVERTEXATTRIB1FVPROC)(GLuint index,
                                                        const GLfloat* v);
    typedef void(GL_APIENTRYP PFNGLVERTEXATTRIB2FPROC)(GLuint index,
                                                       GLfloat x,
                                                       GLfloat y);
    typedef void(GL_APIENTRYP PFNGLVERTEXATTRIB2FVPROC)(GLuint index,
                                                        const GLfloat* v);
    typedef void(GL_APIENTRYP PFNGLVERTEXATTRIB3FPROC)(GLuint index,
                                                       GLfloat x,
                                                       GLfloat y,
                                                       GLfloat z);
    typedef void(GL_APIENTRYP PFNGLVERTEXATTRIB3FVPROC)(GLuint index,
                                                        const GLfloat* v);
    typedef void(GL_APIENTRYP PFNGLVERTEXATTRIB4FPROC)(GLuint index,
                                                       GLfloat x,
                                                       GLfloat y,
                                                       GLfloat z,
                                                       GLfloat w);
    typedef void(GL_APIENTRYP PFNGLVERTEXATTRIB4FVPROC)(GLuint index,
                                                        const GLfloat* v);
    typedef void(GL_APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC)(
        GLuint index,
        GLint size,
        GLenum type,
        GLboolean normalized,
        GLsizei stride,
        const void* pointer);
    typedef void(GL_APIENTRYP PFNGLVIEWPORTPROC)(GLint x,
                                                 GLint y,
                                                 GLsizei width,
                                                 GLsizei height);
#if GL_GLES_PROTOTYPES
    GL_APICALL void GL_APIENTRY glActiveTexture(GLenum texture);
    GL_APICALL void GL_APIENTRY glAttachShader(GLuint program, GLuint shader);
    GL_APICALL void GL_APIENTRY glBindAttribLocation(GLuint program,
                                                     GLuint index,
                                                     const GLchar* name);
    GL_APICALL void GL_APIENTRY glBindBuffer(GLenum target, GLuint buffer);
    GL_APICALL void GL_APIENTRY glBindFramebuffer(GLenum target,
                                                  GLuint framebuffer);
    GL_APICALL void GL_APIENTRY glBindRenderbuffer(GLenum target,
                                                   GLuint renderbuffer);
    GL_APICALL void GL_APIENTRY glBindTexture(GLenum target, GLuint texture);
    GL_APICALL void GL_APIENTRY glBlendColor(GLfloat red,
                                             GLfloat green,
                                             GLfloat blue,
                                             GLfloat alpha);
    GL_APICALL void GL_APIENTRY glBlendEquation(GLenum mode);
    GL_APICALL void GL_APIENTRY glBlendEquationSeparate(GLenum modeRGB,
                                                        GLenum modeAlpha);
    GL_APICALL void GL_APIENTRY glBlendFunc(GLenum sfactor, GLenum dfactor);
    GL_APICALL void GL_APIENTRY glBlendFuncSeparate(GLenum sfactorRGB,
                                                    GLenum dfactorRGB,
                                                    GLenum sfactorAlpha,
                                                    GLenum dfactorAlpha);
    GL_APICALL void GL_APIENTRY glBufferData(GLenum target,
                                             GLsizeiptr size,
                                             const void* data,
                                             GLenum usage);
    GL_APICALL void GL_APIENTRY glBufferSubData(GLenum target,
                                                GLintptr offset,
                                                GLsizeiptr size,
                                                const void* data);
    GL_APICALL GLenum GL_APIENTRY glCheckFramebufferStatus(GLenum target);
    GL_APICALL void GL_APIENTRY glClear(GLbitfield mask);
    GL_APICALL void GL_APIENTRY glClearColor(GLfloat red,
                                             GLfloat green,
                                             GLfloat blue,
                                             GLfloat alpha);
    GL_APICALL void GL_APIENTRY glClearDepthf(GLfloat d);
    GL_APICALL void GL_APIENTRY glClearStencil(GLint s);
    GL_APICALL void GL_APIENTRY glColorMask(GLboolean red,
                                            GLboolean green,
                                            GLboolean blue,
                                            GLboolean alpha);
    GL_APICALL void GL_APIENTRY glCompileShader(GLuint shader);
    GL_APICALL void GL_APIENTRY glCompressedTexImage2D(GLenum target,
                                                       GLint level,
                                                       GLenum internalformat,
                                                       GLsizei width,
                                                       GLsizei height,
                                                       GLint border,
                                                       GLsizei imageSize,
                                                       const void* data);
    GL_APICALL void GL_APIENTRY glCompressedTexSubImage2D(GLenum target,
                                                          GLint level,
                                                          GLint xoffset,
                                                          GLint yoffset,
                                                          GLsizei width,
                                                          GLsizei height,
                                                          GLenum format,
                                                          GLsizei imageSize,
                                                          const void* data);
    GL_APICALL void GL_APIENTRY glCopyTexImage2D(GLenum target,
                                                 GLint level,
                                                 GLenum internalformat,
                                                 GLint x,
                                                 GLint y,
                                                 GLsizei width,
                                                 GLsizei height,
                                                 GLint border);
    GL_APICALL void GL_APIENTRY glCopyTexSubImage2D(GLenum target,
                                                    GLint level,
                                                    GLint xoffset,
                                                    GLint yoffset,
                                                    GLint x,
                                                    GLint y,
                                                    GLsizei width,
                                                    GLsizei height);
    GL_APICALL GLuint GL_APIENTRY glCreateProgram(void);
    GL_APICALL GLuint GL_APIENTRY glCreateShader(GLenum type);
    GL_APICALL void GL_APIENTRY glCullFace(GLenum mode);
    GL_APICALL void GL_APIENTRY glDeleteBuffers(GLsizei n,
                                                const GLuint* buffers);
    GL_APICALL void GL_APIENTRY
    glDeleteFramebuffers(GLsizei n, const GLuint* framebuffers);
    GL_APICALL void GL_APIENTRY glDeleteProgram(GLuint program);
    GL_APICALL void GL_APIENTRY
    glDeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers);
    GL_APICALL void GL_APIENTRY glDeleteShader(GLuint shader);
    GL_APICALL void GL_APIENTRY glDeleteTextures(GLsizei n,
                                                 const GLuint* textures);
    GL_APICALL void GL_APIENTRY glDepthFunc(GLenum func);
    GL_APICALL void GL_APIENTRY glDepthMask(GLboolean flag);
    GL_APICALL void GL_APIENTRY glDepthRangef(GLfloat n, GLfloat f);
    GL_APICALL void GL_APIENTRY glDetachShader(GLuint program, GLuint shader);
    GL_APICALL void GL_APIENTRY glDisable(GLenum cap);
    GL_APICALL void GL_APIENTRY glDisableVertexAttribArray(GLuint index);
    GL_APICALL void GL_APIENTRY glDrawArrays(GLenum mode,
                                             GLint first,
                                             GLsizei count);
    GL_APICALL void GL_APIENTRY glDrawElements(GLenum mode,
                                               GLsizei count,
                                               GLenum type,
                                               const void* indices);
    GL_APICALL void GL_APIENTRY glEnable(GLenum cap);
    GL_APICALL void GL_APIENTRY glEnableVertexAttribArray(GLuint index);
    GL_APICALL void GL_APIENTRY glFinish(void);
    GL_APICALL void GL_APIENTRY glFlush(void);
    GL_APICALL void GL_APIENTRY
    glFramebufferRenderbuffer(GLenum target,
                              GLenum attachment,
                              GLenum renderbuffertarget,
                              GLuint renderbuffer);
    GL_APICALL void GL_APIENTRY glFramebufferTexture2D(GLenum target,
                                                       GLenum attachment,
                                                       GLenum textarget,
                                                       GLuint texture,
                                                       GLint level);
    GL_APICALL void GL_APIENTRY glFrontFace(GLenum mode);
    GL_APICALL void GL_APIENTRY glGenBuffers(GLsizei n, GLuint* buffers);
    GL_APICALL void GL_APIENTRY glGenerateMipmap(GLenum target);
    GL_APICALL void GL_APIENTRY glGenFramebuffers(GLsizei n,
                                                  GLuint* framebuffers);
    GL_APICALL void GL_APIENTRY glGenRenderbuffers(GLsizei n,
                                                   GLuint* renderbuffers);
    GL_APICALL void GL_APIENTRY glGenTextures(GLsizei n, GLuint* textures);
    GL_APICALL void GL_APIENTRY glGetActiveAttrib(GLuint program,
                                                  GLuint index,
                                                  GLsizei bufSize,
                                                  GLsizei* length,
                                                  GLint* size,
                                                  GLenum* type,
                                                  GLchar* name);
    GL_APICALL void GL_APIENTRY glGetActiveUniform(GLuint program,
                                                   GLuint index,
                                                   GLsizei bufSize,
                                                   GLsizei* length,
                                                   GLint* size,
                                                   GLenum* type,
                                                   GLchar* name);
    GL_APICALL void GL_APIENTRY glGetAttachedShaders(GLuint program,
                                                     GLsizei maxCount,
                                                     GLsizei* count,
                                                     GLuint* shaders);
    GL_APICALL GLint GL_APIENTRY glGetAttribLocation(GLuint program,
                                                     const GLchar* name);
    GL_APICALL void GL_APIENTRY glGetBooleanv(GLenum pname, GLboolean* data);
    GL_APICALL void GL_APIENTRY glGetBufferParameteriv(GLenum target,
                                                       GLenum pname,
                                                       GLint* params);
    GL_APICALL GLenum GL_APIENTRY glGetError(void);
    GL_APICALL void GL_APIENTRY glGetFloatv(GLenum pname, GLfloat* data);
    GL_APICALL void GL_APIENTRY
    glGetFramebufferAttachmentParameteriv(GLenum target,
                                          GLenum attachment,
                                          GLenum pname,
                                          GLint* params);
    GL_APICALL void GL_APIENTRY glGetIntegerv(GLenum pname, GLint* data);
    GL_APICALL void GL_APIENTRY glGetProgramiv(GLuint program,
                                               GLenum pname,
                                               GLint* params);
    GL_APICALL void GL_APIENTRY glGetProgramInfoLog(GLuint program,
                                                    GLsizei bufSize,
                                                    GLsizei* length,
                                                    GLchar* infoLog);
    GL_APICALL void GL_APIENTRY glGetRenderbufferParameteriv(GLenum target,
                                                             GLenum pname,
                                                             GLint* params);
    GL_APICALL void GL_APIENTRY glGetShaderiv(GLuint shader,
                                              GLenum pname,
                                              GLint* params);
    GL_APICALL void GL_APIENTRY glGetShaderInfoLog(GLuint shader,
                                                   GLsizei bufSize,
                                                   GLsizei* length,
                                                   GLchar* infoLog);
    GL_APICALL void GL_APIENTRY glGetShaderPrecisionFormat(GLenum shadertype,
                                                           GLenum precisiontype,
                                                           GLint* range,
                                                           GLint* precision);
    GL_APICALL void GL_APIENTRY glGetShaderSource(GLuint shader,
                                                  GLsizei bufSize,
                                                  GLsizei* length,
                                                  GLchar* source);
    GL_APICALL const GLubyte* GL_APIENTRY glGetString(GLenum name);
    GL_APICALL void GL_APIENTRY glGetTexParameterfv(GLenum target,
                                                    GLenum pname,
                                                    GLfloat* params);
    GL_APICALL void GL_APIENTRY glGetTexParameteriv(GLenum target,
                                                    GLenum pname,
                                                    GLint* params);
    GL_APICALL void GL_APIENTRY glGetUniformfv(GLuint program,
                                               GLint location,
                                               GLfloat* params);
    GL_APICALL void GL_APIENTRY glGetUniformiv(GLuint program,
                                               GLint location,
                                               GLint* params);
    GL_APICALL GLint GL_APIENTRY glGetUniformLocation(GLuint program,
                                                      const GLchar* name);
    GL_APICALL void GL_APIENTRY glGetVertexAttribfv(GLuint index,
                                                    GLenum pname,
                                                    GLfloat* params);
    GL_APICALL void GL_APIENTRY glGetVertexAttribiv(GLuint index,
                                                    GLenum pname,
                                                    GLint* params);
    GL_APICALL void GL_APIENTRY glGetVertexAttribPointerv(GLuint index,
                                                          GLenum pname,
                                                          void** pointer);
    GL_APICALL void GL_APIENTRY glHint(GLenum target, GLenum mode);
    GL_APICALL GLboolean GL_APIENTRY glIsBuffer(GLuint buffer);
    GL_APICALL GLboolean GL_APIENTRY glIsEnabled(GLenum cap);
    GL_APICALL GLboolean GL_APIENTRY glIsFramebuffer(GLuint framebuffer);
    GL_APICALL GLboolean GL_APIENTRY glIsProgram(GLuint program);
    GL_APICALL GLboolean GL_APIENTRY glIsRenderbuffer(GLuint renderbuffer);
    GL_APICALL GLboolean GL_APIENTRY glIsShader(GLuint shader);
    GL_APICALL GLboolean GL_APIENTRY glIsTexture(GLuint texture);
    GL_APICALL void GL_APIENTRY glLineWidth(GLfloat width);
    GL_APICALL void GL_APIENTRY glLinkProgram(GLuint program);
    GL_APICALL void GL_APIENTRY glPixelStorei(GLenum pname, GLint param);
    GL_APICALL void GL_APIENTRY glPolygonOffset(GLfloat factor, GLfloat units);
    GL_APICALL void GL_APIENTRY glReadPixels(GLint x,
                                             GLint y,
                                             GLsizei width,
                                             GLsizei height,
                                             GLenum format,
                                             GLenum type,
                                             void* pixels);
    GL_APICALL void GL_APIENTRY glReleaseShaderCompiler(void);
    GL_APICALL void GL_APIENTRY glRenderbufferStorage(GLenum target,
                                                      GLenum internalformat,
                                                      GLsizei width,
                                                      GLsizei height);
    GL_APICALL void GL_APIENTRY glSampleCoverage(GLfloat value,
                                                 GLboolean invert);
    GL_APICALL void GL_APIENTRY glScissor(GLint x,
                                          GLint y,
                                          GLsizei width,
                                          GLsizei height);
    GL_APICALL void GL_APIENTRY glShaderBinary(GLsizei count,
                                               const GLuint* shaders,
                                               GLenum binaryFormat,
                                               const void* binary,
                                               GLsizei length);
    GL_APICALL void GL_APIENTRY glShaderSource(GLuint shader,
                                               GLsizei count,
                                               const GLchar* const* string,
                                               const GLint* length);
    GL_APICALL void GL_APIENTRY glStencilFunc(GLenum func,
                                              GLint ref,
                                              GLuint mask);
    GL_APICALL void GL_APIENTRY glStencilFuncSeparate(GLenum face,
                                                      GLenum func,
                                                      GLint ref,
                                                      GLuint mask);
    GL_APICALL void GL_APIENTRY glStencilMask(GLuint mask);
    GL_APICALL void GL_APIENTRY glStencilMaskSeparate(GLenum face, GLuint mask);
    GL_APICALL void GL_APIENTRY glStencilOp(GLenum fail,
                                            GLenum zfail,
                                            GLenum zpass);
    GL_APICALL void GL_APIENTRY glStencilOpSeparate(GLenum face,
                                                    GLenum sfail,
                                                    GLenum dpfail,
                                                    GLenum dppass);
    GL_APICALL void GL_APIENTRY glTexImage2D(GLenum target,
                                             GLint level,
                                             GLint internalformat,
                                             GLsizei width,
                                             GLsizei height,
                                             GLint border,
                                             GLenum format,
                                             GLenum type,
                                             const void* pixels);
    GL_APICALL void GL_APIENTRY glTexParameterf(GLenum target,
                                                GLenum pname,
                                                GLfloat param);
    GL_APICALL void GL_APIENTRY glTexParameterfv(GLenum target,
                                                 GLenum pname,
                                                 const GLfloat* params);
    GL_APICALL void GL_APIENTRY glTexParameteri(GLenum target,
                                                GLenum pname,
                                                GLint param);
    GL_APICALL void GL_APIENTRY glTexParameteriv(GLenum target,
                                                 GLenum pname,
                                                 const GLint* params);
    GL_APICALL void GL_APIENTRY glTexSubImage2D(GLenum target,
                                                GLint level,
                                                GLint xoffset,
                                                GLint yoffset,
                                                GLsizei width,
                                                GLsizei height,
                                                GLenum format,
                                                GLenum type,
                                                const void* pixels);
    GL_APICALL void GL_APIENTRY glUniform1f(GLint location, GLfloat v0);
    GL_APICALL void GL_APIENTRY glUniform1fv(GLint location,
                                             GLsizei count,
                                             const GLfloat* value);
    GL_APICALL void GL_APIENTRY glUniform1i(GLint location, GLint v0);
    GL_APICALL void GL_APIENTRY glUniform1iv(GLint location,
                                             GLsizei count,
                                             const GLint* value);
    GL_APICALL void GL_APIENTRY glUniform2f(GLint location,
                                            GLfloat v0,
                                            GLfloat v1);
    GL_APICALL void GL_APIENTRY glUniform2fv(GLint location,
                                             GLsizei count,
                                             const GLfloat* value);
    GL_APICALL void GL_APIENTRY glUniform2i(GLint location, GLint v0, GLint v1);
    GL_APICALL void GL_APIENTRY glUniform2iv(GLint location,
                                             GLsizei count,
                                             const GLint* value);
    GL_APICALL void GL_APIENTRY glUniform3f(GLint location,
                                            GLfloat v0,
                                            GLfloat v1,
                                            GLfloat v2);
    GL_APICALL void GL_APIENTRY glUniform3fv(GLint location,
                                             GLsizei count,
                                             const GLfloat* value);
    GL_APICALL void GL_APIENTRY glUniform3i(GLint location,
                                            GLint v0,
                                            GLint v1,
                                            GLint v2);
    GL_APICALL void GL_APIENTRY glUniform3iv(GLint location,
                                             GLsizei count,
                                             const GLint* value);
    GL_APICALL void GL_APIENTRY
    glUniform4f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
    GL_APICALL void GL_APIENTRY glUniform4fv(GLint location,
                                             GLsizei count,
                                             const GLfloat* value);
    GL_APICALL void GL_APIENTRY
    glUniform4i(GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
    GL_APICALL void GL_APIENTRY glUniform4iv(GLint location,
                                             GLsizei count,
                                             const GLint* value);
    GL_APICALL void GL_APIENTRY glUniformMatrix2fv(GLint location,
                                                   GLsizei count,
                                                   GLboolean transpose,
                                                   const GLfloat* value);
    GL_APICALL void GL_APIENTRY glUniformMatrix3fv(GLint location,
                                                   GLsizei count,
                                                   GLboolean transpose,
                                                   const GLfloat* value);
    GL_APICALL void GL_APIENTRY glUniformMatrix4fv(GLint location,
                                                   GLsizei count,
                                                   GLboolean transpose,
                                                   const GLfloat* value);
    GL_APICALL void GL_APIENTRY glUseProgram(GLuint program);
    GL_APICALL void GL_APIENTRY glValidateProgram(GLuint program);
    GL_APICALL void GL_APIENTRY glVertexAttrib1f(GLuint index, GLfloat x);
    GL_APICALL void GL_APIENTRY glVertexAttrib1fv(GLuint index,
                                                  const GLfloat* v);
    GL_APICALL void GL_APIENTRY glVertexAttrib2f(GLuint index,
                                                 GLfloat x,
                                                 GLfloat y);
    GL_APICALL void GL_APIENTRY glVertexAttrib2fv(GLuint index,
                                                  const GLfloat* v);
    GL_APICALL void GL_APIENTRY glVertexAttrib3f(GLuint index,
                                                 GLfloat x,
                                                 GLfloat y,
                                                 GLfloat z);
    GL_APICALL void GL_APIENTRY glVertexAttrib3fv(GLuint index,
                                                  const GLfloat* v);
    GL_APICALL void GL_APIENTRY
    glVertexAttrib4f(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
    GL_APICALL void GL_APIENTRY glVertexAttrib4fv(GLuint index,
                                                  const GLfloat* v);
    GL_APICALL void GL_APIENTRY glVertexAttribPointer(GLuint index,
                                                      GLint size,
                                                      GLenum type,
                                                      GLboolean normalized,
                                                      GLsizei stride,
                                                      const void* pointer);
    GL_APICALL void GL_APIENTRY glViewport(GLint x,
                                           GLint y,
                                           GLsizei width,
                                           GLsizei height);
#endif
#endif /* GL_ES_VERSION_2_0 */

#ifndef GL_ES_VERSION_3_0
#define GL_ES_VERSION_3_0 1
    typedef khronos_uint16_t GLhalf;
#define GL_READ_BUFFER 0x0C02
#define GL_UNPACK_ROW_LENGTH 0x0CF2
#define GL_UNPACK_SKIP_ROWS 0x0CF3
#define GL_UNPACK_SKIP_PIXELS 0x0CF4
#define GL_PACK_ROW_LENGTH 0x0D02
#define GL_PACK_SKIP_ROWS 0x0D03
#define GL_PACK_SKIP_PIXELS 0x0D04
#define GL_COLOR 0x1800
#define GL_DEPTH 0x1801
#define GL_STENCIL 0x1802
#define GL_RED 0x1903
#define GL_RGB8 0x8051
#define GL_RGBA8 0x8058
#define GL_RGB10_A2 0x8059
#define GL_TEXTURE_BINDING_3D 0x806A
#define GL_UNPACK_SKIP_IMAGES 0x806D
#define GL_UNPACK_IMAGE_HEIGHT 0x806E
#define GL_TEXTURE_3D 0x806F
#define GL_TEXTURE_WRAP_R 0x8072
#define GL_MAX_3D_TEXTURE_SIZE 0x8073
#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368
#define GL_MAX_ELEMENTS_VERTICES 0x80E8
#define GL_MAX_ELEMENTS_INDICES 0x80E9
#define GL_TEXTURE_MIN_LOD 0x813A
#define GL_TEXTURE_MAX_LOD 0x813B
#define GL_TEXTURE_BASE_LEVEL 0x813C
#define GL_TEXTURE_MAX_LEVEL 0x813D
#define GL_MIN 0x8007
#define GL_MAX 0x8008
#define GL_DEPTH_COMPONENT24 0x81A6
#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD
#define GL_TEXTURE_COMPARE_MODE 0x884C
#define GL_TEXTURE_COMPARE_FUNC 0x884D
#define GL_CURRENT_QUERY 0x8865
#define GL_QUERY_RESULT 0x8866
#define GL_QUERY_RESULT_AVAILABLE 0x8867
#define GL_BUFFER_MAPPED 0x88BC
#define GL_BUFFER_MAP_POINTER 0x88BD
#define GL_STREAM_READ 0x88E1
#define GL_STREAM_COPY 0x88E2
#define GL_STATIC_READ 0x88E5
#define GL_STATIC_COPY 0x88E6
#define GL_DYNAMIC_READ 0x88E9
#define GL_DYNAMIC_COPY 0x88EA
#define GL_MAX_DRAW_BUFFERS 0x8824
#define GL_DRAW_BUFFER0 0x8825
#define GL_DRAW_BUFFER1 0x8826
#define GL_DRAW_BUFFER2 0x8827
#define GL_DRAW_BUFFER3 0x8828
#define GL_DRAW_BUFFER4 0x8829
#define GL_DRAW_BUFFER5 0x882A
#define GL_DRAW_BUFFER6 0x882B
#define GL_DRAW_BUFFER7 0x882C
#define GL_DRAW_BUFFER8 0x882D
#define GL_DRAW_BUFFER9 0x882E
#define GL_DRAW_BUFFER10 0x882F
#define GL_DRAW_BUFFER11 0x8830
#define GL_DRAW_BUFFER12 0x8831
#define GL_DRAW_BUFFER13 0x8832
#define GL_DRAW_BUFFER14 0x8833
#define GL_DRAW_BUFFER15 0x8834
#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49
#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A
#define GL_SAMPLER_3D 0x8B5F
#define GL_SAMPLER_2D_SHADOW 0x8B62
#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B
#define GL_PIXEL_PACK_BUFFER 0x88EB
#define GL_PIXEL_UNPACK_BUFFER 0x88EC
#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED
#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF
#define GL_FLOAT_MAT2x3 0x8B65
#define GL_FLOAT_MAT2x4 0x8B66
#define GL_FLOAT_MAT3x2 0x8B67
#define GL_FLOAT_MAT3x4 0x8B68
#define GL_FLOAT_MAT4x2 0x8B69
#define GL_FLOAT_MAT4x3 0x8B6A
#define GL_SRGB 0x8C40
#define GL_SRGB8 0x8C41
#define GL_SRGB8_ALPHA8 0x8C43
#define GL_COMPARE_REF_TO_TEXTURE 0x884E
#define GL_MAJOR_VERSION 0x821B
#define GL_MINOR_VERSION 0x821C
#define GL_NUM_EXTENSIONS 0x821D
#define GL_RGBA32F 0x8814
#define GL_RGB32F 0x8815
#define GL_RGBA16F 0x881A
#define GL_RGB16F 0x881B
#define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD
#define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF
#define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904
#define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905
#define GL_MAX_VARYING_COMPONENTS 0x8B4B
#define GL_TEXTURE_2D_ARRAY 0x8C1A
#define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D
#define GL_R11F_G11F_B10F 0x8C3A
#define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B
#define GL_RGB9_E5 0x8C3D
#define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E
#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76
#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F
#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80
#define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83
#define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84
#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85
#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88
#define GL_RASTERIZER_DISCARD 0x8C89
#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A
#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B
#define GL_INTERLEAVED_ATTRIBS 0x8C8C
#define GL_SEPARATE_ATTRIBS 0x8C8D
#define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E
#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F
#define GL_RGBA32UI 0x8D70
#define GL_RGB32UI 0x8D71
#define GL_RGBA16UI 0x8D76
#define GL_RGB16UI 0x8D77
#define GL_RGBA8UI 0x8D7C
#define GL_RGB8UI 0x8D7D
#define GL_RGBA32I 0x8D82
#define GL_RGB32I 0x8D83
#define GL_RGBA16I 0x8D88
#define GL_RGB16I 0x8D89
#define GL_RGBA8I 0x8D8E
#define GL_RGB8I 0x8D8F
#define GL_RED_INTEGER 0x8D94
#define GL_RGB_INTEGER 0x8D98
#define GL_RGBA_INTEGER 0x8D99
#define GL_SAMPLER_2D_ARRAY 0x8DC1
#define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4
#define GL_SAMPLER_CUBE_SHADOW 0x8DC5
#define GL_UNSIGNED_INT_VEC2 0x8DC6
#define GL_UNSIGNED_INT_VEC3 0x8DC7
#define GL_UNSIGNED_INT_VEC4 0x8DC8
#define GL_INT_SAMPLER_2D 0x8DCA
#define GL_INT_SAMPLER_3D 0x8DCB
#define GL_INT_SAMPLER_CUBE 0x8DCC
#define GL_INT_SAMPLER_2D_ARRAY 0x8DCF
#define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2
#define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3
#define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4
#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7
#define GL_BUFFER_ACCESS_FLAGS 0x911F
#define GL_BUFFER_MAP_LENGTH 0x9120
#define GL_BUFFER_MAP_OFFSET 0x9121
#define GL_DEPTH_COMPONENT32F 0x8CAC
#define GL_DEPTH32F_STENCIL8 0x8CAD
#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD
#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210
#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211
#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212
#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213
#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214
#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215
#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216
#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217
#define GL_FRAMEBUFFER_DEFAULT 0x8218
#define GL_FRAMEBUFFER_UNDEFINED 0x8219
#define GL_DEPTH_STENCIL_ATTACHMENT 0x821A
#define GL_DEPTH_STENCIL 0x84F9
#define GL_UNSIGNED_INT_24_8 0x84FA
#define GL_DEPTH24_STENCIL8 0x88F0
#define GL_UNSIGNED_NORMALIZED 0x8C17
#define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6
#define GL_READ_FRAMEBUFFER 0x8CA8
#define GL_DRAW_FRAMEBUFFER 0x8CA9
#define GL_READ_FRAMEBUFFER_BINDING 0x8CAA
#define GL_RENDERBUFFER_SAMPLES 0x8CAB
#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4
#define GL_MAX_COLOR_ATTACHMENTS 0x8CDF
#define GL_COLOR_ATTACHMENT1 0x8CE1
#define GL_COLOR_ATTACHMENT2 0x8CE2
#define GL_COLOR_ATTACHMENT3 0x8CE3
#define GL_COLOR_ATTACHMENT4 0x8CE4
#define GL_COLOR_ATTACHMENT5 0x8CE5
#define GL_COLOR_ATTACHMENT6 0x8CE6
#define GL_COLOR_ATTACHMENT7 0x8CE7
#define GL_COLOR_ATTACHMENT8 0x8CE8
#define GL_COLOR_ATTACHMENT9 0x8CE9
#define GL_COLOR_ATTACHMENT10 0x8CEA
#define GL_COLOR_ATTACHMENT11 0x8CEB
#define GL_COLOR_ATTACHMENT12 0x8CEC
#define GL_COLOR_ATTACHMENT13 0x8CED
#define GL_COLOR_ATTACHMENT14 0x8CEE
#define GL_COLOR_ATTACHMENT15 0x8CEF
#define GL_COLOR_ATTACHMENT16 0x8CF0
#define GL_COLOR_ATTACHMENT17 0x8CF1
#define GL_COLOR_ATTACHMENT18 0x8CF2
#define GL_COLOR_ATTACHMENT19 0x8CF3
#define GL_COLOR_ATTACHMENT20 0x8CF4
#define GL_COLOR_ATTACHMENT21 0x8CF5
#define GL_COLOR_ATTACHMENT22 0x8CF6
#define GL_COLOR_ATTACHMENT23 0x8CF7
#define GL_COLOR_ATTACHMENT24 0x8CF8
#define GL_COLOR_ATTACHMENT25 0x8CF9
#define GL_COLOR_ATTACHMENT26 0x8CFA
#define GL_COLOR_ATTACHMENT27 0x8CFB
#define GL_COLOR_ATTACHMENT28 0x8CFC
#define GL_COLOR_ATTACHMENT29 0x8CFD
#define GL_COLOR_ATTACHMENT30 0x8CFE
#define GL_COLOR_ATTACHMENT31 0x8CFF
#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56
#define GL_MAX_SAMPLES 0x8D57
#define GL_HALF_FLOAT 0x140B
#define GL_MAP_READ_BIT 0x0001
#define GL_MAP_WRITE_BIT 0x0002
#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004
#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008
#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010
#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020
#define GL_RG 0x8227
#define GL_RG_INTEGER 0x8228
#define GL_R8 0x8229
#define GL_RG8 0x822B
#define GL_R16F 0x822D
#define GL_R32F 0x822E
#define GL_RG16F 0x822F
#define GL_RG32F 0x8230
#define GL_R8I 0x8231
#define GL_R8UI 0x8232
#define GL_R16I 0x8233
#define GL_R16UI 0x8234
#define GL_R32I 0x8235
#define GL_R32UI 0x8236
#define GL_RG8I 0x8237
#define GL_RG8UI 0x8238
#define GL_RG16I 0x8239
#define GL_RG16UI 0x823A
#define GL_RG32I 0x823B
#define GL_RG32UI 0x823C
#define GL_VERTEX_ARRAY_BINDING 0x85B5
#define GL_R8_SNORM 0x8F94
#define GL_RG8_SNORM 0x8F95
#define GL_RGB8_SNORM 0x8F96
#define GL_RGBA8_SNORM 0x8F97
#define GL_SIGNED_NORMALIZED 0x8F9C
#define GL_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69
#define GL_COPY_READ_BUFFER 0x8F36
#define GL_COPY_WRITE_BUFFER 0x8F37
#define GL_COPY_READ_BUFFER_BINDING 0x8F36
#define GL_COPY_WRITE_BUFFER_BINDING 0x8F37
#define GL_UNIFORM_BUFFER 0x8A11
#define GL_UNIFORM_BUFFER_BINDING 0x8A28
#define GL_UNIFORM_BUFFER_START 0x8A29
#define GL_UNIFORM_BUFFER_SIZE 0x8A2A
#define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B
#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D
#define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E
#define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F
#define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30
#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31
#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33
#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34
#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35
#define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36
#define GL_UNIFORM_TYPE 0x8A37
#define GL_UNIFORM_SIZE 0x8A38
#define GL_UNIFORM_NAME_LENGTH 0x8A39
#define GL_UNIFORM_BLOCK_INDEX 0x8A3A
#define GL_UNIFORM_OFFSET 0x8A3B
#define GL_UNIFORM_ARRAY_STRIDE 0x8A3C
#define GL_UNIFORM_MATRIX_STRIDE 0x8A3D
#define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E
#define GL_UNIFORM_BLOCK_BINDING 0x8A3F
#define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40
#define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41
#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42
#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43
#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44
#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46
#define GL_INVALID_INDEX 0xFFFFFFFFu
#define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122
#define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125
#define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111
#define GL_OBJECT_TYPE 0x9112
#define GL_SYNC_CONDITION 0x9113
#define GL_SYNC_STATUS 0x9114
#define GL_SYNC_FLAGS 0x9115
#define GL_SYNC_FENCE 0x9116
#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117
#define GL_UNSIGNALED 0x9118
#define GL_SIGNALED 0x9119
#define GL_ALREADY_SIGNALED 0x911A
#define GL_TIMEOUT_EXPIRED 0x911B
#define GL_CONDITION_SATISFIED 0x911C
#define GL_WAIT_FAILED 0x911D
#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001
#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFFull
#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE
#define GL_ANY_SAMPLES_PASSED 0x8C2F
#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A
#define GL_SAMPLER_BINDING 0x8919
#define GL_RGB10_A2UI 0x906F
#define GL_TEXTURE_SWIZZLE_R 0x8E42
#define GL_TEXTURE_SWIZZLE_G 0x8E43
#define GL_TEXTURE_SWIZZLE_B 0x8E44
#define GL_TEXTURE_SWIZZLE_A 0x8E45
#define GL_GREEN 0x1904
#define GL_BLUE 0x1905
#define GL_INT_2_10_10_10_REV 0x8D9F
#define GL_TRANSFORM_FEEDBACK 0x8E22
#define GL_TRANSFORM_FEEDBACK_PAUSED 0x8E23
#define GL_TRANSFORM_FEEDBACK_ACTIVE 0x8E24
#define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25
#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257
#define GL_PROGRAM_BINARY_LENGTH 0x8741
#define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE
#define GL_PROGRAM_BINARY_FORMATS 0x87FF
#define GL_COMPRESSED_R11_EAC 0x9270
#define GL_COMPRESSED_SIGNED_R11_EAC 0x9271
#define GL_COMPRESSED_RG11_EAC 0x9272
#define GL_COMPRESSED_SIGNED_RG11_EAC 0x9273
#define GL_COMPRESSED_RGB8_ETC2 0x9274
#define GL_COMPRESSED_SRGB8_ETC2 0x9275
#define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276
#define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277
#define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278
#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279
#define GL_TEXTURE_IMMUTABLE_FORMAT 0x912F
#define GL_MAX_ELEMENT_INDEX 0x8D6B
#define GL_NUM_SAMPLE_COUNTS 0x9380
#define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF
    typedef void(GL_APIENTRYP PFNGLREADBUFFERPROC)(GLenum src);
    typedef void(GL_APIENTRYP PFNGLDRAWRANGEELEMENTSPROC)(GLenum mode,
                                                          GLuint start,
                                                          GLuint end,
                                                          GLsizei count,
                                                          GLenum type,
                                                          const void* indices);
    typedef void(GL_APIENTRYP PFNGLTEXIMAGE3DPROC)(GLenum target,
                                                   GLint level,
                                                   GLint internalformat,
                                                   GLsizei width,
                                                   GLsizei height,
                                                   GLsizei depth,
                                                   GLint border,
                                                   GLenum format,
                                                   GLenum type,
                                                   const void* pixels);
    typedef void(GL_APIENTRYP PFNGLTEXSUBIMAGE3DPROC)(GLenum target,
                                                      GLint level,
                                                      GLint xoffset,
                                                      GLint yoffset,
                                                      GLint zoffset,
                                                      GLsizei width,
                                                      GLsizei height,
                                                      GLsizei depth,
                                                      GLenum format,
                                                      GLenum type,
                                                      const void* pixels);
    typedef void(GL_APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC)(GLenum target,
                                                          GLint level,
                                                          GLint xoffset,
                                                          GLint yoffset,
                                                          GLint zoffset,
                                                          GLint x,
                                                          GLint y,
                                                          GLsizei width,
                                                          GLsizei height);
    typedef void(GL_APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC)(
        GLenum target,
        GLint level,
        GLenum internalformat,
        GLsizei width,
        GLsizei height,
        GLsizei depth,
        GLint border,
        GLsizei imageSize,
        const void* data);
    typedef void(GL_APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC)(
        GLenum target,
        GLint level,
        GLint xoffset,
        GLint yoffset,
        GLint zoffset,
        GLsizei width,
        GLsizei height,
        GLsizei depth,
        GLenum format,
        GLsizei imageSize,
        const void* data);
    typedef void(GL_APIENTRYP PFNGLGENQUERIESPROC)(GLsizei n, GLuint* ids);
    typedef void(GL_APIENTRYP PFNGLDELETEQUERIESPROC)(GLsizei n,
                                                      const GLuint* ids);
    typedef GLboolean(GL_APIENTRYP PFNGLISQUERYPROC)(GLuint id);
    typedef void(GL_APIENTRYP PFNGLBEGINQUERYPROC)(GLenum target, GLuint id);
    typedef void(GL_APIENTRYP PFNGLENDQUERYPROC)(GLenum target);
    typedef void(GL_APIENTRYP PFNGLGETQUERYIVPROC)(GLenum target,
                                                   GLenum pname,
                                                   GLint* params);
    typedef void(GL_APIENTRYP PFNGLGETQUERYOBJECTUIVPROC)(GLuint id,
                                                          GLenum pname,
                                                          GLuint* params);
    typedef GLboolean(GL_APIENTRYP PFNGLUNMAPBUFFERPROC)(GLenum target);
    typedef void(GL_APIENTRYP PFNGLGETBUFFERPOINTERVPROC)(GLenum target,
                                                          GLenum pname,
                                                          void** params);
    typedef void(GL_APIENTRYP PFNGLDRAWBUFFERSPROC)(GLsizei n,
                                                    const GLenum* bufs);
    typedef void(GL_APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC)(
        GLint location,
        GLsizei count,
        GLboolean transpose,
        const GLfloat* value);
    typedef void(GL_APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC)(
        GLint location,
        GLsizei count,
        GLboolean transpose,
        const GLfloat* value);
    typedef void(GL_APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC)(
        GLint location,
        GLsizei count,
        GLboolean transpose,
        const GLfloat* value);
    typedef void(GL_APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC)(
        GLint location,
        GLsizei count,
        GLboolean transpose,
        const GLfloat* value);
    typedef void(GL_APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC)(
        GLint location,
        GLsizei count,
        GLboolean transpose,
        const GLfloat* value);
    typedef void(GL_APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC)(
        GLint location,
        GLsizei count,
        GLboolean transpose,
        const GLfloat* value);
    typedef void(GL_APIENTRYP PFNGLBLITFRAMEBUFFERPROC)(GLint srcX0,
                                                        GLint srcY0,
                                                        GLint srcX1,
                                                        GLint srcY1,
                                                        GLint dstX0,
                                                        GLint dstY0,
                                                        GLint dstX1,
                                                        GLint dstY1,
                                                        GLbitfield mask,
                                                        GLenum filter);
    typedef void(GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)(
        GLenum target,
        GLsizei samples,
        GLenum internalformat,
        GLsizei width,
        GLsizei height);
    typedef void(GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERPROC)(
        GLenum target,
        GLenum attachment,
        GLuint texture,
        GLint level,
        GLint layer);
    typedef void*(GL_APIENTRYP PFNGLMAPBUFFERRANGEPROC)(GLenum target,
                                                        GLintptr offset,
                                                        GLsizeiptr length,
                                                        GLbitfield access);
    typedef void(GL_APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC)(
        GLenum target,
        GLintptr offset,
        GLsizeiptr length);
    typedef void(GL_APIENTRYP PFNGLBINDVERTEXARRAYPROC)(GLuint array);
    typedef void(GL_APIENTRYP PFNGLDELETEVERTEXARRAYSPROC)(
        GLsizei n,
        const GLuint* arrays);
    typedef void(GL_APIENTRYP PFNGLGENVERTEXARRAYSPROC)(GLsizei n,
                                                        GLuint* arrays);
    typedef GLboolean(GL_APIENTRYP PFNGLISVERTEXARRAYPROC)(GLuint array);
    typedef void(GL_APIENTRYP PFNGLGETINTEGERI_VPROC)(GLenum target,
                                                      GLuint index,
                                                      GLint* data);
    typedef void(GL_APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKPROC)(
        GLenum primitiveMode);
    typedef void(GL_APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC)(void);
    typedef void(GL_APIENTRYP PFNGLBINDBUFFERRANGEPROC)(GLenum target,
                                                        GLuint index,
                                                        GLuint buffer,
                                                        GLintptr offset,
                                                        GLsizeiptr size);
    typedef void(GL_APIENTRYP PFNGLBINDBUFFERBASEPROC)(GLenum target,
                                                       GLuint index,
                                                       GLuint buffer);
    typedef void(GL_APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSPROC)(
        GLuint program,
        GLsizei count,
        const GLchar* const* varyings,
        GLenum bufferMode);
    typedef void(GL_APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGPROC)(
        GLuint program,
        GLuint index,
        GLsizei bufSize,
        GLsizei* length,
        GLsizei* size,
        GLenum* type,
        GLchar* name);
    typedef void(GL_APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC)(
        GLuint index,
        GLint size,
        GLenum type,
        GLsizei stride,
        const void* pointer);
    typedef void(GL_APIENTRYP PFNGLGETVERTEXATTRIBIIVPROC)(GLuint index,
                                                           GLenum pname,
                                                           GLint* params);
    typedef void(GL_APIENTRYP PFNGLGETVERTEXATTRIBIUIVPROC)(GLuint index,
                                                            GLenum pname,
                                                            GLuint* params);
    typedef void(GL_APIENTRYP PFNGLVERTEXATTRIBI4IPROC)(GLuint index,
                                                        GLint x,
                                                        GLint y,
                                                        GLint z,
                                                        GLint w);
    typedef void(GL_APIENTRYP PFNGLVERTEXATTRIBI4UIPROC)(GLuint index,
                                                         GLuint x,
                                                         GLuint y,
                                                         GLuint z,
                                                         GLuint w);
    typedef void(GL_APIENTRYP PFNGLVERTEXATTRIBI4IVPROC)(GLuint index,
                                                         const GLint* v);
    typedef void(GL_APIENTRYP PFNGLVERTEXATTRIBI4UIVPROC)(GLuint index,
                                                          const GLuint* v);
    typedef void(GL_APIENTRYP PFNGLGETUNIFORMUIVPROC)(GLuint program,
                                                      GLint location,
                                                      GLuint* params);
    typedef GLint(GL_APIENTRYP PFNGLGETFRAGDATALOCATIONPROC)(
        GLuint program,
        const GLchar* name);
    typedef void(GL_APIENTRYP PFNGLUNIFORM1UIPROC)(GLint location, GLuint v0);
    typedef void(GL_APIENTRYP PFNGLUNIFORM2UIPROC)(GLint location,
                                                   GLuint v0,
                                                   GLuint v1);
    typedef void(GL_APIENTRYP PFNGLUNIFORM3UIPROC)(GLint location,
                                                   GLuint v0,
                                                   GLuint v1,
                                                   GLuint v2);
    typedef void(GL_APIENTRYP PFNGLUNIFORM4UIPROC)(GLint location,
                                                   GLuint v0,
                                                   GLuint v1,
                                                   GLuint v2,
                                                   GLuint v3);
    typedef void(GL_APIENTRYP PFNGLUNIFORM1UIVPROC)(GLint location,
                                                    GLsizei count,
                                                    const GLuint* value);
    typedef void(GL_APIENTRYP PFNGLUNIFORM2UIVPROC)(GLint location,
                                                    GLsizei count,
                                                    const GLuint* value);
    typedef void(GL_APIENTRYP PFNGLUNIFORM3UIVPROC)(GLint location,
                                                    GLsizei count,
                                                    const GLuint* value);
    typedef void(GL_APIENTRYP PFNGLUNIFORM4UIVPROC)(GLint location,
                                                    GLsizei count,
                                                    const GLuint* value);
    typedef void(GL_APIENTRYP PFNGLCLEARBUFFERIVPROC)(GLenum buffer,
                                                      GLint drawbuffer,
                                                      const GLint* value);
    typedef void(GL_APIENTRYP PFNGLCLEARBUFFERUIVPROC)(GLenum buffer,
                                                       GLint drawbuffer,
                                                       const GLuint* value);
    typedef void(GL_APIENTRYP PFNGLCLEARBUFFERFVPROC)(GLenum buffer,
                                                      GLint drawbuffer,
                                                      const GLfloat* value);
    typedef void(GL_APIENTRYP PFNGLCLEARBUFFERFIPROC)(GLenum buffer,
                                                      GLint drawbuffer,
                                                      GLfloat depth,
                                                      GLint stencil);
    typedef const GLubyte*(GL_APIENTRYP PFNGLGETSTRINGIPROC)(GLenum name,
                                                             GLuint index);
    typedef void(GL_APIENTRYP PFNGLCOPYBUFFERSUBDATAPROC)(GLenum readTarget,
                                                          GLenum writeTarget,
                                                          GLintptr readOffset,
                                                          GLintptr writeOffset,
                                                          GLsizeiptr size);
    typedef void(GL_APIENTRYP PFNGLGETUNIFORMINDICESPROC)(
        GLuint program,
        GLsizei uniformCount,
        const GLchar* const* uniformNames,
        GLuint* uniformIndices);
    typedef void(GL_APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC)(
        GLuint program,
        GLsizei uniformCount,
        const GLuint* uniformIndices,
        GLenum pname,
        GLint* params);
    typedef GLuint(GL_APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC)(
        GLuint program,
        const GLchar* uniformBlockName);
    typedef void(GL_APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC)(
        GLuint program,
        GLuint uniformBlockIndex,
        GLenum pname,
        GLint* params);
    typedef void(GL_APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC)(
        GLuint program,
        GLuint uniformBlockIndex,
        GLsizei bufSize,
        GLsizei* length,
        GLchar* uniformBlockName);
    typedef void(GL_APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC)(
        GLuint program,
        GLuint uniformBlockIndex,
        GLuint uniformBlockBinding);
    typedef void(GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDPROC)(
        GLenum mode,
        GLint first,
        GLsizei count,
        GLsizei instancecount);
    typedef void(GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDPROC)(
        GLenum mode,
        GLsizei count,
        GLenum type,
        const void* indices,
        GLsizei instancecount);
    typedef GLsync(GL_APIENTRYP PFNGLFENCESYNCPROC)(GLenum condition,
                                                    GLbitfield flags);
    typedef GLboolean(GL_APIENTRYP PFNGLISSYNCPROC)(GLsync sync);
    typedef void(GL_APIENTRYP PFNGLDELETESYNCPROC)(GLsync sync);
    typedef GLenum(GL_APIENTRYP PFNGLCLIENTWAITSYNCPROC)(GLsync sync,
                                                         GLbitfield flags,
                                                         GLuint64 timeout);
    typedef void(GL_APIENTRYP PFNGLWAITSYNCPROC)(GLsync sync,
                                                 GLbitfield flags,
                                                 GLuint64 timeout);
    typedef void(GL_APIENTRYP PFNGLGETINTEGER64VPROC)(GLenum pname,
                                                      GLint64* data);
    typedef void(GL_APIENTRYP PFNGLGETSYNCIVPROC)(GLsync sync,
                                                  GLenum pname,
                                                  GLsizei count,
                                                  GLsizei* length,
                                                  GLint* values);
    typedef void(GL_APIENTRYP PFNGLGETINTEGER64I_VPROC)(GLenum target,
                                                        GLuint index,
                                                        GLint64* data);
    typedef void(GL_APIENTRYP PFNGLGETBUFFERPARAMETERI64VPROC)(GLenum target,
                                                               GLenum pname,
                                                               GLint64* params);
    typedef void(GL_APIENTRYP PFNGLGENSAMPLERSPROC)(GLsizei count,
                                                    GLuint* samplers);
    typedef void(GL_APIENTRYP PFNGLDELETESAMPLERSPROC)(GLsizei count,
                                                       const GLuint* samplers);
    typedef GLboolean(GL_APIENTRYP PFNGLISSAMPLERPROC)(GLuint sampler);
    typedef void(GL_APIENTRYP PFNGLBINDSAMPLERPROC)(GLuint unit,
                                                    GLuint sampler);
    typedef void(GL_APIENTRYP PFNGLSAMPLERPARAMETERIPROC)(GLuint sampler,
                                                          GLenum pname,
                                                          GLint param);
    typedef void(GL_APIENTRYP PFNGLSAMPLERPARAMETERIVPROC)(GLuint sampler,
                                                           GLenum pname,
                                                           const GLint* param);
    typedef void(GL_APIENTRYP PFNGLSAMPLERPARAMETERFPROC)(GLuint sampler,
                                                          GLenum pname,
                                                          GLfloat param);
    typedef void(GL_APIENTRYP PFNGLSAMPLERPARAMETERFVPROC)(
        GLuint sampler,
        GLenum pname,
        const GLfloat* param);
    typedef void(GL_APIENTRYP PFNGLGETSAMPLERPARAMETERIVPROC)(GLuint sampler,
                                                              GLenum pname,
                                                              GLint* params);
    typedef void(GL_APIENTRYP PFNGLGETSAMPLERPARAMETERFVPROC)(GLuint sampler,
                                                              GLenum pname,
                                                              GLfloat* params);
    typedef void(GL_APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC)(GLuint index,
                                                            GLuint divisor);
    typedef void(GL_APIENTRYP PFNGLBINDTRANSFORMFEEDBACKPROC)(GLenum target,
                                                              GLuint id);
    typedef void(GL_APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSPROC)(
        GLsizei n,
        const GLuint* ids);
    typedef void(GL_APIENTRYP PFNGLGENTRANSFORMFEEDBACKSPROC)(GLsizei n,
                                                              GLuint* ids);
    typedef GLboolean(GL_APIENTRYP PFNGLISTRANSFORMFEEDBACKPROC)(GLuint id);
    typedef void(GL_APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKPROC)(void);
    typedef void(GL_APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKPROC)(void);
    typedef void(GL_APIENTRYP PFNGLGETPROGRAMBINARYPROC)(GLuint program,
                                                         GLsizei bufSize,
                                                         GLsizei* length,
                                                         GLenum* binaryFormat,
                                                         void* binary);
    typedef void(GL_APIENTRYP PFNGLPROGRAMBINARYPROC)(GLuint program,
                                                      GLenum binaryFormat,
                                                      const void* binary,
                                                      GLsizei length);
    typedef void(GL_APIENTRYP PFNGLPROGRAMPARAMETERIPROC)(GLuint program,
                                                          GLenum pname,
                                                          GLint value);
    typedef void(GL_APIENTRYP PFNGLINVALIDATEFRAMEBUFFERPROC)(
        GLenum target,
        GLsizei numAttachments,
        const GLenum* attachments);
    typedef void(GL_APIENTRYP PFNGLINVALIDATESUBFRAMEBUFFERPROC)(
        GLenum target,
        GLsizei numAttachments,
        const GLenum* attachments,
        GLint x,
        GLint y,
        GLsizei width,
        GLsizei height);
    typedef void(GL_APIENTRYP PFNGLTEXSTORAGE2DPROC)(GLenum target,
                                                     GLsizei levels,
                                                     GLenum internalformat,
                                                     GLsizei width,
                                                     GLsizei height);
    typedef void(GL_APIENTRYP PFNGLTEXSTORAGE3DPROC)(GLenum target,
                                                     GLsizei levels,
                                                     GLenum internalformat,
                                                     GLsizei width,
                                                     GLsizei height,
                                                     GLsizei depth);
    typedef void(GL_APIENTRYP PFNGLGETINTERNALFORMATIVPROC)(
        GLenum target,
        GLenum internalformat,
        GLenum pname,
        GLsizei count,
        GLint* params);
#if GL_GLES_PROTOTYPES
    GL_APICALL void GL_APIENTRY glReadBuffer(GLenum src);
    GL_APICALL void GL_APIENTRY glDrawRangeElements(GLenum mode,
                                                    GLuint start,
                                                    GLuint end,
                                                    GLsizei count,
                                                    GLenum type,
                                                    const void* indices);
    GL_APICALL void GL_APIENTRY glTexImage3D(GLenum target,
                                             GLint level,
                                             GLint internalformat,
                                             GLsizei width,
                                             GLsizei height,
                                             GLsizei depth,
                                             GLint border,
                                             GLenum format,
                                             GLenum type,
                                             const void* pixels);
    GL_APICALL void GL_APIENTRY glTexSubImage3D(GLenum target,
                                                GLint level,
                                                GLint xoffset,
                                                GLint yoffset,
                                                GLint zoffset,
                                                GLsizei width,
                                                GLsizei height,
                                                GLsizei depth,
                                                GLenum format,
                                                GLenum type,
                                                const void* pixels);
    GL_APICALL void GL_APIENTRY glCopyTexSubImage3D(GLenum target,
                                                    GLint level,
                                                    GLint xoffset,
                                                    GLint yoffset,
                                                    GLint zoffset,
                                                    GLint x,
                                                    GLint y,
                                                    GLsizei width,
                                                    GLsizei height);
    GL_APICALL void GL_APIENTRY glCompressedTexImage3D(GLenum target,
                                                       GLint level,
                                                       GLenum internalformat,
                                                       GLsizei width,
                                                       GLsizei height,
                                                       GLsizei depth,
                                                       GLint border,
                                                       GLsizei imageSize,
                                                       const void* data);
    GL_APICALL void GL_APIENTRY glCompressedTexSubImage3D(GLenum target,
                                                          GLint level,
                                                          GLint xoffset,
                                                          GLint yoffset,
                                                          GLint zoffset,
                                                          GLsizei width,
                                                          GLsizei height,
                                                          GLsizei depth,
                                                          GLenum format,
                                                          GLsizei imageSize,
                                                          const void* data);
    GL_APICALL void GL_APIENTRY glGenQueries(GLsizei n, GLuint* ids);
    GL_APICALL void GL_APIENTRY glDeleteQueries(GLsizei n, const GLuint* ids);
    GL_APICALL GLboolean GL_APIENTRY glIsQuery(GLuint id);
    GL_APICALL void GL_APIENTRY glBeginQuery(GLenum target, GLuint id);
    GL_APICALL void GL_APIENTRY glEndQuery(GLenum target);
    GL_APICALL void GL_APIENTRY glGetQueryiv(GLenum target,
                                             GLenum pname,
                                             GLint* params);
    GL_APICALL void GL_APIENTRY glGetQueryObjectuiv(GLuint id,
                                                    GLenum pname,
                                                    GLuint* params);
    GL_APICALL GLboolean GL_APIENTRY glUnmapBuffer(GLenum target);
    GL_APICALL void GL_APIENTRY glGetBufferPointerv(GLenum target,
                                                    GLenum pname,
                                                    void** params);
    GL_APICALL void GL_APIENTRY glDrawBuffers(GLsizei n, const GLenum* bufs);
    GL_APICALL void GL_APIENTRY glUniformMatrix2x3fv(GLint location,
                                                     GLsizei count,
                                                     GLboolean transpose,
                                                     const GLfloat* value);
    GL_APICALL void GL_APIENTRY glUniformMatrix3x2fv(GLint location,
                                                     GLsizei count,
                                                     GLboolean transpose,
                                                     const GLfloat* value);
    GL_APICALL void GL_APIENTRY glUniformMatrix2x4fv(GLint location,
                                                     GLsizei count,
                                                     GLboolean transpose,
                                                     const GLfloat* value);
    GL_APICALL void GL_APIENTRY glUniformMatrix4x2fv(GLint location,
                                                     GLsizei count,
                                                     GLboolean transpose,
                                                     const GLfloat* value);
    GL_APICALL void GL_APIENTRY glUniformMatrix3x4fv(GLint location,
                                                     GLsizei count,
                                                     GLboolean transpose,
                                                     const GLfloat* value);
    GL_APICALL void GL_APIENTRY glUniformMatrix4x3fv(GLint location,
                                                     GLsizei count,
                                                     GLboolean transpose,
                                                     const GLfloat* value);
    GL_APICALL void GL_APIENTRY glBlitFramebuffer(GLint srcX0,
                                                  GLint srcY0,
                                                  GLint srcX1,
                                                  GLint srcY1,
                                                  GLint dstX0,
                                                  GLint dstY0,
                                                  GLint dstX1,
                                                  GLint dstY1,
                                                  GLbitfield mask,
                                                  GLenum filter);
    GL_APICALL void GL_APIENTRY
    glRenderbufferStorageMultisample(GLenum target,
                                     GLsizei samples,
                                     GLenum internalformat,
                                     GLsizei width,
                                     GLsizei height);
    GL_APICALL void GL_APIENTRY glFramebufferTextureLayer(GLenum target,
                                                          GLenum attachment,
                                                          GLuint texture,
                                                          GLint level,
                                                          GLint layer);
    GL_APICALL void* GL_APIENTRY glMapBufferRange(GLenum target,
                                                  GLintptr offset,
                                                  GLsizeiptr length,
                                                  GLbitfield access);
    GL_APICALL void GL_APIENTRY glFlushMappedBufferRange(GLenum target,
                                                         GLintptr offset,
                                                         GLsizeiptr length);
    GL_APICALL void GL_APIENTRY glBindVertexArray(GLuint array);
    GL_APICALL void GL_APIENTRY glDeleteVertexArrays(GLsizei n,
                                                     const GLuint* arrays);
    GL_APICALL void GL_APIENTRY glGenVertexArrays(GLsizei n, GLuint* arrays);
    GL_APICALL GLboolean GL_APIENTRY glIsVertexArray(GLuint array);
    GL_APICALL void GL_APIENTRY glGetIntegeri_v(GLenum target,
                                                GLuint index,
                                                GLint* data);
    GL_APICALL void GL_APIENTRY glBeginTransformFeedback(GLenum primitiveMode);
    GL_APICALL void GL_APIENTRY glEndTransformFeedback(void);
    GL_APICALL void GL_APIENTRY glBindBufferRange(GLenum target,
                                                  GLuint index,
                                                  GLuint buffer,
                                                  GLintptr offset,
                                                  GLsizeiptr size);
    GL_APICALL void GL_APIENTRY glBindBufferBase(GLenum target,
                                                 GLuint index,
                                                 GLuint buffer);
    GL_APICALL void GL_APIENTRY
    glTransformFeedbackVaryings(GLuint program,
                                GLsizei count,
                                const GLchar* const* varyings,
                                GLenum bufferMode);
    GL_APICALL void GL_APIENTRY glGetTransformFeedbackVarying(GLuint program,
                                                              GLuint index,
                                                              GLsizei bufSize,
                                                              GLsizei* length,
                                                              GLsizei* size,
                                                              GLenum* type,
                                                              GLchar* name);
    GL_APICALL void GL_APIENTRY glVertexAttribIPointer(GLuint index,
                                                       GLint size,
                                                       GLenum type,
                                                       GLsizei stride,
                                                       const void* pointer);
    GL_APICALL void GL_APIENTRY glGetVertexAttribIiv(GLuint index,
                                                     GLenum pname,
                                                     GLint* params);
    GL_APICALL void GL_APIENTRY glGetVertexAttribIuiv(GLuint index,
                                                      GLenum pname,
                                                      GLuint* params);
    GL_APICALL void GL_APIENTRY
    glVertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w);
    GL_APICALL void GL_APIENTRY
    glVertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
    GL_APICALL void GL_APIENTRY glVertexAttribI4iv(GLuint index,
                                                   const GLint* v);
    GL_APICALL void GL_APIENTRY glVertexAttribI4uiv(GLuint index,
                                                    const GLuint* v);
    GL_APICALL void GL_APIENTRY glGetUniformuiv(GLuint program,
                                                GLint location,
                                                GLuint* params);
    GL_APICALL GLint GL_APIENTRY glGetFragDataLocation(GLuint program,
                                                       const GLchar* name);
    GL_APICALL void GL_APIENTRY glUniform1ui(GLint location, GLuint v0);
    GL_APICALL void GL_APIENTRY glUniform2ui(GLint location,
                                             GLuint v0,
                                             GLuint v1);
    GL_APICALL void GL_APIENTRY glUniform3ui(GLint location,
                                             GLuint v0,
                                             GLuint v1,
                                             GLuint v2);
    GL_APICALL void GL_APIENTRY
    glUniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
    GL_APICALL void GL_APIENTRY glUniform1uiv(GLint location,
                                              GLsizei count,
                                              const GLuint* value);
    GL_APICALL void GL_APIENTRY glUniform2uiv(GLint location,
                                              GLsizei count,
                                              const GLuint* value);
    GL_APICALL void GL_APIENTRY glUniform3uiv(GLint location,
                                              GLsizei count,
                                              const GLuint* value);
    GL_APICALL void GL_APIENTRY glUniform4uiv(GLint location,
                                              GLsizei count,
                                              const GLuint* value);
    GL_APICALL void GL_APIENTRY glClearBufferiv(GLenum buffer,
                                                GLint drawbuffer,
                                                const GLint* value);
    GL_APICALL void GL_APIENTRY glClearBufferuiv(GLenum buffer,
                                                 GLint drawbuffer,
                                                 const GLuint* value);
    GL_APICALL void GL_APIENTRY glClearBufferfv(GLenum buffer,
                                                GLint drawbuffer,
                                                const GLfloat* value);
    GL_APICALL void GL_APIENTRY glClearBufferfi(GLenum buffer,
                                                GLint drawbuffer,
                                                GLfloat depth,
                                                GLint stencil);
    GL_APICALL const GLubyte* GL_APIENTRY glGetStringi(GLenum name,
                                                       GLuint index);
    GL_APICALL void GL_APIENTRY glCopyBufferSubData(GLenum readTarget,
                                                    GLenum writeTarget,
                                                    GLintptr readOffset,
                                                    GLintptr writeOffset,
                                                    GLsizeiptr size);
    GL_APICALL void GL_APIENTRY
    glGetUniformIndices(GLuint program,
                        GLsizei uniformCount,
                        const GLchar* const* uniformNames,
                        GLuint* uniformIndices);
    GL_APICALL void GL_APIENTRY
    glGetActiveUniformsiv(GLuint program,
                          GLsizei uniformCount,
                          const GLuint* uniformIndices,
                          GLenum pname,
                          GLint* params);
    GL_APICALL GLuint GL_APIENTRY
    glGetUniformBlockIndex(GLuint program, const GLchar* uniformBlockName);
    GL_APICALL void GL_APIENTRY
    glGetActiveUniformBlockiv(GLuint program,
                              GLuint uniformBlockIndex,
                              GLenum pname,
                              GLint* params);
    GL_APICALL void GL_APIENTRY
    glGetActiveUniformBlockName(GLuint program,
                                GLuint uniformBlockIndex,
                                GLsizei bufSize,
                                GLsizei* length,
                                GLchar* uniformBlockName);
    GL_APICALL void GL_APIENTRY
    glUniformBlockBinding(GLuint program,
                          GLuint uniformBlockIndex,
                          GLuint uniformBlockBinding);
    GL_APICALL void GL_APIENTRY glDrawArraysInstanced(GLenum mode,
                                                      GLint first,
                                                      GLsizei count,
                                                      GLsizei instancecount);
    GL_APICALL void GL_APIENTRY glDrawElementsInstanced(GLenum mode,
                                                        GLsizei count,
                                                        GLenum type,
                                                        const void* indices,
                                                        GLsizei instancecount);
    GL_APICALL GLsync GL_APIENTRY glFenceSync(GLenum condition,
                                              GLbitfield flags);
    GL_APICALL GLboolean GL_APIENTRY glIsSync(GLsync sync);
    GL_APICALL void GL_APIENTRY glDeleteSync(GLsync sync);
    GL_APICALL GLenum GL_APIENTRY glClientWaitSync(GLsync sync,
                                                   GLbitfield flags,
                                                   GLuint64 timeout);
    GL_APICALL void GL_APIENTRY glWaitSync(GLsync sync,
                                           GLbitfield flags,
                                           GLuint64 timeout);
    GL_APICALL void GL_APIENTRY glGetInteger64v(GLenum pname, GLint64* data);
    GL_APICALL void GL_APIENTRY glGetSynciv(GLsync sync,
                                            GLenum pname,
                                            GLsizei count,
                                            GLsizei* length,
                                            GLint* values);
    GL_APICALL void GL_APIENTRY glGetInteger64i_v(GLenum target,
                                                  GLuint index,
                                                  GLint64* data);
    GL_APICALL void GL_APIENTRY glGetBufferParameteri64v(GLenum target,
                                                         GLenum pname,
                                                         GLint64* params);
    GL_APICALL void GL_APIENTRY glGenSamplers(GLsizei count, GLuint* samplers);
    GL_APICALL void GL_APIENTRY glDeleteSamplers(GLsizei count,
                                                 const GLuint* samplers);
    GL_APICALL GLboolean GL_APIENTRY glIsSampler(GLuint sampler);
    GL_APICALL void GL_APIENTRY glBindSampler(GLuint unit, GLuint sampler);
    GL_APICALL void GL_APIENTRY glSamplerParameteri(GLuint sampler,
                                                    GLenum pname,
                                                    GLint param);
    GL_APICALL void GL_APIENTRY glSamplerParameteriv(GLuint sampler,
                                                     GLenum pname,
                                                     const GLint* param);
    GL_APICALL void GL_APIENTRY glSamplerParameterf(GLuint sampler,
                                                    GLenum pname,
                                                    GLfloat param);
    GL_APICALL void GL_APIENTRY glSamplerParameterfv(GLuint sampler,
                                                     GLenum pname,
                                                     const GLfloat* param);
    GL_APICALL void GL_APIENTRY glGetSamplerParameteriv(GLuint sampler,
                                                        GLenum pname,
                                                        GLint* params);
    GL_APICALL void GL_APIENTRY glGetSamplerParameterfv(GLuint sampler,
                                                        GLenum pname,
                                                        GLfloat* params);
    GL_APICALL void GL_APIENTRY glVertexAttribDivisor(GLuint index,
                                                      GLuint divisor);
    GL_APICALL void GL_APIENTRY glBindTransformFeedback(GLenum target,
                                                        GLuint id);
    GL_APICALL void GL_APIENTRY glDeleteTransformFeedbacks(GLsizei n,
                                                           const GLuint* ids);
    GL_APICALL void GL_APIENTRY glGenTransformFeedbacks(GLsizei n, GLuint* ids);
    GL_APICALL GLboolean GL_APIENTRY glIsTransformFeedback(GLuint id);
    GL_APICALL void GL_APIENTRY glPauseTransformFeedback(void);
    GL_APICALL void GL_APIENTRY glResumeTransformFeedback(void);
    GL_APICALL void GL_APIENTRY glGetProgramBinary(GLuint program,
                                                   GLsizei bufSize,
                                                   GLsizei* length,
                                                   GLenum* binaryFormat,
                                                   void* binary);
    GL_APICALL void GL_APIENTRY glProgramBinary(GLuint program,
                                                GLenum binaryFormat,
                                                const void* binary,
                                                GLsizei length);
    GL_APICALL void GL_APIENTRY glProgramParameteri(GLuint program,
                                                    GLenum pname,
                                                    GLint value);
    GL_APICALL void GL_APIENTRY
    glInvalidateFramebuffer(GLenum target,
                            GLsizei numAttachments,
                            const GLenum* attachments);
    GL_APICALL void GL_APIENTRY
    glInvalidateSubFramebuffer(GLenum target,
                               GLsizei numAttachments,
                               const GLenum* attachments,
                               GLint x,
                               GLint y,
                               GLsizei width,
                               GLsizei height);
    GL_APICALL void GL_APIENTRY glTexStorage2D(GLenum target,
                                               GLsizei levels,
                                               GLenum internalformat,
                                               GLsizei width,
                                               GLsizei height);
    GL_APICALL void GL_APIENTRY glTexStorage3D(GLenum target,
                                               GLsizei levels,
                                               GLenum internalformat,
                                               GLsizei width,
                                               GLsizei height,
                                               GLsizei depth);
    GL_APICALL void GL_APIENTRY glGetInternalformativ(GLenum target,
                                                      GLenum internalformat,
                                                      GLenum pname,
                                                      GLsizei count,
                                                      GLint* params);
#endif
#endif /* GL_ES_VERSION_3_0 */

#ifdef __cplusplus
}
#endif

#endif
