// GENERATED FILE - DO NOT EDIT.
// Generated by generate_gl_dispatch_table.py using data from gl_bindings_data.json and gl.xml.
//
// Copyright 2018 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// DispatchTableGL_autogen.h:
//   Defines the native binding interface for ANGLE's OpenGL back-end.

#ifndef LIBGLESV2_RENDERER_GL_DISPATCH_TABLE_GL_AUTOGEN_H_
#define LIBGLESV2_RENDERER_GL_DISPATCH_TABLE_GL_AUTOGEN_H_

#include "common/angleutils.h"
#include "libANGLE/renderer/gl/functionsgl_typedefs.h"

#include <set>

namespace gl
{
struct Version;
}  // namespace gl

namespace rx
{
class DispatchTableGL : angle::NonCopyable
{
  public:
    // 1.0
    PFNGLBLENDFUNCPROC blendFunc                           = nullptr;
    PFNGLCLEARPROC clear                                   = nullptr;
    PFNGLCLEARCOLORPROC clearColor                         = nullptr;
    PFNGLCLEARDEPTHPROC clearDepth                         = nullptr;
    PFNGLCLEARSTENCILPROC clearStencil                     = nullptr;
    PFNGLCOLORMASKPROC colorMask                           = nullptr;
    PFNGLCULLFACEPROC cullFace                             = nullptr;
    PFNGLDEPTHFUNCPROC depthFunc                           = nullptr;
    PFNGLDEPTHMASKPROC depthMask                           = nullptr;
    PFNGLDEPTHRANGEPROC depthRange                         = nullptr;
    PFNGLDISABLEPROC disable                               = nullptr;
    PFNGLDRAWBUFFERPROC drawBuffer                         = nullptr;
    PFNGLENABLEPROC enable                                 = nullptr;
    PFNGLFINISHPROC finish                                 = nullptr;
    PFNGLFLUSHPROC flush                                   = nullptr;
    PFNGLFRONTFACEPROC frontFace                           = nullptr;
    PFNGLGETBOOLEANVPROC getBooleanv                       = nullptr;
    PFNGLGETDOUBLEVPROC getDoublev                         = nullptr;
    PFNGLGETERRORPROC getError                             = nullptr;
    PFNGLGETFLOATVPROC getFloatv                           = nullptr;
    PFNGLGETINTEGERVPROC getIntegerv                       = nullptr;
    PFNGLGETSTRINGPROC getString                           = nullptr;
    PFNGLGETTEXIMAGEPROC getTexImage                       = nullptr;
    PFNGLGETTEXLEVELPARAMETERFVPROC getTexLevelParameterfv = nullptr;
    PFNGLGETTEXLEVELPARAMETERIVPROC getTexLevelParameteriv = nullptr;
    PFNGLGETTEXPARAMETERFVPROC getTexParameterfv           = nullptr;
    PFNGLGETTEXPARAMETERIVPROC getTexParameteriv           = nullptr;
    PFNGLHINTPROC hint                                     = nullptr;
    PFNGLISENABLEDPROC isEnabled                           = nullptr;
    PFNGLLINEWIDTHPROC lineWidth                           = nullptr;
    PFNGLLOGICOPPROC logicOp                               = nullptr;
    PFNGLPIXELSTOREFPROC pixelStoref                       = nullptr;
    PFNGLPIXELSTOREIPROC pixelStorei                       = nullptr;
    PFNGLPOINTSIZEPROC pointSize                           = nullptr;
    PFNGLPOLYGONMODEPROC polygonMode                       = nullptr;
    PFNGLREADBUFFERPROC readBuffer                         = nullptr;
    PFNGLREADPIXELSPROC readPixels                         = nullptr;
    PFNGLSCISSORPROC scissor                               = nullptr;
    PFNGLSTENCILFUNCPROC stencilFunc                       = nullptr;
    PFNGLSTENCILMASKPROC stencilMask                       = nullptr;
    PFNGLSTENCILOPPROC stencilOp                           = nullptr;
    PFNGLTEXIMAGE1DPROC texImage1D                         = nullptr;
    PFNGLTEXIMAGE2DPROC texImage2D                         = nullptr;
    PFNGLTEXPARAMETERFPROC texParameterf                   = nullptr;
    PFNGLTEXPARAMETERFVPROC texParameterfv                 = nullptr;
    PFNGLTEXPARAMETERIPROC texParameteri                   = nullptr;
    PFNGLTEXPARAMETERIVPROC texParameteriv                 = nullptr;
    PFNGLVIEWPORTPROC viewport                             = nullptr;

    // 1.1
    PFNGLBINDTEXTUREPROC bindTexture             = nullptr;
    PFNGLCOPYTEXIMAGE1DPROC copyTexImage1D       = nullptr;
    PFNGLCOPYTEXIMAGE2DPROC copyTexImage2D       = nullptr;
    PFNGLCOPYTEXSUBIMAGE1DPROC copyTexSubImage1D = nullptr;
    PFNGLCOPYTEXSUBIMAGE2DPROC copyTexSubImage2D = nullptr;
    PFNGLDELETETEXTURESPROC deleteTextures       = nullptr;
    PFNGLDRAWARRAYSPROC drawArrays               = nullptr;
    PFNGLDRAWELEMENTSPROC drawElements           = nullptr;
    PFNGLGENTEXTURESPROC genTextures             = nullptr;
    PFNGLISTEXTUREPROC isTexture                 = nullptr;
    PFNGLPOLYGONOFFSETPROC polygonOffset         = nullptr;
    PFNGLTEXSUBIMAGE1DPROC texSubImage1D         = nullptr;
    PFNGLTEXSUBIMAGE2DPROC texSubImage2D         = nullptr;

    // 1.2
    PFNGLBLENDCOLORPROC blendColor               = nullptr;
    PFNGLBLENDEQUATIONPROC blendEquation         = nullptr;
    PFNGLCOPYTEXSUBIMAGE3DPROC copyTexSubImage3D = nullptr;
    PFNGLDRAWRANGEELEMENTSPROC drawRangeElements = nullptr;
    PFNGLTEXIMAGE3DPROC texImage3D               = nullptr;
    PFNGLTEXSUBIMAGE3DPROC texSubImage3D         = nullptr;

    // 1.2 Extensions
    PFNGLDELETEFENCESNVPROC deleteFencesNV = nullptr;
    PFNGLFINISHFENCENVPROC finishFenceNV   = nullptr;
    PFNGLGENFENCESNVPROC genFencesNV       = nullptr;
    PFNGLGETFENCEIVNVPROC getFenceivNV     = nullptr;
    PFNGLISFENCENVPROC isFenceNV           = nullptr;
    PFNGLSETFENCENVPROC setFenceNV         = nullptr;
    PFNGLTESTFENCENVPROC testFenceNV       = nullptr;

    // 1.3
    PFNGLACTIVETEXTUREPROC activeTexture                     = nullptr;
    PFNGLCOMPRESSEDTEXIMAGE1DPROC compressedTexImage1D       = nullptr;
    PFNGLCOMPRESSEDTEXIMAGE2DPROC compressedTexImage2D       = nullptr;
    PFNGLCOMPRESSEDTEXIMAGE3DPROC compressedTexImage3D       = nullptr;
    PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC compressedTexSubImage1D = nullptr;
    PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC compressedTexSubImage2D = nullptr;
    PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC compressedTexSubImage3D = nullptr;
    PFNGLGETCOMPRESSEDTEXIMAGEPROC getCompressedTexImage     = nullptr;
    PFNGLSAMPLECOVERAGEPROC sampleCoverage                   = nullptr;

    // 1.4
    PFNGLBLENDFUNCSEPARATEPROC blendFuncSeparate = nullptr;
    PFNGLMULTIDRAWARRAYSPROC multiDrawArrays     = nullptr;
    PFNGLMULTIDRAWELEMENTSPROC multiDrawElements = nullptr;
    PFNGLPOINTPARAMETERFPROC pointParameterf     = nullptr;
    PFNGLPOINTPARAMETERFVPROC pointParameterfv   = nullptr;
    PFNGLPOINTPARAMETERIPROC pointParameteri     = nullptr;
    PFNGLPOINTPARAMETERIVPROC pointParameteriv   = nullptr;

