{ ============================================================================

       OpenGL 4.5 - Headertranslation
       Version 4.5

       Supported environments and targets :
        - (Linux) FreePascal (1.9.3 and up)

==============================================================================

       Copyright (C) DGL-OpenGL-Portteam
       All Rights Reserved

       Obtained through:
         - Delphi OpenGL Community(DGL)   - www.delphigl.com

       Converted and maintained by DGL's OpenGL-Portteam :
         - Bergmann89                     - http://www.bergmann89.de

==============================================================================

  You may retrieve the latest version of this file at the Delphi OpenGL
  Community home page, located at http://www.delphigl.com/

  The contents of this file are used with permission, subject to
  the Mozilla Public License Version 1.1 (the "License"); you may
  not use this file except in compliance with the License. You may
  obtain a copy of the License at
  http://www.mozilla.org/MPL/MPL-1.1.html

  Software distributed under the License is distributed on an
  "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  implied. See the License for the specific language governing
  rights and limitations under the License.

============================================================================== }

unit dglOpenGLES;

interface

{$IFDEF FPC}
  {$MODE Delphi}
{$ENDIF}

// detecting Linux
{$IFDEF linux}          // Linux
  {$DEFINE DGL_LINUX}
{$ENDIF}

//check if system is supported and set system dependent constants
uses
  sysutils
  {$IFDEF DGL_LINUX}
  , dl
  {$ENDIF}
  ;

{$IFDEF DGL_LINUX}
const
  LIBNAME_OPENGLES = 'libGLESv2.so';
  LIBNAME_EGL      = 'libEGL.so';

{$ELSE}
  {$ERROR 'unknown/unsupported system'}

{$ENDIF}

{ ================================================== OpenGL ES ======================================================= }
type
  { Types }
  GLbyte      = Byte;
  GLclampf    = Single;
  GLfixed     = Integer;
  GLclampx    = Integer;
  GLshort     = ShortInt;
  GLubyte     = Byte;
  GLushort    = Word;
  GLvoid      = Pointer;
  GLint64     = Int64;
  GLuint64    = UInt64;
  GLenum      = Cardinal;
  GLuint      = Cardinal;
  GLchar      = AnsiChar;
  GLbitfield  = Cardinal;
  GLint       = Integer;
  GLintptr    = GLint;
  GLboolean   = ByteBool;
  GLsizei     = Integer;
  GLsizeiptr  = GLsizei;
  GLfloat     = Single;
  GLdouble    = Double;

  { Pointers }
  PGLbyte     = ^GLbyte;
  PGLclampf   = ^GLclampf;
  PGLfixed    = ^GLfixed;
  PGLshort    = ^GLshort;
  PGLubyte    = ^GLubyte;
  PGLushort   = ^GLushort;
  PGLvoid     = Pointer;
  PPGLvoid    = ^PGLvoid;
  PGLint64    = ^GLint64;
  PGLuint64   = ^GLuint64;
  PGLenum     = ^GLenum;
  PGLuint     = ^GLuint;
  PGLchar     = ^GLchar;
  PPGLchar    = ^PGLChar;
  PGLbitfield = ^GLbitfield;
  PGLint      = ^GLint;
  PGLboolean  = ^GLboolean;
  PGLsizei    = ^GLsizei;
  PGLfloat    = ^GLfloat;
  PGLdouble   = ^GLdouble;

  { Special }
  GLsync = Pointer;

  { Cutsom }
  TGLvectorub2 = array[0..1] of GLubyte;
  TGLvectorub3 = array[0..2] of GLubyte;
  TGLvectorub4 = array[0..3] of GLubyte;

  TGLvectori2 = array[0..1] of GLint;
  TGLvectori3 = array[0..2] of GLint;
  TGLvectori4 = array[0..3] of GLint;

  TGLvectorui2 = array[0..1] of GLuint;
  TGLvectorui3 = array[0..2] of GLuint;
  TGLvectorui4 = array[0..3] of GLuint;

  TGLvectorf2 = array[0..1] of GLfloat;
  TGLvectorf3 = array[0..2] of GLfloat;
  TGLvectorf4 = array[0..3] of GLfloat;

  TGLvectord2 = array[0..1] of GLdouble;
  TGLvectord3 = array[0..2] of GLdouble;
  TGLvectord4 = array[0..3] of GLdouble;

  TGLvectorp2 = array[0..1] of PGLvoid;
  TGLvectorp3 = array[0..2] of PGLvoid;
  TGLvectorp4 = array[0..3] of PGLvoid;

const
{ ============================================== OpenGL ES 1.0 ======================================================= }
{ ClearBufferMask }
  GL_DEPTH_BUFFER_BIT                               = $00000100;
  GL_STENCIL_BUFFER_BIT                             = $00000400;
  GL_COLOR_BUFFER_BIT                               = $00004000;

{ Boolean }
  GL_FALSE                                          = 0;
  GL_TRUE                                           = 1;

{ BeginMode }
  GL_POINTS                                         = $0000;
  GL_LINES                                          = $0001;
  GL_LINE_LOOP                                      = $0002;
  GL_LINE_STRIP                                     = $0003;
  GL_TRIANGLES                                      = $0004;
  GL_TRIANGLE_STRIP                                 = $0005;
  GL_TRIANGLE_FAN                                   = $0006;

{ AlphaFunction }
  GL_NEVER                                          = $0200;
  GL_LESS                                           = $0201;
  GL_EQUAL                                          = $0202;
  GL_LEQUAL                                         = $0203;
  GL_GREATER                                        = $0204;
  GL_NOTEQUAL                                       = $0205;
  GL_GEQUAL                                         = $0206;
  GL_ALWAYS                                         = $0207;

{ BlendingFactorDest }
  GL_ZERO                                           = 0;
  GL_ONE                                            = 1;
  GL_SRC_COLOR                                      = $0300;
  GL_ONE_MINUS_SRC_COLOR                            = $0301;
  GL_SRC_ALPHA                                      = $0302;
  GL_ONE_MINUS_SRC_ALPHA                            = $0303;
  GL_DST_ALPHA                                      = $0304;
  GL_ONE_MINUS_DST_ALPHA                            = $0305;

{ BlendingFactorSrc }
{ GL_ZERO }
{ GL_ONE }
  GL_DST_COLOR                                      = $0306;
  GL_ONE_MINUS_DST_COLOR                            = $0307;
  GL_SRC_ALPHA_SATURATE                             = $0308;
{ GL_SRC_ALPHA }
{ GL_ONE_MINUS_SRC_ALPHA }
{ GL_DST_ALPHA }
{ GL_ONE_MINUS_DST_ALPHA }

{ ClipPlaneName }
  GL_CLIP_PLANE0                                    = $3000;
  GL_CLIP_PLANE1                                    = $3001;
  GL_CLIP_PLANE2                                    = $3002;
  GL_CLIP_PLANE3                                    = $3003;
  GL_CLIP_PLANE4                                    = $3004;
  GL_CLIP_PLANE5                                    = $3005;

{ ColorMaterialFace }
{ GL_FRONT_AND_BACK }

{ ColorMaterialParameter }
{ GL_AMBIENT_AND_DIFFUSE }

{ ColorPointerType }
{ GL_UNSIGNED_BYTE }
{ GL_FLOAT }
{ GL_FIXED }

{ CullFaceMode }
  GL_FRONT                                          = $0404;
  GL_BACK                                           = $0405;
  GL_FRONT_AND_BACK                                 = $0408;

{ DepthFunction }
{ GL_NEVER }
{ GL_LESS }
{ GL_EQUAL }
{ GL_LEQUAL }
{ GL_GREATER }
{ GL_NOTEQUAL }
{ GL_GEQUAL }
{ GL_ALWAYS }

{ EnableCap }
  GL_FOG                                            = $0B60;
  GL_LIGHTING                                       = $0B50;
  GL_TEXTURE_2D                                     = $0DE1;
  GL_CULL_FACE                                      = $0B44;
  GL_ALPHA_TEST                                     = $0BC0;
  GL_BLEND                                          = $0BE2;
  GL_COLOR_LOGIC_OP                                 = $0BF2;
  GL_DITHER                                         = $0BD0;
  GL_STENCIL_TEST                                   = $0B90;
  GL_DEPTH_TEST                                     = $0B71;
{ GL_LIGHT0 }
{ GL_LIGHT1 }
{ GL_LIGHT2 }
{ GL_LIGHT3 }
{ GL_LIGHT4 }
{ GL_LIGHT5 }
{ GL_LIGHT6 }
{ GL_LIGHT7 }
  GL_POINT_SMOOTH                                   = $0B10;
  GL_LINE_SMOOTH                                    = $0B20;
  GL_SCISSOR_TEST                                   = $0C11;
  GL_COLOR_MATERIAL                                 = $0B57;
  GL_NORMALIZE                                      = $0BA1;
  GL_RESCALE_NORMAL                                 = $803A;
  GL_POLYGON_OFFSET_FILL                            = $8037;
  GL_VERTEX_ARRAY                                   = $8074;
  GL_NORMAL_ARRAY                                   = $8075;
  GL_COLOR_ARRAY                                    = $8076;
  GL_TEXTURE_COORD_ARRAY                            = $8078;
  GL_MULTISAMPLE                                    = $809D;
  GL_SAMPLE_ALPHA_TO_COVERAGE                       = $809E;
  GL_SAMPLE_ALPHA_TO_ONE                            = $809F;
  GL_SAMPLE_COVERAGE                                = $80A0;

{ ErrorCode }
  GL_NO_ERROR                                       = 0;
  GL_INVALID_ENUM                                   = $0500;
  GL_INVALID_VALUE                                  = $0501;
  GL_INVALID_OPERATION                              = $0502;
  GL_STACK_OVERFLOW                                 = $0503;
  GL_STACK_UNDERFLOW                                = $0504;
  GL_OUT_OF_MEMORY                                  = $0505;

{ FogMode }
{ GL_LINEAR }
  GL_EXP                                            = $0800;
  GL_EXP2                                           = $0801;

{ FogParameter }
  GL_FOG_DENSITY                                    = $0B62;
  GL_FOG_START                                      = $0B63;
  GL_FOG_END                                        = $0B64;
  GL_FOG_MODE                                       = $0B65;
  GL_FOG_COLOR                                      = $0B66;

{ FrontFaceDirection }
  GL_CW                                             = $0900;
  GL_CCW                                            = $0901;

{ GetPName }
  GL_CURRENT_COLOR                                  = $0B00;
  GL_CURRENT_NORMAL                                 = $0B02;
  GL_CURRENT_TEXTURE_COORDS                         = $0B03;
  GL_POINT_SIZE                                     = $0B11;
  GL_POINT_SIZE_MIN                                 = $8126;
  GL_POINT_SIZE_MAX                                 = $8127;
  GL_POINT_FADE_THRESHOLD_SIZE                      = $8128;
  GL_POINT_DISTANCE_ATTENUATION                     = $8129;
  GL_SMOOTH_POINT_SIZE_RANGE                        = $0B12;
  GL_LINE_WIDTH                                     = $0B21;
  GL_SMOOTH_LINE_WIDTH_RANGE                        = $0B22;
  GL_ALIASED_POINT_SIZE_RANGE                       = $846D;
  GL_ALIASED_LINE_WIDTH_RANGE                       = $846E;
  GL_CULL_FACE_MODE                                 = $0B45;
  GL_FRONT_FACE                                     = $0B46;
  GL_SHADE_MODEL                                    = $0B54;
  GL_DEPTH_RANGE                                    = $0B70;
  GL_DEPTH_WRITEMASK                                = $0B72;
  GL_DEPTH_CLEAR_VALUE                              = $0B73;
  GL_DEPTH_FUNC                                     = $0B74;
  GL_STENCIL_CLEAR_VALUE                            = $0B91;
  GL_STENCIL_FUNC                                   = $0B92;
  GL_STENCIL_VALUE_MASK                             = $0B93;
  GL_STENCIL_FAIL                                   = $0B94;
  GL_STENCIL_PASS_DEPTH_FAIL                        = $0B95;
  GL_STENCIL_PASS_DEPTH_PASS                        = $0B96;
  GL_STENCIL_REF                                    = $0B97;
  GL_STENCIL_WRITEMASK                              = $0B98;
  GL_MATRIX_MODE                                    = $0BA0;
  GL_VIEWPORT                                       = $0BA2;
  GL_MODELVIEW_STACK_DEPTH                          = $0BA3;
  GL_PROJECTION_STACK_DEPTH                         = $0BA4;
  GL_TEXTURE_STACK_DEPTH                            = $0BA5;
  GL_MODELVIEW_MATRIX                               = $0BA6;
  GL_PROJECTION_MATRIX                              = $0BA7;
  GL_TEXTURE_MATRIX                                 = $0BA8;
  GL_ALPHA_TEST_FUNC                                = $0BC1;
  GL_ALPHA_TEST_REF                                 = $0BC2;
  GL_BLEND_DST                                      = $0BE0;
  GL_BLEND_SRC                                      = $0BE1;
  GL_LOGIC_OP_MODE                                  = $0BF0;
  GL_SCISSOR_BOX                                    = $0C10;
  GL_COLOR_CLEAR_VALUE                              = $0C22;
  GL_COLOR_WRITEMASK                                = $0C23;
  GL_UNPACK_ALIGNMENT                               = $0CF5;
  GL_PACK_ALIGNMENT                                 = $0D05;
  GL_MAX_LIGHTS                                     = $0D31;
  GL_MAX_CLIP_PLANES                                = $0D32;
  GL_MAX_TEXTURE_SIZE                               = $0D33;
  GL_MAX_MODELVIEW_STACK_DEPTH                      = $0D36;
  GL_MAX_PROJECTION_STACK_DEPTH                     = $0D38;
  GL_MAX_TEXTURE_STACK_DEPTH                        = $0D39;
  GL_MAX_VIEWPORT_DIMS                              = $0D3A;
  GL_MAX_TEXTURE_UNITS                              = $84E2;
  GL_SUBPIXEL_BITS                                  = $0D50;
  GL_RED_BITS                                       = $0D52;
  GL_GREEN_BITS                                     = $0D53;
  GL_BLUE_BITS                                      = $0D54;
  GL_ALPHA_BITS                                     = $0D55;
  GL_DEPTH_BITS                                     = $0D56;
  GL_STENCIL_BITS                                   = $0D57;
  GL_POLYGON_OFFSET_UNITS                           = $2A00;
  GL_POLYGON_OFFSET_FACTOR                          = $8038;
  GL_TEXTURE_BINDING_2D                             = $8069;
  GL_VERTEX_ARRAY_SIZE                              = $807A;
  GL_VERTEX_ARRAY_TYPE                              = $807B;
  GL_VERTEX_ARRAY_STRIDE                            = $807C;
  GL_NORMAL_ARRAY_TYPE                              = $807E;
  GL_NORMAL_ARRAY_STRIDE                            = $807F;
  GL_COLOR_ARRAY_SIZE                               = $8081;
  GL_COLOR_ARRAY_TYPE                               = $8082;
  GL_COLOR_ARRAY_STRIDE                             = $8083;
  GL_TEXTURE_COORD_ARRAY_SIZE                       = $8088;
  GL_TEXTURE_COORD_ARRAY_TYPE                       = $8089;
  GL_TEXTURE_COORD_ARRAY_STRIDE                     = $808A;
  GL_VERTEX_ARRAY_POINTER                           = $808E;
  GL_NORMAL_ARRAY_POINTER                           = $808F;
  GL_COLOR_ARRAY_POINTER                            = $8090;
  GL_TEXTURE_COORD_ARRAY_POINTER                    = $8092;
  GL_SAMPLE_BUFFERS                                 = $80A8;
  GL_SAMPLES                                        = $80A9;
  GL_SAMPLE_COVERAGE_VALUE                          = $80AA;
  GL_SAMPLE_COVERAGE_INVERT                         = $80AB;

{ GetTextureParameter }
{ GL_TEXTURE_MAG_FILTER }
{ GL_TEXTURE_MIN_FILTER }
{ GL_TEXTURE_WRAP_S }
{ GL_TEXTURE_WRAP_T }

  GL_NUM_COMPRESSED_TEXTURE_FORMATS                 = $86A2;
  GL_COMPRESSED_TEXTURE_FORMATS                     = $86A3;

{ HintMode }
  GL_DONT_CARE                                      = $1100;
  GL_FASTEST                                        = $1101;
  GL_NICEST                                         = $1102;

{ HintTarget }
  GL_PERSPECTIVE_CORRECTION_HINT                    = $0C50;
  GL_POINT_SMOOTH_HINT                              = $0C51;
  GL_LINE_SMOOTH_HINT                               = $0C52;
  GL_FOG_HINT                                       = $0C54;
  GL_GENERATE_MIPMAP_HINT                           = $8192;

{ LightModelParameter }
  GL_LIGHT_MODEL_AMBIENT                            = $0B53;
  GL_LIGHT_MODEL_TWO_SIDE                           = $0B52;

{ LightParameter }
  GL_AMBIENT                                        = $1200;
  GL_DIFFUSE                                        = $1201;
  GL_SPECULAR                                       = $1202;
  GL_POSITION                                       = $1203;
  GL_SPOT_DIRECTION                                 = $1204;
  GL_SPOT_EXPONENT                                  = $1205;
  GL_SPOT_CUTOFF                                    = $1206;
  GL_CONSTANT_ATTENUATION                           = $1207;
  GL_LINEAR_ATTENUATION                             = $1208;
  GL_QUADRATIC_ATTENUATION                          = $1209;

{ DataType }
  GL_BYTE                                           = $1400;
  GL_UNSIGNED_BYTE                                  = $1401;
  GL_SHORT                                          = $1402;
  GL_UNSIGNED_SHORT                                 = $1403;
  GL_FLOAT                                          = $1406;
  GL_FIXED                                          = $140C;

{ LogicOp }
  GL_CLEAR                                          = $1500;
  GL_AND                                            = $1501;
  GL_AND_REVERSE                                    = $1502;
  GL_COPY                                           = $1503;
  GL_AND_INVERTED                                   = $1504;
  GL_NOOP                                           = $1505;
  GL_XOR                                            = $1506;
  GL_OR                                             = $1507;
  GL_NOR                                            = $1508;
  GL_EQUIV                                          = $1509;
  GL_INVERT                                         = $150A;
  GL_OR_REVERSE                                     = $150B;
  GL_COPY_INVERTED                                  = $150C;
  GL_OR_INVERTED                                    = $150D;
  GL_NAND                                           = $150E;
  GL_SET                                            = $150F;

{ MaterialFace }
{ GL_FRONT_AND_BACK }

{ MaterialParameter }
  GL_EMISSION                                       = $1600;
  GL_SHININESS                                      = $1601;
  GL_AMBIENT_AND_DIFFUSE                            = $1602;
{ GL_AMBIENT }
{ GL_DIFFUSE }
{ GL_SPECULAR }

{ MatrixMode }
  GL_MODELVIEW                                      = $1700;
  GL_PROJECTION                                     = $1701;
  GL_TEXTURE                                        = $1702;

{ NormalPointerType }
{ GL_BYTE }
{ GL_SHORT }
{ GL_FLOAT }
{ GL_FIXED }

{ PixelFormat }
  GL_ALPHA                                          = $1906;
  GL_RGB                                            = $1907;
  GL_RGBA                                           = $1908;
  GL_LUMINANCE                                      = $1909;
  GL_LUMINANCE_ALPHA                                = $190A;

{ PixelType }
{ GL_UNSIGNED_BYTE }
  GL_UNSIGNED_SHORT_4_4_4_4                         = $8033;
  GL_UNSIGNED_SHORT_5_5_5_1                         = $8034;
  GL_UNSIGNED_SHORT_5_6_5                           = $8363;

{ ShadingModel }
  GL_FLAT                                           = $1D00;
  GL_SMOOTH                                         = $1D01;

{ StencilFunction }
{ GL_NEVER }
{ GL_LESS }
{ GL_EQUAL }
{ GL_LEQUAL }
{ GL_GREATER }
{ GL_NOTEQUAL }
{ GL_GEQUAL }
{ GL_ALWAYS }

{ StencilOp }
{ GL_ZERO }
  GL_KEEP                                           = $1E00;
  GL_REPLACE                                        = $1E01;
  GL_INCR                                           = $1E02;
  GL_DECR                                           = $1E03;
{ GL_INVERT }

{ StringName }
  GL_VENDOR                                         = $1F00;
  GL_RENDERER                                       = $1F01;
  GL_VERSION                                        = $1F02;
  GL_EXTENSIONS                                     = $1F03;

{ TexCoordPointerType }
{ GL_SHORT }
{ GL_FLOAT }
{ GL_FIXED }
{ GL_BYTE }

{ TextureEnvMode }
  GL_MODULATE                                       = $2100;
  GL_DECAL                                          = $2101;
{ GL_BLEND }
  GL_ADD                                            = $0104;
{ GL_REPLACE }

{ TextureEnvParameter }
  GL_TEXTURE_ENV_MODE                               = $2200;
  GL_TEXTURE_ENV_COLOR                              = $2201;

{ TextureEnvTarget }
  GL_TEXTURE_ENV                                    = $2300;

{ TextureMagFilter }
  GL_NEAREST                                        = $2600;
  GL_LINEAR                                         = $2601;

{ TextureMinFilter }
{ GL_NEAREST }
{ GL_LINEAR }
  GL_NEAREST_MIPMAP_NEAREST                         = $2700;
  GL_LINEAR_MIPMAP_NEAREST                          = $2701;
  GL_NEAREST_MIPMAP_LINEAR                          = $2702;
  GL_LINEAR_MIPMAP_LINEAR                           = $2703;

{ TextureParameterName }
  GL_TEXTURE_MAG_FILTER                             = $2800;
  GL_TEXTURE_MIN_FILTER                             = $2801;
  GL_TEXTURE_WRAP_S                                 = $2802;
  GL_TEXTURE_WRAP_T                                 = $2803;
  GL_GENERATE_MIPMAP                                = $8191;

{ TextureTarget }
{ GL_TEXTURE_2D }

{ TextureUnit }
  GL_TEXTURE0                                       = $84C0;
  GL_TEXTURE1                                       = $84C1;
  GL_TEXTURE2                                       = $84C2;
  GL_TEXTURE3                                       = $84C3;
  GL_TEXTURE4                                       = $84C4;
  GL_TEXTURE5                                       = $84C5;
  GL_TEXTURE6                                       = $84C6;
  GL_TEXTURE7                                       = $84C7;
  GL_TEXTURE8                                       = $84C8;
  GL_TEXTURE9                                       = $84C9;
  GL_TEXTURE10                                      = $84CA;
  GL_TEXTURE11                                      = $84CB;
  GL_TEXTURE12                                      = $84CC;
  GL_TEXTURE13                                      = $84CD;
  GL_TEXTURE14                                      = $84CE;
  GL_TEXTURE15                                      = $84CF;
  GL_TEXTURE16                                      = $84D0;
  GL_TEXTURE17                                      = $84D1;
  GL_TEXTURE18                                      = $84D2;
  GL_TEXTURE19                                      = $84D3;
  GL_TEXTURE20                                      = $84D4;
  GL_TEXTURE21                                      = $84D5;
  GL_TEXTURE22                                      = $84D6;
  GL_TEXTURE23                                      = $84D7;
  GL_TEXTURE24                                      = $84D8;
  GL_TEXTURE25                                      = $84D9;
  GL_TEXTURE26                                      = $84DA;
  GL_TEXTURE27                                      = $84DB;
  GL_TEXTURE28                                      = $84DC;
  GL_TEXTURE29                                      = $84DD;
  GL_TEXTURE30                                      = $84DE;
  GL_TEXTURE31                                      = $84DF;
  GL_ACTIVE_TEXTURE                                 = $84E0;
  GL_CLIENT_ACTIVE_TEXTURE                          = $84E1;

{ TextureWrapMode }
  GL_REPEAT                                         = $2901;
  GL_CLAMP_TO_EDGE                                  = $812F;

{ VertexPointerType }
{ GL_SHORT }
{ GL_FLOAT }
{ GL_FIXED }
{ GL_BYTE }

{ LightName }
  GL_LIGHT0                                         = $4000;
  GL_LIGHT1                                         = $4001;
  GL_LIGHT2                                         = $4002;
  GL_LIGHT3                                         = $4003;
  GL_LIGHT4                                         = $4004;
  GL_LIGHT5                                         = $4005;
  GL_LIGHT6                                         = $4006;
  GL_LIGHT7                                         = $4007;

{ Buffer Objects }
  GL_ARRAY_BUFFER                                   = $8892;
  GL_ELEMENT_ARRAY_BUFFER                           = $8893;

  GL_ARRAY_BUFFER_BINDING                           = $8894;
  GL_ELEMENT_ARRAY_BUFFER_BINDING                   = $8895;
  GL_VERTEX_ARRAY_BUFFER_BINDING                    = $8896;
  GL_NORMAL_ARRAY_BUFFER_BINDING                    = $8897;
  GL_COLOR_ARRAY_BUFFER_BINDING                     = $8898;
  GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING             = $889A;

  GL_STATIC_DRAW                                    = $88E4;
  GL_DYNAMIC_DRAW                                   = $88E8;

  GL_BUFFER_SIZE                                    = $8764;
  GL_BUFFER_USAGE                                   = $8765;

{ Texture combine + dot3 }
  GL_SUBTRACT                                       = $84E7;
  GL_COMBINE                                        = $8570;
  GL_COMBINE_RGB                                    = $8571;
  GL_COMBINE_ALPHA                                  = $8572;
  GL_RGB_SCALE                                      = $8573;
  GL_ADD_SIGNED                                     = $8574;
  GL_INTERPOLATE                                    = $8575;
  GL_CONSTANT                                       = $8576;
  GL_PRIMARY_COLOR                                  = $8577;
  GL_PREVIOUS                                       = $8578;
  GL_OPERAND0_RGB                                   = $8590;
  GL_OPERAND1_RGB                                   = $8591;
  GL_OPERAND2_RGB                                   = $8592;
  GL_OPERAND0_ALPHA                                 = $8598;
  GL_OPERAND1_ALPHA                                 = $8599;
  GL_OPERAND2_ALPHA                                 = $859A;

  GL_ALPHA_SCALE                                    = $0D1C;

  GL_SRC0_RGB                                       = $8580;
  GL_SRC1_RGB                                       = $8581;
  GL_SRC2_RGB                                       = $8582;
  GL_SRC0_ALPHA                                     = $8588;
  GL_SRC1_ALPHA                                     = $8589;
  GL_SRC2_ALPHA                                     = $858A;

  GL_DOT3_RGB                                       = $86AE;
  GL_DOT3_RGBA                                      = $86AF;

{ ============================================== OpenGL ES 2.0 ======================================================= }
{ BlendEquationSeparate }
  GL_FUNC_ADD                                       = $8006;
  GL_BLEND_EQUATION                                 = $8009;
  GL_BLEND_EQUATION_RGB                             = $8009;    // same as BLEND_EQUATION
  GL_BLEND_EQUATION_ALPHA                           = $883D;

{ BlendSubtract }
  GL_FUNC_SUBTRACT                                  = $800A;
  GL_FUNC_REVERSE_SUBTRACT                          = $800B;

{ Separate Blend Functions }
  GL_BLEND_DST_RGB                                  = $80C8;
  GL_BLEND_SRC_RGB                                  = $80C9;
  GL_BLEND_DST_ALPHA                                = $80CA;
  GL_BLEND_SRC_ALPHA                                = $80CB;
  GL_CONSTANT_COLOR                                 = $8001;
  GL_ONE_MINUS_CONSTANT_COLOR                       = $8002;
  GL_CONSTANT_ALPHA                                 = $8003;
  GL_ONE_MINUS_CONSTANT_ALPHA                       = $8004;
  GL_BLEND_COLOR                                    = $8005;

{ Buffer Objects }
  GL_STREAM_DRAW                                    = $88E0;
  GL_CURRENT_VERTEX_ATTRIB                          = $8626;

{ GetPName }
  GL_STENCIL_BACK_FUNC                              = $8800;
  GL_STENCIL_BACK_FAIL                              = $8801;
  GL_STENCIL_BACK_PASS_DEPTH_FAIL                   = $8802;
  GL_STENCIL_BACK_PASS_DEPTH_PASS                   = $8803;
  GL_STENCIL_BACK_REF                               = $8CA3;
  GL_STENCIL_BACK_VALUE_MASK                        = $8CA4;
  GL_STENCIL_BACK_WRITEMASK                         = $8CA5;

{ DataType }
  GL_INT                                            = $1404;
  GL_UNSIGNED_INT                                   = $1405;

{ PixelFormat }
  GL_DEPTH_COMPONENT                                = $1902;

{ Shaders }
  GL_FRAGMENT_SHADER                                = $8B30;
  GL_VERTEX_SHADER                                  = $8B31;
  GL_MAX_VERTEX_ATTRIBS                             = $8869;
  GL_MAX_VERTEX_UNIFORM_VECTORS                     = $8DFB;
  GL_MAX_VARYING_VECTORS                            = $8DFC;
  GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS               = $8B4D;
  GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS                 = $8B4C;
  GL_MAX_TEXTURE_IMAGE_UNITS                        = $8872;
  GL_MAX_FRAGMENT_UNIFORM_VECTORS                   = $8DFD;
  GL_SHADER_TYPE                                    = $8B4F;
  GL_DELETE_STATUS                                  = $8B80;
  GL_LINK_STATUS                                    = $8B82;
  GL_VALIDATE_STATUS                                = $8B83;
  GL_ATTACHED_SHADERS                               = $8B85;
  GL_ACTIVE_UNIFORMS                                = $8B86;
  GL_ACTIVE_UNIFORM_MAX_LENGTH                      = $8B87;
  GL_ACTIVE_ATTRIBUTES                              = $8B89;
  GL_ACTIVE_ATTRIBUTE_MAX_LENGTH                    = $8B8A;
  GL_SHADING_LANGUAGE_VERSION                       = $8B8C;
  GL_CURRENT_PROGRAM                                = $8B8D;

{ StencilOp }
  GL_INCR_WRAP                                      = $8507;
  GL_DECR_WRAP                                      = $8508;

{ TextureTarget }
  GL_TEXTURE_CUBE_MAP                               = $8513;
  GL_TEXTURE_BINDING_CUBE_MAP                       = $8514;
  GL_TEXTURE_CUBE_MAP_POSITIVE_X                    = $8515;
  GL_TEXTURE_CUBE_MAP_NEGATIVE_X                    = $8516;
  GL_TEXTURE_CUBE_MAP_POSITIVE_Y                    = $8517;
  GL_TEXTURE_CUBE_MAP_NEGATIVE_Y                    = $8518;
  GL_TEXTURE_CUBE_MAP_POSITIVE_Z                    = $8519;
  GL_TEXTURE_CUBE_MAP_NEGATIVE_Z                    = $851A;
  GL_MAX_CUBE_MAP_TEXTURE_SIZE                      = $851C;

{ TextureWrapMode }
  GL_MIRRORED_REPEAT                                = $8370;

{ Uniform Types }
  GL_FLOAT_VEC2                                     = $8B50;
  GL_FLOAT_VEC3                                     = $8B51;
  GL_FLOAT_VEC4                                     = $8B52;
  GL_INT_VEC2                                       = $8B53;
  GL_INT_VEC3                                       = $8B54;
  GL_INT_VEC4                                       = $8B55;
  GL_BOOL                                           = $8B56;
  GL_BOOL_VEC2                                      = $8B57;
  GL_BOOL_VEC3                                      = $8B58;
  GL_BOOL_VEC4                                      = $8B59;
  GL_FLOAT_MAT2                                     = $8B5A;
  GL_FLOAT_MAT3                                     = $8B5B;
  GL_FLOAT_MAT4                                     = $8B5C;
  GL_SAMPLER_2D                                     = $8B5E;
  GL_SAMPLER_CUBE                                   = $8B60;

{ Vertex Arrays }
  GL_VERTEX_ATTRIB_ARRAY_ENABLED                    = $8622;
  GL_VERTEX_ATTRIB_ARRAY_SIZE                       = $8623;
  GL_VERTEX_ATTRIB_ARRAY_STRIDE                     = $8624;
  GL_VERTEX_ATTRIB_ARRAY_TYPE                       = $8625;
  GL_VERTEX_ATTRIB_ARRAY_NORMALIZED                 = $886A;
  GL_VERTEX_ATTRIB_ARRAY_POINTER                    = $8645;
  GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING             = $889F;

{ Read Format }
  GL_IMPLEMENTATION_COLOR_READ_TYPE                 = $8B9A;
  GL_IMPLEMENTATION_COLOR_READ_FORMAT               = $8B9B;

{ Shader Source }
  GL_COMPILE_STATUS                                 = $8B81;
  GL_INFO_LOG_LENGTH                                = $8B84;
  GL_SHADER_SOURCE_LENGTH                           = $8B88;
  GL_SHADER_COMPILER                                = $8DFA;

{ Shader Binary }
  GL_SHADER_BINARY_FORMATS                          = $8DF8;
  GL_NUM_SHADER_BINARY_FORMATS                      = $8DF9;

{ Shader Precision-Specified Types }
  GL_LOW_FLOAT                                      = $8DF0;
  GL_MEDIUM_FLOAT                                   = $8DF1;
  GL_HIGH_FLOAT                                     = $8DF2;
  GL_LOW_INT                                        = $8DF3;
  GL_MEDIUM_INT                                     = $8DF4;
  GL_HIGH_INT                                       = $8DF5;

{ Framebuffer Object. }
  GL_FRAMEBUFFER                                    = $8D40;
  GL_RENDERBUFFER                                   = $8D41;

  GL_RGBA4                                          = $8056;
  GL_RGB5_A1                                        = $8057;
  GL_RGB565                                         = $8D62;
  GL_DEPTH_COMPONENT16                              = $81A5;
  GL_STENCIL_INDEX                                  = $1901;
  GL_STENCIL_INDEX8                                 = $8D48;

  GL_RENDERBUFFER_WIDTH                             = $8D42;
  GL_RENDERBUFFER_HEIGHT                            = $8D43;
  GL_RENDERBUFFER_INTERNAL_FORMAT                   = $8D44;
  GL_RENDERBUFFER_RED_SIZE                          = $8D50;
  GL_RENDERBUFFER_GREEN_SIZE                        = $8D51;
  GL_RENDERBUFFER_BLUE_SIZE                         = $8D52;
  GL_RENDERBUFFER_ALPHA_SIZE                        = $8D53;
  GL_RENDERBUFFER_DEPTH_SIZE                        = $8D54;
  GL_RENDERBUFFER_STENCIL_SIZE                      = $8D55;

  GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE             = $8CD0;
  GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME             = $8CD1;
  GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL           = $8CD2;
  GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE   = $8CD3;

  GL_COLOR_ATTACHMENT0                              = $8CE0;
  GL_DEPTH_ATTACHMENT                               = $8D00;
  GL_STENCIL_ATTACHMENT                             = $8D20;

  GL_NONE                                           = 0;

  GL_FRAMEBUFFER_COMPLETE                           = $8CD5;
  GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT              = $8CD6;
  GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT      = $8CD7;
  GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS              = $8CD9;
  GL_FRAMEBUFFER_UNSUPPORTED                        = $8CDD;

  GL_FRAMEBUFFER_BINDING                            = $8CA6;
  GL_RENDERBUFFER_BINDING                           = $8CA7;
  GL_MAX_RENDERBUFFER_SIZE                          = $84E8;

  GL_INVALID_FRAMEBUFFER_OPERATION                  = $0506;

{ ============================================== OpenGL ES 3.0 ======================================================= }
  GL_READ_BUFFER                                    = $0C02;
  GL_UNPACK_ROW_LENGTH                              = $0CF2;
  GL_UNPACK_SKIP_ROWS                               = $0CF3;
  GL_UNPACK_SKIP_PIXELS                             = $0CF4;
  GL_PACK_ROW_LENGTH                                = $0D02;
  GL_PACK_SKIP_ROWS                                 = $0D03;
  GL_PACK_SKIP_PIXELS                               = $0D04;
  GL_COLOR                                          = $1800;
  GL_DEPTH                                          = $1801;
  GL_STENCIL                                        = $1802;
  GL_RED                                            = $1903;
  GL_RGB8                                           = $8051;
  GL_RGBA8                                          = $8058;
  GL_RGB10_A2                                       = $8059;
  GL_TEXTURE_BINDING_3D                             = $806A;
  GL_UNPACK_SKIP_IMAGES                             = $806D;
  GL_UNPACK_IMAGE_HEIGHT                            = $806E;
  GL_TEXTURE_3D                                     = $806F;
  GL_TEXTURE_WRAP_R                                 = $8072;
  GL_MAX_3D_TEXTURE_SIZE                            = $8073;
  GL_UNSIGNED_INT_2_10_10_10_REV                    = $8368;
  GL_MAX_ELEMENTS_VERTICES                          = $80E8;
  GL_MAX_ELEMENTS_INDICES                           = $80E9;
  GL_TEXTURE_MIN_LOD                                = $813A;
  GL_TEXTURE_MAX_LOD                                = $813B;
  GL_TEXTURE_BASE_LEVEL                             = $813C;
  GL_TEXTURE_MAX_LEVEL                              = $813D;
  GL_MIN                                            = $8007;
  GL_MAX                                            = $8008;
  GL_DEPTH_COMPONENT24                              = $81A6;
  GL_MAX_TEXTURE_LOD_BIAS                           = $84FD;
  GL_TEXTURE_COMPARE_MODE                           = $884C;
  GL_TEXTURE_COMPARE_FUNC                           = $884D;
  GL_CURRENT_QUERY                                  = $8865;
  GL_QUERY_RESULT                                   = $8866;
  GL_QUERY_RESULT_AVAILABLE                         = $8867;
  GL_BUFFER_MAPPED                                  = $88BC;
  GL_BUFFER_MAP_POINTER                             = $88BD;
  GL_STREAM_READ                                    = $88E1;
  GL_STREAM_COPY                                    = $88E2;
  GL_STATIC_READ                                    = $88E5;
  GL_STATIC_COPY                                    = $88E6;
  GL_DYNAMIC_READ                                   = $88E9;
  GL_DYNAMIC_COPY                                   = $88EA;
  GL_MAX_DRAW_BUFFERS                               = $8824;
  GL_DRAW_BUFFER0                                   = $8825;
  GL_DRAW_BUFFER1                                   = $8826;
  GL_DRAW_BUFFER2                                   = $8827;
  GL_DRAW_BUFFER3                                   = $8828;
  GL_DRAW_BUFFER4                                   = $8829;
  GL_DRAW_BUFFER5                                   = $882A;
  GL_DRAW_BUFFER6                                   = $882B;
  GL_DRAW_BUFFER7                                   = $882C;
  GL_DRAW_BUFFER8                                   = $882D;
  GL_DRAW_BUFFER9                                   = $882E;
  GL_DRAW_BUFFER10                                  = $882F;
  GL_DRAW_BUFFER11                                  = $8830;
  GL_DRAW_BUFFER12                                  = $8831;
  GL_DRAW_BUFFER13                                  = $8832;
  GL_DRAW_BUFFER14                                  = $8833;
  GL_DRAW_BUFFER15                                  = $8834;
  GL_MAX_FRAGMENT_UNIFORM_COMPONENTS                = $8B49;
  GL_MAX_VERTEX_UNIFORM_COMPONENTS                  = $8B4A;
  GL_SAMPLER_3D                                     = $8B5F;
  GL_SAMPLER_2D_SHADOW                              = $8B62;
  GL_FRAGMENT_SHADER_DERIVATIVE_HINT                = $8B8B;
  GL_PIXEL_PACK_BUFFER                              = $88EB;
  GL_PIXEL_UNPACK_BUFFER                            = $88EC;
  GL_PIXEL_PACK_BUFFER_BINDING                      = $88ED;
  GL_PIXEL_UNPACK_BUFFER_BINDING                    = $88EF;
  GL_FLOAT_MAT2x3                                   = $8B65;
  GL_FLOAT_MAT2x4                                   = $8B66;
  GL_FLOAT_MAT3x2                                   = $8B67;
  GL_FLOAT_MAT3x4                                   = $8B68;
  GL_FLOAT_MAT4x2                                   = $8B69;
  GL_FLOAT_MAT4x3                                   = $8B6A;
  GL_SRGB                                           = $8C40;
  GL_SRGB8                                          = $8C41;
  GL_SRGB8_ALPHA8                                   = $8C43;
  GL_COMPARE_REF_TO_TEXTURE                         = $884E;
  GL_MAJOR_VERSION                                  = $821B;
  GL_MINOR_VERSION                                  = $821C;
  GL_NUM_EXTENSIONS                                 = $821D;
  GL_RGBA32F                                        = $8814;
  GL_RGB32F                                         = $8815;
  GL_RGBA16F                                        = $881A;
  GL_RGB16F                                         = $881B;
  GL_VERTEX_ATTRIB_ARRAY_INTEGER                    = $88FD;
  GL_MAX_ARRAY_TEXTURE_LAYERS                       = $88FF;
  GL_MIN_PROGRAM_TEXEL_OFFSET                       = $8904;
  GL_MAX_PROGRAM_TEXEL_OFFSET                       = $8905;
  GL_MAX_VARYING_COMPONENTS                         = $8B4B;
  GL_TEXTURE_2D_ARRAY                               = $8C1A;
  GL_TEXTURE_BINDING_2D_ARRAY                       = $8C1D;
  GL_R11F_G11F_B10F                                 = $8C3A;
  GL_UNSIGNED_INT_10F_11F_11F_REV                   = $8C3B;
  GL_RGB9_E5                                        = $8C3D;
  GL_UNSIGNED_INT_5_9_9_9_REV                       = $8C3E;
  GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH          = $8C76;
  GL_TRANSFORM_FEEDBACK_BUFFER_MODE                 = $8C7F;
  GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS     = $8C80;
  GL_TRANSFORM_FEEDBACK_VARYINGS                    = $8C83;
  GL_TRANSFORM_FEEDBACK_BUFFER_START                = $8C84;
  GL_TRANSFORM_FEEDBACK_BUFFER_SIZE                 = $8C85;
  GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN          = $8C88;
  GL_RASTERIZER_DISCARD                             = $8C89;
  GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS  = $8C8A;
  GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS        = $8C8B;
  GL_INTERLEAVED_ATTRIBS                            = $8C8C;
  GL_SEPARATE_ATTRIBS                               = $8C8D;
  GL_TRANSFORM_FEEDBACK_BUFFER                      = $8C8E;
  GL_TRANSFORM_FEEDBACK_BUFFER_BINDING              = $8C8F;
  GL_RGBA32UI                                       = $8D70;
  GL_RGB32UI                                        = $8D71;
  GL_RGBA16UI                                       = $8D76;
  GL_RGB16UI                                        = $8D77;
  GL_RGBA8UI                                        = $8D7C;
  GL_RGB8UI                                         = $8D7D;
  GL_RGBA32I                                        = $8D82;
  GL_RGB32I                                         = $8D83;
  GL_RGBA16I                                        = $8D88;
  GL_RGB16I                                         = $8D89;
  GL_RGBA8I                                         = $8D8E;
  GL_RGB8I                                          = $8D8F;
  GL_RED_INTEGER                                    = $8D94;
  GL_RGB_INTEGER                                    = $8D98;
  GL_RGBA_INTEGER                                   = $8D99;
  GL_SAMPLER_2D_ARRAY                               = $8DC1;
  GL_SAMPLER_2D_ARRAY_SHADOW                        = $8DC4;
  GL_SAMPLER_CUBE_SHADOW                            = $8DC5;
  GL_UNSIGNED_INT_VEC2                              = $8DC6;
  GL_UNSIGNED_INT_VEC3                              = $8DC7;
  GL_UNSIGNED_INT_VEC4                              = $8DC8;
  GL_INT_SAMPLER_2D                                 = $8DCA;
  GL_INT_SAMPLER_3D                                 = $8DCB;
  GL_INT_SAMPLER_CUBE                               = $8DCC;
  GL_INT_SAMPLER_2D_ARRAY                           = $8DCF;
  GL_UNSIGNED_INT_SAMPLER_2D                        = $8DD2;
  GL_UNSIGNED_INT_SAMPLER_3D                        = $8DD3;
  GL_UNSIGNED_INT_SAMPLER_CUBE                      = $8DD4;
  GL_UNSIGNED_INT_SAMPLER_2D_ARRAY                  = $8DD7;
  GL_BUFFER_ACCESS_FLAGS                            = $911F;
  GL_BUFFER_MAP_LENGTH                              = $9120;
  GL_BUFFER_MAP_OFFSET                              = $9121;
  GL_DEPTH_COMPONENT32F                             = $8CAC;
  GL_DEPTH32F_STENCIL8                              = $8CAD;
  GL_FLOAT_32_UNSIGNED_INT_24_8_REV                 = $8DAD;
  GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING          = $8210;
  GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE          = $8211;
  GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE                = $8212;
  GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE              = $8213;
  GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE               = $8214;
  GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE              = $8215;
  GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE              = $8216;
  GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE            = $8217;
  GL_FRAMEBUFFER_DEFAULT                            = $8218;
  GL_FRAMEBUFFER_UNDEFINED                          = $8219;
  GL_DEPTH_STENCIL_ATTACHMENT                       = $821A;
  GL_DEPTH_STENCIL                                  = $84F9;
  GL_UNSIGNED_INT_24_8                              = $84FA;
  GL_DEPTH24_STENCIL8                               = $88F0;
  GL_UNSIGNED_NORMALIZED                            = $8C17;
  GL_DRAW_FRAMEBUFFER_BINDING                       = $8CA6;
  GL_READ_FRAMEBUFFER                               = $8CA8;
  GL_DRAW_FRAMEBUFFER                               = $8CA9;
  GL_READ_FRAMEBUFFER_BINDING                       = $8CAA;
  GL_RENDERBUFFER_SAMPLES                           = $8CAB;
  GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER           = $8CD4;
  GL_MAX_COLOR_ATTACHMENTS                          = $8CDF;
  GL_COLOR_ATTACHMENT1                              = $8CE1;
  GL_COLOR_ATTACHMENT2                              = $8CE2;
  GL_COLOR_ATTACHMENT3                              = $8CE3;
  GL_COLOR_ATTACHMENT4                              = $8CE4;
  GL_COLOR_ATTACHMENT5                              = $8CE5;
  GL_COLOR_ATTACHMENT6                              = $8CE6;
  GL_COLOR_ATTACHMENT7                              = $8CE7;
  GL_COLOR_ATTACHMENT8                              = $8CE8;
  GL_COLOR_ATTACHMENT9                              = $8CE9;
  GL_COLOR_ATTACHMENT10                             = $8CEA;
  GL_COLOR_ATTACHMENT11                             = $8CEB;
  GL_COLOR_ATTACHMENT12                             = $8CEC;
  GL_COLOR_ATTACHMENT13                             = $8CED;
  GL_COLOR_ATTACHMENT14                             = $8CEE;
  GL_COLOR_ATTACHMENT15                             = $8CEF;
  GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE             = $8D56;
  GL_MAX_SAMPLES                                    = $8D57;
  GL_HALF_FLOAT                                     = $140B;
  GL_MAP_READ_BIT                                   = $0001;
  GL_MAP_WRITE_BIT                                  = $0002;
  GL_MAP_INVALIDATE_RANGE_BIT                       = $0004;
  GL_MAP_INVALIDATE_BUFFER_BIT                      = $0008;
  GL_MAP_FLUSH_EXPLICIT_BIT                         = $0010;
  GL_MAP_UNSYNCHRONIZED_BIT                         = $0020;
  GL_RG                                             = $8227;
  GL_RG_INTEGER                                     = $8228;
  GL_R8                                             = $8229;
  GL_RG8                                            = $822B;
  GL_R16F                                           = $822D;
  GL_R32F                                           = $822E;
  GL_RG16F                                          = $822F;
  GL_RG32F                                          = $8230;
  GL_R8I                                            = $8231;
  GL_R8UI                                           = $8232;
  GL_R16I                                           = $8233;
  GL_R16UI                                          = $8234;
  GL_R32I                                           = $8235;
  GL_R32UI                                          = $8236;
  GL_RG8I                                           = $8237;
  GL_RG8UI                                          = $8238;
  GL_RG16I                                          = $8239;
  GL_RG16UI                                         = $823A;
  GL_RG32I                                          = $823B;
  GL_RG32UI                                         = $823C;
  GL_VERTEX_ARRAY_BINDING                           = $85B5;
  GL_R8_SNORM                                       = $8F94;
  GL_RG8_SNORM                                      = $8F95;
  GL_RGB8_SNORM                                     = $8F96;
  GL_RGBA8_SNORM                                    = $8F97;
  GL_SIGNED_NORMALIZED                              = $8F9C;
  GL_PRIMITIVE_RESTART_FIXED_INDEX                  = $8D69;
  GL_COPY_READ_BUFFER                               = $8F36;
  GL_COPY_WRITE_BUFFER                              = $8F37;
  GL_COPY_READ_BUFFER_BINDING                       = $8F36;
  GL_COPY_WRITE_BUFFER_BINDING                      = $8F37;
  GL_UNIFORM_BUFFER                                 = $8A11;
  GL_UNIFORM_BUFFER_BINDING                         = $8A28;
  GL_UNIFORM_BUFFER_START                           = $8A29;
  GL_UNIFORM_BUFFER_SIZE                            = $8A2A;
  GL_MAX_VERTEX_UNIFORM_BLOCKS                      = $8A2B;
  GL_MAX_FRAGMENT_UNIFORM_BLOCKS                    = $8A2D;
  GL_MAX_COMBINED_UNIFORM_BLOCKS                    = $8A2E;
  GL_MAX_UNIFORM_BUFFER_BINDINGS                    = $8A2F;
  GL_MAX_UNIFORM_BLOCK_SIZE                         = $8A30;
  GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS         = $8A31;
  GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS       = $8A33;
  GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT                = $8A34;
  GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH           = $8A35;
  GL_ACTIVE_UNIFORM_BLOCKS                          = $8A36;
  GL_UNIFORM_TYPE                                   = $8A37;
  GL_UNIFORM_SIZE                                   = $8A38;
  GL_UNIFORM_NAME_LENGTH                            = $8A39;
  GL_UNIFORM_BLOCK_INDEX                            = $8A3A;
  GL_UNIFORM_OFFSET                                 = $8A3B;
  GL_UNIFORM_ARRAY_STRIDE                           = $8A3C;
  GL_UNIFORM_MATRIX_STRIDE                          = $8A3D;
  GL_UNIFORM_IS_ROW_MAJOR                           = $8A3E;
  GL_UNIFORM_BLOCK_BINDING                          = $8A3F;
  GL_UNIFORM_BLOCK_DATA_SIZE                        = $8A40;
  GL_UNIFORM_BLOCK_NAME_LENGTH                      = $8A41;
  GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS                  = $8A42;
  GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES           = $8A43;
  GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER      = $8A44;
  GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER    = $8A46;
  GL_INVALID_INDEX                                  = $FFFFFFFF;
  GL_MAX_VERTEX_OUTPUT_COMPONENTS                   = $9122;
  GL_MAX_FRAGMENT_INPUT_COMPONENTS                  = $9125;
  GL_MAX_SERVER_WAIT_TIMEOUT                        = $9111;
  GL_OBJECT_TYPE                                    = $9112;
  GL_SYNC_CONDITION                                 = $9113;
  GL_SYNC_STATUS                                    = $9114;
  GL_SYNC_FLAGS                                     = $9115;
  GL_SYNC_FENCE                                     = $9116;
  GL_SYNC_GPU_COMMANDS_COMPLETE                     = $9117;
  GL_UNSIGNALED                                     = $9118;
  GL_SIGNALED                                       = $9119;
  GL_ALREADY_SIGNALED                               = $911A;
  GL_TIMEOUT_EXPIRED                                = $911B;
  GL_CONDITION_SATISFIED                            = $911C;
  GL_WAIT_FAILED                                    = $911D;
  GL_SYNC_FLUSH_COMMANDS_BIT                        = $00000001;
  GL_TIMEOUT_IGNORED                                = $FFFFFFFFFFFFFFFF;
  GL_VERTEX_ATTRIB_ARRAY_DIVISOR                    = $88FE;
  GL_ANY_SAMPLES_PASSED                             = $8C2F;
  GL_ANY_SAMPLES_PASSED_CONSERVATIVE                = $8D6A;
  GL_SAMPLER_BINDING                                = $8919;
  GL_RGB10_A2UI                                     = $906F;
  GL_TEXTURE_SWIZZLE_R                              = $8E42;
  GL_TEXTURE_SWIZZLE_G                              = $8E43;
  GL_TEXTURE_SWIZZLE_B                              = $8E44;
  GL_TEXTURE_SWIZZLE_A                              = $8E45;
  GL_GREEN                                          = $1904;
  GL_BLUE                                           = $1905;
  GL_INT_2_10_10_10_REV                             = $8D9F;
  GL_TRANSFORM_FEEDBACK                             = $8E22;
  GL_TRANSFORM_FEEDBACK_PAUSED                      = $8E23;
  GL_TRANSFORM_FEEDBACK_ACTIVE                      = $8E24;
  GL_TRANSFORM_FEEDBACK_BINDING                     = $8E25;
  GL_PROGRAM_BINARY_RETRIEVABLE_HINT                = $8257;
  GL_PROGRAM_BINARY_LENGTH                          = $8741;
  GL_NUM_PROGRAM_BINARY_FORMATS                     = $87FE;
  GL_PROGRAM_BINARY_FORMATS                         = $87FF;
  GL_COMPRESSED_R11_EAC                             = $9270;
  GL_COMPRESSED_SIGNED_R11_EAC                      = $9271;
  GL_COMPRESSED_RG11_EAC                            = $9272;
  GL_COMPRESSED_SIGNED_RG11_EAC                     = $9273;
  GL_COMPRESSED_RGB8_ETC2                           = $9274;
  GL_COMPRESSED_SRGB8_ETC2                          = $9275;
  GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2       = $9276;
  GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2      = $9277;
  GL_COMPRESSED_RGBA8_ETC2_EAC                      = $9278;
  GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC               = $9279;
  GL_TEXTURE_IMMUTABLE_FORMAT                       = $912F;
  GL_MAX_ELEMENT_INDEX                              = $8D6B;
  GL_NUM_SAMPLE_COUNTS                              = $9380;
  GL_TEXTURE_IMMUTABLE_LEVELS                       = $82DF;

{ ============================================== OpenGL ES 3.1 ======================================================= }
  GL_COMPUTE_SHADER                                 = $91B9;
  GL_MAX_COMPUTE_UNIFORM_BLOCKS                     = $91BB;
  GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS                = $91BC;
  GL_MAX_COMPUTE_IMAGE_UNIFORMS                     = $91BD;
  GL_MAX_COMPUTE_SHARED_MEMORY_SIZE                 = $8262;
  GL_MAX_COMPUTE_UNIFORM_COMPONENTS                 = $8263;
  GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS             = $8264;
  GL_MAX_COMPUTE_ATOMIC_COUNTERS                    = $8265;
  GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS        = $8266;
  GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS             = $90EB;
  GL_MAX_COMPUTE_WORK_GROUP_COUNT                   = $91BE;
  GL_MAX_COMPUTE_WORK_GROUP_SIZE                    = $91BF;
  GL_COMPUTE_WORK_GROUP_SIZE                        = $8267;
  GL_DISPATCH_INDIRECT_BUFFER                       = $90EE;
  GL_DISPATCH_INDIRECT_BUFFER_BINDING               = $90EF;
  GL_COMPUTE_SHADER_BIT                             = $00000020;
  GL_DRAW_INDIRECT_BUFFER                           = $8F3F;
  GL_DRAW_INDIRECT_BUFFER_BINDING                   = $8F43;
  GL_MAX_UNIFORM_LOCATIONS                          = $826E;
  GL_FRAMEBUFFER_DEFAULT_WIDTH                      = $9310;
  GL_FRAMEBUFFER_DEFAULT_HEIGHT                     = $9311;
  GL_FRAMEBUFFER_DEFAULT_SAMPLES                    = $9313;
  GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS     = $9314;
  GL_MAX_FRAMEBUFFER_WIDTH                          = $9315;
  GL_MAX_FRAMEBUFFER_HEIGHT                         = $9316;
  GL_MAX_FRAMEBUFFER_SAMPLES                        = $9318;
  GL_UNIFORM                                        = $92E1;
  GL_UNIFORM_BLOCK                                  = $92E2;
  GL_PROGRAM_INPUT                                  = $92E3;
  GL_PROGRAM_OUTPUT                                 = $92E4;
  GL_BUFFER_VARIABLE                                = $92E5;
  GL_SHADER_STORAGE_BLOCK                           = $92E6;
  GL_ATOMIC_COUNTER_BUFFER                          = $92C0;
  GL_TRANSFORM_FEEDBACK_VARYING                     = $92F4;
  GL_ACTIVE_RESOURCES                               = $92F5;
  GL_MAX_NAME_LENGTH                                = $92F6;
  GL_MAX_NUM_ACTIVE_VARIABLES                       = $92F7;
  GL_NAME_LENGTH                                    = $92F9;
  GL_TYPE                                           = $92FA;
  GL_ARRAY_SIZE                                     = $92FB;
  GL_OFFSET                                         = $92FC;
  GL_BLOCK_INDEX                                    = $92FD;
  GL_ARRAY_STRIDE                                   = $92FE;
  GL_MATRIX_STRIDE                                  = $92FF;
  GL_IS_ROW_MAJOR                                   = $9300;
  GL_ATOMIC_COUNTER_BUFFER_INDEX                    = $9301;
  GL_BUFFER_BINDING                                 = $9302;
  GL_BUFFER_DATA_SIZE                               = $9303;
  GL_NUM_ACTIVE_VARIABLES                           = $9304;
  GL_ACTIVE_VARIABLES                               = $9305;
  GL_REFERENCED_BY_VERTEX_SHADER                    = $9306;
  GL_REFERENCED_BY_FRAGMENT_SHADER                  = $930A;
  GL_REFERENCED_BY_COMPUTE_SHADER                   = $930B;
  GL_TOP_LEVEL_ARRAY_SIZE                           = $930C;
  GL_TOP_LEVEL_ARRAY_STRIDE                         = $930D;
  GL_LOCATION                                       = $930E;
  GL_VERTEX_SHADER_BIT                              = $00000001;
  GL_FRAGMENT_SHADER_BIT                            = $00000002;
  GL_ALL_SHADER_BITS                                = $FFFFFFFF;
  GL_PROGRAM_SEPARABLE                              = $8258;
  GL_ACTIVE_PROGRAM                                 = $8259;
  GL_PROGRAM_PIPELINE_BINDING                       = $825A;
  GL_ATOMIC_COUNTER_BUFFER_BINDING                  = $92C1;
  GL_ATOMIC_COUNTER_BUFFER_START                    = $92C2;
  GL_ATOMIC_COUNTER_BUFFER_SIZE                     = $92C3;
  GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS              = $92CC;
  GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS            = $92D0;
  GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS            = $92D1;
  GL_MAX_VERTEX_ATOMIC_COUNTERS                     = $92D2;
  GL_MAX_FRAGMENT_ATOMIC_COUNTERS                   = $92D6;
  GL_MAX_COMBINED_ATOMIC_COUNTERS                   = $92D7;
  GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE                 = $92D8;
  GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS             = $92DC;
  GL_ACTIVE_ATOMIC_COUNTER_BUFFERS                  = $92D9;
  GL_UNSIGNED_INT_ATOMIC_COUNTER                    = $92DB;
  GL_MAX_IMAGE_UNITS                                = $8F38;
  GL_MAX_VERTEX_IMAGE_UNIFORMS                      = $90CA;
  GL_MAX_FRAGMENT_IMAGE_UNIFORMS                    = $90CE;
  GL_MAX_COMBINED_IMAGE_UNIFORMS                    = $90CF;
  GL_IMAGE_BINDING_NAME                             = $8F3A;
  GL_IMAGE_BINDING_LEVEL                            = $8F3B;
  GL_IMAGE_BINDING_LAYERED                          = $8F3C;
  GL_IMAGE_BINDING_LAYER                            = $8F3D;
  GL_IMAGE_BINDING_ACCESS                           = $8F3E;
  GL_IMAGE_BINDING_FORMAT                           = $906E;
  GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT                = $00000001;
  GL_ELEMENT_ARRAY_BARRIER_BIT                      = $00000002;
  GL_UNIFORM_BARRIER_BIT                            = $00000004;
  GL_TEXTURE_FETCH_BARRIER_BIT                      = $00000008;
  GL_SHADER_IMAGE_ACCESS_BARRIER_BIT                = $00000020;
  GL_COMMAND_BARRIER_BIT                            = $00000040;
  GL_PIXEL_BUFFER_BARRIER_BIT                       = $00000080;
  GL_TEXTURE_UPDATE_BARRIER_BIT                     = $00000100;
  GL_BUFFER_UPDATE_BARRIER_BIT                      = $00000200;
  GL_FRAMEBUFFER_BARRIER_BIT                        = $00000400;
  GL_TRANSFORM_FEEDBACK_BARRIER_BIT                 = $00000800;
  GL_ATOMIC_COUNTER_BARRIER_BIT                     = $00001000;
  GL_ALL_BARRIER_BITS                               = $FFFFFFFF;
  GL_IMAGE_2D                                       = $904D;
  GL_IMAGE_3D                                       = $904E;
  GL_IMAGE_CUBE                                     = $9050;
  GL_IMAGE_2D_ARRAY                                 = $9053;
  GL_INT_IMAGE_2D                                   = $9058;
  GL_INT_IMAGE_3D                                   = $9059;
  GL_INT_IMAGE_CUBE                                 = $905B;
  GL_INT_IMAGE_2D_ARRAY                             = $905E;
  GL_UNSIGNED_INT_IMAGE_2D                          = $9063;
  GL_UNSIGNED_INT_IMAGE_3D                          = $9064;
  GL_UNSIGNED_INT_IMAGE_CUBE                        = $9066;
  GL_UNSIGNED_INT_IMAGE_2D_ARRAY                    = $9069;
  GL_IMAGE_FORMAT_COMPATIBILITY_TYPE                = $90C7;
  GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE             = $90C8;
  GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS            = $90C9;
  GL_READ_ONLY                                      = $88B8;
  GL_WRITE_ONLY                                     = $88B9;
  GL_READ_WRITE                                     = $88BA;
  GL_SHADER_STORAGE_BUFFER                          = $90D2;
  GL_SHADER_STORAGE_BUFFER_BINDING                  = $90D3;
  GL_SHADER_STORAGE_BUFFER_START                    = $90D4;
  GL_SHADER_STORAGE_BUFFER_SIZE                     = $90D5;
  GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS               = $90D6;
  GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS             = $90DA;
  GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS              = $90DB;
  GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS             = $90DC;
  GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS             = $90DD;
  GL_MAX_SHADER_STORAGE_BLOCK_SIZE                  = $90DE;
  GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT         = $90DF;
  GL_SHADER_STORAGE_BARRIER_BIT                     = $00002000;
  GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES           = $8F39;
  GL_DEPTH_STENCIL_TEXTURE_MODE                     = $90EA;
  GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET              = $8E5E;
  GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET              = $8E5F;
  GL_SAMPLE_POSITION                                = $8E50;
  GL_SAMPLE_MASK                                    = $8E51;
  GL_SAMPLE_MASK_VALUE                              = $8E52;
  GL_TEXTURE_2D_MULTISAMPLE                         = $9100;
  GL_MAX_SAMPLE_MASK_WORDS                          = $8E59;
  GL_MAX_COLOR_TEXTURE_SAMPLES                      = $910E;
  GL_MAX_DEPTH_TEXTURE_SAMPLES                      = $910F;
  GL_MAX_INTEGER_SAMPLES                            = $9110;
  GL_TEXTURE_BINDING_2D_MULTISAMPLE                 = $9104;
  GL_TEXTURE_SAMPLES                                = $9106;
  GL_TEXTURE_FIXED_SAMPLE_LOCATIONS                 = $9107;
  GL_TEXTURE_WIDTH                                  = $1000;
  GL_TEXTURE_HEIGHT                                 = $1001;
  GL_TEXTURE_DEPTH                                  = $8071;
  GL_TEXTURE_INTERNAL_FORMAT                        = $1003;
  GL_TEXTURE_RED_SIZE                               = $805C;
  GL_TEXTURE_GREEN_SIZE                             = $805D;
  GL_TEXTURE_BLUE_SIZE                              = $805E;
  GL_TEXTURE_ALPHA_SIZE                             = $805F;
  GL_TEXTURE_DEPTH_SIZE                             = $884A;
  GL_TEXTURE_STENCIL_SIZE                           = $88F1;
  GL_TEXTURE_SHARED_SIZE                            = $8C3F;
  GL_TEXTURE_RED_TYPE                               = $8C10;
  GL_TEXTURE_GREEN_TYPE                             = $8C11;
  GL_TEXTURE_BLUE_TYPE                              = $8C12;
  GL_TEXTURE_ALPHA_TYPE                             = $8C13;
  GL_TEXTURE_DEPTH_TYPE                             = $8C16;
  GL_TEXTURE_COMPRESSED                             = $86A1;
  GL_SAMPLER_2D_MULTISAMPLE                         = $9108;
  GL_INT_SAMPLER_2D_MULTISAMPLE                     = $9109;
  GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE            = $910A;
  GL_VERTEX_ATTRIB_BINDING                          = $82D4;
  GL_VERTEX_ATTRIB_RELATIVE_OFFSET                  = $82D5;
  GL_VERTEX_BINDING_DIVISOR                         = $82D6;
  GL_VERTEX_BINDING_OFFSET                          = $82D7;
  GL_VERTEX_BINDING_STRIDE                          = $82D8;
  GL_VERTEX_BINDING_BUFFER                          = $8F4F;
  GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET              = $82D9;
  GL_MAX_VERTEX_ATTRIB_BINDINGS                     = $82DA;
  GL_MAX_VERTEX_ATTRIB_STRIDE                       = $82E5;

type
{ ============================================== OpenGL ES 1.0 ======================================================= }
{ Available only in Common profile }
  TglAlphaFunc                              = procedure(aFunc: GLenum; aRef: GLclampf); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglClearColor                             = procedure(aRed: GLclampf; aGreen: GLclampf; aBlue: GLclampf; aAlpha: GLclampf); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglClearDepthf                            = procedure(aDepth: GLclampf); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglClipPlanef                             = procedure(aPlane: GLenum; const aEquation: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglColor4f                                = procedure(aRed: GLfloat; aGreen: GLfloat; aBlue: GLfloat; aAlpha: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDepthRangef                            = procedure(aZNear: GLclampf; aZFar: GLclampf); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglFogf                                   = procedure(aPname: GLenum; aParam: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglFogfv                                  = procedure(aPname: GLenum; const aParams: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglFrustumf                               = procedure(aLeft: GLfloat; aRight: GLfloat; aBottom: GLfloat; aTop: GLfloat; aZNear: GLfloat; aZFar: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetClipPlanef                          = procedure(aPname: GLenum; aEquation: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetFloatv                              = procedure(aPname: GLenum; aParams: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetLightfv                             = procedure(aLight: GLenum; aPname: GLenum; aParams: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetMaterialfv                          = procedure(aFace: GLenum; aPname: GLenum; aParams: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetTexEnvfv                            = procedure(aEnv: GLenum; aPname: GLenum; aParams: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetTexParameterfv                      = procedure(aTarget: GLenum; aPname: GLenum; aParams: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglLightModelf                            = procedure(aPname: GLenum; aParam: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglLightModelfv                           = procedure(aPname: GLenum; const aParams: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglLightf                                 = procedure(aLight: GLenum; aPname: GLenum; aParam: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglLightfv                                = procedure(aLight: GLenum; aPname: GLenum; const aParams: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglLineWidth                              = procedure(aWidth: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglLoadMatrixf                            = procedure(const aMatrix: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglMaterialf                              = procedure(aFace: GLenum; aPname: GLenum; aParam: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglMaterialfv                             = procedure(aFace: GLenum; aPname: GLenum; const aParams: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglMultMatrixf                            = procedure(const aMatrix: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglMultiTexCoord4f                        = procedure(aTarget: GLenum; s: GLfloat; t: GLfloat; r: GLfloat; q: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglNormal3f                               = procedure(nx: GLfloat; ny: GLfloat; nz: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglOrthof                                 = procedure(aLeft: GLfloat; aRight: GLfloat; aBottom: GLfloat; aTop: GLfloat; aZNear: GLfloat; aZFar: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglPointParameterf                        = procedure(aPname: GLenum; aParam: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglPointParameterfv                       = procedure(aPname: GLenum; const aParams: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglPointSize                              = procedure(aSize: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglPolygonOffset                          = procedure(aFactor: GLfloat; aUnits: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglRotatef                                = procedure(aAngle: GLfloat; x: GLfloat; y: GLfloat; z: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglScalef                                 = procedure(x: GLfloat; y: GLfloat; z: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglTexEnvf                                = procedure(aTarget: GLenum; aPname: GLenum; aParam: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglTexEnvfv                               = procedure(aTarget: GLenum; aPname: GLenum; const aParams: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglTexParameterf                          = procedure(aTarget: GLenum; aPname: GLenum; aParam: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglTexParameterfv                         = procedure(aTarget: GLenum; aPname: GLenum; const aParams: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglTranslatef                             = procedure(x: GLfloat; y: GLfloat; z: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}

{ Available in both Common and Common-Lite profiles }
  TglActiveTexture                          = procedure(aTexture: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglAlphaFuncx                             = procedure(aFunc: GLenum; aRef: GLclampx); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglBindBuffer                             = procedure(aTarget: GLenum; aBuffer: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglBindTexture                            = procedure(aTarget: GLenum; aTexture: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglBlendFunc                              = procedure(aSfactor: GLenum; aDfactor: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglBufferData                             = procedure(aTarget: GLenum; aSize: GLsizeiptr; const aData: PGLvoid; aUsage: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglBufferSubData                          = procedure(aTarget: GLenum; aOffset: GLintptr; aSize: GLsizeiptr; const aData: PGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglClear                                  = procedure(aMask: GLbitfield); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglClearColorx                            = procedure(aRed: GLclampx; aGreen: GLclampx; aBlue: GLclampx; aAlpha: GLclampx); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglClearDepthx                            = procedure(aDepth: GLclampx); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglClearStencil                           = procedure(aStencil: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglClientActiveTexture                    = procedure(aTexture: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglClipPlanex                             = procedure(aPlane: GLenum; const aEquation: PGLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglColor4ub                               = procedure(aRed: GLubyte; aGreen: GLubyte; aBlue: GLubyte; aAlpha: GLubyte); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglColor4x                                = procedure(aRed: GLfixed; aGreen: GLfixed; aBlue: GLfixed; aAlpha: GLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglColorMask                              = procedure(aRed: GLboolean; aGreen: GLboolean; aBlue: GLboolean; aAlpha: GLboolean); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglColorPointer                           = procedure(aSize: GLint; aType: GLenum; aStride: GLsizei; const aPointer: PGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglCompressedTexImage2D                   = procedure(aTarget: GLenum; aLevel: GLint; aInternalformat: GLenum; aWidth: GLsizei; aHeight: GLsizei; aBorder: GLint; aImageSize: GLsizei; const aData: PGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglCompressedTexSubImage2D                = procedure(aTarget: GLenum; aLevel: GLint; aXoffset: GLint; aYoffset: GLint; aWidth: GLsizei; aHeight: GLsizei; aFormat: GLenum; aImageSize: GLsizei; const aData: PGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglCopyTexImage2D                         = procedure(aTarget: GLenum; aLevel: GLint; aInternalformat: GLenum; x: GLint; y: GLint; aWidth: GLsizei; aHeight: GLsizei; aBorder: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglCopyTexSubImage2D                      = procedure(aTarget: GLenum; aLevel: GLint; aXoffset: GLint; aYoffset: GLint; x: GLint; y: GLint; aWidth: GLsizei; aHeight: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglCullFace                               = procedure(aMode: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDeleteBuffers                          = procedure(n: GLsizei; const aBuffers: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDeleteTextures                         = procedure(n: GLsizei; const aTextures: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDepthFunc                              = procedure(aFunc: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDepthMask                              = procedure(aFlag: GLboolean); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDepthRangex                            = procedure(aZNear: GLclampx; aZFar: GLclampx); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDisable                                = procedure(aCap: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDisableClientState                     = procedure(aArray: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDrawArrays                             = procedure(aMode: GLenum; aFirst: GLint; aCount: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDrawElements                           = procedure(aMode: GLenum; aCount: GLsizei; aType: GLenum; const aIndices: PGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglEnable                                 = procedure(aCap: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglEnableClientState                      = procedure(aArray: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglFinish                                 = procedure(); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglFlush                                  = procedure(); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglFogx                                   = procedure(aPname: GLenum; aParam: GLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglFogxv                                  = procedure(aPname: GLenum; const aParams: PGLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglFrontFace                              = procedure(aMode: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglFrustumx                               = procedure(aLeft: GLfixed; aRight: GLfixed; aBottom: GLfixed; aTop: GLfixed; aZNear: GLfixed; aZFar: GLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetBooleanv                            = procedure(aPname: GLenum; aParams: PGLboolean); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetBufferParameteriv                   = procedure(aTarget: GLenum; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetClipPlanex                          = procedure(aPname: GLenum; aEquation: PGLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGenBuffers                             = procedure(n: GLsizei; aBuffers: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGenTextures                            = procedure(n: GLsizei; aTextures: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetError                               = function (): GLenum; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetFixedv                              = procedure(aPname: GLenum; aParams: PGLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetIntegerv                            = procedure(aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetLightxv                             = procedure(aLight: GLenum; aPname: GLenum; aParams: PGLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetMaterialxv                          = procedure(aFace: GLenum; aPname: GLenum; aParams: PGLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetPointerv                            = procedure(aPname: GLenum; aParams: PPGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetString                              = function (name: GLenum): PGLubyte; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetTexEnviv                            = procedure(aEnv: GLenum; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetTexEnvxv                            = procedure(aEnv: GLenum; aPname: GLenum; aParams: PGLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetTexParameteriv                      = procedure(aTarget: GLenum; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetTexParameterxv                      = procedure(aTarget: GLenum; aPname: GLenum; aParams: PGLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglHint                                   = procedure(aTarget: GLenum; aMode: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglIsBuffer                               = function (aBuffer: GLuint): GLboolean;                                                {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglIsEnabled                              = function (aCap: GLenum): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglIsTexture                              = function (aTexture: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglLightModelx                            = procedure(aPname: GLenum; aParam: GLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglLightModelxv                           = procedure(aPname: GLenum; const aParams: PGLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglLightx                                 = procedure(aLight: GLenum; aPname: GLenum; aParam: GLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglLightxv                                = procedure(aLight: GLenum; aPname: GLenum; const aParams: PGLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglLineWidthx                             = procedure(aWidth: GLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglLoadIdentity                           = procedure(); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglLoadMatrix                             = procedure(const aMatrix: PGLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglLogicOp                                = procedure(aOpcode: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglMaterialx                              = procedure(aFace: GLenum; aPname: GLenum; aParam: GLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglMaterialxv                             = procedure(aFace: GLenum; aPname: GLenum; const aParams: PGLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglMatrixMode                             = procedure(aMode: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglMultMatrixx                            = procedure(const aMatrix: PGLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglMultiTexCoord4x                        = procedure(aTarget: GLenum; s: GLfixed; t: GLfixed; r: GLfixed; q: GLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglNormal3x                               = procedure(nx: GLfixed; ny: GLfixed; nz: GLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglNormalPointer                          = procedure(aType: GLenum; aStride: GLsizei; const aPointer: PGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglOrthox                                 = procedure(aLeft: GLfixed; aRight: GLfixed; aBottom: GLfixed; aTop: GLfixed; aZNear: GLfixed; aZFar: GLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglPixelStorei                            = procedure(aPname: GLenum; aParam: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglPointParameterx                        = procedure(aPname: GLenum; aParam: GLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglPointParameterxv                       = procedure(aPname: GLenum; const aParams: PGLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglPointSizex                             = procedure(aSize: GLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglPolygonOffsetx                         = procedure(aFactor: GLfixed; aUnits: GLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglPopMatrix                              = procedure(); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglPushMatrix                             = procedure(); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglReadPixels                             = procedure(x: GLint; y: GLint; aWidth: GLsizei; aHeight: GLsizei; aFormat: GLenum; aType: GLenum; aPixels: PGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglRotatex                                = procedure(aAngle: GLfixed; x: GLfixed; y: GLfixed; z: GLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglSampleCoverage                         = procedure(aValue: GLclampf; aInvert: GLboolean); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglSampleCoveragex                        = procedure(aValue: GLclampx; aInvert: GLboolean); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglScalex                                 = procedure(x: GLfixed; y: GLfixed; z: GLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglScissor                                = procedure(x: GLint; y: GLint; aWidth: GLsizei; aHeight: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglShadeModel                             = procedure(aMode: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglStencilFunc                            = procedure(aFunc: GLenum; aRef: GLint; aMask: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglStencilMask                            = procedure(aMask: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglStencilOp                              = procedure(aFail: GLenum; aZfail: GLenum; aZpass: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglTexCoordPointer                        = procedure(aSize: GLint; aType: GLenum; aStride: GLsizei; const aPointer: PGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglTexEnvi                                = procedure(aTarget: GLenum; aPname: GLenum; aParam: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglTexEnvx                                = procedure(aTarget: GLenum; aPname: GLenum; aParam: GLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglTexEnviv                               = procedure(aTarget: GLenum; aPname: GLenum; const aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglTexEnvxv                               = procedure(aTarget: GLenum; aPname: GLenum; const aParams: PGLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglTexImage2D                             = procedure(aTarget: GLenum; aLevel: GLint; aInternalformat: GLint; aWidth: GLsizei; aHeight: GLsizei; aBorder: GLint; aFormat: GLenum; aType: GLenum; const aPixels: PGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglTexParameteri                          = procedure(aTarget: GLenum; aPname: GLenum; aParam: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglTexParameterx                          = procedure(aTarget: GLenum; aPname: GLenum; aParam: GLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglTexParameteriv                         = procedure(aTarget: GLenum; aPname: GLenum; const aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglTexParameterxv                         = procedure(aTarget: GLenum; aPname: GLenum; const aParams: PGLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglTexSubImage2D                          = procedure(aTarget: GLenum; aLevel: GLint; aXoffset: GLint; aYoffset: GLint; aWidth: GLsizei; aHeight: GLsizei; aFormat: GLenum; aType: GLenum; const aPixels: PGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglTranslatex                             = procedure(x: GLfixed; y: GLfixed; z: GLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglVertexPointer                          = procedure(aSize: GLint; aType: GLenum; aStride: GLsizei; const aPointer: PGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglViewport                               = procedure(x: GLint; y: GLint; aWidth: GLsizei; aHeight: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}

{ ============================================== OpenGL ES 2.0 ======================================================= }
  TglAttachShader                           = procedure(aProgram: GLuint; aShader: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglBindAttribLocation                     = procedure(aProgram: GLuint; aIndex: GLuint; const aName: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglBindFramebuffer                        = procedure(aTarget: GLenum; aFramebuffer: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglBindRenderbuffer                       = procedure(aTarget: GLenum; aRenderbuffer: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglBlendColor                             = procedure(aRed: GLclampf; aGreen: GLclampf; aBlue: GLclampf; aAlpha: GLclampf); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglBlendEquation                          = procedure( mode : GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglBlendEquationSeparate                  = procedure(aModeRGB: GLenum; aModeAlpha: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglBlendFuncSeparate                      = procedure(aSrcRGB: GLenum; aDstRGB: GLenum; aSrcAlpha: GLenum; aDstAlpha: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglCheckFramebufferStatus                 = function (aTarget: GLenum): GLenum; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglCompileShader                          = procedure(aShader: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglCreateProgram                          = function (): GLuint; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglCreateShader                           = function (aType: GLenum): GLuint; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDeleteFramebuffers                     = procedure(n: GLsizei; const aFramebuffers: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDeleteProgram                          = procedure(aProgram: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDeleteRenderbuffers                    = procedure(n: GLsizei; const aRenderbuffers: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDeleteShader                           = procedure(aShader: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDetachShader                           = procedure(aProgram: GLuint; aShader: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDisableVertexAttribArray               = procedure(aIndex: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglEnableVertexAttribArray                = procedure(aIndex: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglFramebufferRenderbuffer                = procedure(aTarget: GLenum; aAttachment: GLenum; aRenderbuffertarget: GLenum; aRenderbuffer: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglFramebufferTexture2D                   = procedure(aTarget: GLenum; aAttachment: GLenum; aTextarget: GLenum; aTexture: GLuint; aLevel: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGenerateMipmap                         = procedure(aTarget: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGenFramebuffers                        = procedure(n: GLsizei; aFramebuffers: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGenRenderbuffers                       = procedure(n: GLsizei; aRenderbuffers: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetActiveAttrib                        = procedure(aProgram: GLuint; aIndex: GLuint; aBufsize: GLsizei; aLength: PGLsizei; aSize: PGLint; aType: PGLenum; aName: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetActiveUniform                       = procedure(aProgram: GLuint; aIndex: GLuint; aBufsize: GLsizei; aLength: PGLsizei; aSize: PGLint; aType: PGLenum; aName: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetAttachedShaders                     = procedure(aProgram: GLuint; aMaxcount: GLsizei; aCount: PGLsizei; aShaders: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetAttribLocation                      = function (aProgram: GLuint; const aName: PGLchar): Integer; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetFramebufferAttachmentParameteriv    = procedure(aTarget: GLenum; aAttachment: GLenum; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetProgramiv                           = procedure(aProgram: GLuint; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetProgramInfoLog                      = procedure(aProgram: GLuint; aBufsize: GLsizei; aLength: PGLsizei; aInfolog: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetRenderbufferParameteriv             = procedure(aTarget: GLenum; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetShaderiv                            = procedure(aShader: GLuint; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetShaderInfoLog                       = procedure(aShader: GLuint; aBufsize: GLsizei; aLength: PGLsizei; aInfolog: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetShaderPrecisionFormat               = procedure(aShadertype: GLenum; aPrecisiontype: GLenum; aRange: PGLint; aPrecision: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetShaderSource                        = procedure(aShader: GLuint; aBufsize: GLsizei; aLength: PGLsizei; aSource: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetUniformfv                           = procedure(aProgram: GLuint; aLocation: GLint; aParams: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetUniformiv                           = procedure(aProgram: GLuint; aLocation: GLint; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetUniformLocation                     = function (aProgram: GLuint; const aName: PGLchar): Integer; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetVertexAttribfv                      = procedure(aIndex: GLuint; aPname: GLenum; aParams: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetVertexAttribiv                      = procedure(aIndex: GLuint; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetVertexAttribPointerv                = procedure(aIndex: GLuint; aPname: GLenum; aPointer: PPGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglIsFramebuffer                          = function (aFramebuffer: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglIsProgram                              = function (aProgram: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglIsRenderbuffer                         = function (aRenderbuffer: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglIsShader                               = function (aShader: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglLinkProgram                            = procedure(aProgram: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglReleaseShaderCompiler                  = procedure(); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglRenderbufferStorage                    = procedure(aTarget: GLenum; aInternalformat: GLenum; aWidth: GLsizei; aHeight: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglShaderBinary                           = procedure(n: GLsizei; const aShaders: PGLuint; aBinaryformat: GLenum; const aBinary: PGLvoid; aLength: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglShaderSource                           = procedure(aShader: GLuint; aCount: GLsizei; const aString: PPGLchar; const aLength: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglStencilFuncSeparate                    = procedure(aFace: GLenum; aFunc: GLenum; aRef: GLint; aMask: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglStencilMaskSeparate                    = procedure(aFace: GLenum; aMask: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglStencilOpSeparate                      = procedure(aFace: GLenum; aFail: GLenum; aZfail: GLenum; aZpass: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUniform1f                              = procedure(aLocation: GLint; x: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUniform1fv                             = procedure(aLocation: GLint; aCount: GLsizei; const v: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUniform1i                              = procedure(aLocation: GLint; x: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUniform1iv                             = procedure(aLocation: GLint; aCount: GLsizei; const v: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUniform2f                              = procedure(aLocation: GLint; x: GLfloat; y: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUniform2fv                             = procedure(aLocation: GLint; aCount: GLsizei; const v: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUniform2i                              = procedure(aLocation: GLint; x: GLint; y: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUniform2iv                             = procedure(aLocation: GLint; aCount: GLsizei; const v: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUniform3f                              = procedure(aLocation: GLint; x: GLfloat; y: GLfloat; z: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUniform3fv                             = procedure(aLocation: GLint; aCount: GLsizei; const v: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUniform3i                              = procedure(aLocation: GLint; x: GLint; y: GLint; z: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUniform3iv                             = procedure(aLocation: GLint; aCount: GLsizei; const v: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUniform4f                              = procedure(aLocation: GLint; x: GLfloat; y: GLfloat; z: GLfloat; w: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUniform4fv                             = procedure(aLocation: GLint; aCount: GLsizei; const v: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUniform4i                              = procedure(aLocation: GLint; x: GLint; y: GLint; z: GLint; w: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUniform4iv                             = procedure(aLocation: GLint; aCount: GLsizei; const v: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUniformMatrix2fv                       = procedure(aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUniformMatrix3fv                       = procedure(aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUniformMatrix4fv                       = procedure(aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUseProgram                             = procedure(aProgram: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglValidateProgram                        = procedure(aProgram: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglVertexAttrib1f                         = procedure(aIndex: GLuint; x: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglVertexAttrib1fv                        = procedure(aIndex: GLuint; const aValues: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglVertexAttrib2f                         = procedure(aIndex: GLuint; x: GLfloat; y: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglVertexAttrib2fv                        = procedure(aIndex: GLuint; const aValues: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglVertexAttrib3f                         = procedure(aIndex: GLuint; x: GLfloat; y: GLfloat; z: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglVertexAttrib3fv                        = procedure(aIndex: GLuint; const aValues: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglVertexAttrib4f                         = procedure(aIndex: GLuint; x: GLfloat; y: GLfloat; z: GLfloat; w: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglVertexAttrib4fv                        = procedure(aIndex: GLuint; const aValues: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglVertexAttribPointer                    = procedure(aIndex: GLuint; aSize: GLint; aType: GLenum; aNormalized: GLboolean; aStride: GLsizei; const aPtr: PGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}

{ ============================================== OpenGL ES 3.0 ======================================================= }
  TglReadBuffer                             = procedure(aSrc: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDrawRangeElements                      = procedure(aMode: GLenum; aStart: GLuint; aEnd: GLuint; aCount: GLsizei; aType: GLenum; const aIndices: PGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglTexImage3D                             = procedure(aTarget: GLenum; aLevel: GLint; aInternalformat: GLint; aWidth: GLsizei; aHeight: GLsizei; aDepth: GLsizei; aBorder: GLint; aFormat: GLenum; aType: GLenum; const aPixels: PGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglTexSubImage3D                          = procedure(aTarget: GLenum; aLevel: GLint; aXoffset: GLint; aYoffset: GLint; aZoffset: GLint; aWidth: GLsizei; aHeight: GLsizei; aDepth: GLsizei; aFormat: GLenum; aType: GLenum; const aPixels: PGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglCopyTexSubImage3D                      = procedure(aTarget: GLenum; aLevel: GLint; aXoffset: GLint; aYoffset: GLint; aZoffset: GLint; x: GLint; y: GLint; aWidth: GLsizei; aHeight: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglCompressedTexImage3D                   = procedure(aTarget: GLenum; aLevel: GLint; aInternalformat: GLenum; aWidth: GLsizei; aHeight: GLsizei; aDepth: GLsizei; aBorder: GLint; aImageSize: GLsizei; const aData: PGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglCompressedTexSubImage3D                = procedure(aTarget: GLenum; aLevel: GLint; aXoffset: GLint; aYoffset: GLint; aZoffset: GLint; aWidth: GLsizei; aHeight: GLsizei; aDepth: GLsizei; aFormat: GLenum; aImageSize: GLsizei; const aData: PGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGenQueries                             = procedure(n: GLsizei; aIds: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDeleteQueries                          = procedure(n: GLsizei; const aIds: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglIsQuery                                = function (aId: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglBeginQuery                             = procedure(aTarget: GLenum; aId: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglEndQuery                               = procedure(aTarget: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetQueryiv                             = procedure(aTarget: GLenum; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetQueryObjectuiv                      = procedure(aId: GLuint; aPname: GLenum; aParams: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUnmapBuffer                            = function (aTarget: GLenum): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetBufferPointerv                      = procedure(aTarget: GLenum; aPname: GLenum; aParams: PPGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDrawBuffers                            = procedure(n: GLsizei; const aBuffers: PGLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUniformMatrix2x3fv                     = procedure(aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUniformMatrix3x2fv                     = procedure(aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUniformMatrix2x4fv                     = procedure(aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUniformMatrix4x2fv                     = procedure(aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUniformMatrix3x4fv                     = procedure(aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUniformMatrix4x3fv                     = procedure(aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglBlitFramebuffer                        = procedure(srcX0: GLint; srcY0: GLint; srcX1: GLint; srcY1: GLint; dstX0: GLint; dstY0: GLint; dstX1: GLint; dstY1: GLint; aMask: GLbitfield; aFilter: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglRenderbufferStorageMultisample         = procedure(aTarget: GLenum; aSamples: GLsizei; aInternalformat: GLenum; aWidth: GLsizei; aHeight: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglFramebufferTextureLayer                = procedure(aTarget: GLenum; aAttachment: GLenum; aTexture: GLuint; aLevel: GLint; aLayer: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglMapBufferRange                         = function (aTarget: GLenum; aOffset: GLintptr; aLength: GLsizeiptr; aAccess: GLbitfield): PGLvoid; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglFlushMappedBufferRange                 = procedure(aTarget: GLenum; aOffset: GLintptr; aLength: GLsizeiptr); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglBindVertexArray                        = procedure(aArray: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDeleteVertexArrays                     = procedure(n: GLsizei; const aArrays: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGenVertexArrays                        = procedure(n: GLsizei; aArrays: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglIsVertexArray                          = function (aArray: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetIntegeriv                           = procedure(aTarget: GLenum; aIndex: GLuint; aData: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglBeginTransformFeedback                 = procedure(aPrimitiveMode: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglEndTransformFeedback                   = procedure(); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglBindBufferRange                        = procedure(aTarget: GLenum; aIndex: GLuint; aBuffer: GLuint; aOffset: GLintptr; aSize: GLsizeiptr); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglBindBufferBase                         = procedure(aTarget: GLenum; aIndex: GLuint; aBuffer: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglTransformFeedbackVaryings              = procedure(aProgram: GLuint; aCount: GLsizei; const aVaryings: PPGLchar; aBufferMode: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetTransformFeedbackVarying            = procedure(aProgram: GLuint; aIndex: GLuint; aBufSize: GLsizei; aLength: PGLsizei; aSize: PGLsizei; aType: PGLenum; aName: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglVertexAttribIPointer                   = procedure(aIndex: GLuint; aSize: GLint; aType: GLenum; aStride: GLsizei; const aPointer: PGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetVertexAttribIiv                     = procedure(aIndex: GLuint; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetVertexAttribIuiv                    = procedure(aIndex: GLuint; aPname: GLenum; aParams: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglVertexAttribI4i                        = procedure(aIndex: GLuint; x: GLint; y: GLint; z: GLint; w: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglVertexAttribI4ui                       = procedure(aIndex: GLuint; x: GLuint; y: GLuint; z: GLuint; w: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglVertexAttribI4iv                       = procedure(aIndex: GLuint; const v: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglVertexAttribI4uiv                      = procedure(aIndex: GLuint; const v: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetUniformuiv                          = procedure(aProgram: GLuint; aLocation: GLint; aParams: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetFragDataLocation                    = function (aProgram: GLuint; const aName: PGLchar): GLint; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUniform1ui                             = procedure(aLocation: GLint; v0: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUniform2ui                             = procedure(aLocation: GLint; v0: GLuint; v1: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUniform3ui                             = procedure(aLocation: GLint; v0: GLuint; v1: GLuint; v2: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUniform4ui                             = procedure(aLocation: GLint; v0: GLuint; v1: GLuint; v2: GLuint; v3: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUniform1uiv                            = procedure(aLocation: GLint; aCount: GLsizei; const aValue: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUniform2uiv                            = procedure(aLocation: GLint; aCount: GLsizei; const aValue: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUniform3uiv                            = procedure(aLocation: GLint; aCount: GLsizei; const aValue: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUniform4uiv                            = procedure(aLocation: GLint; aCount: GLsizei; const aValue: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglClearBufferiv                          = procedure(aBuffer: GLenum; aDrawbuffer: GLint; const aValue: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglClearBufferuiv                         = procedure(aBuffer: GLenum; aDrawbuffer: GLint; const aValue: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglClearBufferfv                          = procedure(aBuffer: GLenum; aDrawbuffer: GLint; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglClearBufferfi                          = procedure(aBuffer: GLenum; aDrawbuffer: GLint; aDepth: GLfloat; aStencil: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetStringi                             = function (aName: GLenum; aIndex: GLuint): PGLubyte; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglCopyBufferSubData                      = procedure(aReadTarget: GLenum; aWriteTarget: GLenum; aReadOffset: GLintptr; aWriteOffset: GLintptr; aSize: GLsizeiptr); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetUniformIndices                      = procedure(aProgram: GLuint; aUniformCount: GLsizei; const aUniformNames: PPGLchar; aUniformIndices: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetActiveUniformsiv                    = procedure(aProgram: GLuint; aUniformCount: GLsizei; const aUniformIndices: PGLuint; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetUniformBlockIndex                   = function (aProgram: GLuint; const aUniformBlockName: PGLchar): GLuint; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetActiveUniformBlockiv                = procedure(aProgram: GLuint; aUniformBlockIndex: GLuint; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetActiveUniformBlockName              = procedure(aProgram: GLuint; aUniformBlockIndex: GLuint; aBufSize: GLsizei; aLength: PGLsizei; aUniformBlockName: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUniformBlockBinding                    = procedure(aProgram: GLuint; aUniformBlockIndex: GLuint; aUniformBlockBinding: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDrawArraysInstanced                    = procedure(aMode: GLenum; aFirst: GLint; aCount: GLsizei; aInstancecount: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDrawElementsInstanced                  = procedure(aMode: GLenum; aCount: GLsizei; aType: GLenum; const aIndices: PGLvoid; aInstancecount: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglFenceSync                              = function (aCondition: GLenum; aFlags: GLbitfield): GLsync; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglIsSync                                 = function (aSync: GLsync): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDeleteSync                             = procedure(aSync: GLsync); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglClientWaitSync                         = function (aSync: GLsync; aFlags: GLbitfield; aTimeout: GLuint64): GLenum; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglWaitSync                               = procedure(aSync: GLsync; aFlags: GLbitfield; aTimeout: GLuint64); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetInteger64v                          = procedure(aPname: GLenum; aData: PGLint64); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetSynciv                              = procedure(aSync: GLsync; aPname: GLenum; aBufSize: GLsizei; aLength: PGLsizei; aValues: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetInteger64iv                         = procedure(aTarget: GLenum; aIndex: GLuint; aData: PGLint64); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetBufferParameteri64v                 = procedure(aTarget: GLenum; aPname: GLenum; aParams: PGLint64); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGenSamplers                            = procedure(aCount: GLsizei; aSamplers: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDeleteSamplers                         = procedure(aCount: GLsizei; const aSamplers: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglIsSampler                              = function (aSampler: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglBindSampler                            = procedure(aUnit: GLuint; aSampler: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglSamplerParameteri                      = procedure(aSampler: GLuint; aPname: GLenum; aParam: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglSamplerParameteriv                     = procedure(aSampler: GLuint; aPname: GLenum; const aParam: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglSamplerParameterf                      = procedure(aSampler: GLuint; aPname: GLenum; aParam: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglSamplerParameterfv                     = procedure(aSampler: GLuint; aPname: GLenum; const aParam: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetSamplerParameteriv                  = procedure(aSampler: GLuint; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetSamplerParameterfv                  = procedure(aSampler: GLuint; aPname: GLenum; aParams: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglVertexAttribDivisor                    = procedure(aIndex: GLuint; aDivisor: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglBindTransformFeedback                  = procedure(aTarget: GLenum; aId: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDeleteTransformFeedbacks               = procedure(n: GLsizei; const aIds: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGenTransformFeedbacks                  = procedure(n: GLsizei; aIds: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglIsTransformFeedback                    = function (aId: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglPauseTransformFeedback                 = procedure(); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglResumeTransformFeedback                = procedure(); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetProgramBinary                       = procedure(aProgram: GLuint; aBufSize: GLsizei; aLength: PGLsizei; aBinaryFormat: PGLenum; aBinary: PGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramBinary                          = procedure(aProgram: GLuint; aBinaryFormat: GLenum; const aBinary: PGLvoid; aLength: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramParameteri                      = procedure(aProgram: GLuint; aPname: GLenum; aValue: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglInvalidateFramebuffer                  = procedure(aTarget: GLenum; aNumAttachments: GLsizei; const aAttachments: PGLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglInvalidateSubFramebuffer               = procedure(aTarget: GLenum; aNumAttachments: GLsizei; const aAttachments: PGLenum; x: GLint; y: GLint; aWidth: GLsizei; aHeight: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglTexStorage2D                           = procedure(aTarget: GLenum; aLevels: GLsizei; aInternalformat: GLenum; aWidth: GLsizei; aHeight: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglTexStorage3D                           = procedure(aTarget: GLenum; aLevels: GLsizei; aInternalformat: GLenum; aWidth: GLsizei; aHeight: GLsizei; aDepth: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetInternalformativ                    = procedure(aTarget: GLenum; aInternalformat: GLenum; aPname: GLenum; aBufSize: GLsizei; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}

{ ============================================== OpenGL ES 3.1 ======================================================= }
  TglDispatchCompute                        = procedure(aNumGroupsX: GLuint; aNumGroupsY: GLuint; aNumGroupsZ: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDispatchComputeIndirect                = procedure(aIndirect: GLintptr); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDrawArraysIndirect                     = procedure(aMode: GLenum; const aIndirect: PGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDrawElementsIndirect                   = procedure(aMode: GLenum; aType: GLenum; const aIndirect: PGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglFramebufferParameteri                  = procedure(aTarget: GLenum; aPname: GLenum; aParam: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetFramebufferParameteriv              = procedure(aTarget: GLenum; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetProgramInterfaceiv                  = procedure(aProgram: GLuint; aProgramInterface: GLenum; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetProgramResourceIndex                = function (aProgram: GLuint; aProgramInterface: GLenum; const aName: PGLchar): GLuint; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetProgramResourceName                 = procedure(aProgram: GLuint; aProgramInterface: GLenum; aIndex: GLuint; aBufSize: GLsizei; aLength: PGLsizei; aName: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetProgramResourceiv                   = procedure(aProgram: GLuint; aProgramInterface: GLenum; aIndex: GLuint; aPropCount: GLsizei; const aProps: PGLenum; aBufSize: GLsizei; aLength: PGLsizei; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetProgramResourceLocation             = function (aProgram: GLuint; aProgramInterface: GLenum; const aName: PGLchar): GLint; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUseProgramStages                       = procedure(aPipeline: GLuint; aStages: GLbitfield; aProgram: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglActiveShaderProgram                    = procedure(aPipeline: GLuint; aProgram: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglCreateShaderProgramv                   = function (aType: GLenum; aCount: GLsizei; const aStrings: PPGLchar): GLuint; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglBindProgramPipeline                    = procedure(aPipeline: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDeleteProgramPipelines                 = procedure(n: GLsizei; const aPipelines: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGenProgramPipelines                    = procedure(n: GLsizei; aPipelines: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglIsProgramPipeline                      = function (aPipeline: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetProgramPipelineiv                   = procedure(aPipeline: GLuint; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform1i                       = procedure(aProgram: GLuint; aLocation: GLint; v0: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform2i                       = procedure(aProgram: GLuint; aLocation: GLint; v0: GLint; v1: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform3i                       = procedure(aProgram: GLuint; aLocation: GLint; v0: GLint; v1: GLint; v2: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform4i                       = procedure(aProgram: GLuint; aLocation: GLint; v0: GLint; v1: GLint; v2: GLint; v3: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform1ui                      = procedure(aProgram: GLuint; aLocation: GLint; v0: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform2ui                      = procedure(aProgram: GLuint; aLocation: GLint; v0: GLuint; v1: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform3ui                      = procedure(aProgram: GLuint; aLocation: GLint; v0: GLuint; v1: GLuint; v2: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform4ui                      = procedure(aProgram: GLuint; aLocation: GLint; v0: GLuint; v1: GLuint; v2: GLuint; v3: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform1f                       = procedure(aProgram: GLuint; aLocation: GLint; v0: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform2f                       = procedure(aProgram: GLuint; aLocation: GLint; v0: GLfloat; v1: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform3f                       = procedure(aProgram: GLuint; aLocation: GLint; v0: GLfloat; v1: GLfloat; v2: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform4f                       = procedure(aProgram: GLuint; aLocation: GLint; v0: GLfloat; v1: GLfloat; v2: GLfloat; v3: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform1iv                      = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform2iv                      = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform3iv                      = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform4iv                      = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform1uiv                     = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform2uiv                     = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform3uiv                     = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform4uiv                     = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform1fv                      = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform2fv                      = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform3fv                      = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform4fv                      = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniformMatrix2fv                = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniformMatrix3fv                = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniformMatrix4fv                = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniformMatrix2x3fv              = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniformMatrix3x2fv              = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniformMatrix2x4fv              = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniformMatrix4x2fv              = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniformMatrix3x4fv              = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniformMatrix4x3fv              = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglValidateProgramPipeline                = procedure(aPipeline: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetProgramPipelineInfoLog              = procedure(aPipeline: GLuint; aBufSize: GLsizei; aLength: PGLsizei; aInfoLog: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglBindImageTexture                       = procedure(aUnit: GLuint; aTexture: GLuint; aLevel: GLint; aLayered: GLboolean; aLayer: GLint; aAccess: GLenum; aFormat: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetBooleaniv                           = procedure(aTarget: GLenum; aIndex: GLuint; aData: PGLboolean); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglMemoryBarrier                          = procedure(aBarriers: GLbitfield); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglMemoryBarrierByRegion                  = procedure(aBarriers: GLbitfield); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglTexStorage2DMultisample                = procedure(aTarget: GLenum; aSamples: GLsizei; aInternalformat: GLenum; aWidth: GLsizei; aHeight: GLsizei; aFixedsamplelocations: GLboolean); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetMultisamplefv                       = procedure(aPname: GLenum; aIndex: GLuint; aVal: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglSampleMaski                            = procedure(aMaskNumber: GLuint; aMask: GLbitfield); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetTexLevelParameteriv                 = procedure(aTarget: GLenum; aLevel: GLint; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetTexLevelParameterfv                 = procedure(aTarget: GLenum; aLevel: GLint; aPname: GLenum; aParams: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglBindVertexBuffer                       = procedure(aBindingindex: GLuint; aBuffer: GLuint; aOffset: GLintptr; aStride: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglVertexAttribFormat                     = procedure(aAttribindex: GLuint; aSize: GLint; aType: GLenum; aNormalized: GLboolean; aRelativeoffset: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglVertexAttribIFormat                    = procedure(aAttribindex: GLuint; aSize: GLint; aType: GLenum; aRelativeoffset: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglVertexAttribBinding                    = procedure(aAttribindex: GLuint; aBindingindex: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglVertexBindingDivisor                   = procedure(aBindingindex: GLuint; aDivisor: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}

var
{ ============================================== OpenGL ES 1.0 ======================================================= }
{ Available only in Common profile }
  glAlphaFunc:                              TglAlphaFunc;
  glClearColor:                             TglClearColor;
  glClearDepthf:                            TglClearDepthf;
  glClipPlanef:                             TglClipPlanef;
  glColor4f:                                TglColor4f;
  glDepthRangef:                            TglDepthRangef;
  glFogf:                                   TglFogf;
  glFogfv:                                  TglFogfv;
  glFrustumf:                               TglFrustumf;
  glGetClipPlanef:                          TglGetClipPlanef;
  glGetFloatv:                              TglGetFloatv;
  glGetLightfv:                             TglGetLightfv;
  glGetMaterialfv:                          TglGetMaterialfv;
  glGetTexEnvfv:                            TglGetTexEnvfv;
  glGetTexParameterfv:                      TglGetTexParameterfv;
  glLightModelf:                            TglLightModelf;
  glLightModelfv:                           TglLightModelfv;
  glLightf:                                 TglLightf;
  glLightfv:                                TglLightfv;
  glLineWidth:                              TglLineWidth;
  glLoadMatrixf:                            TglLoadMatrixf;
  glMaterialf:                              TglMaterialf;
  glMaterialfv:                             TglMaterialfv;
  glMultMatrixf:                            TglMultMatrixf;
  glMultiTexCoord4f:                        TglMultiTexCoord4f;
  glNormal3f:                               TglNormal3f;
  glOrthof:                                 TglOrthof;
  glPointParameterf:                        TglPointParameterf;
  glPointParameterfv:                       TglPointParameterfv;
  glPointSize:                              TglPointSize;
  glPolygonOffset:                          TglPolygonOffset;
  glRotatef:                                TglRotatef;
  glScalef:                                 TglScalef;
  glTexEnvf:                                TglTexEnvf;
  glTexEnvfv:                               TglTexEnvfv;
  glTexParameterf:                          TglTexParameterf;
  glTexParameterfv:                         TglTexParameterfv;
  glTranslatef:                             TglTranslatef;

{ Available in both Common and Common-Lite profiles }
  glActiveTexture:                          TglActiveTexture;
  glAlphaFuncx:                             TglAlphaFuncx;
  glBindBuffer:                             TglBindBuffer;
  glBindTexture:                            TglBindTexture;
  glBlendFunc:                              TglBlendFunc;
  glBufferData:                             TglBufferData;
  glBufferSubData:                          TglBufferSubData;
  glClear:                                  TglClear;
  glClearColorx:                            TglClearColorx;
  glClearDepthx:                            TglClearDepthx;
  glClearStencil:                           TglClearStencil;
  glClientActiveTexture:                    TglClientActiveTexture;
  glClipPlanex:                             TglClipPlanex;
  glColor4ub:                               TglColor4ub;
  glColor4x:                                TglColor4x;
  glColorMask:                              TglColorMask;
  glColorPointer:                           TglColorPointer;
  glCompressedTexImage2D:                   TglCompressedTexImage2D;
  glCompressedTexSubImage2D:                TglCompressedTexSubImage2D;
  glCopyTexImage2D:                         TglCopyTexImage2D;
  glCopyTexSubImage2D:                      TglCopyTexSubImage2D;
  glCullFace:                               TglCullFace;
  glDeleteBuffers:                          TglDeleteBuffers;
  glDeleteTextures:                         TglDeleteTextures;
  glDepthFunc:                              TglDepthFunc;
  glDepthMask:                              TglDepthMask;
  glDepthRangex:                            TglDepthRangex;
  glDisable:                                TglDisable;
  glDisableClientState:                     TglDisableClientState;
  glDrawArrays:                             TglDrawArrays;
  glDrawElements:                           TglDrawElements;
  glEnable:                                 TglEnable;
  glEnableClientState:                      TglEnableClientState;
  glFinish:                                 TglFinish;
  glFlush:                                  TglFlush;
  glFogx:                                   TglFogx;
  glFogxv:                                  TglFogxv;
  glFrontFace:                              TglFrontFace;
  glFrustumx:                               TglFrustumx;
  glGetBooleanv:                            TglGetBooleanv;
  glGetBufferParameteriv:                   TglGetBufferParameteriv;
  glGetClipPlanex:                          TglGetClipPlanex;
  glGenBuffers:                             TglGenBuffers;
  glGenTextures:                            TglGenTextures;
  glGetError:                               TglGetError;
  glGetFixedv:                              TglGetFixedv;
  glGetIntegerv:                            TglGetIntegerv;
  glGetLightxv:                             TglGetLightxv;
  glGetMaterialxv:                          TglGetMaterialxv;
  glGetPointerv:                            TglGetPointerv;
  glGetString:                              TglGetString;
  glGetTexEnviv:                            TglGetTexEnviv;
  glGetTexEnvxv:                            TglGetTexEnvxv;
  glGetTexParameteriv:                      TglGetTexParameteriv;
  glGetTexParameterxv:                      TglGetTexParameterxv;
  glHint:                                   TglHint;
  glIsBuffer:                               TglIsBuffer;
  glIsEnabled:                              TglIsEnabled;
  glIsTexture:                              TglIsTexture;
  glLightModelx:                            TglLightModelx;
  glLightModelxv:                           TglLightModelxv;
  glLightx:                                 TglLightx;
  glLightxv:                                TglLightxv;
  glLineWidthx:                             TglLineWidthx;
  glLoadIdentity:                           TglLoadIdentity;
  glLoadMatrix:                             TglLoadMatrix;
  glLogicOp:                                TglLogicOp;
  glMaterialx:                              TglMaterialx;
  glMaterialxv:                             TglMaterialxv;
  glMatrixMode:                             TglMatrixMode;
  glMultMatrixx:                            TglMultMatrixx;
  glMultiTexCoord4x:                        TglMultiTexCoord4x;
  glNormal3x:                               TglNormal3x;
  glNormalPointer:                          TglNormalPointer;
  glOrthox:                                 TglOrthox;
  glPixelStorei:                            TglPixelStorei;
  glPointParameterx:                        TglPointParameterx;
  glPointParameterxv:                       TglPointParameterxv;
  glPointSizex:                             TglPointSizex;
  glPolygonOffsetx:                         TglPolygonOffsetx;
  glPopMatrix:                              TglPopMatrix;
  glPushMatrix:                             TglPushMatrix;
  glReadPixels:                             TglReadPixels;
  glRotatex:                                TglRotatex;
  glSampleCoverage:                         TglSampleCoverage;
  glSampleCoveragex:                        TglSampleCoveragex;
  glScalex:                                 TglScalex;
  glScissor:                                TglScissor;
  glShadeModel:                             TglShadeModel;
  glStencilFunc:                            TglStencilFunc;
  glStencilMask:                            TglStencilMask;
  glStencilOp:                              TglStencilOp;
  glTexCoordPointer:                        TglTexCoordPointer;
  glTexEnvi:                                TglTexEnvi;
  glTexEnvx:                                TglTexEnvx;
  glTexEnviv:                               TglTexEnviv;
  glTexEnvxv:                               TglTexEnvxv;
  glTexImage2D:                             TglTexImage2D;
  glTexParameteri:                          TglTexParameteri;
  glTexParameterx:                          TglTexParameterx;
  glTexParameteriv:                         TglTexParameteriv;
  glTexParameterxv:                         TglTexParameterxv;
  glTexSubImage2D:                          TglTexSubImage2D;
  glTranslatex:                             TglTranslatex;
  glVertexPointer:                          TglVertexPointer;
  glViewport:                               TglViewport;

{ ============================================== OpenGL ES 2.0 ======================================================= }
  glAttachShader:                           TglAttachShader;
  glBindAttribLocation:                     TglBindAttribLocation;
  glBindFramebuffer:                        TglBindFramebuffer;
  glBindRenderbuffer:                       TglBindRenderbuffer;
  glBlendColor:                             TglBlendColor;
  glBlendEquation:                          TglBlendEquation;
  glBlendEquationSeparate:                  TglBlendEquationSeparate;
  glBlendFuncSeparate:                      TglBlendFuncSeparate;
  glCheckFramebufferStatus:                 TglCheckFramebufferStatus;
  glCompileShader:                          TglCompileShader;
  glCreateProgram:                          TglCreateProgram;
  glCreateShader:                           TglCreateShader;
  glDeleteFramebuffers:                     TglDeleteFramebuffers;
  glDeleteProgram:                          TglDeleteProgram;
  glDeleteRenderbuffers:                    TglDeleteRenderbuffers;
  glDeleteShader:                           TglDeleteShader;
  glDetachShader:                           TglDetachShader;
  glDisableVertexAttribArray:               TglDisableVertexAttribArray;
  glEnableVertexAttribArray:                TglEnableVertexAttribArray;
  glFramebufferRenderbuffer:                TglFramebufferRenderbuffer;
  glFramebufferTexture2D:                   TglFramebufferTexture2D;
  glGenerateMipmap:                         TglGenerateMipmap;
  glGenFramebuffers:                        TglGenFramebuffers;
  glGenRenderbuffers:                       TglGenRenderbuffers;
  glGetActiveAttrib:                        TglGetActiveAttrib;
  glGetActiveUniform:                       TglGetActiveUniform;
  glGetAttachedShaders:                     TglGetAttachedShaders;
  glGetAttribLocation:                      TglGetAttribLocation;
  glGetFramebufferAttachmentParameteriv:    TglGetFramebufferAttachmentParameteriv;
  glGetProgramiv:                           TglGetProgramiv;
  glGetProgramInfoLog:                      TglGetProgramInfoLog;
  glGetRenderbufferParameteriv:             TglGetRenderbufferParameteriv;
  glGetShaderiv:                            TglGetShaderiv;
  glGetShaderInfoLog:                       TglGetShaderInfoLog;
  glGetShaderPrecisionFormat:               TglGetShaderPrecisionFormat;
  glGetShaderSource:                        TglGetShaderSource;
  glGetUniformfv:                           TglGetUniformfv;
  glGetUniformiv:                           TglGetUniformiv;
  glGetUniformLocation:                     TglGetUniformLocation;
  glGetVertexAttribfv:                      TglGetVertexAttribfv;
  glGetVertexAttribiv:                      TglGetVertexAttribiv;
  glGetVertexAttribPointerv:                TglGetVertexAttribPointerv;
  glIsFramebuffer:                          TglIsFramebuffer;
  glIsProgram:                              TglIsProgram;
  glIsRenderbuffer:                         TglIsRenderbuffer;
  glIsShader:                               TglIsShader;
  glLinkProgram:                            TglLinkProgram;
  glReleaseShaderCompiler:                  TglReleaseShaderCompiler;
  glRenderbufferStorage:                    TglRenderbufferStorage;
  glShaderBinary:                           TglShaderBinary;
  glShaderSource:                           TglShaderSource;
  glStencilFuncSeparate:                    TglStencilFuncSeparate;
  glStencilMaskSeparate:                    TglStencilMaskSeparate;
  glStencilOpSeparate:                      TglStencilOpSeparate;
  glUniform1f:                              TglUniform1f;
  glUniform1fv:                             TglUniform1fv;
  glUniform1i:                              TglUniform1i;
  glUniform1iv:                             TglUniform1iv;
  glUniform2f:                              TglUniform2f;
  glUniform2fv:                             TglUniform2fv;
  glUniform2i:                              TglUniform2i;
  glUniform2iv:                             TglUniform2iv;
  glUniform3f:                              TglUniform3f;
  glUniform3fv:                             TglUniform3fv;
  glUniform3i:                              TglUniform3i;
  glUniform3iv:                             TglUniform3iv;
  glUniform4f:                              TglUniform4f;
  glUniform4fv:                             TglUniform4fv;
  glUniform4i:                              TglUniform4i;
  glUniform4iv:                             TglUniform4iv;
  glUniformMatrix2fv:                       TglUniformMatrix2fv;
  glUniformMatrix3fv:                       TglUniformMatrix3fv;
  glUniformMatrix4fv:                       TglUniformMatrix4fv;
  glUseProgram:                             TglUseProgram;
  glValidateProgram:                        TglValidateProgram;
  glVertexAttrib1f:                         TglVertexAttrib1f;
  glVertexAttrib1fv:                        TglVertexAttrib1fv;
  glVertexAttrib2f:                         TglVertexAttrib2f;
  glVertexAttrib2fv:                        TglVertexAttrib2fv;
  glVertexAttrib3f:                         TglVertexAttrib3f;
  glVertexAttrib3fv:                        TglVertexAttrib3fv;
  glVertexAttrib4f:                         TglVertexAttrib4f;
  glVertexAttrib4fv:                        TglVertexAttrib4fv;
  glVertexAttribPointer:                    TglVertexAttribPointer;

{ ============================================== OpenGL ES 3.0 ======================================================= }
  glReadBuffer:                             TglReadBuffer;
  glDrawRangeElements:                      TglDrawRangeElements;
  glTexImage3D:                             TglTexImage3D;
  glTexSubImage3D:                          TglTexSubImage3D;
  glCopyTexSubImage3D:                      TglCopyTexSubImage3D;
  glCompressedTexImage3D:                   TglCompressedTexImage3D;
  glCompressedTexSubImage3D:                TglCompressedTexSubImage3D;
  glGenQueries:                             TglGenQueries;
  glDeleteQueries:                          TglDeleteQueries;
  glIsQuery:                                TglIsQuery;
  glBeginQuery:                             TglBeginQuery;
  glEndQuery:                               TglEndQuery;
  glGetQueryiv:                             TglGetQueryiv;
  glGetQueryObjectuiv:                      TglGetQueryObjectuiv;
  glUnmapBuffer:                            TglUnmapBuffer;
  glGetBufferPointerv:                      TglGetBufferPointerv;
  glDrawBuffers:                            TglDrawBuffers;
  glUniformMatrix2x3fv:                     TglUniformMatrix2x3fv;
  glUniformMatrix3x2fv:                     TglUniformMatrix3x2fv;
  glUniformMatrix2x4fv:                     TglUniformMatrix2x4fv;
  glUniformMatrix4x2fv:                     TglUniformMatrix4x2fv;
  glUniformMatrix3x4fv:                     TglUniformMatrix3x4fv;
  glUniformMatrix4x3fv:                     TglUniformMatrix4x3fv;
  glBlitFramebuffer:                        TglBlitFramebuffer;
  glRenderbufferStorageMultisample:         TglRenderbufferStorageMultisample;
  glFramebufferTextureLayer:                TglFramebufferTextureLayer;
  glMapBufferRange:                         TglMapBufferRange;
  glFlushMappedBufferRange:                 TglFlushMappedBufferRange;
  glBindVertexArray:                        TglBindVertexArray;
  glDeleteVertexArrays:                     TglDeleteVertexArrays;
  glGenVertexArrays:                        TglGenVertexArrays;
  glIsVertexArray:                          TglIsVertexArray;
  glGetIntegeriv:                           TglGetIntegeriv;
  glBeginTransformFeedback:                 TglBeginTransformFeedback;
  glEndTransformFeedback:                   TglEndTransformFeedback;
  glBindBufferRange:                        TglBindBufferRange;
  glBindBufferBase:                         TglBindBufferBase;
  glTransformFeedbackVaryings:              TglTransformFeedbackVaryings;
  glGetTransformFeedbackVarying:            TglGetTransformFeedbackVarying;
  glVertexAttribIPointer:                   TglVertexAttribIPointer;
  glGetVertexAttribIiv:                     TglGetVertexAttribIiv;
  glGetVertexAttribIuiv:                    TglGetVertexAttribIuiv;
  glVertexAttribI4i:                        TglVertexAttribI4i;
  glVertexAttribI4ui:                       TglVertexAttribI4ui;
  glVertexAttribI4iv:                       TglVertexAttribI4iv;
  glVertexAttribI4uiv:                      TglVertexAttribI4uiv;
  glGetUniformuiv:                          TglGetUniformuiv;
  glGetFragDataLocation:                    TglGetFragDataLocation;
  glUniform1ui:                             TglUniform1ui;
  glUniform2ui:                             TglUniform2ui;
  glUniform3ui:                             TglUniform3ui;
  glUniform4ui:                             TglUniform4ui;
  glUniform1uiv:                            TglUniform1uiv;
  glUniform2uiv:                            TglUniform2uiv;
  glUniform3uiv:                            TglUniform3uiv;
  glUniform4uiv:                            TglUniform4uiv;
  glClearBufferiv:                          TglClearBufferiv;
  glClearBufferuiv:                         TglClearBufferuiv;
  glClearBufferfv:                          TglClearBufferfv;
  glClearBufferfi:                          TglClearBufferfi;
  glGetStringi:                             TglGetStringi;
  glCopyBufferSubData:                      TglCopyBufferSubData;
  glGetUniformIndices:                      TglGetUniformIndices;
  glGetActiveUniformsiv:                    TglGetActiveUniformsiv;
  glGetUniformBlockIndex:                   TglGetUniformBlockIndex;
  glGetActiveUniformBlockiv:                TglGetActiveUniformBlockiv;
  glGetActiveUniformBlockName:              TglGetActiveUniformBlockName;
  glUniformBlockBinding:                    TglUniformBlockBinding;
  glDrawArraysInstanced:                    TglDrawArraysInstanced;
  glDrawElementsInstanced:                  TglDrawElementsInstanced;
  glFenceSync:                              TglFenceSync;
  glIsSync:                                 TglIsSync;
  glDeleteSync:                             TglDeleteSync;
  glClientWaitSync:                         TglClientWaitSync;
  glWaitSync:                               TglWaitSync;
  glGetInteger64v:                          TglGetInteger64v;
  glGetSynciv:                              TglGetSynciv;
  glGetInteger64iv:                         TglGetInteger64iv;
  glGetBufferParameteri64v:                 TglGetBufferParameteri64v;
  glGenSamplers:                            TglGenSamplers;
  glDeleteSamplers:                         TglDeleteSamplers;
  glIsSampler:                              TglIsSampler;
  glBindSampler:                            TglBindSampler;
  glSamplerParameteri:                      TglSamplerParameteri;
  glSamplerParameteriv:                     TglSamplerParameteriv;
  glSamplerParameterf:                      TglSamplerParameterf;
  glSamplerParameterfv:                     TglSamplerParameterfv;
  glGetSamplerParameteriv:                  TglGetSamplerParameteriv;
  glGetSamplerParameterfv:                  TglGetSamplerParameterfv;
  glVertexAttribDivisor:                    TglVertexAttribDivisor;
  glBindTransformFeedback:                  TglBindTransformFeedback;
  glDeleteTransformFeedbacks:               TglDeleteTransformFeedbacks;
  glGenTransformFeedbacks:                  TglGenTransformFeedbacks;
  glIsTransformFeedback:                    TglIsTransformFeedback;
  glPauseTransformFeedback:                 TglPauseTransformFeedback;
  glResumeTransformFeedback:                TglResumeTransformFeedback;
  glGetProgramBinary:                       TglGetProgramBinary;
  glProgramBinary:                          TglProgramBinary;
  glProgramParameteri:                      TglProgramParameteri;
  glInvalidateFramebuffer:                  TglInvalidateFramebuffer;
  glInvalidateSubFramebuffer:               TglInvalidateSubFramebuffer;
  glTexStorage2D:                           TglTexStorage2D;
  glTexStorage3D:                           TglTexStorage3D;
  glGetInternalformativ:                    TglGetInternalformativ;

{ ============================================== OpenGL ES 3.1 ======================================================= }
  glDispatchCompute:                        TglDispatchCompute;
  glDispatchComputeIndirect:                TglDispatchComputeIndirect;
  glDrawArraysIndirect:                     TglDrawArraysIndirect;
  glDrawElementsIndirect:                   TglDrawElementsIndirect;
  glFramebufferParameteri:                  TglFramebufferParameteri;
  glGetFramebufferParameteriv:              TglGetFramebufferParameteriv;
  glGetProgramInterfaceiv:                  TglGetProgramInterfaceiv;
  glGetProgramResourceIndex:                TglGetProgramResourceIndex;
  glGetProgramResourceName:                 TglGetProgramResourceName;
  glGetProgramResourceiv:                   TglGetProgramResourceiv;
  glGetProgramResourceLocation:             TglGetProgramResourceLocation;
  glUseProgramStages:                       TglUseProgramStages;
  glActiveShaderProgram:                    TglActiveShaderProgram;
  glCreateShaderProgramv:                   TglCreateShaderProgramv;
  glBindProgramPipeline:                    TglBindProgramPipeline;
  glDeleteProgramPipelines:                 TglDeleteProgramPipelines;
  glGenProgramPipelines:                    TglGenProgramPipelines;
  glIsProgramPipeline:                      TglIsProgramPipeline;
  glGetProgramPipelineiv:                   TglGetProgramPipelineiv;
  glProgramUniform1i:                       TglProgramUniform1i;
  glProgramUniform2i:                       TglProgramUniform2i;
  glProgramUniform3i:                       TglProgramUniform3i;
  glProgramUniform4i:                       TglProgramUniform4i;
  glProgramUniform1ui:                      TglProgramUniform1ui;
  glProgramUniform2ui:                      TglProgramUniform2ui;
  glProgramUniform3ui:                      TglProgramUniform3ui;
  glProgramUniform4ui:                      TglProgramUniform4ui;
  glProgramUniform1f:                       TglProgramUniform1f;
  glProgramUniform2f:                       TglProgramUniform2f;
  glProgramUniform3f:                       TglProgramUniform3f;
  glProgramUniform4f:                       TglProgramUniform4f;
  glProgramUniform1iv:                      TglProgramUniform1iv;
  glProgramUniform2iv:                      TglProgramUniform2iv;
  glProgramUniform3iv:                      TglProgramUniform3iv;
  glProgramUniform4iv:                      TglProgramUniform4iv;
  glProgramUniform1uiv:                     TglProgramUniform1uiv;
  glProgramUniform2uiv:                     TglProgramUniform2uiv;
  glProgramUniform3uiv:                     TglProgramUniform3uiv;
  glProgramUniform4uiv:                     TglProgramUniform4uiv;
  glProgramUniform1fv:                      TglProgramUniform1fv;
  glProgramUniform2fv:                      TglProgramUniform2fv;
  glProgramUniform3fv:                      TglProgramUniform3fv;
  glProgramUniform4fv:                      TglProgramUniform4fv;
  glProgramUniformMatrix2fv:                TglProgramUniformMatrix2fv;
  glProgramUniformMatrix3fv:                TglProgramUniformMatrix3fv;
  glProgramUniformMatrix4fv:                TglProgramUniformMatrix4fv;
  glProgramUniformMatrix2x3fv:              TglProgramUniformMatrix2x3fv;
  glProgramUniformMatrix3x2fv:              TglProgramUniformMatrix3x2fv;
  glProgramUniformMatrix2x4fv:              TglProgramUniformMatrix2x4fv;
  glProgramUniformMatrix4x2fv:              TglProgramUniformMatrix4x2fv;
  glProgramUniformMatrix3x4fv:              TglProgramUniformMatrix3x4fv;
  glProgramUniformMatrix4x3fv:              TglProgramUniformMatrix4x3fv;
  glValidateProgramPipeline:                TglValidateProgramPipeline;
  glGetProgramPipelineInfoLog:              TglGetProgramPipelineInfoLog;
  glBindImageTexture:                       TglBindImageTexture;
  glGetBooleaniv:                           TglGetBooleaniv;
  glMemoryBarrier:                          TglMemoryBarrier;
  glMemoryBarrierByRegion:                  TglMemoryBarrierByRegion;
  glTexStorage2DMultisample:                TglTexStorage2DMultisample;
  glGetMultisamplefv:                       TglGetMultisamplefv;
  glSampleMaski:                            TglSampleMaski;
  glGetTexLevelParameteriv:                 TglGetTexLevelParameteriv;
  glGetTexLevelParameterfv:                 TglGetTexLevelParameterfv;
  glBindVertexBuffer:                       TglBindVertexBuffer;
  glVertexAttribFormat:                     TglVertexAttribFormat;
  glVertexAttribIFormat:                    TglVertexAttribIFormat;
  glVertexAttribBinding:                    TglVertexAttribBinding;
  glVertexBindingDivisor:                   TglVertexBindingDivisor;

{ =============================================== Extensions ========================================================= }
{ GL_KHR_blend_equation_advanced }
const
  GL_MULTIPLY_KHR                                         = $9294;
  GL_SCREEN_KHR                                           = $9295;
  GL_OVERLAY_KHR                                          = $9296;
  GL_DARKEN_KHR                                           = $9297;
  GL_LIGHTEN_KHR                                          = $9298;
  GL_COLORDODGE_KHR                                       = $9299;
  GL_COLORBURN_KHR                                        = $929A;
  GL_HARDLIGHT_KHR                                        = $929B;
  GL_SOFTLIGHT_KHR                                        = $929C;
  GL_DIFFERENCE_KHR                                       = $929E;
  GL_EXCLUSION_KHR                                        = $92A0;
  GL_HSL_HUE_KHR                                          = $92AD;
  GL_HSL_SATURATION_KHR                                   = $92AE;
  GL_HSL_COLOR_KHR                                        = $92AF;
  GL_HSL_LUMINOSITY_KHR                                   = $92B0;
type
  TglBlendBarrierKHR                                      = procedure; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glBlendBarrierKHR:                                        TglBlendBarrierKHR;

{ GL_KHR_blend_equation_advanced_coherent }
const
  GL_BLEND_ADVANCED_COHERENT_KHR                          = $9285;

{ GL_KHR_context_flush_control }
const
  GL_CONTEXT_RELEASE_BEHAVIOR_KHR                         = $82FB;
  GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_KHR                   = $82FC;

{ GL_KHR_debug }
const
  GL_SAMPLER                                              = $82E6;
  GL_DEBUG_OUTPUT_SYNCHRONOUS_KHR                         = $8242;
  GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_KHR                 = $8243;
  GL_DEBUG_CALLBACK_FUNCTION_KHR                          = $8244;
  GL_DEBUG_CALLBACK_USER_PARAM_KHR                        = $8245;
  GL_DEBUG_SOURCE_API_KHR                                 = $8246;
  GL_DEBUG_SOURCE_WINDOW_SYSTEM_KHR                       = $8247;
  GL_DEBUG_SOURCE_SHADER_COMPILER_KHR                     = $8248;
  GL_DEBUG_SOURCE_THIRD_PARTY_KHR                         = $8249;
  GL_DEBUG_SOURCE_APPLICATION_KHR                         = $824A;
  GL_DEBUG_SOURCE_OTHER_KHR                               = $824B;
  GL_DEBUG_TYPE_ERROR_KHR                                 = $824C;
  GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_KHR                   = $824D;
  GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_KHR                    = $824E;
  GL_DEBUG_TYPE_PORTABILITY_KHR                           = $824F;
  GL_DEBUG_TYPE_PERFORMANCE_KHR                           = $8250;
  GL_DEBUG_TYPE_OTHER_KHR                                 = $8251;
  GL_DEBUG_TYPE_MARKER_KHR                                = $8268;
  GL_DEBUG_TYPE_PUSH_GROUP_KHR                            = $8269;
  GL_DEBUG_TYPE_POP_GROUP_KHR                             = $826A;
  GL_DEBUG_SEVERITY_NOTIFICATION_KHR                      = $826B;
  GL_MAX_DEBUG_GROUP_STACK_DEPTH_KHR                      = $826C;
  GL_DEBUG_GROUP_STACK_DEPTH_KHR                          = $826D;
  GL_BUFFER_KHR                                           = $82E0;
  GL_SHADER_KHR                                           = $82E1;
  GL_PROGRAM_KHR                                          = $82E2;
  GL_VERTEX_ARRAY_KHR                                     = $8074;
  GL_QUERY_KHR                                            = $82E3;
  GL_SAMPLER_KHR                                          = $82E6;
  GL_MAX_LABEL_LENGTH_KHR                                 = $82E8;
  GL_MAX_DEBUG_MESSAGE_LENGTH_KHR                         = $9143;
  GL_MAX_DEBUG_LOGGED_MESSAGES_KHR                        = $9144;
  GL_DEBUG_LOGGED_MESSAGES_KHR                            = $9145;
  GL_DEBUG_SEVERITY_HIGH_KHR                              = $9146;
  GL_DEBUG_SEVERITY_MEDIUM_KHR                            = $9147;
  GL_DEBUG_SEVERITY_LOW_KHR                               = $9148;
  GL_DEBUG_OUTPUT_KHR                                     = $92E0;
  GL_CONTEXT_FLAG_DEBUG_BIT_KHR                           = $00000002;
  GL_STACK_OVERFLOW_KHR                                   = $0503;
  GL_STACK_UNDERFLOW_KHR                                  = $0504;
type
  TglDebugProcKHR                                         = procedure(aSource: GLenum; aType: GLenum; aId: GLuint; aSeverity: GLenum; aLength: GLsizei; const aMessage: PGLchar; const aUserParam: Pointer); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDebugMessageControlKHR                               = procedure(aSource: GLenum; aType: GLenum; aSeverity: GLenum; aCount: GLsizei; const aIds: PGLuint; aEnabled: GLboolean); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDebugMessageInsertKHR                                = procedure(aSource: GLenum; aType: GLenum; aId: GLuint; aSeverity: GLenum; aLength: GLsizei; const aBuf: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDebugMessageCallbackKHR                              = procedure(aCallback: TglDebugProcKHR; const aUserParam: Pointer); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetDebugMessageLogKHR                                = function (aCount: GLuint; aBufSize: GLsizei; aSources: PGLenum; aTypes: PGLenum; aIds: PGLuint; aSeverities: PGLenum; aLengths: PGLsizei; aMessageLog: PGLchar): GLuint; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglPushDebugGroupKHR                                    = procedure(aSource: GLenum; aId: GLuint; aLength: GLsizei; const aMessage: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglPopDebugGroupKHR                                     = procedure; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglObjectLabelKHR                                       = procedure(aIdentifier: GLenum; aName: GLuint; aLength: GLsizei; const aLabel: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetObjectLabelKHR                                    = procedure(aIdentifier: GLenum; aName: GLuint; aBufSize: GLsizei; aLength: PGLsizei; aLabel: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglObjectPtrLabelKHR                                    = procedure(const aPtr: Pointer; aLength: GLsizei; const aLabel: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetObjectPtrLabelKHR                                 = procedure(const aPtr: Pointer; aBufSize: GLsizei; aLength: PGLsizei; aLabel: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetPointervKHR                                       = procedure(aPname: GLenum; aParams: PPGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glDebugMessageControlKHR:                                 TglDebugMessageControlKHR;
  glDebugMessageInsertKHR:                                  TglDebugMessageInsertKHR;
  glDebugMessageCallbackKHR:                                TglDebugMessageCallbackKHR;
  glGetDebugMessageLogKHR:                                  TglGetDebugMessageLogKHR;
  glPushDebugGroupKHR:                                      TglPushDebugGroupKHR;
  glPopDebugGroupKHR:                                       TglPopDebugGroupKHR;
  glObjectLabelKHR:                                         TglObjectLabelKHR;
  glGetObjectLabelKHR:                                      TglGetObjectLabelKHR;
  glObjectPtrLabelKHR:                                      TglObjectPtrLabelKHR;
  glGetObjectPtrLabelKHR:                                   TglGetObjectPtrLabelKHR;
  glGetPointervKHR:                                         TglGetPointervKHR;

{ GL_KHR_robust_buffer_access_behavior }
  // none

{ GL_KHR_robustness }
const
  GL_CONTEXT_ROBUST_ACCESS_KHR                            = $90F3;
  GL_LOSE_CONTEXT_ON_RESET_KHR                            = $8252;
  GL_GUILTY_CONTEXT_RESET_KHR                             = $8253;
  GL_INNOCENT_CONTEXT_RESET_KHR                           = $8254;
  GL_UNKNOWN_CONTEXT_RESET_KHR                            = $8255;
  GL_RESET_NOTIFICATION_STRATEGY_KHR                      = $8256;
  GL_NO_RESET_NOTIFICATION_KHR                            = $8261;
  GL_CONTEXT_LOST_KHR                                     = $0507;
type
  TglGetGraphicsResetStatusKHR                            = function : GLenum; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglReadnPixelsKHR                                       = procedure(x: GLint; y: GLint; aWidth: GLsizei; aHeight: GLsizei; aFormat: GLenum; aType: GLenum; aBufSize: GLsizei; aData: Pointer); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetnUniformfvKHR                                     = procedure(aProgram: GLuint; aLocation: GLint; aBufSize: GLsizei; aParams: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetnUniformivKHR                                     = procedure(aProgram: GLuint; aLocation: GLint; aBufSize: GLsizei; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetnUniformuivKHR                                    = procedure(aProgram: GLuint; aLocation: GLint; aBufSize: GLsizei; aParams: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glGetGraphicsResetStatusKHR:                              TglGetGraphicsResetStatusKHR;
  glReadnPixelsKHR:                                         TglReadnPixelsKHR;
  glGetnUniformfvKHR:                                       TglGetnUniformfvKHR;
  glGetnUniformivKHR:                                       TglGetnUniformivKHR;
  glGetnUniformuivKHR:                                      TglGetnUniformuivKHR;

{ GL_KHR_texture_compression_astc_hdr }
const
  GL_COMPRESSED_RGBA_ASTC_4x4_KHR                         = $93B0;
  GL_COMPRESSED_RGBA_ASTC_5x4_KHR                         = $93B1;
  GL_COMPRESSED_RGBA_ASTC_5x5_KHR                         = $93B2;
  GL_COMPRESSED_RGBA_ASTC_6x5_KHR                         = $93B3;
  GL_COMPRESSED_RGBA_ASTC_6x6_KHR                         = $93B4;
  GL_COMPRESSED_RGBA_ASTC_8x5_KHR                         = $93B5;
  GL_COMPRESSED_RGBA_ASTC_8x6_KHR                         = $93B6;
  GL_COMPRESSED_RGBA_ASTC_8x8_KHR                         = $93B7;
  GL_COMPRESSED_RGBA_ASTC_10x5_KHR                        = $93B8;
  GL_COMPRESSED_RGBA_ASTC_10x6_KHR                        = $93B9;
  GL_COMPRESSED_RGBA_ASTC_10x8_KHR                        = $93BA;
  GL_COMPRESSED_RGBA_ASTC_10x10_KHR                       = $93BB;
  GL_COMPRESSED_RGBA_ASTC_12x10_KHR                       = $93BC;
  GL_COMPRESSED_RGBA_ASTC_12x12_KHR                       = $93BD;
  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR                 = $93D0;
  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR                 = $93D1;
  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR                 = $93D2;
  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR                 = $93D3;
  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR                 = $93D4;
  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR                 = $93D5;
  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR                 = $93D6;
  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR                 = $93D7;
  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR                = $93D8;
  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR                = $93D9;
  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR                = $93DA;
  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR               = $93DB;
  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR               = $93DC;
  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR               = $93DD;

{ GL_KHR_texture_compression_astc_ldr }
  // none

{ GL_OES_EGL_image }
type
  GLeglImageOES                                           = Pointer;
  TglEGLImageTargetTexture2DOES                           = procedure(aTarget: GLenum; aImage: GLeglImageOES); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglEGLImageTargetRenderbufferStorageOES                 = procedure(aTarget: GLenum; aImage: GLeglImageOES); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glEGLImageTargetTexture2DOES:                             TglEGLImageTargetTexture2DOES;
  glEGLImageTargetRenderbufferStorageOES:                   TglEGLImageTargetRenderbufferStorageOES;

{ GL_OES_EGL_image_external }
const
  GL_TEXTURE_EXTERNAL_OES                                 = $8D65;
  GL_TEXTURE_BINDING_EXTERNAL_OES                         = $8D67;
  GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES                     = $8D68;
  GL_SAMPLER_EXTERNAL_OES                                 = $8D66;

{ GL_OES_compressed_ETC1_RGB8_sub_texture }
  // none

{ GL_OES_compressed_ETC1_RGB8_texture }
const
  GL_ETC1_RGB8_OES                                        = $8D64;

{ GL_OES_compressed_paletted_texture }
const
  GL_PALETTE4_RGB8_OES                                    = $8B90;
  GL_PALETTE4_RGBA8_OES                                   = $8B91;
  GL_PALETTE4_R5_G6_B5_OES                                = $8B92;
  GL_PALETTE4_RGBA4_OES                                   = $8B93;
  GL_PALETTE4_RGB5_A1_OES                                 = $8B94;
  GL_PALETTE8_RGB8_OES                                    = $8B95;
  GL_PALETTE8_RGBA8_OES                                   = $8B96;
  GL_PALETTE8_R5_G6_B5_OES                                = $8B97;
  GL_PALETTE8_RGBA4_OES                                   = $8B98;
  GL_PALETTE8_RGB5_A1_OES                                 = $8B99;

{ GL_OES_depth24 }
const
  GL_DEPTH_COMPONENT24_OES                                = $81A6;

{ GL_OES_depth32 }
const
  GL_DEPTH_COMPONENT32_OES                                = $81A7;

{ GL_OES_depth_texture }
  // none

{ GL_OES_element_index_uint }
  // none

{ GL_OES_fbo_render_mipmap }
  // none

{ GL_OES_fragment_precision_high }
  // none

{ GL_OES_get_program_binary }
const
  GL_PROGRAM_BINARY_LENGTH_OES                            = $8741;
  GL_NUM_PROGRAM_BINARY_FORMATS_OES                       = $87FE;
  GL_PROGRAM_BINARY_FORMATS_OES                           = $87FF;
type
  TglGetProgramBinaryOES                                  = procedure(aProgram: GLuint; aBufSize: GLsizei; aLength: PGLsizei; aBinaryFormat: PGLenum; aBinary: Pointer); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramBinaryOES                                     = procedure(aProgram: GLuint; aBinaryFormat: GLenum; const aBinary: Pointer; aLength: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glGetProgramBinaryOES:                                    TglGetProgramBinaryOES;
  glProgramBinaryOES:                                       TglProgramBinaryOES;

{ GL_OES_mapbuffer }
const
  GL_WRITE_ONLY_OES                                       = $88B9;
  GL_BUFFER_ACCESS_OES                                    = $88BB;
  GL_BUFFER_MAPPED_OES                                    = $88BC;
  GL_BUFFER_MAP_POINTER_OES                               = $88BD;
type
  TglMapBufferOES                                         = function (aTarget: GLenum; aAccess: GLenum): Pointer; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUnmapBufferOES                                       = function (aTarget: GLenum): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetBufferPointervOES                                 = procedure(aTarget: GLenum; aPname: GLenum; aParams: PPGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glMapBufferOES:                                           TglMapBufferOES;
  glUnmapBufferOES:                                         TglUnmapBufferOES;
  glGetBufferPointervOES:                                   TglGetBufferPointervOES;

{ GL_OES_packed_depth_stencil }
const
  GL_DEPTH_STENCIL_OES                                    = $84F9;
  GL_UNSIGNED_INT_24_8_OES                                = $84FA;
  GL_DEPTH24_STENCIL8_OES                                 = $88F0;

{ GL_OES_required_internalformat }
const
  GL_ALPHA8_OES                                           = $803C;
  GL_DEPTH_COMPONENT16_OES                                = $81A5;
  GL_LUMINANCE4_ALPHA4_OES                                = $8043;
  GL_LUMINANCE8_ALPHA8_OES                                = $8045;
  GL_LUMINANCE8_OES                                       = $8040;
  GL_RGBA4_OES                                            = $8056;
  GL_RGB5_A1_OES                                          = $8057;
  GL_RGB565_OES                                           = $8D62;
  GL_RGB8_OES                                             = $8051;
  GL_RGBA8_OES                                            = $8058;
  GL_RGB10_EXT                                            = $8052;
  GL_RGB10_A2_EXT                                         = $8059;

{ GL_OES_rgb8_rgba8 }
  // none

{ GL_OES_sample_shading }
const
  GL_SAMPLE_SHADING_OES                                   = $8C36;
  GL_MIN_SAMPLE_SHADING_VALUE_OES                         = $8C37;
type
  TglMinSampleShadingOES                                  = procedure(aValue: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glMinSampleShadingOES:                                    TglMinSampleShadingOES;

{ GL_OES_sample_
variables }
  // none

{ GL_OES_shader_image_atomic }
  // none

{ GL_OES_shader_multisample_interpolation }
const
  GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_OES                = $8E5B;
  GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_OES                = $8E5C;
  GL_FRAGMENT_INTERPOLATION_OFFSET_BITS_OES               = $8E5D;

{ GL_OES_standard_derivatives }
const
  GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES                  = $8B8B;

{ GL_OES_stencil1 }
const
  GL_STENCIL_INDEX1_OES                                   = $8D46;

{ GL_OES_stencil4 }
const
  GL_STENCIL_INDEX4_OES                                   = $8D47;

{ GL_OES_surfaceless_context }
const
  GL_FRAMEBUFFER_UNDEFINED_OES                            = $8219;

{ GL_OES_texture_3D }
const
  GL_TEXTURE_WRAP_R_OES                                   = $8072;
  GL_TEXTURE_3D_OES                                       = $806F;
  GL_TEXTURE_BINDING_3D_OES                               = $806A;
  GL_MAX_3D_TEXTURE_SIZE_OES                              = $8073;
  GL_SAMPLER_3D_OES                                       = $8B5F;
  GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_OES        = $8CD4;
type
  TglTexImage3DOES                                        = procedure(aTarget: GLenum; aLevel: GLint; aInternalformat: GLenum; aWidth: GLsizei; aHeight: GLsizei; aDepth: GLsizei; aBorder: GLint; aFormat: GLenum; aType: GLenum; const aPixels: Pointer); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglTexSubImage3DOES                                     = procedure(aTarget: GLenum; aLevel: GLint; aXoffset: GLint; aYoffset: GLint; aZoffset: GLint; aWidth: GLsizei; aHeight: GLsizei; aDepth: GLsizei; aFormat: GLenum; aType: GLenum; const aPixels: Pointer); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglCopyTexSubImage3DOES                                 = procedure(aTarget: GLenum; aLevel: GLint; aXoffset: GLint; aYoffset: GLint; aZoffset: GLint; x: GLint; y: GLint; aWidth: GLsizei; aHeight: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglCompressedTexImage3DOES                              = procedure(aTarget: GLenum; aLevel: GLint; aInternalformat: GLenum; aWidth: GLsizei; aHeight: GLsizei; aDepth: GLsizei; aBorder: GLint; aImageSize: GLsizei; const aData: Pointer); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglCompressedTexSubImage3DOES                           = procedure(aTarget: GLenum; aLevel: GLint; aXoffset: GLint; aYoffset: GLint; aZoffset: GLint; aWidth: GLsizei; aHeight: GLsizei; aDepth: GLsizei; aFormat: GLenum; aImageSize: GLsizei; const aData: Pointer); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglFramebufferTexture3DOES                              = procedure(aTarget: GLenum; aAttachment: GLenum; aTextarget: GLenum; aTexture: GLuint; aLevel: GLint; aZoffset: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glTexImage3DOES:                                          TglTexImage3DOES;
  glTexSubImage3DOES:                                       TglTexSubImage3DOES;
  glCopyTexSubImage3DOES:                                   TglCopyTexSubImage3DOES;
  glCompressedTexImage3DOES:                                TglCompressedTexImage3DOES;
  glCompressedTexSubImage3DOES:                             TglCompressedTexSubImage3DOES;
  glFramebufferTexture3DOES:                                TglFramebufferTexture3DOES;

{ GL_OES_texture_compression_astc }
const
  GL_COMPRESSED_RGBA_ASTC_3x3x3_OES                       = $93C0;
  GL_COMPRESSED_RGBA_ASTC_4x3x3_OES                       = $93C1;
  GL_COMPRESSED_RGBA_ASTC_4x4x3_OES                       = $93C2;
  GL_COMPRESSED_RGBA_ASTC_4x4x4_OES                       = $93C3;
  GL_COMPRESSED_RGBA_ASTC_5x4x4_OES                       = $93C4;
  GL_COMPRESSED_RGBA_ASTC_5x5x4_OES                       = $93C5;
  GL_COMPRESSED_RGBA_ASTC_5x5x5_OES                       = $93C6;
  GL_COMPRESSED_RGBA_ASTC_6x5x5_OES                       = $93C7;
  GL_COMPRESSED_RGBA_ASTC_6x6x5_OES                       = $93C8;
  GL_COMPRESSED_RGBA_ASTC_6x6x6_OES                       = $93C9;
  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_3x3x3_OES               = $93E0;
  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x3x3_OES               = $93E1;
  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4x3_OES               = $93E2;
  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4x4_OES               = $93E3;
  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4x4_OES               = $93E4;
  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5x4_OES               = $93E5;
  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5x5_OES               = $93E6;
  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5x5_OES               = $93E7;
  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x5_OES               = $93E8;
  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x6_OES               = $93E9;

{ GL_OES_texture_float }
  // none

{ GL_OES_texture_float_linear }
  // none

{ GL_OES_texture_half_float }
const
  GL_HALF_FLOAT_OES                                       = $8D61;

{ GL_OES_texture_half_float_linear }
  // none

{ GL_OES_texture_npot }
  // none

{ GL_OES_texture_stencil8 }
const
  GL_STENCIL_INDEX_OES                                    = $1901;
  GL_STENCIL_INDEX8_OES                                   = $8D48;

{ GL_OES_texture_storage_multisample_2d_array }
const
  GL_TEXTURE_2D_MULTISAMPLE_ARRAY_OES                     = $9102;
  GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY_OES             = $9105;
  GL_SAMPLER_2D_MULTISAMPLE_ARRAY_OES                     = $910B;
  GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY_OES                 = $910C;
  GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY_OES        = $910D;
type
  TglTexStorage3DMultisampleOES                           = procedure(aTarget: GLenum; aSamples: GLsizei; aInternalformat: GLenum; aWidth: GLsizei; aHeight: GLsizei; aDepth: GLsizei; aFixedsamplelocations: GLboolean); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glTexStorage3DMultisampleOES:                             TglTexStorage3DMultisampleOES;

{ GL_OES_vertex_array_object }
const
  GL_VERTEX_ARRAY_BINDING_OES                             = $85B5;
type
  TglBindVertexArrayOES                                   = procedure(aArray: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDeleteVertexArraysOES                                = procedure(n: GLsizei; const aArrays: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGenVertexArraysOES                                   = procedure(n: GLsizei; aArrays: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglIsVertexArrayOES                                     = function (aArray: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glBindVertexArrayOES:                                     TglBindVertexArrayOES;
  glDeleteVertexArraysOES:                                  TglDeleteVertexArraysOES;
  glGenVertexArraysOES:                                     TglGenVertexArraysOES;
  glIsVertexArrayOES:                                       TglIsVertexArrayOES;

{ GL_OES_vertex_half_float }
  // none

{ GL_OES_vertex_type_10_10_10_2 }
const
  GL_UNSIGNED_INT_10_10_10_2_OES                          = $8DF6;
  GL_INT_10_10_10_2_OES                                   = $8DF7;

{ GL_AMD_compressed_3DC_texture }
const
  GL_3DC_X_AMD                                            = $87F9;
  GL_3DC_XY_AMD                                           = $87FA;

{ GL_AMD_compressed_ATC_texture }
const
  GL_ATC_RGB_AMD                                          = $8C92;
  GL_ATC_RGBA_EXPLICIT_ALPHA_AMD                          = $8C93;
  GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD                      = $87EE;

{ GL_AMD_performance_monitor }
const
  GL_COUNTER_TYPE_AMD                                     = $8BC0;
  GL_COUNTER_RANGE_AMD                                    = $8BC1;
  GL_UNSIGNED_INT64_AMD                                   = $8BC2;
  GL_PERCENTAGE_AMD                                       = $8BC3;
  GL_PERFMON_RESULT_AVAILABLE_AMD                         = $8BC4;
  GL_PERFMON_RESULT_SIZE_AMD                              = $8BC5;
  GL_PERFMON_RESULT_AMD                                   = $8BC6;
type
  TglGetPerfMonitorGroupsAMD                              = procedure(aNumGroups: PGLint; aGroupsSize: GLsizei; aGroups: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetPerfMonitorCountersAMD                            = procedure(aGroup: GLuint; aNumCounters: PGLint; aMaxActiveCounters: PGLint; aCounterSize: GLsizei; aCounters: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetPerfMonitorGroupStringAMD                         = procedure(aGroup: GLuint; aBufSize: GLsizei; aLength: PGLsizei; aGroupString: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetPerfMonitorCounterStringAMD                       = procedure(aGroup: GLuint; aCounter: GLuint; aBufSize: GLsizei; aLength: PGLsizei; aCounterString: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetPerfMonitorCounterInfoAMD                         = procedure(aGroup: GLuint; aCounter: GLuint; aPname: GLenum; aData: Pointer); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGenPerfMonitorsAMD                                   = procedure(n: GLsizei; aMonitors: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDeletePerfMonitorsAMD                                = procedure(n: GLsizei; aMonitors: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglSelectPerfMonitorCountersAMD                         = procedure(aMonitor: GLuint; aEnable: GLboolean; aGroup: GLuint; aNumCounters: GLint; aCounterList: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglBeginPerfMonitorAMD                                  = procedure(aMonitor: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglEndPerfMonitorAMD                                    = procedure(aMonitor: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetPerfMonitorCounterDataAMD                         = procedure(aMonitor: GLuint; aPname: GLenum; aDataSize: GLsizei; aData: PGLuint; aBytesWritten: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glGetPerfMonitorGroupsAMD:                                TglGetPerfMonitorGroupsAMD;
  glGetPerfMonitorCountersAMD:                              TglGetPerfMonitorCountersAMD;
  glGetPerfMonitorGroupStringAMD:                           TglGetPerfMonitorGroupStringAMD;
  glGetPerfMonitorCounterStringAMD:                         TglGetPerfMonitorCounterStringAMD;
  glGetPerfMonitorCounterInfoAMD:                           TglGetPerfMonitorCounterInfoAMD;
  glGenPerfMonitorsAMD:                                     TglGenPerfMonitorsAMD;
  glDeletePerfMonitorsAMD:                                  TglDeletePerfMonitorsAMD;
  glSelectPerfMonitorCountersAMD:                           TglSelectPerfMonitorCountersAMD;
  glBeginPerfMonitorAMD:                                    TglBeginPerfMonitorAMD;
  glEndPerfMonitorAMD:                                      TglEndPerfMonitorAMD;
  glGetPerfMonitorCounterDataAMD:                           TglGetPerfMonitorCounterDataAMD;

{ GL_AMD_program_binary_Z400 }
const
  GL_Z400_BINARY_AMD                                      = $8740;

{ GL_ANDROID_extension_pack_es31a }
  // none

{ GL_ANGLE_depth_texture }
  // none

{ GL_ANGLE_framebuffer_blit }
const
  GL_READ_FRAMEBUFFER_ANGLE                               = $8CA8;
  GL_DRAW_FRAMEBUFFER_ANGLE                               = $8CA9;
  GL_DRAW_FRAMEBUFFER_BINDING_ANGLE                       = $8CA6;
  GL_READ_FRAMEBUFFER_BINDING_ANGLE                       = $8CAA;
type
  TglBlitFramebufferANGLE                                 = procedure(aSrcX0: GLint; aSrcY0: GLint; aSrcX1: GLint; aSrcY1: GLint; aDstX0: GLint; aDstY0: GLint; aDstX1: GLint; aDstY1: GLint; aMask: GLbitfield; aFilter: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glBlitFramebufferANGLE:                                   TglBlitFramebufferANGLE;

{ GL_ANGLE_framebuffer_multisample }
const
  GL_RENDERBUFFER_SAMPLES_ANGLE                           = $8CAB;
  GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_ANGLE             = $8D56;
  GL_MAX_SAMPLES_ANGLE                                    = $8D57;
type
  TglRenderbufferStorageMultisampleANGLE                  = procedure(aTarget: GLenum; aSamples: GLsizei; aInternalformat: GLenum; aWidth: GLsizei; aHeight: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glRenderbufferStorageMultisampleANGLE:                    TglRenderbufferStorageMultisampleANGLE;

{ GL_ANGLE_instanced_arrays }
const
  GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE                    = $88FE;
type
  TglDrawArraysInstancedANGLE                             = procedure(aMode: GLenum; aFirst: GLint; aCount: GLsizei; aPrimcount: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDrawElementsInstancedANGLE                           = procedure(aMode: GLenum; aCount: GLsizei; aType: GLenum; const aIndices: Pointer; aPrimcount: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglVertexAttribDivisorANGLE                             = procedure(aIndex: GLuint; aDivisor: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glDrawArraysInstancedANGLE:                               TglDrawArraysInstancedANGLE;
  glDrawElementsInstancedANGLE:                             TglDrawElementsInstancedANGLE;
  glVertexAttribDivisorANGLE:                               TglVertexAttribDivisorANGLE;

{ GL_ANGLE_pack_reverse_row_order }
const
  GL_PACK_REVERSE_ROW_ORDER_ANGLE                         = $93A4;

{ GL_ANGLE_program_binary }
const
  GL_PROGRAM_BINARY_ANGLE                                 = $93A6;

{ GL_ANGLE_texture_compression_dxt3 }
const
  GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE                      = $83F2;

{ GL_ANGLE_texture_compression_dxt5 }
const
  GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE                      = $83F3;

{ GL_ANGLE_texture_usage }
const
  GL_TEXTURE_USAGE_ANGLE                                  = $93A2;
  GL_FRAMEBUFFER_ATTACHMENT_ANGLE                         = $93A3;

{ GL_ANGLE_translated_shader_source }
const
  GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE                = $93A0;
type
  TglGetTranslatedShaderSourceANGLE                       = procedure(aShader: GLuint; aBufsize: GLsizei; aLength: PGLsizei; aSource: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glGetTranslatedShaderSourceANGLE:                         TglGetTranslatedShaderSourceANGLE;

{ GL_APPLE_clip_distance }
const
  GL_MAX_CLIP_DISTANCES_APPLE                             = $0D32;
  GL_CLIP_DISTANCE0_APPLE                                 = $3000;
  GL_CLIP_DISTANCE1_APPLE                                 = $3001;
  GL_CLIP_DISTANCE2_APPLE                                 = $3002;
  GL_CLIP_DISTANCE3_APPLE                                 = $3003;
  GL_CLIP_DISTANCE4_APPLE                                 = $3004;
  GL_CLIP_DISTANCE5_APPLE                                 = $3005;
  GL_CLIP_DISTANCE6_APPLE                                 = $3006;
  GL_CLIP_DISTANCE7_APPLE                                 = $3007;

{ GL_APPLE_color_buffer_packed_float }
  // none

{ GL_APPLE_copy_texture_levels }
type
  TglCopyTextureLevelsAPPLE                               = procedure(aDestinationTexture: GLuint; aSourceTexture: GLuint; aSourceBaseLevel: GLint; aSourceLevelCount: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glCopyTextureLevelsAPPLE:                                 TglCopyTextureLevelsAPPLE;

{ GL_APPLE_framebuffer_multisample }
const
  GL_RENDERBUFFER_SAMPLES_APPLE                           = $8CAB;
  GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_APPLE             = $8D56;
  GL_MAX_SAMPLES_APPLE                                    = $8D57;
  GL_READ_FRAMEBUFFER_APPLE                               = $8CA8;
  GL_DRAW_FRAMEBUFFER_APPLE                               = $8CA9;
  GL_DRAW_FRAMEBUFFER_BINDING_APPLE                       = $8CA6;
  GL_READ_FRAMEBUFFER_BINDING_APPLE                       = $8CAA;
type
  TglRenderbufferStorageMultisampleAPPLE                  = procedure(aTarget: GLenum; aSamples: GLsizei; aInternalformat: GLenum; aWidth: GLsizei; aHeight: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglResolveMultisampleFramebufferAPPLE                   = procedure; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glRenderbufferStorageMultisampleAPPLE:                    TglRenderbufferStorageMultisampleAPPLE;
  glResolveMultisampleFramebufferAPPLE:                     TglResolveMultisampleFramebufferAPPLE;

{ GL_APPLE_rgb_422 }
const
  GL_RGB_422_APPLE                                        = $8A1F;
  GL_UNSIGNED_SHORT_8_8_APPLE                             = $85BA;
  GL_UNSIGNED_SHORT_8_8_REV_APPLE                         = $85BB;
  GL_RGB_RAW_422_APPLE                                    = $8A51;

{ GL_APPLE_sync }
const
  GL_SYNC_OBJECT_APPLE                                    = $8A53;
  GL_MAX_SERVER_WAIT_TIMEOUT_APPLE                        = $9111;
  GL_OBJECT_TYPE_APPLE                                    = $9112;
  GL_SYNC_CONDITION_APPLE                                 = $9113;
  GL_SYNC_STATUS_APPLE                                    = $9114;
  GL_SYNC_FLAGS_APPLE                                     = $9115;
  GL_SYNC_FENCE_APPLE                                     = $9116;
  GL_SYNC_GPU_COMMANDS_COMPLETE_APPLE                     = $9117;
  GL_UNSIGNALED_APPLE                                     = $9118;
  GL_SIGNALED_APPLE                                       = $9119;
  GL_ALREADY_SIGNALED_APPLE                               = $911A;
  GL_TIMEOUT_EXPIRED_APPLE                                = $911B;
  GL_CONDITION_SATISFIED_APPLE                            = $911C;
  GL_WAIT_FAILED_APPLE                                    = $911D;
  GL_SYNC_FLUSH_COMMANDS_BIT_APPLE                        = $00000001;
  GL_TIMEOUT_IGNORED_APPLE                                = $FFFFFFFFFFFFFFFF;
type
  TglFenceSyncAPPLE                                       = function (aCondition: GLenum; aFlags: GLbitfield): GLsync; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglIsSyncAPPLE                                          = function (aSync: GLsync): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDeleteSyncAPPLE                                      = procedure(aSync: GLsync); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglClientWaitSyncAPPLE                                  = function (aSync: GLsync; aFlags: GLbitfield; aTimeout: GLuint64): GLenum; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglWaitSyncAPPLE                                        = procedure(aSync: GLsync; aFlags: GLbitfield; aTimeout: GLuint64); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetInteger64vAPPLE                                   = procedure(aPname: GLenum; aParams: PGLint64); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetSyncivAPPLE                                       = procedure(aSync: GLsync; aPname: GLenum; aBufSize: GLsizei; aLength: PGLsizei; aValues: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glFenceSyncAPPLE:                                         TglFenceSyncAPPLE;
  glIsSyncAPPLE:                                            TglIsSyncAPPLE;
  glDeleteSyncAPPLE:                                        TglDeleteSyncAPPLE;
  glClientWaitSyncAPPLE:                                    TglClientWaitSyncAPPLE;
  glWaitSyncAPPLE:                                          TglWaitSyncAPPLE;
  glGetInteger64vAPPLE:                                     TglGetInteger64vAPPLE;
  glGetSyncivAPPLE:                                         TglGetSyncivAPPLE;

{ GL_APPLE_texture_format_BGRA8888 }
const
  GL_BGRA_EXT                                             = $80E1;
  GL_BGRA8_EXT                                            = $93A1;

{ GL_APPLE_texture_max_level }
const
  GL_TEXTURE_MAX_LEVEL_APPLE                              = $813D;

{ GL_APPLE_texture_packed_float }
const
  GL_UNSIGNED_INT_10F_11F_11F_REV_APPLE                   = $8C3B;
  GL_UNSIGNED_INT_5_9_9_9_REV_APPLE                       = $8C3E;
  GL_R11F_G11F_B10F_APPLE                                 = $8C3A;
  GL_RGB9_E5_APPLE                                        = $8C3D;

{ GL_ARM_mali_program_binary }
const
  GL_MALI_PROGRAM_BINARY_ARM                              = $8F61;

{ GL_ARM_mali_shader_binary }
const
  GL_MALI_SHADER_BINARY_ARM                               = $8F60;

{ GL_ARM_rgba8 }
  // none

{ GL_ARM_shader_framebuffer_fetch }
const
  GL_FETCH_PER_SAMPLE_ARM                                 = $8F65;
  GL_FRAGMENT_SHADER_FRAMEBUFFER_FETCH_MRT_ARM            = $8F66;

{ GL_ARM_shader_framebuffer_fetch_depth_stencil }

{ GL_DMP_program_binary }
const
  GL_SMAPHS30_PROGRAM_BINARY_DMP                          = $9251;
  GL_SMAPHS_PROGRAM_BINARY_DMP                            = $9252;
  GL_DMP_PROGRAM_BINARY_DMP                               = $9253;

{ GL_DMP_shader_binary }
const
  GL_SHADER_BINARY_DMP                                    = $9250;

{ GL_EXT_base_instance }
type
  TglDrawArraysInstancedBaseInstanceEXT                   = procedure(aMode: GLenum; aFirst: GLint; aCount: GLsizei; aInstancecount: GLsizei; aBaseinstance: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDrawElementsInstancedBaseInstanceEXT                 = procedure(aMode: GLenum; aCount: GLsizei; aType: GLenum; const aIndices: Pointer; aInstancecount: GLsizei; aBaseinstance: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDrawElementsInstancedBaseVertexBaseInstanceEXT       = procedure(aMode: GLenum; aCount: GLsizei; aType: GLenum; const aIndices: Pointer; aInstancecount: GLsizei; aBasevertex: GLint; aBaseinstance: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glDrawArraysInstancedBaseInstanceEXT:                     TglDrawArraysInstancedBaseInstanceEXT;
  glDrawElementsInstancedBaseInstanceEXT:                   TglDrawElementsInstancedBaseInstanceEXT;
  glDrawElementsInstancedBaseVertexBaseInstanceEXT:         TglDrawElementsInstancedBaseVertexBaseInstanceEXT;

{ GL_EXT_blend_minmax }
const
  GL_MIN_EXT                                              = $8007;
  GL_MAX_EXT                                              = $8008;

{ GL_EXT_color_buffer_half_float }
const
  GL_RGBA16F_EXT                                          = $881A;
  GL_RGB16F_EXT                                           = $881B;
  GL_RG16F_EXT                                            = $822F;
  GL_R16F_EXT                                             = $822D;
  GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT            = $8211;
  GL_UNSIGNED_NORMALIZED_EXT                              = $8C17;

{ GL_EXT_copy_image }
type
  TglCopyImageSubDataEXT                                  = procedure(aSrcName: GLuint; aSrcTarget: GLenum; aSrcLevel: GLint; aSrcX: GLint; aSrcY: GLint; aSrcZ: GLint; aDstName: GLuint; aDstTarget: GLenum; aDstLevel: GLint; aDstX: GLint; aDstY: GLint; aDstZ: GLint; aSrcWidth: GLsizei; aSrcHeight: GLsizei; aSrcDepth: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glCopyImageSubDataEXT:                                    TglCopyImageSubDataEXT;

{ GL_EXT_debug_label }
const
  GL_PROGRAM_PIPELINE_OBJECT_EXT                          = $8A4F;
  GL_PROGRAM_OBJECT_EXT                                   = $8B40;
  GL_SHADER_OBJECT_EXT                                    = $8B48;
  GL_BUFFER_OBJECT_EXT                                    = $9151;
  GL_QUERY_OBJECT_EXT                                     = $9153;
  GL_VERTEX_ARRAY_OBJECT_EXT                              = $9154;
  // GL_TRANSFORM_FEEDBACK                                = $8E22;
type
  TglLabelObjectEXT                                       = procedure(aType: GLenum; aObject: GLuint; aLength: GLsizei; const aLabel: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetObjectLabelEXT                                    = procedure(aType: GLenum; aObject: GLuint; aBufSize: GLsizei; aLength: PGLsizei; aLabel: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glLabelObjectEXT:                                         TglLabelObjectEXT;
  glGetObjectLabelEXT:                                      TglGetObjectLabelEXT;

{ GL_EXT_debug_marker }
type
  TglInsertEventMarkerEXT                                 = procedure(aLength: GLsizei; const aMarker: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglPushGroupMarkerEXT                                   = procedure(aLength: GLsizei; const aMarker: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglPopGroupMarkerEXT                                    = procedure; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glInsertEventMarkerEXT:                                   TglInsertEventMarkerEXT;
  glPushGroupMarkerEXT:                                     TglPushGroupMarkerEXT;
  glPopGroupMarkerEXT:                                      TglPopGroupMarkerEXT;

{ GL_EXT_discard_framebuffer }
const
  GL_COLOR_EXT                                            = $1800;
  GL_DEPTH_EXT                                            = $1801;
  GL_STENCIL_EXT                                          = $1802;
type
  TglDiscardFramebufferEXT                                = procedure(aTarget: GLenum; aNumAttachments: GLsizei; const aAttachments: PGLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glDiscardFramebufferEXT:                                  TglDiscardFramebufferEXT;

{ GL_EXT_disjoint_timer_query }
const
  GL_QUERY_COUNTER_BITS_EXT                               = $8864;
  GL_CURRENT_QUERY_EXT                                    = $8865;
  GL_QUERY_RESULT_EXT                                     = $8866;
  GL_QUERY_RESULT_AVAILABLE_EXT                           = $8867;
  GL_TIME_ELAPSED_EXT                                     = $88BF;
  GL_TIMESTAMP_EXT                                        = $8E28;
  GL_GPU_DISJOINT_EXT                                     = $8FBB;
type
  TglGenQueriesEXT                                        = procedure(n: GLsizei; aIds: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDeleteQueriesEXT                                     = procedure(n: GLsizei; const aIds: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglIsQueryEXT                                           = function (aId: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglBeginQueryEXT                                        = procedure(aTarget: GLenum; aId: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglEndQueryEXT                                          = procedure(aTarget: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglQueryCounterEXT                                      = procedure(aId: GLuint; aTarget: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetQueryivEXT                                        = procedure(aTarget: GLenum; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetQueryObjectivEXT                                  = procedure(aId: GLuint; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetQueryObjectuivEXT                                 = procedure(aId: GLuint; aPname: GLenum; aParams: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetQueryObjecti64vEXT                                = procedure(aId: GLuint; aPname: GLenum; aParams: PGLint64); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetQueryObjectui64vEXT                               = procedure(aId: GLuint; aPname: GLenum; aParams: PGLuint64); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glGenQueriesEXT:                                          TglGenQueriesEXT;
  glDeleteQueriesEXT:                                       TglDeleteQueriesEXT;
  glIsQueryEXT:                                             TglIsQueryEXT;
  glBeginQueryEXT:                                          TglBeginQueryEXT;
  glEndQueryEXT:                                            TglEndQueryEXT;
  glQueryCounterEXT:                                        TglQueryCounterEXT;
  glGetQueryivEXT:                                          TglGetQueryivEXT;
  glGetQueryObjectivEXT:                                    TglGetQueryObjectivEXT;
  glGetQueryObjectuivEXT:                                   TglGetQueryObjectuivEXT;
  glGetQueryObjecti64vEXT:                                  TglGetQueryObjecti64vEXT;
  glGetQueryObjectui64vEXT:                                 TglGetQueryObjectui64vEXT;

{ GL_EXT_draw_buffers }
const
  GL_MAX_COLOR_ATTACHMENTS_EXT                            = $8CDF;
  GL_MAX_DRAW_BUFFERS_EXT                                 = $8824;
  GL_DRAW_BUFFER0_EXT                                     = $8825;
  GL_DRAW_BUFFER1_EXT                                     = $8826;
  GL_DRAW_BUFFER2_EXT                                     = $8827;
  GL_DRAW_BUFFER3_EXT                                     = $8828;
  GL_DRAW_BUFFER4_EXT                                     = $8829;
  GL_DRAW_BUFFER5_EXT                                     = $882A;
  GL_DRAW_BUFFER6_EXT                                     = $882B;
  GL_DRAW_BUFFER7_EXT                                     = $882C;
  GL_DRAW_BUFFER8_EXT                                     = $882D;
  GL_DRAW_BUFFER9_EXT                                     = $882E;
  GL_DRAW_BUFFER10_EXT                                    = $882F;
  GL_DRAW_BUFFER11_EXT                                    = $8830;
  GL_DRAW_BUFFER12_EXT                                    = $8831;
  GL_DRAW_BUFFER13_EXT                                    = $8832;
  GL_DRAW_BUFFER14_EXT                                    = $8833;
  GL_DRAW_BUFFER15_EXT                                    = $8834;
  GL_COLOR_ATTACHMENT0_EXT                                = $8CE0;
  GL_COLOR_ATTACHMENT1_EXT                                = $8CE1;
  GL_COLOR_ATTACHMENT2_EXT                                = $8CE2;
  GL_COLOR_ATTACHMENT3_EXT                                = $8CE3;
  GL_COLOR_ATTACHMENT4_EXT                                = $8CE4;
  GL_COLOR_ATTACHMENT5_EXT                                = $8CE5;
  GL_COLOR_ATTACHMENT6_EXT                                = $8CE6;
  GL_COLOR_ATTACHMENT7_EXT                                = $8CE7;
  GL_COLOR_ATTACHMENT8_EXT                                = $8CE8;
  GL_COLOR_ATTACHMENT9_EXT                                = $8CE9;
  GL_COLOR_ATTACHMENT10_EXT                               = $8CEA;
  GL_COLOR_ATTACHMENT11_EXT                               = $8CEB;
  GL_COLOR_ATTACHMENT12_EXT                               = $8CEC;
  GL_COLOR_ATTACHMENT13_EXT                               = $8CED;
  GL_COLOR_ATTACHMENT14_EXT                               = $8CEE;
  GL_COLOR_ATTACHMENT15_EXT                               = $8CEF;
type
  TglDrawBuffersEXT                                       = procedure(n: GLsizei; const aBufs: PGLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glDrawBuffersEXT:                                         TglDrawBuffersEXT;

{ GL_EXT_draw_buffers_indexed }
  //GL_MIN                                                = $8007;
  //GL_MAX                                                = $8008;
type
  TglEnableiEXT                                           = procedure(aTarget: GLenum; aIndex: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDisableiEXT                                          = procedure(aTarget: GLenum; aIndex: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglBlendEquationiEXT                                    = procedure(aBuf: GLuint; aMode: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglBlendEquationSeparateiEXT                            = procedure(aBuf: GLuint; aModeRGB: GLenum; aModeAlpha: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglBlendFunciEXT                                        = procedure(aBuf: GLuint; aSrc: GLenum; aDst: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglBlendFuncSeparateiEXT                                = procedure(aBuf: GLuint; aSrcRGB: GLenum; aDstRGB: GLenum; aSrcAlpha: GLenum; aDstAlpha: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglColorMaskiEXT                                        = procedure(aIndex: GLuint; r: GLboolean; g: GLboolean; b: GLboolean; a: GLboolean); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglIsEnablediEXT                                        = function (aTarget: GLenum; aIndex: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glEnableiEXT:                                             TglEnableiEXT;
  glDisableiEXT:                                            TglDisableiEXT;
  glBlendEquationiEXT:                                      TglBlendEquationiEXT;
  glBlendEquationSeparateiEXT:                              TglBlendEquationSeparateiEXT;
  glBlendFunciEXT:                                          TglBlendFunciEXT;
  glBlendFuncSeparateiEXT:                                  TglBlendFuncSeparateiEXT;
  glColorMaskiEXT:                                          TglColorMaskiEXT;
  glIsEnablediEXT:                                          TglIsEnablediEXT;

{ GL_EXT_draw_elements_base_vertex }
type
  TglDrawElementsBaseVertexEXT                            = procedure(aMode: GLenum; aCount: GLsizei; aType: GLenum; const aIndices: Pointer; aBasevertex: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDrawRangeElementsBaseVertexEXT                       = procedure(aMode: GLenum; aStart: GLuint; aEnd: GLuint; aCount: GLsizei; aType: GLenum; const aIndices: Pointer; aBasevertex: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDrawElementsInstancedBaseVertexEXT                   = procedure(aMode: GLenum; aCount: GLsizei; aType: GLenum; const aIndices: Pointer; aInstancecount: GLsizei; aBasevertex: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglMultiDrawElementsBaseVertexEXT                       = procedure(aMode: GLenum; const aCount: PGLsizei; aType: GLenum; const aConstPindices: Pointer; aPrimcount: GLsizei; const aBasevertex: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glDrawElementsBaseVertexEXT:                              TglDrawElementsBaseVertexEXT;
  glDrawRangeElementsBaseVertexEXT:                         TglDrawRangeElementsBaseVertexEXT;
  glDrawElementsInstancedBaseVertexEXT:                     TglDrawElementsInstancedBaseVertexEXT;
  glMultiDrawElementsBaseVertexEXT:                         TglMultiDrawElementsBaseVertexEXT;

{ GL_EXT_draw_instanced }
type
  TglDrawArraysInstancedEXT                               = procedure(aMode: GLenum; aStart: GLint; aCount: GLsizei; aPrimcount: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDrawElementsInstancedEXT                             = procedure(aMode: GLenum; aCount: GLsizei; aType: GLenum; const aIndices: Pointer; aPrimcount: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glDrawArraysInstancedEXT:                                 TglDrawArraysInstancedEXT;
  glDrawElementsInstancedEXT:                               TglDrawElementsInstancedEXT;

{ GL_EXT_geometry_point_size }

{ GL_EXT_geometry_shader }
const
  GL_GEOMETRY_SHADER_EXT                                  = $8DD9;
  GL_GEOMETRY_SHADER_BIT_EXT                              = $00000004;
  GL_GEOMETRY_LINKED_VERTICES_OUT_EXT                     = $8916;
  GL_GEOMETRY_LINKED_INPUT_TYPE_EXT                       = $8917;
  GL_GEOMETRY_LINKED_OUTPUT_TYPE_EXT                      = $8918;
  GL_GEOMETRY_SHADER_INVOCATIONS_EXT                      = $887F;
  GL_LAYER_PROVOKING_VERTEX_EXT                           = $825E;
  GL_LINES_ADJACENCY_EXT                                  = $000A;
  GL_LINE_STRIP_ADJACENCY_EXT                             = $000B;
  GL_TRIANGLES_ADJACENCY_EXT                              = $000C;
  GL_TRIANGLE_STRIP_ADJACENCY_EXT                         = $000D;
  GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT                  = $8DDF;
  GL_MAX_GEOMETRY_UNIFORM_BLOCKS_EXT                      = $8A2C;
  GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS_EXT         = $8A32;
  GL_MAX_GEOMETRY_INPUT_COMPONENTS_EXT                    = $9123;
  GL_MAX_GEOMETRY_OUTPUT_COMPONENTS_EXT                   = $9124;
  GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT                     = $8DE0;
  GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT             = $8DE1;
  GL_MAX_GEOMETRY_SHADER_INVOCATIONS_EXT                  = $8E5A;
  GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT                 = $8C29;
  GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS_EXT              = $92CF;
  GL_MAX_GEOMETRY_ATOMIC_COUNTERS_EXT                     = $92D5;
  GL_MAX_GEOMETRY_IMAGE_UNIFORMS_EXT                      = $90CD;
  GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS_EXT               = $90D7;
  GL_FIRST_VERTEX_CONVENTION_EXT                          = $8E4D;
  GL_LAST_VERTEX_CONVENTION_EXT                           = $8E4E;
  GL_UNDEFINED_VERTEX_EXT                                 = $8260;
  GL_PRIMITIVES_GENERATED_EXT                             = $8C87;
  GL_FRAMEBUFFER_DEFAULT_LAYERS_EXT                       = $9312;
  GL_MAX_FRAMEBUFFER_LAYERS_EXT                           = $9317;
  GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT             = $8DA8;
  GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT                   = $8DA7;
  GL_REFERENCED_BY_GEOMETRY_SHADER_EXT                    = $9309;
type
  TglFramebufferTextureEXT                                = procedure(aTarget: GLenum; aAttachment: GLenum; aTexture: GLuint; aLevel: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glFramebufferTextureEXT:                                  TglFramebufferTextureEXT;

{ GL_EXT_gpu_shader5 }
  // none

{ GL_EXT_instanced_arrays }
const
  GL_VERTEX_ATTRIB_ARRAY_DIVISOR_EXT                      = $88FE;
type
  TglVertexAttribDivisorEXT                               = procedure(aIndex: GLuint; aDivisor: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glVertexAttribDivisorEXT:                                 TglVertexAttribDivisorEXT;

{ GL_EXT_map_buffer_range }
const
  GL_MAP_READ_BIT_EXT                                     = $0001;
  GL_MAP_WRITE_BIT_EXT                                    = $0002;
  GL_MAP_INVALIDATE_RANGE_BIT_EXT                         = $0004;
  GL_MAP_INVALIDATE_BUFFER_BIT_EXT                        = $0008;
  GL_MAP_FLUSH_EXPLICIT_BIT_EXT                           = $0010;
  GL_MAP_UNSYNCHRONIZED_BIT_EXT                           = $0020;
type
  TglMapBufferRangeEXT                                    = function (aTarget: GLenum; aOffset: GLintptr; aLength: GLsizeiptr; aAccess: GLbitfield): Pointer; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglFlushMappedBufferRangeEXT                            = procedure(aTarget: GLenum; aOffset: GLintptr; aLength: GLsizeiptr); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glMapBufferRangeEXT:                                      TglMapBufferRangeEXT;
  glFlushMappedBufferRangeEXT:                              TglFlushMappedBufferRangeEXT;

{ GL_EXT_multi_draw_arrays }
type
  TglMultiDrawArraysEXT                                   = procedure(aMode: GLenum; const aFirst: PGLint; const aCount: PGLsizei; aPrimcount: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglMultiDrawElementsEXT                                 = procedure(aMode: GLenum; const aCount: PGLsizei; aType: GLenum; const aConstPindices: Pointer; aPrimcount: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glMultiDrawArraysEXT:                                     TglMultiDrawArraysEXT;
  glMultiDrawElementsEXT:                                   TglMultiDrawElementsEXT;

{ GL_EXT_multi_draw_indirect }
type
  TglMultiDrawArraysIndirectEXT                           = procedure(aMode: GLenum; const aIndirect: Pointer; aDrawcount: GLsizei; aStride: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglMultiDrawElementsIndirectEXT                         = procedure(aMode: GLenum; aType: GLenum; const aIndirect: Pointer; aDrawcount: GLsizei; aStride: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glMultiDrawArraysIndirectEXT:                             TglMultiDrawArraysIndirectEXT;
  glMultiDrawElementsIndirectEXT:                           TglMultiDrawElementsIndirectEXT;

{ GL_EXT_multisampled_render_to_texture }
const
  GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT           = $8D6C;
  GL_RENDERBUFFER_SAMPLES_EXT                             = $8CAB;
  GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT               = $8D56;
  GL_MAX_SAMPLES_EXT                                      = $8D57;
type
  TglRenderbufferStorageMultisampleEXT                    = procedure(aTarget: GLenum; aSamples: GLsizei; aInternalformat: GLenum; aWidth: GLsizei; aHeight: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglFramebufferTexture2DMultisampleEXT                   = procedure(aTarget: GLenum; aAttachment: GLenum; aTextarget: GLenum; aTexture: GLuint; aLevel: GLint; aSamples: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glRenderbufferStorageMultisampleEXT:                      TglRenderbufferStorageMultisampleEXT;
  glFramebufferTexture2DMultisampleEXT:                     TglFramebufferTexture2DMultisampleEXT;

{ GL_EXT_multiview_draw_buffers }
const
  GL_COLOR_ATTACHMENT_EXT                                 = $90F0;
  GL_MULTIVIEW_EXT                                        = $90F1;
  GL_DRAW_BUFFER_EXT                                      = $0C01;
  GL_READ_BUFFER_EXT                                      = $0C02;
  GL_MAX_MULTIVIEW_BUFFERS_EXT                            = $90F2;
type
  TglReadBufferIndexedEXT                                 = procedure(aSrc: GLenum; aIndex: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDrawBuffersIndexedEXT                                = procedure(n: GLint; const aLocation: PGLenum; const aIndices: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetIntegeri_vEXT                                     = procedure(aTarget: GLenum; aIndex: GLuint; aData: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glReadBufferIndexedEXT:                                   TglReadBufferIndexedEXT;
  glDrawBuffersIndexedEXT:                                  TglDrawBuffersIndexedEXT;
  glGetIntegeri_vEXT:                                       TglGetIntegeri_vEXT;

{ GL_EXT_occlusion_query_boolean }
const
  GL_ANY_SAMPLES_PASSED_EXT                               = $8C2F;
  GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT                  = $8D6A;

{ GL_EXT_primitive_bounding_box }
const
  GL_PRIMITIVE_BOUNDING_BOX_EXT                           = $92BE;
type
  TglPrimitiveBoundingBoxEXT                              = procedure(aMinX: GLfloat; aMinY: GLfloat; aMinZ: GLfloat; aMinW: GLfloat; aMaxX: GLfloat; aMaxY: GLfloat; aMaxZ: GLfloat; aMaxW: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glPrimitiveBoundingBoxEXT:                                TglPrimitiveBoundingBoxEXT;

{ GL_EXT_pvrtc_sRGB }
const
  GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT                     = $8A54;
  GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT                     = $8A55;
  GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT               = $8A56;
  GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT               = $8A57;
  GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV2_IMG               = $93F0;
  GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV2_IMG               = $93F1;

{ GL_EXT_read_format_bgra }
const
  GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT                       = $8365;
  GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT                       = $8366;

{ GL_EXT_render_snorm }
const
  //GL_R8_SNORM                                           = $8F94;
  //GL_RG8_SNORM                                          = $8F95;
  //GL_RGBA8_SNORM                                        = $8F97;
  GL_R16_SNORM_EXT                                        = $8F98;
  GL_RG16_SNORM_EXT                                       = $8F99;
  GL_RGBA16_SNORM_EXT                                     = $8F9B;

{ GL_EXT_robustness }
const
  GL_GUILTY_CONTEXT_RESET_EXT                             = $8253;
  GL_INNOCENT_CONTEXT_RESET_EXT                           = $8254;
  GL_UNKNOWN_CONTEXT_RESET_EXT                            = $8255;
  GL_CONTEXT_ROBUST_ACCESS_EXT                            = $90F3;
  GL_RESET_NOTIFICATION_STRATEGY_EXT                      = $8256;
  GL_LOSE_CONTEXT_ON_RESET_EXT                            = $8252;
  GL_NO_RESET_NOTIFICATION_EXT                            = $8261;
type
  TglGetGraphicsResetStatusEXT                            = function : GLenum; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglReadnPixelsEXT                                       = procedure(x: GLint; y: GLint; aWidth: GLsizei; aHeight: GLsizei; aFormat: GLenum; aType: GLenum; aBufSize: GLsizei; aData: Pointer); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetnUniformfvEXT                                     = procedure(aProgram: GLuint; aLocation: GLint; aBufSize: GLsizei; aParams: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetnUniformivEXT                                     = procedure(aProgram: GLuint; aLocation: GLint; aBufSize: GLsizei; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glGetGraphicsResetStatusEXT:                              TglGetGraphicsResetStatusEXT;
  glReadnPixelsEXT:                                         TglReadnPixelsEXT;
  glGetnUniformfvEXT:                                       TglGetnUniformfvEXT;
  glGetnUniformivEXT:                                       TglGetnUniformivEXT;

{ GL_EXT_sRGB }
const
  GL_SRGB_EXT                                             = $8C40;
  GL_SRGB_ALPHA_EXT                                       = $8C42;
  GL_SRGB8_ALPHA8_EXT                                     = $8C43;
  GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT            = $8210;

{ GL_EXT_sRGB_write_control }
const
  GL_FRAMEBUFFER_SRGB_EXT                                 = $8DB9;

{ GL_EXT_separate_shader_objects }
const
  GL_ACTIVE_PROGRAM_EXT                                   = $8259;
  GL_VERTEX_SHADER_BIT_EXT                                = $00000001;
  GL_FRAGMENT_SHADER_BIT_EXT                              = $00000002;
  GL_ALL_SHADER_BITS_EXT                                  = $FFFFFFFF;
  GL_PROGRAM_SEPARABLE_EXT                                = $8258;
  GL_PROGRAM_PIPELINE_BINDING_EXT                         = $825A;
type
  TglActiveShaderProgramEXT                               = procedure(aPipeline: GLuint; aProgram: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglBindProgramPipelineEXT                               = procedure(aPipeline: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglCreateShaderProgramvEXT                              = function (aType: GLenum; aCount: GLsizei; const aStrings: PPGLchar): GLuint; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDeleteProgramPipelinesEXT                            = procedure(n: GLsizei; const aPipelines: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGenProgramPipelinesEXT                               = procedure(n: GLsizei; aPipelines: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetProgramPipelineInfoLogEXT                         = procedure(aPipeline: GLuint; aBufSize: GLsizei; aLength: PGLsizei; aInfoLog: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetProgramPipelineivEXT                              = procedure(aPipeline: GLuint; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglIsProgramPipelineEXT                                 = function (aPipeline: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramParameteriEXT                                 = procedure(aProgram: GLuint; aPname: GLenum; aValue: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform1fEXT                                  = procedure(aProgram: GLuint; aLocation: GLint; aV0: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform1fvEXT                                 = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform1iEXT                                  = procedure(aProgram: GLuint; aLocation: GLint; aV0: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform1ivEXT                                 = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform2fEXT                                  = procedure(aProgram: GLuint; aLocation: GLint; aV0: GLfloat; aV1: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform2fvEXT                                 = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform2iEXT                                  = procedure(aProgram: GLuint; aLocation: GLint; aV0: GLint; aV1: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform2ivEXT                                 = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform3fEXT                                  = procedure(aProgram: GLuint; aLocation: GLint; aV0: GLfloat; aV1: GLfloat; aV2: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform3fvEXT                                 = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform3iEXT                                  = procedure(aProgram: GLuint; aLocation: GLint; aV0: GLint; aV1: GLint; aV2: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform3ivEXT                                 = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform4fEXT                                  = procedure(aProgram: GLuint; aLocation: GLint; aV0: GLfloat; aV1: GLfloat; aV2: GLfloat; aV3: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform4fvEXT                                 = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform4iEXT                                  = procedure(aProgram: GLuint; aLocation: GLint; aV0: GLint; aV1: GLint; aV2: GLint; aV3: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform4ivEXT                                 = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniformMatrix2fvEXT                           = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniformMatrix3fvEXT                           = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniformMatrix4fvEXT                           = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUseProgramStagesEXT                                  = procedure(aPipeline: GLuint; aStages: GLbitfield; aProgram: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglValidateProgramPipelineEXT                           = procedure(aPipeline: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform1uiEXT                                 = procedure(aProgram: GLuint; aLocation: GLint; aV0: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform2uiEXT                                 = procedure(aProgram: GLuint; aLocation: GLint; aV0: GLuint; aV1: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform3uiEXT                                 = procedure(aProgram: GLuint; aLocation: GLint; aV0: GLuint; aV1: GLuint; aV2: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform4uiEXT                                 = procedure(aProgram: GLuint; aLocation: GLint; aV0: GLuint; aV1: GLuint; aV2: GLuint; aV3: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform1uivEXT                                = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform2uivEXT                                = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform3uivEXT                                = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniform4uivEXT                                = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniformMatrix2x3fvEXT                         = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniformMatrix3x2fvEXT                         = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniformMatrix2x4fvEXT                         = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniformMatrix4x2fvEXT                         = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniformMatrix3x4fvEXT                         = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniformMatrix4x3fvEXT                         = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glActiveShaderProgramEXT:                                 TglActiveShaderProgramEXT;
  glBindProgramPipelineEXT:                                 TglBindProgramPipelineEXT;
  glCreateShaderProgramvEXT:                                TglCreateShaderProgramvEXT;
  glDeleteProgramPipelinesEXT:                              TglDeleteProgramPipelinesEXT;
  glGenProgramPipelinesEXT:                                 TglGenProgramPipelinesEXT;
  glGetProgramPipelineInfoLogEXT:                           TglGetProgramPipelineInfoLogEXT;
  glGetProgramPipelineivEXT:                                TglGetProgramPipelineivEXT;
  glIsProgramPipelineEXT:                                   TglIsProgramPipelineEXT;
  glProgramParameteriEXT:                                   TglProgramParameteriEXT;
  glProgramUniform1fEXT:                                    TglProgramUniform1fEXT;
  glProgramUniform1fvEXT:                                   TglProgramUniform1fvEXT;
  glProgramUniform1iEXT:                                    TglProgramUniform1iEXT;
  glProgramUniform1ivEXT:                                   TglProgramUniform1ivEXT;
  glProgramUniform2fEXT:                                    TglProgramUniform2fEXT;
  glProgramUniform2fvEXT:                                   TglProgramUniform2fvEXT;
  glProgramUniform2iEXT:                                    TglProgramUniform2iEXT;
  glProgramUniform2ivEXT:                                   TglProgramUniform2ivEXT;
  glProgramUniform3fEXT:                                    TglProgramUniform3fEXT;
  glProgramUniform3fvEXT:                                   TglProgramUniform3fvEXT;
  glProgramUniform3iEXT:                                    TglProgramUniform3iEXT;
  glProgramUniform3ivEXT:                                   TglProgramUniform3ivEXT;
  glProgramUniform4fEXT:                                    TglProgramUniform4fEXT;
  glProgramUniform4fvEXT:                                   TglProgramUniform4fvEXT;
  glProgramUniform4iEXT:                                    TglProgramUniform4iEXT;
  glProgramUniform4ivEXT:                                   TglProgramUniform4ivEXT;
  glProgramUniformMatrix2fvEXT:                             TglProgramUniformMatrix2fvEXT;
  glProgramUniformMatrix3fvEXT:                             TglProgramUniformMatrix3fvEXT;
  glProgramUniformMatrix4fvEXT:                             TglProgramUniformMatrix4fvEXT;
  glUseProgramStagesEXT:                                    TglUseProgramStagesEXT;
  glValidateProgramPipelineEXT:                             TglValidateProgramPipelineEXT;
  glProgramUniform1uiEXT:                                   TglProgramUniform1uiEXT;
  glProgramUniform2uiEXT:                                   TglProgramUniform2uiEXT;
  glProgramUniform3uiEXT:                                   TglProgramUniform3uiEXT;
  glProgramUniform4uiEXT:                                   TglProgramUniform4uiEXT;
  glProgramUniform1uivEXT:                                  TglProgramUniform1uivEXT;
  glProgramUniform2uivEXT:                                  TglProgramUniform2uivEXT;
  glProgramUniform3uivEXT:                                  TglProgramUniform3uivEXT;
  glProgramUniform4uivEXT:                                  TglProgramUniform4uivEXT;
  glProgramUniformMatrix2x3fvEXT:                           TglProgramUniformMatrix2x3fvEXT;
  glProgramUniformMatrix3x2fvEXT:                           TglProgramUniformMatrix3x2fvEXT;
  glProgramUniformMatrix2x4fvEXT:                           TglProgramUniformMatrix2x4fvEXT;
  glProgramUniformMatrix4x2fvEXT:                           TglProgramUniformMatrix4x2fvEXT;
  glProgramUniformMatrix3x4fvEXT:                           TglProgramUniformMatrix3x4fvEXT;
  glProgramUniformMatrix4x3fvEXT:                           TglProgramUniformMatrix4x3fvEXT;

{ GL_EXT_shader_framebuffer_fetch }
const
  GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT                 = $8A52;

{ GL_EXT_shader_implicit_conversions }
  // none

{ GL_EXT_shader_integer_mix }
  // none

{ GL_EXT_shader_io_blocks }
  // none

{ GL_EXT_shader_pixel_local_storage }
const
  GL_MAX_SHADER_PIXEL_LOCAL_STORAGE_FAST_SIZE_EXT         = $8F63;
  GL_MAX_SHADER_PIXEL_LOCAL_STORAGE_SIZE_EXT              = $8F67;
  GL_SHADER_PIXEL_LOCAL_STORAGE_EXT                       = $8F64;

{ GL_EXT_shader_texture_lod }

{ GL_EXT_shadow_samplers }
const
  GL_TEXTURE_COMPARE_MODE_EXT                             = $884C;
  GL_TEXTURE_COMPARE_FUNC_EXT                             = $884D;
  GL_COMPARE_REF_TO_TEXTURE_EXT                           = $884E;
  GL_SAMPLER_2D_SHADOW_EXT                                = $8B62;

{ GL_EXT_tessellation_point_size }
  // none

{ GL_EXT_tessellation_shader }
const
  GL_PATCHES_EXT                                          = $000E;
  GL_PATCH_VERTICES_EXT                                   = $8E72;
  GL_TESS_CONTROL_OUTPUT_VERTICES_EXT                     = $8E75;
  GL_TESS_GEN_MODE_EXT                                    = $8E76;
  GL_TESS_GEN_SPACING_EXT                                 = $8E77;
  GL_TESS_GEN_VERTEX_ORDER_EXT                            = $8E78;
  GL_TESS_GEN_POINT_MODE_EXT                              = $8E79;
  GL_ISOLINES_EXT                                         = $8E7A;
  GL_QUADS_EXT                                            = $0007;
  GL_FRACTIONAL_ODD_EXT                                   = $8E7B;
  GL_FRACTIONAL_EVEN_EXT                                  = $8E7C;
  GL_MAX_PATCH_VERTICES_EXT                               = $8E7D;
  GL_MAX_TESS_GEN_LEVEL_EXT                               = $8E7E;
  GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS_EXT              = $8E7F;
  GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS_EXT           = $8E80;
  GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS_EXT             = $8E81;
  GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS_EXT          = $8E82;
  GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS_EXT               = $8E83;
  GL_MAX_TESS_PATCH_COMPONENTS_EXT                        = $8E84;
  GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS_EXT         = $8E85;
  GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS_EXT            = $8E86;
  GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS_EXT                  = $8E89;
  GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS_EXT               = $8E8A;
  GL_MAX_TESS_CONTROL_INPUT_COMPONENTS_EXT                = $886C;
  GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS_EXT             = $886D;
  GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS_EXT     = $8E1E;
  GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS_EXT  = $8E1F;
  GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS_EXT          = $92CD;
  GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS_EXT       = $92CE;
  GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS_EXT                 = $92D3;
  GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS_EXT              = $92D4;
  GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS_EXT                  = $90CB;
  GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS_EXT               = $90CC;
  GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS_EXT           = $90D8;
  GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS_EXT        = $90D9;
  GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED              = $8221;
  GL_IS_PER_PATCH_EXT                                     = $92E7;
  GL_REFERENCED_BY_TESS_CONTROL_SHADER_EXT                = $9307;
  GL_REFERENCED_BY_TESS_EVALUATION_SHADER_EXT             = $9308;
  GL_TESS_CONTROL_SHADER_EXT                              = $8E88;
  GL_TESS_EVALUATION_SHADER_EXT                           = $8E87;
  GL_TESS_CONTROL_SHADER_BIT_EXT                          = $00000008;
  GL_TESS_EVALUATION_SHADER_BIT_EXT                       = $00000010;
type
  TglPatchParameteriEXT                                   = procedure(aPname: GLenum; aValue: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glPatchParameteriEXT:                                     TglPatchParameteriEXT;

{ GL_EXT_texture_border_clamp }
const
  GL_TEXTURE_BORDER_COLOR_EXT                             = $1004;
  GL_CLAMP_TO_BORDER_EXT                                  = $812D;
type
  TglTexParameterIivEXT                                   = procedure(aTarget: GLenum; aPname: GLenum; const aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglTexParameterIuivEXT                                  = procedure(aTarget: GLenum; aPname: GLenum; const aParams: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetTexParameterIivEXT                                = procedure(aTarget: GLenum; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetTexParameterIuivEXT                               = procedure(aTarget: GLenum; aPname: GLenum; aParams: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglSamplerParameterIivEXT                               = procedure(aSampler: GLuint; aPname: GLenum; const aParam: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglSamplerParameterIuivEXT                              = procedure(aSampler: GLuint; aPname: GLenum; const aParam: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetSamplerParameterIivEXT                            = procedure(aSampler: GLuint; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetSamplerParameterIuivEXT                           = procedure(aSampler: GLuint; aPname: GLenum; aParams: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glTexParameterIivEXT:                                     TglTexParameterIivEXT;
  glTexParameterIuivEXT:                                    TglTexParameterIuivEXT;
  glGetTexParameterIivEXT:                                  TglGetTexParameterIivEXT;
  glGetTexParameterIuivEXT:                                 TglGetTexParameterIuivEXT;
  glSamplerParameterIivEXT:                                 TglSamplerParameterIivEXT;
  glSamplerParameterIuivEXT:                                TglSamplerParameterIuivEXT;
  glGetSamplerParameterIivEXT:                              TglGetSamplerParameterIivEXT;
  glGetSamplerParameterIuivEXT:                             TglGetSamplerParameterIuivEXT;

{ GL_EXT_texture_buffer }
const
  GL_TEXTURE_BUFFER_EXT                                   = $8C2A;
  GL_TEXTURE_BUFFER_BINDING_EXT                           = $8C2A;
  GL_MAX_TEXTURE_BUFFER_SIZE_EXT                          = $8C2B;
  GL_TEXTURE_BINDING_BUFFER_EXT                           = $8C2C;
  GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT                = $8C2D;
  GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT_EXT                  = $919F;
  GL_SAMPLER_BUFFER_EXT                                   = $8DC2;
  GL_INT_SAMPLER_BUFFER_EXT                               = $8DD0;
  GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT                      = $8DD8;
  GL_IMAGE_BUFFER_EXT                                     = $9051;
  GL_INT_IMAGE_BUFFER_EXT                                 = $905C;
  GL_UNSIGNED_INT_IMAGE_BUFFER_EXT                        = $9067;
  GL_TEXTURE_BUFFER_OFFSET_EXT                            = $919D;
  GL_TEXTURE_BUFFER_SIZE_EXT                              = $919E;
type
  TglTexBufferEXT                                         = procedure(aTarget: GLenum; aInternalformat: GLenum; aBuffer: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglTexBufferRangeEXT                                    = procedure(aTarget: GLenum; aInternalformat: GLenum; aBuffer: GLuint; aOffset: GLintptr; aSize: GLsizeiptr); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glTexBufferEXT:                                           TglTexBufferEXT;
  glTexBufferRangeEXT:                                      TglTexBufferRangeEXT;

{ GL_EXT_texture_compression_dxt1 }
const
  GL_COMPRESSED_RGB_S3TC_DXT1_EXT                         = $83F0;
  GL_COMPRESSED_RGBA_S3TC_DXT1_EXT                        = $83F1;

{ GL_EXT_texture_compression_s3tc }
const
  GL_COMPRESSED_RGBA_S3TC_DXT3_EXT                        = $83F2;
  GL_COMPRESSED_RGBA_S3TC_DXT5_EXT                        = $83F3;

{ GL_EXT_texture_cube_map_array }
const
  GL_TEXTURE_CUBE_MAP_ARRAY_EXT                           = $9009;
  GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_EXT                   = $900A;
  GL_SAMPLER_CUBE_MAP_ARRAY_EXT                           = $900C;
  GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_EXT                    = $900D;
  GL_INT_SAMPLER_CUBE_MAP_ARRAY_EXT                       = $900E;
  GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_EXT              = $900F;
  GL_IMAGE_CUBE_MAP_ARRAY_EXT                             = $9054;
  GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT                         = $905F;
  GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT                = $906A;

{ GL_EXT_texture_filter_anisotropic }
const
  GL_TEXTURE_MAX_ANISOTROPY_EXT                           = $84FE;
  GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT                       = $84FF;

{ GL_EXT_texture_format_BGRA8888 }

{ GL_EXT_texture_norm16 }
const
  GL_R16_EXT                                              = $822A;
  GL_RG16_EXT                                             = $822C;
  GL_RGBA16_EXT                                           = $805B;
  GL_RGB16_EXT                                            = $8054;
  GL_RGB16_SNORM_EXT                                      = $8F9A;

{ GL_EXT_texture_rg }
const
  GL_RED_EXT                                              = $1903;
  GL_RG_EXT                                               = $8227;
  GL_R8_EXT                                               = $8229;
  GL_RG8_EXT                                              = $822B;

{ GL_EXT_texture_sRGB_decode }
const
  GL_TEXTURE_SRGB_DECODE_EXT                              = $8A48;
  GL_DECODE_EXT                                           = $8A49;
  GL_SKIP_DECODE_EXT                                      = $8A4A;

{ GL_EXT_texture_storage }
const
  GL_TEXTURE_IMMUTABLE_FORMAT_EXT                         = $912F;
  GL_ALPHA8_EXT                                           = $803C;
  GL_LUMINANCE8_EXT                                       = $8040;
  GL_LUMINANCE8_ALPHA8_EXT                                = $8045;
  GL_RGBA32F_EXT                                          = $8814;
  GL_RGB32F_EXT                                           = $8815;
  GL_ALPHA32F_EXT                                         = $8816;
  GL_LUMINANCE32F_EXT                                     = $8818;
  GL_LUMINANCE_ALPHA32F_EXT                               = $8819;
  GL_ALPHA16F_EXT                                         = $881C;
  GL_LUMINANCE16F_EXT                                     = $881E;
  GL_LUMINANCE_ALPHA16F_EXT                               = $881F;
  GL_R32F_EXT                                             = $822E;
  GL_RG32F_EXT                                            = $8230;
type
  TglTexStorage1DEXT                                      = procedure(aTarget: GLenum; aLevels: GLsizei; aInternalformat: GLenum; aWidth: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglTexStorage2DEXT                                      = procedure(aTarget: GLenum; aLevels: GLsizei; aInternalformat: GLenum; aWidth: GLsizei; aHeight: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglTexStorage3DEXT                                      = procedure(aTarget: GLenum; aLevels: GLsizei; aInternalformat: GLenum; aWidth: GLsizei; aHeight: GLsizei; aDepth: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglTextureStorage1DEXT                                  = procedure(aTexture: GLuint; aTarget: GLenum; aLevels: GLsizei; aInternalformat: GLenum; aWidth: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglTextureStorage2DEXT                                  = procedure(aTexture: GLuint; aTarget: GLenum; aLevels: GLsizei; aInternalformat: GLenum; aWidth: GLsizei; aHeight: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglTextureStorage3DEXT                                  = procedure(aTexture: GLuint; aTarget: GLenum; aLevels: GLsizei; aInternalformat: GLenum; aWidth: GLsizei; aHeight: GLsizei; aDepth: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glTexStorage1DEXT:                                        TglTexStorage1DEXT;
  glTexStorage2DEXT:                                        TglTexStorage2DEXT;
  glTexStorage3DEXT:                                        TglTexStorage3DEXT;
  glTextureStorage1DEXT:                                    TglTextureStorage1DEXT;
  glTextureStorage2DEXT:                                    TglTextureStorage2DEXT;
  glTextureStorage3DEXT:                                    TglTextureStorage3DEXT;

{ GL_EXT_texture_type_2_10_10_10_REV }
const
  GL_UNSIGNED_INT_2_10_10_10_REV_EXT                      = $8368;

{ GL_EXT_texture_view }
const
  GL_TEXTURE_VIEW_MIN_LEVEL_EXT                           = $82DB;
  GL_TEXTURE_VIEW_NUM_LEVELS_EXT                          = $82DC;
  GL_TEXTURE_VIEW_MIN_LAYER_EXT                           = $82DD;
  GL_TEXTURE_VIEW_NUM_LAYERS_EXT                          = $82DE;
  //GL_TEXTURE_IMMUTABLE_LEVELS                           = $82DF;
type
  TglTextureViewEXT                                       = procedure(aTexture: GLuint; aTarget: GLenum; aOrigtexture: GLuint; aInternalformat: GLenum; aMinlevel: GLuint; aNumlevels: GLuint; aMinlayer: GLuint; aNumlayers: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glTextureViewEXT:                                         TglTextureViewEXT;

{ GL_EXT_unpack_subimage }
const
  GL_UNPACK_ROW_LENGTH_EXT                                = $0CF2;
  GL_UNPACK_SKIP_ROWS_EXT                                 = $0CF3;
  GL_UNPACK_SKIP_PIXELS_EXT                               = $0CF4;

{ GL_FJ_shader_binary_GCCSO }
const
  GL_GCCSO_SHADER_BINARY_FJ                               = $9260;

{ GL_IMG_multisampled_render_to_texture }
const
  GL_RENDERBUFFER_SAMPLES_IMG                             = $9133;
  GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_IMG               = $9134;
  GL_MAX_SAMPLES_IMG                                      = $9135;
  GL_TEXTURE_SAMPLES_IMG                                  = $9136;
type
  TglRenderbufferStorageMultisampleIMG                    = procedure(aTarget: GLenum; aSamples: GLsizei; aInternalformat: GLenum; aWidth: GLsizei; aHeight: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglFramebufferTexture2DMultisampleIMG                   = procedure(aTarget: GLenum; aAttachment: GLenum; aTextarget: GLenum; aTexture: GLuint; aLevel: GLint; aSamples: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glRenderbufferStorageMultisampleIMG:                      TglRenderbufferStorageMultisampleIMG;
  glFramebufferTexture2DMultisampleIMG:                     TglFramebufferTexture2DMultisampleIMG;

{ GL_IMG_program_binary }
const
  GL_SGX_PROGRAM_BINARY_IMG                               = $9130;

{ GL_IMG_read_format }
const
  GL_BGRA_IMG                                             = $80E1;
  GL_UNSIGNED_SHORT_4_4_4_4_REV_IMG                       = $8365;

{ GL_IMG_shader_binary }
const
  GL_SGX_BINARY_IMG                                       = $8C0A;

{ GL_IMG_texture_compression_pvrtc }
const
  GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG                      = $8C00;
  GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG                      = $8C01;
  GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG                     = $8C02;
  GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG                     = $8C03;

{ GL_IMG_texture_compression_pvrtc2 }
const
  GL_COMPRESSED_RGBA_PVRTC_2BPPV2_IMG                     = $9137;
  GL_COMPRESSED_RGBA_PVRTC_4BPPV2_IMG                     = $9138;

{ GL_INTEL_performance_query }
const
  GL_PERFQUERY_SINGLE_CONTEXT_INTEL                       = $00000000;
  GL_PERFQUERY_GLOBAL_CONTEXT_INTEL                       = $00000001;
  GL_PERFQUERY_WAIT_INTEL                                 = $83FB;
  GL_PERFQUERY_FLUSH_INTEL                                = $83FA;
  GL_PERFQUERY_DONOT_FLUSH_INTEL                          = $83F9;
  GL_PERFQUERY_COUNTER_EVENT_INTEL                        = $94F0;
  GL_PERFQUERY_COUNTER_DURATION_NORM_INTEL                = $94F1;
  GL_PERFQUERY_COUNTER_DURATION_RAW_INTEL                 = $94F2;
  GL_PERFQUERY_COUNTER_THROUGHPUT_INTEL                   = $94F3;
  GL_PERFQUERY_COUNTER_RAW_INTEL                          = $94F4;
  GL_PERFQUERY_COUNTER_TIMESTAMP_INTEL                    = $94F5;
  GL_PERFQUERY_COUNTER_DATA_UINT32_INTEL                  = $94F8;
  GL_PERFQUERY_COUNTER_DATA_UINT64_INTEL                  = $94F9;
  GL_PERFQUERY_COUNTER_DATA_FLOAT_INTEL                   = $94FA;
  GL_PERFQUERY_COUNTER_DATA_DOUBLE_INTEL                  = $94FB;
  GL_PERFQUERY_COUNTER_DATA_BOOL32_INTEL                  = $94FC;
  GL_PERFQUERY_QUERY_NAME_LENGTH_MAX_INTEL                = $94FD;
  GL_PERFQUERY_COUNTER_NAME_LENGTH_MAX_INTEL              = $94FE;
  GL_PERFQUERY_COUNTER_DESC_LENGTH_MAX_INTEL              = $94FF;
  GL_PERFQUERY_GPA_EXTENDED_COUNTERS_INTEL                = $9500;
type
  TglBeginPerfQueryINTEL                                  = procedure(aQueryHandle: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglCreatePerfQueryINTEL                                 = procedure(aQueryId: GLuint; aQueryHandle: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDeletePerfQueryINTEL                                 = procedure(aQueryHandle: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglEndPerfQueryINTEL                                    = procedure(aQueryHandle: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetFirstPerfQueryIdINTEL                             = procedure(aQueryId: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetNextPerfQueryIdINTEL                              = procedure(aQueryId: GLuint; aNextQueryId: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetPerfCounterInfoINTEL                              = procedure(aQueryId: GLuint; aCounterId: GLuint; aCounterNameLength: GLuint; aCounterName: PGLchar; aCounterDescLength: GLuint; aCounterDesc: PGLchar; aCounterOffset: PGLuint; aCounterDataSize: PGLuint; aCounterTypeEnum: PGLuint; aCounterDataTypeEnum: PGLuint; aRawCounterMaxValue: PGLuint64); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetPerfQueryDataINTEL                                = procedure(aQueryHandle: GLuint; aFlags: GLuint; aDataSize: GLsizei; aData: PGLvoid; aBytesWritten: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetPerfQueryIdByNameINTEL                            = procedure(aQueryName: PGLchar; aQueryId: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetPerfQueryInfoINTEL                                = procedure(aQueryId: GLuint; aQueryNameLength: GLuint; aQueryName: PGLchar; aDataSize: PGLuint; aNoCounters: PGLuint; aNoInstances: PGLuint; aCapsMask: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glBeginPerfQueryINTEL:                                    TglBeginPerfQueryINTEL;
  glCreatePerfQueryINTEL:                                   TglCreatePerfQueryINTEL;
  glDeletePerfQueryINTEL:                                   TglDeletePerfQueryINTEL;
  glEndPerfQueryINTEL:                                      TglEndPerfQueryINTEL;
  glGetFirstPerfQueryIdINTEL:                               TglGetFirstPerfQueryIdINTEL;
  glGetNextPerfQueryIdINTEL:                                TglGetNextPerfQueryIdINTEL;
  glGetPerfCounterInfoINTEL:                                TglGetPerfCounterInfoINTEL;
  glGetPerfQueryDataINTEL:                                  TglGetPerfQueryDataINTEL;
  glGetPerfQueryIdByNameINTEL:                              TglGetPerfQueryIdByNameINTEL;
  glGetPerfQueryInfoINTEL:                                  TglGetPerfQueryInfoINTEL;

{ GL_NV_bindless_texture }
type
  TglGetTextureHandleNV                                   = function (aTexture: GLuint): GLuint64; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetTextureSamplerHandleNV                            = function (aTexture: GLuint; aSampler: GLuint): GLuint64; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglMakeTextureHandleResidentNV                          = procedure(aHandle: GLuint64); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglMakeTextureHandleNonResidentNV                       = procedure(aHandle: GLuint64); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetImageHandleNV                                     = function (aTexture: GLuint; aLevel: GLint; aLayered: GLboolean; aLayer: GLint; aFormat: GLenum): GLuint64; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglMakeImageHandleResidentNV                            = procedure(aHandle: GLuint64; aAccess: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglMakeImageHandleNonResidentNV                         = procedure(aHandle: GLuint64); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUniformHandleui64NV                                  = procedure(aLocation: GLint; aValue: GLuint64); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUniformHandleui64vNV                                 = procedure(aLocation: GLint; aCount: GLsizei; const aValue: PGLuint64); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniformHandleui64NV                           = procedure(aProgram: GLuint; aLocation: GLint; aValue: GLuint64); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramUniformHandleui64vNV                          = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValues: PGLuint64); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglIsTextureHandleResidentNV                            = function (aHandle: GLuint64): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglIsImageHandleResidentNV                              = function (aHandle: GLuint64): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glGetTextureHandleNV:                                     TglGetTextureHandleNV;
  glGetTextureSamplerHandleNV:                              TglGetTextureSamplerHandleNV;
  glMakeTextureHandleResidentNV:                            TglMakeTextureHandleResidentNV;
  glMakeTextureHandleNonResidentNV:                         TglMakeTextureHandleNonResidentNV;
  glGetImageHandleNV:                                       TglGetImageHandleNV;
  glMakeImageHandleResidentNV:                              TglMakeImageHandleResidentNV;
  glMakeImageHandleNonResidentNV:                           TglMakeImageHandleNonResidentNV;
  glUniformHandleui64NV:                                    TglUniformHandleui64NV;
  glUniformHandleui64vNV:                                   TglUniformHandleui64vNV;
  glProgramUniformHandleui64NV:                             TglProgramUniformHandleui64NV;
  glProgramUniformHandleui64vNV:                            TglProgramUniformHandleui64vNV;
  glIsTextureHandleResidentNV:                              TglIsTextureHandleResidentNV;
  glIsImageHandleResidentNV:                                TglIsImageHandleResidentNV;

{ GL_NV_blend_equation_advanced }
const
  GL_BLEND_OVERLAP_NV                                     = $9281;
  GL_BLEND_PREMULTIPLIED_SRC_NV                           = $9280;
  GL_BLUE_NV                                              = $1905;
  GL_COLORBURN_NV                                         = $929A;
  GL_COLORDODGE_NV                                        = $9299;
  GL_CONJOINT_NV                                          = $9284;
  GL_CONTRAST_NV                                          = $92A1;
  GL_DARKEN_NV                                            = $9297;
  GL_DIFFERENCE_NV                                        = $929E;
  GL_DISJOINT_NV                                          = $9283;
  GL_DST_ATOP_NV                                          = $928F;
  GL_DST_IN_NV                                            = $928B;
  GL_DST_NV                                               = $9287;
  GL_DST_OUT_NV                                           = $928D;
  GL_DST_OVER_NV                                          = $9289;
  GL_EXCLUSION_NV                                         = $92A0;
  GL_GREEN_NV                                             = $1904;
  GL_HARDLIGHT_NV                                         = $929B;
  GL_HARDMIX_NV                                           = $92A9;
  GL_HSL_COLOR_NV                                         = $92AF;
  GL_HSL_HUE_NV                                           = $92AD;
  GL_HSL_LUMINOSITY_NV                                    = $92B0;
  GL_HSL_SATURATION_NV                                    = $92AE;
  GL_INVERT_OVG_NV                                        = $92B4;
  GL_INVERT_RGB_NV                                        = $92A3;
  GL_LIGHTEN_NV                                           = $9298;
  GL_LINEARBURN_NV                                        = $92A5;
  GL_LINEARDODGE_NV                                       = $92A4;
  GL_LINEARLIGHT_NV                                       = $92A7;
  GL_MINUS_CLAMPED_NV                                     = $92B3;
  GL_MINUS_NV                                             = $929F;
  GL_MULTIPLY_NV                                          = $9294;
  GL_OVERLAY_NV                                           = $9296;
  GL_PINLIGHT_NV                                          = $92A8;
  GL_PLUS_CLAMPED_ALPHA_NV                                = $92B2;
  GL_PLUS_CLAMPED_NV                                      = $92B1;
  GL_PLUS_DARKER_NV                                       = $9292;
  GL_PLUS_NV                                              = $9291;
  GL_RED_NV                                               = $1903;
  GL_SCREEN_NV                                            = $9295;
  GL_SOFTLIGHT_NV                                         = $929C;
  GL_SRC_ATOP_NV                                          = $928E;
  GL_SRC_IN_NV                                            = $928A;
  GL_SRC_NV                                               = $9286;
  GL_SRC_OUT_NV                                           = $928C;
  GL_SRC_OVER_NV                                          = $9288;
  GL_UNCORRELATED_NV                                      = $9282;
  GL_VIVIDLIGHT_NV                                        = $92A6;
  GL_XOR_NV                                               = $1506;
type
  TglBlendParameteriNV                                    = procedure(aPname: GLenum; aValue: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglBlendBarrierNV                                       = procedure; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glBlendParameteriNV:                                      TglBlendParameteriNV;
  glBlendBarrierNV:                                         TglBlendBarrierNV;

{ GL_NV_blend_equation_advanced_coherent }
const
  GL_BLEND_ADVANCED_COHERENT_NV                           = $9285;

{ GL_NV_conditional_render }
const
  GL_QUERY_WAIT_NV                                        = $8E13;
  GL_QUERY_NO_WAIT_NV                                     = $8E14;
  GL_QUERY_BY_REGION_WAIT_NV                              = $8E15;
  GL_QUERY_BY_REGION_NO_WAIT_NV                           = $8E16;
type
  TglBeginConditionalRenderNV                             = procedure(aId: GLuint; aMode: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglEndConditionalRenderNV                               = procedure; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glBeginConditionalRenderNV:                               TglBeginConditionalRenderNV;
  glEndConditionalRenderNV:                                 TglEndConditionalRenderNV;

{ GL_NV_copy_buffer }
const
  GL_COPY_READ_BUFFER_NV                                  = $8F36;
  GL_COPY_WRITE_BUFFER_NV                                 = $8F37;
type
  TglCopyBufferSubDataNV                                  = procedure(aReadTarget: GLenum; aWriteTarget: GLenum; aReadOffset: GLintptr; aWriteOffset: GLintptr; aSize: GLsizeiptr); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glCopyBufferSubDataNV:                                    TglCopyBufferSubDataNV;

{ GL_NV_coverage_sample }
const
  GL_COVERAGE_COMPONENT_NV                                = $8ED0;
  GL_COVERAGE_COMPONENT4_NV                               = $8ED1;
  GL_COVERAGE_ATTACHMENT_NV                               = $8ED2;
  GL_COVERAGE_BUFFERS_NV                                  = $8ED3;
  GL_COVERAGE_SAMPLES_NV                                  = $8ED4;
  GL_COVERAGE_ALL_FRAGMENTS_NV                            = $8ED5;
  GL_COVERAGE_EDGE_FRAGMENTS_NV                           = $8ED6;
  GL_COVERAGE_AUTOMATIC_NV                                = $8ED7;
  GL_COVERAGE_BUFFER_BIT_NV                               = $00008000;
type
  TglCoverageMaskNV                                       = procedure(aMask: GLboolean); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglCoverageOperationNV                                  = procedure(aOperation: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glCoverageMaskNV:                                         TglCoverageMaskNV;
  glCoverageOperationNV:                                    TglCoverageOperationNV;

{ GL_NV_depth_nonlinear }
const
  GL_DEPTH_COMPONENT16_NONLINEAR_NV                       = $8E2C;

{ GL_NV_draw_buffers }
const
  GL_MAX_DRAW_BUFFERS_NV                                  = $8824;
  GL_DRAW_BUFFER0_NV                                      = $8825;
  GL_DRAW_BUFFER1_NV                                      = $8826;
  GL_DRAW_BUFFER2_NV                                      = $8827;
  GL_DRAW_BUFFER3_NV                                      = $8828;
  GL_DRAW_BUFFER4_NV                                      = $8829;
  GL_DRAW_BUFFER5_NV                                      = $882A;
  GL_DRAW_BUFFER6_NV                                      = $882B;
  GL_DRAW_BUFFER7_NV                                      = $882C;
  GL_DRAW_BUFFER8_NV                                      = $882D;
  GL_DRAW_BUFFER9_NV                                      = $882E;
  GL_DRAW_BUFFER10_NV                                     = $882F;
  GL_DRAW_BUFFER11_NV                                     = $8830;
  GL_DRAW_BUFFER12_NV                                     = $8831;
  GL_DRAW_BUFFER13_NV                                     = $8832;
  GL_DRAW_BUFFER14_NV                                     = $8833;
  GL_DRAW_BUFFER15_NV                                     = $8834;
  GL_COLOR_ATTACHMENT0_NV                                 = $8CE0;
  GL_COLOR_ATTACHMENT1_NV                                 = $8CE1;
  GL_COLOR_ATTACHMENT2_NV                                 = $8CE2;
  GL_COLOR_ATTACHMENT3_NV                                 = $8CE3;
  GL_COLOR_ATTACHMENT4_NV                                 = $8CE4;
  GL_COLOR_ATTACHMENT5_NV                                 = $8CE5;
  GL_COLOR_ATTACHMENT6_NV                                 = $8CE6;
  GL_COLOR_ATTACHMENT7_NV                                 = $8CE7;
  GL_COLOR_ATTACHMENT8_NV                                 = $8CE8;
  GL_COLOR_ATTACHMENT9_NV                                 = $8CE9;
  GL_COLOR_ATTACHMENT10_NV                                = $8CEA;
  GL_COLOR_ATTACHMENT11_NV                                = $8CEB;
  GL_COLOR_ATTACHMENT12_NV                                = $8CEC;
  GL_COLOR_ATTACHMENT13_NV                                = $8CED;
  GL_COLOR_ATTACHMENT14_NV                                = $8CEE;
  GL_COLOR_ATTACHMENT15_NV                                = $8CEF;
type
  TglDrawBuffersNV                                        = procedure(n: GLsizei; const aBufs: PGLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glDrawBuffersNV:                                          TglDrawBuffersNV;

{ GL_NV_draw_instanced }
type
  TglDrawArraysInstancedNV                                = procedure(aMode: GLenum; aFirst: GLint; aCount: GLsizei; aPrimcount: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDrawElementsInstancedNV                              = procedure(aMode: GLenum; aCount: GLsizei; aType: GLenum; const aIndices: Pointer; aPrimcount: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glDrawArraysInstancedNV:                                  TglDrawArraysInstancedNV;
  glDrawElementsInstancedNV:                                TglDrawElementsInstancedNV;

{ GL_NV_explicit_attrib_location }
  // none

{ GL_NV_fbo_color_attachments }
const
  GL_MAX_COLOR_ATTACHMENTS_NV                             = $8CDF;

{ GL_NV_fence }
const
  GL_ALL_COMPLETED_NV                                     = $84F2;
  GL_FENCE_STATUS_NV                                      = $84F3;
  GL_FENCE_CONDITION_NV                                   = $84F4;
type
  TglDeleteFencesNV                                       = procedure(n: GLsizei; const aFences: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGenFencesNV                                          = procedure(n: GLsizei; aFences: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglIsFenceNV                                            = function (aFence: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglTestFenceNV                                          = function (aFence: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetFenceivNV                                         = procedure(aFence: GLuint; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglFinishFenceNV                                        = procedure(aFence: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglSetFenceNV                                           = procedure(aFence: GLuint; aCondition: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glDeleteFencesNV:                                         TglDeleteFencesNV;
  glGenFencesNV:                                            TglGenFencesNV;
  glIsFenceNV:                                              TglIsFenceNV;
  glTestFenceNV:                                            TglTestFenceNV;
  glGetFenceivNV:                                           TglGetFenceivNV;
  glFinishFenceNV:                                          TglFinishFenceNV;
  glSetFenceNV:                                             TglSetFenceNV;

{ GL_NV_framebuffer_blit }
const
  GL_READ_FRAMEBUFFER_NV                                  = $8CA8;
  GL_DRAW_FRAMEBUFFER_NV                                  = $8CA9;
  GL_DRAW_FRAMEBUFFER_BINDING_NV                          = $8CA6;
  GL_READ_FRAMEBUFFER_BINDING_NV                          = $8CAA;
type
  TglBlitFramebufferNV                                    = procedure(aSrcX0: GLint; aSrcY0: GLint; aSrcX1: GLint; aSrcY1: GLint; aDstX0: GLint; aDstY0: GLint; aDstX1: GLint; aDstY1: GLint; aMask: GLbitfield; aFilter: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glBlitFramebufferNV:                                      TglBlitFramebufferNV;

{ GL_NV_framebuffer_multisample }
const
  GL_RENDERBUFFER_SAMPLES_NV                              = $8CAB;
  GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_NV                = $8D56;
  GL_MAX_SAMPLES_NV                                       = $8D57;
type
  TglRenderbufferStorageMultisampleNV                     = procedure(aTarget: GLenum; aSamples: GLsizei; aInternalformat: GLenum; aWidth: GLsizei; aHeight: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glRenderbufferStorageMultisampleNV:                       TglRenderbufferStorageMultisampleNV;

{ GL_NV_generate_mipmap_sRGB }
  // none

{ GL_NV_image_formats }
  // none

{ GL_NV_instanced_arrays }
const
  GL_VERTEX_ATTRIB_ARRAY_DIVISOR_NV                       = $88FE;
type
  TglVertexAttribDivisorNV                                = procedure(aIndex: GLuint; aDivisor: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glVertexAttribDivisorNV:                                  TglVertexAttribDivisorNV;

{ GL_NV_internalformat_sample_query }
const
  //GL_TEXTURE_2D_MULTISAMPLE                             = $9100;
  GL_TEXTURE_2D_MULTISAMPLE_ARRAY                         = $9102;
  GL_MULTISAMPLES_NV                                      = $9371;
  GL_SUPERSAMPLE_SCALE_X_NV                               = $9372;
  GL_SUPERSAMPLE_SCALE_Y_NV                               = $9373;
  GL_CONFORMANT_NV                                        = $9374;
type
  TglGetInternalformatSampleivNV                          = procedure(aTarget: GLenum; aInternalformat: GLenum; aSamples: GLsizei; aPname: GLenum; aBufSize: GLsizei; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glGetInternalformatSampleivNV:                            TglGetInternalformatSampleivNV;

{ GL_NV_non_square_matrices }
const
  GL_FLOAT_MAT2x3_NV                                      = $8B65;
  GL_FLOAT_MAT2x4_NV                                      = $8B66;
  GL_FLOAT_MAT3x2_NV                                      = $8B67;
  GL_FLOAT_MAT3x4_NV                                      = $8B68;
  GL_FLOAT_MAT4x2_NV                                      = $8B69;
  GL_FLOAT_MAT4x3_NV                                      = $8B6A;
type
  TglUniformMatrix2x3fvNV                                 = procedure(aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUniformMatrix3x2fvNV                                 = procedure(aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUniformMatrix2x4fvNV                                 = procedure(aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUniformMatrix4x2fvNV                                 = procedure(aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUniformMatrix3x4fvNV                                 = procedure(aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglUniformMatrix4x3fvNV                                 = procedure(aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glUniformMatrix2x3fvNV:                                   TglUniformMatrix2x3fvNV;
  glUniformMatrix3x2fvNV:                                   TglUniformMatrix3x2fvNV;
  glUniformMatrix2x4fvNV:                                   TglUniformMatrix2x4fvNV;
  glUniformMatrix4x2fvNV:                                   TglUniformMatrix4x2fvNV;
  glUniformMatrix3x4fvNV:                                   TglUniformMatrix3x4fvNV;
  glUniformMatrix4x3fvNV:                                   TglUniformMatrix4x3fvNV;

{ GL_NV_path_rendering }
const
  GL_PATH_FORMAT_SVG_NV                                   = $9070;
  GL_PATH_FORMAT_PS_NV                                    = $9071;
  GL_STANDARD_FONT_NAME_NV                                = $9072;
  GL_SYSTEM_FONT_NAME_NV                                  = $9073;
  GL_FILE_NAME_NV                                         = $9074;
  GL_PATH_STROKE_WIDTH_NV                                 = $9075;
  GL_PATH_END_CAPS_NV                                     = $9076;
  GL_PATH_INITIAL_END_CAP_NV                              = $9077;
  GL_PATH_TERMINAL_END_CAP_NV                             = $9078;
  GL_PATH_JOIN_STYLE_NV                                   = $9079;
  GL_PATH_MITER_LIMIT_NV                                  = $907A;
  GL_PATH_DASH_CAPS_NV                                    = $907B;
  GL_PATH_INITIAL_DASH_CAP_NV                             = $907C;
  GL_PATH_TERMINAL_DASH_CAP_NV                            = $907D;
  GL_PATH_DASH_OFFSET_NV                                  = $907E;
  GL_PATH_CLIENT_LENGTH_NV                                = $907F;
  GL_PATH_FILL_MODE_NV                                    = $9080;
  GL_PATH_FILL_MASK_NV                                    = $9081;
  GL_PATH_FILL_COVER_MODE_NV                              = $9082;
  GL_PATH_STROKE_COVER_MODE_NV                            = $9083;
  GL_PATH_STROKE_MASK_NV                                  = $9084;
  GL_COUNT_UP_NV                                          = $9088;
  GL_COUNT_DOWN_NV                                        = $9089;
  GL_PATH_OBJECT_BOUNDING_BOX_NV                          = $908A;
  GL_CONVEX_HULL_NV                                       = $908B;
  GL_BOUNDING_BOX_NV                                      = $908D;
  GL_TRANSLATE_X_NV                                       = $908E;
  GL_TRANSLATE_Y_NV                                       = $908F;
  GL_TRANSLATE_2D_NV                                      = $9090;
  GL_TRANSLATE_3D_NV                                      = $9091;
  GL_AFFINE_2D_NV                                         = $9092;
  GL_AFFINE_3D_NV                                         = $9094;
  GL_TRANSPOSE_AFFINE_2D_NV                               = $9096;
  GL_TRANSPOSE_AFFINE_3D_NV                               = $9098;
  GL_UTF8_NV                                              = $909A;
  GL_UTF16_NV                                             = $909B;
  GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV                    = $909C;
  GL_PATH_COMMAND_COUNT_NV                                = $909D;
  GL_PATH_COORD_COUNT_NV                                  = $909E;
  GL_PATH_DASH_ARRAY_COUNT_NV                             = $909F;
  GL_PATH_COMPUTED_LENGTH_NV                              = $90A0;
  GL_PATH_FILL_BOUNDING_BOX_NV                            = $90A1;
  GL_PATH_STROKE_BOUNDING_BOX_NV                          = $90A2;
  GL_SQUARE_NV                                            = $90A3;
  GL_ROUND_NV                                             = $90A4;
  GL_TRIANGULAR_NV                                        = $90A5;
  GL_BEVEL_NV                                             = $90A6;
  GL_MITER_REVERT_NV                                      = $90A7;
  GL_MITER_TRUNCATE_NV                                    = $90A8;
  GL_SKIP_MISSING_GLYPH_NV                                = $90A9;
  GL_USE_MISSING_GLYPH_NV                                 = $90AA;
  GL_PATH_ERROR_POSITION_NV                               = $90AB;
  GL_ACCUM_ADJACENT_PAIRS_NV                              = $90AD;
  GL_ADJACENT_PAIRS_NV                                    = $90AE;
  GL_FIRST_TO_REST_NV                                     = $90AF;
  GL_PATH_GEN_MODE_NV                                     = $90B0;
  GL_PATH_GEN_COEFF_NV                                    = $90B1;
  GL_PATH_GEN_COMPONENTS_NV                               = $90B3;
  GL_PATH_STENCIL_FUNC_NV                                 = $90B7;
  GL_PATH_STENCIL_REF_NV                                  = $90B8;
  GL_PATH_STENCIL_VALUE_MASK_NV                           = $90B9;
  GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV                  = $90BD;
  GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV                   = $90BE;
  GL_PATH_COVER_DEPTH_FUNC_NV                             = $90BF;
  GL_PATH_DASH_OFFSET_RESET_NV                            = $90B4;
  GL_MOVE_TO_RESETS_NV                                    = $90B5;
  GL_MOVE_TO_CONTINUES_NV                                 = $90B6;
  GL_CLOSE_PATH_NV                                        = $00;
  GL_MOVE_TO_NV                                           = $02;
  GL_RELATIVE_MOVE_TO_NV                                  = $03;
  GL_LINE_TO_NV                                           = $04;
  GL_RELATIVE_LINE_TO_NV                                  = $05;
  GL_HORIZONTAL_LINE_TO_NV                                = $06;
  GL_RELATIVE_HORIZONTAL_LINE_TO_NV                       = $07;
  GL_VERTICAL_LINE_TO_NV                                  = $08;
  GL_RELATIVE_VERTICAL_LINE_TO_NV                         = $09;
  GL_QUADRATIC_CURVE_TO_NV                                = $0A;
  GL_RELATIVE_QUADRATIC_CURVE_TO_NV                       = $0B;
  GL_CUBIC_CURVE_TO_NV                                    = $0C;
  GL_RELATIVE_CUBIC_CURVE_TO_NV                           = $0D;
  GL_SMOOTH_QUADRATIC_CURVE_TO_NV                         = $0E;
  GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV                = $0F;
  GL_SMOOTH_CUBIC_CURVE_TO_NV                             = $10;
  GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV                    = $11;
  GL_SMALL_CCW_ARC_TO_NV                                  = $12;
  GL_RELATIVE_SMALL_CCW_ARC_TO_NV                         = $13;
  GL_SMALL_CW_ARC_TO_NV                                   = $14;
  GL_RELATIVE_SMALL_CW_ARC_TO_NV                          = $15;
  GL_LARGE_CCW_ARC_TO_NV                                  = $16;
  GL_RELATIVE_LARGE_CCW_ARC_TO_NV                         = $17;
  GL_LARGE_CW_ARC_TO_NV                                   = $18;
  GL_RELATIVE_LARGE_CW_ARC_TO_NV                          = $19;
  GL_RESTART_PATH_NV                                      = $F0;
  GL_DUP_FIRST_CUBIC_CURVE_TO_NV                          = $F2;
  GL_DUP_LAST_CUBIC_CURVE_TO_NV                           = $F4;
  GL_RECT_NV                                              = $F6;
  GL_CIRCULAR_CCW_ARC_TO_NV                               = $F8;
  GL_CIRCULAR_CW_ARC_TO_NV                                = $FA;
  GL_CIRCULAR_TANGENT_ARC_TO_NV                           = $FC;
  GL_ARC_TO_NV                                            = $FE;
  GL_RELATIVE_ARC_TO_NV                                   = $FF;
  GL_BOLD_BIT_NV                                          = $01;
  GL_ITALIC_BIT_NV                                        = $02;
  GL_GLYPH_WIDTH_BIT_NV                                   = $01;
  GL_GLYPH_HEIGHT_BIT_NV                                  = $02;
  GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV                    = $04;
  GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV                    = $08;
  GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV              = $10;
  GL_GLYPH_VERTICAL_BEARING_X_BIT_NV                      = $20;
  GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV                      = $40;
  GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV                = $80;
  GL_GLYPH_HAS_KERNING_BIT_NV                             = $100;
  GL_FONT_X_MIN_BOUNDS_BIT_NV                             = $00010000;
  GL_FONT_Y_MIN_BOUNDS_BIT_NV                             = $00020000;
  GL_FONT_X_MAX_BOUNDS_BIT_NV                             = $00040000;
  GL_FONT_Y_MAX_BOUNDS_BIT_NV                             = $00080000;
  GL_FONT_UNITS_PER_EM_BIT_NV                             = $00100000;
  GL_FONT_ASCENDER_BIT_NV                                 = $00200000;
  GL_FONT_DESCENDER_BIT_NV                                = $00400000;
  GL_FONT_HEIGHT_BIT_NV                                   = $00800000;
  GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV                        = $01000000;
  GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV                       = $02000000;
  GL_FONT_UNDERLINE_POSITION_BIT_NV                       = $04000000;
  GL_FONT_UNDERLINE_THICKNESS_BIT_NV                      = $08000000;
  GL_FONT_HAS_KERNING_BIT_NV                              = $10000000;
  GL_ROUNDED_RECT_NV                                      = $E8;
  GL_RELATIVE_ROUNDED_RECT_NV                             = $E9;
  GL_ROUNDED_RECT2_NV                                     = $EA;
  GL_RELATIVE_ROUNDED_RECT2_NV                            = $EB;
  GL_ROUNDED_RECT4_NV                                     = $EC;
  GL_RELATIVE_ROUNDED_RECT4_NV                            = $ED;
  GL_ROUNDED_RECT8_NV                                     = $EE;
  GL_RELATIVE_ROUNDED_RECT8_NV                            = $EF;
  GL_RELATIVE_RECT_NV                                     = $F7;
  GL_FONT_GLYPHS_AVAILABLE_NV                             = $9368;
  GL_FONT_TARGET_UNAVAILABLE_NV                           = $9369;
  GL_FONT_UNAVAILABLE_NV                                  = $936A;
  GL_FONT_UNINTELLIGIBLE_NV                               = $936B;
  GL_CONIC_CURVE_TO_NV                                    = $1A;
  GL_RELATIVE_CONIC_CURVE_TO_NV                           = $1B;
  GL_FONT_NUM_GLYPH_INDICES_BIT_NV                        = $20000000;
  GL_STANDARD_FONT_FORMAT_NV                              = $936C;
  GL_PATH_PROJECTION_NV                                   = $1701;
  GL_PATH_MODELVIEW_NV                                    = $1700;
  GL_PATH_MODELVIEW_STACK_DEPTH_NV                        = $0BA3;
  GL_PATH_MODELVIEW_MATRIX_NV                             = $0BA6;
  GL_PATH_MAX_MODELVIEW_STACK_DEPTH_NV                    = $0D36;
  GL_PATH_TRANSPOSE_MODELVIEW_MATRIX_NV                   = $84E3;
  GL_PATH_PROJECTION_STACK_DEPTH_NV                       = $0BA4;
  GL_PATH_PROJECTION_MATRIX_NV                            = $0BA7;
  GL_PATH_MAX_PROJECTION_STACK_DEPTH_NV                   = $0D38;
  GL_PATH_TRANSPOSE_PROJECTION_MATRIX_NV                  = $84E4;
  GL_FRAGMENT_INPUT_NV                                    = $936D;
type
  TglGenPathsNV                                           = function (aRange: GLsizei): GLuint; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDeletePathsNV                                        = procedure(aPath: GLuint; aRange: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglIsPathNV                                             = function (aPath: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglPathCommandsNV                                       = procedure(aPath: GLuint; aNumCommands: GLsizei; const aCommands: PGLubyte; aNumCoords: GLsizei; aCoordType: GLenum; const aCoords: Pointer); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglPathCoordsNV                                         = procedure(aPath: GLuint; aNumCoords: GLsizei; aCoordType: GLenum; const aCoords: Pointer); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglPathSubCommandsNV                                    = procedure(aPath: GLuint; aCommandStart: GLsizei; aCommandsToDelete: GLsizei; aNumCommands: GLsizei; const aCommands: PGLubyte; aNumCoords: GLsizei; aCoordType: GLenum; const aCoords: Pointer); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglPathSubCoordsNV                                      = procedure(aPath: GLuint; aCoordStart: GLsizei; aNumCoords: GLsizei; aCoordType: GLenum; const aCoords: Pointer); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglPathStringNV                                         = procedure(aPath: GLuint; aFormat: GLenum; aLength: GLsizei; const aPathString: Pointer); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglPathGlyphsNV                                         = procedure(aFirstPathName: GLuint; aFontTarget: GLenum; const aFontName: Pointer; aFontStyle: GLbitfield; aNumGlyphs: GLsizei; aType: GLenum; const aCharcodes: Pointer; aHandleMissingGlyphs: GLenum; aPathParameterTemplate: GLuint; aEmScale: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglPathGlyphRangeNV                                     = procedure(aFirstPathName: GLuint; aFontTarget: GLenum; const aFontName: Pointer; aFontStyle: GLbitfield; aFirstGlyph: GLuint; aNumGlyphs: GLsizei; aHandleMissingGlyphs: GLenum; aPathParameterTemplate: GLuint; aEmScale: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglWeightPathsNV                                        = procedure(aResultPath: GLuint; aNumPaths: GLsizei; const aPaths: PGLuint; const aWeights: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglCopyPathNV                                           = procedure(aResultPath: GLuint; aSrcPath: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglInterpolatePathsNV                                   = procedure(aResultPath: GLuint; aPathA: GLuint; aPathB: GLuint; aWeight: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglTransformPathNV                                      = procedure(aResultPath: GLuint; aSrcPath: GLuint; aTransformType: GLenum; const aTransformValues: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglPathParameterivNV                                    = procedure(aPath: GLuint; aPname: GLenum; const aValue: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglPathParameteriNV                                     = procedure(aPath: GLuint; aPname: GLenum; aValue: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglPathParameterfvNV                                    = procedure(aPath: GLuint; aPname: GLenum; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglPathParameterfNV                                     = procedure(aPath: GLuint; aPname: GLenum; aValue: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglPathDashArrayNV                                      = procedure(aPath: GLuint; aDashCount: GLsizei; const aDashArray: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglPathStencilFuncNV                                    = procedure(aFunc: GLenum; aRef: GLint; aMask: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglPathStencilDepthOffsetNV                             = procedure(aFactor: GLfloat; aUnits: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglStencilFillPathNV                                    = procedure(aPath: GLuint; aFillMode: GLenum; aMask: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglStencilStrokePathNV                                  = procedure(aPath: GLuint; aReference: GLint; aMask: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglStencilFillPathInstancedNV                           = procedure(aNumPaths: GLsizei; aPathNameType: GLenum; const aPaths: Pointer; aPathBase: GLuint; aFillMode: GLenum; aMask: GLuint; aTransformType: GLenum; const aTransformValues: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglStencilStrokePathInstancedNV                         = procedure(aNumPaths: GLsizei; aPathNameType: GLenum; const aPaths: Pointer; aPathBase: GLuint; aReference: GLint; aMask: GLuint; aTransformType: GLenum; const aTransformValues: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglPathCoverDepthFuncNV                                 = procedure(aFunc: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglCoverFillPathNV                                      = procedure(aPath: GLuint; aCoverMode: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglCoverStrokePathNV                                    = procedure(aPath: GLuint; aCoverMode: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglCoverFillPathInstancedNV                             = procedure(aNumPaths: GLsizei; aPathNameType: GLenum; const aPaths: Pointer; aPathBase: GLuint; aCoverMode: GLenum; aTransformType: GLenum; const aTransformValues: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglCoverStrokePathInstancedNV                           = procedure(aNumPaths: GLsizei; aPathNameType: GLenum; const aPaths: Pointer; aPathBase: GLuint; aCoverMode: GLenum; aTransformType: GLenum; const aTransformValues: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetPathParameterivNV                                 = procedure(aPath: GLuint; aPname: GLenum; aValue: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetPathParameterfvNV                                 = procedure(aPath: GLuint; aPname: GLenum; aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetPathCommandsNV                                    = procedure(aPath: GLuint; aCommands: PGLubyte); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetPathCoordsNV                                      = procedure(aPath: GLuint; aCoords: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetPathDashArrayNV                                   = procedure(aPath: GLuint; aDashArray: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetPathMetricsNV                                     = procedure(aMetricQueryMask: GLbitfield; aNumPaths: GLsizei; aPathNameType: GLenum; const aPaths: Pointer; aPathBase: GLuint; aStride: GLsizei; aMetrics: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetPathMetricRangeNV                                 = procedure(aMetricQueryMask: GLbitfield; aFirstPathName: GLuint; aNumPaths: GLsizei; aStride: GLsizei; aMetrics: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetPathSpacingNV                                     = procedure(aPathListMode: GLenum; aNumPaths: GLsizei; aPathNameType: GLenum; const aPaths: Pointer; aPathBase: GLuint; aAdvanceScale: GLfloat; aKerningScale: GLfloat; aTransformType: GLenum; aReturnedSpacing: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglIsPointInFillPathNV                                  = function (aPath: GLuint; aMask: GLuint; x: GLfloat; y: GLfloat): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglIsPointInStrokePathNV                                = function (aPath: GLuint; x: GLfloat; y: GLfloat): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetPathLengthNV                                      = function (aPath: GLuint; aStartSegment: GLsizei; aNumSegments: GLsizei): GLfloat; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglPointAlongPathNV                                     = function (aPath: GLuint; aStartSegment: GLsizei; aNumSegments: GLsizei; aDistance: GLfloat; x: PGLfloat; y: PGLfloat; aTangentX: PGLfloat; aTangentY: PGLfloat): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglMatrixLoad3x2fNV                                     = procedure(aMatrixMode: GLenum; const m: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglMatrixLoad3x3fNV                                     = procedure(aMatrixMode: GLenum; const m: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglMatrixLoadTranspose3x3fNV                            = procedure(aMatrixMode: GLenum; const m: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglMatrixMult3x2fNV                                     = procedure(aMatrixMode: GLenum; const m: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglMatrixMult3x3fNV                                     = procedure(aMatrixMode: GLenum; const m: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglMatrixMultTranspose3x3fNV                            = procedure(aMatrixMode: GLenum; const m: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglStencilThenCoverFillPathNV                           = procedure(aPath: GLuint; aFillMode: GLenum; aMask: GLuint; aCoverMode: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglStencilThenCoverStrokePathNV                         = procedure(aPath: GLuint; aReference: GLint; aMask: GLuint; aCoverMode: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglStencilThenCoverFillPathInstancedNV                  = procedure(aNumPaths: GLsizei; aPathNameType: GLenum; const aPaths: Pointer; aPathBase: GLuint; aFillMode: GLenum; aMask: GLuint; aCoverMode: GLenum; aTransformType: GLenum; const aTransformValues: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglStencilThenCoverStrokePathInstancedNV                = procedure(aNumPaths: GLsizei; aPathNameType: GLenum; const aPaths: Pointer; aPathBase: GLuint; aReference: GLint; aMask: GLuint; aCoverMode: GLenum; aTransformType: GLenum; const aTransformValues: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglPathGlyphIndexRangeNV                                = function (aFontTarget: GLenum; const aFontName: Pointer; aFontStyle: GLbitfield; aPathParameterTemplate: GLuint; aEmScale: GLfloat; aBaseAndCount: PGLuint): GLenum; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglPathGlyphIndexArrayNV                                = function (aFirstPathName: GLuint; aFontTarget: GLenum; const aFontName: Pointer; aFontStyle: GLbitfield; aFirstGlyphIndex: GLuint; aNumGlyphs: GLsizei; aPathParameterTemplate: GLuint; aEmScale: GLfloat): GLenum; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglPathMemoryGlyphIndexArrayNV                          = function (aFirstPathName: GLuint; aFontTarget: GLenum; aFontSize: GLsizeiptr; const aFontData: Pointer; aFaceIndex: GLsizei; aFirstGlyphIndex: GLuint; aNumGlyphs: GLsizei; aPathParameterTemplate: GLuint; aEmScale: GLfloat): GLenum; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglProgramPathFragmentInputGenNV                        = procedure(aProgram: GLuint; aLocation: GLint; aGenMode: GLenum; aComponents: GLint; const aCoeffs: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetProgramResourcefvNV                               = procedure(aProgram: GLuint; aProgramInterface: GLenum; aIndex: GLuint; aPropCount: GLsizei; const aProps: PGLenum; aBufSize: GLsizei; aLength: PGLsizei; aParams: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glGenPathsNV:                                             TglGenPathsNV;
  glDeletePathsNV:                                          TglDeletePathsNV;
  glIsPathNV:                                               TglIsPathNV;
  glPathCommandsNV:                                         TglPathCommandsNV;
  glPathCoordsNV:                                           TglPathCoordsNV;
  glPathSubCommandsNV:                                      TglPathSubCommandsNV;
  glPathSubCoordsNV:                                        TglPathSubCoordsNV;
  glPathStringNV:                                           TglPathStringNV;
  glPathGlyphsNV:                                           TglPathGlyphsNV;
  glPathGlyphRangeNV:                                       TglPathGlyphRangeNV;
  glWeightPathsNV:                                          TglWeightPathsNV;
  glCopyPathNV:                                             TglCopyPathNV;
  glInterpolatePathsNV:                                     TglInterpolatePathsNV;
  glTransformPathNV:                                        TglTransformPathNV;
  glPathParameterivNV:                                      TglPathParameterivNV;
  glPathParameteriNV:                                       TglPathParameteriNV;
  glPathParameterfvNV:                                      TglPathParameterfvNV;
  glPathParameterfNV:                                       TglPathParameterfNV;
  glPathDashArrayNV:                                        TglPathDashArrayNV;
  glPathStencilFuncNV:                                      TglPathStencilFuncNV;
  glPathStencilDepthOffsetNV:                               TglPathStencilDepthOffsetNV;
  glStencilFillPathNV:                                      TglStencilFillPathNV;
  glStencilStrokePathNV:                                    TglStencilStrokePathNV;
  glStencilFillPathInstancedNV:                             TglStencilFillPathInstancedNV;
  glStencilStrokePathInstancedNV:                           TglStencilStrokePathInstancedNV;
  glPathCoverDepthFuncNV:                                   TglPathCoverDepthFuncNV;
  glCoverFillPathNV:                                        TglCoverFillPathNV;
  glCoverStrokePathNV:                                      TglCoverStrokePathNV;
  glCoverFillPathInstancedNV:                               TglCoverFillPathInstancedNV;
  glCoverStrokePathInstancedNV:                             TglCoverStrokePathInstancedNV;
  glGetPathParameterivNV:                                   TglGetPathParameterivNV;
  glGetPathParameterfvNV:                                   TglGetPathParameterfvNV;
  glGetPathCommandsNV:                                      TglGetPathCommandsNV;
  glGetPathCoordsNV:                                        TglGetPathCoordsNV;
  glGetPathDashArrayNV:                                     TglGetPathDashArrayNV;
  glGetPathMetricsNV:                                       TglGetPathMetricsNV;
  glGetPathMetricRangeNV:                                   TglGetPathMetricRangeNV;
  glGetPathSpacingNV:                                       TglGetPathSpacingNV;
  glIsPointInFillPathNV:                                    TglIsPointInFillPathNV;
  glIsPointInStrokePathNV:                                  TglIsPointInStrokePathNV;
  glGetPathLengthNV:                                        TglGetPathLengthNV;
  glPointAlongPathNV:                                       TglPointAlongPathNV;
  glMatrixLoad3x2fNV:                                       TglMatrixLoad3x2fNV;
  glMatrixLoad3x3fNV:                                       TglMatrixLoad3x3fNV;
  glMatrixLoadTranspose3x3fNV:                              TglMatrixLoadTranspose3x3fNV;
  glMatrixMult3x2fNV:                                       TglMatrixMult3x2fNV;
  glMatrixMult3x3fNV:                                       TglMatrixMult3x3fNV;
  glMatrixMultTranspose3x3fNV:                              TglMatrixMultTranspose3x3fNV;
  glStencilThenCoverFillPathNV:                             TglStencilThenCoverFillPathNV;
  glStencilThenCoverStrokePathNV:                           TglStencilThenCoverStrokePathNV;
  glStencilThenCoverFillPathInstancedNV:                    TglStencilThenCoverFillPathInstancedNV;
  glStencilThenCoverStrokePathInstancedNV:                  TglStencilThenCoverStrokePathInstancedNV;
  glPathGlyphIndexRangeNV:                                  TglPathGlyphIndexRangeNV;
  glPathGlyphIndexArrayNV:                                  TglPathGlyphIndexArrayNV;
  glPathMemoryGlyphIndexArrayNV:                            TglPathMemoryGlyphIndexArrayNV;
  glProgramPathFragmentInputGenNV:                          TglProgramPathFragmentInputGenNV;
  glGetProgramResourcefvNV:                                 TglGetProgramResourcefvNV;

{ GL_NV_read_buffer }
const
  GL_READ_BUFFER_NV                                       = $0C02;
type
  TglReadBufferNV                                         = procedure(aMode: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glReadBufferNV:                                           TglReadBufferNV;

{ GL_NV_read_buffer_front }
  // none

{ GL_NV_read_depth }
  // none

{ GL_NV_read_depth_stencil }
  // none

{ GL_NV_read_stencil }
  // none

{ GL_NV_sRGB_formats }
const
  GL_SLUMINANCE_NV                                        = $8C46;
  GL_SLUMINANCE_ALPHA_NV                                  = $8C44;
  GL_SRGB8_NV                                             = $8C41;
  GL_SLUMINANCE8_NV                                       = $8C47;
  GL_SLUMINANCE8_ALPHA8_NV                                = $8C45;
  GL_COMPRESSED_SRGB_S3TC_DXT1_NV                         = $8C4C;
  GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_NV                   = $8C4D;
  GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_NV                   = $8C4E;
  GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_NV                   = $8C4F;
  GL_ETC1_SRGB8_NV                                        = $88EE;

{ GL_NV_shader_noperspective_interpolation }
  // none

{ GL_NV_shadow_samplers_array }
const
  GL_SAMPLER_2D_ARRAY_SHADOW_NV                           = $8DC4;

{ GL_NV_shadow_samplers_cube }
const
  GL_SAMPLER_CUBE_SHADOW_NV                               = $8DC5;

{ GL_NV_texture_border_clamp }
const
  GL_TEXTURE_BORDER_COLOR_NV                              = $1004;
  GL_CLAMP_TO_BORDER_NV                                   = $812D;

{ GL_NV_texture_compression_s3tc_update }
  // none

{ GL_NV_texture_npot_2D_mipmap }
  // none

{ GL_NV_viewport_array }
const
  GL_MAX_VIEWPORTS_NV                                     = $825B;
  GL_VIEWPORT_SUBPIXEL_BITS_NV                            = $825C;
  GL_VIEWPORT_BOUNDS_RANGE_NV                             = $825D;
  GL_VIEWPORT_INDEX_PROVOKING_VERTEX_NV                   = $825F;
type
  TglViewportArrayvNV                                     = procedure(aFirst: GLuint; aCount: GLsizei; const v: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglViewportIndexedfNV                                   = procedure(aIndex: GLuint; x: GLfloat; y: GLfloat; w: GLfloat; h: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglViewportIndexedfvNV                                  = procedure(aIndex: GLuint; const v: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglScissorArrayvNV                                      = procedure(aFirst: GLuint; aCount: GLsizei; const v: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglScissorIndexedNV                                     = procedure(aIndex: GLuint; aLeft: GLint; aBottom: GLint; aWidth: GLsizei; aHeight: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglScissorIndexedvNV                                    = procedure(aIndex: GLuint; const v: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDepthRangeArrayfvNV                                  = procedure(aFirst: GLuint; aCount: GLsizei; const v: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDepthRangeIndexedfNV                                 = procedure(aIndex: GLuint; n: GLfloat; f: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetFloati_vNV                                        = procedure(aTarget: GLenum; aIndex: GLuint; aData: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglEnableiNV                                            = procedure(aTarget: GLenum; aIndex: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDisableiNV                                           = procedure(aTarget: GLenum; aIndex: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglIsEnablediNV                                         = function (aTarget: GLenum; aIndex: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glViewportArrayvNV:                                       TglViewportArrayvNV;
  glViewportIndexedfNV:                                     TglViewportIndexedfNV;
  glViewportIndexedfvNV:                                    TglViewportIndexedfvNV;
  glScissorArrayvNV:                                        TglScissorArrayvNV;
  glScissorIndexedNV:                                       TglScissorIndexedNV;
  glScissorIndexedvNV:                                      TglScissorIndexedvNV;
  glDepthRangeArrayfvNV:                                    TglDepthRangeArrayfvNV;
  glDepthRangeIndexedfNV:                                   TglDepthRangeIndexedfNV;
  glGetFloati_vNV:                                          TglGetFloati_vNV;
  glEnableiNV:                                              TglEnableiNV;
  glDisableiNV:                                             TglDisableiNV;
  glIsEnablediNV:                                           TglIsEnablediNV;

{ GL_QCOM_alpha_test }
const
  GL_ALPHA_TEST_QCOM                                      = $0BC0;
  GL_ALPHA_TEST_FUNC_QCOM                                 = $0BC1;
  GL_ALPHA_TEST_REF_QCOM                                  = $0BC2;
type
  TglAlphaFuncQCOM                                        = procedure(aFunc: GLenum; aRef: GLclampf); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glAlphaFuncQCOM:                                          TglAlphaFuncQCOM;

{ GL_QCOM_binning_control }
const
  GL_BINNING_CONTROL_HINT_QCOM                            = $8FB0;
  GL_CPU_OPTIMIZED_QCOM                                   = $8FB1;
  GL_GPU_OPTIMIZED_QCOM                                   = $8FB2;
  GL_RENDER_DIRECT_TO_FRAMEBUFFER_QCOM                    = $8FB3;

{ GL_QCOM_driver_control }
type
  TglGetDriverControlsQCOM                                = procedure(aNum: PGLint; aSize: GLsizei; aDriverControls: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglGetDriverControlStringQCOM                           = procedure(aDriverControl: GLuint; aBufSize: GLsizei; aLength: PGLsizei; aDriverControlString: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglEnableDriverControlQCOM                              = procedure(aDriverControl: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglDisableDriverControlQCOM                             = procedure(aDriverControl: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glGetDriverControlsQCOM:                                  TglGetDriverControlsQCOM;
  glGetDriverControlStringQCOM:                             TglGetDriverControlStringQCOM;
  glEnableDriverControlQCOM:                                TglEnableDriverControlQCOM;
  glDisableDriverControlQCOM:                               TglDisableDriverControlQCOM;

{ GL_QCOM_extended_get }
const
  GL_TEXTURE_WIDTH_QCOM                                   = $8BD2;
  GL_TEXTURE_HEIGHT_QCOM                                  = $8BD3;
  GL_TEXTURE_DEPTH_QCOM                                   = $8BD4;
  GL_TEXTURE_INTERNAL_FORMAT_QCOM                         = $8BD5;
  GL_TEXTURE_FORMAT_QCOM                                  = $8BD6;
  GL_TEXTURE_TYPE_QCOM                                    = $8BD7;
  GL_TEXTURE_IMAGE_VALID_QCOM                             = $8BD8;
  GL_TEXTURE_NUM_LEVELS_QCOM                              = $8BD9;
  GL_TEXTURE_TARGET_QCOM                                  = $8BDA;
  GL_TEXTURE_OBJECT_VALID_QCOM                            = $8BDB;
  GL_STATE_RESTORE                                        = $8BDC;
type
  TglExtGetTexturesQCOM                                   = procedure(aTextures: PGLuint; aMaxTextures: GLint; aNumTextures: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglExtGetBuffersQCOM                                    = procedure(aBuffers: PGLuint; aMaxBuffers: GLint; aNumBuffers: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglExtGetRenderbuffersQCOM                              = procedure(aRenderbuffers: PGLuint; aMaxRenderbuffers: GLint; aNumRenderbuffers: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglExtGetFramebuffersQCOM                               = procedure(aFramebuffers: PGLuint; aMaxFramebuffers: GLint; aNumFramebuffers: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglExtGetTexLevelParameterivQCOM                        = procedure(aTexture: GLuint; aFace: GLenum; aLevel: GLint; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglExtTexObjectStateOverrideiQCOM                       = procedure(aTarget: GLenum; aPname: GLenum; aParam: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglExtGetTexSubImageQCOM                                = procedure(aTarget: GLenum; aLevel: GLint; aXoffset: GLint; aYoffset: GLint; aZoffset: GLint; aWidth: GLsizei; aHeight: GLsizei; aDepth: GLsizei; aFormat: GLenum; aType: GLenum; aTexels: Pointer); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglExtGetBufferPointervQCOM                             = procedure(aTarget: GLenum; aParams: PPGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glExtGetTexturesQCOM:                                     TglExtGetTexturesQCOM;
  glExtGetBuffersQCOM:                                      TglExtGetBuffersQCOM;
  glExtGetRenderbuffersQCOM:                                TglExtGetRenderbuffersQCOM;
  glExtGetFramebuffersQCOM:                                 TglExtGetFramebuffersQCOM;
  glExtGetTexLevelParameterivQCOM:                          TglExtGetTexLevelParameterivQCOM;
  glExtTexObjectStateOverrideiQCOM:                         TglExtTexObjectStateOverrideiQCOM;
  glExtGetTexSubImageQCOM:                                  TglExtGetTexSubImageQCOM;
  glExtGetBufferPointervQCOM:                               TglExtGetBufferPointervQCOM;

{ GL_QCOM_extended_get2 }
type
  TglExtGetShadersQCOM                                    = procedure(aShaders: PGLuint; aMaxShaders: GLint; aNumShaders: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglExtGetProgramsQCOM                                   = procedure(aPrograms: PGLuint; aMaxPrograms: GLint; aNumPrograms: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglExtIsProgramBinaryQCOM                               = function (aProgram: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglExtGetProgramBinarySourceQCOM                        = procedure(aProgram: GLuint; aShadertype: GLenum; aSource: PGLchar; aLength: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glExtGetShadersQCOM:                                      TglExtGetShadersQCOM;
  glExtGetProgramsQCOM:                                     TglExtGetProgramsQCOM;
  glExtIsProgramBinaryQCOM:                                 TglExtIsProgramBinaryQCOM;
  glExtGetProgramBinarySourceQCOM:                          TglExtGetProgramBinarySourceQCOM;

{ GL_QCOM_perfmon_global_mode }
const
  GL_PERFMON_GLOBAL_MODE_QCOM                             = $8FA0;

{ GL_QCOM_tiled_rendering }
const
  GL_COLOR_BUFFER_BIT0_QCOM                               = $00000001;
  GL_COLOR_BUFFER_BIT1_QCOM                               = $00000002;
  GL_COLOR_BUFFER_BIT2_QCOM                               = $00000004;
  GL_COLOR_BUFFER_BIT3_QCOM                               = $00000008;
  GL_COLOR_BUFFER_BIT4_QCOM                               = $00000010;
  GL_COLOR_BUFFER_BIT5_QCOM                               = $00000020;
  GL_COLOR_BUFFER_BIT6_QCOM                               = $00000040;
  GL_COLOR_BUFFER_BIT7_QCOM                               = $00000080;
  GL_DEPTH_BUFFER_BIT0_QCOM                               = $00000100;
  GL_DEPTH_BUFFER_BIT1_QCOM                               = $00000200;
  GL_DEPTH_BUFFER_BIT2_QCOM                               = $00000400;
  GL_DEPTH_BUFFER_BIT3_QCOM                               = $00000800;
  GL_DEPTH_BUFFER_BIT4_QCOM                               = $00001000;
  GL_DEPTH_BUFFER_BIT5_QCOM                               = $00002000;
  GL_DEPTH_BUFFER_BIT6_QCOM                               = $00004000;
  GL_DEPTH_BUFFER_BIT7_QCOM                               = $00008000;
  GL_STENCIL_BUFFER_BIT0_QCOM                             = $00010000;
  GL_STENCIL_BUFFER_BIT1_QCOM                             = $00020000;
  GL_STENCIL_BUFFER_BIT2_QCOM                             = $00040000;
  GL_STENCIL_BUFFER_BIT3_QCOM                             = $00080000;
  GL_STENCIL_BUFFER_BIT4_QCOM                             = $00100000;
  GL_STENCIL_BUFFER_BIT5_QCOM                             = $00200000;
  GL_STENCIL_BUFFER_BIT6_QCOM                             = $00400000;
  GL_STENCIL_BUFFER_BIT7_QCOM                             = $00800000;
  GL_MULTISAMPLE_BUFFER_BIT0_QCOM                         = $01000000;
  GL_MULTISAMPLE_BUFFER_BIT1_QCOM                         = $02000000;
  GL_MULTISAMPLE_BUFFER_BIT2_QCOM                         = $04000000;
  GL_MULTISAMPLE_BUFFER_BIT3_QCOM                         = $08000000;
  GL_MULTISAMPLE_BUFFER_BIT4_QCOM                         = $10000000;
  GL_MULTISAMPLE_BUFFER_BIT5_QCOM                         = $20000000;
  GL_MULTISAMPLE_BUFFER_BIT6_QCOM                         = $40000000;
  GL_MULTISAMPLE_BUFFER_BIT7_QCOM                         = $80000000;
type
  TglStartTilingQCOM                                      = procedure(x: GLuint; y: GLuint; aWidth: GLuint; aHeight: GLuint; aPreserveMask: GLbitfield); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TglEndTilingQCOM                                        = procedure(aPreserveMask: GLbitfield); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
var
  glStartTilingQCOM:                                        TglStartTilingQCOM;
  glEndTilingQCOM:                                          TglEndTilingQCOM;

{ GL_QCOM_writeonly_rendering }
const
  GL_WRITEONLY_RENDERING_QCOM                             = $8823;

{ GL_VIV_shader_binary }
const
  GL_SHADER_BINARY_VIV                                    = $8FC4;

{ ================================================== EGL ============================================================= }
type
  EGLint                = Integer;
  EGLboolean            = Cardinal;
  EGLenum               = Cardinal;
  EGLConfig             = Pointer;
  EGLContext            = Pointer;
  EGLDisplay            = Pointer;
  EGLSurface            = Pointer;
  EGLClientBuffer       = Pointer;
  EGLNativeDisplayType  = Pointer;
  EGLNativePixmapType   = Pointer;
  EGLNativeWindowType   = packed record
     element: Cardinal;
     width: Integer;
     height: Integer;
  end;

  PEGLint               = ^EGLint;
  PEGLboolean           = ^EGLboolean;
  PEGLenum              = ^EGLenum;
  PEGLConfig            = ^EGLConfig;
  PEGLContext           = ^EGLContext;
  PEGLDisplay           = ^EGLDisplay;
  PEGLSurface           = ^EGLSurface;
  PEGLClientBuffer      = ^EGLClientBuffer;
  PEGLNativeDisplayType = ^EGLNativeDisplayType;
  PEGLNativePixmapType  = ^EGLNativePixmapType;
  PEGLNativeWindowType  = ^EGLNativeWindowType;

const
  EGL_FALSE: EGLboolean = 0;
  EGL_TRUE:  EGLboolean = 1;

  EGL_DEFAULT_DISPLAY:  EGLNativeDisplayType  = nil;
  EGL_NO_CONTEXT:     	EGLContext           	= nil;
  EGL_NO_DISPLAY:			  EGLDisplay            = nil;
  EGL_NO_SURFACE:			  EGLSurface            = nil;

  EGL_DONT_CARE: EGLint = -1;

  EGL_SUCCESS                         = $3000;
  EGL_NOT_INITIALIZED                 = $3001;
  EGL_BAD_ACCESS                      = $3002;
  EGL_BAD_ALLOC                       = $3003;
  EGL_BAD_ATTRIBUTE                   = $3004;
  EGL_BAD_CONFIG                      = $3005;
  EGL_BAD_CONTEXT                     = $3006;
  EGL_BAD_CURRENT_SURFACE             = $3007;
  EGL_BAD_DISPLAY                     = $3008;
  EGL_BAD_MATCH                       = $3009;
  EGL_BAD_NATIVE_PIXMAP               = $300A;
  EGL_BAD_NATIVE_WINDOW               = $300B;
  EGL_BAD_PARAMETER                   = $300C;
  EGL_BAD_SURFACE                     = $300D;
  EGL_CONTEXT_LOST                    = $300E;

  EGL_BUFFER_SIZE                     = $3020;
  EGL_ALPHA_SIZE                      = $3021;
  EGL_BLUE_SIZE                       = $3022;
  EGL_GREEN_SIZE                      = $3023;
  EGL_RED_SIZE                        = $3024;
  EGL_DEPTH_SIZE                      = $3025;
  EGL_STENCIL_SIZE                    = $3026;
  EGL_CONFIG_CAVEAT                   = $3027;
  EGL_CONFIG_ID                       = $3028;
  EGL_LEVEL                           = $3029;
  EGL_MAX_PBUFFER_HEIGHT              = $302A;
  EGL_MAX_PBUFFER_PIXELS              = $302B;
  EGL_MAX_PBUFFER_WIDTH               = $302C;
  EGL_NATIVE_RENDERABLE               = $302D;
  EGL_NATIVE_VISUAL_ID                = $302E;
  EGL_NATIVE_VISUAL_TYPE              = $302F;
  EGL_SAMPLES                         = $3031;
  EGL_SAMPLE_BUFFERS                  = $3032;
  EGL_SURFACE_TYPE                    = $3033;
  EGL_TRANSPARENT_TYPE                = $3034;
  EGL_TRANSPARENT_BLUE_VALUE          = $3035;
  EGL_TRANSPARENT_GREEN_VALUE         = $3036;
  EGL_TRANSPARENT_RED_VALUE           = $3037;
  EGL_NONE                            = $3038;
  EGL_BIND_TO_TEXTURE_RGB             = $3039;
  EGL_BIND_TO_TEXTURE_RGBA            = $303A;
  EGL_MIN_SWAP_INTERVAL               = $303B;
  EGL_MAX_SWAP_INTERVAL               = $303C;
  EGL_LUMINANCE_SIZE                  = $303D;
  EGL_ALPHA_MASK_SIZE                 = $303E;
  EGL_COLOR_BUFFER_TYPE               = $303F;
  EGL_RENDERABLE_TYPE                 = $3040;
  EGL_MATCH_NATIVE_PIXMAP             = $3041;
  EGL_CONFORMANT                      = $3042;

  EGL_SLOW_CONFIG                     = $3050;
  EGL_NON_CONFORMANT_CONFIG           = $3051;
  EGL_TRANSPARENT_RGB                 = $3052;
  EGL_RGB_BUFFER                      = $308E;
  EGL_LUMINANCE_BUFFER                = $308F;

  EGL_NO_TEXTURE                      = $305C;
  EGL_TEXTURE_RGB                     = $305D;
  EGL_TEXTURE_RGBA                    = $305E;
  EGL_TEXTURE_2D                      = $305F;

  EGL_PBUFFER_BIT                     = $0001;
  EGL_PIXMAP_BIT                      = $0002;
  EGL_WINDOW_BIT                      = $0004;
  EGL_VG_COLORSPACE_LINEAR_BIT        = $0020;
  EGL_VG_ALPHA_FORMAT_PRE_BIT         = $0040;
  EGL_MULTISAMPLE_RESOLVE_BOX_BIT     = $0200;
  EGL_SWAP_BEHAVIOR_PRESERVED_BIT     = $0400;

  EGL_OPENGL_ES_BIT                   = $0001;
  EGL_OPENVG_BIT                      = $0002;
  EGL_OPENGL_ES2_BIT                  = $0004;
  EGL_OPENGL_BIT                      = $0008;

  EGL_VENDOR                          = $3053;
  EGL_VERSION                         = $3054;
  EGL_EXTENSIONS                      = $3055;
  EGL_CLIENT_APIS                     = $308D;

  EGL_HEIGHT                          = $3056;
  EGL_WIDTH                           = $3057;
  EGL_LARGEST_PBUFFER                 = $3058;
  EGL_TEXTURE_FORMAT                  = $3080;
  EGL_TEXTURE_TARGET                  = $3081;
  EGL_MIPMAP_TEXTURE                  = $3082;
  EGL_MIPMAP_LEVEL                    = $3083;
  EGL_RENDER_BUFFER                   = $3086;
  EGL_VG_COLORSPACE                   = $3087;
  EGL_VG_ALPHA_FORMAT                 = $3088;
  EGL_HORIZONTAL_RESOLUTION           = $3090;
  EGL_VERTICAL_RESOLUTION             = $3091;
  EGL_PIXEL_ASPECT_RATIO              = $3092;
  EGL_SWAP_BEHAVIOR                   = $3093;
  EGL_MULTISAMPLE_RESOLVE             = $3099;

  EGL_BACK_BUFFER                     = $3084;
  EGL_SINGLE_BUFFER                   = $3085;

  EGL_VG_COLORSPACE_sRGB              = $3089;
  EGL_VG_COLORSPACE_LINEAR            = $308A;

  EGL_VG_ALPHA_FORMAT_NONPRE          = $308B;
  EGL_VG_ALPHA_FORMAT_PRE             = $308C;

  EGL_DISPLAY_SCALING                 = 10000;

  EGL_UNKNOWN: EGLint                 = -1;

  EGL_BUFFER_PRESERVED                = $3094;
  EGL_BUFFER_DESTROYED                = $3095;

  EGL_OPENVG_IMAGE                    = $3096;

  EGL_CONTEXT_CLIENT_TYPE             = $3097;

  EGL_CONTEXT_CLIENT_VERSION          = $3098;

  EGL_MULTISAMPLE_RESOLVE_DEFAULT     = $309A;
  EGL_MULTISAMPLE_RESOLVE_BOX         = $309B;

  EGL_OPENGL_ES_API                   = $30A0;
  EGL_OPENVG_API                      = $30A1;
  EGL_OPENGL_API                      = $30A2;

  EGL_DRAW                            = $3059;
  EGL_READ                            = $305A;

  EGL_CORE_NATIVE_ENGINE              = $305B;

  EGL_COLORSPACE                      = EGL_VG_COLORSPACE;
  EGL_ALPHA_FORMAT                    = EGL_VG_ALPHA_FORMAT;
  EGL_COLORSPACE_sRGB                 = EGL_VG_COLORSPACE_sRGB;
  EGL_COLORSPACE_LINEAR               = EGL_VG_COLORSPACE_LINEAR;
  EGL_ALPHA_FORMAT_NONPRE             = EGL_VG_ALPHA_FORMAT_NONPRE;
  EGL_ALPHA_FORMAT_PRE                = EGL_VG_ALPHA_FORMAT_PRE;

type
  TeglGetError  = function: EGLint; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}

  TeglGetDisplay  = function(aDisplayID: EGLNativeDisplayType): EGLDisplay; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TeglInitialize  = function(aDisplay: EGLDisplay; aMajor, aMinor: PEGLint): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TeglTerminate   = function(aDisplay: EGLDisplay): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}

  TeglQueryString = function(aDisplay: EGLDisplay; name: EGLint): PAnsiChar; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}

  TeglGetConfigs      = function(aDisplay: EGLDisplay; aConfigs: PEGLConfig; aConfigSize: EGLint; numConfig: PEGLint): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TeglChooseConfig    = function(aDisplay: EGLDisplay; const aAttribList: PEGLint; aConfigs: PEGLConfig; aConfigSize: EGLint; numConfig: PEGLint): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TeglGetConfigAttrib = function(aDisplay: EGLDisplay; aConfig: EGLConfig; aAttribute: EGLint; aValue : PEGLint): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}

  TeglCreateWindowSurface   = function(aDisplay: EGLDisplay; aConfig: EGLConfig; aWinType: PEGLNativeWindowType; const aAttribList: PEGLint): EGLSurface; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TeglCreatePbufferSurface  = function(aDisplay: EGLDisplay; aConfig: EGLConfig; const aAttribList: PEGLint): EGLSurface; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TeglCreatePixmapSurface   = function(aDisplay: EGLDisplay; aConfig: EGLConfig; aPixmap: EGLNativePixmapType; const aAttribList: PEGLint): EGLSurface; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TeglDestroySurface        = function(aDisplay: EGLDisplay; aSurface: EGLSurface): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TeglQuerySurface          = function(aDisplay: EGLDisplay; aSurface: EGLSurface; aAttribute: EGLint; aValue: PEGLint): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}

  TeglBindAPI   = function(aApi: EGLenum): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TeglQueryAPI  = function: EGLenum; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}

  TeglWaitClient = function: EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}

  TeglReleaseThread = function: EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}

  TeglCreatePbufferFromClientBuffer = function(aDisplay: EGLDisplay; aBufType: EGLenum; aBuffer: EGLClientBuffer; aConfig: EGLConfig; const aAttribList: PEGLint): EGLSurface; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}

  TeglSurfaceAttrib   = function(aDisplay: EGLDisplay; aSurface: EGLSurface; aAttribute: EGLint; aValue: EGLint): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TeglBindTexImage    = function(aDisplay: EGLDisplay; aSurface: EGLSurface; aBuffer: EGLint): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TeglReleaseTexImage = function(aDisplay: EGLDisplay; aSurface: EGLSurface; aBuffer: EGLint): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}

  TeglSwapInterval = function(aDisplay: EGLDisplay; aInterval: EGLint): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}

  TeglCreateContext   = function(aDisplay: EGLDisplay; aConfig: EGLConfig; aShareContext: EGLContext; const aAttribList: PEGLint): EGLContext; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TeglDestroyContext  = function(aDisplay: EGLDisplay; aContext: EGLContext): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TeglMakeCurrent     = function(aDisplay: EGLDisplay; aDraw: EGLSurface; aRead: EGLSurface; aContext: EGLContext): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}

  TeglGetCurrentContext = function: EGLContext; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TeglGetCurrentSurface = function(aReadDraw: EGLint): EGLSurface; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TeglGetCurrentDisplay = function: EGLDisplay; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TeglQueryContext      = function(aDisplay: EGLDisplay; aContext: EGLContext; aAttribute: EGLint; aValue: PEGLint): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}

  TeglWaitGL      = function: EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TeglWaitNative  = function(aEngine: EGLint): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TeglSwapBuffers = function(aDisplay: EGLDisplay; aSurface: EGLSurface): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
  TeglCopyBuffers = function(aDisplay: EGLDisplay; aSurface: EGLSurface; aTarget: EGLNativePixmapType): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}

  TeglGetProcAddress = function(const aProcName: PAnsiChar): Pointer; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}

var
  eglGetError: TeglGetError;

  eglGetDisplay:  TeglGetDisplay;
  eglInitialize:  TeglInitialize;
  eglTerminate:   TeglTerminate;

  eglQueryString: TeglQueryString;

  eglGetConfigs:      TeglGetConfigs;
  eglChooseConfig:    TeglChooseConfig;
  eglGetConfigAttrib: TeglGetConfigAttrib;

  eglCreateWindowSurface:   TeglCreateWindowSurface;
  eglCreatePbufferSurface:  TeglCreatePbufferSurface;
  eglCreatePixmapSurface:   TeglCreatePixmapSurface;
  eglDestroySurface:        TeglDestroySurface;
  eglQuerySurface:          TeglQuerySurface;

  eglBindAPI:   TeglBindAPI;
  eglQueryAPI:  TeglQueryAPI;

  eglWaitClient: TeglWaitClient;

  eglReleaseThread: TeglReleaseThread;

  eglCreatePbufferFromClientBuffer: TeglCreatePbufferFromClientBuffer;

  eglSurfaceAttrib:   TeglSurfaceAttrib;
  eglBindTexImage:    TeglBindTexImage;
  eglReleaseTexImage: TeglReleaseTexImage;

  eglSwapInterval: TeglSwapInterval;

  eglCreateContext:   TeglCreateContext;
  eglDestroyContext:  TeglDestroyContext;
  eglMakeCurrent:     TeglMakeCurrent;

  eglGetCurrentContext: TeglGetCurrentContext;
  eglGetCurrentSurface: TeglGetCurrentSurface;
  eglGetCurrentDisplay: TeglGetCurrentDisplay;
  eglQueryContext:      TeglQueryContext;

  eglWaitGL:      TeglWaitGL;
  eglWaitNative:  TeglWaitNative;
  eglSwapBuffers: TeglSwapBuffers;
  eglCopyBuffers: TeglCopyBuffers;

  eglGetProcAddress: TeglGetProcAddress;

{ =================================================== DelphiGL ======================================================= }
var
  GLmajor: Integer;
  GLminor: Integer;

  GL_VERSION_1_0,
  GL_VERSION_1_1,
  GL_VERSION_2_0,
  GL_VERSION_3_0,
  GL_VERSION_3_1,
  GL_KHR_blend_equation_advanced,
  GL_KHR_blend_equation_advanced_coherent,
  GL_KHR_context_flush_control,
  GL_KHR_debug,
  GL_KHR_robust_buffer_access_behavior,
  GL_KHR_robustness,
  GL_KHR_texture_compression_astc_hdr,
  GL_KHR_texture_compression_astc_ldr,
  GL_OES_EGL_image,
  GL_OES_EGL_image_external,
  GL_OES_compressed_ETC1_RGB8_sub_texture,
  GL_OES_compressed_ETC1_RGB8_texture,
  GL_OES_compressed_paletted_texture,
  GL_OES_depth24,
  GL_OES_depth32,
  GL_OES_depth_texture,
  GL_OES_element_index_uint,
  GL_OES_fbo_render_mipmap,
  GL_OES_fragment_precision_high,
  GL_OES_get_program_binary,
  GL_OES_mapbuffer,
  GL_OES_packed_depth_stencil,
  GL_OES_required_internalformat,
  GL_OES_rgb8_rgba8,
  GL_OES_sample_shading,
  GL_OES_sample_variables,
  GL_OES_shader_image_atomic,
  GL_OES_shader_multisample_interpolation,
  GL_OES_standard_derivatives,
  GL_OES_stencil1,
  GL_OES_stencil4,
  GL_OES_surfaceless_context,
  GL_OES_texture_3D,
  GL_OES_texture_compression_astc,
  GL_OES_texture_float,
  GL_OES_texture_float_linear,
  GL_OES_texture_half_float,
  GL_OES_texture_half_float_linear,
  GL_OES_texture_npot,
  GL_OES_texture_stencil8,
  GL_OES_texture_storage_multisample_2d_array,
  GL_OES_vertex_array_object,
  GL_OES_vertex_half_float,
  GL_OES_vertex_type_10_10_10_2,
  GL_AMD_compressed_3DC_texture,
  GL_AMD_compressed_ATC_texture,
  GL_AMD_performance_monitor,
  GL_AMD_program_binary_Z400,
  GL_ANDROID_extension_pack_es31a,
  GL_ANGLE_depth_texture,
  GL_ANGLE_framebuffer_blit,
  GL_ANGLE_framebuffer_multisample,
  GL_ANGLE_instanced_arrays,
  GL_ANGLE_pack_reverse_row_order,
  GL_ANGLE_program_binary,
  GL_ANGLE_texture_compression_dxt3,
  GL_ANGLE_texture_compression_dxt5,
  GL_ANGLE_texture_usage,
  GL_ANGLE_translated_shader_source,
  GL_APPLE_clip_distance,
  GL_APPLE_color_buffer_packed_float,
  GL_APPLE_copy_texture_levels,
  GL_APPLE_framebuffer_multisample,
  GL_APPLE_rgb_422,
  GL_APPLE_sync,
  GL_APPLE_texture_format_BGRA8888,
  GL_APPLE_texture_max_level,
  GL_APPLE_texture_packed_float,
  GL_ARM_mali_program_binary,
  GL_ARM_mali_shader_binary,
  GL_ARM_rgba8,
  GL_ARM_shader_framebuffer_fetch,
  GL_ARM_shader_framebuffer_fetch_depth_stencil,
  GL_DMP_program_binary,
  GL_DMP_shader_binary,
  GL_EXT_base_instance,
  GL_EXT_blend_minmax,
  GL_EXT_color_buffer_half_float,
  GL_EXT_copy_image,
  GL_EXT_debug_label,
  GL_EXT_debug_marker,
  GL_EXT_discard_framebuffer,
  GL_EXT_disjoint_timer_query,
  GL_EXT_draw_buffers,
  GL_EXT_draw_buffers_indexed,
  GL_EXT_draw_elements_base_vertex,
  GL_EXT_draw_instanced,
  GL_EXT_geometry_point_size,
  GL_EXT_geometry_shader,
  GL_EXT_gpu_shader5,
  GL_EXT_instanced_arrays,
  GL_EXT_map_buffer_range,
  GL_EXT_multi_draw_arrays,
  GL_EXT_multi_draw_indirect,
  GL_EXT_multisampled_render_to_texture,
  GL_EXT_multiview_draw_buffers,
  GL_EXT_occlusion_query_boolean,
  GL_EXT_primitive_bounding_box,
  GL_EXT_pvrtc_sRGB,
  GL_EXT_read_format_bgra,
  GL_EXT_render_snorm,
  GL_EXT_robustness,
  GL_EXT_sRGB,
  GL_EXT_sRGB_write_control,
  GL_EXT_separate_shader_objects,
  GL_EXT_shader_framebuffer_fetch,
  GL_EXT_shader_implicit_conversions,
  GL_EXT_shader_integer_mix,
  GL_EXT_shader_io_blocks,
  GL_EXT_shader_pixel_local_storage,
  GL_EXT_shader_texture_lod,
  GL_EXT_shadow_samplers,
  GL_EXT_tessellation_point_size,
  GL_EXT_tessellation_shader,
  GL_EXT_texture_border_clamp,
  GL_EXT_texture_buffer,
  GL_EXT_texture_compression_dxt1,
  GL_EXT_texture_compression_s3tc,
  GL_EXT_texture_cube_map_array,
  GL_EXT_texture_filter_anisotropic,
  GL_EXT_texture_format_BGRA8888,
  GL_EXT_texture_norm16,
  GL_EXT_texture_rg,
  GL_EXT_texture_sRGB_decode,
  GL_EXT_texture_storage,
  GL_EXT_texture_type_2_10_10_10_REV,
  GL_EXT_texture_view,
  GL_EXT_unpack_subimage,
  GL_FJ_shader_binary_GCCSO,
  GL_IMG_multisampled_render_to_texture,
  GL_IMG_program_binary,
  GL_IMG_read_format,
  GL_IMG_shader_binary,
  GL_IMG_texture_compression_pvrtc,
  GL_IMG_texture_compression_pvrtc2,
  GL_INTEL_performance_query,
  GL_NV_bindless_texture,
  GL_NV_blend_equation_advanced,
  GL_NV_blend_equation_advanced_coherent,
  GL_NV_conditional_render,
  GL_NV_copy_buffer,
  GL_NV_coverage_sample,
  GL_NV_depth_nonlinear,
  GL_NV_draw_buffers,
  GL_NV_draw_instanced,
  GL_NV_explicit_attrib_location,
  GL_NV_fbo_color_attachments,
  GL_NV_fence,
  GL_NV_framebuffer_blit,
  GL_NV_framebuffer_multisample,
  GL_NV_generate_mipmap_sRGB,
  GL_NV_image_formats,
  GL_NV_instanced_arrays,
  GL_NV_internalformat_sample_query,
  GL_NV_non_square_matrices,
  GL_NV_path_rendering,
  GL_NV_read_buffer,
  GL_NV_read_buffer_front,
  GL_NV_read_depth,
  GL_NV_read_depth_stencil,
  GL_NV_read_stencil,
  GL_NV_sRGB_formats,
  GL_NV_shader_noperspective_interpolation,
  GL_NV_shadow_samplers_array,
  GL_NV_shadow_samplers_cube,
  GL_NV_texture_border_clamp,
  GL_NV_texture_compression_s3tc_update,
  GL_NV_texture_npot_2D_mipmap,
  GL_NV_viewport_array,
  GL_QCOM_alpha_test,
  GL_QCOM_binning_control,
  GL_QCOM_driver_control,
  GL_QCOM_extended_get,
  GL_QCOM_extended_get2,
  GL_QCOM_perfmon_global_mode,
  GL_QCOM_tiled_rendering,
  GL_QCOM_writeonly_rendering,
  GL_VIV_shader_binary: Boolean;

type
  EdglOpenGLES = class(Exception);
  EeglError = class(EdglOpenGLES)
  public
    ErrorCode: EGLint;
    constructor Create(const msg: string; const aErrorCode: EGLint);
  end;

  TActivationFlag = (
    afReadOpenGLCore,
    afReadExtensions,
    afReadCoreVersion,
    afReadImplProp
  );
  TActivationFlags = set of TActivationFlag;

  TdglRenderContext = packed record
    Display: EGLDisplay;
    Surface: EGLSurface;
    Context: EGLContext;
  end;

function InitOpenGLES(const aOpenGLESLibName: String = LIBNAME_OPENGLES; aEGLLibName: String = LIBNAME_EGL): Boolean;

function CreateRenderingContext(const aDisplayType: EGLNativeDisplayType;
                                const aWindowType: PEGLNativeWindowType;
                                const aConfigAttribs: PEGLint;
                                const aContextAttribs: PEGLint): TdglRenderContext;
procedure DestroyRenderingContext(const aContext: TdglRenderContext);
function ActivateRenderingContext(const aContext: TdglRenderContext; const aFlags: TActivationFlags = [afReadOpenGLCore, afReadExtensions, afReadCoreVersion, afReadImplProp]): Boolean;
function DeactivateRenderingContext(const aContext: TdglRenderContext): Boolean;
procedure SwapBuffers(const aContext: TdglRenderContext);

procedure ReadOpenGLCore;
procedure ReadExtensions;
procedure ReadCoreVersion;
procedure ReadImplementationProperties;

procedure Read_GL_KHR_blend_equation_advanced;
procedure Read_GL_KHR_debug;
procedure Read_GL_KHR_robustness;
procedure Read_GL_OES_EGL_image;
procedure Read_GL_OES_get_program_binary;
procedure Read_GL_OES_mapbuffer;
procedure Read_GL_OES_sample_shading;
procedure Read_GL_OES_texture_3D;
procedure Read_GL_OES_texture_storage_multisample_2d_array;
procedure Read_GL_OES_vertex_array_object;
procedure Read_GL_AMD_performance_monitor;
procedure Read_GL_ANGLE_framebuffer_blit;
procedure Read_GL_ANGLE_framebuffer_multisample;
procedure Read_GL_ANGLE_instanced_arrays;
procedure Read_GL_ANGLE_translated_shader_source;
procedure Read_GL_APPLE_copy_texture_levels;
procedure Read_GL_APPLE_framebuffer_multisample;
procedure Read_GL_APPLE_sync;
procedure Read_GL_EXT_base_instance;
procedure Read_GL_EXT_copy_image;
procedure Read_GL_EXT_debug_label;
procedure Read_GL_EXT_debug_marker;
procedure Read_GL_EXT_discard_framebuffer;
procedure Read_GL_EXT_disjoint_timer_query;
procedure Read_GL_EXT_draw_buffers;
procedure Read_GL_EXT_draw_buffers_indexed;
procedure Read_GL_EXT_draw_elements_base_vertex;
procedure Read_GL_EXT_draw_instanced;
procedure Read_GL_EXT_geometry_shader;
procedure Read_GL_EXT_instanced_arrays;
procedure Read_GL_EXT_map_buffer_range;
procedure Read_GL_EXT_multi_draw_arrays;
procedure Read_GL_EXT_multi_draw_indirect;
procedure Read_GL_EXT_multisampled_render_to_texture;
procedure Read_GL_EXT_multiview_draw_buffers;
procedure Read_GL_EXT_primitive_bounding_box;
procedure Read_GL_EXT_robustness;
procedure Read_GL_EXT_separate_shader_objects;
procedure Read_GL_EXT_tessellation_shader;
procedure Read_GL_EXT_texture_border_clamp;
procedure Read_GL_EXT_texture_buffer;
procedure Read_GL_EXT_texture_storage;
procedure Read_GL_EXT_texture_view;
procedure Read_GL_IMG_multisampled_render_to_texture;
procedure Read_GL_INTEL_performance_query;
procedure Read_GL_NV_bindless_texture;
procedure Read_GL_NV_blend_equation_advanced;
procedure Read_GL_NV_conditional_render;
procedure Read_GL_NV_copy_buffer;
procedure Read_GL_NV_coverage_sample;
procedure Read_GL_NV_draw_buffers;
procedure Read_GL_NV_draw_instanced;
procedure Read_GL_NV_fence;
procedure Read_GL_NV_framebuffer_blit;
procedure Read_GL_NV_framebuffer_multisample;
procedure Read_GL_NV_instanced_arrays;
procedure Read_GL_NV_internalformat_sample_query;
procedure Read_GL_NV_non_square_matrices;
procedure Read_GL_NV_path_rendering;
procedure Read_GL_NV_read_buffer;
procedure Read_GL_NV_viewport_array;
procedure Read_GL_QCOM_alpha_test;
procedure Read_GL_QCOM_driver_control;
procedure Read_GL_QCOM_extended_get;
procedure Read_GL_QCOM_extended_get2;
procedure Read_GL_QCOM_tiled_rendering;

implementation

var
  LibHandleOpenGLES: Pointer = nil;
  LibHandleEGL:      Pointer = nil;

function dglLoadLibrary(const name: PChar): Pointer;
begin
  {$IFDEF DGL_LINUX}
  result := dlopen(name, RTLD_LAZY);
  {$ENDIF}
end;

function dglGetProcAddress(const aProcName: PAnsiChar): Pointer;
begin
  result := nil;

  {$IFDEF DGL_LINUX}
  if Assigned(LibHandleOpenGLES) then
    result := dlsym(LibHandleOpenGLES, aProcName);

  if not Assigned(result) and Assigned(eglGetProcAddress) then
    result := eglGetProcAddress(aProcName);

  if not Assigned(result) and Assigned(LibHandleEGL) then
    result := dlsym(LibHandleEGL, aProcName);
  {$ENDIF}
end;

function dglFreeAndNilLibrary(var aLibHandle: Pointer): Boolean;
begin
  if Assigned(aLibHandle) then begin
    {$IFDEF DGL_LINUX}
    result := (dlclose(aLibHandle) = 0);
    aLibHandle := nil;
    {$ENDIF}
  end else
    result := false;
end;

function InitOpenGLES(const aOpenGLESLibName: String; aEGLLibName: String): Boolean;
begin
  result := true;

  if Assigned(LibHandleOpenGLES) then
    dglFreeAndNilLibrary(LibHandleOpenGLES);

  if Assigned(LibHandleEGL) then
    dglFreeAndNilLibrary(LibHandleEGL);

  LibHandleOpenGLES := dglLoadLibrary(PChar(aOpenGLESLibName));
  LibHandleEGL      := dglLoadLibrary(PChar(aEGLLibName));

  // load EGL procedures
  if Assigned(LibHandleEGL) then begin
    eglGetProcAddress                 := dglGetProcAddress('eglGetProcAddress');
    eglGetError                       := dglGetProcAddress('eglGetError');
    eglGetDisplay                     := dglGetProcAddress('eglGetDisplay');
    eglInitialize                     := dglGetProcAddress('eglInitialize');
    eglTerminate                      := dglGetProcAddress('eglTerminate');
    eglQueryString                    := dglGetProcAddress('eglQueryString');
    eglGetConfigs                     := dglGetProcAddress('eglGetConfigs');
    eglChooseConfig                   := dglGetProcAddress('eglChooseConfig');
    eglGetConfigAttrib                := dglGetProcAddress('eglGetConfigAttrib');
    eglCreateWindowSurface            := dglGetProcAddress('eglCreateWindowSurface');
    eglCreatePbufferSurface           := dglGetProcAddress('eglCreatePbufferSurface');
    eglCreatePixmapSurface            := dglGetProcAddress('eglCreatePixmapSurface');
    eglDestroySurface                 := dglGetProcAddress('eglDestroySurface');
    eglQuerySurface                   := dglGetProcAddress('eglQuerySurface');
    eglBindAPI                        := dglGetProcAddress('eglBindAPI');
    eglQueryAPI                       := dglGetProcAddress('eglQueryAPI');
    eglWaitClient                     := dglGetProcAddress('eglWaitClient');
    eglReleaseThread                  := dglGetProcAddress('eglReleaseThread');
    eglCreatePbufferFromClientBuffer  := dglGetProcAddress('eglCreatePbufferFromClientBuffer');
    eglSurfaceAttrib                  := dglGetProcAddress('eglSurfaceAttrib');
    eglBindTexImage                   := dglGetProcAddress('eglBindTexImage');
    eglReleaseTexImage                := dglGetProcAddress('eglReleaseTexImage');
    eglSwapInterval                   := dglGetProcAddress('eglSwapInterval');
    eglCreateContext                  := dglGetProcAddress('eglCreateContext');
    eglDestroyContext                 := dglGetProcAddress('eglDestroyContext');
    eglMakeCurrent                    := dglGetProcAddress('eglMakeCurrent');
    eglGetCurrentContext              := dglGetProcAddress('eglGetCurrentContext');
    eglGetCurrentSurface              := dglGetProcAddress('eglGetCurrentSurface');
    eglGetCurrentDisplay              := dglGetProcAddress('eglGetCurrentDisplay');
    eglQueryContext                   := dglGetProcAddress('eglQueryContext');
    eglWaitGL                         := dglGetProcAddress('eglWaitGL');
    eglWaitNative                     := dglGetProcAddress('eglWaitNative');
    eglSwapBuffers                    := dglGetProcAddress('eglSwapBuffers');
    eglCopyBuffers                    := dglGetProcAddress('eglCopyBuffers');
  end else
    result := false;
end;

procedure RaiseEglError(const aMsg: String);
var err: EGLint;
begin
  err := eglGetError();
  raise EeglError.Create(aMsg + ' ErrorCode: 0x' + IntToHex(err, 8), err);
end;

function CreateRenderingContext(const aDisplayType: EGLNativeDisplayType; const aWindowType: PEGLNativeWindowType;
  const aConfigAttribs: PEGLint; const aContextAttribs: PEGLint): TdglRenderContext;
var
  ConfigCount: EGLint;
  Config: EGLConfig;
begin
  if (not Assigned(LibHandleOpenGLES) or not Assigned(LibHandleEGL)) and
     not InitOpenGLES then
      raise EdglOpenGLES.Create('unable to initialize OpenGL library');

  result.Display := eglGetDisplay(aDisplayType);
  if (result.Display = EGL_NO_DISPLAY) then
    RaiseEglError('unable to get display.');

  if (eglInitialize(result.Display, nil, nil) <> EGL_TRUE) then
    RaiseEglError('unable to initialize egl.');

  if (eglChooseConfig(result.Display, aConfigAttribs, @Config, 1, @ConfigCount) <> EGL_TRUE) or
     (ConfigCount < 1) then
    RaiseEglError('unable to get suitable config.');

  if (eglBindAPI(EGL_OPENGL_ES_API) <> EGL_TRUE) then
    RaiseEglError('unable to get an appropriate EGL frame buffer configuration.');

  result.Surface := eglCreateWindowSurface(result.Display, Config, aWindowType, nil);
  if (result.Surface = EGL_NO_SURFACE) then
    RaiseEglError('unable to create window surface.');

  result.Context := eglCreateContext(result.Display, Config, EGL_NO_CONTEXT, aContextAttribs);
  if (result.Context = EGL_NO_CONTEXT) then begin
    eglDestroySurface(result.Display, result.Surface);
    RaiseEglError('unable to create context.');
  end;
end;

procedure DestroyRenderingContext(const aContext: TdglRenderContext);
begin
  if (eglGetCurrentContext = aContext.Context) and
     not DeactivateRenderingContext(aContext) then
    RaiseEglError('unable to unbind context.');

  if (eglDestroyContext(aContext.Display, aContext.Context) <> EGL_TRUE) then
    RaiseEglError('unable to destory context.');

  if (eglDestroySurface(aContext.Display, aContext.Surface) <> EGL_TRUE) then
    RaiseEglError('unable to destroy surface.');
end;

function ActivateRenderingContext(const aContext: TdglRenderContext; const aFlags: TActivationFlags): Boolean;
begin
  result := (eglMakeCurrent(aContext.Display, aContext.Surface, aContext.Surface, aContext.Context) = GL_TRUE);
  if (afReadOpenGLCore in aFlags) then
    ReadOpenGLCore;
  if (afReadExtensions in aFlags) then
    ReadExtensions;
  if (afReadCoreVersion in aFlags) then
    ReadCoreVersion;
  if (afReadImplProp in aFlags) then
    ReadImplementationProperties;
end;

function DeactivateRenderingContext(const aContext: TdglRenderContext): Boolean;
begin
  result := (eglMakeCurrent(aContext.Display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT) = EGL_TRUE);
end;

procedure SwapBuffers(const aContext: TdglRenderContext);
begin
  eglSwapBuffers(aContext.Display, aContext.Surface);
end;

procedure ReadOpenGLCore;
begin
  { ============================================= OpenGL ES 1.0 ====================================================== }
  { Available only in Common profile }
  glAlphaFunc                              := dglGetProcAddress('glAlphaFunc');
  glClearColor                             := dglGetProcAddress('glClearColor');
  glClearDepthf                            := dglGetProcAddress('glClearDepthf');
  glClipPlanef                             := dglGetProcAddress('glClipPlanef');
  glColor4f                                := dglGetProcAddress('glColor4f');
  glDepthRangef                            := dglGetProcAddress('glDepthRangef');
  glFogf                                   := dglGetProcAddress('glFogf');
  glFogfv                                  := dglGetProcAddress('glFogfv');
  glFrustumf                               := dglGetProcAddress('glFrustumf');
  glGetClipPlanef                          := dglGetProcAddress('glGetClipPlanef');
  glGetFloatv                              := dglGetProcAddress('glGetFloatv');
  glGetLightfv                             := dglGetProcAddress('glGetLightfv');
  glGetMaterialfv                          := dglGetProcAddress('glGetMaterialfv');
  glGetTexEnvfv                            := dglGetProcAddress('glGetTexEnvfv');
  glGetTexParameterfv                      := dglGetProcAddress('glGetTexParameterfv');
  glLightModelf                            := dglGetProcAddress('glLightModelf');
  glLightModelfv                           := dglGetProcAddress('glLightModelfv');
  glLightf                                 := dglGetProcAddress('glLightf');
  glLightfv                                := dglGetProcAddress('glLightfv');
  glLineWidth                              := dglGetProcAddress('glLineWidth');
  glLoadMatrixf                            := dglGetProcAddress('glLoadMatrixf');
  glMaterialf                              := dglGetProcAddress('glMaterialf');
  glMaterialfv                             := dglGetProcAddress('glMaterialfv');
  glMultMatrixf                            := dglGetProcAddress('glMultMatrixf');
  glMultiTexCoord4f                        := dglGetProcAddress('glMultiTexCoord4f');
  glNormal3f                               := dglGetProcAddress('glNormal3f');
  glOrthof                                 := dglGetProcAddress('glOrthof');
  glPointParameterf                        := dglGetProcAddress('glPointParameterf');
  glPointParameterfv                       := dglGetProcAddress('glPointParameterfv');
  glPointSize                              := dglGetProcAddress('glPointSize');
  glPolygonOffset                          := dglGetProcAddress('glPolygonOffset');
  glRotatef                                := dglGetProcAddress('glRotatef');
  glScalef                                 := dglGetProcAddress('glScalef');
  glTexEnvf                                := dglGetProcAddress('glTexEnvf');
  glTexEnvfv                               := dglGetProcAddress('glTexEnvfv');
  glTexParameterf                          := dglGetProcAddress('glTexParameterf');
  glTexParameterfv                         := dglGetProcAddress('glTexParameterfv');
  glTranslatef                             := dglGetProcAddress('glTranslatef');

  { Available in both Common and Common-Lite profiles }
  glActiveTexture                          := dglGetProcAddress('glActiveTexture');
  glAlphaFuncx                             := dglGetProcAddress('glAlphaFuncx');
  glBindBuffer                             := dglGetProcAddress('glBindBuffer');
  glBindTexture                            := dglGetProcAddress('glBindTexture');
  glBlendFunc                              := dglGetProcAddress('glBlendFunc');
  glBufferData                             := dglGetProcAddress('glBufferData');
  glBufferSubData                          := dglGetProcAddress('glBufferSubData');
  glClear                                  := dglGetProcAddress('glClear');
  glClearColorx                            := dglGetProcAddress('glClearColorx');
  glClearDepthx                            := dglGetProcAddress('glClearDepthx');
  glClearStencil                           := dglGetProcAddress('glClearStencil');
  glClientActiveTexture                    := dglGetProcAddress('glClientActiveTexture');
  glClipPlanex                             := dglGetProcAddress('glClipPlanex');
  glColor4ub                               := dglGetProcAddress('glColor4ub');
  glColor4x                                := dglGetProcAddress('glColor4x');
  glColorMask                              := dglGetProcAddress('glColorMask');
  glColorPointer                           := dglGetProcAddress('glColorPointer');
  glCompressedTexImage2D                   := dglGetProcAddress('glCompressedTexImage2D');
  glCompressedTexSubImage2D                := dglGetProcAddress('glCompressedTexSubImage2D');
  glCopyTexImage2D                         := dglGetProcAddress('glCopyTexImage2D');
  glCopyTexSubImage2D                      := dglGetProcAddress('glCopyTexSubImage2D');
  glCullFace                               := dglGetProcAddress('glCullFace');
  glDeleteBuffers                          := dglGetProcAddress('glDeleteBuffers');
  glDeleteTextures                         := dglGetProcAddress('glDeleteTextures');
  glDepthFunc                              := dglGetProcAddress('glDepthFunc');
  glDepthMask                              := dglGetProcAddress('glDepthMask');
  glDepthRangex                            := dglGetProcAddress('glDepthRangex');
  glDisable                                := dglGetProcAddress('glDisable');
  glDisableClientState                     := dglGetProcAddress('glDisableClientState');
  glDrawArrays                             := dglGetProcAddress('glDrawArrays');
  glDrawElements                           := dglGetProcAddress('glDrawElements');
  glEnable                                 := dglGetProcAddress('glEnable');
  glEnableClientState                      := dglGetProcAddress('glEnableClientState');
  glFinish                                 := dglGetProcAddress('glFinish');
  glFlush                                  := dglGetProcAddress('glFlush');
  glFogx                                   := dglGetProcAddress('glFogx');
  glFogxv                                  := dglGetProcAddress('glFogxv');
  glFrontFace                              := dglGetProcAddress('glFrontFace');
  glFrustumx                               := dglGetProcAddress('glFrustumx');
  glGetBooleanv                            := dglGetProcAddress('glGetBooleanv');
  glGetBufferParameteriv                   := dglGetProcAddress('glGetBufferParameteriv');
  glGetClipPlanex                          := dglGetProcAddress('glGetClipPlanex');
  glGenBuffers                             := dglGetProcAddress('glGenBuffers');
  glGenTextures                            := dglGetProcAddress('glGenTextures');
  glGetError                               := dglGetProcAddress('glGetError');
  glGetFixedv                              := dglGetProcAddress('glGetFixedv');
  glGetIntegerv                            := dglGetProcAddress('glGetIntegerv');
  glGetLightxv                             := dglGetProcAddress('glGetLightxv');
  glGetMaterialxv                          := dglGetProcAddress('glGetMaterialxv');
  glGetPointerv                            := dglGetProcAddress('glGetPointerv');
  glGetString                              := dglGetProcAddress('glGetString');
  glGetTexEnviv                            := dglGetProcAddress('glGetTexEnviv');
  glGetTexEnvxv                            := dglGetProcAddress('glGetTexEnvxv');
  glGetTexParameteriv                      := dglGetProcAddress('glGetTexParameteriv');
  glGetTexParameterxv                      := dglGetProcAddress('glGetTexParameterxv');
  glHint                                   := dglGetProcAddress('glHint');
  glIsBuffer                               := dglGetProcAddress('glIsBuffer');
  glIsEnabled                              := dglGetProcAddress('glIsEnabled');
  glIsTexture                              := dglGetProcAddress('glIsTexture');
  glLightModelx                            := dglGetProcAddress('glLightModelx');
  glLightModelxv                           := dglGetProcAddress('glLightModelxv');
  glLightx                                 := dglGetProcAddress('glLightx');
  glLightxv                                := dglGetProcAddress('glLightxv');
  glLineWidthx                             := dglGetProcAddress('glLineWidthx');
  glLoadIdentity                           := dglGetProcAddress('glLoadIdentity');
  glLoadMatrix                             := dglGetProcAddress('glLoadMatrix');
  glLogicOp                                := dglGetProcAddress('glLogicOp');
  glMaterialx                              := dglGetProcAddress('glMaterialx');
  glMaterialxv                             := dglGetProcAddress('glMaterialxv');
  glMatrixMode                             := dglGetProcAddress('glMatrixMode');
  glMultMatrixx                            := dglGetProcAddress('glMultMatrixx');
  glMultiTexCoord4x                        := dglGetProcAddress('glMultiTexCoord4x');
  glNormal3x                               := dglGetProcAddress('glNormal3x');
  glNormalPointer                          := dglGetProcAddress('glNormalPointer');
  glOrthox                                 := dglGetProcAddress('glOrthox');
  glPixelStorei                            := dglGetProcAddress('glPixelStorei');
  glPointParameterx                        := dglGetProcAddress('glPointParameterx');
  glPointParameterxv                       := dglGetProcAddress('glPointParameterxv');
  glPointSizex                             := dglGetProcAddress('glPointSizex');
  glPolygonOffsetx                         := dglGetProcAddress('glPolygonOffsetx');
  glPopMatrix                              := dglGetProcAddress('glPopMatrix');
  glPushMatrix                             := dglGetProcAddress('glPushMatrix');
  glReadPixels                             := dglGetProcAddress('glReadPixels');
  glRotatex                                := dglGetProcAddress('glRotatex');
  glSampleCoverage                         := dglGetProcAddress('glSampleCoverage');
  glSampleCoveragex                        := dglGetProcAddress('glSampleCoveragex');
  glScalex                                 := dglGetProcAddress('glScalex');
  glScissor                                := dglGetProcAddress('glScissor');
  glShadeModel                             := dglGetProcAddress('glShadeModel');
  glStencilFunc                            := dglGetProcAddress('glStencilFunc');
  glStencilMask                            := dglGetProcAddress('glStencilMask');
  glStencilOp                              := dglGetProcAddress('glStencilOp');
  glTexCoordPointer                        := dglGetProcAddress('glTexCoordPointer');
  glTexEnvi                                := dglGetProcAddress('glTexEnvi');
  glTexEnvx                                := dglGetProcAddress('glTexEnvx');
  glTexEnviv                               := dglGetProcAddress('glTexEnviv');
  glTexEnvxv                               := dglGetProcAddress('glTexEnvxv');
  glTexImage2D                             := dglGetProcAddress('glTexImage2D');
  glTexParameteri                          := dglGetProcAddress('glTexParameteri');
  glTexParameterx                          := dglGetProcAddress('glTexParameterx');
  glTexParameteriv                         := dglGetProcAddress('glTexParameteriv');
  glTexParameterxv                         := dglGetProcAddress('glTexParameterxv');
  glTexSubImage2D                          := dglGetProcAddress('glTexSubImage2D');
  glTranslatex                             := dglGetProcAddress('glTranslatex');
  glVertexPointer                          := dglGetProcAddress('glVertexPointer');
  glViewport                               := dglGetProcAddress('glViewport');

  { ============================================= OpenGL ES 2.0 ====================================================== }
  glAttachShader                           := dglGetProcAddress('glAttachShader');
  glBindAttribLocation                     := dglGetProcAddress('glBindAttribLocation');
  glBindFramebuffer                        := dglGetProcAddress('glBindFramebuffer');
  glBindRenderbuffer                       := dglGetProcAddress('glBindRenderbuffer');
  glBlendColor                             := dglGetProcAddress('glBlendColor');
  glBlendEquation                          := dglGetProcAddress('glBlendEquation');
  glBlendEquationSeparate                  := dglGetProcAddress('glBlendEquationSeparate');
  glBlendFuncSeparate                      := dglGetProcAddress('glBlendFuncSeparate');
  glCheckFramebufferStatus                 := dglGetProcAddress('glCheckFramebufferStatus');
  glCompileShader                          := dglGetProcAddress('glCompileShader');
  glCreateProgram                          := dglGetProcAddress('glCreateProgram');
  glCreateShader                           := dglGetProcAddress('glCreateShader');
  glDeleteFramebuffers                     := dglGetProcAddress('glDeleteFramebuffers');
  glDeleteProgram                          := dglGetProcAddress('glDeleteProgram');
  glDeleteRenderbuffers                    := dglGetProcAddress('glDeleteRenderbuffers');
  glDeleteShader                           := dglGetProcAddress('glDeleteShader');
  glDetachShader                           := dglGetProcAddress('glDetachShader');
  glDisableVertexAttribArray               := dglGetProcAddress('glDisableVertexAttribArray');
  glEnableVertexAttribArray                := dglGetProcAddress('glEnableVertexAttribArray');
  glFramebufferRenderbuffer                := dglGetProcAddress('glFramebufferRenderbuffer');
  glFramebufferTexture2D                   := dglGetProcAddress('glFramebufferTexture2D');
  glGenerateMipmap                         := dglGetProcAddress('glGenerateMipmap');
  glGenFramebuffers                        := dglGetProcAddress('glGenFramebuffers');
  glGenRenderbuffers                       := dglGetProcAddress('glGenRenderbuffers');
  glGetActiveAttrib                        := dglGetProcAddress('glGetActiveAttrib');
  glGetActiveUniform                       := dglGetProcAddress('glGetActiveUniform');
  glGetAttachedShaders                     := dglGetProcAddress('glGetAttachedShaders');
  glGetAttribLocation                      := dglGetProcAddress('glGetAttribLocation');
  glGetFramebufferAttachmentParameteriv    := dglGetProcAddress('glGetFramebufferAttachmentParameteriv');
  glGetProgramiv                           := dglGetProcAddress('glGetProgramiv');
  glGetProgramInfoLog                      := dglGetProcAddress('glGetProgramInfoLog');
  glGetRenderbufferParameteriv             := dglGetProcAddress('glGetRenderbufferParameteriv');
  glGetShaderiv                            := dglGetProcAddress('glGetShaderiv');
  glGetShaderInfoLog                       := dglGetProcAddress('glGetShaderInfoLog');
  glGetShaderPrecisionFormat               := dglGetProcAddress('glGetShaderPrecisionFormat');
  glGetShaderSource                        := dglGetProcAddress('glGetShaderSource');
  glGetUniformfv                           := dglGetProcAddress('glGetUniformfv');
  glGetUniformiv                           := dglGetProcAddress('glGetUniformiv');
  glGetUniformLocation                     := dglGetProcAddress('glGetUniformLocation');
  glGetVertexAttribfv                      := dglGetProcAddress('glGetVertexAttribfv');
  glGetVertexAttribiv                      := dglGetProcAddress('glGetVertexAttribiv');
  glGetVertexAttribPointerv                := dglGetProcAddress('glGetVertexAttribPointerv');
  glIsFramebuffer                          := dglGetProcAddress('glIsFramebuffer');
  glIsProgram                              := dglGetProcAddress('glIsProgram');
  glIsRenderbuffer                         := dglGetProcAddress('glIsRenderbuffer');
  glIsShader                               := dglGetProcAddress('glIsShader');
  glLinkProgram                            := dglGetProcAddress('glLinkProgram');
  glReleaseShaderCompiler                  := dglGetProcAddress('glReleaseShaderCompiler');
  glRenderbufferStorage                    := dglGetProcAddress('glRenderbufferStorage');
  glShaderBinary                           := dglGetProcAddress('glShaderBinary');
  glShaderSource                           := dglGetProcAddress('glShaderSource');
  glStencilFuncSeparate                    := dglGetProcAddress('glStencilFuncSeparate');
  glStencilMaskSeparate                    := dglGetProcAddress('glStencilMaskSeparate');
  glStencilOpSeparate                      := dglGetProcAddress('glStencilOpSeparate');
  glUniform1f                              := dglGetProcAddress('glUniform1f');
  glUniform1fv                             := dglGetProcAddress('glUniform1fv');
  glUniform1i                              := dglGetProcAddress('glUniform1i');
  glUniform1iv                             := dglGetProcAddress('glUniform1iv');
  glUniform2f                              := dglGetProcAddress('glUniform2f');
  glUniform2fv                             := dglGetProcAddress('glUniform2fv');
  glUniform2i                              := dglGetProcAddress('glUniform2i');
  glUniform2iv                             := dglGetProcAddress('glUniform2iv');
  glUniform3f                              := dglGetProcAddress('glUniform3f');
  glUniform3fv                             := dglGetProcAddress('glUniform3fv');
  glUniform3i                              := dglGetProcAddress('glUniform3i');
  glUniform3iv                             := dglGetProcAddress('glUniform3iv');
  glUniform4f                              := dglGetProcAddress('glUniform4f');
  glUniform4fv                             := dglGetProcAddress('glUniform4fv');
  glUniform4i                              := dglGetProcAddress('glUniform4i');
  glUniform4iv                             := dglGetProcAddress('glUniform4iv');
  glUniformMatrix2fv                       := dglGetProcAddress('glUniformMatrix2fv');
  glUniformMatrix3fv                       := dglGetProcAddress('glUniformMatrix3fv');
  glUniformMatrix4fv                       := dglGetProcAddress('glUniformMatrix4fv');
  glUseProgram                             := dglGetProcAddress('glUseProgram');
  glValidateProgram                        := dglGetProcAddress('glValidateProgram');
  glVertexAttrib1f                         := dglGetProcAddress('glVertexAttrib1f');
  glVertexAttrib1fv                        := dglGetProcAddress('glVertexAttrib1fv');
  glVertexAttrib2f                         := dglGetProcAddress('glVertexAttrib2f');
  glVertexAttrib2fv                        := dglGetProcAddress('glVertexAttrib2fv');
  glVertexAttrib3f                         := dglGetProcAddress('glVertexAttrib3f');
  glVertexAttrib3fv                        := dglGetProcAddress('glVertexAttrib3fv');
  glVertexAttrib4f                         := dglGetProcAddress('glVertexAttrib4f');
  glVertexAttrib4fv                        := dglGetProcAddress('glVertexAttrib4fv');
  glVertexAttribPointer                    := dglGetProcAddress('glVertexAttribPointer');

  { ============================================= OpenGL ES 3.0 ====================================================== }
  glReadBuffer                             := dglGetProcAddress('glReadBuffer');
  glDrawRangeElements                      := dglGetProcAddress('glDrawRangeElements');
  glTexImage3D                             := dglGetProcAddress('glTexImage3D');
  glTexSubImage3D                          := dglGetProcAddress('glTexSubImage3D');
  glCopyTexSubImage3D                      := dglGetProcAddress('glCopyTexSubImage3D');
  glCompressedTexImage3D                   := dglGetProcAddress('glCompressedTexImage3D');
  glCompressedTexSubImage3D                := dglGetProcAddress('glCompressedTexSubImage3D');
  glGenQueries                             := dglGetProcAddress('glGenQueries');
  glDeleteQueries                          := dglGetProcAddress('glDeleteQueries');
  glIsQuery                                := dglGetProcAddress('glIsQuery');
  glBeginQuery                             := dglGetProcAddress('glBeginQuery');
  glEndQuery                               := dglGetProcAddress('glEndQuery');
  glGetQueryiv                             := dglGetProcAddress('glGetQueryiv');
  glGetQueryObjectuiv                      := dglGetProcAddress('glGetQueryObjectuiv');
  glUnmapBuffer                            := dglGetProcAddress('glUnmapBuffer');
  glGetBufferPointerv                      := dglGetProcAddress('glGetBufferPointerv');
  glDrawBuffers                            := dglGetProcAddress('glDrawBuffers');
  glUniformMatrix2x3fv                     := dglGetProcAddress('glUniformMatrix2x3fv');
  glUniformMatrix3x2fv                     := dglGetProcAddress('glUniformMatrix3x2fv');
  glUniformMatrix2x4fv                     := dglGetProcAddress('glUniformMatrix2x4fv');
  glUniformMatrix4x2fv                     := dglGetProcAddress('glUniformMatrix4x2fv');
  glUniformMatrix3x4fv                     := dglGetProcAddress('glUniformMatrix3x4fv');
  glUniformMatrix4x3fv                     := dglGetProcAddress('glUniformMatrix4x3fv');
  glBlitFramebuffer                        := dglGetProcAddress('glBlitFramebuffer');
  glRenderbufferStorageMultisample         := dglGetProcAddress('glRenderbufferStorageMultisample');
  glFramebufferTextureLayer                := dglGetProcAddress('glFramebufferTextureLayer');
  glMapBufferRange                         := dglGetProcAddress('glMapBufferRange');
  glFlushMappedBufferRange                 := dglGetProcAddress('glFlushMappedBufferRange');
  glBindVertexArray                        := dglGetProcAddress('glBindVertexArray');
  glDeleteVertexArrays                     := dglGetProcAddress('glDeleteVertexArrays');
  glGenVertexArrays                        := dglGetProcAddress('glGenVertexArrays');
  glIsVertexArray                          := dglGetProcAddress('glIsVertexArray');
  glGetIntegeriv                           := dglGetProcAddress('glGetIntegeriv');
  glBeginTransformFeedback                 := dglGetProcAddress('glBeginTransformFeedback');
  glEndTransformFeedback                   := dglGetProcAddress('glEndTransformFeedback');
  glBindBufferRange                        := dglGetProcAddress('glBindBufferRange');
  glBindBufferBase                         := dglGetProcAddress('glBindBufferBase');
  glTransformFeedbackVaryings              := dglGetProcAddress('glTransformFeedbackVaryings');
  glGetTransformFeedbackVarying            := dglGetProcAddress('glGetTransformFeedbackVarying');
  glVertexAttribIPointer                   := dglGetProcAddress('glVertexAttribIPointer');
  glGetVertexAttribIiv                     := dglGetProcAddress('glGetVertexAttribIiv');
  glGetVertexAttribIuiv                    := dglGetProcAddress('glGetVertexAttribIuiv');
  glVertexAttribI4i                        := dglGetProcAddress('glVertexAttribI4i');
  glVertexAttribI4ui                       := dglGetProcAddress('glVertexAttribI4ui');
  glVertexAttribI4iv                       := dglGetProcAddress('glVertexAttribI4iv');
  glVertexAttribI4uiv                      := dglGetProcAddress('glVertexAttribI4uiv');
  glGetUniformuiv                          := dglGetProcAddress('glGetUniformuiv');
  glGetFragDataLocation                    := dglGetProcAddress('glGetFragDataLocation');
  glUniform1ui                             := dglGetProcAddress('glUniform1ui');
  glUniform2ui                             := dglGetProcAddress('glUniform2ui');
  glUniform3ui                             := dglGetProcAddress('glUniform3ui');
  glUniform4ui                             := dglGetProcAddress('glUniform4ui');
  glUniform1uiv                            := dglGetProcAddress('glUniform1uiv');
  glUniform2uiv                            := dglGetProcAddress('glUniform2uiv');
  glUniform3uiv                            := dglGetProcAddress('glUniform3uiv');
  glUniform4uiv                            := dglGetProcAddress('glUniform4uiv');
  glClearBufferiv                          := dglGetProcAddress('glClearBufferiv');
  glClearBufferuiv                         := dglGetProcAddress('glClearBufferuiv');
  glClearBufferfv                          := dglGetProcAddress('glClearBufferfv');
  glClearBufferfi                          := dglGetProcAddress('glClearBufferfi');
  glGetStringi                             := dglGetProcAddress('glGetStringi');
  glCopyBufferSubData                      := dglGetProcAddress('glCopyBufferSubData');
  glGetUniformIndices                      := dglGetProcAddress('glGetUniformIndices');
  glGetActiveUniformsiv                    := dglGetProcAddress('glGetActiveUniformsiv');
  glGetUniformBlockIndex                   := dglGetProcAddress('glGetUniformBlockIndex');
  glGetActiveUniformBlockiv                := dglGetProcAddress('glGetActiveUniformBlockiv');
  glGetActiveUniformBlockName              := dglGetProcAddress('glGetActiveUniformBlockName');
  glUniformBlockBinding                    := dglGetProcAddress('glUniformBlockBinding');
  glDrawArraysInstanced                    := dglGetProcAddress('glDrawArraysInstanced');
  glDrawElementsInstanced                  := dglGetProcAddress('glDrawElementsInstanced');
  glFenceSync                              := dglGetProcAddress('glFenceSync');
  glIsSync                                 := dglGetProcAddress('glIsSync');
  glDeleteSync                             := dglGetProcAddress('glDeleteSync');
  glClientWaitSync                         := dglGetProcAddress('glClientWaitSync');
  glWaitSync                               := dglGetProcAddress('glWaitSync');
  glGetInteger64v                          := dglGetProcAddress('glGetInteger64v');
  glGetSynciv                              := dglGetProcAddress('glGetSynciv');
  glGetInteger64iv                         := dglGetProcAddress('glGetInteger64iv');
  glGetBufferParameteri64v                 := dglGetProcAddress('glGetBufferParameteri64v');
  glGenSamplers                            := dglGetProcAddress('glGenSamplers');
  glDeleteSamplers                         := dglGetProcAddress('glDeleteSamplers');
  glIsSampler                              := dglGetProcAddress('glIsSampler');
  glBindSampler                            := dglGetProcAddress('glBindSampler');
  glSamplerParameteri                      := dglGetProcAddress('glSamplerParameteri');
  glSamplerParameteriv                     := dglGetProcAddress('glSamplerParameteriv');
  glSamplerParameterf                      := dglGetProcAddress('glSamplerParameterf');
  glSamplerParameterfv                     := dglGetProcAddress('glSamplerParameterfv');
  glGetSamplerParameteriv                  := dglGetProcAddress('glGetSamplerParameteriv');
  glGetSamplerParameterfv                  := dglGetProcAddress('glGetSamplerParameterfv');
  glVertexAttribDivisor                    := dglGetProcAddress('glVertexAttribDivisor');
  glBindTransformFeedback                  := dglGetProcAddress('glBindTransformFeedback');
  glDeleteTransformFeedbacks               := dglGetProcAddress('glDeleteTransformFeedbacks');
  glGenTransformFeedbacks                  := dglGetProcAddress('glGenTransformFeedbacks');
  glIsTransformFeedback                    := dglGetProcAddress('glIsTransformFeedback');
  glPauseTransformFeedback                 := dglGetProcAddress('glPauseTransformFeedback');
  glResumeTransformFeedback                := dglGetProcAddress('glResumeTransformFeedback');
  glGetProgramBinary                       := dglGetProcAddress('glGetProgramBinary');
  glProgramBinary                          := dglGetProcAddress('glProgramBinary');
  glProgramParameteri                      := dglGetProcAddress('glProgramParameteri');
  glInvalidateFramebuffer                  := dglGetProcAddress('glInvalidateFramebuffer');
  glInvalidateSubFramebuffer               := dglGetProcAddress('glInvalidateSubFramebuffer');
  glTexStorage2D                           := dglGetProcAddress('glTexStorage2D');
  glTexStorage3D                           := dglGetProcAddress('glTexStorage3D');
  glGetInternalformativ                    := dglGetProcAddress('glGetInternalformativ');

  { ============================================= OpenGL ES 3.1 ====================================================== }
  glDispatchCompute                        := dglGetProcAddress('glDispatchCompute');
  glDispatchComputeIndirect                := dglGetProcAddress('glDispatchComputeIndirect');
  glDrawArraysIndirect                     := dglGetProcAddress('glDrawArraysIndirect');
  glDrawElementsIndirect                   := dglGetProcAddress('glDrawElementsIndirect');
  glFramebufferParameteri                  := dglGetProcAddress('glFramebufferParameteri');
  glGetFramebufferParameteriv              := dglGetProcAddress('glGetFramebufferParameteriv');
  glGetProgramInterfaceiv                  := dglGetProcAddress('glGetProgramInterfaceiv');
  glGetProgramResourceIndex                := dglGetProcAddress('glGetProgramResourceIndex');
  glGetProgramResourceName                 := dglGetProcAddress('glGetProgramResourceName');
  glGetProgramResourceiv                   := dglGetProcAddress('glGetProgramResourceiv');
  glGetProgramResourceLocation             := dglGetProcAddress('glGetProgramResourceLocation');
  glUseProgramStages                       := dglGetProcAddress('glUseProgramStages');
  glActiveShaderProgram                    := dglGetProcAddress('glActiveShaderProgram');
  glCreateShaderProgramv                   := dglGetProcAddress('glCreateShaderProgramv');
  glBindProgramPipeline                    := dglGetProcAddress('glBindProgramPipeline');
  glDeleteProgramPipelines                 := dglGetProcAddress('glDeleteProgramPipelines');
  glGenProgramPipelines                    := dglGetProcAddress('glGenProgramPipelines');
  glIsProgramPipeline                      := dglGetProcAddress('glIsProgramPipeline');
  glGetProgramPipelineiv                   := dglGetProcAddress('glGetProgramPipelineiv');
  glProgramUniform1i                       := dglGetProcAddress('glProgramUniform1i');
  glProgramUniform2i                       := dglGetProcAddress('glProgramUniform2i');
  glProgramUniform3i                       := dglGetProcAddress('glProgramUniform3i');
  glProgramUniform4i                       := dglGetProcAddress('glProgramUniform4i');
  glProgramUniform1ui                      := dglGetProcAddress('glProgramUniform1ui');
  glProgramUniform2ui                      := dglGetProcAddress('glProgramUniform2ui');
  glProgramUniform3ui                      := dglGetProcAddress('glProgramUniform3ui');
  glProgramUniform4ui                      := dglGetProcAddress('glProgramUniform4ui');
  glProgramUniform1f                       := dglGetProcAddress('glProgramUniform1f');
  glProgramUniform2f                       := dglGetProcAddress('glProgramUniform2f');
  glProgramUniform3f                       := dglGetProcAddress('glProgramUniform3f');
  glProgramUniform4f                       := dglGetProcAddress('glProgramUniform4f');
  glProgramUniform1iv                      := dglGetProcAddress('glProgramUniform1iv');
  glProgramUniform2iv                      := dglGetProcAddress('glProgramUniform2iv');
  glProgramUniform3iv                      := dglGetProcAddress('glProgramUniform3iv');
  glProgramUniform4iv                      := dglGetProcAddress('glProgramUniform4iv');
  glProgramUniform1uiv                     := dglGetProcAddress('glProgramUniform1uiv');
  glProgramUniform2uiv                     := dglGetProcAddress('glProgramUniform2uiv');
  glProgramUniform3uiv                     := dglGetProcAddress('glProgramUniform3uiv');
  glProgramUniform4uiv                     := dglGetProcAddress('glProgramUniform4uiv');
  glProgramUniform1fv                      := dglGetProcAddress('glProgramUniform1fv');
  glProgramUniform2fv                      := dglGetProcAddress('glProgramUniform2fv');
  glProgramUniform3fv                      := dglGetProcAddress('glProgramUniform3fv');
  glProgramUniform4fv                      := dglGetProcAddress('glProgramUniform4fv');
  glProgramUniformMatrix2fv                := dglGetProcAddress('glProgramUniformMatrix2fv');
  glProgramUniformMatrix3fv                := dglGetProcAddress('glProgramUniformMatrix3fv');
  glProgramUniformMatrix4fv                := dglGetProcAddress('glProgramUniformMatrix4fv');
  glProgramUniformMatrix2x3fv              := dglGetProcAddress('glProgramUniformMatrix2x3fv');
  glProgramUniformMatrix3x2fv              := dglGetProcAddress('glProgramUniformMatrix3x2fv');
  glProgramUniformMatrix2x4fv              := dglGetProcAddress('glProgramUniformMatrix2x4fv');
  glProgramUniformMatrix4x2fv              := dglGetProcAddress('glProgramUniformMatrix4x2fv');
  glProgramUniformMatrix3x4fv              := dglGetProcAddress('glProgramUniformMatrix3x4fv');
  glProgramUniformMatrix4x3fv              := dglGetProcAddress('glProgramUniformMatrix4x3fv');
  glValidateProgramPipeline                := dglGetProcAddress('glValidateProgramPipeline');
  glGetProgramPipelineInfoLog              := dglGetProcAddress('glGetProgramPipelineInfoLog');
  glBindImageTexture                       := dglGetProcAddress('glBindImageTexture');
  glGetBooleaniv                           := dglGetProcAddress('glGetBooleaniv');
  glMemoryBarrier                          := dglGetProcAddress('glMemoryBarrier');
  glMemoryBarrierByRegion                  := dglGetProcAddress('glMemoryBarrierByRegion');
  glTexStorage2DMultisample                := dglGetProcAddress('glTexStorage2DMultisample');
  glGetMultisamplefv                       := dglGetProcAddress('glGetMultisamplefv');
  glSampleMaski                            := dglGetProcAddress('glSampleMaski');
  glGetTexLevelParameteriv                 := dglGetProcAddress('glGetTexLevelParameteriv');
  glGetTexLevelParameterfv                 := dglGetProcAddress('glGetTexLevelParameterfv');
  glBindVertexBuffer                       := dglGetProcAddress('glBindVertexBuffer');
  glVertexAttribFormat                     := dglGetProcAddress('glVertexAttribFormat');
  glVertexAttribIFormat                    := dglGetProcAddress('glVertexAttribIFormat');
  glVertexAttribBinding                    := dglGetProcAddress('glVertexAttribBinding');
  glVertexBindingDivisor                   := dglGetProcAddress('glVertexBindingDivisor');
end;

procedure ReadExtensions;
begin
  Read_GL_KHR_blend_equation_advanced;
  Read_GL_KHR_debug;
  Read_GL_KHR_robustness;
  Read_GL_OES_EGL_image;
  Read_GL_OES_get_program_binary;
  Read_GL_OES_mapbuffer;
  Read_GL_OES_sample_shading;
  Read_GL_OES_texture_3D;
  Read_GL_OES_texture_storage_multisample_2d_array;
  Read_GL_OES_vertex_array_object;
  Read_GL_AMD_performance_monitor;
  Read_GL_ANGLE_framebuffer_blit;
  Read_GL_ANGLE_framebuffer_multisample;
  Read_GL_ANGLE_instanced_arrays;
  Read_GL_ANGLE_translated_shader_source;
  Read_GL_APPLE_copy_texture_levels;
  Read_GL_APPLE_framebuffer_multisample;
  Read_GL_APPLE_sync;
  Read_GL_EXT_base_instance;
  Read_GL_EXT_copy_image;
  Read_GL_EXT_debug_label;
  Read_GL_EXT_debug_marker;
  Read_GL_EXT_discard_framebuffer;
  Read_GL_EXT_disjoint_timer_query;
  Read_GL_EXT_draw_buffers;
  Read_GL_EXT_draw_buffers_indexed;
  Read_GL_EXT_draw_elements_base_vertex;
  Read_GL_EXT_draw_instanced;
  Read_GL_EXT_geometry_shader;
  Read_GL_EXT_instanced_arrays;
  Read_GL_EXT_map_buffer_range;
  Read_GL_EXT_multi_draw_arrays;
  Read_GL_EXT_multi_draw_indirect;
  Read_GL_EXT_multisampled_render_to_texture;
  Read_GL_EXT_multiview_draw_buffers;
  Read_GL_EXT_primitive_bounding_box;
  Read_GL_EXT_robustness;
  Read_GL_EXT_separate_shader_objects;
  Read_GL_EXT_tessellation_shader;
  Read_GL_EXT_texture_border_clamp;
  Read_GL_EXT_texture_buffer;
  Read_GL_EXT_texture_storage;
  Read_GL_EXT_texture_view;
  Read_GL_IMG_multisampled_render_to_texture;
  Read_GL_INTEL_performance_query;
  Read_GL_NV_bindless_texture;
  Read_GL_NV_blend_equation_advanced;
  Read_GL_NV_conditional_render;
  Read_GL_NV_copy_buffer;
  Read_GL_NV_coverage_sample;
  Read_GL_NV_draw_buffers;
  Read_GL_NV_draw_instanced;
  Read_GL_NV_fence;
  Read_GL_NV_framebuffer_blit;
  Read_GL_NV_framebuffer_multisample;
  Read_GL_NV_instanced_arrays;
  Read_GL_NV_internalformat_sample_query;
  Read_GL_NV_non_square_matrices;
  Read_GL_NV_path_rendering;
  Read_GL_NV_read_buffer;
  Read_GL_NV_viewport_array;
  Read_GL_QCOM_alpha_test;
  Read_GL_QCOM_driver_control;
  Read_GL_QCOM_extended_get;
  Read_GL_QCOM_extended_get2;
  Read_GL_QCOM_tiled_rendering;
end;

procedure ReadCoreVersion;
var
  AnsiBuffer: AnsiString;
  Buffer: String;

  procedure TrimAndSplitVersionString(const aBuffer: String; out aMajor, aMinor: Integer);
  var
    p, s, e, len: Integer;
  begin
    aMajor := 0;
    aMinor := 0;
    try
      len := Length(aBuffer);
      p := Pos('.', aBuffer);
      if (p = 0) then
        exit;

      s := p;
      while (s > 1) and (aBuffer[s - 1] in ['0'..'9']) do
        dec(s);
      if (s = p) then
        exit;

      e := p;
      while (e < len) and (aBuffer[e + 1] in ['0'..'9']) do
        inc(e);
      if (s = p) then
        exit;

      aMajor := StrToInt(Copy(aBuffer, s - 1, p - s + 1));
      aMinor := StrToInt(Copy(aBuffer, p + 1, e - p + 1));
    except
      aMajor := 0;
      aMinor := 0;
    end;
  end;

begin
  if not Assigned(glGetString) then
    glGetString := dglGetProcAddress('glGetString');
  AnsiBuffer := PAnsiChar(glGetString(GL_VERSION));
  Buffer     := String(AnsiBuffer);

  TrimAndSplitVersionString(Buffer, GLmajor, GLminor);

  GL_VERSION_1_0 := true; // OpenGL ES is always supported
  GL_VERSION_1_1 := (GLmajor >= 1) and (GLminor >= 1);
  GL_VERSION_2_0 := (GLmajor >= 2) and (GLminor >= 0);
  GL_VERSION_3_0 := (GLmajor >= 3) and (GLminor >= 0);
  GL_VERSION_3_1 := (GLmajor >= 3) and (GLminor >= 1);
end;

procedure ReadImplementationProperties;

  function GetExtensions: String;
  var
    ExtCount, i: GLint;
  begin
    result := '';

    if not Assigned(glGetString) then
      glGetString := dglGetProcAddress('glGetString');
    if Assigned(glGetString) then
      result := String(PAnsiChar(glGetString(GL_EXTENSIONS)));

    if (result = '') then begin
      if not Assigned(glGetIntegerv) then
        glGetIntegerv := dglGetProcAddress('glGetIntegerv');
      if not Assigned(glGetStringi) then
        glGetStringi := dglGetProcAddress('glGetStringi');
      if Assigned(glGetStringi) and Assigned(glGetIntegerv) then begin
        glGetIntegerv(GL_NUM_EXTENSIONS, @ExtCount);
        for i := 0 to ExtCount-1 do begin
          if (result <> '') then
            result := result + #$20;
          result := result + PAnsiChar(glGetStringi(GL_EXTENSIONS, i));
        end;
      end;
    end;

    result := #$20 + result + #$20;
  end;

  function CheckEx(const aAllExt, aExt: String): Boolean;
  begin
    result := (Pos(#$20 + aExt + #$20, aAllExt) > 0);
  end;

var
  Buffer: String;
begin
  ReadCoreVersion;

  Buffer := GetExtensions;

  // KHR
  GL_KHR_blend_equation_advanced                := CheckEx(Buffer, 'GL_KHR_blend_equation_advanced');
  GL_KHR_blend_equation_advanced_coherent       := CheckEx(Buffer, 'GL_KHR_blend_equation_advanced_coherent');
  GL_KHR_context_flush_control                  := CheckEx(Buffer, 'GL_KHR_context_flush_control');
  GL_KHR_debug                                  := CheckEx(Buffer, 'GL_KHR_debug');
  GL_KHR_robust_buffer_access_behavior          := CheckEx(Buffer, 'GL_KHR_robust_buffer_access_behavior');
  GL_KHR_robustness                             := CheckEx(Buffer, 'GL_KHR_robustness');
  GL_KHR_texture_compression_astc_hdr           := CheckEx(Buffer, 'GL_KHR_texture_compression_astc_hdr');
  GL_KHR_texture_compression_astc_ldr           := CheckEx(Buffer, 'GL_KHR_texture_compression_astc_ldr');

  // OES
  GL_OES_EGL_image                              := CheckEx(Buffer, 'GL_OES_EGL_image');
  GL_OES_EGL_image_external                     := CheckEx(Buffer, 'GL_OES_EGL_image_external');
  GL_OES_compressed_ETC1_RGB8_sub_texture       := CheckEx(Buffer, 'GL_OES_compressed_ETC1_RGB8_sub_texture');
  GL_OES_compressed_ETC1_RGB8_texture           := CheckEx(Buffer, 'GL_OES_compressed_ETC1_RGB8_texture');
  GL_OES_compressed_paletted_texture            := CheckEx(Buffer, 'GL_OES_compressed_paletted_texture');
  GL_OES_depth24                                := CheckEx(Buffer, 'GL_OES_depth24');
  GL_OES_depth32                                := CheckEx(Buffer, 'GL_OES_depth32');
  GL_OES_depth_texture                          := CheckEx(Buffer, 'GL_OES_depth_texture');
  GL_OES_element_index_uint                     := CheckEx(Buffer, 'GL_OES_element_index_uint');
  GL_OES_fbo_render_mipmap                      := CheckEx(Buffer, 'GL_OES_fbo_render_mipmap');
  GL_OES_fragment_precision_high                := CheckEx(Buffer, 'GL_OES_fragment_precision_high');
  GL_OES_get_program_binary                     := CheckEx(Buffer, 'GL_OES_get_program_binary');
  GL_OES_mapbuffer                              := CheckEx(Buffer, 'GL_OES_mapbuffer');
  GL_OES_packed_depth_stencil                   := CheckEx(Buffer, 'GL_OES_packed_depth_stencil');
  GL_OES_required_internalformat                := CheckEx(Buffer, 'GL_OES_required_internalformat');
  GL_OES_rgb8_rgba8                             := CheckEx(Buffer, 'GL_OES_rgb8_rgba8');
  GL_OES_sample_shading                         := CheckEx(Buffer, 'GL_OES_sample_shading');
  GL_OES_sample_variables                       := CheckEx(Buffer, 'GL_OES_sample_variables');
  GL_OES_shader_image_atomic                    := CheckEx(Buffer, 'GL_OES_shader_image_atomic');
  GL_OES_shader_multisample_interpolation       := CheckEx(Buffer, 'GL_OES_shader_multisample_interpolation');
  GL_OES_standard_derivatives                   := CheckEx(Buffer, 'GL_OES_standard_derivatives');
  GL_OES_stencil1                               := CheckEx(Buffer, 'GL_OES_stencil1');
  GL_OES_stencil4                               := CheckEx(Buffer, 'GL_OES_stencil4');
  GL_OES_surfaceless_context                    := CheckEx(Buffer, 'GL_OES_surfaceless_context');
  GL_OES_texture_3D                             := CheckEx(Buffer, 'GL_OES_texture_3D');
  GL_OES_texture_compression_astc               := CheckEx(Buffer, 'GL_OES_texture_compression_astc');
  GL_OES_texture_float                          := CheckEx(Buffer, 'GL_OES_texture_float');
  GL_OES_texture_float_linear                   := CheckEx(Buffer, 'GL_OES_texture_float_linear');
  GL_OES_texture_half_float                     := CheckEx(Buffer, 'GL_OES_texture_half_float');
  GL_OES_texture_half_float_linear              := CheckEx(Buffer, 'GL_OES_texture_half_float_linear');
  GL_OES_texture_npot                           := CheckEx(Buffer, 'GL_OES_texture_npot');
  GL_OES_texture_stencil8                       := CheckEx(Buffer, 'GL_OES_texture_stencil8');
  GL_OES_texture_storage_multisample_2d_array   := CheckEx(Buffer, 'GL_OES_texture_storage_multisample_2d_array');
  GL_OES_vertex_array_object                    := CheckEx(Buffer, 'GL_OES_vertex_array_object');
  GL_OES_vertex_half_float                      := CheckEx(Buffer, 'GL_OES_vertex_half_float');
  GL_OES_vertex_type_10_10_10_2                 := CheckEx(Buffer, 'GL_OES_vertex_type_10_10_10_2');

  // AMD
  GL_AMD_compressed_3DC_texture                 := CheckEx(Buffer, 'GL_AMD_compressed_3DC_texture');
  GL_AMD_compressed_ATC_texture                 := CheckEx(Buffer, 'GL_AMD_compressed_ATC_texture');
  GL_AMD_performance_monitor                    := CheckEx(Buffer, 'GL_AMD_performance_monitor');
  GL_AMD_program_binary_Z400                    := CheckEx(Buffer, 'GL_AMD_program_binary_Z400');

  // ANDROID
  GL_ANDROID_extension_pack_es31a               := CheckEx(Buffer, 'GL_ANDROID_extension_pack_es31a');

  // ANGLE
  GL_ANGLE_depth_texture                        := CheckEx(Buffer, 'GL_ANGLE_depth_texture');
  GL_ANGLE_framebuffer_blit                     := CheckEx(Buffer, 'GL_ANGLE_framebuffer_blit');
  GL_ANGLE_framebuffer_multisample              := CheckEx(Buffer, 'GL_ANGLE_framebuffer_multisample');
  GL_ANGLE_instanced_arrays                     := CheckEx(Buffer, 'GL_ANGLE_instanced_arrays');
  GL_ANGLE_pack_reverse_row_order               := CheckEx(Buffer, 'GL_ANGLE_pack_reverse_row_order');
  GL_ANGLE_program_binary                       := CheckEx(Buffer, 'GL_ANGLE_program_binary');
  GL_ANGLE_texture_compression_dxt3             := CheckEx(Buffer, 'GL_ANGLE_texture_compression_dxt3');
  GL_ANGLE_texture_compression_dxt5             := CheckEx(Buffer, 'GL_ANGLE_texture_compression_dxt5');
  GL_ANGLE_texture_usage                        := CheckEx(Buffer, 'GL_ANGLE_texture_usage');
  GL_ANGLE_translated_shader_source             := CheckEx(Buffer, 'GL_ANGLE_translated_shader_source');

  // APPLE
  GL_APPLE_clip_distance                        := CheckEx(Buffer, 'GL_APPLE_clip_distance');
  GL_APPLE_color_buffer_packed_float            := CheckEx(Buffer, 'GL_APPLE_color_buffer_packed_float');
  GL_APPLE_copy_texture_levels                  := CheckEx(Buffer, 'GL_APPLE_copy_texture_levels');
  GL_APPLE_framebuffer_multisample              := CheckEx(Buffer, 'GL_APPLE_framebuffer_multisample');
  GL_APPLE_rgb_422                              := CheckEx(Buffer, 'GL_APPLE_rgb_422');
  GL_APPLE_sync                                 := CheckEx(Buffer, 'GL_APPLE_sync');
  GL_APPLE_texture_format_BGRA8888              := CheckEx(Buffer, 'GL_APPLE_texture_format_BGRA8888');
  GL_APPLE_texture_max_level                    := CheckEx(Buffer, 'GL_APPLE_texture_max_level');
  GL_APPLE_texture_packed_float                 := CheckEx(Buffer, 'GL_APPLE_texture_packed_float');

  // ARM
  GL_ARM_mali_program_binary                    := CheckEx(Buffer, 'GL_ARM_mali_program_binary');
  GL_ARM_mali_shader_binary                     := CheckEx(Buffer, 'GL_ARM_mali_shader_binary');
  GL_ARM_rgba8                                  := CheckEx(Buffer, 'GL_ARM_rgba8');
  GL_ARM_shader_framebuffer_fetch               := CheckEx(Buffer, 'GL_ARM_shader_framebuffer_fetch');
  GL_ARM_shader_framebuffer_fetch_depth_stencil := CheckEx(Buffer, 'GL_ARM_shader_framebuffer_fetch_depth_stencil');

  // DMP
  GL_DMP_program_binary                         := CheckEx(Buffer, 'GL_DMP_program_binary');
  GL_DMP_shader_binary                          := CheckEx(Buffer, 'GL_DMP_shader_binary');

  // EXT
  GL_EXT_base_instance                          := CheckEx(Buffer, 'GL_EXT_base_instance');
  GL_EXT_blend_minmax                           := CheckEx(Buffer, 'GL_EXT_blend_minmax');
  GL_EXT_color_buffer_half_float                := CheckEx(Buffer, 'GL_EXT_color_buffer_half_float');
  GL_EXT_copy_image                             := CheckEx(Buffer, 'GL_EXT_copy_image');
  GL_EXT_debug_label                            := CheckEx(Buffer, 'GL_EXT_debug_label');
  GL_EXT_debug_marker                           := CheckEx(Buffer, 'GL_EXT_debug_marker');
  GL_EXT_discard_framebuffer                    := CheckEx(Buffer, 'GL_EXT_discard_framebuffer');
  GL_EXT_disjoint_timer_query                   := CheckEx(Buffer, 'GL_EXT_disjoint_timer_query');
  GL_EXT_draw_buffers                           := CheckEx(Buffer, 'GL_EXT_draw_buffers');
  GL_EXT_draw_buffers_indexed                   := CheckEx(Buffer, 'GL_EXT_draw_buffers_indexed');
  GL_EXT_draw_elements_base_vertex              := CheckEx(Buffer, 'GL_EXT_draw_elements_base_vertex');
  GL_EXT_draw_instanced                         := CheckEx(Buffer, 'GL_EXT_draw_instanced');
  GL_EXT_geometry_point_size                    := CheckEx(Buffer, 'GL_EXT_geometry_point_size');
  GL_EXT_geometry_shader                        := CheckEx(Buffer, 'GL_EXT_geometry_shader');
  GL_EXT_gpu_shader5                            := CheckEx(Buffer, 'GL_EXT_gpu_shader5');
  GL_EXT_instanced_arrays                       := CheckEx(Buffer, 'GL_EXT_instanced_arrays');
  GL_EXT_map_buffer_range                       := CheckEx(Buffer, 'GL_EXT_map_buffer_range');
  GL_EXT_multi_draw_arrays                      := CheckEx(Buffer, 'GL_EXT_multi_draw_arrays');
  GL_EXT_multi_draw_indirect                    := CheckEx(Buffer, 'GL_EXT_multi_draw_indirect');
  GL_EXT_multisampled_render_to_texture         := CheckEx(Buffer, 'GL_EXT_multisampled_render_to_texture');
  GL_EXT_multiview_draw_buffers                 := CheckEx(Buffer, 'GL_EXT_multiview_draw_buffers');
  GL_EXT_occlusion_query_boolean                := CheckEx(Buffer, 'GL_EXT_occlusion_query_boolean');
  GL_EXT_primitive_bounding_box                 := CheckEx(Buffer, 'GL_EXT_primitive_bounding_box');
  GL_EXT_pvrtc_sRGB                             := CheckEx(Buffer, 'GL_EXT_pvrtc_sRGB');
  GL_EXT_read_format_bgra                       := CheckEx(Buffer, 'GL_EXT_read_format_bgra');
  GL_EXT_render_snorm                           := CheckEx(Buffer, 'GL_EXT_render_snorm');
  GL_EXT_robustness                             := CheckEx(Buffer, 'GL_EXT_robustness');
  GL_EXT_sRGB                                   := CheckEx(Buffer, 'GL_EXT_sRGB');
  GL_EXT_sRGB_write_control                     := CheckEx(Buffer, 'GL_EXT_sRGB_write_control');
  GL_EXT_separate_shader_objects                := CheckEx(Buffer, 'GL_EXT_separate_shader_objects');
  GL_EXT_shader_framebuffer_fetch               := CheckEx(Buffer, 'GL_EXT_shader_framebuffer_fetch');
  GL_EXT_shader_implicit_conversions            := CheckEx(Buffer, 'GL_EXT_shader_implicit_conversions');
  GL_EXT_shader_integer_mix                     := CheckEx(Buffer, 'GL_EXT_shader_integer_mix');
  GL_EXT_shader_io_blocks                       := CheckEx(Buffer, 'GL_EXT_shader_io_blocks');
  GL_EXT_shader_pixel_local_storage             := CheckEx(Buffer, 'GL_EXT_shader_pixel_local_storage');
  GL_EXT_shader_texture_lod                     := CheckEx(Buffer, 'GL_EXT_shader_texture_lod');
  GL_EXT_shadow_samplers                        := CheckEx(Buffer, 'GL_EXT_shadow_samplers');
  GL_EXT_tessellation_point_size                := CheckEx(Buffer, 'GL_EXT_tessellation_point_size');
  GL_EXT_tessellation_shader                    := CheckEx(Buffer, 'GL_EXT_tessellation_shader');
  GL_EXT_texture_border_clamp                   := CheckEx(Buffer, 'GL_EXT_texture_border_clamp');
  GL_EXT_texture_buffer                         := CheckEx(Buffer, 'GL_EXT_texture_buffer');
  GL_EXT_texture_compression_dxt1               := CheckEx(Buffer, 'GL_EXT_texture_compression_dxt1');
  GL_EXT_texture_compression_s3tc               := CheckEx(Buffer, 'GL_EXT_texture_compression_s3tc');
  GL_EXT_texture_cube_map_array                 := CheckEx(Buffer, 'GL_EXT_texture_cube_map_array');
  GL_EXT_texture_filter_anisotropic             := CheckEx(Buffer, 'GL_EXT_texture_filter_anisotropic');
  GL_EXT_texture_format_BGRA8888                := CheckEx(Buffer, 'GL_EXT_texture_format_BGRA8888');
  GL_EXT_texture_norm16                         := CheckEx(Buffer, 'GL_EXT_texture_norm16');
  GL_EXT_texture_rg                             := CheckEx(Buffer, 'GL_EXT_texture_rg');
  GL_EXT_texture_sRGB_decode                    := CheckEx(Buffer, 'GL_EXT_texture_sRGB_decode');
  GL_EXT_texture_storage                        := CheckEx(Buffer, 'GL_EXT_texture_storage');
  GL_EXT_texture_type_2_10_10_10_REV            := CheckEx(Buffer, 'GL_EXT_texture_type_2_10_10_10_REV');
  GL_EXT_texture_view                           := CheckEx(Buffer, 'GL_EXT_texture_view');
  GL_EXT_unpack_subimage                        := CheckEx(Buffer, 'GL_EXT_unpack_subimage');

  // FJ
  GL_FJ_shader_binary_GCCSO                     := CheckEx(Buffer, 'GL_FJ_shader_binary_GCCSO');

  // IMG
  GL_IMG_multisampled_render_to_texture         := CheckEx(Buffer, 'GL_IMG_multisampled_render_to_texture');
  GL_IMG_program_binary                         := CheckEx(Buffer, 'GL_IMG_program_binary');
  GL_IMG_read_format                            := CheckEx(Buffer, 'GL_IMG_read_format');
  GL_IMG_shader_binary                          := CheckEx(Buffer, 'GL_IMG_shader_binary');
  GL_IMG_texture_compression_pvrtc              := CheckEx(Buffer, 'GL_IMG_texture_compression_pvrtc');
  GL_IMG_texture_compression_pvrtc2             := CheckEx(Buffer, 'GL_IMG_texture_compression_pvrtc2');

  // INTEL
  GL_INTEL_performance_query                    := CheckEx(Buffer, 'GL_INTEL_performance_query');

  // NV
  GL_NV_bindless_texture                        := CheckEx(Buffer, 'GL_NV_bindless_texture');
  GL_NV_blend_equation_advanced                 := CheckEx(Buffer, 'GL_NV_blend_equation_advanced');
  GL_NV_blend_equation_advanced_coherent        := CheckEx(Buffer, 'GL_NV_blend_equation_advanced_coherent');
  GL_NV_conditional_render                      := CheckEx(Buffer, 'GL_NV_conditional_render');
  GL_NV_copy_buffer                             := CheckEx(Buffer, 'GL_NV_copy_buffer');
  GL_NV_coverage_sample                         := CheckEx(Buffer, 'GL_NV_coverage_sample');
  GL_NV_depth_nonlinear                         := CheckEx(Buffer, 'GL_NV_depth_nonlinear');
  GL_NV_draw_buffers                            := CheckEx(Buffer, 'GL_NV_draw_buffers');
  GL_NV_draw_instanced                          := CheckEx(Buffer, 'GL_NV_draw_instanced');
  GL_NV_explicit_attrib_location                := CheckEx(Buffer, 'GL_NV_explicit_attrib_location');
  GL_NV_fbo_color_attachments                   := CheckEx(Buffer, 'GL_NV_fbo_color_attachments');
  GL_NV_fence                                   := CheckEx(Buffer, 'GL_NV_fence');
  GL_NV_framebuffer_blit                        := CheckEx(Buffer, 'GL_NV_framebuffer_blit');
  GL_NV_framebuffer_multisample                 := CheckEx(Buffer, 'GL_NV_framebuffer_multisample');
  GL_NV_generate_mipmap_sRGB                    := CheckEx(Buffer, 'GL_NV_generate_mipmap_sRGB');
  GL_NV_image_formats                           := CheckEx(Buffer, 'GL_NV_image_formats');
  GL_NV_instanced_arrays                        := CheckEx(Buffer, 'GL_NV_instanced_arrays');
  GL_NV_internalformat_sample_query             := CheckEx(Buffer, 'GL_NV_internalformat_sample_query');
  GL_NV_non_square_matrices                     := CheckEx(Buffer, 'GL_NV_non_square_matrices');
  GL_NV_path_rendering                          := CheckEx(Buffer, 'GL_NV_path_rendering');
  GL_NV_read_buffer                             := CheckEx(Buffer, 'GL_NV_read_buffer');
  GL_NV_read_buffer_front                       := CheckEx(Buffer, 'GL_NV_read_buffer_front');
  GL_NV_read_depth                              := CheckEx(Buffer, 'GL_NV_read_depth');
  GL_NV_read_depth_stencil                      := CheckEx(Buffer, 'GL_NV_read_depth_stencil');
  GL_NV_read_stencil                            := CheckEx(Buffer, 'GL_NV_read_stencil');
  GL_NV_sRGB_formats                            := CheckEx(Buffer, 'GL_NV_sRGB_formats');
  GL_NV_shader_noperspective_interpolation      := CheckEx(Buffer, 'GL_NV_shader_noperspective_interpolation');
  GL_NV_shadow_samplers_array                   := CheckEx(Buffer, 'GL_NV_shadow_samplers_array');
  GL_NV_shadow_samplers_cube                    := CheckEx(Buffer, 'GL_NV_shadow_samplers_cube');
  GL_NV_texture_border_clamp                    := CheckEx(Buffer, 'GL_NV_texture_border_clamp');
  GL_NV_texture_compression_s3tc_update         := CheckEx(Buffer, 'GL_NV_texture_compression_s3tc_update');
  GL_NV_texture_npot_2D_mipmap                  := CheckEx(Buffer, 'GL_NV_texture_npot_2D_mipmap');
  GL_NV_viewport_array                          := CheckEx(Buffer, 'GL_NV_viewport_array');

  // QCOM
  GL_QCOM_alpha_test                            := CheckEx(Buffer, 'GL_QCOM_alpha_test');
  GL_QCOM_binning_control                       := CheckEx(Buffer, 'GL_QCOM_binning_control');
  GL_QCOM_driver_control                        := CheckEx(Buffer, 'GL_QCOM_driver_control');
  GL_QCOM_extended_get                          := CheckEx(Buffer, 'GL_QCOM_extended_get');
  GL_QCOM_extended_get2                         := CheckEx(Buffer, 'GL_QCOM_extended_get2');
  GL_QCOM_perfmon_global_mode                   := CheckEx(Buffer, 'GL_QCOM_perfmon_global_mode');
  GL_QCOM_tiled_rendering                       := CheckEx(Buffer, 'GL_QCOM_tiled_rendering');
  GL_QCOM_writeonly_rendering                   := CheckEx(Buffer, 'GL_QCOM_writeonly_rendering');

  // VIV
  GL_VIV_shader_binary                          := CheckEx(Buffer, 'GL_VIV_shader_binary');
end;

procedure Read_GL_KHR_blend_equation_advanced;
begin
  glBlendBarrierKHR                                        := dglGetProcAddress('glBlendBarrierKHR');
end;

procedure Read_GL_KHR_debug;
begin
  glDebugMessageControlKHR                                 := dglGetProcAddress('glDebugMessageControlKHR');
  glDebugMessageInsertKHR                                  := dglGetProcAddress('glDebugMessageInsertKHR');
  glDebugMessageCallbackKHR                                := dglGetProcAddress('glDebugMessageCallbackKHR');
  glGetDebugMessageLogKHR                                  := dglGetProcAddress('glGetDebugMessageLogKHR');
  glPushDebugGroupKHR                                      := dglGetProcAddress('glPushDebugGroupKHR');
  glPopDebugGroupKHR                                       := dglGetProcAddress('glPopDebugGroupKHR');
  glObjectLabelKHR                                         := dglGetProcAddress('glObjectLabelKHR');
  glGetObjectLabelKHR                                      := dglGetProcAddress('glGetObjectLabelKHR');
  glObjectPtrLabelKHR                                      := dglGetProcAddress('glObjectPtrLabelKHR');
  glGetObjectPtrLabelKHR                                   := dglGetProcAddress('glGetObjectPtrLabelKHR');
  glGetPointervKHR                                         := dglGetProcAddress('glGetPointervKHR');
end;

procedure Read_GL_KHR_robustness;
begin
  glGetGraphicsResetStatusKHR                              := dglGetProcAddress('glGetGraphicsResetStatusKHR');
  glReadnPixelsKHR                                         := dglGetProcAddress('glReadnPixelsKHR');
  glGetnUniformfvKHR                                       := dglGetProcAddress('glGetnUniformfvKHR');
  glGetnUniformivKHR                                       := dglGetProcAddress('glGetnUniformivKHR');
  glGetnUniformuivKHR                                      := dglGetProcAddress('glGetnUniformuivKHR');
end;

procedure Read_GL_OES_EGL_image;
begin
  glEGLImageTargetTexture2DOES                             := dglGetProcAddress('glEGLImageTargetTexture2DOES');
  glEGLImageTargetRenderbufferStorageOES                   := dglGetProcAddress('glEGLImageTargetRenderbufferStorageOES');
end;

procedure Read_GL_OES_get_program_binary;
begin
  glGetProgramBinaryOES                                    := dglGetProcAddress('glGetProgramBinaryOES');
  glProgramBinaryOES                                       := dglGetProcAddress('glProgramBinaryOES');
end;

procedure Read_GL_OES_mapbuffer;
begin
  glMapBufferOES                                           := dglGetProcAddress('glMapBufferOES');
  glUnmapBufferOES                                         := dglGetProcAddress('glUnmapBufferOES');
  glGetBufferPointervOES                                   := dglGetProcAddress('glGetBufferPointervOES');
end;

procedure Read_GL_OES_sample_shading;
begin
  glMinSampleShadingOES                                    := dglGetProcAddress('glMinSampleShadingOES');
end;

procedure Read_GL_OES_texture_3D;
begin
  glTexImage3DOES                                          := dglGetProcAddress('glTexImage3DOES');
  glTexSubImage3DOES                                       := dglGetProcAddress('glTexSubImage3DOES');
  glCopyTexSubImage3DOES                                   := dglGetProcAddress('glCopyTexSubImage3DOES');
  glCompressedTexImage3DOES                                := dglGetProcAddress('glCompressedTexImage3DOES');
  glCompressedTexSubImage3DOES                             := dglGetProcAddress('glCompressedTexSubImage3DOES');
  glFramebufferTexture3DOES                                := dglGetProcAddress('glFramebufferTexture3DOES');
end;

procedure Read_GL_OES_texture_storage_multisample_2d_array;
begin
  glTexStorage3DMultisampleOES                             := dglGetProcAddress('glTexStorage3DMultisampleOES');
end;

procedure Read_GL_OES_vertex_array_object;
begin
  glBindVertexArrayOES                                     := dglGetProcAddress('glBindVertexArrayOES');
  glDeleteVertexArraysOES                                  := dglGetProcAddress('glDeleteVertexArraysOES');
  glGenVertexArraysOES                                     := dglGetProcAddress('glGenVertexArraysOES');
  glIsVertexArrayOES                                       := dglGetProcAddress('glIsVertexArrayOES');
end;

procedure Read_GL_AMD_performance_monitor;
begin
  glGetPerfMonitorGroupsAMD                                := dglGetProcAddress('glGetPerfMonitorGroupsAMD');
  glGetPerfMonitorCountersAMD                              := dglGetProcAddress('glGetPerfMonitorCountersAMD');
  glGetPerfMonitorGroupStringAMD                           := dglGetProcAddress('glGetPerfMonitorGroupStringAMD');
  glGetPerfMonitorCounterStringAMD                         := dglGetProcAddress('glGetPerfMonitorCounterStringAMD');
  glGetPerfMonitorCounterInfoAMD                           := dglGetProcAddress('glGetPerfMonitorCounterInfoAMD');
  glGenPerfMonitorsAMD                                     := dglGetProcAddress('glGenPerfMonitorsAMD');
  glDeletePerfMonitorsAMD                                  := dglGetProcAddress('glDeletePerfMonitorsAMD');
  glSelectPerfMonitorCountersAMD                           := dglGetProcAddress('glSelectPerfMonitorCountersAMD');
  glBeginPerfMonitorAMD                                    := dglGetProcAddress('glBeginPerfMonitorAMD');
  glEndPerfMonitorAMD                                      := dglGetProcAddress('glEndPerfMonitorAMD');
  glGetPerfMonitorCounterDataAMD                           := dglGetProcAddress('glGetPerfMonitorCounterDataAMD');
end;

procedure Read_GL_ANGLE_framebuffer_blit;
begin
  glBlitFramebufferANGLE                                   := dglGetProcAddress('glBlitFramebufferANGLE');
end;

procedure Read_GL_ANGLE_framebuffer_multisample;
begin
  glRenderbufferStorageMultisampleANGLE                    := dglGetProcAddress('glRenderbufferStorageMultisampleANGLE');
end;

procedure Read_GL_ANGLE_instanced_arrays;
begin
  glDrawArraysInstancedANGLE                               := dglGetProcAddress('glDrawArraysInstancedANGLE');
  glDrawElementsInstancedANGLE                             := dglGetProcAddress('glDrawElementsInstancedANGLE');
  glVertexAttribDivisorANGLE                               := dglGetProcAddress('glVertexAttribDivisorANGLE');
end;

procedure Read_GL_ANGLE_translated_shader_source;
begin
  glGetTranslatedShaderSourceANGLE                         := dglGetProcAddress('glGetTranslatedShaderSourceANGLE');
end;

procedure Read_GL_APPLE_copy_texture_levels;
begin
  glCopyTextureLevelsAPPLE                                 := dglGetProcAddress('glCopyTextureLevelsAPPLE');
end;

procedure Read_GL_APPLE_framebuffer_multisample;
begin
  glRenderbufferStorageMultisampleAPPLE                    := dglGetProcAddress('glRenderbufferStorageMultisampleAPPLE');
  glResolveMultisampleFramebufferAPPLE                     := dglGetProcAddress('glResolveMultisampleFramebufferAPPLE');
end;

procedure Read_GL_APPLE_sync;
begin
  glFenceSyncAPPLE                                         := dglGetProcAddress('glFenceSyncAPPLE');
  glIsSyncAPPLE                                            := dglGetProcAddress('glIsSyncAPPLE');
  glDeleteSyncAPPLE                                        := dglGetProcAddress('glDeleteSyncAPPLE');
  glClientWaitSyncAPPLE                                    := dglGetProcAddress('glClientWaitSyncAPPLE');
  glWaitSyncAPPLE                                          := dglGetProcAddress('glWaitSyncAPPLE');
  glGetInteger64vAPPLE                                     := dglGetProcAddress('glGetInteger64vAPPLE');
  glGetSyncivAPPLE                                         := dglGetProcAddress('glGetSyncivAPPLE');
end;

procedure Read_GL_EXT_base_instance;
begin
  glDrawArraysInstancedBaseInstanceEXT                     := dglGetProcAddress('glDrawArraysInstancedBaseInstanceEXT');
  glDrawElementsInstancedBaseInstanceEXT                   := dglGetProcAddress('glDrawElementsInstancedBaseInstanceEXT');
  glDrawElementsInstancedBaseVertexBaseInstanceEXT         := dglGetProcAddress('glDrawElementsInstancedBaseVertexBaseInstanceEXT');
end;

procedure Read_GL_EXT_copy_image;
begin
  glCopyImageSubDataEXT                                    := dglGetProcAddress('glCopyImageSubDataEXT');
end;

procedure Read_GL_EXT_debug_label;
begin
  glLabelObjectEXT                                         := dglGetProcAddress('glLabelObjectEXT');
  glGetObjectLabelEXT                                      := dglGetProcAddress('glGetObjectLabelEXT');
end;

procedure Read_GL_EXT_debug_marker;
begin
  glInsertEventMarkerEXT                                   := dglGetProcAddress('glInsertEventMarkerEXT');
  glPushGroupMarkerEXT                                     := dglGetProcAddress('glPushGroupMarkerEXT');
  glPopGroupMarkerEXT                                      := dglGetProcAddress('glPopGroupMarkerEXT');
end;

procedure Read_GL_EXT_discard_framebuffer;
begin
  glDiscardFramebufferEXT                                  := dglGetProcAddress('glDiscardFramebufferEXT');
end;

procedure Read_GL_EXT_disjoint_timer_query;
begin
  glGenQueriesEXT                                          := dglGetProcAddress('glGenQueriesEXT');
  glDeleteQueriesEXT                                       := dglGetProcAddress('glDeleteQueriesEXT');
  glIsQueryEXT                                             := dglGetProcAddress('glIsQueryEXT');
  glBeginQueryEXT                                          := dglGetProcAddress('glBeginQueryEXT');
  glEndQueryEXT                                            := dglGetProcAddress('glEndQueryEXT');
  glQueryCounterEXT                                        := dglGetProcAddress('glQueryCounterEXT');
  glGetQueryivEXT                                          := dglGetProcAddress('glGetQueryivEXT');
  glGetQueryObjectivEXT                                    := dglGetProcAddress('glGetQueryObjectivEXT');
  glGetQueryObjectuivEXT                                   := dglGetProcAddress('glGetQueryObjectuivEXT');
  glGetQueryObjecti64vEXT                                  := dglGetProcAddress('glGetQueryObjecti64vEXT');
  glGetQueryObjectui64vEXT                                 := dglGetProcAddress('glGetQueryObjectui64vEXT');
end;

procedure Read_GL_EXT_draw_buffers;
begin
  glDrawBuffersEXT                                         := dglGetProcAddress('glDrawBuffersEXT');
end;

procedure Read_GL_EXT_draw_buffers_indexed;
begin
  glEnableiEXT                                             := dglGetProcAddress('glEnableiEXT');
  glDisableiEXT                                            := dglGetProcAddress('glDisableiEXT');
  glBlendEquationiEXT                                      := dglGetProcAddress('glBlendEquationiEXT');
  glBlendEquationSeparateiEXT                              := dglGetProcAddress('glBlendEquationSeparateiEXT');
  glBlendFunciEXT                                          := dglGetProcAddress('glBlendFunciEXT');
  glBlendFuncSeparateiEXT                                  := dglGetProcAddress('glBlendFuncSeparateiEXT');
  glColorMaskiEXT                                          := dglGetProcAddress('glColorMaskiEXT');
  glIsEnablediEXT                                          := dglGetProcAddress('glIsEnablediEXT');
end;

procedure Read_GL_EXT_draw_elements_base_vertex;
begin
  glDrawElementsBaseVertexEXT                              := dglGetProcAddress('glDrawElementsBaseVertexEXT');
  glDrawRangeElementsBaseVertexEXT                         := dglGetProcAddress('glDrawRangeElementsBaseVertexEXT');
  glDrawElementsInstancedBaseVertexEXT                     := dglGetProcAddress('glDrawElementsInstancedBaseVertexEXT');
  glMultiDrawElementsBaseVertexEXT                         := dglGetProcAddress('glMultiDrawElementsBaseVertexEXT');
end;

procedure Read_GL_EXT_draw_instanced;
begin
  glDrawArraysInstancedEXT                                 := dglGetProcAddress('glDrawArraysInstancedEXT');
  glDrawElementsInstancedEXT                               := dglGetProcAddress('glDrawElementsInstancedEXT');
end;

procedure Read_GL_EXT_geometry_shader;
begin
  glFramebufferTextureEXT                                  := dglGetProcAddress('glFramebufferTextureEXT');
end;

procedure Read_GL_EXT_instanced_arrays;
begin
  glVertexAttribDivisorEXT                                 := dglGetProcAddress('glVertexAttribDivisorEXT');
end;

procedure Read_GL_EXT_map_buffer_range;
begin
  glMapBufferRangeEXT                                      := dglGetProcAddress('glMapBufferRangeEXT');
  glFlushMappedBufferRangeEXT                              := dglGetProcAddress('glFlushMappedBufferRangeEXT');
end;

procedure Read_GL_EXT_multi_draw_arrays;
begin
  glMultiDrawArraysEXT                                     := dglGetProcAddress('glMultiDrawArraysEXT');
  glMultiDrawElementsEXT                                   := dglGetProcAddress('glMultiDrawElementsEXT');
end;

procedure Read_GL_EXT_multi_draw_indirect;
begin
  glMultiDrawArraysIndirectEXT                             := dglGetProcAddress('glMultiDrawArraysIndirectEXT');
  glMultiDrawElementsIndirectEXT                           := dglGetProcAddress('glMultiDrawElementsIndirectEXT');
end;

procedure Read_GL_EXT_multisampled_render_to_texture;
begin
  glRenderbufferStorageMultisampleEXT                      := dglGetProcAddress('glRenderbufferStorageMultisampleEXT');
  glFramebufferTexture2DMultisampleEXT                     := dglGetProcAddress('glFramebufferTexture2DMultisampleEXT');
end;

procedure Read_GL_EXT_multiview_draw_buffers;
begin
  glReadBufferIndexedEXT                                   := dglGetProcAddress('glReadBufferIndexedEXT');
  glDrawBuffersIndexedEXT                                  := dglGetProcAddress('glDrawBuffersIndexedEXT');
  glGetIntegeri_vEXT                                       := dglGetProcAddress('glGetIntegeri_vEXT');
end;

procedure Read_GL_EXT_primitive_bounding_box;
begin
  glPrimitiveBoundingBoxEXT                                := dglGetProcAddress('glPrimitiveBoundingBoxEXT');
end;

procedure Read_GL_EXT_robustness;
begin
  glGetGraphicsResetStatusEXT                              := dglGetProcAddress('glGetGraphicsResetStatusEXT');
  glReadnPixelsEXT                                         := dglGetProcAddress('glReadnPixelsEXT');
  glGetnUniformfvEXT                                       := dglGetProcAddress('glGetnUniformfvEXT');
  glGetnUniformivEXT                                       := dglGetProcAddress('glGetnUniformivEXT');
end;

procedure Read_GL_EXT_separate_shader_objects;
begin
  glActiveShaderProgramEXT                                 := dglGetProcAddress('glActiveShaderProgramEXT');
  glBindProgramPipelineEXT                                 := dglGetProcAddress('glBindProgramPipelineEXT');
  glCreateShaderProgramvEXT                                := dglGetProcAddress('glCreateShaderProgramvEXT');
  glDeleteProgramPipelinesEXT                              := dglGetProcAddress('glDeleteProgramPipelinesEXT');
  glGenProgramPipelinesEXT                                 := dglGetProcAddress('glGenProgramPipelinesEXT');
  glGetProgramPipelineInfoLogEXT                           := dglGetProcAddress('glGetProgramPipelineInfoLogEXT');
  glGetProgramPipelineivEXT                                := dglGetProcAddress('glGetProgramPipelineivEXT');
  glIsProgramPipelineEXT                                   := dglGetProcAddress('glIsProgramPipelineEXT');
  glProgramParameteriEXT                                   := dglGetProcAddress('glProgramParameteriEXT');
  glProgramUniform1fEXT                                    := dglGetProcAddress('glProgramUniform1fEXT');
  glProgramUniform1fvEXT                                   := dglGetProcAddress('glProgramUniform1fvEXT');
  glProgramUniform1iEXT                                    := dglGetProcAddress('glProgramUniform1iEXT');
  glProgramUniform1ivEXT                                   := dglGetProcAddress('glProgramUniform1ivEXT');
  glProgramUniform2fEXT                                    := dglGetProcAddress('glProgramUniform2fEXT');
  glProgramUniform2fvEXT                                   := dglGetProcAddress('glProgramUniform2fvEXT');
  glProgramUniform2iEXT                                    := dglGetProcAddress('glProgramUniform2iEXT');
  glProgramUniform2ivEXT                                   := dglGetProcAddress('glProgramUniform2ivEXT');
  glProgramUniform3fEXT                                    := dglGetProcAddress('glProgramUniform3fEXT');
  glProgramUniform3fvEXT                                   := dglGetProcAddress('glProgramUniform3fvEXT');
  glProgramUniform3iEXT                                    := dglGetProcAddress('glProgramUniform3iEXT');
  glProgramUniform3ivEXT                                   := dglGetProcAddress('glProgramUniform3ivEXT');
  glProgramUniform4fEXT                                    := dglGetProcAddress('glProgramUniform4fEXT');
  glProgramUniform4fvEXT                                   := dglGetProcAddress('glProgramUniform4fvEXT');
  glProgramUniform4iEXT                                    := dglGetProcAddress('glProgramUniform4iEXT');
  glProgramUniform4ivEXT                                   := dglGetProcAddress('glProgramUniform4ivEXT');
  glProgramUniformMatrix2fvEXT                             := dglGetProcAddress('glProgramUniformMatrix2fvEXT');
  glProgramUniformMatrix3fvEXT                             := dglGetProcAddress('glProgramUniformMatrix3fvEXT');
  glProgramUniformMatrix4fvEXT                             := dglGetProcAddress('glProgramUniformMatrix4fvEXT');
  glUseProgramStagesEXT                                    := dglGetProcAddress('glUseProgramStagesEXT');
  glValidateProgramPipelineEXT                             := dglGetProcAddress('glValidateProgramPipelineEXT');
  glProgramUniform1uiEXT                                   := dglGetProcAddress('glProgramUniform1uiEXT');
  glProgramUniform2uiEXT                                   := dglGetProcAddress('glProgramUniform2uiEXT');
  glProgramUniform3uiEXT                                   := dglGetProcAddress('glProgramUniform3uiEXT');
  glProgramUniform4uiEXT                                   := dglGetProcAddress('glProgramUniform4uiEXT');
  glProgramUniform1uivEXT                                  := dglGetProcAddress('glProgramUniform1uivEXT');
  glProgramUniform2uivEXT                                  := dglGetProcAddress('glProgramUniform2uivEXT');
  glProgramUniform3uivEXT                                  := dglGetProcAddress('glProgramUniform3uivEXT');
  glProgramUniform4uivEXT                                  := dglGetProcAddress('glProgramUniform4uivEXT');
  glProgramUniformMatrix2x3fvEXT                           := dglGetProcAddress('glProgramUniformMatrix2x3fvEXT');
  glProgramUniformMatrix3x2fvEXT                           := dglGetProcAddress('glProgramUniformMatrix3x2fvEXT');
  glProgramUniformMatrix2x4fvEXT                           := dglGetProcAddress('glProgramUniformMatrix2x4fvEXT');
  glProgramUniformMatrix4x2fvEXT                           := dglGetProcAddress('glProgramUniformMatrix4x2fvEXT');
  glProgramUniformMatrix3x4fvEXT                           := dglGetProcAddress('glProgramUniformMatrix3x4fvEXT');
  glProgramUniformMatrix4x3fvEXT                           := dglGetProcAddress('glProgramUniformMatrix4x3fvEXT');
end;

procedure Read_GL_EXT_tessellation_shader;
begin
  glPatchParameteriEXT                                     := dglGetProcAddress('glPatchParameteriEXT');
end;

procedure Read_GL_EXT_texture_border_clamp;
begin
  glTexParameterIivEXT                                     := dglGetProcAddress('glTexParameterIivEXT');
  glTexParameterIuivEXT                                    := dglGetProcAddress('glTexParameterIuivEXT');
  glGetTexParameterIivEXT                                  := dglGetProcAddress('glGetTexParameterIivEXT');
  glGetTexParameterIuivEXT                                 := dglGetProcAddress('glGetTexParameterIuivEXT');
  glSamplerParameterIivEXT                                 := dglGetProcAddress('glSamplerParameterIivEXT');
  glSamplerParameterIuivEXT                                := dglGetProcAddress('glSamplerParameterIuivEXT');
  glGetSamplerParameterIivEXT                              := dglGetProcAddress('glGetSamplerParameterIivEXT');
  glGetSamplerParameterIuivEXT                             := dglGetProcAddress('glGetSamplerParameterIuivEXT');
end;

procedure Read_GL_EXT_texture_buffer;
begin
  glTexBufferEXT                                           := dglGetProcAddress('glTexBufferEXT');
  glTexBufferRangeEXT                                      := dglGetProcAddress('glTexBufferRangeEXT');
end;

procedure Read_GL_EXT_texture_storage;
begin
  glTexStorage1DEXT                                        := dglGetProcAddress('glTexStorage1DEXT');
  glTexStorage2DEXT                                        := dglGetProcAddress('glTexStorage2DEXT');
  glTexStorage3DEXT                                        := dglGetProcAddress('glTexStorage3DEXT');
  glTextureStorage1DEXT                                    := dglGetProcAddress('glTextureStorage1DEXT');
  glTextureStorage2DEXT                                    := dglGetProcAddress('glTextureStorage2DEXT');
  glTextureStorage3DEXT                                    := dglGetProcAddress('glTextureStorage3DEXT');
end;

procedure Read_GL_EXT_texture_view;
begin
  glTextureViewEXT                                         := dglGetProcAddress('glTextureViewEXT');
end;

procedure Read_GL_IMG_multisampled_render_to_texture;
begin
  glRenderbufferStorageMultisampleIMG                      := dglGetProcAddress('glRenderbufferStorageMultisampleIMG');
  glFramebufferTexture2DMultisampleIMG                     := dglGetProcAddress('glFramebufferTexture2DMultisampleIMG');
end;

procedure Read_GL_INTEL_performance_query;
begin
  glBeginPerfQueryINTEL                                    := dglGetProcAddress('glBeginPerfQueryINTEL');
  glCreatePerfQueryINTEL                                   := dglGetProcAddress('glCreatePerfQueryINTEL');
  glDeletePerfQueryINTEL                                   := dglGetProcAddress('glDeletePerfQueryINTEL');
  glEndPerfQueryINTEL                                      := dglGetProcAddress('glEndPerfQueryINTEL');
  glGetFirstPerfQueryIdINTEL                               := dglGetProcAddress('glGetFirstPerfQueryIdINTEL');
  glGetNextPerfQueryIdINTEL                                := dglGetProcAddress('glGetNextPerfQueryIdINTEL');
  glGetPerfCounterInfoINTEL                                := dglGetProcAddress('glGetPerfCounterInfoINTEL');
  glGetPerfQueryDataINTEL                                  := dglGetProcAddress('glGetPerfQueryDataINTEL');
  glGetPerfQueryIdByNameINTEL                              := dglGetProcAddress('glGetPerfQueryIdByNameINTEL');
  glGetPerfQueryInfoINTEL                                  := dglGetProcAddress('glGetPerfQueryInfoINTEL');
end;

procedure Read_GL_NV_bindless_texture;
begin
  glGetTextureHandleNV                                     := dglGetProcAddress('glGetTextureHandleNV');
  glGetTextureSamplerHandleNV                              := dglGetProcAddress('glGetTextureSamplerHandleNV');
  glMakeTextureHandleResidentNV                            := dglGetProcAddress('glMakeTextureHandleResidentNV');
  glMakeTextureHandleNonResidentNV                         := dglGetProcAddress('glMakeTextureHandleNonResidentNV');
  glGetImageHandleNV                                       := dglGetProcAddress('glGetImageHandleNV');
  glMakeImageHandleResidentNV                              := dglGetProcAddress('glMakeImageHandleResidentNV');
  glMakeImageHandleNonResidentNV                           := dglGetProcAddress('glMakeImageHandleNonResidentNV');
  glUniformHandleui64NV                                    := dglGetProcAddress('glUniformHandleui64NV');
  glUniformHandleui64vNV                                   := dglGetProcAddress('glUniformHandleui64vNV');
  glProgramUniformHandleui64NV                             := dglGetProcAddress('glProgramUniformHandleui64NV');
  glProgramUniformHandleui64vNV                            := dglGetProcAddress('glProgramUniformHandleui64vNV');
  glIsTextureHandleResidentNV                              := dglGetProcAddress('glIsTextureHandleResidentNV');
  glIsImageHandleResidentNV                                := dglGetProcAddress('glIsImageHandleResidentNV');
end;

procedure Read_GL_NV_blend_equation_advanced;
begin
  glBlendParameteriNV                                      := dglGetProcAddress('glBlendParameteriNV');
  glBlendBarrierNV                                         := dglGetProcAddress('glBlendBarrierNV');
end;

procedure Read_GL_NV_conditional_render;
begin
  glBeginConditionalRenderNV                               := dglGetProcAddress('glBeginConditionalRenderNV');
  glEndConditionalRenderNV                                 := dglGetProcAddress('glEndConditionalRenderNV');
end;

procedure Read_GL_NV_copy_buffer;
begin
  glCopyBufferSubDataNV                                    := dglGetProcAddress('glCopyBufferSubDataNV');
end;

procedure Read_GL_NV_coverage_sample;
begin
  glCoverageMaskNV                                         := dglGetProcAddress('glCoverageMaskNV');
  glCoverageOperationNV                                    := dglGetProcAddress('glCoverageOperationNV');
end;

procedure Read_GL_NV_draw_buffers;
begin
  glDrawBuffersNV                                          := dglGetProcAddress('glDrawBuffersNV');
end;

procedure Read_GL_NV_draw_instanced;
begin
  glDrawArraysInstancedNV                                  := dglGetProcAddress('glDrawArraysInstancedNV');
  glDrawElementsInstancedNV                                := dglGetProcAddress('glDrawElementsInstancedNV');
end;

procedure Read_GL_NV_fence;
begin
  glDeleteFencesNV                                         := dglGetProcAddress('glDeleteFencesNV');
  glGenFencesNV                                            := dglGetProcAddress('glGenFencesNV');
  glIsFenceNV                                              := dglGetProcAddress('glIsFenceNV');
  glTestFenceNV                                            := dglGetProcAddress('glTestFenceNV');
  glGetFenceivNV                                           := dglGetProcAddress('glGetFenceivNV');
  glFinishFenceNV                                          := dglGetProcAddress('glFinishFenceNV');
  glSetFenceNV                                             := dglGetProcAddress('glSetFenceNV');
end;

procedure Read_GL_NV_framebuffer_blit;
begin
  glBlitFramebufferNV                                      := dglGetProcAddress('glBlitFramebufferNV');
end;

procedure Read_GL_NV_framebuffer_multisample;
begin
  glRenderbufferStorageMultisampleNV                       := dglGetProcAddress('glRenderbufferStorageMultisampleNV');
end;

procedure Read_GL_NV_instanced_arrays;
begin
  glVertexAttribDivisorNV                                  := dglGetProcAddress('glVertexAttribDivisorNV');
end;

procedure Read_GL_NV_internalformat_sample_query;
begin
  glGetInternalformatSampleivNV                            := dglGetProcAddress('glGetInternalformatSampleivNV');
end;

procedure Read_GL_NV_non_square_matrices;
begin
  glUniformMatrix2x3fvNV                                   := dglGetProcAddress('glUniformMatrix2x3fvNV');
  glUniformMatrix3x2fvNV                                   := dglGetProcAddress('glUniformMatrix3x2fvNV');
  glUniformMatrix2x4fvNV                                   := dglGetProcAddress('glUniformMatrix2x4fvNV');
  glUniformMatrix4x2fvNV                                   := dglGetProcAddress('glUniformMatrix4x2fvNV');
  glUniformMatrix3x4fvNV                                   := dglGetProcAddress('glUniformMatrix3x4fvNV');
  glUniformMatrix4x3fvNV                                   := dglGetProcAddress('glUniformMatrix4x3fvNV');
end;

procedure Read_GL_NV_path_rendering;
begin
  glGenPathsNV                                             := dglGetProcAddress('glGenPathsNV');
  glDeletePathsNV                                          := dglGetProcAddress('glDeletePathsNV');
  glIsPathNV                                               := dglGetProcAddress('glIsPathNV');
  glPathCommandsNV                                         := dglGetProcAddress('glPathCommandsNV');
  glPathCoordsNV                                           := dglGetProcAddress('glPathCoordsNV');
  glPathSubCommandsNV                                      := dglGetProcAddress('glPathSubCommandsNV');
  glPathSubCoordsNV                                        := dglGetProcAddress('glPathSubCoordsNV');
  glPathStringNV                                           := dglGetProcAddress('glPathStringNV');
  glPathGlyphsNV                                           := dglGetProcAddress('glPathGlyphsNV');
  glPathGlyphRangeNV                                       := dglGetProcAddress('glPathGlyphRangeNV');
  glWeightPathsNV                                          := dglGetProcAddress('glWeightPathsNV');
  glCopyPathNV                                             := dglGetProcAddress('glCopyPathNV');
  glInterpolatePathsNV                                     := dglGetProcAddress('glInterpolatePathsNV');
  glTransformPathNV                                        := dglGetProcAddress('glTransformPathNV');
  glPathParameterivNV                                      := dglGetProcAddress('glPathParameterivNV');
  glPathParameteriNV                                       := dglGetProcAddress('glPathParameteriNV');
  glPathParameterfvNV                                      := dglGetProcAddress('glPathParameterfvNV');
  glPathParameterfNV                                       := dglGetProcAddress('glPathParameterfNV');
  glPathDashArrayNV                                        := dglGetProcAddress('glPathDashArrayNV');
  glPathStencilFuncNV                                      := dglGetProcAddress('glPathStencilFuncNV');
  glPathStencilDepthOffsetNV                               := dglGetProcAddress('glPathStencilDepthOffsetNV');
  glStencilFillPathNV                                      := dglGetProcAddress('glStencilFillPathNV');
  glStencilStrokePathNV                                    := dglGetProcAddress('glStencilStrokePathNV');
  glStencilFillPathInstancedNV                             := dglGetProcAddress('glStencilFillPathInstancedNV');
  glStencilStrokePathInstancedNV                           := dglGetProcAddress('glStencilStrokePathInstancedNV');
  glPathCoverDepthFuncNV                                   := dglGetProcAddress('glPathCoverDepthFuncNV');
  glCoverFillPathNV                                        := dglGetProcAddress('glCoverFillPathNV');
  glCoverStrokePathNV                                      := dglGetProcAddress('glCoverStrokePathNV');
  glCoverFillPathInstancedNV                               := dglGetProcAddress('glCoverFillPathInstancedNV');
  glCoverStrokePathInstancedNV                             := dglGetProcAddress('glCoverStrokePathInstancedNV');
  glGetPathParameterivNV                                   := dglGetProcAddress('glGetPathParameterivNV');
  glGetPathParameterfvNV                                   := dglGetProcAddress('glGetPathParameterfvNV');
  glGetPathCommandsNV                                      := dglGetProcAddress('glGetPathCommandsNV');
  glGetPathCoordsNV                                        := dglGetProcAddress('glGetPathCoordsNV');
  glGetPathDashArrayNV                                     := dglGetProcAddress('glGetPathDashArrayNV');
  glGetPathMetricsNV                                       := dglGetProcAddress('glGetPathMetricsNV');
  glGetPathMetricRangeNV                                   := dglGetProcAddress('glGetPathMetricRangeNV');
  glGetPathSpacingNV                                       := dglGetProcAddress('glGetPathSpacingNV');
  glIsPointInFillPathNV                                    := dglGetProcAddress('glIsPointInFillPathNV');
  glIsPointInStrokePathNV                                  := dglGetProcAddress('glIsPointInStrokePathNV');
  glGetPathLengthNV                                        := dglGetProcAddress('glGetPathLengthNV');
  glPointAlongPathNV                                       := dglGetProcAddress('glPointAlongPathNV');
  glMatrixLoad3x2fNV                                       := dglGetProcAddress('glMatrixLoad3x2fNV');
  glMatrixLoad3x3fNV                                       := dglGetProcAddress('glMatrixLoad3x3fNV');
  glMatrixLoadTranspose3x3fNV                              := dglGetProcAddress('glMatrixLoadTranspose3x3fNV');
  glMatrixMult3x2fNV                                       := dglGetProcAddress('glMatrixMult3x2fNV');
  glMatrixMult3x3fNV                                       := dglGetProcAddress('glMatrixMult3x3fNV');
  glMatrixMultTranspose3x3fNV                              := dglGetProcAddress('glMatrixMultTranspose3x3fNV');
  glStencilThenCoverFillPathNV                             := dglGetProcAddress('glStencilThenCoverFillPathNV');
  glStencilThenCoverStrokePathNV                           := dglGetProcAddress('glStencilThenCoverStrokePathNV');
  glStencilThenCoverFillPathInstancedNV                    := dglGetProcAddress('glStencilThenCoverFillPathInstancedNV');
  glStencilThenCoverStrokePathInstancedNV                  := dglGetProcAddress('glStencilThenCoverStrokePathInstancedNV');
  glPathGlyphIndexRangeNV                                  := dglGetProcAddress('glPathGlyphIndexRangeNV');
  glPathGlyphIndexArrayNV                                  := dglGetProcAddress('glPathGlyphIndexArrayNV');
  glPathMemoryGlyphIndexArrayNV                            := dglGetProcAddress('glPathMemoryGlyphIndexArrayNV');
  glProgramPathFragmentInputGenNV                          := dglGetProcAddress('glProgramPathFragmentInputGenNV');
  glGetProgramResourcefvNV                                 := dglGetProcAddress('glGetProgramResourcefvNV');
end;

procedure Read_GL_NV_read_buffer;
begin
  glReadBufferNV                                           := dglGetProcAddress('glReadBufferNV');
end;

procedure Read_GL_NV_viewport_array;
begin
  glViewportArrayvNV                                       := dglGetProcAddress('glViewportArrayvNV');
  glViewportIndexedfNV                                     := dglGetProcAddress('glViewportIndexedfNV');
  glViewportIndexedfvNV                                    := dglGetProcAddress('glViewportIndexedfvNV');
  glScissorArrayvNV                                        := dglGetProcAddress('glScissorArrayvNV');
  glScissorIndexedNV                                       := dglGetProcAddress('glScissorIndexedNV');
  glScissorIndexedvNV                                      := dglGetProcAddress('glScissorIndexedvNV');
  glDepthRangeArrayfvNV                                    := dglGetProcAddress('glDepthRangeArrayfvNV');
  glDepthRangeIndexedfNV                                   := dglGetProcAddress('glDepthRangeIndexedfNV');
  glGetFloati_vNV                                          := dglGetProcAddress('glGetFloati_vNV');
  glEnableiNV                                              := dglGetProcAddress('glEnableiNV');
  glDisableiNV                                             := dglGetProcAddress('glDisableiNV');
  glIsEnablediNV                                           := dglGetProcAddress('glIsEnablediNV');
end;

procedure Read_GL_QCOM_alpha_test;
begin
  glAlphaFuncQCOM                                          := dglGetProcAddress('glAlphaFuncQCOM');
end;

procedure Read_GL_QCOM_driver_control;
begin
  glGetDriverControlsQCOM                                  := dglGetProcAddress('glGetDriverControlsQCOM');
  glGetDriverControlStringQCOM                             := dglGetProcAddress('glGetDriverControlStringQCOM');
  glEnableDriverControlQCOM                                := dglGetProcAddress('glEnableDriverControlQCOM');
  glDisableDriverControlQCOM                               := dglGetProcAddress('glDisableDriverControlQCOM');
end;

procedure Read_GL_QCOM_extended_get;
begin
  glExtGetTexturesQCOM                                     := dglGetProcAddress('glExtGetTexturesQCOM');
  glExtGetBuffersQCOM                                      := dglGetProcAddress('glExtGetBuffersQCOM');
  glExtGetRenderbuffersQCOM                                := dglGetProcAddress('glExtGetRenderbuffersQCOM');
  glExtGetFramebuffersQCOM                                 := dglGetProcAddress('glExtGetFramebuffersQCOM');
  glExtGetTexLevelParameterivQCOM                          := dglGetProcAddress('glExtGetTexLevelParameterivQCOM');
  glExtTexObjectStateOverrideiQCOM                         := dglGetProcAddress('glExtTexObjectStateOverrideiQCOM');
  glExtGetTexSubImageQCOM                                  := dglGetProcAddress('glExtGetTexSubImageQCOM');
  glExtGetBufferPointervQCOM                               := dglGetProcAddress('glExtGetBufferPointervQCOM');
end;

procedure Read_GL_QCOM_extended_get2;
begin
  glExtGetShadersQCOM                                      := dglGetProcAddress('glExtGetShadersQCOM');
  glExtGetProgramsQCOM                                     := dglGetProcAddress('glExtGetProgramsQCOM');
  glExtIsProgramBinaryQCOM                                 := dglGetProcAddress('glExtIsProgramBinaryQCOM');
  glExtGetProgramBinarySourceQCOM                          := dglGetProcAddress('glExtGetProgramBinarySourceQCOM');
end;

procedure Read_GL_QCOM_tiled_rendering;
begin
  glStartTilingQCOM                                        := dglGetProcAddress('glStartTilingQCOM');
  glEndTilingQCOM                                          := dglGetProcAddress('glEndTilingQCOM');
end;

constructor EeglError.Create(const msg: string; const aErrorCode: EGLint);
begin
  inherited Create(msg);
  ErrorCode := aErrorCode;
end;

end.
