Edit

kc3-lang/angle/src/libANGLE/renderer/gl/DispatchTableGL_autogen.h

Branch :

  • Show log

    Commit

  • Author : Corentin Wallez
    Date : 2017-11-08 14:00:32
    Hash : f0e89be6
    Message : Use packed enums for the texture types and targets, part 1 In OpenGL there are two enum "sets" used by the API that are very similar: texture types (or bind point) and texture targets. They only differ in that texture types have GL_TEXTURE_CUBEMAP and target have GL_TEXTURE_CUBEMAP_[POSITIVE|NEGATIVE]_[X|Y|Z]. This is a problem because in ANGLE we use GLenum to pass around both types of data, making it difficult to know which of type and target a variable is. In addition these enums are placed somewhat randomly in the space of OpenGL enums, making it slow to have a mapping from texture types to some data. Such a mapping is in hot-code with gl::State::mTextures. This commit stack makes the texture types and target enums be translated to internal packed enums right at the OpenGL entry point and used throughout ANGLE to have type safety and performance gains. This is the first of two commit which does the refactor for all of the validation and stops inside gl::Context. This was the best place to split patches without having many conversions from packed enums to GL enums. BUG=angleproject:2169 Change-Id: Ib43da7e71c253bd9fe210fb0ec0de61bc286e6d3 Reviewed-on: https://chromium-review.googlesource.com/758835 Commit-Queue: Corentin Wallez <cwallez@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org>

  • src/libANGLE/renderer/gl/DispatchTableGL_autogen.h
  • // 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_