    // 1.5
    PFNGLBEGINQUERYPROC beginQuery                     = nullptr;
    PFNGLBINDBUFFERPROC bindBuffer                     = nullptr;
    PFNGLBUFFERDATAPROC bufferData                     = nullptr;
    PFNGLBUFFERSUBDATAPROC bufferSubData               = nullptr;
    PFNGLDELETEBUFFERSPROC deleteBuffers               = nullptr;
    PFNGLDELETEQUERIESPROC deleteQueries               = nullptr;
    PFNGLENDQUERYPROC endQuery                         = nullptr;
    PFNGLGENBUFFERSPROC genBuffers                     = nullptr;
    PFNGLGENQUERIESPROC genQueries                     = nullptr;
    PFNGLGETBUFFERPARAMETERIVPROC getBufferParameteriv = nullptr;
    PFNGLGETBUFFERPOINTERVPROC getBufferPointerv       = nullptr;
    PFNGLGETBUFFERSUBDATAPROC getBufferSubData         = nullptr;
    PFNGLGETQUERYOBJECTIVPROC getQueryObjectiv         = nullptr;
    PFNGLGETQUERYOBJECTUIVPROC getQueryObjectuiv       = nullptr;
    PFNGLGETQUERYIVPROC getQueryiv                     = nullptr;
    PFNGLISBUFFERPROC isBuffer                         = nullptr;
    PFNGLISQUERYPROC isQuery                           = nullptr;
    PFNGLMAPBUFFERPROC mapBuffer                       = nullptr;
    PFNGLUNMAPBUFFERPROC unmapBuffer                   = nullptr;

    // 2.0
    PFNGLATTACHSHADERPROC attachShader                         = nullptr;
    PFNGLBINDATTRIBLOCATIONPROC bindAttribLocation             = nullptr;
    PFNGLBLENDEQUATIONSEPARATEPROC blendEquationSeparate       = nullptr;
    PFNGLCOMPILESHADERPROC compileShader                       = nullptr;
    PFNGLCREATEPROGRAMPROC createProgram                       = nullptr;
    PFNGLCREATESHADERPROC createShader                         = nullptr;
    PFNGLDELETEPROGRAMPROC deleteProgram                       = nullptr;
    PFNGLDELETESHADERPROC deleteShader                         = nullptr;
    PFNGLDETACHSHADERPROC detachShader                         = nullptr;
    PFNGLDISABLEVERTEXATTRIBARRAYPROC disableVertexAttribArray = nullptr;
    PFNGLDRAWBUFFERSPROC drawBuffers                           = nullptr;
    PFNGLENABLEVERTEXATTRIBARRAYPROC enableVertexAttribArray   = nullptr;
    PFNGLGETACTIVEATTRIBPROC getActiveAttrib                   = nullptr;
    PFNGLGETACTIVEUNIFORMPROC getActiveUniform                 = nullptr;
    PFNGLGETATTACHEDSHADERSPROC getAttachedShaders             = nullptr;
    PFNGLGETATTRIBLOCATIONPROC getAttribLocation               = nullptr;
    PFNGLGETPROGRAMINFOLOGPROC getProgramInfoLog               = nullptr;
    PFNGLGETPROGRAMIVPROC getProgramiv                         = nullptr;
    PFNGLGETSHADERINFOLOGPROC getShaderInfoLog                 = nullptr;
    PFNGLGETSHADERSOURCEPROC getShaderSource                   = nullptr;
    PFNGLGETSHADERIVPROC getShaderiv                           = nullptr;
    PFNGLGETUNIFORMLOCATIONPROC getUniformLocation             = nullptr;
    PFNGLGETUNIFORMFVPROC getUniformfv                         = nullptr;
    PFNGLGETUNIFORMIVPROC getUniformiv                         = nullptr;
    PFNGLGETVERTEXATTRIBPOINTERVPROC getVertexAttribPointerv   = nullptr;
    PFNGLGETVERTEXATTRIBDVPROC getVertexAttribdv               = nullptr;
    PFNGLGETVERTEXATTRIBFVPROC getVertexAttribfv               = nullptr;
    PFNGLGETVERTEXATTRIBIVPROC getVertexAttribiv               = nullptr;
    PFNGLISPROGRAMPROC isProgram                               = nullptr;
    PFNGLISSHADERPROC isShader                                 = nullptr;
    PFNGLLINKPROGRAMPROC linkProgram                           = nullptr;
    PFNGLSHADERSOURCEPROC shaderSource                         = nullptr;
    PFNGLSTENCILFUNCSEPARATEPROC stencilFuncSeparate           = nullptr;
    PFNGLSTENCILMASKSEPARATEPROC stencilMaskSeparate           = nullptr;
    PFNGLSTENCILOPSEPARATEPROC stencilOpSeparate               = nullptr;
    PFNGLUNIFORM1FPROC uniform1f                               = nullptr;
    PFNGLUNIFORM1FVPROC uniform1fv                             = nullptr;
    PFNGLUNIFORM1IPROC uniform1i                               = nullptr;
    PFNGLUNIFORM1IVPROC uniform1iv                             = nullptr;
    PFNGLUNIFORM2FPROC uniform2f                               = nullptr;
    PFNGLUNIFORM2FVPROC uniform2fv                             = nullptr;
    PFNGLUNIFORM2IPROC uniform2i                               = nullptr;
    PFNGLUNIFORM2IVPROC uniform2iv                             = nullptr;
    PFNGLUNIFORM3FPROC uniform3f                               = nullptr;
    PFNGLUNIFORM3FVPROC uniform3fv                             = nullptr;
    PFNGLUNIFORM3IPROC uniform3i                               = nullptr;
    PFNGLUNIFORM3IVPROC uniform3iv                             = nullptr;
    PFNGLUNIFORM4FPROC uniform4f                               = nullptr;
    PFNGLUNIFORM4FVPROC uniform4fv                             = nullptr;
    PFNGLUNIFORM4IPROC uniform4i                               = nullptr;
    PFNGLUNIFORM4IVPROC uniform4iv                             = nullptr;
    PFNGLUNIFORMMATRIX2FVPROC uniformMatrix2fv                 = nullptr;
    PFNGLUNIFORMMATRIX3FVPROC uniformMatrix3fv                 = nullptr;
    PFNGLUNIFORMMATRIX4FVPROC uniformMatrix4fv                 = nullptr;
    PFNGLUSEPROGRAMPROC useProgram                             = nullptr;
    PFNGLVALIDATEPROGRAMPROC validateProgram                   = nullptr;
    PFNGLVERTEXATTRIB1DPROC vertexAttrib1d                     = nullptr;
    PFNGLVERTEXATTRIB1DVPROC vertexAttrib1dv                   = nullptr;
    PFNGLVERTEXATTRIB1FPROC vertexAttrib1f                     = nullptr;
    PFNGLVERTEXATTRIB1FVPROC vertexAttrib1fv                   = nullptr;
    PFNGLVERTEXATTRIB1SPROC vertexAttrib1s                     = nullptr;
    PFNGLVERTEXATTRIB1SVPROC vertexAttrib1sv                   = nullptr;
    PFNGLVERTEXATTRIB2DPROC vertexAttrib2d                     = nullptr;
    PFNGLVERTEXATTRIB2DVPROC vertexAttrib2dv                   = nullptr;
    PFNGLVERTEXATTRIB2FPROC vertexAttrib2f                     = nullptr;
    PFNGLVERTEXATTRIB2FVPROC vertexAttrib2fv                   = nullptr;
    PFNGLVERTEXATTRIB2SPROC vertexAttrib2s                     = nullptr;
    PFNGLVERTEXATTRIB2SVPROC vertexAttrib2sv                   = nullptr;
    PFNGLVERTEXATTRIB3DPROC vertexAttrib3d                     = nullptr;
    PFNGLVERTEXATTRIB3DVPROC vertexAttrib3dv                   = nullptr;
    PFNGLVERTEXATTRIB3FPROC vertexAttrib3f                     = nullptr;
    PFNGLVERTEXATTRIB3FVPROC vertexAttrib3fv                   = nullptr;
    PFNGLVERTEXATTRIB3SPROC vertexAttrib3s                     = nullptr;
    PFNGLVERTEXATTRIB3SVPROC vertexAttrib3sv                   = nullptr;
    PFNGLVERTEXATTRIB4NBVPROC vertexAttrib4Nbv                 = nullptr;
    PFNGLVERTEXATTRIB4NIVPROC vertexAttrib4Niv                 = nullptr;
    PFNGLVERTEXATTRIB4NSVPROC vertexAttrib4Nsv                 = nullptr;
    PFNGLVERTEXATTRIB4NUBPROC vertexAttrib4Nub                 = nullptr;
    PFNGLVERTEXATTRIB4NUBVPROC vertexAttrib4Nubv               = nullptr;
    PFNGLVERTEXATTRIB4NUIVPROC vertexAttrib4Nuiv               = nullptr;
    PFNGLVERTEXATTRIB4NUSVPROC vertexAttrib4Nusv               = nullptr;
    PFNGLVERTEXATTRIB4BVPROC vertexAttrib4bv                   = nullptr;
    PFNGLVERTEXATTRIB4DPROC vertexAttrib4d                     = nullptr;
    PFNGLVERTEXATTRIB4DVPROC vertexAttrib4dv                   = nullptr;
    PFNGLVERTEXATTRIB4FPROC vertexAttrib4f                     = nullptr;
    PFNGLVERTEXATTRIB4FVPROC vertexAttrib4fv                   = nullptr;
    PFNGLVERTEXATTRIB4IVPROC vertexAttrib4iv                   = nullptr;
    PFNGLVERTEXATTRIB4SPROC vertexAttrib4s                     = nullptr;
    PFNGLVERTEXATTRIB4SVPROC vertexAttrib4sv                   = nullptr;
    PFNGLVERTEXATTRIB4UBVPROC vertexAttrib4ubv                 = nullptr;
    PFNGLVERTEXATTRIB4UIVPROC vertexAttrib4uiv                 = nullptr;
    PFNGLVERTEXATTRIB4USVPROC vertexAttrib4usv                 = nullptr;
    PFNGLVERTEXATTRIBPOINTERPROC vertexAttribPointer           = nullptr;

    // 2.1
    PFNGLUNIFORMMATRIX2X3FVPROC uniformMatrix2x3fv = nullptr;
    PFNGLUNIFORMMATRIX2X4FVPROC uniformMatrix2x4fv = nullptr;
    PFNGLUNIFORMMATRIX3X2FVPROC uniformMatrix3x2fv = nullptr;
    PFNGLUNIFORMMATRIX3X4FVPROC uniformMatrix3x4fv = nullptr;
    PFNGLUNIFORMMATRIX4X2FVPROC uniformMatrix4x2fv = nullptr;
    PFNGLUNIFORMMATRIX4X3FVPROC uniformMatrix4x3fv = nullptr;

    // 3.0
    PFNGLBEGINCONDITIONALRENDERPROC beginConditionalRender                           = nullptr;
    PFNGLBEGINTRANSFORMFEEDBACKPROC beginTransformFeedback                           = nullptr;
    PFNGLBINDBUFFERBASEPROC bindBufferBase                                           = nullptr;
    PFNGLBINDBUFFERRANGEPROC bindBufferRange                                         = nullptr;
    PFNGLBINDFRAGDATALOCATIONPROC bindFragDataLocation                               = nullptr;
    PFNGLBINDFRAMEBUFFERPROC bindFramebuffer                                         = nullptr;
    PFNGLBINDRENDERBUFFERPROC bindRenderbuffer                                       = nullptr;
    PFNGLBINDVERTEXARRAYPROC bindVertexArray                                         = nullptr;
    PFNGLBLITFRAMEBUFFERPROC blitFramebuffer                                         = nullptr;
    PFNGLCHECKFRAMEBUFFERSTATUSPROC checkFramebufferStatus                           = nullptr;
    PFNGLCLAMPCOLORPROC clampColor                                                   = nullptr;
    PFNGLCLEARBUFFERFIPROC clearBufferfi                                             = nullptr;
    PFNGLCLEARBUFFERFVPROC clearBufferfv                                             = nullptr;
    PFNGLCLEARBUFFERIVPROC clearBufferiv                                             = nullptr;
    PFNGLCLEARBUFFERUIVPROC clearBufferuiv                                           = nullptr;
    PFNGLCOLORMASKIPROC colorMaski                                                   = nullptr;
    PFNGLDELETEFRAMEBUFFERSPROC deleteFramebuffers                                   = nullptr;
    PFNGLDELETERENDERBUFFERSPROC deleteRenderbuffers                                 = nullptr;
    PFNGLDELETEVERTEXARRAYSPROC deleteVertexArrays                                   = nullptr;
    PFNGLDISABLEIPROC disablei                                                       = nullptr;
    PFNGLENABLEIPROC enablei                                                         = nullptr;
    PFNGLENDCONDITIONALRENDERPROC endConditionalRender                               = nullptr;
    PFNGLENDTRANSFORMFEEDBACKPROC endTransformFeedback                               = nullptr;
    PFNGLFLUSHMAPPEDBUFFERRANGEPROC flushMappedBufferRange                           = nullptr;
    PFNGLFRAMEBUFFERRENDERBUFFERPROC framebufferRenderbuffer                         = nullptr;
    PFNGLFRAMEBUFFERTEXTURE1DPROC framebufferTexture1D                               = nullptr;
    PFNGLFRAMEBUFFERTEXTURE2DPROC framebufferTexture2D                               = nullptr;
    PFNGLFRAMEBUFFERTEXTURE3DPROC framebufferTexture3D                               = nullptr;
    PFNGLFRAMEBUFFERTEXTURELAYERPROC framebufferTextureLayer                         = nullptr;
    PFNGLGENFRAMEBUFFERSPROC genFramebuffers                                         = nullptr;
    PFNGLGENRENDERBUFFERSPROC genRenderbuffers                                       = nullptr;
    PFNGLGENVERTEXARRAYSPROC genVertexArrays                                         = nullptr;
    PFNGLGENERATEMIPMAPPROC generateMipmap                                           = nullptr;
    PFNGLGETBOOLEANI_VPROC getBooleani_v                                             = nullptr;
    PFNGLGETFRAGDATALOCATIONPROC getFragDataLocation                                 = nullptr;
    PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC getFramebufferAttachmentParameteriv = nullptr;
    PFNGLGETINTEGERI_VPROC getIntegeri_v                                             = nullptr;
    PFNGLGETRENDERBUFFERPARAMETERIVPROC getRenderbufferParameteriv                   = nullptr;
    PFNGLGETSTRINGIPROC getStringi                                                   = nullptr;
    PFNGLGETTEXPARAMETERIIVPROC getTexParameterIiv                                   = nullptr;
    PFNGLGETTEXPARAMETERIUIVPROC getTexParameterIuiv                                 = nullptr;
    PFNGLGETTRANSFORMFEEDBACKVARYINGPROC getTransformFeedbackVarying                 = nullptr;
    PFNGLGETUNIFORMUIVPROC getUniformuiv                                             = nullptr;
    PFNGLGETVERTEXATTRIBIIVPROC getVertexAttribIiv                                   = nullptr;
    PFNGLGETVERTEXATTRIBIUIVPROC getVertexAttribIuiv                                 = nullptr;
    PFNGLISENABLEDIPROC isEnabledi                                                   = nullptr;
    PFNGLISFRAMEBUFFERPROC isFramebuffer                                             = nullptr;
    PFNGLISRENDERBUFFERPROC isRenderbuffer                                           = nullptr;
    PFNGLISVERTEXARRAYPROC isVertexArray                                             = nullptr;
    PFNGLMAPBUFFERRANGEPROC mapBufferRange                                           = nullptr;
    PFNGLRENDERBUFFERSTORAGEPROC renderbufferStorage                                 = nullptr;
    PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC renderbufferStorageMultisample           = nullptr;
    PFNGLTEXPARAMETERIIVPROC texParameterIiv                                         = nullptr;
    PFNGLTEXPARAMETERIUIVPROC texParameterIuiv                                       = nullptr;
    PFNGLTRANSFORMFEEDBACKVARYINGSPROC transformFeedbackVaryings                     = nullptr;
    PFNGLUNIFORM1UIPROC uniform1ui                                                   = nullptr;
    PFNGLUNIFORM1UIVPROC uniform1uiv                                                 = nullptr;
    PFNGLUNIFORM2UIPROC uniform2ui                                                   = nullptr;
    PFNGLUNIFORM2UIVPROC uniform2uiv                                                 = nullptr;
    PFNGLUNIFORM3UIPROC uniform3ui                                                   = nullptr;
    PFNGLUNIFORM3UIVPROC uniform3uiv                                                 = nullptr;
    PFNGLUNIFORM4UIPROC uniform4ui                                                   = nullptr;
    PFNGLUNIFORM4UIVPROC uniform4uiv                                                 = nullptr;
    PFNGLVERTEXATTRIBI1IPROC vertexAttribI1i                                         = nullptr;
    PFNGLVERTEXATTRIBI1IVPROC vertexAttribI1iv                                       = nullptr;
    PFNGLVERTEXATTRIBI1UIPROC vertexAttribI1ui                                       = nullptr;
    PFNGLVERTEXATTRIBI1UIVPROC vertexAttribI1uiv                                     = nullptr;
    PFNGLVERTEXATTRIBI2IPROC vertexAttribI2i                                         = nullptr;
    PFNGLVERTEXATTRIBI2IVPROC vertexAttribI2iv                                       = nullptr;
    PFNGLVERTEXATTRIBI2UIPROC vertexAttribI2ui                                       = nullptr;
    PFNGLVERTEXATTRIBI2UIVPROC vertexAttribI2uiv                                     = nullptr;
    PFNGLVERTEXATTRIBI3IPROC vertexAttribI3i                                         = nullptr;
    PFNGLVERTEXATTRIBI3IVPROC vertexAttribI3iv                                       = nullptr;
    PFNGLVERTEXATTRIBI3UIPROC vertexAttribI3ui                                       = nullptr;
    PFNGLVERTEXATTRIBI3UIVPROC vertexAttribI3uiv                                     = nullptr;
    PFNGLVERTEXATTRIBI4BVPROC vertexAttribI4bv                                       = nullptr;
    PFNGLVERTEXATTRIBI4IPROC vertexAttribI4i                                         = nullptr;
    PFNGLVERTEXATTRIBI4IVPROC vertexAttribI4iv                                       = nullptr;
    PFNGLVERTEXATTRIBI4SVPROC vertexAttribI4sv                                       = nullptr;
    PFNGLVERTEXATTRIBI4UBVPROC vertexAttribI4ubv                                     = nullptr;
    PFNGLVERTEXATTRIBI4UIPROC vertexAttribI4ui                                       = nullptr;
    PFNGLVERTEXATTRIBI4UIVPROC vertexAttribI4uiv                                     = nullptr;
    PFNGLVERTEXATTRIBI4USVPROC vertexAttribI4usv                                     = nullptr;
    PFNGLVERTEXATTRIBIPOINTERPROC vertexAttribIPointer                               = nullptr;

    // 3.1
    PFNGLCOPYBUFFERSUBDATAPROC copyBufferSubData                 = nullptr;
    PFNGLDRAWARRAYSINSTANCEDPROC drawArraysInstanced             = nullptr;
    PFNGLDRAWELEMENTSINSTANCEDPROC drawElementsInstanced         = nullptr;
    PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC getActiveUniformBlockName = nullptr;
    PFNGLGETACTIVEUNIFORMBLOCKIVPROC getActiveUniformBlockiv     = nullptr;
    PFNGLGETACTIVEUNIFORMNAMEPROC getActiveUniformName           = nullptr;
    PFNGLGETACTIVEUNIFORMSIVPROC getActiveUniformsiv             = nullptr;
    PFNGLGETUNIFORMBLOCKINDEXPROC getUniformBlockIndex           = nullptr;
    PFNGLGETUNIFORMINDICESPROC getUniformIndices                 = nullptr;
    PFNGLPRIMITIVERESTARTINDEXPROC primitiveRestartIndex         = nullptr;
    PFNGLTEXBUFFERPROC texBuffer                                 = nullptr;
    PFNGLUNIFORMBLOCKBINDINGPROC uniformBlockBinding             = nullptr;

    // 3.2
    PFNGLCLIENTWAITSYNCPROC clientWaitSync                                   = nullptr;
    PFNGLDELETESYNCPROC deleteSync                                           = nullptr;
    PFNGLDRAWELEMENTSBASEVERTEXPROC drawElementsBaseVertex                   = nullptr;
    PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC drawElementsInstancedBaseVertex = nullptr;
    PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC drawRangeElementsBaseVertex         = nullptr;
    PFNGLFENCESYNCPROC fenceSync                                             = nullptr;
    PFNGLFRAMEBUFFERTEXTUREPROC framebufferTexture                           = nullptr;
    PFNGLGETBUFFERPARAMETERI64VPROC getBufferParameteri64v                   = nullptr;
    PFNGLGETINTEGER64I_VPROC getInteger64i_v                                 = nullptr;
    PFNGLGETINTEGER64VPROC getInteger64v                                     = nullptr;
    PFNGLGETMULTISAMPLEFVPROC getMultisamplefv                               = nullptr;
    PFNGLGETSYNCIVPROC getSynciv                                             = nullptr;
    PFNGLISSYNCPROC isSync                                                   = nullptr;
    PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC multiDrawElementsBaseVertex         = nullptr;
    PFNGLPROVOKINGVERTEXPROC provokingVertex                                 = nullptr;
    PFNGLSAMPLEMASKIPROC sampleMaski                                         = nullptr;
    PFNGLTEXIMAGE2DMULTISAMPLEPROC texImage2DMultisample                     = nullptr;
    PFNGLTEXIMAGE3DMULTISAMPLEPROC texImage3DMultisample                     = nullptr;
    PFNGLWAITSYNCPROC waitSync                                               = nullptr;

    // 3.3
    PFNGLBINDFRAGDATALOCATIONINDEXEDPROC bindFragDataLocationIndexed = nullptr;
    PFNGLBINDSAMPLERPROC bindSampler                                 = nullptr;
    PFNGLDELETESAMPLERSPROC deleteSamplers                           = nullptr;
    PFNGLGENSAMPLERSPROC genSamplers                                 = nullptr;
    PFNGLGETFRAGDATAINDEXPROC getFragDataIndex                       = nullptr;
    PFNGLGETQUERYOBJECTI64VPROC getQueryObjecti64v                   = nullptr;
    PFNGLGETQUERYOBJECTUI64VPROC getQueryObjectui64v                 = nullptr;
    PFNGLGETSAMPLERPARAMETERIIVPROC getSamplerParameterIiv           = nullptr;
    PFNGLGETSAMPLERPARAMETERIUIVPROC getSamplerParameterIuiv         = nullptr;
    PFNGLGETSAMPLERPARAMETERFVPROC getSamplerParameterfv             = nullptr;
    PFNGLGETSAMPLERPARAMETERIVPROC getSamplerParameteriv             = nullptr;
    PFNGLISSAMPLERPROC isSampler                                     = nullptr;
    PFNGLQUERYCOUNTERPROC queryCounter                               = nullptr;
    PFNGLSAMPLERPARAMETERIIVPROC samplerParameterIiv                 = nullptr;
    PFNGLSAMPLERPARAMETERIUIVPROC samplerParameterIuiv               = nullptr;
    PFNGLSAMPLERPARAMETERFPROC samplerParameterf                     = nullptr;
    PFNGLSAMPLERPARAMETERFVPROC samplerParameterfv                   = nullptr;
    PFNGLSAMPLERPARAMETERIPROC samplerParameteri                     = nullptr;
    PFNGLSAMPLERPARAMETERIVPROC samplerParameteriv                   = nullptr;
    PFNGLVERTEXATTRIBDIVISORPROC vertexAttribDivisor                 = nullptr;
    PFNGLVERTEXATTRIBP1UIPROC vertexAttribP1ui                       = nullptr;
    PFNGLVERTEXATTRIBP1UIVPROC vertexAttribP1uiv                     = nullptr;
    PFNGLVERTEXATTRIBP2UIPROC vertexAttribP2ui                       = nullptr;
    PFNGLVERTEXATTRIBP2UIVPROC vertexAttribP2uiv                     = nullptr;
    PFNGLVERTEXATTRIBP3UIPROC vertexAttribP3ui                       = nullptr;
    PFNGLVERTEXATTRIBP3UIVPROC vertexAttribP3uiv                     = nullptr;
    PFNGLVERTEXATTRIBP4UIPROC vertexAttribP4ui                       = nullptr;
    PFNGLVERTEXATTRIBP4UIVPROC vertexAttribP4uiv                     = nullptr;

    // 4.0
    PFNGLBEGINQUERYINDEXEDPROC beginQueryIndexed                           = nullptr;
    PFNGLBINDTRANSFORMFEEDBACKPROC bindTransformFeedback                   = nullptr;
    PFNGLBLENDEQUATIONSEPARATEIPROC blendEquationSeparatei                 = nullptr;
    PFNGLBLENDEQUATIONIPROC blendEquationi                                 = nullptr;
    PFNGLBLENDFUNCSEPARATEIPROC blendFuncSeparatei                         = nullptr;
    PFNGLBLENDFUNCIPROC blendFunci                                         = nullptr;
    PFNGLDELETETRANSFORMFEEDBACKSPROC deleteTransformFeedbacks             = nullptr;
    PFNGLDRAWARRAYSINDIRECTPROC drawArraysIndirect                         = nullptr;
    PFNGLDRAWELEMENTSINDIRECTPROC drawElementsIndirect                     = nullptr;
    PFNGLDRAWTRANSFORMFEEDBACKPROC drawTransformFeedback                   = nullptr;
    PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC drawTransformFeedbackStream       = nullptr;
    PFNGLENDQUERYINDEXEDPROC endQueryIndexed                               = nullptr;
    PFNGLGENTRANSFORMFEEDBACKSPROC genTransformFeedbacks                   = nullptr;
    PFNGLGETACTIVESUBROUTINENAMEPROC getActiveSubroutineName               = nullptr;
    PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC getActiveSubroutineUniformName = nullptr;
    PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC getActiveSubroutineUniformiv     = nullptr;
    PFNGLGETPROGRAMSTAGEIVPROC getProgramStageiv                           = nullptr;
    PFNGLGETQUERYINDEXEDIVPROC getQueryIndexediv                           = nullptr;
    PFNGLGETSUBROUTINEINDEXPROC getSubroutineIndex                         = nullptr;
    PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC getSubroutineUniformLocation     = nullptr;
    PFNGLGETUNIFORMSUBROUTINEUIVPROC getUniformSubroutineuiv               = nullptr;
    PFNGLGETUNIFORMDVPROC getUniformdv                                     = nullptr;
    PFNGLISTRANSFORMFEEDBACKPROC isTransformFeedback                       = nullptr;
    PFNGLMINSAMPLESHADINGPROC minSampleShading                             = nullptr;
    PFNGLPATCHPARAMETERFVPROC patchParameterfv                             = nullptr;
    PFNGLPATCHPARAMETERIPROC patchParameteri                               = nullptr;
    PFNGLPAUSETRANSFORMFEEDBACKPROC pauseTransformFeedback                 = nullptr;
    PFNGLRESUMETRANSFORMFEEDBACKPROC resumeTransformFeedback               = nullptr;
    PFNGLUNIFORM1DPROC uniform1d                                           = nullptr;
    PFNGLUNIFORM1DVPROC uniform1dv                                         = nullptr;
    PFNGLUNIFORM2DPROC uniform2d                                           = nullptr;
    PFNGLUNIFORM2DVPROC uniform2dv                                         = nullptr;
    PFNGLUNIFORM3DPROC uniform3d                                           = nullptr;
    PFNGLUNIFORM3DVPROC uniform3dv                                         = nullptr;
    PFNGLUNIFORM4DPROC uniform4d                                           = nullptr;
    PFNGLUNIFORM4DVPROC uniform4dv                                         = nullptr;
    PFNGLUNIFORMMATRIX2DVPROC uniformMatrix2dv                             = nullptr;
    PFNGLUNIFORMMATRIX2X3DVPROC uniformMatrix2x3dv                         = nullptr;
    PFNGLUNIFORMMATRIX2X4DVPROC uniformMatrix2x4dv                         = nullptr;
    PFNGLUNIFORMMATRIX3DVPROC uniformMatrix3dv                             = nullptr;
    PFNGLUNIFORMMATRIX3X2DVPROC uniformMatrix3x2dv                         = nullptr;
    PFNGLUNIFORMMATRIX3X4DVPROC uniformMatrix3x4dv                         = nullptr;
    PFNGLUNIFORMMATRIX4DVPROC uniformMatrix4dv                             = nullptr;
    PFNGLUNIFORMMATRIX4X2DVPROC uniformMatrix4x2dv                         = nullptr;
    PFNGLUNIFORMMATRIX4X3DVPROC uniformMatrix4x3dv                         = nullptr;
    PFNGLUNIFORMSUBROUTINESUIVPROC uniformSubroutinesuiv                   = nullptr;

    // 4.1
    PFNGLACTIVESHADERPROGRAMPROC activeShaderProgram             = nullptr;
    PFNGLBINDPROGRAMPIPELINEPROC bindProgramPipeline             = nullptr;
    PFNGLCLEARDEPTHFPROC clearDepthf                             = nullptr;
    PFNGLCREATESHADERPROGRAMVPROC createShaderProgramv           = nullptr;
    PFNGLDELETEPROGRAMPIPELINESPROC deleteProgramPipelines       = nullptr;
    PFNGLDEPTHRANGEARRAYVPROC depthRangeArrayv                   = nullptr;
    PFNGLDEPTHRANGEINDEXEDPROC depthRangeIndexed                 = nullptr;
    PFNGLDEPTHRANGEFPROC depthRangef                             = nullptr;
    PFNGLGENPROGRAMPIPELINESPROC genProgramPipelines             = nullptr;
    PFNGLGETDOUBLEI_VPROC getDoublei_v                           = nullptr;
    PFNGLGETFLOATI_VPROC getFloati_v                             = nullptr;
    PFNGLGETPROGRAMBINARYPROC getProgramBinary                   = nullptr;
    PFNGLGETPROGRAMPIPELINEINFOLOGPROC getProgramPipelineInfoLog = nullptr;
    PFNGLGETPROGRAMPIPELINEIVPROC getProgramPipelineiv           = nullptr;
    PFNGLGETSHADERPRECISIONFORMATPROC getShaderPrecisionFormat   = nullptr;
    PFNGLGETVERTEXATTRIBLDVPROC getVertexAttribLdv               = nullptr;
    PFNGLISPROGRAMPIPELINEPROC isProgramPipeline                 = nullptr;
    PFNGLPROGRAMBINARYPROC programBinary                         = nullptr;
    PFNGLPROGRAMPARAMETERIPROC programParameteri                 = nullptr;
    PFNGLPROGRAMUNIFORM1DPROC programUniform1d                   = nullptr;
    PFNGLPROGRAMUNIFORM1DVPROC programUniform1dv                 = nullptr;
    PFNGLPROGRAMUNIFORM1FPROC programUniform1f                   = nullptr;
    PFNGLPROGRAMUNIFORM1FVPROC programUniform1fv                 = nullptr;
    PFNGLPROGRAMUNIFORM1IPROC programUniform1i                   = nullptr;
    PFNGLPROGRAMUNIFORM1IVPROC programUniform1iv                 = nullptr;
    PFNGLPROGRAMUNIFORM1UIPROC programUniform1ui                 = nullptr;
    PFNGLPROGRAMUNIFORM1UIVPROC programUniform1uiv               = nullptr;
    PFNGLPROGRAMUNIFORM2DPROC programUniform2d                   = nullptr;
    PFNGLPROGRAMUNIFORM2DVPROC programUniform2dv                 = nullptr;
    PFNGLPROGRAMUNIFORM2FPROC programUniform2f                   = nullptr;
    PFNGLPROGRAMUNIFORM2FVPROC programUniform2fv                 = nullptr;
    PFNGLPROGRAMUNIFORM2IPROC programUniform2i                   = nullptr;
    PFNGLPROGRAMUNIFORM2IVPROC programUniform2iv                 = nullptr;
    PFNGLPROGRAMUNIFORM2UIPROC programUniform2ui                 = nullptr;
    PFNGLPROGRAMUNIFORM2UIVPROC programUniform2uiv               = nullptr;
    PFNGLPROGRAMUNIFORM3DPROC programUniform3d                   = nullptr;
    PFNGLPROGRAMUNIFORM3DVPROC programUniform3dv                 = nullptr;
    PFNGLPROGRAMUNIFORM3FPROC programUniform3f                   = nullptr;
    PFNGLPROGRAMUNIFORM3FVPROC programUniform3fv                 = nullptr;
    PFNGLPROGRAMUNIFORM3IPROC programUniform3i                   = nullptr;
    PFNGLPROGRAMUNIFORM3IVPROC programUniform3iv                 = nullptr;
    PFNGLPROGRAMUNIFORM3UIPROC programUniform3ui                 = nullptr;
    PFNGLPROGRAMUNIFORM3UIVPROC programUniform3uiv               = nullptr;
    PFNGLPROGRAMUNIFORM4DPROC programUniform4d                   = nullptr;
    PFNGLPROGRAMUNIFORM4DVPROC programUniform4dv                 = nullptr;
    PFNGLPROGRAMUNIFORM4FPROC programUniform4f                   = nullptr;
    PFNGLPROGRAMUNIFORM4FVPROC programUniform4fv                 = nullptr;
    PFNGLPROGRAMUNIFORM4IPROC programUniform4i                   = nullptr;
    PFNGLPROGRAMUNIFORM4IVPROC programUniform4iv                 = nullptr;
    PFNGLPROGRAMUNIFORM4UIPROC programUniform4ui                 = nullptr;
    PFNGLPROGRAMUNIFORM4UIVPROC programUniform4uiv               = nullptr;
    PFNGLPROGRAMUNIFORMMATRIX2DVPROC programUniformMatrix2dv     = nullptr;
    PFNGLPROGRAMUNIFORMMATRIX2FVPROC programUniformMatrix2fv     = nullptr;
    PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC programUniformMatrix2x3dv = nullptr;
    PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC programUniformMatrix2x3fv = nullptr;
    PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC programUniformMatrix2x4dv = nullptr;
    PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC programUniformMatrix2x4fv = nullptr;
    PFNGLPROGRAMUNIFORMMATRIX3DVPROC programUniformMatrix3dv     = nullptr;
    PFNGLPROGRAMUNIFORMMATRIX3FVPROC programUniformMatrix3fv     = nullptr;
    PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC programUniformMatrix3x2dv = nullptr;
    PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC programUniformMatrix3x2fv = nullptr;
    PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC programUniformMatrix3x4dv = nullptr;
    PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC programUniformMatrix3x4fv = nullptr;
    PFNGLPROGRAMUNIFORMMATRIX4DVPROC programUniformMatrix4dv     = nullptr;
    PFNGLPROGRAMUNIFORMMATRIX4FVPROC programUniformMatrix4fv     = nullptr;
    PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC programUniformMatrix4x2dv = nullptr;
    PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC programUniformMatrix4x2fv = nullptr;
    PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC programUniformMatrix4x3dv = nullptr;
    PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC programUniformMatrix4x3fv = nullptr;
    PFNGLRELEASESHADERCOMPILERPROC releaseShaderCompiler         = nullptr;
    PFNGLSCISSORARRAYVPROC scissorArrayv                         = nullptr;
    PFNGLSCISSORINDEXEDPROC scissorIndexed                       = nullptr;
    PFNGLSCISSORINDEXEDVPROC scissorIndexedv                     = nullptr;
    PFNGLSHADERBINARYPROC shaderBinary                           = nullptr;
    PFNGLUSEPROGRAMSTAGESPROC useProgramStages                   = nullptr;
    PFNGLVALIDATEPROGRAMPIPELINEPROC validateProgramPipeline     = nullptr;
    PFNGLVERTEXATTRIBL1DPROC vertexAttribL1d                     = nullptr;
    PFNGLVERTEXATTRIBL1DVPROC vertexAttribL1dv                   = nullptr;
    PFNGLVERTEXATTRIBL2DPROC vertexAttribL2d                     = nullptr;
    PFNGLVERTEXATTRIBL2DVPROC vertexAttribL2dv                   = nullptr;
    PFNGLVERTEXATTRIBL3DPROC vertexAttribL3d                     = nullptr;
    PFNGLVERTEXATTRIBL3DVPROC vertexAttribL3dv                   = nullptr;
    PFNGLVERTEXATTRIBL4DPROC vertexAttribL4d                     = nullptr;
    PFNGLVERTEXATTRIBL4DVPROC vertexAttribL4dv                   = nullptr;
    PFNGLVERTEXATTRIBLPOINTERPROC vertexAttribLPointer           = nullptr;
    PFNGLVIEWPORTARRAYVPROC viewportArrayv                       = nullptr;
    PFNGLVIEWPORTINDEXEDFPROC viewportIndexedf                   = nullptr;
    PFNGLVIEWPORTINDEXEDFVPROC viewportIndexedfv                 = nullptr;

    // 4.2
    PFNGLBINDIMAGETEXTUREPROC bindImageTexture                                   = nullptr;
    PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC drawArraysInstancedBaseInstance     = nullptr;
    PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC drawElementsInstancedBaseInstance = nullptr;
    PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC
        drawElementsInstancedBaseVertexBaseInstance                                    = nullptr;
    PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC drawTransformFeedbackInstanced             = nullptr;
    PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC drawTransformFeedbackStreamInstanced = nullptr;
    PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC getActiveAtomicCounterBufferiv             = nullptr;
    PFNGLGETINTERNALFORMATIVPROC getInternalformativ                                   = nullptr;
    PFNGLMEMORYBARRIERPROC memoryBarrier                                               = nullptr;
    PFNGLTEXSTORAGE1DPROC texStorage1D                                                 = nullptr;
    PFNGLTEXSTORAGE2DPROC texStorage2D                                                 = nullptr;
    PFNGLTEXSTORAGE3DPROC texStorage3D                                                 = nullptr;

    // 4.3
    PFNGLBINDVERTEXBUFFERPROC bindVertexBuffer                               = nullptr;
    PFNGLCLEARBUFFERDATAPROC clearBufferData                                 = nullptr;
    PFNGLCLEARBUFFERSUBDATAPROC clearBufferSubData                           = nullptr;
    PFNGLCOPYIMAGESUBDATAPROC copyImageSubData                               = nullptr;
    PFNGLCOVERAGEMODULATIONNVPROC coverageModulationNV                       = nullptr;
    PFNGLDEBUGMESSAGECALLBACKPROC debugMessageCallback                       = nullptr;
    PFNGLDEBUGMESSAGECONTROLPROC debugMessageControl                         = nullptr;
    PFNGLDEBUGMESSAGEINSERTPROC debugMessageInsert                           = nullptr;
    PFNGLDISPATCHCOMPUTEPROC dispatchCompute                                 = nullptr;
    PFNGLDISPATCHCOMPUTEINDIRECTPROC dispatchComputeIndirect                 = nullptr;
    PFNGLFRAMEBUFFERPARAMETERIPROC framebufferParameteri                     = nullptr;
    PFNGLGETDEBUGMESSAGELOGPROC getDebugMessageLog                           = nullptr;
    PFNGLGETFRAMEBUFFERPARAMETERIVPROC getFramebufferParameteriv             = nullptr;
    PFNGLGETINTERNALFORMATI64VPROC getInternalformati64v                     = nullptr;
    PFNGLGETOBJECTLABELPROC getObjectLabel                                   = nullptr;
    PFNGLGETOBJECTPTRLABELPROC getObjectPtrLabel                             = nullptr;
    PFNGLGETPOINTERVPROC getPointerv                                         = nullptr;
    PFNGLGETPROGRAMINTERFACEIVPROC getProgramInterfaceiv                     = nullptr;
    PFNGLGETPROGRAMRESOURCEINDEXPROC getProgramResourceIndex                 = nullptr;
    PFNGLGETPROGRAMRESOURCELOCATIONPROC getProgramResourceLocation           = nullptr;
    PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC getProgramResourceLocationIndex = nullptr;
    PFNGLGETPROGRAMRESOURCENAMEPROC getProgramResourceName                   = nullptr;
    PFNGLGETPROGRAMRESOURCEIVPROC getProgramResourceiv                       = nullptr;
    PFNGLINVALIDATEBUFFERDATAPROC invalidateBufferData                       = nullptr;
    PFNGLINVALIDATEBUFFERSUBDATAPROC invalidateBufferSubData                 = nullptr;
    PFNGLINVALIDATEFRAMEBUFFERPROC invalidateFramebuffer                     = nullptr;
    PFNGLINVALIDATESUBFRAMEBUFFERPROC invalidateSubFramebuffer               = nullptr;
    PFNGLINVALIDATETEXIMAGEPROC invalidateTexImage                           = nullptr;
    PFNGLINVALIDATETEXSUBIMAGEPROC invalidateTexSubImage                     = nullptr;
    PFNGLMULTIDRAWARRAYSINDIRECTPROC multiDrawArraysIndirect                 = nullptr;
    PFNGLMULTIDRAWELEMENTSINDIRECTPROC multiDrawElementsIndirect             = nullptr;
    PFNGLOBJECTLABELPROC objectLabel                                         = nullptr;
    PFNGLOBJECTPTRLABELPROC objectPtrLabel                                   = nullptr;
    PFNGLPOPDEBUGGROUPPROC popDebugGroup                                     = nullptr;
    PFNGLPUSHDEBUGGROUPPROC pushDebugGroup                                   = nullptr;
    PFNGLSHADERSTORAGEBLOCKBINDINGPROC shaderStorageBlockBinding             = nullptr;
    PFNGLTEXBUFFERRANGEPROC texBufferRange                                   = nullptr;
    PFNGLTEXSTORAGE2DMULTISAMPLEPROC texStorage2DMultisample                 = nullptr;
    PFNGLTEXSTORAGE3DMULTISAMPLEPROC texStorage3DMultisample                 = nullptr;
    PFNGLTEXTUREVIEWPROC textureView                                         = nullptr;
    PFNGLVERTEXATTRIBBINDINGPROC vertexAttribBinding                         = nullptr;
    PFNGLVERTEXATTRIBFORMATPROC vertexAttribFormat                           = nullptr;
    PFNGLVERTEXATTRIBIFORMATPROC vertexAttribIFormat                         = nullptr;
    PFNGLVERTEXATTRIBLFORMATPROC vertexAttribLFormat                         = nullptr;
    PFNGLVERTEXBINDINGDIVISORPROC vertexBindingDivisor                       = nullptr;

    // 4.4
    PFNGLBINDBUFFERSBASEPROC bindBuffersBase     = nullptr;
    PFNGLBINDBUFFERSRANGEPROC bindBuffersRange   = nullptr;
    PFNGLBINDIMAGETEXTURESPROC bindImageTextures = nullptr;
    PFNGLBINDSAMPLERSPROC bindSamplers           = nullptr;
    PFNGLBINDTEXTURESPROC bindTextures           = nullptr;
    PFNGLBINDVERTEXBUFFERSPROC bindVertexBuffers = nullptr;
    PFNGLBUFFERSTORAGEPROC bufferStorage         = nullptr;
    PFNGLCLEARTEXIMAGEPROC clearTexImage         = nullptr;
    PFNGLCLEARTEXSUBIMAGEPROC clearTexSubImage   = nullptr;

    // 4.5
    PFNGLBINDTEXTUREUNITPROC bindTextureUnit                           = nullptr;
    PFNGLBLITNAMEDFRAMEBUFFERPROC blitNamedFramebuffer                 = nullptr;
    PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC checkNamedFramebufferStatus   = nullptr;
    PFNGLCLEARNAMEDBUFFERDATAPROC clearNamedBufferData                 = nullptr;
    PFNGLCLEARNAMEDBUFFERSUBDATAPROC clearNamedBufferSubData           = nullptr;
    PFNGLCLEARNAMEDFRAMEBUFFERFIPROC clearNamedFramebufferfi           = nullptr;
    PFNGLCLEARNAMEDFRAMEBUFFERFVPROC clearNamedFramebufferfv           = nullptr;
    PFNGLCLEARNAMEDFRAMEBUFFERIVPROC clearNamedFramebufferiv           = nullptr;
    PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC clearNamedFramebufferuiv         = nullptr;
    PFNGLCLIPCONTROLPROC clipControl                                   = nullptr;
    PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC compressedTextureSubImage1D   = nullptr;
    PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC compressedTextureSubImage2D   = nullptr;
    PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC compressedTextureSubImage3D   = nullptr;
    PFNGLCOPYNAMEDBUFFERSUBDATAPROC copyNamedBufferSubData             = nullptr;
    PFNGLCOPYTEXTURESUBIMAGE1DPROC copyTextureSubImage1D               = nullptr;
    PFNGLCOPYTEXTURESUBIMAGE2DPROC copyTextureSubImage2D               = nullptr;
    PFNGLCOPYTEXTURESUBIMAGE3DPROC copyTextureSubImage3D               = nullptr;
    PFNGLCREATEBUFFERSPROC createBuffers                               = nullptr;
    PFNGLCREATEFRAMEBUFFERSPROC createFramebuffers                     = nullptr;
    PFNGLCREATEPROGRAMPIPELINESPROC createProgramPipelines             = nullptr;
    PFNGLCREATEQUERIESPROC createQueries                               = nullptr;
    PFNGLCREATERENDERBUFFERSPROC createRenderbuffers                   = nullptr;
    PFNGLCREATESAMPLERSPROC createSamplers                             = nullptr;
    PFNGLCREATETEXTURESPROC createTextures                             = nullptr;
    PFNGLCREATETRANSFORMFEEDBACKSPROC createTransformFeedbacks         = nullptr;
    PFNGLCREATEVERTEXARRAYSPROC createVertexArrays                     = nullptr;
    PFNGLDISABLEVERTEXARRAYATTRIBPROC disableVertexArrayAttrib         = nullptr;
    PFNGLENABLEVERTEXARRAYATTRIBPROC enableVertexArrayAttrib           = nullptr;
    PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC flushMappedNamedBufferRange   = nullptr;
    PFNGLGENERATETEXTUREMIPMAPPROC generateTextureMipmap               = nullptr;
    PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC getCompressedTextureImage       = nullptr;
    PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC getCompressedTextureSubImage = nullptr;
    PFNGLGETGRAPHICSRESETSTATUSPROC getGraphicsResetStatus             = nullptr;
    PFNGLGETNAMEDBUFFERPARAMETERI64VPROC getNamedBufferParameteri64v   = nullptr;
    PFNGLGETNAMEDBUFFERPARAMETERIVPROC getNamedBufferParameteriv       = nullptr;
    PFNGLGETNAMEDBUFFERPOINTERVPROC getNamedBufferPointerv             = nullptr;
    PFNGLGETNAMEDBUFFERSUBDATAPROC getNamedBufferSubData               = nullptr;
    PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC getNamedFramebufferAttachmentParameteriv =
        nullptr;
    PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC getNamedFramebufferParameteriv           = nullptr;
    PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC getNamedRenderbufferParameteriv         = nullptr;
    PFNGLGETQUERYBUFFEROBJECTI64VPROC getQueryBufferObjecti64v                       = nullptr;
    PFNGLGETQUERYBUFFEROBJECTIVPROC getQueryBufferObjectiv                           = nullptr;
    PFNGLGETQUERYBUFFEROBJECTUI64VPROC getQueryBufferObjectui64v                     = nullptr;
    PFNGLGETQUERYBUFFEROBJECTUIVPROC getQueryBufferObjectuiv                         = nullptr;
    PFNGLGETTEXTUREIMAGEPROC getTextureImage                                         = nullptr;
    PFNGLGETTEXTURELEVELPARAMETERFVPROC getTextureLevelParameterfv                   = nullptr;
    PFNGLGETTEXTURELEVELPARAMETERIVPROC getTextureLevelParameteriv                   = nullptr;
    PFNGLGETTEXTUREPARAMETERIIVPROC getTextureParameterIiv                           = nullptr;
    PFNGLGETTEXTUREPARAMETERIUIVPROC getTextureParameterIuiv                         = nullptr;
    PFNGLGETTEXTUREPARAMETERFVPROC getTextureParameterfv                             = nullptr;
    PFNGLGETTEXTUREPARAMETERIVPROC getTextureParameteriv                             = nullptr;
    PFNGLGETTEXTURESUBIMAGEPROC getTextureSubImage                                   = nullptr;
    PFNGLGETTRANSFORMFEEDBACKI64_VPROC getTransformFeedbacki64_v                     = nullptr;
    PFNGLGETTRANSFORMFEEDBACKI_VPROC getTransformFeedbacki_v                         = nullptr;
    PFNGLGETTRANSFORMFEEDBACKIVPROC getTransformFeedbackiv                           = nullptr;
    PFNGLGETVERTEXARRAYINDEXED64IVPROC getVertexArrayIndexed64iv                     = nullptr;
    PFNGLGETVERTEXARRAYINDEXEDIVPROC getVertexArrayIndexediv                         = nullptr;
    PFNGLGETVERTEXARRAYIVPROC getVertexArrayiv                                       = nullptr;
    PFNGLGETNCOMPRESSEDTEXIMAGEPROC getnCompressedTexImage                           = nullptr;
    PFNGLGETNTEXIMAGEPROC getnTexImage                                               = nullptr;
    PFNGLGETNUNIFORMDVPROC getnUniformdv                                             = nullptr;
    PFNGLGETNUNIFORMFVPROC getnUniformfv                                             = nullptr;
    PFNGLGETNUNIFORMIVPROC getnUniformiv                                             = nullptr;
    PFNGLGETNUNIFORMUIVPROC getnUniformuiv                                           = nullptr;
    PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC invalidateNamedFramebufferData           = nullptr;
    PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC invalidateNamedFramebufferSubData     = nullptr;
    PFNGLMAPNAMEDBUFFERPROC mapNamedBuffer                                           = nullptr;
    PFNGLMAPNAMEDBUFFERRANGEPROC mapNamedBufferRange                                 = nullptr;
    PFNGLMEMORYBARRIERBYREGIONPROC memoryBarrierByRegion                             = nullptr;
    PFNGLNAMEDBUFFERDATAPROC namedBufferData                                         = nullptr;
    PFNGLNAMEDBUFFERSTORAGEPROC namedBufferStorage                                   = nullptr;
    PFNGLNAMEDBUFFERSUBDATAPROC namedBufferSubData                                   = nullptr;
    PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC namedFramebufferDrawBuffer                   = nullptr;
    PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC namedFramebufferDrawBuffers                 = nullptr;
    PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC namedFramebufferParameteri                   = nullptr;
    PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC namedFramebufferReadBuffer                   = nullptr;
    PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC namedFramebufferRenderbuffer               = nullptr;
    PFNGLNAMEDFRAMEBUFFERTEXTUREPROC namedFramebufferTexture                         = nullptr;
    PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC namedFramebufferTextureLayer               = nullptr;
    PFNGLNAMEDRENDERBUFFERSTORAGEPROC namedRenderbufferStorage                       = nullptr;
    PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC namedRenderbufferStorageMultisample = nullptr;
    PFNGLREADNPIXELSPROC readnPixels                                                 = nullptr;
    PFNGLTEXTUREBARRIERPROC textureBarrier                                           = nullptr;
    PFNGLTEXTUREBUFFERPROC textureBuffer                                             = nullptr;
    PFNGLTEXTUREBUFFERRANGEPROC textureBufferRange                                   = nullptr;
    PFNGLTEXTUREPARAMETERIIVPROC textureParameterIiv                                 = nullptr;
    PFNGLTEXTUREPARAMETERIUIVPROC textureParameterIuiv                               = nullptr;
    PFNGLTEXTUREPARAMETERFPROC textureParameterf                                     = nullptr;
    PFNGLTEXTUREPARAMETERFVPROC textureParameterfv                                   = nullptr;
    PFNGLTEXTUREPARAMETERIPROC textureParameteri                                     = nullptr;
    PFNGLTEXTUREPARAMETERIVPROC textureParameteriv                                   = nullptr;
    PFNGLTEXTURESTORAGE1DPROC textureStorage1D                                       = nullptr;
    PFNGLTEXTURESTORAGE2DPROC textureStorage2D                                       = nullptr;
    PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC textureStorage2DMultisample                 = nullptr;
    PFNGLTEXTURESTORAGE3DPROC textureStorage3D                                       = nullptr;
    PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC textureStorage3DMultisample                 = nullptr;
    PFNGLTEXTURESUBIMAGE1DPROC textureSubImage1D                                     = nullptr;
    PFNGLTEXTURESUBIMAGE2DPROC textureSubImage2D                                     = nullptr;
    PFNGLTEXTURESUBIMAGE3DPROC textureSubImage3D                                     = nullptr;
    PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC transformFeedbackBufferBase                 = nullptr;
    PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC transformFeedbackBufferRange               = nullptr;
    PFNGLUNMAPNAMEDBUFFERPROC unmapNamedBuffer                                       = nullptr;
    PFNGLVERTEXARRAYATTRIBBINDINGPROC vertexArrayAttribBinding                       = nullptr;
    PFNGLVERTEXARRAYATTRIBFORMATPROC vertexArrayAttribFormat                         = nullptr;
    PFNGLVERTEXARRAYATTRIBIFORMATPROC vertexArrayAttribIFormat                       = nullptr;
    PFNGLVERTEXARRAYATTRIBLFORMATPROC vertexArrayAttribLFormat                       = nullptr;
    PFNGLVERTEXARRAYBINDINGDIVISORPROC vertexArrayBindingDivisor                     = nullptr;
    PFNGLVERTEXARRAYELEMENTBUFFERPROC vertexArrayElementBuffer                       = nullptr;
    PFNGLVERTEXARRAYVERTEXBUFFERPROC vertexArrayVertexBuffer                         = nullptr;
    PFNGLVERTEXARRAYVERTEXBUFFERSPROC vertexArrayVertexBuffers                       = nullptr;

    // ES 3.2
    PFNGLBLENDBARRIERPROC blendBarrier                 = nullptr;
    PFNGLPRIMITIVEBOUNDINGBOXPROC primitiveBoundingBox = nullptr;

    // GL_EXT_debug_marker
    PFNGLINSERTEVENTMARKEREXTPROC insertEventMarkerEXT = nullptr;
    PFNGLPOPGROUPMARKEREXTPROC popGroupMarkerEXT       = nullptr;
    PFNGLPUSHGROUPMARKEREXTPROC pushGroupMarkerEXT     = nullptr;

    // GL_EXT_discard_framebuffer
    PFNGLDISCARDFRAMEBUFFEREXTPROC discardFramebufferEXT = nullptr;

    // GL_NV_internalformat_sample_query
    PFNGLGETINTERNALFORMATSAMPLEIVNVPROC getInternalformatSampleivNV = nullptr;

    // GL_OES_EGL_image
    PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC eGLImageTargetRenderbufferStorageOES = nullptr;
    PFNGLEGLIMAGETARGETTEXTURE2DOESPROC eGLImageTargetTexture2DOES                     = nullptr;

    // NV_path_rendering (originally written against 3.2 compatibility profile)
    PFNGLCOVERFILLPATHINSTANCEDNVPROC coverFillPathInstancedNV                           = nullptr;
    PFNGLCOVERFILLPATHNVPROC coverFillPathNV                                             = nullptr;
    PFNGLCOVERSTROKEPATHINSTANCEDNVPROC coverStrokePathInstancedNV                       = nullptr;
    PFNGLCOVERSTROKEPATHNVPROC coverStrokePathNV                                         = nullptr;
    PFNGLDELETEPATHSNVPROC deletePathsNV                                                 = nullptr;
    PFNGLGENPATHSNVPROC genPathsNV                                                       = nullptr;
    PFNGLGETPATHPARAMETERFVNVPROC getPathParameterfvNV                                   = nullptr;
    PFNGLGETPATHPARAMETERIVNVPROC getPathParameterivNV                                   = nullptr;
    PFNGLISPATHNVPROC isPathNV                                                           = nullptr;
    PFNGLMATRIXLOADFEXTPROC matrixLoadfEXT                                               = nullptr;
    PFNGLPATHCOMMANDSNVPROC pathCommandsNV                                               = nullptr;
    PFNGLPATHPARAMETERFNVPROC pathParameterfNV                                           = nullptr;
    PFNGLPATHPARAMETERINVPROC pathParameteriNV                                           = nullptr;
    PFNGLPATHSTENCILFUNCNVPROC pathStencilFuncNV                                         = nullptr;
    PFNGLPROGRAMPATHFRAGMENTINPUTGENNVPROC programPathFragmentInputGenNV                 = nullptr;
    PFNGLSTENCILFILLPATHINSTANCEDNVPROC stencilFillPathInstancedNV                       = nullptr;
    PFNGLSTENCILFILLPATHNVPROC stencilFillPathNV                                         = nullptr;
    PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC stencilStrokePathInstancedNV                   = nullptr;
    PFNGLSTENCILSTROKEPATHNVPROC stencilStrokePathNV                                     = nullptr;
    PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDNVPROC stencilThenCoverFillPathInstancedNV     = nullptr;
    PFNGLSTENCILTHENCOVERFILLPATHNVPROC stencilThenCoverFillPathNV                       = nullptr;
    PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDNVPROC stencilThenCoverStrokePathInstancedNV = nullptr;
    PFNGLSTENCILTHENCOVERSTROKEPATHNVPROC stencilThenCoverStrokePathNV                   = nullptr;

    virtual ~DispatchTableGL() = default;

  protected:
    virtual void *loadProcAddress(const std::string &function) const = 0;

    void initProcsDesktopGL(const gl::Version &version, const std::set<std::string> &extensions);
    void initProcsGLES(const gl::Version &version, const std::set<std::string> &extensions);
    void initProcsSharedExtensions(const std::set<std::string> &extensions);

#if defined(ANGLE_ENABLE_OPENGL_NULL)
    void initProcsDesktopGLNULL(const gl::Version &version,
                                const std::set<std::string> &extensions);
    void initProcsGLESNULL(const gl::Version &version, const std::set<std::string> &extensions);
    void initProcsSharedExtensionsNULL(const std::set<std::string> &extensions);
#endif  // defined(ANGLE_ENABLE_OPENGL_NULL)
};

}  // namespace rx

#endif  // LIBGLESV2_RENDERER_GL_DISPATCH_TABLE_GL_AUTOGEN_H_
