* added compiler defines to set used core version
[dglOpenGLES.git] / dglOpenGLES.pas
1 { ============================================================================
2
3        OpenGL 4.5 - Headertranslation
4        Version 4.5
5
6        Supported environments and targets :
7         - (Linux) FreePascal (1.9.3 and up)
8
9 ==============================================================================
10
11        Copyright (C) DGL-OpenGL-Portteam
12        All Rights Reserved
13
14        Obtained through:
15          - Delphi OpenGL Community(DGL)   - www.delphigl.com
16
17        Converted and maintained by DGL's OpenGL-Portteam :
18          - Bergmann89                     - http://www.bergmann89.de
19
20 ==============================================================================
21
22   You may retrieve the latest version of this file at the Delphi OpenGL
23   Community home page, located at http://www.delphigl.com/
24
25   The contents of this file are used with permission, subject to
26   the Mozilla Public License Version 1.1 (the "License"); you may
27   not use this file except in compliance with the License. You may
28   obtain a copy of the License at
29   http://www.mozilla.org/MPL/MPL-1.1.html
30
31   Software distributed under the License is distributed on an
32   "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
33   implied. See the License for the specific language governing
34   rights and limitations under the License.
35
36 ============================================================================== }
37
38 { enable OpenGL ES 1.1 Core functions  }
39 {$DEFINE OPENGLES_CORE_1_1}
40
41 { enable OpenGL ES 2.0 Core functions  }
42 {$DEFINE OPENGLES_CORE_2_0}
43
44 { enable OpenGL ES 3.0 Core functions  }
45 {$DEFINE OPENGLES_CORE_3_0}
46
47 { enable OpenGL ES 3.1 Core functions  }
48 {$DEFINE OPENGLES_CORE_3_1}
49
50 { enable all OpenGL ES extensions }
51 {$DEFINE OPENGLES_EXTENSIONS}
52
53 unit dglOpenGLES;
54
55 interface
56
57 {$IFDEF FPC}
58   {$MODE Delphi}
59 {$ENDIF}
60
61 // detecting Linux
62 {$IFDEF linux}          // Linux
63   {$DEFINE DGL_LINUX}
64 {$ENDIF}
65
66 //check if system is supported and set system dependent constants
67 uses
68   sysutils
69   {$IFDEF DGL_LINUX}
70   , dl
71   {$ENDIF}
72   ;
73
74 {$IFDEF DGL_LINUX}
75 const
76   LIBNAME_OPENGLES = 'libGLESv2.so';
77   LIBNAME_EGL      = 'libEGL.so';
78
79 {$ELSE}
80   {$ERROR 'unknown/unsupported system'}
81
82 {$ENDIF}
83
84 { ================================================== OpenGL ES ======================================================= }
85 type
86   { Types }
87   GLbyte      = Byte;
88   GLclampf    = Single;
89   GLfixed     = Integer;
90   GLclampx    = Integer;
91   GLshort     = ShortInt;
92   GLubyte     = Byte;
93   GLushort    = Word;
94   GLvoid      = Pointer;
95   GLint64     = Int64;
96   GLuint64    = UInt64;
97   GLenum      = Cardinal;
98   GLuint      = Cardinal;
99   GLchar      = AnsiChar;
100   GLbitfield  = Cardinal;
101   GLint       = Integer;
102   GLintptr    = GLint;
103   GLboolean   = ByteBool;
104   GLsizei     = Integer;
105   GLsizeiptr  = GLsizei;
106   GLfloat     = Single;
107   GLdouble    = Double;
108
109   { Pointers }
110   PGLbyte     = ^GLbyte;
111   PGLclampf   = ^GLclampf;
112   PGLfixed    = ^GLfixed;
113   PGLshort    = ^GLshort;
114   PGLubyte    = ^GLubyte;
115   PGLushort   = ^GLushort;
116   PGLvoid     = Pointer;
117   PPGLvoid    = ^PGLvoid;
118   PGLint64    = ^GLint64;
119   PGLuint64   = ^GLuint64;
120   PGLenum     = ^GLenum;
121   PGLuint     = ^GLuint;
122   PGLchar     = ^GLchar;
123   PPGLchar    = ^PGLChar;
124   PGLbitfield = ^GLbitfield;
125   PGLint      = ^GLint;
126   PGLboolean  = ^GLboolean;
127   PGLsizei    = ^GLsizei;
128   PGLfloat    = ^GLfloat;
129   PGLdouble   = ^GLdouble;
130
131   { Special }
132   GLsync = Pointer;
133
134   { Cutsom }
135   TGLvectorub2 = array[0..1] of GLubyte;
136   TGLvectorub3 = array[0..2] of GLubyte;
137   TGLvectorub4 = array[0..3] of GLubyte;
138
139   TGLvectori2 = array[0..1] of GLint;
140   TGLvectori3 = array[0..2] of GLint;
141   TGLvectori4 = array[0..3] of GLint;
142
143   TGLvectorui2 = array[0..1] of GLuint;
144   TGLvectorui3 = array[0..2] of GLuint;
145   TGLvectorui4 = array[0..3] of GLuint;
146
147   TGLvectorf2 = array[0..1] of GLfloat;
148   TGLvectorf3 = array[0..2] of GLfloat;
149   TGLvectorf4 = array[0..3] of GLfloat;
150
151   TGLvectord2 = array[0..1] of GLdouble;
152   TGLvectord3 = array[0..2] of GLdouble;
153   TGLvectord4 = array[0..3] of GLdouble;
154
155   TGLvectorp2 = array[0..1] of PGLvoid;
156   TGLvectorp3 = array[0..2] of PGLvoid;
157   TGLvectorp4 = array[0..3] of PGLvoid;
158
159 {$IFDEF OPENGLES_CORE_1_1}
160 const
161 { ============================================== OpenGL ES 1.1 ======================================================= }
162 { ClearBufferMask }
163   GL_DEPTH_BUFFER_BIT                               = $00000100;
164   GL_STENCIL_BUFFER_BIT                             = $00000400;
165   GL_COLOR_BUFFER_BIT                               = $00004000;
166
167 { Boolean }
168   GL_FALSE                                          = 0;
169   GL_TRUE                                           = 1;
170
171 { BeginMode }
172   GL_POINTS                                         = $0000;
173   GL_LINES                                          = $0001;
174   GL_LINE_LOOP                                      = $0002;
175   GL_LINE_STRIP                                     = $0003;
176   GL_TRIANGLES                                      = $0004;
177   GL_TRIANGLE_STRIP                                 = $0005;
178   GL_TRIANGLE_FAN                                   = $0006;
179
180 { AlphaFunction }
181   GL_NEVER                                          = $0200;
182   GL_LESS                                           = $0201;
183   GL_EQUAL                                          = $0202;
184   GL_LEQUAL                                         = $0203;
185   GL_GREATER                                        = $0204;
186   GL_NOTEQUAL                                       = $0205;
187   GL_GEQUAL                                         = $0206;
188   GL_ALWAYS                                         = $0207;
189
190 { BlendingFactorDest }
191   GL_ZERO                                           = 0;
192   GL_ONE                                            = 1;
193   GL_SRC_COLOR                                      = $0300;
194   GL_ONE_MINUS_SRC_COLOR                            = $0301;
195   GL_SRC_ALPHA                                      = $0302;
196   GL_ONE_MINUS_SRC_ALPHA                            = $0303;
197   GL_DST_ALPHA                                      = $0304;
198   GL_ONE_MINUS_DST_ALPHA                            = $0305;
199
200 { BlendingFactorSrc }
201 { GL_ZERO }
202 { GL_ONE }
203   GL_DST_COLOR                                      = $0306;
204   GL_ONE_MINUS_DST_COLOR                            = $0307;
205   GL_SRC_ALPHA_SATURATE                             = $0308;
206 { GL_SRC_ALPHA }
207 { GL_ONE_MINUS_SRC_ALPHA }
208 { GL_DST_ALPHA }
209 { GL_ONE_MINUS_DST_ALPHA }
210
211 { ClipPlaneName }
212   GL_CLIP_PLANE0                                    = $3000;
213   GL_CLIP_PLANE1                                    = $3001;
214   GL_CLIP_PLANE2                                    = $3002;
215   GL_CLIP_PLANE3                                    = $3003;
216   GL_CLIP_PLANE4                                    = $3004;
217   GL_CLIP_PLANE5                                    = $3005;
218
219 { ColorMaterialFace }
220 { GL_FRONT_AND_BACK }
221
222 { ColorMaterialParameter }
223 { GL_AMBIENT_AND_DIFFUSE }
224
225 { ColorPointerType }
226 { GL_UNSIGNED_BYTE }
227 { GL_FLOAT }
228 { GL_FIXED }
229
230 { CullFaceMode }
231   GL_FRONT                                          = $0404;
232   GL_BACK                                           = $0405;
233   GL_FRONT_AND_BACK                                 = $0408;
234
235 { DepthFunction }
236 { GL_NEVER }
237 { GL_LESS }
238 { GL_EQUAL }
239 { GL_LEQUAL }
240 { GL_GREATER }
241 { GL_NOTEQUAL }
242 { GL_GEQUAL }
243 { GL_ALWAYS }
244
245 { EnableCap }
246   GL_FOG                                            = $0B60;
247   GL_LIGHTING                                       = $0B50;
248   GL_TEXTURE_2D                                     = $0DE1;
249   GL_CULL_FACE                                      = $0B44;
250   GL_ALPHA_TEST                                     = $0BC0;
251   GL_BLEND                                          = $0BE2;
252   GL_COLOR_LOGIC_OP                                 = $0BF2;
253   GL_DITHER                                         = $0BD0;
254   GL_STENCIL_TEST                                   = $0B90;
255   GL_DEPTH_TEST                                     = $0B71;
256 { GL_LIGHT0 }
257 { GL_LIGHT1 }
258 { GL_LIGHT2 }
259 { GL_LIGHT3 }
260 { GL_LIGHT4 }
261 { GL_LIGHT5 }
262 { GL_LIGHT6 }
263 { GL_LIGHT7 }
264   GL_POINT_SMOOTH                                   = $0B10;
265   GL_LINE_SMOOTH                                    = $0B20;
266   GL_SCISSOR_TEST                                   = $0C11;
267   GL_COLOR_MATERIAL                                 = $0B57;
268   GL_NORMALIZE                                      = $0BA1;
269   GL_RESCALE_NORMAL                                 = $803A;
270   GL_POLYGON_OFFSET_FILL                            = $8037;
271   GL_VERTEX_ARRAY                                   = $8074;
272   GL_NORMAL_ARRAY                                   = $8075;
273   GL_COLOR_ARRAY                                    = $8076;
274   GL_TEXTURE_COORD_ARRAY                            = $8078;
275   GL_MULTISAMPLE                                    = $809D;
276   GL_SAMPLE_ALPHA_TO_COVERAGE                       = $809E;
277   GL_SAMPLE_ALPHA_TO_ONE                            = $809F;
278   GL_SAMPLE_COVERAGE                                = $80A0;
279
280 { ErrorCode }
281   GL_NO_ERROR                                       = 0;
282   GL_INVALID_ENUM                                   = $0500;
283   GL_INVALID_VALUE                                  = $0501;
284   GL_INVALID_OPERATION                              = $0502;
285   GL_STACK_OVERFLOW                                 = $0503;
286   GL_STACK_UNDERFLOW                                = $0504;
287   GL_OUT_OF_MEMORY                                  = $0505;
288
289 { FogMode }
290 { GL_LINEAR }
291   GL_EXP                                            = $0800;
292   GL_EXP2                                           = $0801;
293
294 { FogParameter }
295   GL_FOG_DENSITY                                    = $0B62;
296   GL_FOG_START                                      = $0B63;
297   GL_FOG_END                                        = $0B64;
298   GL_FOG_MODE                                       = $0B65;
299   GL_FOG_COLOR                                      = $0B66;
300
301 { FrontFaceDirection }
302   GL_CW                                             = $0900;
303   GL_CCW                                            = $0901;
304
305 { GetPName }
306   GL_CURRENT_COLOR                                  = $0B00;
307   GL_CURRENT_NORMAL                                 = $0B02;
308   GL_CURRENT_TEXTURE_COORDS                         = $0B03;
309   GL_POINT_SIZE                                     = $0B11;
310   GL_POINT_SIZE_MIN                                 = $8126;
311   GL_POINT_SIZE_MAX                                 = $8127;
312   GL_POINT_FADE_THRESHOLD_SIZE                      = $8128;
313   GL_POINT_DISTANCE_ATTENUATION                     = $8129;
314   GL_SMOOTH_POINT_SIZE_RANGE                        = $0B12;
315   GL_LINE_WIDTH                                     = $0B21;
316   GL_SMOOTH_LINE_WIDTH_RANGE                        = $0B22;
317   GL_ALIASED_POINT_SIZE_RANGE                       = $846D;
318   GL_ALIASED_LINE_WIDTH_RANGE                       = $846E;
319   GL_CULL_FACE_MODE                                 = $0B45;
320   GL_FRONT_FACE                                     = $0B46;
321   GL_SHADE_MODEL                                    = $0B54;
322   GL_DEPTH_RANGE                                    = $0B70;
323   GL_DEPTH_WRITEMASK                                = $0B72;
324   GL_DEPTH_CLEAR_VALUE                              = $0B73;
325   GL_DEPTH_FUNC                                     = $0B74;
326   GL_STENCIL_CLEAR_VALUE                            = $0B91;
327   GL_STENCIL_FUNC                                   = $0B92;
328   GL_STENCIL_VALUE_MASK                             = $0B93;
329   GL_STENCIL_FAIL                                   = $0B94;
330   GL_STENCIL_PASS_DEPTH_FAIL                        = $0B95;
331   GL_STENCIL_PASS_DEPTH_PASS                        = $0B96;
332   GL_STENCIL_REF                                    = $0B97;
333   GL_STENCIL_WRITEMASK                              = $0B98;
334   GL_MATRIX_MODE                                    = $0BA0;
335   GL_VIEWPORT                                       = $0BA2;
336   GL_MODELVIEW_STACK_DEPTH                          = $0BA3;
337   GL_PROJECTION_STACK_DEPTH                         = $0BA4;
338   GL_TEXTURE_STACK_DEPTH                            = $0BA5;
339   GL_MODELVIEW_MATRIX                               = $0BA6;
340   GL_PROJECTION_MATRIX                              = $0BA7;
341   GL_TEXTURE_MATRIX                                 = $0BA8;
342   GL_ALPHA_TEST_FUNC                                = $0BC1;
343   GL_ALPHA_TEST_REF                                 = $0BC2;
344   GL_BLEND_DST                                      = $0BE0;
345   GL_BLEND_SRC                                      = $0BE1;
346   GL_LOGIC_OP_MODE                                  = $0BF0;
347   GL_SCISSOR_BOX                                    = $0C10;
348   GL_COLOR_CLEAR_VALUE                              = $0C22;
349   GL_COLOR_WRITEMASK                                = $0C23;
350   GL_UNPACK_ALIGNMENT                               = $0CF5;
351   GL_PACK_ALIGNMENT                                 = $0D05;
352   GL_MAX_LIGHTS                                     = $0D31;
353   GL_MAX_CLIP_PLANES                                = $0D32;
354   GL_MAX_TEXTURE_SIZE                               = $0D33;
355   GL_MAX_MODELVIEW_STACK_DEPTH                      = $0D36;
356   GL_MAX_PROJECTION_STACK_DEPTH                     = $0D38;
357   GL_MAX_TEXTURE_STACK_DEPTH                        = $0D39;
358   GL_MAX_VIEWPORT_DIMS                              = $0D3A;
359   GL_MAX_TEXTURE_UNITS                              = $84E2;
360   GL_SUBPIXEL_BITS                                  = $0D50;
361   GL_RED_BITS                                       = $0D52;
362   GL_GREEN_BITS                                     = $0D53;
363   GL_BLUE_BITS                                      = $0D54;
364   GL_ALPHA_BITS                                     = $0D55;
365   GL_DEPTH_BITS                                     = $0D56;
366   GL_STENCIL_BITS                                   = $0D57;
367   GL_POLYGON_OFFSET_UNITS                           = $2A00;
368   GL_POLYGON_OFFSET_FACTOR                          = $8038;
369   GL_TEXTURE_BINDING_2D                             = $8069;
370   GL_VERTEX_ARRAY_SIZE                              = $807A;
371   GL_VERTEX_ARRAY_TYPE                              = $807B;
372   GL_VERTEX_ARRAY_STRIDE                            = $807C;
373   GL_NORMAL_ARRAY_TYPE                              = $807E;
374   GL_NORMAL_ARRAY_STRIDE                            = $807F;
375   GL_COLOR_ARRAY_SIZE                               = $8081;
376   GL_COLOR_ARRAY_TYPE                               = $8082;
377   GL_COLOR_ARRAY_STRIDE                             = $8083;
378   GL_TEXTURE_COORD_ARRAY_SIZE                       = $8088;
379   GL_TEXTURE_COORD_ARRAY_TYPE                       = $8089;
380   GL_TEXTURE_COORD_ARRAY_STRIDE                     = $808A;
381   GL_VERTEX_ARRAY_POINTER                           = $808E;
382   GL_NORMAL_ARRAY_POINTER                           = $808F;
383   GL_COLOR_ARRAY_POINTER                            = $8090;
384   GL_TEXTURE_COORD_ARRAY_POINTER                    = $8092;
385   GL_SAMPLE_BUFFERS                                 = $80A8;
386   GL_SAMPLES                                        = $80A9;
387   GL_SAMPLE_COVERAGE_VALUE                          = $80AA;
388   GL_SAMPLE_COVERAGE_INVERT                         = $80AB;
389
390 { GetTextureParameter }
391 { GL_TEXTURE_MAG_FILTER }
392 { GL_TEXTURE_MIN_FILTER }
393 { GL_TEXTURE_WRAP_S }
394 { GL_TEXTURE_WRAP_T }
395
396   GL_NUM_COMPRESSED_TEXTURE_FORMATS                 = $86A2;
397   GL_COMPRESSED_TEXTURE_FORMATS                     = $86A3;
398
399 { HintMode }
400   GL_DONT_CARE                                      = $1100;
401   GL_FASTEST                                        = $1101;
402   GL_NICEST                                         = $1102;
403
404 { HintTarget }
405   GL_PERSPECTIVE_CORRECTION_HINT                    = $0C50;
406   GL_POINT_SMOOTH_HINT                              = $0C51;
407   GL_LINE_SMOOTH_HINT                               = $0C52;
408   GL_FOG_HINT                                       = $0C54;
409   GL_GENERATE_MIPMAP_HINT                           = $8192;
410
411 { LightModelParameter }
412   GL_LIGHT_MODEL_AMBIENT                            = $0B53;
413   GL_LIGHT_MODEL_TWO_SIDE                           = $0B52;
414
415 { LightParameter }
416   GL_AMBIENT                                        = $1200;
417   GL_DIFFUSE                                        = $1201;
418   GL_SPECULAR                                       = $1202;
419   GL_POSITION                                       = $1203;
420   GL_SPOT_DIRECTION                                 = $1204;
421   GL_SPOT_EXPONENT                                  = $1205;
422   GL_SPOT_CUTOFF                                    = $1206;
423   GL_CONSTANT_ATTENUATION                           = $1207;
424   GL_LINEAR_ATTENUATION                             = $1208;
425   GL_QUADRATIC_ATTENUATION                          = $1209;
426
427 { DataType }
428   GL_BYTE                                           = $1400;
429   GL_UNSIGNED_BYTE                                  = $1401;
430   GL_SHORT                                          = $1402;
431   GL_UNSIGNED_SHORT                                 = $1403;
432   GL_FLOAT                                          = $1406;
433   GL_FIXED                                          = $140C;
434
435 { LogicOp }
436   GL_CLEAR                                          = $1500;
437   GL_AND                                            = $1501;
438   GL_AND_REVERSE                                    = $1502;
439   GL_COPY                                           = $1503;
440   GL_AND_INVERTED                                   = $1504;
441   GL_NOOP                                           = $1505;
442   GL_XOR                                            = $1506;
443   GL_OR                                             = $1507;
444   GL_NOR                                            = $1508;
445   GL_EQUIV                                          = $1509;
446   GL_INVERT                                         = $150A;
447   GL_OR_REVERSE                                     = $150B;
448   GL_COPY_INVERTED                                  = $150C;
449   GL_OR_INVERTED                                    = $150D;
450   GL_NAND                                           = $150E;
451   GL_SET                                            = $150F;
452
453 { MaterialFace }
454 { GL_FRONT_AND_BACK }
455
456 { MaterialParameter }
457   GL_EMISSION                                       = $1600;
458   GL_SHININESS                                      = $1601;
459   GL_AMBIENT_AND_DIFFUSE                            = $1602;
460 { GL_AMBIENT }
461 { GL_DIFFUSE }
462 { GL_SPECULAR }
463
464 { MatrixMode }
465   GL_MODELVIEW                                      = $1700;
466   GL_PROJECTION                                     = $1701;
467   GL_TEXTURE                                        = $1702;
468
469 { NormalPointerType }
470 { GL_BYTE }
471 { GL_SHORT }
472 { GL_FLOAT }
473 { GL_FIXED }
474
475 { PixelFormat }
476   GL_ALPHA                                          = $1906;
477   GL_RGB                                            = $1907;
478   GL_RGBA                                           = $1908;
479   GL_LUMINANCE                                      = $1909;
480   GL_LUMINANCE_ALPHA                                = $190A;
481
482 { PixelType }
483 { GL_UNSIGNED_BYTE }
484   GL_UNSIGNED_SHORT_4_4_4_4                         = $8033;
485   GL_UNSIGNED_SHORT_5_5_5_1                         = $8034;
486   GL_UNSIGNED_SHORT_5_6_5                           = $8363;
487
488 { ShadingModel }
489   GL_FLAT                                           = $1D00;
490   GL_SMOOTH                                         = $1D01;
491
492 { StencilFunction }
493 { GL_NEVER }
494 { GL_LESS }
495 { GL_EQUAL }
496 { GL_LEQUAL }
497 { GL_GREATER }
498 { GL_NOTEQUAL }
499 { GL_GEQUAL }
500 { GL_ALWAYS }
501
502 { StencilOp }
503 { GL_ZERO }
504   GL_KEEP                                           = $1E00;
505   GL_REPLACE                                        = $1E01;
506   GL_INCR                                           = $1E02;
507   GL_DECR                                           = $1E03;
508 { GL_INVERT }
509
510 { StringName }
511   GL_VENDOR                                         = $1F00;
512   GL_RENDERER                                       = $1F01;
513   GL_VERSION                                        = $1F02;
514   GL_EXTENSIONS                                     = $1F03;
515
516 { TexCoordPointerType }
517 { GL_SHORT }
518 { GL_FLOAT }
519 { GL_FIXED }
520 { GL_BYTE }
521
522 { TextureEnvMode }
523   GL_MODULATE                                       = $2100;
524   GL_DECAL                                          = $2101;
525 { GL_BLEND }
526   GL_ADD                                            = $0104;
527 { GL_REPLACE }
528
529 { TextureEnvParameter }
530   GL_TEXTURE_ENV_MODE                               = $2200;
531   GL_TEXTURE_ENV_COLOR                              = $2201;
532
533 { TextureEnvTarget }
534   GL_TEXTURE_ENV                                    = $2300;
535
536 { TextureMagFilter }
537   GL_NEAREST                                        = $2600;
538   GL_LINEAR                                         = $2601;
539
540 { TextureMinFilter }
541 { GL_NEAREST }
542 { GL_LINEAR }
543   GL_NEAREST_MIPMAP_NEAREST                         = $2700;
544   GL_LINEAR_MIPMAP_NEAREST                          = $2701;
545   GL_NEAREST_MIPMAP_LINEAR                          = $2702;
546   GL_LINEAR_MIPMAP_LINEAR                           = $2703;
547
548 { TextureParameterName }
549   GL_TEXTURE_MAG_FILTER                             = $2800;
550   GL_TEXTURE_MIN_FILTER                             = $2801;
551   GL_TEXTURE_WRAP_S                                 = $2802;
552   GL_TEXTURE_WRAP_T                                 = $2803;
553   GL_GENERATE_MIPMAP                                = $8191;
554
555 { TextureTarget }
556 { GL_TEXTURE_2D }
557
558 { TextureUnit }
559   GL_TEXTURE0                                       = $84C0;
560   GL_TEXTURE1                                       = $84C1;
561   GL_TEXTURE2                                       = $84C2;
562   GL_TEXTURE3                                       = $84C3;
563   GL_TEXTURE4                                       = $84C4;
564   GL_TEXTURE5                                       = $84C5;
565   GL_TEXTURE6                                       = $84C6;
566   GL_TEXTURE7                                       = $84C7;
567   GL_TEXTURE8                                       = $84C8;
568   GL_TEXTURE9                                       = $84C9;
569   GL_TEXTURE10                                      = $84CA;
570   GL_TEXTURE11                                      = $84CB;
571   GL_TEXTURE12                                      = $84CC;
572   GL_TEXTURE13                                      = $84CD;
573   GL_TEXTURE14                                      = $84CE;
574   GL_TEXTURE15                                      = $84CF;
575   GL_TEXTURE16                                      = $84D0;
576   GL_TEXTURE17                                      = $84D1;
577   GL_TEXTURE18                                      = $84D2;
578   GL_TEXTURE19                                      = $84D3;
579   GL_TEXTURE20                                      = $84D4;
580   GL_TEXTURE21                                      = $84D5;
581   GL_TEXTURE22                                      = $84D6;
582   GL_TEXTURE23                                      = $84D7;
583   GL_TEXTURE24                                      = $84D8;
584   GL_TEXTURE25                                      = $84D9;
585   GL_TEXTURE26                                      = $84DA;
586   GL_TEXTURE27                                      = $84DB;
587   GL_TEXTURE28                                      = $84DC;
588   GL_TEXTURE29                                      = $84DD;
589   GL_TEXTURE30                                      = $84DE;
590   GL_TEXTURE31                                      = $84DF;
591   GL_ACTIVE_TEXTURE                                 = $84E0;
592   GL_CLIENT_ACTIVE_TEXTURE                          = $84E1;
593
594 { TextureWrapMode }
595   GL_REPEAT                                         = $2901;
596   GL_CLAMP_TO_EDGE                                  = $812F;
597
598 { VertexPointerType }
599 { GL_SHORT }
600 { GL_FLOAT }
601 { GL_FIXED }
602 { GL_BYTE }
603
604 { LightName }
605   GL_LIGHT0                                         = $4000;
606   GL_LIGHT1                                         = $4001;
607   GL_LIGHT2                                         = $4002;
608   GL_LIGHT3                                         = $4003;
609   GL_LIGHT4                                         = $4004;
610   GL_LIGHT5                                         = $4005;
611   GL_LIGHT6                                         = $4006;
612   GL_LIGHT7                                         = $4007;
613
614 { Buffer Objects }
615   GL_ARRAY_BUFFER                                   = $8892;
616   GL_ELEMENT_ARRAY_BUFFER                           = $8893;
617
618   GL_ARRAY_BUFFER_BINDING                           = $8894;
619   GL_ELEMENT_ARRAY_BUFFER_BINDING                   = $8895;
620   GL_VERTEX_ARRAY_BUFFER_BINDING                    = $8896;
621   GL_NORMAL_ARRAY_BUFFER_BINDING                    = $8897;
622   GL_COLOR_ARRAY_BUFFER_BINDING                     = $8898;
623   GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING             = $889A;
624
625   GL_STATIC_DRAW                                    = $88E4;
626   GL_DYNAMIC_DRAW                                   = $88E8;
627
628   GL_BUFFER_SIZE                                    = $8764;
629   GL_BUFFER_USAGE                                   = $8765;
630
631 { Texture combine + dot3 }
632   GL_SUBTRACT                                       = $84E7;
633   GL_COMBINE                                        = $8570;
634   GL_COMBINE_RGB                                    = $8571;
635   GL_COMBINE_ALPHA                                  = $8572;
636   GL_RGB_SCALE                                      = $8573;
637   GL_ADD_SIGNED                                     = $8574;
638   GL_INTERPOLATE                                    = $8575;
639   GL_CONSTANT                                       = $8576;
640   GL_PRIMARY_COLOR                                  = $8577;
641   GL_PREVIOUS                                       = $8578;
642   GL_OPERAND0_RGB                                   = $8590;
643   GL_OPERAND1_RGB                                   = $8591;
644   GL_OPERAND2_RGB                                   = $8592;
645   GL_OPERAND0_ALPHA                                 = $8598;
646   GL_OPERAND1_ALPHA                                 = $8599;
647   GL_OPERAND2_ALPHA                                 = $859A;
648
649   GL_ALPHA_SCALE                                    = $0D1C;
650
651   GL_SRC0_RGB                                       = $8580;
652   GL_SRC1_RGB                                       = $8581;
653   GL_SRC2_RGB                                       = $8582;
654   GL_SRC0_ALPHA                                     = $8588;
655   GL_SRC1_ALPHA                                     = $8589;
656   GL_SRC2_ALPHA                                     = $858A;
657
658   GL_DOT3_RGB                                       = $86AE;
659   GL_DOT3_RGBA                                      = $86AF;
660 {$ENDIF}
661
662 {$IFDEF OPENGLES_CORE_2_0}
663 const
664 { ============================================== OpenGL ES 2.0 ======================================================= }
665 { BlendEquationSeparate }
666   GL_FUNC_ADD                                       = $8006;
667   GL_BLEND_EQUATION                                 = $8009;
668   GL_BLEND_EQUATION_RGB                             = $8009;    // same as BLEND_EQUATION
669   GL_BLEND_EQUATION_ALPHA                           = $883D;
670
671 { BlendSubtract }
672   GL_FUNC_SUBTRACT                                  = $800A;
673   GL_FUNC_REVERSE_SUBTRACT                          = $800B;
674
675 { Separate Blend Functions }
676   GL_BLEND_DST_RGB                                  = $80C8;
677   GL_BLEND_SRC_RGB                                  = $80C9;
678   GL_BLEND_DST_ALPHA                                = $80CA;
679   GL_BLEND_SRC_ALPHA                                = $80CB;
680   GL_CONSTANT_COLOR                                 = $8001;
681   GL_ONE_MINUS_CONSTANT_COLOR                       = $8002;
682   GL_CONSTANT_ALPHA                                 = $8003;
683   GL_ONE_MINUS_CONSTANT_ALPHA                       = $8004;
684   GL_BLEND_COLOR                                    = $8005;
685
686 { Buffer Objects }
687   GL_STREAM_DRAW                                    = $88E0;
688   GL_CURRENT_VERTEX_ATTRIB                          = $8626;
689
690 { GetPName }
691   GL_STENCIL_BACK_FUNC                              = $8800;
692   GL_STENCIL_BACK_FAIL                              = $8801;
693   GL_STENCIL_BACK_PASS_DEPTH_FAIL                   = $8802;
694   GL_STENCIL_BACK_PASS_DEPTH_PASS                   = $8803;
695   GL_STENCIL_BACK_REF                               = $8CA3;
696   GL_STENCIL_BACK_VALUE_MASK                        = $8CA4;
697   GL_STENCIL_BACK_WRITEMASK                         = $8CA5;
698
699 { DataType }
700   GL_INT                                            = $1404;
701   GL_UNSIGNED_INT                                   = $1405;
702
703 { PixelFormat }
704   GL_DEPTH_COMPONENT                                = $1902;
705
706 { Shaders }
707   GL_FRAGMENT_SHADER                                = $8B30;
708   GL_VERTEX_SHADER                                  = $8B31;
709   GL_MAX_VERTEX_ATTRIBS                             = $8869;
710   GL_MAX_VERTEX_UNIFORM_VECTORS                     = $8DFB;
711   GL_MAX_VARYING_VECTORS                            = $8DFC;
712   GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS               = $8B4D;
713   GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS                 = $8B4C;
714   GL_MAX_TEXTURE_IMAGE_UNITS                        = $8872;
715   GL_MAX_FRAGMENT_UNIFORM_VECTORS                   = $8DFD;
716   GL_SHADER_TYPE                                    = $8B4F;
717   GL_DELETE_STATUS                                  = $8B80;
718   GL_LINK_STATUS                                    = $8B82;
719   GL_VALIDATE_STATUS                                = $8B83;
720   GL_ATTACHED_SHADERS                               = $8B85;
721   GL_ACTIVE_UNIFORMS                                = $8B86;
722   GL_ACTIVE_UNIFORM_MAX_LENGTH                      = $8B87;
723   GL_ACTIVE_ATTRIBUTES                              = $8B89;
724   GL_ACTIVE_ATTRIBUTE_MAX_LENGTH                    = $8B8A;
725   GL_SHADING_LANGUAGE_VERSION                       = $8B8C;
726   GL_CURRENT_PROGRAM                                = $8B8D;
727
728 { StencilOp }
729   GL_INCR_WRAP                                      = $8507;
730   GL_DECR_WRAP                                      = $8508;
731
732 { TextureTarget }
733   GL_TEXTURE_CUBE_MAP                               = $8513;
734   GL_TEXTURE_BINDING_CUBE_MAP                       = $8514;
735   GL_TEXTURE_CUBE_MAP_POSITIVE_X                    = $8515;
736   GL_TEXTURE_CUBE_MAP_NEGATIVE_X                    = $8516;
737   GL_TEXTURE_CUBE_MAP_POSITIVE_Y                    = $8517;
738   GL_TEXTURE_CUBE_MAP_NEGATIVE_Y                    = $8518;
739   GL_TEXTURE_CUBE_MAP_POSITIVE_Z                    = $8519;
740   GL_TEXTURE_CUBE_MAP_NEGATIVE_Z                    = $851A;
741   GL_MAX_CUBE_MAP_TEXTURE_SIZE                      = $851C;
742
743 { TextureWrapMode }
744   GL_MIRRORED_REPEAT                                = $8370;
745
746 { Uniform Types }
747   GL_FLOAT_VEC2                                     = $8B50;
748   GL_FLOAT_VEC3                                     = $8B51;
749   GL_FLOAT_VEC4                                     = $8B52;
750   GL_INT_VEC2                                       = $8B53;
751   GL_INT_VEC3                                       = $8B54;
752   GL_INT_VEC4                                       = $8B55;
753   GL_BOOL                                           = $8B56;
754   GL_BOOL_VEC2                                      = $8B57;
755   GL_BOOL_VEC3                                      = $8B58;
756   GL_BOOL_VEC4                                      = $8B59;
757   GL_FLOAT_MAT2                                     = $8B5A;
758   GL_FLOAT_MAT3                                     = $8B5B;
759   GL_FLOAT_MAT4                                     = $8B5C;
760   GL_SAMPLER_2D                                     = $8B5E;
761   GL_SAMPLER_CUBE                                   = $8B60;
762
763 { Vertex Arrays }
764   GL_VERTEX_ATTRIB_ARRAY_ENABLED                    = $8622;
765   GL_VERTEX_ATTRIB_ARRAY_SIZE                       = $8623;
766   GL_VERTEX_ATTRIB_ARRAY_STRIDE                     = $8624;
767   GL_VERTEX_ATTRIB_ARRAY_TYPE                       = $8625;
768   GL_VERTEX_ATTRIB_ARRAY_NORMALIZED                 = $886A;
769   GL_VERTEX_ATTRIB_ARRAY_POINTER                    = $8645;
770   GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING             = $889F;
771
772 { Read Format }
773   GL_IMPLEMENTATION_COLOR_READ_TYPE                 = $8B9A;
774   GL_IMPLEMENTATION_COLOR_READ_FORMAT               = $8B9B;
775
776 { Shader Source }
777   GL_COMPILE_STATUS                                 = $8B81;
778   GL_INFO_LOG_LENGTH                                = $8B84;
779   GL_SHADER_SOURCE_LENGTH                           = $8B88;
780   GL_SHADER_COMPILER                                = $8DFA;
781
782 { Shader Binary }
783   GL_SHADER_BINARY_FORMATS                          = $8DF8;
784   GL_NUM_SHADER_BINARY_FORMATS                      = $8DF9;
785
786 { Shader Precision-Specified Types }
787   GL_LOW_FLOAT                                      = $8DF0;
788   GL_MEDIUM_FLOAT                                   = $8DF1;
789   GL_HIGH_FLOAT                                     = $8DF2;
790   GL_LOW_INT                                        = $8DF3;
791   GL_MEDIUM_INT                                     = $8DF4;
792   GL_HIGH_INT                                       = $8DF5;
793
794 { Framebuffer Object. }
795   GL_FRAMEBUFFER                                    = $8D40;
796   GL_RENDERBUFFER                                   = $8D41;
797
798   GL_RGBA4                                          = $8056;
799   GL_RGB5_A1                                        = $8057;
800   GL_RGB565                                         = $8D62;
801   GL_DEPTH_COMPONENT16                              = $81A5;
802   GL_STENCIL_INDEX                                  = $1901;
803   GL_STENCIL_INDEX8                                 = $8D48;
804
805   GL_RENDERBUFFER_WIDTH                             = $8D42;
806   GL_RENDERBUFFER_HEIGHT                            = $8D43;
807   GL_RENDERBUFFER_INTERNAL_FORMAT                   = $8D44;
808   GL_RENDERBUFFER_RED_SIZE                          = $8D50;
809   GL_RENDERBUFFER_GREEN_SIZE                        = $8D51;
810   GL_RENDERBUFFER_BLUE_SIZE                         = $8D52;
811   GL_RENDERBUFFER_ALPHA_SIZE                        = $8D53;
812   GL_RENDERBUFFER_DEPTH_SIZE                        = $8D54;
813   GL_RENDERBUFFER_STENCIL_SIZE                      = $8D55;
814
815   GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE             = $8CD0;
816   GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME             = $8CD1;
817   GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL           = $8CD2;
818   GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE   = $8CD3;
819
820   GL_COLOR_ATTACHMENT0                              = $8CE0;
821   GL_DEPTH_ATTACHMENT                               = $8D00;
822   GL_STENCIL_ATTACHMENT                             = $8D20;
823
824   GL_NONE                                           = 0;
825
826   GL_FRAMEBUFFER_COMPLETE                           = $8CD5;
827   GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT              = $8CD6;
828   GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT      = $8CD7;
829   GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS              = $8CD9;
830   GL_FRAMEBUFFER_UNSUPPORTED                        = $8CDD;
831
832   GL_FRAMEBUFFER_BINDING                            = $8CA6;
833   GL_RENDERBUFFER_BINDING                           = $8CA7;
834   GL_MAX_RENDERBUFFER_SIZE                          = $84E8;
835
836   GL_INVALID_FRAMEBUFFER_OPERATION                  = $0506;
837 {$ENDIF}
838
839 {$IFDEF OPENGLES_CORE_3_0}
840 const
841 { ============================================== OpenGL ES 3.0 ======================================================= }
842   GL_READ_BUFFER                                    = $0C02;
843   GL_UNPACK_ROW_LENGTH                              = $0CF2;
844   GL_UNPACK_SKIP_ROWS                               = $0CF3;
845   GL_UNPACK_SKIP_PIXELS                             = $0CF4;
846   GL_PACK_ROW_LENGTH                                = $0D02;
847   GL_PACK_SKIP_ROWS                                 = $0D03;
848   GL_PACK_SKIP_PIXELS                               = $0D04;
849   GL_COLOR                                          = $1800;
850   GL_DEPTH                                          = $1801;
851   GL_STENCIL                                        = $1802;
852   GL_RED                                            = $1903;
853   GL_RGB8                                           = $8051;
854   GL_RGBA8                                          = $8058;
855   GL_RGB10_A2                                       = $8059;
856   GL_TEXTURE_BINDING_3D                             = $806A;
857   GL_UNPACK_SKIP_IMAGES                             = $806D;
858   GL_UNPACK_IMAGE_HEIGHT                            = $806E;
859   GL_TEXTURE_3D                                     = $806F;
860   GL_TEXTURE_WRAP_R                                 = $8072;
861   GL_MAX_3D_TEXTURE_SIZE                            = $8073;
862   GL_UNSIGNED_INT_2_10_10_10_REV                    = $8368;
863   GL_MAX_ELEMENTS_VERTICES                          = $80E8;
864   GL_MAX_ELEMENTS_INDICES                           = $80E9;
865   GL_TEXTURE_MIN_LOD                                = $813A;
866   GL_TEXTURE_MAX_LOD                                = $813B;
867   GL_TEXTURE_BASE_LEVEL                             = $813C;
868   GL_TEXTURE_MAX_LEVEL                              = $813D;
869   GL_MIN                                            = $8007;
870   GL_MAX                                            = $8008;
871   GL_DEPTH_COMPONENT24                              = $81A6;
872   GL_MAX_TEXTURE_LOD_BIAS                           = $84FD;
873   GL_TEXTURE_COMPARE_MODE                           = $884C;
874   GL_TEXTURE_COMPARE_FUNC                           = $884D;
875   GL_CURRENT_QUERY                                  = $8865;
876   GL_QUERY_RESULT                                   = $8866;
877   GL_QUERY_RESULT_AVAILABLE                         = $8867;
878   GL_BUFFER_MAPPED                                  = $88BC;
879   GL_BUFFER_MAP_POINTER                             = $88BD;
880   GL_STREAM_READ                                    = $88E1;
881   GL_STREAM_COPY                                    = $88E2;
882   GL_STATIC_READ                                    = $88E5;
883   GL_STATIC_COPY                                    = $88E6;
884   GL_DYNAMIC_READ                                   = $88E9;
885   GL_DYNAMIC_COPY                                   = $88EA;
886   GL_MAX_DRAW_BUFFERS                               = $8824;
887   GL_DRAW_BUFFER0                                   = $8825;
888   GL_DRAW_BUFFER1                                   = $8826;
889   GL_DRAW_BUFFER2                                   = $8827;
890   GL_DRAW_BUFFER3                                   = $8828;
891   GL_DRAW_BUFFER4                                   = $8829;
892   GL_DRAW_BUFFER5                                   = $882A;
893   GL_DRAW_BUFFER6                                   = $882B;
894   GL_DRAW_BUFFER7                                   = $882C;
895   GL_DRAW_BUFFER8                                   = $882D;
896   GL_DRAW_BUFFER9                                   = $882E;
897   GL_DRAW_BUFFER10                                  = $882F;
898   GL_DRAW_BUFFER11                                  = $8830;
899   GL_DRAW_BUFFER12                                  = $8831;
900   GL_DRAW_BUFFER13                                  = $8832;
901   GL_DRAW_BUFFER14                                  = $8833;
902   GL_DRAW_BUFFER15                                  = $8834;
903   GL_MAX_FRAGMENT_UNIFORM_COMPONENTS                = $8B49;
904   GL_MAX_VERTEX_UNIFORM_COMPONENTS                  = $8B4A;
905   GL_SAMPLER_3D                                     = $8B5F;
906   GL_SAMPLER_2D_SHADOW                              = $8B62;
907   GL_FRAGMENT_SHADER_DERIVATIVE_HINT                = $8B8B;
908   GL_PIXEL_PACK_BUFFER                              = $88EB;
909   GL_PIXEL_UNPACK_BUFFER                            = $88EC;
910   GL_PIXEL_PACK_BUFFER_BINDING                      = $88ED;
911   GL_PIXEL_UNPACK_BUFFER_BINDING                    = $88EF;
912   GL_FLOAT_MAT2x3                                   = $8B65;
913   GL_FLOAT_MAT2x4                                   = $8B66;
914   GL_FLOAT_MAT3x2                                   = $8B67;
915   GL_FLOAT_MAT3x4                                   = $8B68;
916   GL_FLOAT_MAT4x2                                   = $8B69;
917   GL_FLOAT_MAT4x3                                   = $8B6A;
918   GL_SRGB                                           = $8C40;
919   GL_SRGB8                                          = $8C41;
920   GL_SRGB8_ALPHA8                                   = $8C43;
921   GL_COMPARE_REF_TO_TEXTURE                         = $884E;
922   GL_MAJOR_VERSION                                  = $821B;
923   GL_MINOR_VERSION                                  = $821C;
924   GL_NUM_EXTENSIONS                                 = $821D;
925   GL_RGBA32F                                        = $8814;
926   GL_RGB32F                                         = $8815;
927   GL_RGBA16F                                        = $881A;
928   GL_RGB16F                                         = $881B;
929   GL_VERTEX_ATTRIB_ARRAY_INTEGER                    = $88FD;
930   GL_MAX_ARRAY_TEXTURE_LAYERS                       = $88FF;
931   GL_MIN_PROGRAM_TEXEL_OFFSET                       = $8904;
932   GL_MAX_PROGRAM_TEXEL_OFFSET                       = $8905;
933   GL_MAX_VARYING_COMPONENTS                         = $8B4B;
934   GL_TEXTURE_2D_ARRAY                               = $8C1A;
935   GL_TEXTURE_BINDING_2D_ARRAY                       = $8C1D;
936   GL_R11F_G11F_B10F                                 = $8C3A;
937   GL_UNSIGNED_INT_10F_11F_11F_REV                   = $8C3B;
938   GL_RGB9_E5                                        = $8C3D;
939   GL_UNSIGNED_INT_5_9_9_9_REV                       = $8C3E;
940   GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH          = $8C76;
941   GL_TRANSFORM_FEEDBACK_BUFFER_MODE                 = $8C7F;
942   GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS     = $8C80;
943   GL_TRANSFORM_FEEDBACK_VARYINGS                    = $8C83;
944   GL_TRANSFORM_FEEDBACK_BUFFER_START                = $8C84;
945   GL_TRANSFORM_FEEDBACK_BUFFER_SIZE                 = $8C85;
946   GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN          = $8C88;
947   GL_RASTERIZER_DISCARD                             = $8C89;
948   GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS  = $8C8A;
949   GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS        = $8C8B;
950   GL_INTERLEAVED_ATTRIBS                            = $8C8C;
951   GL_SEPARATE_ATTRIBS                               = $8C8D;
952   GL_TRANSFORM_FEEDBACK_BUFFER                      = $8C8E;
953   GL_TRANSFORM_FEEDBACK_BUFFER_BINDING              = $8C8F;
954   GL_RGBA32UI                                       = $8D70;
955   GL_RGB32UI                                        = $8D71;
956   GL_RGBA16UI                                       = $8D76;
957   GL_RGB16UI                                        = $8D77;
958   GL_RGBA8UI                                        = $8D7C;
959   GL_RGB8UI                                         = $8D7D;
960   GL_RGBA32I                                        = $8D82;
961   GL_RGB32I                                         = $8D83;
962   GL_RGBA16I                                        = $8D88;
963   GL_RGB16I                                         = $8D89;
964   GL_RGBA8I                                         = $8D8E;
965   GL_RGB8I                                          = $8D8F;
966   GL_RED_INTEGER                                    = $8D94;
967   GL_RGB_INTEGER                                    = $8D98;
968   GL_RGBA_INTEGER                                   = $8D99;
969   GL_SAMPLER_2D_ARRAY                               = $8DC1;
970   GL_SAMPLER_2D_ARRAY_SHADOW                        = $8DC4;
971   GL_SAMPLER_CUBE_SHADOW                            = $8DC5;
972   GL_UNSIGNED_INT_VEC2                              = $8DC6;
973   GL_UNSIGNED_INT_VEC3                              = $8DC7;
974   GL_UNSIGNED_INT_VEC4                              = $8DC8;
975   GL_INT_SAMPLER_2D                                 = $8DCA;
976   GL_INT_SAMPLER_3D                                 = $8DCB;
977   GL_INT_SAMPLER_CUBE                               = $8DCC;
978   GL_INT_SAMPLER_2D_ARRAY                           = $8DCF;
979   GL_UNSIGNED_INT_SAMPLER_2D                        = $8DD2;
980   GL_UNSIGNED_INT_SAMPLER_3D                        = $8DD3;
981   GL_UNSIGNED_INT_SAMPLER_CUBE                      = $8DD4;
982   GL_UNSIGNED_INT_SAMPLER_2D_ARRAY                  = $8DD7;
983   GL_BUFFER_ACCESS_FLAGS                            = $911F;
984   GL_BUFFER_MAP_LENGTH                              = $9120;
985   GL_BUFFER_MAP_OFFSET                              = $9121;
986   GL_DEPTH_COMPONENT32F                             = $8CAC;
987   GL_DEPTH32F_STENCIL8                              = $8CAD;
988   GL_FLOAT_32_UNSIGNED_INT_24_8_REV                 = $8DAD;
989   GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING          = $8210;
990   GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE          = $8211;
991   GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE                = $8212;
992   GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE              = $8213;
993   GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE               = $8214;
994   GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE              = $8215;
995   GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE              = $8216;
996   GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE            = $8217;
997   GL_FRAMEBUFFER_DEFAULT                            = $8218;
998   GL_FRAMEBUFFER_UNDEFINED                          = $8219;
999   GL_DEPTH_STENCIL_ATTACHMENT                       = $821A;
1000   GL_DEPTH_STENCIL                                  = $84F9;
1001   GL_UNSIGNED_INT_24_8                              = $84FA;
1002   GL_DEPTH24_STENCIL8                               = $88F0;
1003   GL_UNSIGNED_NORMALIZED                            = $8C17;
1004   GL_DRAW_FRAMEBUFFER_BINDING                       = $8CA6;
1005   GL_READ_FRAMEBUFFER                               = $8CA8;
1006   GL_DRAW_FRAMEBUFFER                               = $8CA9;
1007   GL_READ_FRAMEBUFFER_BINDING                       = $8CAA;
1008   GL_RENDERBUFFER_SAMPLES                           = $8CAB;
1009   GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER           = $8CD4;
1010   GL_MAX_COLOR_ATTACHMENTS                          = $8CDF;
1011   GL_COLOR_ATTACHMENT1                              = $8CE1;
1012   GL_COLOR_ATTACHMENT2                              = $8CE2;
1013   GL_COLOR_ATTACHMENT3                              = $8CE3;
1014   GL_COLOR_ATTACHMENT4                              = $8CE4;
1015   GL_COLOR_ATTACHMENT5                              = $8CE5;
1016   GL_COLOR_ATTACHMENT6                              = $8CE6;
1017   GL_COLOR_ATTACHMENT7                              = $8CE7;
1018   GL_COLOR_ATTACHMENT8                              = $8CE8;
1019   GL_COLOR_ATTACHMENT9                              = $8CE9;
1020   GL_COLOR_ATTACHMENT10                             = $8CEA;
1021   GL_COLOR_ATTACHMENT11                             = $8CEB;
1022   GL_COLOR_ATTACHMENT12                             = $8CEC;
1023   GL_COLOR_ATTACHMENT13                             = $8CED;
1024   GL_COLOR_ATTACHMENT14                             = $8CEE;
1025   GL_COLOR_ATTACHMENT15                             = $8CEF;
1026   GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE             = $8D56;
1027   GL_MAX_SAMPLES                                    = $8D57;
1028   GL_HALF_FLOAT                                     = $140B;
1029   GL_MAP_READ_BIT                                   = $0001;
1030   GL_MAP_WRITE_BIT                                  = $0002;
1031   GL_MAP_INVALIDATE_RANGE_BIT                       = $0004;
1032   GL_MAP_INVALIDATE_BUFFER_BIT                      = $0008;
1033   GL_MAP_FLUSH_EXPLICIT_BIT                         = $0010;
1034   GL_MAP_UNSYNCHRONIZED_BIT                         = $0020;
1035   GL_RG                                             = $8227;
1036   GL_RG_INTEGER                                     = $8228;
1037   GL_R8                                             = $8229;
1038   GL_RG8                                            = $822B;
1039   GL_R16F                                           = $822D;
1040   GL_R32F                                           = $822E;
1041   GL_RG16F                                          = $822F;
1042   GL_RG32F                                          = $8230;
1043   GL_R8I                                            = $8231;
1044   GL_R8UI                                           = $8232;
1045   GL_R16I                                           = $8233;
1046   GL_R16UI                                          = $8234;
1047   GL_R32I                                           = $8235;
1048   GL_R32UI                                          = $8236;
1049   GL_RG8I                                           = $8237;
1050   GL_RG8UI                                          = $8238;
1051   GL_RG16I                                          = $8239;
1052   GL_RG16UI                                         = $823A;
1053   GL_RG32I                                          = $823B;
1054   GL_RG32UI                                         = $823C;
1055   GL_VERTEX_ARRAY_BINDING                           = $85B5;
1056   GL_R8_SNORM                                       = $8F94;
1057   GL_RG8_SNORM                                      = $8F95;
1058   GL_RGB8_SNORM                                     = $8F96;
1059   GL_RGBA8_SNORM                                    = $8F97;
1060   GL_SIGNED_NORMALIZED                              = $8F9C;
1061   GL_PRIMITIVE_RESTART_FIXED_INDEX                  = $8D69;
1062   GL_COPY_READ_BUFFER                               = $8F36;
1063   GL_COPY_WRITE_BUFFER                              = $8F37;
1064   GL_COPY_READ_BUFFER_BINDING                       = $8F36;
1065   GL_COPY_WRITE_BUFFER_BINDING                      = $8F37;
1066   GL_UNIFORM_BUFFER                                 = $8A11;
1067   GL_UNIFORM_BUFFER_BINDING                         = $8A28;
1068   GL_UNIFORM_BUFFER_START                           = $8A29;
1069   GL_UNIFORM_BUFFER_SIZE                            = $8A2A;
1070   GL_MAX_VERTEX_UNIFORM_BLOCKS                      = $8A2B;
1071   GL_MAX_FRAGMENT_UNIFORM_BLOCKS                    = $8A2D;
1072   GL_MAX_COMBINED_UNIFORM_BLOCKS                    = $8A2E;
1073   GL_MAX_UNIFORM_BUFFER_BINDINGS                    = $8A2F;
1074   GL_MAX_UNIFORM_BLOCK_SIZE                         = $8A30;
1075   GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS         = $8A31;
1076   GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS       = $8A33;
1077   GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT                = $8A34;
1078   GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH           = $8A35;
1079   GL_ACTIVE_UNIFORM_BLOCKS                          = $8A36;
1080   GL_UNIFORM_TYPE                                   = $8A37;
1081   GL_UNIFORM_SIZE                                   = $8A38;
1082   GL_UNIFORM_NAME_LENGTH                            = $8A39;
1083   GL_UNIFORM_BLOCK_INDEX                            = $8A3A;
1084   GL_UNIFORM_OFFSET                                 = $8A3B;
1085   GL_UNIFORM_ARRAY_STRIDE                           = $8A3C;
1086   GL_UNIFORM_MATRIX_STRIDE                          = $8A3D;
1087   GL_UNIFORM_IS_ROW_MAJOR                           = $8A3E;
1088   GL_UNIFORM_BLOCK_BINDING                          = $8A3F;
1089   GL_UNIFORM_BLOCK_DATA_SIZE                        = $8A40;
1090   GL_UNIFORM_BLOCK_NAME_LENGTH                      = $8A41;
1091   GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS                  = $8A42;
1092   GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES           = $8A43;
1093   GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER      = $8A44;
1094   GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER    = $8A46;
1095   GL_INVALID_INDEX                                  = $FFFFFFFF;
1096   GL_MAX_VERTEX_OUTPUT_COMPONENTS                   = $9122;
1097   GL_MAX_FRAGMENT_INPUT_COMPONENTS                  = $9125;
1098   GL_MAX_SERVER_WAIT_TIMEOUT                        = $9111;
1099   GL_OBJECT_TYPE                                    = $9112;
1100   GL_SYNC_CONDITION                                 = $9113;
1101   GL_SYNC_STATUS                                    = $9114;
1102   GL_SYNC_FLAGS                                     = $9115;
1103   GL_SYNC_FENCE                                     = $9116;
1104   GL_SYNC_GPU_COMMANDS_COMPLETE                     = $9117;
1105   GL_UNSIGNALED                                     = $9118;
1106   GL_SIGNALED                                       = $9119;
1107   GL_ALREADY_SIGNALED                               = $911A;
1108   GL_TIMEOUT_EXPIRED                                = $911B;
1109   GL_CONDITION_SATISFIED                            = $911C;
1110   GL_WAIT_FAILED                                    = $911D;
1111   GL_SYNC_FLUSH_COMMANDS_BIT                        = $00000001;
1112   GL_TIMEOUT_IGNORED                                = $FFFFFFFFFFFFFFFF;
1113   GL_VERTEX_ATTRIB_ARRAY_DIVISOR                    = $88FE;
1114   GL_ANY_SAMPLES_PASSED                             = $8C2F;
1115   GL_ANY_SAMPLES_PASSED_CONSERVATIVE                = $8D6A;
1116   GL_SAMPLER_BINDING                                = $8919;
1117   GL_RGB10_A2UI                                     = $906F;
1118   GL_TEXTURE_SWIZZLE_R                              = $8E42;
1119   GL_TEXTURE_SWIZZLE_G                              = $8E43;
1120   GL_TEXTURE_SWIZZLE_B                              = $8E44;
1121   GL_TEXTURE_SWIZZLE_A                              = $8E45;
1122   GL_GREEN                                          = $1904;
1123   GL_BLUE                                           = $1905;
1124   GL_INT_2_10_10_10_REV                             = $8D9F;
1125   GL_TRANSFORM_FEEDBACK                             = $8E22;
1126   GL_TRANSFORM_FEEDBACK_PAUSED                      = $8E23;
1127   GL_TRANSFORM_FEEDBACK_ACTIVE                      = $8E24;
1128   GL_TRANSFORM_FEEDBACK_BINDING                     = $8E25;
1129   GL_PROGRAM_BINARY_RETRIEVABLE_HINT                = $8257;
1130   GL_PROGRAM_BINARY_LENGTH                          = $8741;
1131   GL_NUM_PROGRAM_BINARY_FORMATS                     = $87FE;
1132   GL_PROGRAM_BINARY_FORMATS                         = $87FF;
1133   GL_COMPRESSED_R11_EAC                             = $9270;
1134   GL_COMPRESSED_SIGNED_R11_EAC                      = $9271;
1135   GL_COMPRESSED_RG11_EAC                            = $9272;
1136   GL_COMPRESSED_SIGNED_RG11_EAC                     = $9273;
1137   GL_COMPRESSED_RGB8_ETC2                           = $9274;
1138   GL_COMPRESSED_SRGB8_ETC2                          = $9275;
1139   GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2       = $9276;
1140   GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2      = $9277;
1141   GL_COMPRESSED_RGBA8_ETC2_EAC                      = $9278;
1142   GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC               = $9279;
1143   GL_TEXTURE_IMMUTABLE_FORMAT                       = $912F;
1144   GL_MAX_ELEMENT_INDEX                              = $8D6B;
1145   GL_NUM_SAMPLE_COUNTS                              = $9380;
1146   GL_TEXTURE_IMMUTABLE_LEVELS                       = $82DF;
1147 {$ENDIF}
1148
1149 {$IFDEF OPENGLES_CORE_3_1}
1150 const
1151 { ============================================== OpenGL ES 3.1 ======================================================= }
1152   GL_COMPUTE_SHADER                                 = $91B9;
1153   GL_MAX_COMPUTE_UNIFORM_BLOCKS                     = $91BB;
1154   GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS                = $91BC;
1155   GL_MAX_COMPUTE_IMAGE_UNIFORMS                     = $91BD;
1156   GL_MAX_COMPUTE_SHARED_MEMORY_SIZE                 = $8262;
1157   GL_MAX_COMPUTE_UNIFORM_COMPONENTS                 = $8263;
1158   GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS             = $8264;
1159   GL_MAX_COMPUTE_ATOMIC_COUNTERS                    = $8265;
1160   GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS        = $8266;
1161   GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS             = $90EB;
1162   GL_MAX_COMPUTE_WORK_GROUP_COUNT                   = $91BE;
1163   GL_MAX_COMPUTE_WORK_GROUP_SIZE                    = $91BF;
1164   GL_COMPUTE_WORK_GROUP_SIZE                        = $8267;
1165   GL_DISPATCH_INDIRECT_BUFFER                       = $90EE;
1166   GL_DISPATCH_INDIRECT_BUFFER_BINDING               = $90EF;
1167   GL_COMPUTE_SHADER_BIT                             = $00000020;
1168   GL_DRAW_INDIRECT_BUFFER                           = $8F3F;
1169   GL_DRAW_INDIRECT_BUFFER_BINDING                   = $8F43;
1170   GL_MAX_UNIFORM_LOCATIONS                          = $826E;
1171   GL_FRAMEBUFFER_DEFAULT_WIDTH                      = $9310;
1172   GL_FRAMEBUFFER_DEFAULT_HEIGHT                     = $9311;
1173   GL_FRAMEBUFFER_DEFAULT_SAMPLES                    = $9313;
1174   GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS     = $9314;
1175   GL_MAX_FRAMEBUFFER_WIDTH                          = $9315;
1176   GL_MAX_FRAMEBUFFER_HEIGHT                         = $9316;
1177   GL_MAX_FRAMEBUFFER_SAMPLES                        = $9318;
1178   GL_UNIFORM                                        = $92E1;
1179   GL_UNIFORM_BLOCK                                  = $92E2;
1180   GL_PROGRAM_INPUT                                  = $92E3;
1181   GL_PROGRAM_OUTPUT                                 = $92E4;
1182   GL_BUFFER_VARIABLE                                = $92E5;
1183   GL_SHADER_STORAGE_BLOCK                           = $92E6;
1184   GL_ATOMIC_COUNTER_BUFFER                          = $92C0;
1185   GL_TRANSFORM_FEEDBACK_VARYING                     = $92F4;
1186   GL_ACTIVE_RESOURCES                               = $92F5;
1187   GL_MAX_NAME_LENGTH                                = $92F6;
1188   GL_MAX_NUM_ACTIVE_VARIABLES                       = $92F7;
1189   GL_NAME_LENGTH                                    = $92F9;
1190   GL_TYPE                                           = $92FA;
1191   GL_ARRAY_SIZE                                     = $92FB;
1192   GL_OFFSET                                         = $92FC;
1193   GL_BLOCK_INDEX                                    = $92FD;
1194   GL_ARRAY_STRIDE                                   = $92FE;
1195   GL_MATRIX_STRIDE                                  = $92FF;
1196   GL_IS_ROW_MAJOR                                   = $9300;
1197   GL_ATOMIC_COUNTER_BUFFER_INDEX                    = $9301;
1198   GL_BUFFER_BINDING                                 = $9302;
1199   GL_BUFFER_DATA_SIZE                               = $9303;
1200   GL_NUM_ACTIVE_VARIABLES                           = $9304;
1201   GL_ACTIVE_VARIABLES                               = $9305;
1202   GL_REFERENCED_BY_VERTEX_SHADER                    = $9306;
1203   GL_REFERENCED_BY_FRAGMENT_SHADER                  = $930A;
1204   GL_REFERENCED_BY_COMPUTE_SHADER                   = $930B;
1205   GL_TOP_LEVEL_ARRAY_SIZE                           = $930C;
1206   GL_TOP_LEVEL_ARRAY_STRIDE                         = $930D;
1207   GL_LOCATION                                       = $930E;
1208   GL_VERTEX_SHADER_BIT                              = $00000001;
1209   GL_FRAGMENT_SHADER_BIT                            = $00000002;
1210   GL_ALL_SHADER_BITS                                = $FFFFFFFF;
1211   GL_PROGRAM_SEPARABLE                              = $8258;
1212   GL_ACTIVE_PROGRAM                                 = $8259;
1213   GL_PROGRAM_PIPELINE_BINDING                       = $825A;
1214   GL_ATOMIC_COUNTER_BUFFER_BINDING                  = $92C1;
1215   GL_ATOMIC_COUNTER_BUFFER_START                    = $92C2;
1216   GL_ATOMIC_COUNTER_BUFFER_SIZE                     = $92C3;
1217   GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS              = $92CC;
1218   GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS            = $92D0;
1219   GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS            = $92D1;
1220   GL_MAX_VERTEX_ATOMIC_COUNTERS                     = $92D2;
1221   GL_MAX_FRAGMENT_ATOMIC_COUNTERS                   = $92D6;
1222   GL_MAX_COMBINED_ATOMIC_COUNTERS                   = $92D7;
1223   GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE                 = $92D8;
1224   GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS             = $92DC;
1225   GL_ACTIVE_ATOMIC_COUNTER_BUFFERS                  = $92D9;
1226   GL_UNSIGNED_INT_ATOMIC_COUNTER                    = $92DB;
1227   GL_MAX_IMAGE_UNITS                                = $8F38;
1228   GL_MAX_VERTEX_IMAGE_UNIFORMS                      = $90CA;
1229   GL_MAX_FRAGMENT_IMAGE_UNIFORMS                    = $90CE;
1230   GL_MAX_COMBINED_IMAGE_UNIFORMS                    = $90CF;
1231   GL_IMAGE_BINDING_NAME                             = $8F3A;
1232   GL_IMAGE_BINDING_LEVEL                            = $8F3B;
1233   GL_IMAGE_BINDING_LAYERED                          = $8F3C;
1234   GL_IMAGE_BINDING_LAYER                            = $8F3D;
1235   GL_IMAGE_BINDING_ACCESS                           = $8F3E;
1236   GL_IMAGE_BINDING_FORMAT                           = $906E;
1237   GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT                = $00000001;
1238   GL_ELEMENT_ARRAY_BARRIER_BIT                      = $00000002;
1239   GL_UNIFORM_BARRIER_BIT                            = $00000004;
1240   GL_TEXTURE_FETCH_BARRIER_BIT                      = $00000008;
1241   GL_SHADER_IMAGE_ACCESS_BARRIER_BIT                = $00000020;
1242   GL_COMMAND_BARRIER_BIT                            = $00000040;
1243   GL_PIXEL_BUFFER_BARRIER_BIT                       = $00000080;
1244   GL_TEXTURE_UPDATE_BARRIER_BIT                     = $00000100;
1245   GL_BUFFER_UPDATE_BARRIER_BIT                      = $00000200;
1246   GL_FRAMEBUFFER_BARRIER_BIT                        = $00000400;
1247   GL_TRANSFORM_FEEDBACK_BARRIER_BIT                 = $00000800;
1248   GL_ATOMIC_COUNTER_BARRIER_BIT                     = $00001000;
1249   GL_ALL_BARRIER_BITS                               = $FFFFFFFF;
1250   GL_IMAGE_2D                                       = $904D;
1251   GL_IMAGE_3D                                       = $904E;
1252   GL_IMAGE_CUBE                                     = $9050;
1253   GL_IMAGE_2D_ARRAY                                 = $9053;
1254   GL_INT_IMAGE_2D                                   = $9058;
1255   GL_INT_IMAGE_3D                                   = $9059;
1256   GL_INT_IMAGE_CUBE                                 = $905B;
1257   GL_INT_IMAGE_2D_ARRAY                             = $905E;
1258   GL_UNSIGNED_INT_IMAGE_2D                          = $9063;
1259   GL_UNSIGNED_INT_IMAGE_3D                          = $9064;
1260   GL_UNSIGNED_INT_IMAGE_CUBE                        = $9066;
1261   GL_UNSIGNED_INT_IMAGE_2D_ARRAY                    = $9069;
1262   GL_IMAGE_FORMAT_COMPATIBILITY_TYPE                = $90C7;
1263   GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE             = $90C8;
1264   GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS            = $90C9;
1265   GL_READ_ONLY                                      = $88B8;
1266   GL_WRITE_ONLY                                     = $88B9;
1267   GL_READ_WRITE                                     = $88BA;
1268   GL_SHADER_STORAGE_BUFFER                          = $90D2;
1269   GL_SHADER_STORAGE_BUFFER_BINDING                  = $90D3;
1270   GL_SHADER_STORAGE_BUFFER_START                    = $90D4;
1271   GL_SHADER_STORAGE_BUFFER_SIZE                     = $90D5;
1272   GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS               = $90D6;
1273   GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS             = $90DA;
1274   GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS              = $90DB;
1275   GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS             = $90DC;
1276   GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS             = $90DD;
1277   GL_MAX_SHADER_STORAGE_BLOCK_SIZE                  = $90DE;
1278   GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT         = $90DF;
1279   GL_SHADER_STORAGE_BARRIER_BIT                     = $00002000;
1280   GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES           = $8F39;
1281   GL_DEPTH_STENCIL_TEXTURE_MODE                     = $90EA;
1282   GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET              = $8E5E;
1283   GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET              = $8E5F;
1284   GL_SAMPLE_POSITION                                = $8E50;
1285   GL_SAMPLE_MASK                                    = $8E51;
1286   GL_SAMPLE_MASK_VALUE                              = $8E52;
1287   GL_TEXTURE_2D_MULTISAMPLE                         = $9100;
1288   GL_MAX_SAMPLE_MASK_WORDS                          = $8E59;
1289   GL_MAX_COLOR_TEXTURE_SAMPLES                      = $910E;
1290   GL_MAX_DEPTH_TEXTURE_SAMPLES                      = $910F;
1291   GL_MAX_INTEGER_SAMPLES                            = $9110;
1292   GL_TEXTURE_BINDING_2D_MULTISAMPLE                 = $9104;
1293   GL_TEXTURE_SAMPLES                                = $9106;
1294   GL_TEXTURE_FIXED_SAMPLE_LOCATIONS                 = $9107;
1295   GL_TEXTURE_WIDTH                                  = $1000;
1296   GL_TEXTURE_HEIGHT                                 = $1001;
1297   GL_TEXTURE_DEPTH                                  = $8071;
1298   GL_TEXTURE_INTERNAL_FORMAT                        = $1003;
1299   GL_TEXTURE_RED_SIZE                               = $805C;
1300   GL_TEXTURE_GREEN_SIZE                             = $805D;
1301   GL_TEXTURE_BLUE_SIZE                              = $805E;
1302   GL_TEXTURE_ALPHA_SIZE                             = $805F;
1303   GL_TEXTURE_DEPTH_SIZE                             = $884A;
1304   GL_TEXTURE_STENCIL_SIZE                           = $88F1;
1305   GL_TEXTURE_SHARED_SIZE                            = $8C3F;
1306   GL_TEXTURE_RED_TYPE                               = $8C10;
1307   GL_TEXTURE_GREEN_TYPE                             = $8C11;
1308   GL_TEXTURE_BLUE_TYPE                              = $8C12;
1309   GL_TEXTURE_ALPHA_TYPE                             = $8C13;
1310   GL_TEXTURE_DEPTH_TYPE                             = $8C16;
1311   GL_TEXTURE_COMPRESSED                             = $86A1;
1312   GL_SAMPLER_2D_MULTISAMPLE                         = $9108;
1313   GL_INT_SAMPLER_2D_MULTISAMPLE                     = $9109;
1314   GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE            = $910A;
1315   GL_VERTEX_ATTRIB_BINDING                          = $82D4;
1316   GL_VERTEX_ATTRIB_RELATIVE_OFFSET                  = $82D5;
1317   GL_VERTEX_BINDING_DIVISOR                         = $82D6;
1318   GL_VERTEX_BINDING_OFFSET                          = $82D7;
1319   GL_VERTEX_BINDING_STRIDE                          = $82D8;
1320   GL_VERTEX_BINDING_BUFFER                          = $8F4F;
1321   GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET              = $82D9;
1322   GL_MAX_VERTEX_ATTRIB_BINDINGS                     = $82DA;
1323   GL_MAX_VERTEX_ATTRIB_STRIDE                       = $82E5;
1324 {$ENDIF}
1325
1326 {$IFDEF OPENGLES_CORE_1_1}
1327 type
1328 { ============================================== OpenGL ES 1.1 ======================================================= }
1329 { Available only in Common profile }
1330   TglAlphaFunc                              = procedure(aFunc: GLenum; aRef: GLclampf); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1331   TglClearColor                             = procedure(aRed: GLclampf; aGreen: GLclampf; aBlue: GLclampf; aAlpha: GLclampf); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1332   TglClearDepthf                            = procedure(aDepth: GLclampf); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1333   TglClipPlanef                             = procedure(aPlane: GLenum; const aEquation: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1334   TglColor4f                                = procedure(aRed: GLfloat; aGreen: GLfloat; aBlue: GLfloat; aAlpha: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1335   TglDepthRangef                            = procedure(aZNear: GLclampf; aZFar: GLclampf); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1336   TglFogf                                   = procedure(aPname: GLenum; aParam: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1337   TglFogfv                                  = procedure(aPname: GLenum; const aParams: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1338   TglFrustumf                               = procedure(aLeft: GLfloat; aRight: GLfloat; aBottom: GLfloat; aTop: GLfloat; aZNear: GLfloat; aZFar: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1339   TglGetClipPlanef                          = procedure(aPname: GLenum; aEquation: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1340   TglGetFloatv                              = procedure(aPname: GLenum; aParams: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1341   TglGetLightfv                             = procedure(aLight: GLenum; aPname: GLenum; aParams: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1342   TglGetMaterialfv                          = procedure(aFace: GLenum; aPname: GLenum; aParams: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1343   TglGetTexEnvfv                            = procedure(aEnv: GLenum; aPname: GLenum; aParams: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1344   TglGetTexParameterfv                      = procedure(aTarget: GLenum; aPname: GLenum; aParams: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1345   TglLightModelf                            = procedure(aPname: GLenum; aParam: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1346   TglLightModelfv                           = procedure(aPname: GLenum; const aParams: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1347   TglLightf                                 = procedure(aLight: GLenum; aPname: GLenum; aParam: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1348   TglLightfv                                = procedure(aLight: GLenum; aPname: GLenum; const aParams: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1349   TglLineWidth                              = procedure(aWidth: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1350   TglLoadMatrixf                            = procedure(const aMatrix: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1351   TglMaterialf                              = procedure(aFace: GLenum; aPname: GLenum; aParam: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1352   TglMaterialfv                             = procedure(aFace: GLenum; aPname: GLenum; const aParams: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1353   TglMultMatrixf                            = procedure(const aMatrix: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1354   TglMultiTexCoord4f                        = procedure(aTarget: GLenum; s: GLfloat; t: GLfloat; r: GLfloat; q: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1355   TglNormal3f                               = procedure(nx: GLfloat; ny: GLfloat; nz: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1356   TglOrthof                                 = procedure(aLeft: GLfloat; aRight: GLfloat; aBottom: GLfloat; aTop: GLfloat; aZNear: GLfloat; aZFar: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1357   TglPointParameterf                        = procedure(aPname: GLenum; aParam: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1358   TglPointParameterfv                       = procedure(aPname: GLenum; const aParams: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1359   TglPointSize                              = procedure(aSize: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1360   TglPolygonOffset                          = procedure(aFactor: GLfloat; aUnits: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1361   TglRotatef                                = procedure(aAngle: GLfloat; x: GLfloat; y: GLfloat; z: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1362   TglScalef                                 = procedure(x: GLfloat; y: GLfloat; z: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1363   TglTexEnvf                                = procedure(aTarget: GLenum; aPname: GLenum; aParam: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1364   TglTexEnvfv                               = procedure(aTarget: GLenum; aPname: GLenum; const aParams: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1365   TglTexParameterf                          = procedure(aTarget: GLenum; aPname: GLenum; aParam: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1366   TglTexParameterfv                         = procedure(aTarget: GLenum; aPname: GLenum; const aParams: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1367   TglTranslatef                             = procedure(x: GLfloat; y: GLfloat; z: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1368
1369 { Available in both Common and Common-Lite profiles }
1370   TglActiveTexture                          = procedure(aTexture: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1371   TglAlphaFuncx                             = procedure(aFunc: GLenum; aRef: GLclampx); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1372   TglBindBuffer                             = procedure(aTarget: GLenum; aBuffer: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1373   TglBindTexture                            = procedure(aTarget: GLenum; aTexture: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1374   TglBlendFunc                              = procedure(aSfactor: GLenum; aDfactor: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1375   TglBufferData                             = procedure(aTarget: GLenum; aSize: GLsizeiptr; const aData: PGLvoid; aUsage: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1376   TglBufferSubData                          = procedure(aTarget: GLenum; aOffset: GLintptr; aSize: GLsizeiptr; const aData: PGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1377   TglClear                                  = procedure(aMask: GLbitfield); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1378   TglClearColorx                            = procedure(aRed: GLclampx; aGreen: GLclampx; aBlue: GLclampx; aAlpha: GLclampx); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1379   TglClearDepthx                            = procedure(aDepth: GLclampx); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1380   TglClearStencil                           = procedure(aStencil: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1381   TglClientActiveTexture                    = procedure(aTexture: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1382   TglClipPlanex                             = procedure(aPlane: GLenum; const aEquation: PGLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1383   TglColor4ub                               = procedure(aRed: GLubyte; aGreen: GLubyte; aBlue: GLubyte; aAlpha: GLubyte); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1384   TglColor4x                                = procedure(aRed: GLfixed; aGreen: GLfixed; aBlue: GLfixed; aAlpha: GLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1385   TglColorMask                              = procedure(aRed: GLboolean; aGreen: GLboolean; aBlue: GLboolean; aAlpha: GLboolean); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1386   TglColorPointer                           = procedure(aSize: GLint; aType: GLenum; aStride: GLsizei; const aPointer: PGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1387   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}
1388   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}
1389   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}
1390   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}
1391   TglCullFace                               = procedure(aMode: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1392   TglDeleteBuffers                          = procedure(n: GLsizei; const aBuffers: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1393   TglDeleteTextures                         = procedure(n: GLsizei; const aTextures: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1394   TglDepthFunc                              = procedure(aFunc: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1395   TglDepthMask                              = procedure(aFlag: GLboolean); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1396   TglDepthRangex                            = procedure(aZNear: GLclampx; aZFar: GLclampx); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1397   TglDisable                                = procedure(aCap: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1398   TglDisableClientState                     = procedure(aArray: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1399   TglDrawArrays                             = procedure(aMode: GLenum; aFirst: GLint; aCount: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1400   TglDrawElements                           = procedure(aMode: GLenum; aCount: GLsizei; aType: GLenum; const aIndices: PGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1401   TglEnable                                 = procedure(aCap: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1402   TglEnableClientState                      = procedure(aArray: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1403   TglFinish                                 = procedure(); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1404   TglFlush                                  = procedure(); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1405   TglFogx                                   = procedure(aPname: GLenum; aParam: GLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1406   TglFogxv                                  = procedure(aPname: GLenum; const aParams: PGLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1407   TglFrontFace                              = procedure(aMode: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1408   TglFrustumx                               = procedure(aLeft: GLfixed; aRight: GLfixed; aBottom: GLfixed; aTop: GLfixed; aZNear: GLfixed; aZFar: GLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1409   TglGetBooleanv                            = procedure(aPname: GLenum; aParams: PGLboolean); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1410   TglGetBufferParameteriv                   = procedure(aTarget: GLenum; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1411   TglGetClipPlanex                          = procedure(aPname: GLenum; aEquation: PGLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1412   TglGenBuffers                             = procedure(n: GLsizei; aBuffers: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1413   TglGenTextures                            = procedure(n: GLsizei; aTextures: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1414   TglGetError                               = function (): GLenum; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1415   TglGetFixedv                              = procedure(aPname: GLenum; aParams: PGLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1416   TglGetIntegerv                            = procedure(aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1417   TglGetLightxv                             = procedure(aLight: GLenum; aPname: GLenum; aParams: PGLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1418   TglGetMaterialxv                          = procedure(aFace: GLenum; aPname: GLenum; aParams: PGLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1419   TglGetPointerv                            = procedure(aPname: GLenum; aParams: PPGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1420   TglGetString                              = function (name: GLenum): PGLubyte; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1421   TglGetTexEnviv                            = procedure(aEnv: GLenum; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1422   TglGetTexEnvxv                            = procedure(aEnv: GLenum; aPname: GLenum; aParams: PGLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1423   TglGetTexParameteriv                      = procedure(aTarget: GLenum; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1424   TglGetTexParameterxv                      = procedure(aTarget: GLenum; aPname: GLenum; aParams: PGLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1425   TglHint                                   = procedure(aTarget: GLenum; aMode: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1426   TglIsBuffer                               = function (aBuffer: GLuint): GLboolean;                                                {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1427   TglIsEnabled                              = function (aCap: GLenum): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1428   TglIsTexture                              = function (aTexture: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1429   TglLightModelx                            = procedure(aPname: GLenum; aParam: GLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1430   TglLightModelxv                           = procedure(aPname: GLenum; const aParams: PGLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1431   TglLightx                                 = procedure(aLight: GLenum; aPname: GLenum; aParam: GLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1432   TglLightxv                                = procedure(aLight: GLenum; aPname: GLenum; const aParams: PGLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1433   TglLineWidthx                             = procedure(aWidth: GLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1434   TglLoadIdentity                           = procedure(); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1435   TglLoadMatrix                             = procedure(const aMatrix: PGLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1436   TglLogicOp                                = procedure(aOpcode: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1437   TglMaterialx                              = procedure(aFace: GLenum; aPname: GLenum; aParam: GLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1438   TglMaterialxv                             = procedure(aFace: GLenum; aPname: GLenum; const aParams: PGLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1439   TglMatrixMode                             = procedure(aMode: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1440   TglMultMatrixx                            = procedure(const aMatrix: PGLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1441   TglMultiTexCoord4x                        = procedure(aTarget: GLenum; s: GLfixed; t: GLfixed; r: GLfixed; q: GLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1442   TglNormal3x                               = procedure(nx: GLfixed; ny: GLfixed; nz: GLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1443   TglNormalPointer                          = procedure(aType: GLenum; aStride: GLsizei; const aPointer: PGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1444   TglOrthox                                 = procedure(aLeft: GLfixed; aRight: GLfixed; aBottom: GLfixed; aTop: GLfixed; aZNear: GLfixed; aZFar: GLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1445   TglPixelStorei                            = procedure(aPname: GLenum; aParam: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1446   TglPointParameterx                        = procedure(aPname: GLenum; aParam: GLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1447   TglPointParameterxv                       = procedure(aPname: GLenum; const aParams: PGLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1448   TglPointSizex                             = procedure(aSize: GLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1449   TglPolygonOffsetx                         = procedure(aFactor: GLfixed; aUnits: GLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1450   TglPopMatrix                              = procedure(); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1451   TglPushMatrix                             = procedure(); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1452   TglReadPixels                             = procedure(x: GLint; y: GLint; aWidth: GLsizei; aHeight: GLsizei; aFormat: GLenum; aType: GLenum; aPixels: PGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1453   TglRotatex                                = procedure(aAngle: GLfixed; x: GLfixed; y: GLfixed; z: GLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1454   TglSampleCoverage                         = procedure(aValue: GLclampf; aInvert: GLboolean); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1455   TglSampleCoveragex                        = procedure(aValue: GLclampx; aInvert: GLboolean); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1456   TglScalex                                 = procedure(x: GLfixed; y: GLfixed; z: GLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1457   TglScissor                                = procedure(x: GLint; y: GLint; aWidth: GLsizei; aHeight: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1458   TglShadeModel                             = procedure(aMode: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1459   TglStencilFunc                            = procedure(aFunc: GLenum; aRef: GLint; aMask: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1460   TglStencilMask                            = procedure(aMask: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1461   TglStencilOp                              = procedure(aFail: GLenum; aZfail: GLenum; aZpass: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1462   TglTexCoordPointer                        = procedure(aSize: GLint; aType: GLenum; aStride: GLsizei; const aPointer: PGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1463   TglTexEnvi                                = procedure(aTarget: GLenum; aPname: GLenum; aParam: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1464   TglTexEnvx                                = procedure(aTarget: GLenum; aPname: GLenum; aParam: GLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1465   TglTexEnviv                               = procedure(aTarget: GLenum; aPname: GLenum; const aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1466   TglTexEnvxv                               = procedure(aTarget: GLenum; aPname: GLenum; const aParams: PGLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1467   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}
1468   TglTexParameteri                          = procedure(aTarget: GLenum; aPname: GLenum; aParam: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1469   TglTexParameterx                          = procedure(aTarget: GLenum; aPname: GLenum; aParam: GLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1470   TglTexParameteriv                         = procedure(aTarget: GLenum; aPname: GLenum; const aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1471   TglTexParameterxv                         = procedure(aTarget: GLenum; aPname: GLenum; const aParams: PGLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1472   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}
1473   TglTranslatex                             = procedure(x: GLfixed; y: GLfixed; z: GLfixed); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1474   TglVertexPointer                          = procedure(aSize: GLint; aType: GLenum; aStride: GLsizei; const aPointer: PGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1475   TglViewport                               = procedure(x: GLint; y: GLint; aWidth: GLsizei; aHeight: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1476 {$ENDIF}
1477
1478 {$IFDEF OPENGLES_CORE_2_0}
1479 type
1480 { ============================================== OpenGL ES 2.0 ======================================================= }
1481   TglAttachShader                           = procedure(aProgram: GLuint; aShader: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1482   TglBindAttribLocation                     = procedure(aProgram: GLuint; aIndex: GLuint; const aName: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1483   TglBindFramebuffer                        = procedure(aTarget: GLenum; aFramebuffer: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1484   TglBindRenderbuffer                       = procedure(aTarget: GLenum; aRenderbuffer: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1485   TglBlendColor                             = procedure(aRed: GLclampf; aGreen: GLclampf; aBlue: GLclampf; aAlpha: GLclampf); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1486   TglBlendEquation                          = procedure( mode : GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1487   TglBlendEquationSeparate                  = procedure(aModeRGB: GLenum; aModeAlpha: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1488   TglBlendFuncSeparate                      = procedure(aSrcRGB: GLenum; aDstRGB: GLenum; aSrcAlpha: GLenum; aDstAlpha: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1489   TglCheckFramebufferStatus                 = function (aTarget: GLenum): GLenum; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1490   TglCompileShader                          = procedure(aShader: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1491   TglCreateProgram                          = function (): GLuint; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1492   TglCreateShader                           = function (aType: GLenum): GLuint; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1493   TglDeleteFramebuffers                     = procedure(n: GLsizei; const aFramebuffers: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1494   TglDeleteProgram                          = procedure(aProgram: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1495   TglDeleteRenderbuffers                    = procedure(n: GLsizei; const aRenderbuffers: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1496   TglDeleteShader                           = procedure(aShader: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1497   TglDetachShader                           = procedure(aProgram: GLuint; aShader: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1498   TglDisableVertexAttribArray               = procedure(aIndex: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1499   TglEnableVertexAttribArray                = procedure(aIndex: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1500   TglFramebufferRenderbuffer                = procedure(aTarget: GLenum; aAttachment: GLenum; aRenderbuffertarget: GLenum; aRenderbuffer: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1501   TglFramebufferTexture2D                   = procedure(aTarget: GLenum; aAttachment: GLenum; aTextarget: GLenum; aTexture: GLuint; aLevel: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1502   TglGenerateMipmap                         = procedure(aTarget: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1503   TglGenFramebuffers                        = procedure(n: GLsizei; aFramebuffers: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1504   TglGenRenderbuffers                       = procedure(n: GLsizei; aRenderbuffers: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1505   TglGetActiveAttrib                        = procedure(aProgram: GLuint; aIndex: GLuint; aBufsize: GLsizei; aLength: PGLsizei; aSize: PGLint; aType: PGLenum; aName: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1506   TglGetActiveUniform                       = procedure(aProgram: GLuint; aIndex: GLuint; aBufsize: GLsizei; aLength: PGLsizei; aSize: PGLint; aType: PGLenum; aName: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1507   TglGetAttachedShaders                     = procedure(aProgram: GLuint; aMaxcount: GLsizei; aCount: PGLsizei; aShaders: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1508   TglGetAttribLocation                      = function (aProgram: GLuint; const aName: PGLchar): Integer; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1509   TglGetFramebufferAttachmentParameteriv    = procedure(aTarget: GLenum; aAttachment: GLenum; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1510   TglGetProgramiv                           = procedure(aProgram: GLuint; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1511   TglGetProgramInfoLog                      = procedure(aProgram: GLuint; aBufsize: GLsizei; aLength: PGLsizei; aInfolog: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1512   TglGetRenderbufferParameteriv             = procedure(aTarget: GLenum; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1513   TglGetShaderiv                            = procedure(aShader: GLuint; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1514   TglGetShaderInfoLog                       = procedure(aShader: GLuint; aBufsize: GLsizei; aLength: PGLsizei; aInfolog: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1515   TglGetShaderPrecisionFormat               = procedure(aShadertype: GLenum; aPrecisiontype: GLenum; aRange: PGLint; aPrecision: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1516   TglGetShaderSource                        = procedure(aShader: GLuint; aBufsize: GLsizei; aLength: PGLsizei; aSource: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1517   TglGetUniformfv                           = procedure(aProgram: GLuint; aLocation: GLint; aParams: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1518   TglGetUniformiv                           = procedure(aProgram: GLuint; aLocation: GLint; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1519   TglGetUniformLocation                     = function (aProgram: GLuint; const aName: PGLchar): Integer; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1520   TglGetVertexAttribfv                      = procedure(aIndex: GLuint; aPname: GLenum; aParams: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1521   TglGetVertexAttribiv                      = procedure(aIndex: GLuint; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1522   TglGetVertexAttribPointerv                = procedure(aIndex: GLuint; aPname: GLenum; aPointer: PPGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1523   TglIsFramebuffer                          = function (aFramebuffer: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1524   TglIsProgram                              = function (aProgram: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1525   TglIsRenderbuffer                         = function (aRenderbuffer: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1526   TglIsShader                               = function (aShader: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1527   TglLinkProgram                            = procedure(aProgram: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1528   TglReleaseShaderCompiler                  = procedure(); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1529   TglRenderbufferStorage                    = procedure(aTarget: GLenum; aInternalformat: GLenum; aWidth: GLsizei; aHeight: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1530   TglShaderBinary                           = procedure(n: GLsizei; const aShaders: PGLuint; aBinaryformat: GLenum; const aBinary: PGLvoid; aLength: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1531   TglShaderSource                           = procedure(aShader: GLuint; aCount: GLsizei; const aString: PPGLchar; const aLength: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1532   TglStencilFuncSeparate                    = procedure(aFace: GLenum; aFunc: GLenum; aRef: GLint; aMask: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1533   TglStencilMaskSeparate                    = procedure(aFace: GLenum; aMask: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1534   TglStencilOpSeparate                      = procedure(aFace: GLenum; aFail: GLenum; aZfail: GLenum; aZpass: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1535   TglUniform1f                              = procedure(aLocation: GLint; x: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1536   TglUniform1fv                             = procedure(aLocation: GLint; aCount: GLsizei; const v: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1537   TglUniform1i                              = procedure(aLocation: GLint; x: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1538   TglUniform1iv                             = procedure(aLocation: GLint; aCount: GLsizei; const v: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1539   TglUniform2f                              = procedure(aLocation: GLint; x: GLfloat; y: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1540   TglUniform2fv                             = procedure(aLocation: GLint; aCount: GLsizei; const v: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1541   TglUniform2i                              = procedure(aLocation: GLint; x: GLint; y: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1542   TglUniform2iv                             = procedure(aLocation: GLint; aCount: GLsizei; const v: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1543   TglUniform3f                              = procedure(aLocation: GLint; x: GLfloat; y: GLfloat; z: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1544   TglUniform3fv                             = procedure(aLocation: GLint; aCount: GLsizei; const v: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1545   TglUniform3i                              = procedure(aLocation: GLint; x: GLint; y: GLint; z: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1546   TglUniform3iv                             = procedure(aLocation: GLint; aCount: GLsizei; const v: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1547   TglUniform4f                              = procedure(aLocation: GLint; x: GLfloat; y: GLfloat; z: GLfloat; w: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1548   TglUniform4fv                             = procedure(aLocation: GLint; aCount: GLsizei; const v: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1549   TglUniform4i                              = procedure(aLocation: GLint; x: GLint; y: GLint; z: GLint; w: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1550   TglUniform4iv                             = procedure(aLocation: GLint; aCount: GLsizei; const v: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1551   TglUniformMatrix2fv                       = procedure(aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1552   TglUniformMatrix3fv                       = procedure(aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1553   TglUniformMatrix4fv                       = procedure(aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1554   TglUseProgram                             = procedure(aProgram: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1555   TglValidateProgram                        = procedure(aProgram: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1556   TglVertexAttrib1f                         = procedure(aIndex: GLuint; x: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1557   TglVertexAttrib1fv                        = procedure(aIndex: GLuint; const aValues: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1558   TglVertexAttrib2f                         = procedure(aIndex: GLuint; x: GLfloat; y: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1559   TglVertexAttrib2fv                        = procedure(aIndex: GLuint; const aValues: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1560   TglVertexAttrib3f                         = procedure(aIndex: GLuint; x: GLfloat; y: GLfloat; z: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1561   TglVertexAttrib3fv                        = procedure(aIndex: GLuint; const aValues: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1562   TglVertexAttrib4f                         = procedure(aIndex: GLuint; x: GLfloat; y: GLfloat; z: GLfloat; w: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1563   TglVertexAttrib4fv                        = procedure(aIndex: GLuint; const aValues: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1564   TglVertexAttribPointer                    = procedure(aIndex: GLuint; aSize: GLint; aType: GLenum; aNormalized: GLboolean; aStride: GLsizei; const aPtr: PGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1565 {$ENDIF}
1566
1567 {$IFDEF OPENGLES_CORE_3_0}
1568 type
1569 { ============================================== OpenGL ES 3.0 ======================================================= }
1570   TglReadBuffer                             = procedure(aSrc: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1571   TglDrawRangeElements                      = procedure(aMode: GLenum; aStart: GLuint; aEnd: GLuint; aCount: GLsizei; aType: GLenum; const aIndices: PGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1572   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}
1573   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}
1574   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}
1575   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}
1576   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}
1577   TglGenQueries                             = procedure(n: GLsizei; aIds: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1578   TglDeleteQueries                          = procedure(n: GLsizei; const aIds: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1579   TglIsQuery                                = function (aId: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1580   TglBeginQuery                             = procedure(aTarget: GLenum; aId: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1581   TglEndQuery                               = procedure(aTarget: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1582   TglGetQueryiv                             = procedure(aTarget: GLenum; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1583   TglGetQueryObjectuiv                      = procedure(aId: GLuint; aPname: GLenum; aParams: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1584   TglUnmapBuffer                            = function (aTarget: GLenum): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1585   TglGetBufferPointerv                      = procedure(aTarget: GLenum; aPname: GLenum; aParams: PPGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1586   TglDrawBuffers                            = procedure(n: GLsizei; const aBuffers: PGLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1587   TglUniformMatrix2x3fv                     = procedure(aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1588   TglUniformMatrix3x2fv                     = procedure(aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1589   TglUniformMatrix2x4fv                     = procedure(aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1590   TglUniformMatrix4x2fv                     = procedure(aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1591   TglUniformMatrix3x4fv                     = procedure(aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1592   TglUniformMatrix4x3fv                     = procedure(aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1593   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}
1594   TglRenderbufferStorageMultisample         = procedure(aTarget: GLenum; aSamples: GLsizei; aInternalformat: GLenum; aWidth: GLsizei; aHeight: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1595   TglFramebufferTextureLayer                = procedure(aTarget: GLenum; aAttachment: GLenum; aTexture: GLuint; aLevel: GLint; aLayer: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1596   TglMapBufferRange                         = function (aTarget: GLenum; aOffset: GLintptr; aLength: GLsizeiptr; aAccess: GLbitfield): PGLvoid; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1597   TglFlushMappedBufferRange                 = procedure(aTarget: GLenum; aOffset: GLintptr; aLength: GLsizeiptr); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1598   TglBindVertexArray                        = procedure(aArray: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1599   TglDeleteVertexArrays                     = procedure(n: GLsizei; const aArrays: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1600   TglGenVertexArrays                        = procedure(n: GLsizei; aArrays: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1601   TglIsVertexArray                          = function (aArray: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1602   TglGetIntegeriv                           = procedure(aTarget: GLenum; aIndex: GLuint; aData: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1603   TglBeginTransformFeedback                 = procedure(aPrimitiveMode: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1604   TglEndTransformFeedback                   = procedure(); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1605   TglBindBufferRange                        = procedure(aTarget: GLenum; aIndex: GLuint; aBuffer: GLuint; aOffset: GLintptr; aSize: GLsizeiptr); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1606   TglBindBufferBase                         = procedure(aTarget: GLenum; aIndex: GLuint; aBuffer: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1607   TglTransformFeedbackVaryings              = procedure(aProgram: GLuint; aCount: GLsizei; const aVaryings: PPGLchar; aBufferMode: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1608   TglGetTransformFeedbackVarying            = procedure(aProgram: GLuint; aIndex: GLuint; aBufSize: GLsizei; aLength: PGLsizei; aSize: PGLsizei; aType: PGLenum; aName: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1609   TglVertexAttribIPointer                   = procedure(aIndex: GLuint; aSize: GLint; aType: GLenum; aStride: GLsizei; const aPointer: PGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1610   TglGetVertexAttribIiv                     = procedure(aIndex: GLuint; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1611   TglGetVertexAttribIuiv                    = procedure(aIndex: GLuint; aPname: GLenum; aParams: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1612   TglVertexAttribI4i                        = procedure(aIndex: GLuint; x: GLint; y: GLint; z: GLint; w: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1613   TglVertexAttribI4ui                       = procedure(aIndex: GLuint; x: GLuint; y: GLuint; z: GLuint; w: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1614   TglVertexAttribI4iv                       = procedure(aIndex: GLuint; const v: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1615   TglVertexAttribI4uiv                      = procedure(aIndex: GLuint; const v: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1616   TglGetUniformuiv                          = procedure(aProgram: GLuint; aLocation: GLint; aParams: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1617   TglGetFragDataLocation                    = function (aProgram: GLuint; const aName: PGLchar): GLint; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1618   TglUniform1ui                             = procedure(aLocation: GLint; v0: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1619   TglUniform2ui                             = procedure(aLocation: GLint; v0: GLuint; v1: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1620   TglUniform3ui                             = procedure(aLocation: GLint; v0: GLuint; v1: GLuint; v2: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1621   TglUniform4ui                             = procedure(aLocation: GLint; v0: GLuint; v1: GLuint; v2: GLuint; v3: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1622   TglUniform1uiv                            = procedure(aLocation: GLint; aCount: GLsizei; const aValue: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1623   TglUniform2uiv                            = procedure(aLocation: GLint; aCount: GLsizei; const aValue: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1624   TglUniform3uiv                            = procedure(aLocation: GLint; aCount: GLsizei; const aValue: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1625   TglUniform4uiv                            = procedure(aLocation: GLint; aCount: GLsizei; const aValue: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1626   TglClearBufferiv                          = procedure(aBuffer: GLenum; aDrawbuffer: GLint; const aValue: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1627   TglClearBufferuiv                         = procedure(aBuffer: GLenum; aDrawbuffer: GLint; const aValue: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1628   TglClearBufferfv                          = procedure(aBuffer: GLenum; aDrawbuffer: GLint; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1629   TglClearBufferfi                          = procedure(aBuffer: GLenum; aDrawbuffer: GLint; aDepth: GLfloat; aStencil: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1630   TglGetStringi                             = function (aName: GLenum; aIndex: GLuint): PGLubyte; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1631   TglCopyBufferSubData                      = procedure(aReadTarget: GLenum; aWriteTarget: GLenum; aReadOffset: GLintptr; aWriteOffset: GLintptr; aSize: GLsizeiptr); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1632   TglGetUniformIndices                      = procedure(aProgram: GLuint; aUniformCount: GLsizei; const aUniformNames: PPGLchar; aUniformIndices: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1633   TglGetActiveUniformsiv                    = procedure(aProgram: GLuint; aUniformCount: GLsizei; const aUniformIndices: PGLuint; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1634   TglGetUniformBlockIndex                   = function (aProgram: GLuint; const aUniformBlockName: PGLchar): GLuint; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1635   TglGetActiveUniformBlockiv                = procedure(aProgram: GLuint; aUniformBlockIndex: GLuint; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1636   TglGetActiveUniformBlockName              = procedure(aProgram: GLuint; aUniformBlockIndex: GLuint; aBufSize: GLsizei; aLength: PGLsizei; aUniformBlockName: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1637   TglUniformBlockBinding                    = procedure(aProgram: GLuint; aUniformBlockIndex: GLuint; aUniformBlockBinding: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1638   TglDrawArraysInstanced                    = procedure(aMode: GLenum; aFirst: GLint; aCount: GLsizei; aInstancecount: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1639   TglDrawElementsInstanced                  = procedure(aMode: GLenum; aCount: GLsizei; aType: GLenum; const aIndices: PGLvoid; aInstancecount: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1640   TglFenceSync                              = function (aCondition: GLenum; aFlags: GLbitfield): GLsync; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1641   TglIsSync                                 = function (aSync: GLsync): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1642   TglDeleteSync                             = procedure(aSync: GLsync); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1643   TglClientWaitSync                         = function (aSync: GLsync; aFlags: GLbitfield; aTimeout: GLuint64): GLenum; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1644   TglWaitSync                               = procedure(aSync: GLsync; aFlags: GLbitfield; aTimeout: GLuint64); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1645   TglGetInteger64v                          = procedure(aPname: GLenum; aData: PGLint64); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1646   TglGetSynciv                              = procedure(aSync: GLsync; aPname: GLenum; aBufSize: GLsizei; aLength: PGLsizei; aValues: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1647   TglGetInteger64iv                         = procedure(aTarget: GLenum; aIndex: GLuint; aData: PGLint64); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1648   TglGetBufferParameteri64v                 = procedure(aTarget: GLenum; aPname: GLenum; aParams: PGLint64); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1649   TglGenSamplers                            = procedure(aCount: GLsizei; aSamplers: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1650   TglDeleteSamplers                         = procedure(aCount: GLsizei; const aSamplers: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1651   TglIsSampler                              = function (aSampler: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1652   TglBindSampler                            = procedure(aUnit: GLuint; aSampler: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1653   TglSamplerParameteri                      = procedure(aSampler: GLuint; aPname: GLenum; aParam: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1654   TglSamplerParameteriv                     = procedure(aSampler: GLuint; aPname: GLenum; const aParam: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1655   TglSamplerParameterf                      = procedure(aSampler: GLuint; aPname: GLenum; aParam: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1656   TglSamplerParameterfv                     = procedure(aSampler: GLuint; aPname: GLenum; const aParam: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1657   TglGetSamplerParameteriv                  = procedure(aSampler: GLuint; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1658   TglGetSamplerParameterfv                  = procedure(aSampler: GLuint; aPname: GLenum; aParams: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1659   TglVertexAttribDivisor                    = procedure(aIndex: GLuint; aDivisor: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1660   TglBindTransformFeedback                  = procedure(aTarget: GLenum; aId: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1661   TglDeleteTransformFeedbacks               = procedure(n: GLsizei; const aIds: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1662   TglGenTransformFeedbacks                  = procedure(n: GLsizei; aIds: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1663   TglIsTransformFeedback                    = function (aId: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1664   TglPauseTransformFeedback                 = procedure(); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1665   TglResumeTransformFeedback                = procedure(); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1666   TglGetProgramBinary                       = procedure(aProgram: GLuint; aBufSize: GLsizei; aLength: PGLsizei; aBinaryFormat: PGLenum; aBinary: PGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1667   TglProgramBinary                          = procedure(aProgram: GLuint; aBinaryFormat: GLenum; const aBinary: PGLvoid; aLength: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1668   TglProgramParameteri                      = procedure(aProgram: GLuint; aPname: GLenum; aValue: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1669   TglInvalidateFramebuffer                  = procedure(aTarget: GLenum; aNumAttachments: GLsizei; const aAttachments: PGLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1670   TglInvalidateSubFramebuffer               = procedure(aTarget: GLenum; aNumAttachments: GLsizei; const aAttachments: PGLenum; x: GLint; y: GLint; aWidth: GLsizei; aHeight: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1671   TglTexStorage2D                           = procedure(aTarget: GLenum; aLevels: GLsizei; aInternalformat: GLenum; aWidth: GLsizei; aHeight: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1672   TglTexStorage3D                           = procedure(aTarget: GLenum; aLevels: GLsizei; aInternalformat: GLenum; aWidth: GLsizei; aHeight: GLsizei; aDepth: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1673   TglGetInternalformativ                    = procedure(aTarget: GLenum; aInternalformat: GLenum; aPname: GLenum; aBufSize: GLsizei; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1674 {$ENDIF}
1675
1676 {$IFDEF OPENGLES_CORE_3_1}
1677 type
1678 { ============================================== OpenGL ES 3.1 ======================================================= }
1679   TglDispatchCompute                        = procedure(aNumGroupsX: GLuint; aNumGroupsY: GLuint; aNumGroupsZ: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1680   TglDispatchComputeIndirect                = procedure(aIndirect: GLintptr); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1681   TglDrawArraysIndirect                     = procedure(aMode: GLenum; const aIndirect: PGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1682   TglDrawElementsIndirect                   = procedure(aMode: GLenum; aType: GLenum; const aIndirect: PGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1683   TglFramebufferParameteri                  = procedure(aTarget: GLenum; aPname: GLenum; aParam: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1684   TglGetFramebufferParameteriv              = procedure(aTarget: GLenum; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1685   TglGetProgramInterfaceiv                  = procedure(aProgram: GLuint; aProgramInterface: GLenum; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1686   TglGetProgramResourceIndex                = function (aProgram: GLuint; aProgramInterface: GLenum; const aName: PGLchar): GLuint; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1687   TglGetProgramResourceName                 = procedure(aProgram: GLuint; aProgramInterface: GLenum; aIndex: GLuint; aBufSize: GLsizei; aLength: PGLsizei; aName: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1688   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}
1689   TglGetProgramResourceLocation             = function (aProgram: GLuint; aProgramInterface: GLenum; const aName: PGLchar): GLint; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1690   TglUseProgramStages                       = procedure(aPipeline: GLuint; aStages: GLbitfield; aProgram: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1691   TglActiveShaderProgram                    = procedure(aPipeline: GLuint; aProgram: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1692   TglCreateShaderProgramv                   = function (aType: GLenum; aCount: GLsizei; const aStrings: PPGLchar): GLuint; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1693   TglBindProgramPipeline                    = procedure(aPipeline: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1694   TglDeleteProgramPipelines                 = procedure(n: GLsizei; const aPipelines: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1695   TglGenProgramPipelines                    = procedure(n: GLsizei; aPipelines: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1696   TglIsProgramPipeline                      = function (aPipeline: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1697   TglGetProgramPipelineiv                   = procedure(aPipeline: GLuint; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1698   TglProgramUniform1i                       = procedure(aProgram: GLuint; aLocation: GLint; v0: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1699   TglProgramUniform2i                       = procedure(aProgram: GLuint; aLocation: GLint; v0: GLint; v1: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1700   TglProgramUniform3i                       = procedure(aProgram: GLuint; aLocation: GLint; v0: GLint; v1: GLint; v2: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1701   TglProgramUniform4i                       = procedure(aProgram: GLuint; aLocation: GLint; v0: GLint; v1: GLint; v2: GLint; v3: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1702   TglProgramUniform1ui                      = procedure(aProgram: GLuint; aLocation: GLint; v0: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1703   TglProgramUniform2ui                      = procedure(aProgram: GLuint; aLocation: GLint; v0: GLuint; v1: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1704   TglProgramUniform3ui                      = procedure(aProgram: GLuint; aLocation: GLint; v0: GLuint; v1: GLuint; v2: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1705   TglProgramUniform4ui                      = procedure(aProgram: GLuint; aLocation: GLint; v0: GLuint; v1: GLuint; v2: GLuint; v3: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1706   TglProgramUniform1f                       = procedure(aProgram: GLuint; aLocation: GLint; v0: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1707   TglProgramUniform2f                       = procedure(aProgram: GLuint; aLocation: GLint; v0: GLfloat; v1: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1708   TglProgramUniform3f                       = procedure(aProgram: GLuint; aLocation: GLint; v0: GLfloat; v1: GLfloat; v2: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1709   TglProgramUniform4f                       = procedure(aProgram: GLuint; aLocation: GLint; v0: GLfloat; v1: GLfloat; v2: GLfloat; v3: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1710   TglProgramUniform1iv                      = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1711   TglProgramUniform2iv                      = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1712   TglProgramUniform3iv                      = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1713   TglProgramUniform4iv                      = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1714   TglProgramUniform1uiv                     = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1715   TglProgramUniform2uiv                     = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1716   TglProgramUniform3uiv                     = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1717   TglProgramUniform4uiv                     = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1718   TglProgramUniform1fv                      = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1719   TglProgramUniform2fv                      = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1720   TglProgramUniform3fv                      = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1721   TglProgramUniform4fv                      = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1722   TglProgramUniformMatrix2fv                = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1723   TglProgramUniformMatrix3fv                = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1724   TglProgramUniformMatrix4fv                = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1725   TglProgramUniformMatrix2x3fv              = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1726   TglProgramUniformMatrix3x2fv              = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1727   TglProgramUniformMatrix2x4fv              = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1728   TglProgramUniformMatrix4x2fv              = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1729   TglProgramUniformMatrix3x4fv              = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1730   TglProgramUniformMatrix4x3fv              = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1731   TglValidateProgramPipeline                = procedure(aPipeline: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1732   TglGetProgramPipelineInfoLog              = procedure(aPipeline: GLuint; aBufSize: GLsizei; aLength: PGLsizei; aInfoLog: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1733   TglBindImageTexture                       = procedure(aUnit: GLuint; aTexture: GLuint; aLevel: GLint; aLayered: GLboolean; aLayer: GLint; aAccess: GLenum; aFormat: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1734   TglGetBooleaniv                           = procedure(aTarget: GLenum; aIndex: GLuint; aData: PGLboolean); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1735   TglMemoryBarrier                          = procedure(aBarriers: GLbitfield); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1736   TglMemoryBarrierByRegion                  = procedure(aBarriers: GLbitfield); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1737   TglTexStorage2DMultisample                = procedure(aTarget: GLenum; aSamples: GLsizei; aInternalformat: GLenum; aWidth: GLsizei; aHeight: GLsizei; aFixedsamplelocations: GLboolean); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1738   TglGetMultisamplefv                       = procedure(aPname: GLenum; aIndex: GLuint; aVal: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1739   TglSampleMaski                            = procedure(aMaskNumber: GLuint; aMask: GLbitfield); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1740   TglGetTexLevelParameteriv                 = procedure(aTarget: GLenum; aLevel: GLint; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1741   TglGetTexLevelParameterfv                 = procedure(aTarget: GLenum; aLevel: GLint; aPname: GLenum; aParams: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1742   TglBindVertexBuffer                       = procedure(aBindingindex: GLuint; aBuffer: GLuint; aOffset: GLintptr; aStride: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1743   TglVertexAttribFormat                     = procedure(aAttribindex: GLuint; aSize: GLint; aType: GLenum; aNormalized: GLboolean; aRelativeoffset: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1744   TglVertexAttribIFormat                    = procedure(aAttribindex: GLuint; aSize: GLint; aType: GLenum; aRelativeoffset: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1745   TglVertexAttribBinding                    = procedure(aAttribindex: GLuint; aBindingindex: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1746   TglVertexBindingDivisor                   = procedure(aBindingindex: GLuint; aDivisor: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1747 {$ENDIF}
1748
1749 {$IFDEF OPENGLES_CORE_1_1}
1750 var
1751 { ============================================== OpenGL ES 1.1 ======================================================= }
1752 { Available only in Common profile }
1753   glAlphaFunc:                              TglAlphaFunc;
1754   glClearColor:                             TglClearColor;
1755   glClearDepthf:                            TglClearDepthf;
1756   glClipPlanef:                             TglClipPlanef;
1757   glColor4f:                                TglColor4f;
1758   glDepthRangef:                            TglDepthRangef;
1759   glFogf:                                   TglFogf;
1760   glFogfv:                                  TglFogfv;
1761   glFrustumf:                               TglFrustumf;
1762   glGetClipPlanef:                          TglGetClipPlanef;
1763   glGetFloatv:                              TglGetFloatv;
1764   glGetLightfv:                             TglGetLightfv;
1765   glGetMaterialfv:                          TglGetMaterialfv;
1766   glGetTexEnvfv:                            TglGetTexEnvfv;
1767   glGetTexParameterfv:                      TglGetTexParameterfv;
1768   glLightModelf:                            TglLightModelf;
1769   glLightModelfv:                           TglLightModelfv;
1770   glLightf:                                 TglLightf;
1771   glLightfv:                                TglLightfv;
1772   glLineWidth:                              TglLineWidth;
1773   glLoadMatrixf:                            TglLoadMatrixf;
1774   glMaterialf:                              TglMaterialf;
1775   glMaterialfv:                             TglMaterialfv;
1776   glMultMatrixf:                            TglMultMatrixf;
1777   glMultiTexCoord4f:                        TglMultiTexCoord4f;
1778   glNormal3f:                               TglNormal3f;
1779   glOrthof:                                 TglOrthof;
1780   glPointParameterf:                        TglPointParameterf;
1781   glPointParameterfv:                       TglPointParameterfv;
1782   glPointSize:                              TglPointSize;
1783   glPolygonOffset:                          TglPolygonOffset;
1784   glRotatef:                                TglRotatef;
1785   glScalef:                                 TglScalef;
1786   glTexEnvf:                                TglTexEnvf;
1787   glTexEnvfv:                               TglTexEnvfv;
1788   glTexParameterf:                          TglTexParameterf;
1789   glTexParameterfv:                         TglTexParameterfv;
1790   glTranslatef:                             TglTranslatef;
1791
1792 { Available in both Common and Common-Lite profiles }
1793   glActiveTexture:                          TglActiveTexture;
1794   glAlphaFuncx:                             TglAlphaFuncx;
1795   glBindBuffer:                             TglBindBuffer;
1796   glBindTexture:                            TglBindTexture;
1797   glBlendFunc:                              TglBlendFunc;
1798   glBufferData:                             TglBufferData;
1799   glBufferSubData:                          TglBufferSubData;
1800   glClear:                                  TglClear;
1801   glClearColorx:                            TglClearColorx;
1802   glClearDepthx:                            TglClearDepthx;
1803   glClearStencil:                           TglClearStencil;
1804   glClientActiveTexture:                    TglClientActiveTexture;
1805   glClipPlanex:                             TglClipPlanex;
1806   glColor4ub:                               TglColor4ub;
1807   glColor4x:                                TglColor4x;
1808   glColorMask:                              TglColorMask;
1809   glColorPointer:                           TglColorPointer;
1810   glCompressedTexImage2D:                   TglCompressedTexImage2D;
1811   glCompressedTexSubImage2D:                TglCompressedTexSubImage2D;
1812   glCopyTexImage2D:                         TglCopyTexImage2D;
1813   glCopyTexSubImage2D:                      TglCopyTexSubImage2D;
1814   glCullFace:                               TglCullFace;
1815   glDeleteBuffers:                          TglDeleteBuffers;
1816   glDeleteTextures:                         TglDeleteTextures;
1817   glDepthFunc:                              TglDepthFunc;
1818   glDepthMask:                              TglDepthMask;
1819   glDepthRangex:                            TglDepthRangex;
1820   glDisable:                                TglDisable;
1821   glDisableClientState:                     TglDisableClientState;
1822   glDrawArrays:                             TglDrawArrays;
1823   glDrawElements:                           TglDrawElements;
1824   glEnable:                                 TglEnable;
1825   glEnableClientState:                      TglEnableClientState;
1826   glFinish:                                 TglFinish;
1827   glFlush:                                  TglFlush;
1828   glFogx:                                   TglFogx;
1829   glFogxv:                                  TglFogxv;
1830   glFrontFace:                              TglFrontFace;
1831   glFrustumx:                               TglFrustumx;
1832   glGetBooleanv:                            TglGetBooleanv;
1833   glGetBufferParameteriv:                   TglGetBufferParameteriv;
1834   glGetClipPlanex:                          TglGetClipPlanex;
1835   glGenBuffers:                             TglGenBuffers;
1836   glGenTextures:                            TglGenTextures;
1837   glGetError:                               TglGetError;
1838   glGetFixedv:                              TglGetFixedv;
1839   glGetIntegerv:                            TglGetIntegerv;
1840   glGetLightxv:                             TglGetLightxv;
1841   glGetMaterialxv:                          TglGetMaterialxv;
1842   glGetPointerv:                            TglGetPointerv;
1843   glGetString:                              TglGetString;
1844   glGetTexEnviv:                            TglGetTexEnviv;
1845   glGetTexEnvxv:                            TglGetTexEnvxv;
1846   glGetTexParameteriv:                      TglGetTexParameteriv;
1847   glGetTexParameterxv:                      TglGetTexParameterxv;
1848   glHint:                                   TglHint;
1849   glIsBuffer:                               TglIsBuffer;
1850   glIsEnabled:                              TglIsEnabled;
1851   glIsTexture:                              TglIsTexture;
1852   glLightModelx:                            TglLightModelx;
1853   glLightModelxv:                           TglLightModelxv;
1854   glLightx:                                 TglLightx;
1855   glLightxv:                                TglLightxv;
1856   glLineWidthx:                             TglLineWidthx;
1857   glLoadIdentity:                           TglLoadIdentity;
1858   glLoadMatrix:                             TglLoadMatrix;
1859   glLogicOp:                                TglLogicOp;
1860   glMaterialx:                              TglMaterialx;
1861   glMaterialxv:                             TglMaterialxv;
1862   glMatrixMode:                             TglMatrixMode;
1863   glMultMatrixx:                            TglMultMatrixx;
1864   glMultiTexCoord4x:                        TglMultiTexCoord4x;
1865   glNormal3x:                               TglNormal3x;
1866   glNormalPointer:                          TglNormalPointer;
1867   glOrthox:                                 TglOrthox;
1868   glPixelStorei:                            TglPixelStorei;
1869   glPointParameterx:                        TglPointParameterx;
1870   glPointParameterxv:                       TglPointParameterxv;
1871   glPointSizex:                             TglPointSizex;
1872   glPolygonOffsetx:                         TglPolygonOffsetx;
1873   glPopMatrix:                              TglPopMatrix;
1874   glPushMatrix:                             TglPushMatrix;
1875   glReadPixels:                             TglReadPixels;
1876   glRotatex:                                TglRotatex;
1877   glSampleCoverage:                         TglSampleCoverage;
1878   glSampleCoveragex:                        TglSampleCoveragex;
1879   glScalex:                                 TglScalex;
1880   glScissor:                                TglScissor;
1881   glShadeModel:                             TglShadeModel;
1882   glStencilFunc:                            TglStencilFunc;
1883   glStencilMask:                            TglStencilMask;
1884   glStencilOp:                              TglStencilOp;
1885   glTexCoordPointer:                        TglTexCoordPointer;
1886   glTexEnvi:                                TglTexEnvi;
1887   glTexEnvx:                                TglTexEnvx;
1888   glTexEnviv:                               TglTexEnviv;
1889   glTexEnvxv:                               TglTexEnvxv;
1890   glTexImage2D:                             TglTexImage2D;
1891   glTexParameteri:                          TglTexParameteri;
1892   glTexParameterx:                          TglTexParameterx;
1893   glTexParameteriv:                         TglTexParameteriv;
1894   glTexParameterxv:                         TglTexParameterxv;
1895   glTexSubImage2D:                          TglTexSubImage2D;
1896   glTranslatex:                             TglTranslatex;
1897   glVertexPointer:                          TglVertexPointer;
1898   glViewport:                               TglViewport;
1899 {$ENDIF}
1900
1901 {$IFDEF OPENGLES_CORE_2_0}
1902 var
1903 { ============================================== OpenGL ES 2.0 ======================================================= }
1904   glAttachShader:                           TglAttachShader;
1905   glBindAttribLocation:                     TglBindAttribLocation;
1906   glBindFramebuffer:                        TglBindFramebuffer;
1907   glBindRenderbuffer:                       TglBindRenderbuffer;
1908   glBlendColor:                             TglBlendColor;
1909   glBlendEquation:                          TglBlendEquation;
1910   glBlendEquationSeparate:                  TglBlendEquationSeparate;
1911   glBlendFuncSeparate:                      TglBlendFuncSeparate;
1912   glCheckFramebufferStatus:                 TglCheckFramebufferStatus;
1913   glCompileShader:                          TglCompileShader;
1914   glCreateProgram:                          TglCreateProgram;
1915   glCreateShader:                           TglCreateShader;
1916   glDeleteFramebuffers:                     TglDeleteFramebuffers;
1917   glDeleteProgram:                          TglDeleteProgram;
1918   glDeleteRenderbuffers:                    TglDeleteRenderbuffers;
1919   glDeleteShader:                           TglDeleteShader;
1920   glDetachShader:                           TglDetachShader;
1921   glDisableVertexAttribArray:               TglDisableVertexAttribArray;
1922   glEnableVertexAttribArray:                TglEnableVertexAttribArray;
1923   glFramebufferRenderbuffer:                TglFramebufferRenderbuffer;
1924   glFramebufferTexture2D:                   TglFramebufferTexture2D;
1925   glGenerateMipmap:                         TglGenerateMipmap;
1926   glGenFramebuffers:                        TglGenFramebuffers;
1927   glGenRenderbuffers:                       TglGenRenderbuffers;
1928   glGetActiveAttrib:                        TglGetActiveAttrib;
1929   glGetActiveUniform:                       TglGetActiveUniform;
1930   glGetAttachedShaders:                     TglGetAttachedShaders;
1931   glGetAttribLocation:                      TglGetAttribLocation;
1932   glGetFramebufferAttachmentParameteriv:    TglGetFramebufferAttachmentParameteriv;
1933   glGetProgramiv:                           TglGetProgramiv;
1934   glGetProgramInfoLog:                      TglGetProgramInfoLog;
1935   glGetRenderbufferParameteriv:             TglGetRenderbufferParameteriv;
1936   glGetShaderiv:                            TglGetShaderiv;
1937   glGetShaderInfoLog:                       TglGetShaderInfoLog;
1938   glGetShaderPrecisionFormat:               TglGetShaderPrecisionFormat;
1939   glGetShaderSource:                        TglGetShaderSource;
1940   glGetUniformfv:                           TglGetUniformfv;
1941   glGetUniformiv:                           TglGetUniformiv;
1942   glGetUniformLocation:                     TglGetUniformLocation;
1943   glGetVertexAttribfv:                      TglGetVertexAttribfv;
1944   glGetVertexAttribiv:                      TglGetVertexAttribiv;
1945   glGetVertexAttribPointerv:                TglGetVertexAttribPointerv;
1946   glIsFramebuffer:                          TglIsFramebuffer;
1947   glIsProgram:                              TglIsProgram;
1948   glIsRenderbuffer:                         TglIsRenderbuffer;
1949   glIsShader:                               TglIsShader;
1950   glLinkProgram:                            TglLinkProgram;
1951   glReleaseShaderCompiler:                  TglReleaseShaderCompiler;
1952   glRenderbufferStorage:                    TglRenderbufferStorage;
1953   glShaderBinary:                           TglShaderBinary;
1954   glShaderSource:                           TglShaderSource;
1955   glStencilFuncSeparate:                    TglStencilFuncSeparate;
1956   glStencilMaskSeparate:                    TglStencilMaskSeparate;
1957   glStencilOpSeparate:                      TglStencilOpSeparate;
1958   glUniform1f:                              TglUniform1f;
1959   glUniform1fv:                             TglUniform1fv;
1960   glUniform1i:                              TglUniform1i;
1961   glUniform1iv:                             TglUniform1iv;
1962   glUniform2f:                              TglUniform2f;
1963   glUniform2fv:                             TglUniform2fv;
1964   glUniform2i:                              TglUniform2i;
1965   glUniform2iv:                             TglUniform2iv;
1966   glUniform3f:                              TglUniform3f;
1967   glUniform3fv:                             TglUniform3fv;
1968   glUniform3i:                              TglUniform3i;
1969   glUniform3iv:                             TglUniform3iv;
1970   glUniform4f:                              TglUniform4f;
1971   glUniform4fv:                             TglUniform4fv;
1972   glUniform4i:                              TglUniform4i;
1973   glUniform4iv:                             TglUniform4iv;
1974   glUniformMatrix2fv:                       TglUniformMatrix2fv;
1975   glUniformMatrix3fv:                       TglUniformMatrix3fv;
1976   glUniformMatrix4fv:                       TglUniformMatrix4fv;
1977   glUseProgram:                             TglUseProgram;
1978   glValidateProgram:                        TglValidateProgram;
1979   glVertexAttrib1f:                         TglVertexAttrib1f;
1980   glVertexAttrib1fv:                        TglVertexAttrib1fv;
1981   glVertexAttrib2f:                         TglVertexAttrib2f;
1982   glVertexAttrib2fv:                        TglVertexAttrib2fv;
1983   glVertexAttrib3f:                         TglVertexAttrib3f;
1984   glVertexAttrib3fv:                        TglVertexAttrib3fv;
1985   glVertexAttrib4f:                         TglVertexAttrib4f;
1986   glVertexAttrib4fv:                        TglVertexAttrib4fv;
1987   glVertexAttribPointer:                    TglVertexAttribPointer;
1988 {$ENDIF}
1989
1990 {$IFDEF OPENGLES_CORE_3_0}
1991 { ============================================== OpenGL ES 3.0 ======================================================= }
1992 var
1993   glReadBuffer:                             TglReadBuffer;
1994   glDrawRangeElements:                      TglDrawRangeElements;
1995   glTexImage3D:                             TglTexImage3D;
1996   glTexSubImage3D:                          TglTexSubImage3D;
1997   glCopyTexSubImage3D:                      TglCopyTexSubImage3D;
1998   glCompressedTexImage3D:                   TglCompressedTexImage3D;
1999   glCompressedTexSubImage3D:                TglCompressedTexSubImage3D;
2000   glGenQueries:                             TglGenQueries;
2001   glDeleteQueries:                          TglDeleteQueries;
2002   glIsQuery:                                TglIsQuery;
2003   glBeginQuery:                             TglBeginQuery;
2004   glEndQuery:                               TglEndQuery;
2005   glGetQueryiv:                             TglGetQueryiv;
2006   glGetQueryObjectuiv:                      TglGetQueryObjectuiv;
2007   glUnmapBuffer:                            TglUnmapBuffer;
2008   glGetBufferPointerv:                      TglGetBufferPointerv;
2009   glDrawBuffers:                            TglDrawBuffers;
2010   glUniformMatrix2x3fv:                     TglUniformMatrix2x3fv;
2011   glUniformMatrix3x2fv:                     TglUniformMatrix3x2fv;
2012   glUniformMatrix2x4fv:                     TglUniformMatrix2x4fv;
2013   glUniformMatrix4x2fv:                     TglUniformMatrix4x2fv;
2014   glUniformMatrix3x4fv:                     TglUniformMatrix3x4fv;
2015   glUniformMatrix4x3fv:                     TglUniformMatrix4x3fv;
2016   glBlitFramebuffer:                        TglBlitFramebuffer;
2017   glRenderbufferStorageMultisample:         TglRenderbufferStorageMultisample;
2018   glFramebufferTextureLayer:                TglFramebufferTextureLayer;
2019   glMapBufferRange:                         TglMapBufferRange;
2020   glFlushMappedBufferRange:                 TglFlushMappedBufferRange;
2021   glBindVertexArray:                        TglBindVertexArray;
2022   glDeleteVertexArrays:                     TglDeleteVertexArrays;
2023   glGenVertexArrays:                        TglGenVertexArrays;
2024   glIsVertexArray:                          TglIsVertexArray;
2025   glGetIntegeriv:                           TglGetIntegeriv;
2026   glBeginTransformFeedback:                 TglBeginTransformFeedback;
2027   glEndTransformFeedback:                   TglEndTransformFeedback;
2028   glBindBufferRange:                        TglBindBufferRange;
2029   glBindBufferBase:                         TglBindBufferBase;
2030   glTransformFeedbackVaryings:              TglTransformFeedbackVaryings;
2031   glGetTransformFeedbackVarying:            TglGetTransformFeedbackVarying;
2032   glVertexAttribIPointer:                   TglVertexAttribIPointer;
2033   glGetVertexAttribIiv:                     TglGetVertexAttribIiv;
2034   glGetVertexAttribIuiv:                    TglGetVertexAttribIuiv;
2035   glVertexAttribI4i:                        TglVertexAttribI4i;
2036   glVertexAttribI4ui:                       TglVertexAttribI4ui;
2037   glVertexAttribI4iv:                       TglVertexAttribI4iv;
2038   glVertexAttribI4uiv:                      TglVertexAttribI4uiv;
2039   glGetUniformuiv:                          TglGetUniformuiv;
2040   glGetFragDataLocation:                    TglGetFragDataLocation;
2041   glUniform1ui:                             TglUniform1ui;
2042   glUniform2ui:                             TglUniform2ui;
2043   glUniform3ui:                             TglUniform3ui;
2044   glUniform4ui:                             TglUniform4ui;
2045   glUniform1uiv:                            TglUniform1uiv;
2046   glUniform2uiv:                            TglUniform2uiv;
2047   glUniform3uiv:                            TglUniform3uiv;
2048   glUniform4uiv:                            TglUniform4uiv;
2049   glClearBufferiv:                          TglClearBufferiv;
2050   glClearBufferuiv:                         TglClearBufferuiv;
2051   glClearBufferfv:                          TglClearBufferfv;
2052   glClearBufferfi:                          TglClearBufferfi;
2053   glGetStringi:                             TglGetStringi;
2054   glCopyBufferSubData:                      TglCopyBufferSubData;
2055   glGetUniformIndices:                      TglGetUniformIndices;
2056   glGetActiveUniformsiv:                    TglGetActiveUniformsiv;
2057   glGetUniformBlockIndex:                   TglGetUniformBlockIndex;
2058   glGetActiveUniformBlockiv:                TglGetActiveUniformBlockiv;
2059   glGetActiveUniformBlockName:              TglGetActiveUniformBlockName;
2060   glUniformBlockBinding:                    TglUniformBlockBinding;
2061   glDrawArraysInstanced:                    TglDrawArraysInstanced;
2062   glDrawElementsInstanced:                  TglDrawElementsInstanced;
2063   glFenceSync:                              TglFenceSync;
2064   glIsSync:                                 TglIsSync;
2065   glDeleteSync:                             TglDeleteSync;
2066   glClientWaitSync:                         TglClientWaitSync;
2067   glWaitSync:                               TglWaitSync;
2068   glGetInteger64v:                          TglGetInteger64v;
2069   glGetSynciv:                              TglGetSynciv;
2070   glGetInteger64iv:                         TglGetInteger64iv;
2071   glGetBufferParameteri64v:                 TglGetBufferParameteri64v;
2072   glGenSamplers:                            TglGenSamplers;
2073   glDeleteSamplers:                         TglDeleteSamplers;
2074   glIsSampler:                              TglIsSampler;
2075   glBindSampler:                            TglBindSampler;
2076   glSamplerParameteri:                      TglSamplerParameteri;
2077   glSamplerParameteriv:                     TglSamplerParameteriv;
2078   glSamplerParameterf:                      TglSamplerParameterf;
2079   glSamplerParameterfv:                     TglSamplerParameterfv;
2080   glGetSamplerParameteriv:                  TglGetSamplerParameteriv;
2081   glGetSamplerParameterfv:                  TglGetSamplerParameterfv;
2082   glVertexAttribDivisor:                    TglVertexAttribDivisor;
2083   glBindTransformFeedback:                  TglBindTransformFeedback;
2084   glDeleteTransformFeedbacks:               TglDeleteTransformFeedbacks;
2085   glGenTransformFeedbacks:                  TglGenTransformFeedbacks;
2086   glIsTransformFeedback:                    TglIsTransformFeedback;
2087   glPauseTransformFeedback:                 TglPauseTransformFeedback;
2088   glResumeTransformFeedback:                TglResumeTransformFeedback;
2089   glGetProgramBinary:                       TglGetProgramBinary;
2090   glProgramBinary:                          TglProgramBinary;
2091   glProgramParameteri:                      TglProgramParameteri;
2092   glInvalidateFramebuffer:                  TglInvalidateFramebuffer;
2093   glInvalidateSubFramebuffer:               TglInvalidateSubFramebuffer;
2094   glTexStorage2D:                           TglTexStorage2D;
2095   glTexStorage3D:                           TglTexStorage3D;
2096   glGetInternalformativ:                    TglGetInternalformativ;
2097 {$ENDIF}
2098
2099 {$IFDEF OPENGLES_CORE_3_1}
2100 { ============================================== OpenGL ES 3.1 ======================================================= }
2101 var
2102   glDispatchCompute:                        TglDispatchCompute;
2103   glDispatchComputeIndirect:                TglDispatchComputeIndirect;
2104   glDrawArraysIndirect:                     TglDrawArraysIndirect;
2105   glDrawElementsIndirect:                   TglDrawElementsIndirect;
2106   glFramebufferParameteri:                  TglFramebufferParameteri;
2107   glGetFramebufferParameteriv:              TglGetFramebufferParameteriv;
2108   glGetProgramInterfaceiv:                  TglGetProgramInterfaceiv;
2109   glGetProgramResourceIndex:                TglGetProgramResourceIndex;
2110   glGetProgramResourceName:                 TglGetProgramResourceName;
2111   glGetProgramResourceiv:                   TglGetProgramResourceiv;
2112   glGetProgramResourceLocation:             TglGetProgramResourceLocation;
2113   glUseProgramStages:                       TglUseProgramStages;
2114   glActiveShaderProgram:                    TglActiveShaderProgram;
2115   glCreateShaderProgramv:                   TglCreateShaderProgramv;
2116   glBindProgramPipeline:                    TglBindProgramPipeline;
2117   glDeleteProgramPipelines:                 TglDeleteProgramPipelines;
2118   glGenProgramPipelines:                    TglGenProgramPipelines;
2119   glIsProgramPipeline:                      TglIsProgramPipeline;
2120   glGetProgramPipelineiv:                   TglGetProgramPipelineiv;
2121   glProgramUniform1i:                       TglProgramUniform1i;
2122   glProgramUniform2i:                       TglProgramUniform2i;
2123   glProgramUniform3i:                       TglProgramUniform3i;
2124   glProgramUniform4i:                       TglProgramUniform4i;
2125   glProgramUniform1ui:                      TglProgramUniform1ui;
2126   glProgramUniform2ui:                      TglProgramUniform2ui;
2127   glProgramUniform3ui:                      TglProgramUniform3ui;
2128   glProgramUniform4ui:                      TglProgramUniform4ui;
2129   glProgramUniform1f:                       TglProgramUniform1f;
2130   glProgramUniform2f:                       TglProgramUniform2f;
2131   glProgramUniform3f:                       TglProgramUniform3f;
2132   glProgramUniform4f:                       TglProgramUniform4f;
2133   glProgramUniform1iv:                      TglProgramUniform1iv;
2134   glProgramUniform2iv:                      TglProgramUniform2iv;
2135   glProgramUniform3iv:                      TglProgramUniform3iv;
2136   glProgramUniform4iv:                      TglProgramUniform4iv;
2137   glProgramUniform1uiv:                     TglProgramUniform1uiv;
2138   glProgramUniform2uiv:                     TglProgramUniform2uiv;
2139   glProgramUniform3uiv:                     TglProgramUniform3uiv;
2140   glProgramUniform4uiv:                     TglProgramUniform4uiv;
2141   glProgramUniform1fv:                      TglProgramUniform1fv;
2142   glProgramUniform2fv:                      TglProgramUniform2fv;
2143   glProgramUniform3fv:                      TglProgramUniform3fv;
2144   glProgramUniform4fv:                      TglProgramUniform4fv;
2145   glProgramUniformMatrix2fv:                TglProgramUniformMatrix2fv;
2146   glProgramUniformMatrix3fv:                TglProgramUniformMatrix3fv;
2147   glProgramUniformMatrix4fv:                TglProgramUniformMatrix4fv;
2148   glProgramUniformMatrix2x3fv:              TglProgramUniformMatrix2x3fv;
2149   glProgramUniformMatrix3x2fv:              TglProgramUniformMatrix3x2fv;
2150   glProgramUniformMatrix2x4fv:              TglProgramUniformMatrix2x4fv;
2151   glProgramUniformMatrix4x2fv:              TglProgramUniformMatrix4x2fv;
2152   glProgramUniformMatrix3x4fv:              TglProgramUniformMatrix3x4fv;
2153   glProgramUniformMatrix4x3fv:              TglProgramUniformMatrix4x3fv;
2154   glValidateProgramPipeline:                TglValidateProgramPipeline;
2155   glGetProgramPipelineInfoLog:              TglGetProgramPipelineInfoLog;
2156   glBindImageTexture:                       TglBindImageTexture;
2157   glGetBooleaniv:                           TglGetBooleaniv;
2158   glMemoryBarrier:                          TglMemoryBarrier;
2159   glMemoryBarrierByRegion:                  TglMemoryBarrierByRegion;
2160   glTexStorage2DMultisample:                TglTexStorage2DMultisample;
2161   glGetMultisamplefv:                       TglGetMultisamplefv;
2162   glSampleMaski:                            TglSampleMaski;
2163   glGetTexLevelParameteriv:                 TglGetTexLevelParameteriv;
2164   glGetTexLevelParameterfv:                 TglGetTexLevelParameterfv;
2165   glBindVertexBuffer:                       TglBindVertexBuffer;
2166   glVertexAttribFormat:                     TglVertexAttribFormat;
2167   glVertexAttribIFormat:                    TglVertexAttribIFormat;
2168   glVertexAttribBinding:                    TglVertexAttribBinding;
2169   glVertexBindingDivisor:                   TglVertexBindingDivisor;
2170 {$ENDIF}
2171
2172 {$IFDEF OPENGLES_EXTENSIONS}
2173 { =============================================== Extensions ========================================================= }
2174 { GL_KHR_blend_equation_advanced }
2175 const
2176   GL_MULTIPLY_KHR                                         = $9294;
2177   GL_SCREEN_KHR                                           = $9295;
2178   GL_OVERLAY_KHR                                          = $9296;
2179   GL_DARKEN_KHR                                           = $9297;
2180   GL_LIGHTEN_KHR                                          = $9298;
2181   GL_COLORDODGE_KHR                                       = $9299;
2182   GL_COLORBURN_KHR                                        = $929A;
2183   GL_HARDLIGHT_KHR                                        = $929B;
2184   GL_SOFTLIGHT_KHR                                        = $929C;
2185   GL_DIFFERENCE_KHR                                       = $929E;
2186   GL_EXCLUSION_KHR                                        = $92A0;
2187   GL_HSL_HUE_KHR                                          = $92AD;
2188   GL_HSL_SATURATION_KHR                                   = $92AE;
2189   GL_HSL_COLOR_KHR                                        = $92AF;
2190   GL_HSL_LUMINOSITY_KHR                                   = $92B0;
2191 type
2192   TglBlendBarrierKHR                                      = procedure; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2193 var
2194   glBlendBarrierKHR:                                        TglBlendBarrierKHR;
2195
2196 { GL_KHR_blend_equation_advanced_coherent }
2197 const
2198   GL_BLEND_ADVANCED_COHERENT_KHR                          = $9285;
2199
2200 { GL_KHR_context_flush_control }
2201 const
2202   GL_CONTEXT_RELEASE_BEHAVIOR_KHR                         = $82FB;
2203   GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_KHR                   = $82FC;
2204
2205 { GL_KHR_debug }
2206 const
2207   GL_SAMPLER                                              = $82E6;
2208   GL_DEBUG_OUTPUT_SYNCHRONOUS_KHR                         = $8242;
2209   GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_KHR                 = $8243;
2210   GL_DEBUG_CALLBACK_FUNCTION_KHR                          = $8244;
2211   GL_DEBUG_CALLBACK_USER_PARAM_KHR                        = $8245;
2212   GL_DEBUG_SOURCE_API_KHR                                 = $8246;
2213   GL_DEBUG_SOURCE_WINDOW_SYSTEM_KHR                       = $8247;
2214   GL_DEBUG_SOURCE_SHADER_COMPILER_KHR                     = $8248;
2215   GL_DEBUG_SOURCE_THIRD_PARTY_KHR                         = $8249;
2216   GL_DEBUG_SOURCE_APPLICATION_KHR                         = $824A;
2217   GL_DEBUG_SOURCE_OTHER_KHR                               = $824B;
2218   GL_DEBUG_TYPE_ERROR_KHR                                 = $824C;
2219   GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_KHR                   = $824D;
2220   GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_KHR                    = $824E;
2221   GL_DEBUG_TYPE_PORTABILITY_KHR                           = $824F;
2222   GL_DEBUG_TYPE_PERFORMANCE_KHR                           = $8250;
2223   GL_DEBUG_TYPE_OTHER_KHR                                 = $8251;
2224   GL_DEBUG_TYPE_MARKER_KHR                                = $8268;
2225   GL_DEBUG_TYPE_PUSH_GROUP_KHR                            = $8269;
2226   GL_DEBUG_TYPE_POP_GROUP_KHR                             = $826A;
2227   GL_DEBUG_SEVERITY_NOTIFICATION_KHR                      = $826B;
2228   GL_MAX_DEBUG_GROUP_STACK_DEPTH_KHR                      = $826C;
2229   GL_DEBUG_GROUP_STACK_DEPTH_KHR                          = $826D;
2230   GL_BUFFER_KHR                                           = $82E0;
2231   GL_SHADER_KHR                                           = $82E1;
2232   GL_PROGRAM_KHR                                          = $82E2;
2233   GL_VERTEX_ARRAY_KHR                                     = $8074;
2234   GL_QUERY_KHR                                            = $82E3;
2235   GL_SAMPLER_KHR                                          = $82E6;
2236   GL_MAX_LABEL_LENGTH_KHR                                 = $82E8;
2237   GL_MAX_DEBUG_MESSAGE_LENGTH_KHR                         = $9143;
2238   GL_MAX_DEBUG_LOGGED_MESSAGES_KHR                        = $9144;
2239   GL_DEBUG_LOGGED_MESSAGES_KHR                            = $9145;
2240   GL_DEBUG_SEVERITY_HIGH_KHR                              = $9146;
2241   GL_DEBUG_SEVERITY_MEDIUM_KHR                            = $9147;
2242   GL_DEBUG_SEVERITY_LOW_KHR                               = $9148;
2243   GL_DEBUG_OUTPUT_KHR                                     = $92E0;
2244   GL_CONTEXT_FLAG_DEBUG_BIT_KHR                           = $00000002;
2245   GL_STACK_OVERFLOW_KHR                                   = $0503;
2246   GL_STACK_UNDERFLOW_KHR                                  = $0504;
2247 type
2248   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}
2249   TglDebugMessageControlKHR                               = procedure(aSource: GLenum; aType: GLenum; aSeverity: GLenum; aCount: GLsizei; const aIds: PGLuint; aEnabled: GLboolean); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2250   TglDebugMessageInsertKHR                                = procedure(aSource: GLenum; aType: GLenum; aId: GLuint; aSeverity: GLenum; aLength: GLsizei; const aBuf: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2251   TglDebugMessageCallbackKHR                              = procedure(aCallback: TglDebugProcKHR; const aUserParam: Pointer); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2252   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}
2253   TglPushDebugGroupKHR                                    = procedure(aSource: GLenum; aId: GLuint; aLength: GLsizei; const aMessage: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2254   TglPopDebugGroupKHR                                     = procedure; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2255   TglObjectLabelKHR                                       = procedure(aIdentifier: GLenum; aName: GLuint; aLength: GLsizei; const aLabel: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2256   TglGetObjectLabelKHR                                    = procedure(aIdentifier: GLenum; aName: GLuint; aBufSize: GLsizei; aLength: PGLsizei; aLabel: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2257   TglObjectPtrLabelKHR                                    = procedure(const aPtr: Pointer; aLength: GLsizei; const aLabel: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2258   TglGetObjectPtrLabelKHR                                 = procedure(const aPtr: Pointer; aBufSize: GLsizei; aLength: PGLsizei; aLabel: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2259   TglGetPointervKHR                                       = procedure(aPname: GLenum; aParams: PPGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2260 var
2261   glDebugMessageControlKHR:                                 TglDebugMessageControlKHR;
2262   glDebugMessageInsertKHR:                                  TglDebugMessageInsertKHR;
2263   glDebugMessageCallbackKHR:                                TglDebugMessageCallbackKHR;
2264   glGetDebugMessageLogKHR:                                  TglGetDebugMessageLogKHR;
2265   glPushDebugGroupKHR:                                      TglPushDebugGroupKHR;
2266   glPopDebugGroupKHR:                                       TglPopDebugGroupKHR;
2267   glObjectLabelKHR:                                         TglObjectLabelKHR;
2268   glGetObjectLabelKHR:                                      TglGetObjectLabelKHR;
2269   glObjectPtrLabelKHR:                                      TglObjectPtrLabelKHR;
2270   glGetObjectPtrLabelKHR:                                   TglGetObjectPtrLabelKHR;
2271   glGetPointervKHR:                                         TglGetPointervKHR;
2272
2273 { GL_KHR_robust_buffer_access_behavior }
2274   // none
2275
2276 { GL_KHR_robustness }
2277 const
2278   GL_CONTEXT_ROBUST_ACCESS_KHR                            = $90F3;
2279   GL_LOSE_CONTEXT_ON_RESET_KHR                            = $8252;
2280   GL_GUILTY_CONTEXT_RESET_KHR                             = $8253;
2281   GL_INNOCENT_CONTEXT_RESET_KHR                           = $8254;
2282   GL_UNKNOWN_CONTEXT_RESET_KHR                            = $8255;
2283   GL_RESET_NOTIFICATION_STRATEGY_KHR                      = $8256;
2284   GL_NO_RESET_NOTIFICATION_KHR                            = $8261;
2285   GL_CONTEXT_LOST_KHR                                     = $0507;
2286 type
2287   TglGetGraphicsResetStatusKHR                            = function : GLenum; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2288   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}
2289   TglGetnUniformfvKHR                                     = procedure(aProgram: GLuint; aLocation: GLint; aBufSize: GLsizei; aParams: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2290   TglGetnUniformivKHR                                     = procedure(aProgram: GLuint; aLocation: GLint; aBufSize: GLsizei; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2291   TglGetnUniformuivKHR                                    = procedure(aProgram: GLuint; aLocation: GLint; aBufSize: GLsizei; aParams: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2292 var
2293   glGetGraphicsResetStatusKHR:                              TglGetGraphicsResetStatusKHR;
2294   glReadnPixelsKHR:                                         TglReadnPixelsKHR;
2295   glGetnUniformfvKHR:                                       TglGetnUniformfvKHR;
2296   glGetnUniformivKHR:                                       TglGetnUniformivKHR;
2297   glGetnUniformuivKHR:                                      TglGetnUniformuivKHR;
2298
2299 { GL_KHR_texture_compression_astc_hdr }
2300 const
2301   GL_COMPRESSED_RGBA_ASTC_4x4_KHR                         = $93B0;
2302   GL_COMPRESSED_RGBA_ASTC_5x4_KHR                         = $93B1;
2303   GL_COMPRESSED_RGBA_ASTC_5x5_KHR                         = $93B2;
2304   GL_COMPRESSED_RGBA_ASTC_6x5_KHR                         = $93B3;
2305   GL_COMPRESSED_RGBA_ASTC_6x6_KHR                         = $93B4;
2306   GL_COMPRESSED_RGBA_ASTC_8x5_KHR                         = $93B5;
2307   GL_COMPRESSED_RGBA_ASTC_8x6_KHR                         = $93B6;
2308   GL_COMPRESSED_RGBA_ASTC_8x8_KHR                         = $93B7;
2309   GL_COMPRESSED_RGBA_ASTC_10x5_KHR                        = $93B8;
2310   GL_COMPRESSED_RGBA_ASTC_10x6_KHR                        = $93B9;
2311   GL_COMPRESSED_RGBA_ASTC_10x8_KHR                        = $93BA;
2312   GL_COMPRESSED_RGBA_ASTC_10x10_KHR                       = $93BB;
2313   GL_COMPRESSED_RGBA_ASTC_12x10_KHR                       = $93BC;
2314   GL_COMPRESSED_RGBA_ASTC_12x12_KHR                       = $93BD;
2315   GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR                 = $93D0;
2316   GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR                 = $93D1;
2317   GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR                 = $93D2;
2318   GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR                 = $93D3;
2319   GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR                 = $93D4;
2320   GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR                 = $93D5;
2321   GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR                 = $93D6;
2322   GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR                 = $93D7;
2323   GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR                = $93D8;
2324   GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR                = $93D9;
2325   GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR                = $93DA;
2326   GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR               = $93DB;
2327   GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR               = $93DC;
2328   GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR               = $93DD;
2329
2330 { GL_KHR_texture_compression_astc_ldr }
2331   // none
2332
2333 { GL_OES_EGL_image }
2334 type
2335   GLeglImageOES                                           = Pointer;
2336   TglEGLImageTargetTexture2DOES                           = procedure(aTarget: GLenum; aImage: GLeglImageOES); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2337   TglEGLImageTargetRenderbufferStorageOES                 = procedure(aTarget: GLenum; aImage: GLeglImageOES); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2338 var
2339   glEGLImageTargetTexture2DOES:                             TglEGLImageTargetTexture2DOES;
2340   glEGLImageTargetRenderbufferStorageOES:                   TglEGLImageTargetRenderbufferStorageOES;
2341
2342 { GL_OES_EGL_image_external }
2343 const
2344   GL_TEXTURE_EXTERNAL_OES                                 = $8D65;
2345   GL_TEXTURE_BINDING_EXTERNAL_OES                         = $8D67;
2346   GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES                     = $8D68;
2347   GL_SAMPLER_EXTERNAL_OES                                 = $8D66;
2348
2349 { GL_OES_compressed_ETC1_RGB8_sub_texture }
2350   // none
2351
2352 { GL_OES_compressed_ETC1_RGB8_texture }
2353 const
2354   GL_ETC1_RGB8_OES                                        = $8D64;
2355
2356 { GL_OES_compressed_paletted_texture }
2357 const
2358   GL_PALETTE4_RGB8_OES                                    = $8B90;
2359   GL_PALETTE4_RGBA8_OES                                   = $8B91;
2360   GL_PALETTE4_R5_G6_B5_OES                                = $8B92;
2361   GL_PALETTE4_RGBA4_OES                                   = $8B93;
2362   GL_PALETTE4_RGB5_A1_OES                                 = $8B94;
2363   GL_PALETTE8_RGB8_OES                                    = $8B95;
2364   GL_PALETTE8_RGBA8_OES                                   = $8B96;
2365   GL_PALETTE8_R5_G6_B5_OES                                = $8B97;
2366   GL_PALETTE8_RGBA4_OES                                   = $8B98;
2367   GL_PALETTE8_RGB5_A1_OES                                 = $8B99;
2368
2369 { GL_OES_depth24 }
2370 const
2371   GL_DEPTH_COMPONENT24_OES                                = $81A6;
2372
2373 { GL_OES_depth32 }
2374 const
2375   GL_DEPTH_COMPONENT32_OES                                = $81A7;
2376
2377 { GL_OES_depth_texture }
2378   // none
2379
2380 { GL_OES_element_index_uint }
2381   // none
2382
2383 { GL_OES_fbo_render_mipmap }
2384   // none
2385
2386 { GL_OES_fragment_precision_high }
2387   // none
2388
2389 { GL_OES_get_program_binary }
2390 const
2391   GL_PROGRAM_BINARY_LENGTH_OES                            = $8741;
2392   GL_NUM_PROGRAM_BINARY_FORMATS_OES                       = $87FE;
2393   GL_PROGRAM_BINARY_FORMATS_OES                           = $87FF;
2394 type
2395   TglGetProgramBinaryOES                                  = procedure(aProgram: GLuint; aBufSize: GLsizei; aLength: PGLsizei; aBinaryFormat: PGLenum; aBinary: Pointer); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2396   TglProgramBinaryOES                                     = procedure(aProgram: GLuint; aBinaryFormat: GLenum; const aBinary: Pointer; aLength: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2397 var
2398   glGetProgramBinaryOES:                                    TglGetProgramBinaryOES;
2399   glProgramBinaryOES:                                       TglProgramBinaryOES;
2400
2401 { GL_OES_mapbuffer }
2402 const
2403   GL_WRITE_ONLY_OES                                       = $88B9;
2404   GL_BUFFER_ACCESS_OES                                    = $88BB;
2405   GL_BUFFER_MAPPED_OES                                    = $88BC;
2406   GL_BUFFER_MAP_POINTER_OES                               = $88BD;
2407 type
2408   TglMapBufferOES                                         = function (aTarget: GLenum; aAccess: GLenum): Pointer; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2409   TglUnmapBufferOES                                       = function (aTarget: GLenum): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2410   TglGetBufferPointervOES                                 = procedure(aTarget: GLenum; aPname: GLenum; aParams: PPGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2411 var
2412   glMapBufferOES:                                           TglMapBufferOES;
2413   glUnmapBufferOES:                                         TglUnmapBufferOES;
2414   glGetBufferPointervOES:                                   TglGetBufferPointervOES;
2415
2416 { GL_OES_packed_depth_stencil }
2417 const
2418   GL_DEPTH_STENCIL_OES                                    = $84F9;
2419   GL_UNSIGNED_INT_24_8_OES                                = $84FA;
2420   GL_DEPTH24_STENCIL8_OES                                 = $88F0;
2421
2422 { GL_OES_required_internalformat }
2423 const
2424   GL_ALPHA8_OES                                           = $803C;
2425   GL_DEPTH_COMPONENT16_OES                                = $81A5;
2426   GL_LUMINANCE4_ALPHA4_OES                                = $8043;
2427   GL_LUMINANCE8_ALPHA8_OES                                = $8045;
2428   GL_LUMINANCE8_OES                                       = $8040;
2429   GL_RGBA4_OES                                            = $8056;
2430   GL_RGB5_A1_OES                                          = $8057;
2431   GL_RGB565_OES                                           = $8D62;
2432   GL_RGB8_OES                                             = $8051;
2433   GL_RGBA8_OES                                            = $8058;
2434   GL_RGB10_EXT                                            = $8052;
2435   GL_RGB10_A2_EXT                                         = $8059;
2436
2437 { GL_OES_rgb8_rgba8 }
2438   // none
2439
2440 { GL_OES_sample_shading }
2441 const
2442   GL_SAMPLE_SHADING_OES                                   = $8C36;
2443   GL_MIN_SAMPLE_SHADING_VALUE_OES                         = $8C37;
2444 type
2445   TglMinSampleShadingOES                                  = procedure(aValue: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2446 var
2447   glMinSampleShadingOES:                                    TglMinSampleShadingOES;
2448
2449 { GL_OES_sample_
2450 variables }
2451   // none
2452
2453 { GL_OES_shader_image_atomic }
2454   // none
2455
2456 { GL_OES_shader_multisample_interpolation }
2457 const
2458   GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_OES                = $8E5B;
2459   GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_OES                = $8E5C;
2460   GL_FRAGMENT_INTERPOLATION_OFFSET_BITS_OES               = $8E5D;
2461
2462 { GL_OES_standard_derivatives }
2463 const
2464   GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES                  = $8B8B;
2465
2466 { GL_OES_stencil1 }
2467 const
2468   GL_STENCIL_INDEX1_OES                                   = $8D46;
2469
2470 { GL_OES_stencil4 }
2471 const
2472   GL_STENCIL_INDEX4_OES                                   = $8D47;
2473
2474 { GL_OES_surfaceless_context }
2475 const
2476   GL_FRAMEBUFFER_UNDEFINED_OES                            = $8219;
2477
2478 { GL_OES_texture_3D }
2479 const
2480   GL_TEXTURE_WRAP_R_OES                                   = $8072;
2481   GL_TEXTURE_3D_OES                                       = $806F;
2482   GL_TEXTURE_BINDING_3D_OES                               = $806A;
2483   GL_MAX_3D_TEXTURE_SIZE_OES                              = $8073;
2484   GL_SAMPLER_3D_OES                                       = $8B5F;
2485   GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_OES        = $8CD4;
2486 type
2487   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}
2488   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}
2489   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}
2490   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}
2491   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}
2492   TglFramebufferTexture3DOES                              = procedure(aTarget: GLenum; aAttachment: GLenum; aTextarget: GLenum; aTexture: GLuint; aLevel: GLint; aZoffset: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2493 var
2494   glTexImage3DOES:                                          TglTexImage3DOES;
2495   glTexSubImage3DOES:                                       TglTexSubImage3DOES;
2496   glCopyTexSubImage3DOES:                                   TglCopyTexSubImage3DOES;
2497   glCompressedTexImage3DOES:                                TglCompressedTexImage3DOES;
2498   glCompressedTexSubImage3DOES:                             TglCompressedTexSubImage3DOES;
2499   glFramebufferTexture3DOES:                                TglFramebufferTexture3DOES;
2500
2501 { GL_OES_texture_compression_astc }
2502 const
2503   GL_COMPRESSED_RGBA_ASTC_3x3x3_OES                       = $93C0;
2504   GL_COMPRESSED_RGBA_ASTC_4x3x3_OES                       = $93C1;
2505   GL_COMPRESSED_RGBA_ASTC_4x4x3_OES                       = $93C2;
2506   GL_COMPRESSED_RGBA_ASTC_4x4x4_OES                       = $93C3;
2507   GL_COMPRESSED_RGBA_ASTC_5x4x4_OES                       = $93C4;
2508   GL_COMPRESSED_RGBA_ASTC_5x5x4_OES                       = $93C5;
2509   GL_COMPRESSED_RGBA_ASTC_5x5x5_OES                       = $93C6;
2510   GL_COMPRESSED_RGBA_ASTC_6x5x5_OES                       = $93C7;
2511   GL_COMPRESSED_RGBA_ASTC_6x6x5_OES                       = $93C8;
2512   GL_COMPRESSED_RGBA_ASTC_6x6x6_OES                       = $93C9;
2513   GL_COMPRESSED_SRGB8_ALPHA8_ASTC_3x3x3_OES               = $93E0;
2514   GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x3x3_OES               = $93E1;
2515   GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4x3_OES               = $93E2;
2516   GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4x4_OES               = $93E3;
2517   GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4x4_OES               = $93E4;
2518   GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5x4_OES               = $93E5;
2519   GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5x5_OES               = $93E6;
2520   GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5x5_OES               = $93E7;
2521   GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x5_OES               = $93E8;
2522   GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x6_OES               = $93E9;
2523
2524 { GL_OES_texture_float }
2525   // none
2526
2527 { GL_OES_texture_float_linear }
2528   // none
2529
2530 { GL_OES_texture_half_float }
2531 const
2532   GL_HALF_FLOAT_OES                                       = $8D61;
2533
2534 { GL_OES_texture_half_float_linear }
2535   // none
2536
2537 { GL_OES_texture_npot }
2538   // none
2539
2540 { GL_OES_texture_stencil8 }
2541 const
2542   GL_STENCIL_INDEX_OES                                    = $1901;
2543   GL_STENCIL_INDEX8_OES                                   = $8D48;
2544
2545 { GL_OES_texture_storage_multisample_2d_array }
2546 const
2547   GL_TEXTURE_2D_MULTISAMPLE_ARRAY_OES                     = $9102;
2548   GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY_OES             = $9105;
2549   GL_SAMPLER_2D_MULTISAMPLE_ARRAY_OES                     = $910B;
2550   GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY_OES                 = $910C;
2551   GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY_OES        = $910D;
2552 type
2553   TglTexStorage3DMultisampleOES                           = procedure(aTarget: GLenum; aSamples: GLsizei; aInternalformat: GLenum; aWidth: GLsizei; aHeight: GLsizei; aDepth: GLsizei; aFixedsamplelocations: GLboolean); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2554 var
2555   glTexStorage3DMultisampleOES:                             TglTexStorage3DMultisampleOES;
2556
2557 { GL_OES_vertex_array_object }
2558 const
2559   GL_VERTEX_ARRAY_BINDING_OES                             = $85B5;
2560 type
2561   TglBindVertexArrayOES                                   = procedure(aArray: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2562   TglDeleteVertexArraysOES                                = procedure(n: GLsizei; const aArrays: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2563   TglGenVertexArraysOES                                   = procedure(n: GLsizei; aArrays: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2564   TglIsVertexArrayOES                                     = function (aArray: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2565 var
2566   glBindVertexArrayOES:                                     TglBindVertexArrayOES;
2567   glDeleteVertexArraysOES:                                  TglDeleteVertexArraysOES;
2568   glGenVertexArraysOES:                                     TglGenVertexArraysOES;
2569   glIsVertexArrayOES:                                       TglIsVertexArrayOES;
2570
2571 { GL_OES_vertex_half_float }
2572   // none                      {$IFDEF OPENGLES_EXTENSIONS}
2573
2574 { GL_OES_vertex_type_10_10_10_2 }
2575 const
2576   GL_UNSIGNED_INT_10_10_10_2_OES                          = $8DF6;
2577   GL_INT_10_10_10_2_OES                                   = $8DF7;
2578
2579 { GL_AMD_compressed_3DC_texture }
2580 const
2581   GL_3DC_X_AMD                                            = $87F9;
2582   GL_3DC_XY_AMD                                           = $87FA;
2583
2584 { GL_AMD_compressed_ATC_texture }
2585 const
2586   GL_ATC_RGB_AMD                                          = $8C92;
2587   GL_ATC_RGBA_EXPLICIT_ALPHA_AMD                          = $8C93;
2588   GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD                      = $87EE;
2589
2590 { GL_AMD_performance_monitor }
2591 const
2592   GL_COUNTER_TYPE_AMD                                     = $8BC0;
2593   GL_COUNTER_RANGE_AMD                                    = $8BC1;
2594   GL_UNSIGNED_INT64_AMD                                   = $8BC2;
2595   GL_PERCENTAGE_AMD                                       = $8BC3;
2596   GL_PERFMON_RESULT_AVAILABLE_AMD                         = $8BC4;
2597   GL_PERFMON_RESULT_SIZE_AMD                              = $8BC5;
2598   GL_PERFMON_RESULT_AMD                                   = $8BC6;
2599 type
2600   TglGetPerfMonitorGroupsAMD                              = procedure(aNumGroups: PGLint; aGroupsSize: GLsizei; aGroups: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2601   TglGetPerfMonitorCountersAMD                            = procedure(aGroup: GLuint; aNumCounters: PGLint; aMaxActiveCounters: PGLint; aCounterSize: GLsizei; aCounters: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2602   TglGetPerfMonitorGroupStringAMD                         = procedure(aGroup: GLuint; aBufSize: GLsizei; aLength: PGLsizei; aGroupString: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2603   TglGetPerfMonitorCounterStringAMD                       = procedure(aGroup: GLuint; aCounter: GLuint; aBufSize: GLsizei; aLength: PGLsizei; aCounterString: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2604   TglGetPerfMonitorCounterInfoAMD                         = procedure(aGroup: GLuint; aCounter: GLuint; aPname: GLenum; aData: Pointer); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2605   TglGenPerfMonitorsAMD                                   = procedure(n: GLsizei; aMonitors: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2606   TglDeletePerfMonitorsAMD                                = procedure(n: GLsizei; aMonitors: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2607   TglSelectPerfMonitorCountersAMD                         = procedure(aMonitor: GLuint; aEnable: GLboolean; aGroup: GLuint; aNumCounters: GLint; aCounterList: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2608   TglBeginPerfMonitorAMD                                  = procedure(aMonitor: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2609   TglEndPerfMonitorAMD                                    = procedure(aMonitor: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2610   TglGetPerfMonitorCounterDataAMD                         = procedure(aMonitor: GLuint; aPname: GLenum; aDataSize: GLsizei; aData: PGLuint; aBytesWritten: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2611 var
2612   glGetPerfMonitorGroupsAMD:                                TglGetPerfMonitorGroupsAMD;
2613   glGetPerfMonitorCountersAMD:                              TglGetPerfMonitorCountersAMD;
2614   glGetPerfMonitorGroupStringAMD:                           TglGetPerfMonitorGroupStringAMD;
2615   glGetPerfMonitorCounterStringAMD:                         TglGetPerfMonitorCounterStringAMD;
2616   glGetPerfMonitorCounterInfoAMD:                           TglGetPerfMonitorCounterInfoAMD;
2617   glGenPerfMonitorsAMD:                                     TglGenPerfMonitorsAMD;
2618   glDeletePerfMonitorsAMD:                                  TglDeletePerfMonitorsAMD;
2619   glSelectPerfMonitorCountersAMD:                           TglSelectPerfMonitorCountersAMD;
2620   glBeginPerfMonitorAMD:                                    TglBeginPerfMonitorAMD;
2621   glEndPerfMonitorAMD:                                      TglEndPerfMonitorAMD;
2622   glGetPerfMonitorCounterDataAMD:                           TglGetPerfMonitorCounterDataAMD;
2623
2624 { GL_AMD_program_binary_Z400 }
2625 const
2626   GL_Z400_BINARY_AMD                                      = $8740;
2627
2628 { GL_ANDROID_extension_pack_es31a }
2629   // none
2630
2631 { GL_ANGLE_depth_texture }
2632   // none
2633
2634 { GL_ANGLE_framebuffer_blit }
2635 const
2636   GL_READ_FRAMEBUFFER_ANGLE                               = $8CA8;
2637   GL_DRAW_FRAMEBUFFER_ANGLE                               = $8CA9;
2638   GL_DRAW_FRAMEBUFFER_BINDING_ANGLE                       = $8CA6;
2639   GL_READ_FRAMEBUFFER_BINDING_ANGLE                       = $8CAA;
2640 type
2641   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}
2642 var
2643   glBlitFramebufferANGLE:                                   TglBlitFramebufferANGLE;
2644
2645 { GL_ANGLE_framebuffer_multisample }
2646 const
2647   GL_RENDERBUFFER_SAMPLES_ANGLE                           = $8CAB;
2648   GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_ANGLE             = $8D56;
2649   GL_MAX_SAMPLES_ANGLE                                    = $8D57;
2650 type
2651   TglRenderbufferStorageMultisampleANGLE                  = procedure(aTarget: GLenum; aSamples: GLsizei; aInternalformat: GLenum; aWidth: GLsizei; aHeight: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2652 var
2653   glRenderbufferStorageMultisampleANGLE:                    TglRenderbufferStorageMultisampleANGLE;
2654
2655 { GL_ANGLE_instanced_arrays }
2656 const
2657   GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE                    = $88FE;
2658 type
2659   TglDrawArraysInstancedANGLE                             = procedure(aMode: GLenum; aFirst: GLint; aCount: GLsizei; aPrimcount: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2660   TglDrawElementsInstancedANGLE                           = procedure(aMode: GLenum; aCount: GLsizei; aType: GLenum; const aIndices: Pointer; aPrimcount: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2661   TglVertexAttribDivisorANGLE                             = procedure(aIndex: GLuint; aDivisor: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2662 var
2663   glDrawArraysInstancedANGLE:                               TglDrawArraysInstancedANGLE;
2664   glDrawElementsInstancedANGLE:                             TglDrawElementsInstancedANGLE;
2665   glVertexAttribDivisorANGLE:                               TglVertexAttribDivisorANGLE;
2666
2667 { GL_ANGLE_pack_reverse_row_order }
2668 const
2669   GL_PACK_REVERSE_ROW_ORDER_ANGLE                         = $93A4;
2670
2671 { GL_ANGLE_program_binary }
2672 const
2673   GL_PROGRAM_BINARY_ANGLE                                 = $93A6;
2674
2675 { GL_ANGLE_texture_compression_dxt3 }
2676 const
2677   GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE                      = $83F2;
2678
2679 { GL_ANGLE_texture_compression_dxt5 }
2680 const
2681   GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE                      = $83F3;
2682
2683 { GL_ANGLE_texture_usage }
2684 const
2685   GL_TEXTURE_USAGE_ANGLE                                  = $93A2;
2686   GL_FRAMEBUFFER_ATTACHMENT_ANGLE                         = $93A3;
2687
2688 { GL_ANGLE_translated_shader_source }
2689 const
2690   GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE                = $93A0;
2691 type
2692   TglGetTranslatedShaderSourceANGLE                       = procedure(aShader: GLuint; aBufsize: GLsizei; aLength: PGLsizei; aSource: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2693 var
2694   glGetTranslatedShaderSourceANGLE:                         TglGetTranslatedShaderSourceANGLE;
2695
2696 { GL_APPLE_clip_distance }
2697 const
2698   GL_MAX_CLIP_DISTANCES_APPLE                             = $0D32;
2699   GL_CLIP_DISTANCE0_APPLE                                 = $3000;
2700   GL_CLIP_DISTANCE1_APPLE                                 = $3001;
2701   GL_CLIP_DISTANCE2_APPLE                                 = $3002;
2702   GL_CLIP_DISTANCE3_APPLE                                 = $3003;
2703   GL_CLIP_DISTANCE4_APPLE                                 = $3004;
2704   GL_CLIP_DISTANCE5_APPLE                                 = $3005;
2705   GL_CLIP_DISTANCE6_APPLE                                 = $3006;
2706   GL_CLIP_DISTANCE7_APPLE                                 = $3007;
2707
2708 { GL_APPLE_color_buffer_packed_float }
2709   // none
2710
2711 { GL_APPLE_copy_texture_levels }
2712 type
2713   TglCopyTextureLevelsAPPLE                               = procedure(aDestinationTexture: GLuint; aSourceTexture: GLuint; aSourceBaseLevel: GLint; aSourceLevelCount: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2714 var
2715   glCopyTextureLevelsAPPLE:                                 TglCopyTextureLevelsAPPLE;
2716
2717 { GL_APPLE_framebuffer_multisample }
2718 const
2719   GL_RENDERBUFFER_SAMPLES_APPLE                           = $8CAB;
2720   GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_APPLE             = $8D56;
2721   GL_MAX_SAMPLES_APPLE                                    = $8D57;
2722   GL_READ_FRAMEBUFFER_APPLE                               = $8CA8;
2723   GL_DRAW_FRAMEBUFFER_APPLE                               = $8CA9;
2724   GL_DRAW_FRAMEBUFFER_BINDING_APPLE                       = $8CA6;
2725   GL_READ_FRAMEBUFFER_BINDING_APPLE                       = $8CAA;
2726 type
2727   TglRenderbufferStorageMultisampleAPPLE                  = procedure(aTarget: GLenum; aSamples: GLsizei; aInternalformat: GLenum; aWidth: GLsizei; aHeight: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2728   TglResolveMultisampleFramebufferAPPLE                   = procedure; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2729 var
2730   glRenderbufferStorageMultisampleAPPLE:                    TglRenderbufferStorageMultisampleAPPLE;
2731   glResolveMultisampleFramebufferAPPLE:                     TglResolveMultisampleFramebufferAPPLE;
2732
2733 { GL_APPLE_rgb_422 }
2734 const
2735   GL_RGB_422_APPLE                                        = $8A1F;
2736   GL_UNSIGNED_SHORT_8_8_APPLE                             = $85BA;
2737   GL_UNSIGNED_SHORT_8_8_REV_APPLE                         = $85BB;
2738   GL_RGB_RAW_422_APPLE                                    = $8A51;
2739
2740 { GL_APPLE_sync }
2741 const
2742   GL_SYNC_OBJECT_APPLE                                    = $8A53;
2743   GL_MAX_SERVER_WAIT_TIMEOUT_APPLE                        = $9111;
2744   GL_OBJECT_TYPE_APPLE                                    = $9112;
2745   GL_SYNC_CONDITION_APPLE                                 = $9113;
2746   GL_SYNC_STATUS_APPLE                                    = $9114;
2747   GL_SYNC_FLAGS_APPLE                                     = $9115;
2748   GL_SYNC_FENCE_APPLE                                     = $9116;
2749   GL_SYNC_GPU_COMMANDS_COMPLETE_APPLE                     = $9117;
2750   GL_UNSIGNALED_APPLE                                     = $9118;
2751   GL_SIGNALED_APPLE                                       = $9119;
2752   GL_ALREADY_SIGNALED_APPLE                               = $911A;
2753   GL_TIMEOUT_EXPIRED_APPLE                                = $911B;
2754   GL_CONDITION_SATISFIED_APPLE                            = $911C;
2755   GL_WAIT_FAILED_APPLE                                    = $911D;
2756   GL_SYNC_FLUSH_COMMANDS_BIT_APPLE                        = $00000001;
2757   GL_TIMEOUT_IGNORED_APPLE                                = $FFFFFFFFFFFFFFFF;
2758 type
2759   TglFenceSyncAPPLE                                       = function (aCondition: GLenum; aFlags: GLbitfield): GLsync; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2760   TglIsSyncAPPLE                                          = function (aSync: GLsync): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2761   TglDeleteSyncAPPLE                                      = procedure(aSync: GLsync); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2762   TglClientWaitSyncAPPLE                                  = function (aSync: GLsync; aFlags: GLbitfield; aTimeout: GLuint64): GLenum; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2763   TglWaitSyncAPPLE                                        = procedure(aSync: GLsync; aFlags: GLbitfield; aTimeout: GLuint64); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2764   TglGetInteger64vAPPLE                                   = procedure(aPname: GLenum; aParams: PGLint64); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2765   TglGetSyncivAPPLE                                       = procedure(aSync: GLsync; aPname: GLenum; aBufSize: GLsizei; aLength: PGLsizei; aValues: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2766 var
2767   glFenceSyncAPPLE:                                         TglFenceSyncAPPLE;
2768   glIsSyncAPPLE:                                            TglIsSyncAPPLE;
2769   glDeleteSyncAPPLE:                                        TglDeleteSyncAPPLE;
2770   glClientWaitSyncAPPLE:                                    TglClientWaitSyncAPPLE;
2771   glWaitSyncAPPLE:                                          TglWaitSyncAPPLE;
2772   glGetInteger64vAPPLE:                                     TglGetInteger64vAPPLE;
2773   glGetSyncivAPPLE:                                         TglGetSyncivAPPLE;
2774
2775 { GL_APPLE_texture_format_BGRA8888 }
2776 const
2777   GL_BGRA_EXT                                             = $80E1;
2778   GL_BGRA8_EXT                                            = $93A1;
2779
2780 { GL_APPLE_texture_max_level }
2781 const
2782   GL_TEXTURE_MAX_LEVEL_APPLE                              = $813D;
2783
2784 { GL_APPLE_texture_packed_float }
2785 const
2786   GL_UNSIGNED_INT_10F_11F_11F_REV_APPLE                   = $8C3B;
2787   GL_UNSIGNED_INT_5_9_9_9_REV_APPLE                       = $8C3E;
2788   GL_R11F_G11F_B10F_APPLE                                 = $8C3A;
2789   GL_RGB9_E5_APPLE                                        = $8C3D;
2790
2791 { GL_ARM_mali_program_binary }
2792 const
2793   GL_MALI_PROGRAM_BINARY_ARM                              = $8F61;
2794
2795 { GL_ARM_mali_shader_binary }
2796 const
2797   GL_MALI_SHADER_BINARY_ARM                               = $8F60;
2798
2799 { GL_ARM_rgba8 }
2800   // none
2801
2802 { GL_ARM_shader_framebuffer_fetch }
2803 const
2804   GL_FETCH_PER_SAMPLE_ARM                                 = $8F65;
2805   GL_FRAGMENT_SHADER_FRAMEBUFFER_FETCH_MRT_ARM            = $8F66;
2806
2807 { GL_ARM_shader_framebuffer_fetch_depth_stencil }
2808
2809 { GL_DMP_program_binary }
2810 const
2811   GL_SMAPHS30_PROGRAM_BINARY_DMP                          = $9251;
2812   GL_SMAPHS_PROGRAM_BINARY_DMP                            = $9252;
2813   GL_DMP_PROGRAM_BINARY_DMP                               = $9253;
2814
2815 { GL_DMP_shader_binary }
2816 const
2817   GL_SHADER_BINARY_DMP                                    = $9250;
2818
2819 { GL_EXT_base_instance }
2820 type
2821   TglDrawArraysInstancedBaseInstanceEXT                   = procedure(aMode: GLenum; aFirst: GLint; aCount: GLsizei; aInstancecount: GLsizei; aBaseinstance: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2822   TglDrawElementsInstancedBaseInstanceEXT                 = procedure(aMode: GLenum; aCount: GLsizei; aType: GLenum; const aIndices: Pointer; aInstancecount: GLsizei; aBaseinstance: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2823   TglDrawElementsInstancedBaseVertexBaseInstanceEXT       = procedure(aMode: GLenum; aCount: GLsizei; aType: GLenum; const aIndices: Pointer; aInstancecount: GLsizei; aBasevertex: GLint; aBaseinstance: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2824 var
2825   glDrawArraysInstancedBaseInstanceEXT:                     TglDrawArraysInstancedBaseInstanceEXT;
2826   glDrawElementsInstancedBaseInstanceEXT:                   TglDrawElementsInstancedBaseInstanceEXT;
2827   glDrawElementsInstancedBaseVertexBaseInstanceEXT:         TglDrawElementsInstancedBaseVertexBaseInstanceEXT;
2828
2829 { GL_EXT_blend_minmax }
2830 const
2831   GL_MIN_EXT                                              = $8007;
2832   GL_MAX_EXT                                              = $8008;
2833
2834 { GL_EXT_color_buffer_half_float }
2835 const
2836   GL_RGBA16F_EXT                                          = $881A;
2837   GL_RGB16F_EXT                                           = $881B;
2838   GL_RG16F_EXT                                            = $822F;
2839   GL_R16F_EXT                                             = $822D;
2840   GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT            = $8211;
2841   GL_UNSIGNED_NORMALIZED_EXT                              = $8C17;
2842
2843 { GL_EXT_copy_image }
2844 type
2845   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}
2846 var
2847   glCopyImageSubDataEXT:                                    TglCopyImageSubDataEXT;
2848
2849 { GL_EXT_debug_label }
2850 const
2851   GL_PROGRAM_PIPELINE_OBJECT_EXT                          = $8A4F;
2852   GL_PROGRAM_OBJECT_EXT                                   = $8B40;
2853   GL_SHADER_OBJECT_EXT                                    = $8B48;
2854   GL_BUFFER_OBJECT_EXT                                    = $9151;
2855   GL_QUERY_OBJECT_EXT                                     = $9153;
2856   GL_VERTEX_ARRAY_OBJECT_EXT                              = $9154;
2857   // GL_TRANSFORM_FEEDBACK                                = $8E22;
2858 type
2859   TglLabelObjectEXT                                       = procedure(aType: GLenum; aObject: GLuint; aLength: GLsizei; const aLabel: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2860   TglGetObjectLabelEXT                                    = procedure(aType: GLenum; aObject: GLuint; aBufSize: GLsizei; aLength: PGLsizei; aLabel: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2861 var
2862   glLabelObjectEXT:                                         TglLabelObjectEXT;
2863   glGetObjectLabelEXT:                                      TglGetObjectLabelEXT;
2864
2865 { GL_EXT_debug_marker }
2866 type
2867   TglInsertEventMarkerEXT                                 = procedure(aLength: GLsizei; const aMarker: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2868   TglPushGroupMarkerEXT                                   = procedure(aLength: GLsizei; const aMarker: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2869   TglPopGroupMarkerEXT                                    = procedure; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2870 var
2871   glInsertEventMarkerEXT:                                   TglInsertEventMarkerEXT;
2872   glPushGroupMarkerEXT:                                     TglPushGroupMarkerEXT;
2873   glPopGroupMarkerEXT:                                      TglPopGroupMarkerEXT;
2874
2875 { GL_EXT_discard_framebuffer }
2876 const
2877   GL_COLOR_EXT                                            = $1800;
2878   GL_DEPTH_EXT                                            = $1801;
2879   GL_STENCIL_EXT                                          = $1802;
2880 type
2881   TglDiscardFramebufferEXT                                = procedure(aTarget: GLenum; aNumAttachments: GLsizei; const aAttachments: PGLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2882 var
2883   glDiscardFramebufferEXT:                                  TglDiscardFramebufferEXT;
2884
2885 { GL_EXT_disjoint_timer_query }
2886 const
2887   GL_QUERY_COUNTER_BITS_EXT                               = $8864;
2888   GL_CURRENT_QUERY_EXT                                    = $8865;
2889   GL_QUERY_RESULT_EXT                                     = $8866;
2890   GL_QUERY_RESULT_AVAILABLE_EXT                           = $8867;
2891   GL_TIME_ELAPSED_EXT                                     = $88BF;
2892   GL_TIMESTAMP_EXT                                        = $8E28;
2893   GL_GPU_DISJOINT_EXT                                     = $8FBB;
2894 type
2895   TglGenQueriesEXT                                        = procedure(n: GLsizei; aIds: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2896   TglDeleteQueriesEXT                                     = procedure(n: GLsizei; const aIds: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2897   TglIsQueryEXT                                           = function (aId: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2898   TglBeginQueryEXT                                        = procedure(aTarget: GLenum; aId: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2899   TglEndQueryEXT                                          = procedure(aTarget: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2900   TglQueryCounterEXT                                      = procedure(aId: GLuint; aTarget: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2901   TglGetQueryivEXT                                        = procedure(aTarget: GLenum; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2902   TglGetQueryObjectivEXT                                  = procedure(aId: GLuint; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2903   TglGetQueryObjectuivEXT                                 = procedure(aId: GLuint; aPname: GLenum; aParams: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2904   TglGetQueryObjecti64vEXT                                = procedure(aId: GLuint; aPname: GLenum; aParams: PGLint64); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2905   TglGetQueryObjectui64vEXT                               = procedure(aId: GLuint; aPname: GLenum; aParams: PGLuint64); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2906 var
2907   glGenQueriesEXT:                                          TglGenQueriesEXT;
2908   glDeleteQueriesEXT:                                       TglDeleteQueriesEXT;
2909   glIsQueryEXT:                                             TglIsQueryEXT;
2910   glBeginQueryEXT:                                          TglBeginQueryEXT;
2911   glEndQueryEXT:                                            TglEndQueryEXT;
2912   glQueryCounterEXT:                                        TglQueryCounterEXT;
2913   glGetQueryivEXT:                                          TglGetQueryivEXT;
2914   glGetQueryObjectivEXT:                                    TglGetQueryObjectivEXT;
2915   glGetQueryObjectuivEXT:                                   TglGetQueryObjectuivEXT;
2916   glGetQueryObjecti64vEXT:                                  TglGetQueryObjecti64vEXT;
2917   glGetQueryObjectui64vEXT:                                 TglGetQueryObjectui64vEXT;
2918
2919 { GL_EXT_draw_buffers }
2920 const
2921   GL_MAX_COLOR_ATTACHMENTS_EXT                            = $8CDF;
2922   GL_MAX_DRAW_BUFFERS_EXT                                 = $8824;
2923   GL_DRAW_BUFFER0_EXT                                     = $8825;
2924   GL_DRAW_BUFFER1_EXT                                     = $8826;
2925   GL_DRAW_BUFFER2_EXT                                     = $8827;
2926   GL_DRAW_BUFFER3_EXT                                     = $8828;
2927   GL_DRAW_BUFFER4_EXT                                     = $8829;
2928   GL_DRAW_BUFFER5_EXT                                     = $882A;
2929   GL_DRAW_BUFFER6_EXT                                     = $882B;
2930   GL_DRAW_BUFFER7_EXT                                     = $882C;
2931   GL_DRAW_BUFFER8_EXT                                     = $882D;
2932   GL_DRAW_BUFFER9_EXT                                     = $882E;
2933   GL_DRAW_BUFFER10_EXT                                    = $882F;
2934   GL_DRAW_BUFFER11_EXT                                    = $8830;
2935   GL_DRAW_BUFFER12_EXT                                    = $8831;
2936   GL_DRAW_BUFFER13_EXT                                    = $8832;
2937   GL_DRAW_BUFFER14_EXT                                    = $8833;
2938   GL_DRAW_BUFFER15_EXT                                    = $8834;
2939   GL_COLOR_ATTACHMENT0_EXT                                = $8CE0;
2940   GL_COLOR_ATTACHMENT1_EXT                                = $8CE1;
2941   GL_COLOR_ATTACHMENT2_EXT                                = $8CE2;
2942   GL_COLOR_ATTACHMENT3_EXT                                = $8CE3;
2943   GL_COLOR_ATTACHMENT4_EXT                                = $8CE4;
2944   GL_COLOR_ATTACHMENT5_EXT                                = $8CE5;
2945   GL_COLOR_ATTACHMENT6_EXT                                = $8CE6;
2946   GL_COLOR_ATTACHMENT7_EXT                                = $8CE7;
2947   GL_COLOR_ATTACHMENT8_EXT                                = $8CE8;
2948   GL_COLOR_ATTACHMENT9_EXT                                = $8CE9;
2949   GL_COLOR_ATTACHMENT10_EXT                               = $8CEA;
2950   GL_COLOR_ATTACHMENT11_EXT                               = $8CEB;
2951   GL_COLOR_ATTACHMENT12_EXT                               = $8CEC;
2952   GL_COLOR_ATTACHMENT13_EXT                               = $8CED;
2953   GL_COLOR_ATTACHMENT14_EXT                               = $8CEE;
2954   GL_COLOR_ATTACHMENT15_EXT                               = $8CEF;
2955 type
2956   TglDrawBuffersEXT                                       = procedure(n: GLsizei; const aBufs: PGLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2957 var
2958   glDrawBuffersEXT:                                         TglDrawBuffersEXT;
2959
2960 { GL_EXT_draw_buffers_indexed }
2961   //GL_MIN                                                = $8007;
2962   //GL_MAX                                                = $8008;
2963 type
2964   TglEnableiEXT                                           = procedure(aTarget: GLenum; aIndex: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2965   TglDisableiEXT                                          = procedure(aTarget: GLenum; aIndex: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2966   TglBlendEquationiEXT                                    = procedure(aBuf: GLuint; aMode: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2967   TglBlendEquationSeparateiEXT                            = procedure(aBuf: GLuint; aModeRGB: GLenum; aModeAlpha: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2968   TglBlendFunciEXT                                        = procedure(aBuf: GLuint; aSrc: GLenum; aDst: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2969   TglBlendFuncSeparateiEXT                                = procedure(aBuf: GLuint; aSrcRGB: GLenum; aDstRGB: GLenum; aSrcAlpha: GLenum; aDstAlpha: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2970   TglColorMaskiEXT                                        = procedure(aIndex: GLuint; r: GLboolean; g: GLboolean; b: GLboolean; a: GLboolean); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2971   TglIsEnablediEXT                                        = function (aTarget: GLenum; aIndex: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2972 var
2973   glEnableiEXT:                                             TglEnableiEXT;
2974   glDisableiEXT:                                            TglDisableiEXT;
2975   glBlendEquationiEXT:                                      TglBlendEquationiEXT;
2976   glBlendEquationSeparateiEXT:                              TglBlendEquationSeparateiEXT;
2977   glBlendFunciEXT:                                          TglBlendFunciEXT;
2978   glBlendFuncSeparateiEXT:                                  TglBlendFuncSeparateiEXT;
2979   glColorMaskiEXT:                                          TglColorMaskiEXT;
2980   glIsEnablediEXT:                                          TglIsEnablediEXT;
2981
2982 { GL_EXT_draw_elements_base_vertex }
2983 type
2984   TglDrawElementsBaseVertexEXT                            = procedure(aMode: GLenum; aCount: GLsizei; aType: GLenum; const aIndices: Pointer; aBasevertex: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2985   TglDrawRangeElementsBaseVertexEXT                       = procedure(aMode: GLenum; aStart: GLuint; aEnd: GLuint; aCount: GLsizei; aType: GLenum; const aIndices: Pointer; aBasevertex: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2986   TglDrawElementsInstancedBaseVertexEXT                   = procedure(aMode: GLenum; aCount: GLsizei; aType: GLenum; const aIndices: Pointer; aInstancecount: GLsizei; aBasevertex: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2987   TglMultiDrawElementsBaseVertexEXT                       = procedure(aMode: GLenum; const aCount: PGLsizei; aType: GLenum; const aConstPindices: Pointer; aPrimcount: GLsizei; const aBasevertex: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2988 var
2989   glDrawElementsBaseVertexEXT:                              TglDrawElementsBaseVertexEXT;
2990   glDrawRangeElementsBaseVertexEXT:                         TglDrawRangeElementsBaseVertexEXT;
2991   glDrawElementsInstancedBaseVertexEXT:                     TglDrawElementsInstancedBaseVertexEXT;
2992   glMultiDrawElementsBaseVertexEXT:                         TglMultiDrawElementsBaseVertexEXT;
2993
2994 { GL_EXT_draw_instanced }
2995 type
2996   TglDrawArraysInstancedEXT                               = procedure(aMode: GLenum; aStart: GLint; aCount: GLsizei; aPrimcount: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2997   TglDrawElementsInstancedEXT                             = procedure(aMode: GLenum; aCount: GLsizei; aType: GLenum; const aIndices: Pointer; aPrimcount: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
2998 var
2999   glDrawArraysInstancedEXT:                                 TglDrawArraysInstancedEXT;
3000   glDrawElementsInstancedEXT:                               TglDrawElementsInstancedEXT;
3001
3002 { GL_EXT_geometry_point_size }
3003
3004 { GL_EXT_geometry_shader }
3005 const
3006   GL_GEOMETRY_SHADER_EXT                                  = $8DD9;
3007   GL_GEOMETRY_SHADER_BIT_EXT                              = $00000004;
3008   GL_GEOMETRY_LINKED_VERTICES_OUT_EXT                     = $8916;
3009   GL_GEOMETRY_LINKED_INPUT_TYPE_EXT                       = $8917;
3010   GL_GEOMETRY_LINKED_OUTPUT_TYPE_EXT                      = $8918;
3011   GL_GEOMETRY_SHADER_INVOCATIONS_EXT                      = $887F;
3012   GL_LAYER_PROVOKING_VERTEX_EXT                           = $825E;
3013   GL_LINES_ADJACENCY_EXT                                  = $000A;
3014   GL_LINE_STRIP_ADJACENCY_EXT                             = $000B;
3015   GL_TRIANGLES_ADJACENCY_EXT                              = $000C;
3016   GL_TRIANGLE_STRIP_ADJACENCY_EXT                         = $000D;
3017   GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT                  = $8DDF;
3018   GL_MAX_GEOMETRY_UNIFORM_BLOCKS_EXT                      = $8A2C;
3019   GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS_EXT         = $8A32;
3020   GL_MAX_GEOMETRY_INPUT_COMPONENTS_EXT                    = $9123;
3021   GL_MAX_GEOMETRY_OUTPUT_COMPONENTS_EXT                   = $9124;
3022   GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT                     = $8DE0;
3023   GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT             = $8DE1;
3024   GL_MAX_GEOMETRY_SHADER_INVOCATIONS_EXT                  = $8E5A;
3025   GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT                 = $8C29;
3026   GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS_EXT              = $92CF;
3027   GL_MAX_GEOMETRY_ATOMIC_COUNTERS_EXT                     = $92D5;
3028   GL_MAX_GEOMETRY_IMAGE_UNIFORMS_EXT                      = $90CD;
3029   GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS_EXT               = $90D7;
3030   GL_FIRST_VERTEX_CONVENTION_EXT                          = $8E4D;
3031   GL_LAST_VERTEX_CONVENTION_EXT                           = $8E4E;
3032   GL_UNDEFINED_VERTEX_EXT                                 = $8260;
3033   GL_PRIMITIVES_GENERATED_EXT                             = $8C87;
3034   GL_FRAMEBUFFER_DEFAULT_LAYERS_EXT                       = $9312;
3035   GL_MAX_FRAMEBUFFER_LAYERS_EXT                           = $9317;
3036   GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT             = $8DA8;
3037   GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT                   = $8DA7;
3038   GL_REFERENCED_BY_GEOMETRY_SHADER_EXT                    = $9309;
3039 type
3040   TglFramebufferTextureEXT                                = procedure(aTarget: GLenum; aAttachment: GLenum; aTexture: GLuint; aLevel: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3041 var
3042   glFramebufferTextureEXT:                                  TglFramebufferTextureEXT;
3043
3044 { GL_EXT_gpu_shader5 }
3045   // none
3046
3047 { GL_EXT_instanced_arrays }
3048 const
3049   GL_VERTEX_ATTRIB_ARRAY_DIVISOR_EXT                      = $88FE;
3050 type
3051   TglVertexAttribDivisorEXT                               = procedure(aIndex: GLuint; aDivisor: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3052 var
3053   glVertexAttribDivisorEXT:                                 TglVertexAttribDivisorEXT;
3054
3055 { GL_EXT_map_buffer_range }
3056 const
3057   GL_MAP_READ_BIT_EXT                                     = $0001;
3058   GL_MAP_WRITE_BIT_EXT                                    = $0002;
3059   GL_MAP_INVALIDATE_RANGE_BIT_EXT                         = $0004;
3060   GL_MAP_INVALIDATE_BUFFER_BIT_EXT                        = $0008;
3061   GL_MAP_FLUSH_EXPLICIT_BIT_EXT                           = $0010;
3062   GL_MAP_UNSYNCHRONIZED_BIT_EXT                           = $0020;
3063 type
3064   TglMapBufferRangeEXT                                    = function (aTarget: GLenum; aOffset: GLintptr; aLength: GLsizeiptr; aAccess: GLbitfield): Pointer; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3065   TglFlushMappedBufferRangeEXT                            = procedure(aTarget: GLenum; aOffset: GLintptr; aLength: GLsizeiptr); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3066 var
3067   glMapBufferRangeEXT:                                      TglMapBufferRangeEXT;
3068   glFlushMappedBufferRangeEXT:                              TglFlushMappedBufferRangeEXT;
3069
3070 { GL_EXT_multi_draw_arrays }
3071 type
3072   TglMultiDrawArraysEXT                                   = procedure(aMode: GLenum; const aFirst: PGLint; const aCount: PGLsizei; aPrimcount: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3073   TglMultiDrawElementsEXT                                 = procedure(aMode: GLenum; const aCount: PGLsizei; aType: GLenum; const aConstPindices: Pointer; aPrimcount: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3074 var
3075   glMultiDrawArraysEXT:                                     TglMultiDrawArraysEXT;
3076   glMultiDrawElementsEXT:                                   TglMultiDrawElementsEXT;
3077
3078 { GL_EXT_multi_draw_indirect }
3079 type
3080   TglMultiDrawArraysIndirectEXT                           = procedure(aMode: GLenum; const aIndirect: Pointer; aDrawcount: GLsizei; aStride: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3081   TglMultiDrawElementsIndirectEXT                         = procedure(aMode: GLenum; aType: GLenum; const aIndirect: Pointer; aDrawcount: GLsizei; aStride: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3082 var
3083   glMultiDrawArraysIndirectEXT:                             TglMultiDrawArraysIndirectEXT;
3084   glMultiDrawElementsIndirectEXT:                           TglMultiDrawElementsIndirectEXT;
3085
3086 { GL_EXT_multisampled_render_to_texture }
3087 const
3088   GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT           = $8D6C;
3089   GL_RENDERBUFFER_SAMPLES_EXT                             = $8CAB;
3090   GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT               = $8D56;
3091   GL_MAX_SAMPLES_EXT                                      = $8D57;
3092 type
3093   TglRenderbufferStorageMultisampleEXT                    = procedure(aTarget: GLenum; aSamples: GLsizei; aInternalformat: GLenum; aWidth: GLsizei; aHeight: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3094   TglFramebufferTexture2DMultisampleEXT                   = procedure(aTarget: GLenum; aAttachment: GLenum; aTextarget: GLenum; aTexture: GLuint; aLevel: GLint; aSamples: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3095 var
3096   glRenderbufferStorageMultisampleEXT:                      TglRenderbufferStorageMultisampleEXT;
3097   glFramebufferTexture2DMultisampleEXT:                     TglFramebufferTexture2DMultisampleEXT;
3098
3099 { GL_EXT_multiview_draw_buffers }
3100 const
3101   GL_COLOR_ATTACHMENT_EXT                                 = $90F0;
3102   GL_MULTIVIEW_EXT                                        = $90F1;
3103   GL_DRAW_BUFFER_EXT                                      = $0C01;
3104   GL_READ_BUFFER_EXT                                      = $0C02;
3105   GL_MAX_MULTIVIEW_BUFFERS_EXT                            = $90F2;
3106 type
3107   TglReadBufferIndexedEXT                                 = procedure(aSrc: GLenum; aIndex: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3108   TglDrawBuffersIndexedEXT                                = procedure(n: GLint; const aLocation: PGLenum; const aIndices: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3109   TglGetIntegeri_vEXT                                     = procedure(aTarget: GLenum; aIndex: GLuint; aData: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3110 var
3111   glReadBufferIndexedEXT:                                   TglReadBufferIndexedEXT;
3112   glDrawBuffersIndexedEXT:                                  TglDrawBuffersIndexedEXT;
3113   glGetIntegeri_vEXT:                                       TglGetIntegeri_vEXT;
3114
3115 { GL_EXT_occlusion_query_boolean }
3116 const
3117   GL_ANY_SAMPLES_PASSED_EXT                               = $8C2F;
3118   GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT                  = $8D6A;
3119
3120 { GL_EXT_primitive_bounding_box }
3121 const
3122   GL_PRIMITIVE_BOUNDING_BOX_EXT                           = $92BE;
3123 type
3124   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}
3125 var
3126   glPrimitiveBoundingBoxEXT:                                TglPrimitiveBoundingBoxEXT;
3127
3128 { GL_EXT_pvrtc_sRGB }
3129 const
3130   GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT                     = $8A54;
3131   GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT                     = $8A55;
3132   GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT               = $8A56;
3133   GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT               = $8A57;
3134   GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV2_IMG               = $93F0;
3135   GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV2_IMG               = $93F1;
3136
3137 { GL_EXT_read_format_bgra }
3138 const
3139   GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT                       = $8365;
3140   GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT                       = $8366;
3141
3142 { GL_EXT_render_snorm }
3143 const
3144   //GL_R8_SNORM                                           = $8F94;
3145   //GL_RG8_SNORM                                          = $8F95;
3146   //GL_RGBA8_SNORM                                        = $8F97;
3147   GL_R16_SNORM_EXT                                        = $8F98;
3148   GL_RG16_SNORM_EXT                                       = $8F99;
3149   GL_RGBA16_SNORM_EXT                                     = $8F9B;
3150
3151 { GL_EXT_robustness }
3152 const
3153   GL_GUILTY_CONTEXT_RESET_EXT                             = $8253;
3154   GL_INNOCENT_CONTEXT_RESET_EXT                           = $8254;
3155   GL_UNKNOWN_CONTEXT_RESET_EXT                            = $8255;
3156   GL_CONTEXT_ROBUST_ACCESS_EXT                            = $90F3;
3157   GL_RESET_NOTIFICATION_STRATEGY_EXT                      = $8256;
3158   GL_LOSE_CONTEXT_ON_RESET_EXT                            = $8252;
3159   GL_NO_RESET_NOTIFICATION_EXT                            = $8261;
3160 type
3161   TglGetGraphicsResetStatusEXT                            = function : GLenum; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3162   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}
3163   TglGetnUniformfvEXT                                     = procedure(aProgram: GLuint; aLocation: GLint; aBufSize: GLsizei; aParams: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3164   TglGetnUniformivEXT                                     = procedure(aProgram: GLuint; aLocation: GLint; aBufSize: GLsizei; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3165 var
3166   glGetGraphicsResetStatusEXT:                              TglGetGraphicsResetStatusEXT;
3167   glReadnPixelsEXT:                                         TglReadnPixelsEXT;
3168   glGetnUniformfvEXT:                                       TglGetnUniformfvEXT;
3169   glGetnUniformivEXT:                                       TglGetnUniformivEXT;
3170
3171 { GL_EXT_sRGB }
3172 const
3173   GL_SRGB_EXT                                             = $8C40;
3174   GL_SRGB_ALPHA_EXT                                       = $8C42;
3175   GL_SRGB8_ALPHA8_EXT                                     = $8C43;
3176   GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT            = $8210;
3177
3178 { GL_EXT_sRGB_write_control }
3179 const
3180   GL_FRAMEBUFFER_SRGB_EXT                                 = $8DB9;
3181
3182 { GL_EXT_separate_shader_objects }
3183 const
3184   GL_ACTIVE_PROGRAM_EXT                                   = $8259;
3185   GL_VERTEX_SHADER_BIT_EXT                                = $00000001;
3186   GL_FRAGMENT_SHADER_BIT_EXT                              = $00000002;
3187   GL_ALL_SHADER_BITS_EXT                                  = $FFFFFFFF;
3188   GL_PROGRAM_SEPARABLE_EXT                                = $8258;
3189   GL_PROGRAM_PIPELINE_BINDING_EXT                         = $825A;
3190 type
3191   TglActiveShaderProgramEXT                               = procedure(aPipeline: GLuint; aProgram: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3192   TglBindProgramPipelineEXT                               = procedure(aPipeline: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3193   TglCreateShaderProgramvEXT                              = function (aType: GLenum; aCount: GLsizei; const aStrings: PPGLchar): GLuint; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3194   TglDeleteProgramPipelinesEXT                            = procedure(n: GLsizei; const aPipelines: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3195   TglGenProgramPipelinesEXT                               = procedure(n: GLsizei; aPipelines: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3196   TglGetProgramPipelineInfoLogEXT                         = procedure(aPipeline: GLuint; aBufSize: GLsizei; aLength: PGLsizei; aInfoLog: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3197   TglGetProgramPipelineivEXT                              = procedure(aPipeline: GLuint; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3198   TglIsProgramPipelineEXT                                 = function (aPipeline: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3199   TglProgramParameteriEXT                                 = procedure(aProgram: GLuint; aPname: GLenum; aValue: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3200   TglProgramUniform1fEXT                                  = procedure(aProgram: GLuint; aLocation: GLint; aV0: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3201   TglProgramUniform1fvEXT                                 = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3202   TglProgramUniform1iEXT                                  = procedure(aProgram: GLuint; aLocation: GLint; aV0: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3203   TglProgramUniform1ivEXT                                 = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3204   TglProgramUniform2fEXT                                  = procedure(aProgram: GLuint; aLocation: GLint; aV0: GLfloat; aV1: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3205   TglProgramUniform2fvEXT                                 = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3206   TglProgramUniform2iEXT                                  = procedure(aProgram: GLuint; aLocation: GLint; aV0: GLint; aV1: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3207   TglProgramUniform2ivEXT                                 = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3208   TglProgramUniform3fEXT                                  = procedure(aProgram: GLuint; aLocation: GLint; aV0: GLfloat; aV1: GLfloat; aV2: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3209   TglProgramUniform3fvEXT                                 = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3210   TglProgramUniform3iEXT                                  = procedure(aProgram: GLuint; aLocation: GLint; aV0: GLint; aV1: GLint; aV2: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3211   TglProgramUniform3ivEXT                                 = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3212   TglProgramUniform4fEXT                                  = procedure(aProgram: GLuint; aLocation: GLint; aV0: GLfloat; aV1: GLfloat; aV2: GLfloat; aV3: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3213   TglProgramUniform4fvEXT                                 = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3214   TglProgramUniform4iEXT                                  = procedure(aProgram: GLuint; aLocation: GLint; aV0: GLint; aV1: GLint; aV2: GLint; aV3: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3215   TglProgramUniform4ivEXT                                 = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3216   TglProgramUniformMatrix2fvEXT                           = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3217   TglProgramUniformMatrix3fvEXT                           = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3218   TglProgramUniformMatrix4fvEXT                           = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3219   TglUseProgramStagesEXT                                  = procedure(aPipeline: GLuint; aStages: GLbitfield; aProgram: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3220   TglValidateProgramPipelineEXT                           = procedure(aPipeline: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3221   TglProgramUniform1uiEXT                                 = procedure(aProgram: GLuint; aLocation: GLint; aV0: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3222   TglProgramUniform2uiEXT                                 = procedure(aProgram: GLuint; aLocation: GLint; aV0: GLuint; aV1: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3223   TglProgramUniform3uiEXT                                 = procedure(aProgram: GLuint; aLocation: GLint; aV0: GLuint; aV1: GLuint; aV2: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3224   TglProgramUniform4uiEXT                                 = procedure(aProgram: GLuint; aLocation: GLint; aV0: GLuint; aV1: GLuint; aV2: GLuint; aV3: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3225   TglProgramUniform1uivEXT                                = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3226   TglProgramUniform2uivEXT                                = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3227   TglProgramUniform3uivEXT                                = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3228   TglProgramUniform4uivEXT                                = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3229   TglProgramUniformMatrix2x3fvEXT                         = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3230   TglProgramUniformMatrix3x2fvEXT                         = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3231   TglProgramUniformMatrix2x4fvEXT                         = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3232   TglProgramUniformMatrix4x2fvEXT                         = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3233   TglProgramUniformMatrix3x4fvEXT                         = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3234   TglProgramUniformMatrix4x3fvEXT                         = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3235 var
3236   glActiveShaderProgramEXT:                                 TglActiveShaderProgramEXT;
3237   glBindProgramPipelineEXT:                                 TglBindProgramPipelineEXT;
3238   glCreateShaderProgramvEXT:                                TglCreateShaderProgramvEXT;
3239   glDeleteProgramPipelinesEXT:                              TglDeleteProgramPipelinesEXT;
3240   glGenProgramPipelinesEXT:                                 TglGenProgramPipelinesEXT;
3241   glGetProgramPipelineInfoLogEXT:                           TglGetProgramPipelineInfoLogEXT;
3242   glGetProgramPipelineivEXT:                                TglGetProgramPipelineivEXT;
3243   glIsProgramPipelineEXT:                                   TglIsProgramPipelineEXT;
3244   glProgramParameteriEXT:                                   TglProgramParameteriEXT;
3245   glProgramUniform1fEXT:                                    TglProgramUniform1fEXT;
3246   glProgramUniform1fvEXT:                                   TglProgramUniform1fvEXT;
3247   glProgramUniform1iEXT:                                    TglProgramUniform1iEXT;
3248   glProgramUniform1ivEXT:                                   TglProgramUniform1ivEXT;
3249   glProgramUniform2fEXT:                                    TglProgramUniform2fEXT;
3250   glProgramUniform2fvEXT:                                   TglProgramUniform2fvEXT;
3251   glProgramUniform2iEXT:                                    TglProgramUniform2iEXT;
3252   glProgramUniform2ivEXT:                                   TglProgramUniform2ivEXT;
3253   glProgramUniform3fEXT:                                    TglProgramUniform3fEXT;
3254   glProgramUniform3fvEXT:                                   TglProgramUniform3fvEXT;
3255   glProgramUniform3iEXT:                                    TglProgramUniform3iEXT;
3256   glProgramUniform3ivEXT:                                   TglProgramUniform3ivEXT;
3257   glProgramUniform4fEXT:                                    TglProgramUniform4fEXT;
3258   glProgramUniform4fvEXT:                                   TglProgramUniform4fvEXT;
3259   glProgramUniform4iEXT:                                    TglProgramUniform4iEXT;
3260   glProgramUniform4ivEXT:                                   TglProgramUniform4ivEXT;
3261   glProgramUniformMatrix2fvEXT:                             TglProgramUniformMatrix2fvEXT;
3262   glProgramUniformMatrix3fvEXT:                             TglProgramUniformMatrix3fvEXT;
3263   glProgramUniformMatrix4fvEXT:                             TglProgramUniformMatrix4fvEXT;
3264   glUseProgramStagesEXT:                                    TglUseProgramStagesEXT;
3265   glValidateProgramPipelineEXT:                             TglValidateProgramPipelineEXT;
3266   glProgramUniform1uiEXT:                                   TglProgramUniform1uiEXT;
3267   glProgramUniform2uiEXT:                                   TglProgramUniform2uiEXT;
3268   glProgramUniform3uiEXT:                                   TglProgramUniform3uiEXT;
3269   glProgramUniform4uiEXT:                                   TglProgramUniform4uiEXT;
3270   glProgramUniform1uivEXT:                                  TglProgramUniform1uivEXT;
3271   glProgramUniform2uivEXT:                                  TglProgramUniform2uivEXT;
3272   glProgramUniform3uivEXT:                                  TglProgramUniform3uivEXT;
3273   glProgramUniform4uivEXT:                                  TglProgramUniform4uivEXT;
3274   glProgramUniformMatrix2x3fvEXT:                           TglProgramUniformMatrix2x3fvEXT;
3275   glProgramUniformMatrix3x2fvEXT:                           TglProgramUniformMatrix3x2fvEXT;
3276   glProgramUniformMatrix2x4fvEXT:                           TglProgramUniformMatrix2x4fvEXT;
3277   glProgramUniformMatrix4x2fvEXT:                           TglProgramUniformMatrix4x2fvEXT;
3278   glProgramUniformMatrix3x4fvEXT:                           TglProgramUniformMatrix3x4fvEXT;
3279   glProgramUniformMatrix4x3fvEXT:                           TglProgramUniformMatrix4x3fvEXT;
3280
3281 { GL_EXT_shader_framebuffer_fetch }
3282 const
3283   GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT                 = $8A52;
3284
3285 { GL_EXT_shader_implicit_conversions }
3286   // none
3287
3288 { GL_EXT_shader_integer_mix }
3289   // none
3290
3291 { GL_EXT_shader_io_blocks }
3292   // none
3293
3294 { GL_EXT_shader_pixel_local_storage }
3295 const
3296   GL_MAX_SHADER_PIXEL_LOCAL_STORAGE_FAST_SIZE_EXT         = $8F63;
3297   GL_MAX_SHADER_PIXEL_LOCAL_STORAGE_SIZE_EXT              = $8F67;
3298   GL_SHADER_PIXEL_LOCAL_STORAGE_EXT                       = $8F64;
3299
3300 { GL_EXT_shader_texture_lod }
3301
3302 { GL_EXT_shadow_samplers }
3303 const
3304   GL_TEXTURE_COMPARE_MODE_EXT                             = $884C;
3305   GL_TEXTURE_COMPARE_FUNC_EXT                             = $884D;
3306   GL_COMPARE_REF_TO_TEXTURE_EXT                           = $884E;
3307   GL_SAMPLER_2D_SHADOW_EXT                                = $8B62;
3308
3309 { GL_EXT_tessellation_point_size }
3310   // none
3311
3312 { GL_EXT_tessellation_shader }
3313 const
3314   GL_PATCHES_EXT                                          = $000E;
3315   GL_PATCH_VERTICES_EXT                                   = $8E72;
3316   GL_TESS_CONTROL_OUTPUT_VERTICES_EXT                     = $8E75;
3317   GL_TESS_GEN_MODE_EXT                                    = $8E76;
3318   GL_TESS_GEN_SPACING_EXT                                 = $8E77;
3319   GL_TESS_GEN_VERTEX_ORDER_EXT                            = $8E78;
3320   GL_TESS_GEN_POINT_MODE_EXT                              = $8E79;
3321   GL_ISOLINES_EXT                                         = $8E7A;
3322   GL_QUADS_EXT                                            = $0007;
3323   GL_FRACTIONAL_ODD_EXT                                   = $8E7B;
3324   GL_FRACTIONAL_EVEN_EXT                                  = $8E7C;
3325   GL_MAX_PATCH_VERTICES_EXT                               = $8E7D;
3326   GL_MAX_TESS_GEN_LEVEL_EXT                               = $8E7E;
3327   GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS_EXT              = $8E7F;
3328   GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS_EXT           = $8E80;
3329   GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS_EXT             = $8E81;
3330   GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS_EXT          = $8E82;
3331   GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS_EXT               = $8E83;
3332   GL_MAX_TESS_PATCH_COMPONENTS_EXT                        = $8E84;
3333   GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS_EXT         = $8E85;
3334   GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS_EXT            = $8E86;
3335   GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS_EXT                  = $8E89;
3336   GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS_EXT               = $8E8A;
3337   GL_MAX_TESS_CONTROL_INPUT_COMPONENTS_EXT                = $886C;
3338   GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS_EXT             = $886D;
3339   GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS_EXT     = $8E1E;
3340   GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS_EXT  = $8E1F;
3341   GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS_EXT          = $92CD;
3342   GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS_EXT       = $92CE;
3343   GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS_EXT                 = $92D3;
3344   GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS_EXT              = $92D4;
3345   GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS_EXT                  = $90CB;
3346   GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS_EXT               = $90CC;
3347   GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS_EXT           = $90D8;
3348   GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS_EXT        = $90D9;
3349   GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED              = $8221;
3350   GL_IS_PER_PATCH_EXT                                     = $92E7;
3351   GL_REFERENCED_BY_TESS_CONTROL_SHADER_EXT                = $9307;
3352   GL_REFERENCED_BY_TESS_EVALUATION_SHADER_EXT             = $9308;
3353   GL_TESS_CONTROL_SHADER_EXT                              = $8E88;
3354   GL_TESS_EVALUATION_SHADER_EXT                           = $8E87;
3355   GL_TESS_CONTROL_SHADER_BIT_EXT                          = $00000008;
3356   GL_TESS_EVALUATION_SHADER_BIT_EXT                       = $00000010;
3357 type
3358   TglPatchParameteriEXT                                   = procedure(aPname: GLenum; aValue: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3359 var
3360   glPatchParameteriEXT:                                     TglPatchParameteriEXT;
3361
3362 { GL_EXT_texture_border_clamp }
3363 const
3364   GL_TEXTURE_BORDER_COLOR_EXT                             = $1004;
3365   GL_CLAMP_TO_BORDER_EXT                                  = $812D;
3366 type
3367   TglTexParameterIivEXT                                   = procedure(aTarget: GLenum; aPname: GLenum; const aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3368   TglTexParameterIuivEXT                                  = procedure(aTarget: GLenum; aPname: GLenum; const aParams: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3369   TglGetTexParameterIivEXT                                = procedure(aTarget: GLenum; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3370   TglGetTexParameterIuivEXT                               = procedure(aTarget: GLenum; aPname: GLenum; aParams: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3371   TglSamplerParameterIivEXT                               = procedure(aSampler: GLuint; aPname: GLenum; const aParam: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3372   TglSamplerParameterIuivEXT                              = procedure(aSampler: GLuint; aPname: GLenum; const aParam: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3373   TglGetSamplerParameterIivEXT                            = procedure(aSampler: GLuint; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3374   TglGetSamplerParameterIuivEXT                           = procedure(aSampler: GLuint; aPname: GLenum; aParams: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3375 var
3376   glTexParameterIivEXT:                                     TglTexParameterIivEXT;
3377   glTexParameterIuivEXT:                                    TglTexParameterIuivEXT;
3378   glGetTexParameterIivEXT:                                  TglGetTexParameterIivEXT;
3379   glGetTexParameterIuivEXT:                                 TglGetTexParameterIuivEXT;
3380   glSamplerParameterIivEXT:                                 TglSamplerParameterIivEXT;
3381   glSamplerParameterIuivEXT:                                TglSamplerParameterIuivEXT;
3382   glGetSamplerParameterIivEXT:                              TglGetSamplerParameterIivEXT;
3383   glGetSamplerParameterIuivEXT:                             TglGetSamplerParameterIuivEXT;
3384
3385 { GL_EXT_texture_buffer }
3386 const
3387   GL_TEXTURE_BUFFER_EXT                                   = $8C2A;
3388   GL_TEXTURE_BUFFER_BINDING_EXT                           = $8C2A;
3389   GL_MAX_TEXTURE_BUFFER_SIZE_EXT                          = $8C2B;
3390   GL_TEXTURE_BINDING_BUFFER_EXT                           = $8C2C;
3391   GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT                = $8C2D;
3392   GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT_EXT                  = $919F;
3393   GL_SAMPLER_BUFFER_EXT                                   = $8DC2;
3394   GL_INT_SAMPLER_BUFFER_EXT                               = $8DD0;
3395   GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT                      = $8DD8;
3396   GL_IMAGE_BUFFER_EXT                                     = $9051;
3397   GL_INT_IMAGE_BUFFER_EXT                                 = $905C;
3398   GL_UNSIGNED_INT_IMAGE_BUFFER_EXT                        = $9067;
3399   GL_TEXTURE_BUFFER_OFFSET_EXT                            = $919D;
3400   GL_TEXTURE_BUFFER_SIZE_EXT                              = $919E;
3401 type
3402   TglTexBufferEXT                                         = procedure(aTarget: GLenum; aInternalformat: GLenum; aBuffer: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3403   TglTexBufferRangeEXT                                    = procedure(aTarget: GLenum; aInternalformat: GLenum; aBuffer: GLuint; aOffset: GLintptr; aSize: GLsizeiptr); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3404 var
3405   glTexBufferEXT:                                           TglTexBufferEXT;
3406   glTexBufferRangeEXT:                                      TglTexBufferRangeEXT;
3407
3408 { GL_EXT_texture_compression_dxt1 }
3409 const
3410   GL_COMPRESSED_RGB_S3TC_DXT1_EXT                         = $83F0;
3411   GL_COMPRESSED_RGBA_S3TC_DXT1_EXT                        = $83F1;
3412
3413 { GL_EXT_texture_compression_s3tc }
3414 const
3415   GL_COMPRESSED_RGBA_S3TC_DXT3_EXT                        = $83F2;
3416   GL_COMPRESSED_RGBA_S3TC_DXT5_EXT                        = $83F3;
3417
3418 { GL_EXT_texture_cube_map_array }
3419 const
3420   GL_TEXTURE_CUBE_MAP_ARRAY_EXT                           = $9009;
3421   GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_EXT                   = $900A;
3422   GL_SAMPLER_CUBE_MAP_ARRAY_EXT                           = $900C;
3423   GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_EXT                    = $900D;
3424   GL_INT_SAMPLER_CUBE_MAP_ARRAY_EXT                       = $900E;
3425   GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_EXT              = $900F;
3426   GL_IMAGE_CUBE_MAP_ARRAY_EXT                             = $9054;
3427   GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT                         = $905F;
3428   GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT                = $906A;
3429
3430 { GL_EXT_texture_filter_anisotropic }
3431 const
3432   GL_TEXTURE_MAX_ANISOTROPY_EXT                           = $84FE;
3433   GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT                       = $84FF;
3434
3435 { GL_EXT_texture_format_BGRA8888 }
3436
3437 { GL_EXT_texture_norm16 }
3438 const
3439   GL_R16_EXT                                              = $822A;
3440   GL_RG16_EXT                                             = $822C;
3441   GL_RGBA16_EXT                                           = $805B;
3442   GL_RGB16_EXT                                            = $8054;
3443   GL_RGB16_SNORM_EXT                                      = $8F9A;
3444
3445 { GL_EXT_texture_rg }
3446 const
3447   GL_RED_EXT                                              = $1903;
3448   GL_RG_EXT                                               = $8227;
3449   GL_R8_EXT                                               = $8229;
3450   GL_RG8_EXT                                              = $822B;
3451
3452 { GL_EXT_texture_sRGB_decode }
3453 const
3454   GL_TEXTURE_SRGB_DECODE_EXT                              = $8A48;
3455   GL_DECODE_EXT                                           = $8A49;
3456   GL_SKIP_DECODE_EXT                                      = $8A4A;
3457
3458 { GL_EXT_texture_storage }
3459 const
3460   GL_TEXTURE_IMMUTABLE_FORMAT_EXT                         = $912F;
3461   GL_ALPHA8_EXT                                           = $803C;
3462   GL_LUMINANCE8_EXT                                       = $8040;
3463   GL_LUMINANCE8_ALPHA8_EXT                                = $8045;
3464   GL_RGBA32F_EXT                                          = $8814;
3465   GL_RGB32F_EXT                                           = $8815;
3466   GL_ALPHA32F_EXT                                         = $8816;
3467   GL_LUMINANCE32F_EXT                                     = $8818;
3468   GL_LUMINANCE_ALPHA32F_EXT                               = $8819;
3469   GL_ALPHA16F_EXT                                         = $881C;
3470   GL_LUMINANCE16F_EXT                                     = $881E;
3471   GL_LUMINANCE_ALPHA16F_EXT                               = $881F;
3472   GL_R32F_EXT                                             = $822E;
3473   GL_RG32F_EXT                                            = $8230;
3474 type
3475   TglTexStorage1DEXT                                      = procedure(aTarget: GLenum; aLevels: GLsizei; aInternalformat: GLenum; aWidth: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3476   TglTexStorage2DEXT                                      = procedure(aTarget: GLenum; aLevels: GLsizei; aInternalformat: GLenum; aWidth: GLsizei; aHeight: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3477   TglTexStorage3DEXT                                      = procedure(aTarget: GLenum; aLevels: GLsizei; aInternalformat: GLenum; aWidth: GLsizei; aHeight: GLsizei; aDepth: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3478   TglTextureStorage1DEXT                                  = procedure(aTexture: GLuint; aTarget: GLenum; aLevels: GLsizei; aInternalformat: GLenum; aWidth: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3479   TglTextureStorage2DEXT                                  = procedure(aTexture: GLuint; aTarget: GLenum; aLevels: GLsizei; aInternalformat: GLenum; aWidth: GLsizei; aHeight: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3480   TglTextureStorage3DEXT                                  = procedure(aTexture: GLuint; aTarget: GLenum; aLevels: GLsizei; aInternalformat: GLenum; aWidth: GLsizei; aHeight: GLsizei; aDepth: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3481 var
3482   glTexStorage1DEXT:                                        TglTexStorage1DEXT;
3483   glTexStorage2DEXT:                                        TglTexStorage2DEXT;
3484   glTexStorage3DEXT:                                        TglTexStorage3DEXT;
3485   glTextureStorage1DEXT:                                    TglTextureStorage1DEXT;
3486   glTextureStorage2DEXT:                                    TglTextureStorage2DEXT;
3487   glTextureStorage3DEXT:                                    TglTextureStorage3DEXT;
3488
3489 { GL_EXT_texture_type_2_10_10_10_REV }
3490 const
3491   GL_UNSIGNED_INT_2_10_10_10_REV_EXT                      = $8368;
3492
3493 { GL_EXT_texture_view }
3494 const
3495   GL_TEXTURE_VIEW_MIN_LEVEL_EXT                           = $82DB;
3496   GL_TEXTURE_VIEW_NUM_LEVELS_EXT                          = $82DC;
3497   GL_TEXTURE_VIEW_MIN_LAYER_EXT                           = $82DD;
3498   GL_TEXTURE_VIEW_NUM_LAYERS_EXT                          = $82DE;
3499   //GL_TEXTURE_IMMUTABLE_LEVELS                           = $82DF;
3500 type
3501   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}
3502 var
3503   glTextureViewEXT:                                         TglTextureViewEXT;
3504
3505 { GL_EXT_unpack_subimage }
3506 const
3507   GL_UNPACK_ROW_LENGTH_EXT                                = $0CF2;
3508   GL_UNPACK_SKIP_ROWS_EXT                                 = $0CF3;
3509   GL_UNPACK_SKIP_PIXELS_EXT                               = $0CF4;
3510
3511 { GL_FJ_shader_binary_GCCSO }
3512 const
3513   GL_GCCSO_SHADER_BINARY_FJ                               = $9260;
3514
3515 { GL_IMG_multisampled_render_to_texture }
3516 const
3517   GL_RENDERBUFFER_SAMPLES_IMG                             = $9133;
3518   GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_IMG               = $9134;
3519   GL_MAX_SAMPLES_IMG                                      = $9135;
3520   GL_TEXTURE_SAMPLES_IMG                                  = $9136;
3521 type
3522   TglRenderbufferStorageMultisampleIMG                    = procedure(aTarget: GLenum; aSamples: GLsizei; aInternalformat: GLenum; aWidth: GLsizei; aHeight: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3523   TglFramebufferTexture2DMultisampleIMG                   = procedure(aTarget: GLenum; aAttachment: GLenum; aTextarget: GLenum; aTexture: GLuint; aLevel: GLint; aSamples: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3524 var
3525   glRenderbufferStorageMultisampleIMG:                      TglRenderbufferStorageMultisampleIMG;
3526   glFramebufferTexture2DMultisampleIMG:                     TglFramebufferTexture2DMultisampleIMG;
3527
3528 { GL_IMG_program_binary }
3529 const
3530   GL_SGX_PROGRAM_BINARY_IMG                               = $9130;
3531
3532 { GL_IMG_read_format }
3533 const
3534   GL_BGRA_IMG                                             = $80E1;
3535   GL_UNSIGNED_SHORT_4_4_4_4_REV_IMG                       = $8365;
3536
3537 { GL_IMG_shader_binary }
3538 const
3539   GL_SGX_BINARY_IMG                                       = $8C0A;
3540
3541 { GL_IMG_texture_compression_pvrtc }
3542 const
3543   GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG                      = $8C00;
3544   GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG                      = $8C01;
3545   GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG                     = $8C02;
3546   GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG                     = $8C03;
3547
3548 { GL_IMG_texture_compression_pvrtc2 }
3549 const
3550   GL_COMPRESSED_RGBA_PVRTC_2BPPV2_IMG                     = $9137;
3551   GL_COMPRESSED_RGBA_PVRTC_4BPPV2_IMG                     = $9138;
3552
3553 { GL_INTEL_performance_query }
3554 const
3555   GL_PERFQUERY_SINGLE_CONTEXT_INTEL                       = $00000000;
3556   GL_PERFQUERY_GLOBAL_CONTEXT_INTEL                       = $00000001;
3557   GL_PERFQUERY_WAIT_INTEL                                 = $83FB;
3558   GL_PERFQUERY_FLUSH_INTEL                                = $83FA;
3559   GL_PERFQUERY_DONOT_FLUSH_INTEL                          = $83F9;
3560   GL_PERFQUERY_COUNTER_EVENT_INTEL                        = $94F0;
3561   GL_PERFQUERY_COUNTER_DURATION_NORM_INTEL                = $94F1;
3562   GL_PERFQUERY_COUNTER_DURATION_RAW_INTEL                 = $94F2;
3563   GL_PERFQUERY_COUNTER_THROUGHPUT_INTEL                   = $94F3;
3564   GL_PERFQUERY_COUNTER_RAW_INTEL                          = $94F4;
3565   GL_PERFQUERY_COUNTER_TIMESTAMP_INTEL                    = $94F5;
3566   GL_PERFQUERY_COUNTER_DATA_UINT32_INTEL                  = $94F8;
3567   GL_PERFQUERY_COUNTER_DATA_UINT64_INTEL                  = $94F9;
3568   GL_PERFQUERY_COUNTER_DATA_FLOAT_INTEL                   = $94FA;
3569   GL_PERFQUERY_COUNTER_DATA_DOUBLE_INTEL                  = $94FB;
3570   GL_PERFQUERY_COUNTER_DATA_BOOL32_INTEL                  = $94FC;
3571   GL_PERFQUERY_QUERY_NAME_LENGTH_MAX_INTEL                = $94FD;
3572   GL_PERFQUERY_COUNTER_NAME_LENGTH_MAX_INTEL              = $94FE;
3573   GL_PERFQUERY_COUNTER_DESC_LENGTH_MAX_INTEL              = $94FF;
3574   GL_PERFQUERY_GPA_EXTENDED_COUNTERS_INTEL                = $9500;
3575 type
3576   TglBeginPerfQueryINTEL                                  = procedure(aQueryHandle: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3577   TglCreatePerfQueryINTEL                                 = procedure(aQueryId: GLuint; aQueryHandle: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3578   TglDeletePerfQueryINTEL                                 = procedure(aQueryHandle: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3579   TglEndPerfQueryINTEL                                    = procedure(aQueryHandle: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3580   TglGetFirstPerfQueryIdINTEL                             = procedure(aQueryId: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3581   TglGetNextPerfQueryIdINTEL                              = procedure(aQueryId: GLuint; aNextQueryId: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3582   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}
3583   TglGetPerfQueryDataINTEL                                = procedure(aQueryHandle: GLuint; aFlags: GLuint; aDataSize: GLsizei; aData: PGLvoid; aBytesWritten: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3584   TglGetPerfQueryIdByNameINTEL                            = procedure(aQueryName: PGLchar; aQueryId: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3585   TglGetPerfQueryInfoINTEL                                = procedure(aQueryId: GLuint; aQueryNameLength: GLuint; aQueryName: PGLchar; aDataSize: PGLuint; aNoCounters: PGLuint; aNoInstances: PGLuint; aCapsMask: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3586 var
3587   glBeginPerfQueryINTEL:                                    TglBeginPerfQueryINTEL;
3588   glCreatePerfQueryINTEL:                                   TglCreatePerfQueryINTEL;
3589   glDeletePerfQueryINTEL:                                   TglDeletePerfQueryINTEL;
3590   glEndPerfQueryINTEL:                                      TglEndPerfQueryINTEL;
3591   glGetFirstPerfQueryIdINTEL:                               TglGetFirstPerfQueryIdINTEL;
3592   glGetNextPerfQueryIdINTEL:                                TglGetNextPerfQueryIdINTEL;
3593   glGetPerfCounterInfoINTEL:                                TglGetPerfCounterInfoINTEL;
3594   glGetPerfQueryDataINTEL:                                  TglGetPerfQueryDataINTEL;
3595   glGetPerfQueryIdByNameINTEL:                              TglGetPerfQueryIdByNameINTEL;
3596   glGetPerfQueryInfoINTEL:                                  TglGetPerfQueryInfoINTEL;
3597
3598 { GL_NV_bindless_texture }
3599 type
3600   TglGetTextureHandleNV                                   = function (aTexture: GLuint): GLuint64; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3601   TglGetTextureSamplerHandleNV                            = function (aTexture: GLuint; aSampler: GLuint): GLuint64; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3602   TglMakeTextureHandleResidentNV                          = procedure(aHandle: GLuint64); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3603   TglMakeTextureHandleNonResidentNV                       = procedure(aHandle: GLuint64); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3604   TglGetImageHandleNV                                     = function (aTexture: GLuint; aLevel: GLint; aLayered: GLboolean; aLayer: GLint; aFormat: GLenum): GLuint64; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3605   TglMakeImageHandleResidentNV                            = procedure(aHandle: GLuint64; aAccess: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3606   TglMakeImageHandleNonResidentNV                         = procedure(aHandle: GLuint64); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3607   TglUniformHandleui64NV                                  = procedure(aLocation: GLint; aValue: GLuint64); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3608   TglUniformHandleui64vNV                                 = procedure(aLocation: GLint; aCount: GLsizei; const aValue: PGLuint64); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3609   TglProgramUniformHandleui64NV                           = procedure(aProgram: GLuint; aLocation: GLint; aValue: GLuint64); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3610   TglProgramUniformHandleui64vNV                          = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValues: PGLuint64); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3611   TglIsTextureHandleResidentNV                            = function (aHandle: GLuint64): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3612   TglIsImageHandleResidentNV                              = function (aHandle: GLuint64): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3613 var
3614   glGetTextureHandleNV:                                     TglGetTextureHandleNV;
3615   glGetTextureSamplerHandleNV:                              TglGetTextureSamplerHandleNV;
3616   glMakeTextureHandleResidentNV:                            TglMakeTextureHandleResidentNV;
3617   glMakeTextureHandleNonResidentNV:                         TglMakeTextureHandleNonResidentNV;
3618   glGetImageHandleNV:                                       TglGetImageHandleNV;
3619   glMakeImageHandleResidentNV:                              TglMakeImageHandleResidentNV;
3620   glMakeImageHandleNonResidentNV:                           TglMakeImageHandleNonResidentNV;
3621   glUniformHandleui64NV:                                    TglUniformHandleui64NV;
3622   glUniformHandleui64vNV:                                   TglUniformHandleui64vNV;
3623   glProgramUniformHandleui64NV:                             TglProgramUniformHandleui64NV;
3624   glProgramUniformHandleui64vNV:                            TglProgramUniformHandleui64vNV;
3625   glIsTextureHandleResidentNV:                              TglIsTextureHandleResidentNV;
3626   glIsImageHandleResidentNV:                                TglIsImageHandleResidentNV;
3627
3628 { GL_NV_blend_equation_advanced }
3629 const
3630   GL_BLEND_OVERLAP_NV                                     = $9281;
3631   GL_BLEND_PREMULTIPLIED_SRC_NV                           = $9280;
3632   GL_BLUE_NV                                              = $1905;
3633   GL_COLORBURN_NV                                         = $929A;
3634   GL_COLORDODGE_NV                                        = $9299;
3635   GL_CONJOINT_NV                                          = $9284;
3636   GL_CONTRAST_NV                                          = $92A1;
3637   GL_DARKEN_NV                                            = $9297;
3638   GL_DIFFERENCE_NV                                        = $929E;
3639   GL_DISJOINT_NV                                          = $9283;
3640   GL_DST_ATOP_NV                                          = $928F;
3641   GL_DST_IN_NV                                            = $928B;
3642   GL_DST_NV                                               = $9287;
3643   GL_DST_OUT_NV                                           = $928D;
3644   GL_DST_OVER_NV                                          = $9289;
3645   GL_EXCLUSION_NV                                         = $92A0;
3646   GL_GREEN_NV                                             = $1904;
3647   GL_HARDLIGHT_NV                                         = $929B;
3648   GL_HARDMIX_NV                                           = $92A9;
3649   GL_HSL_COLOR_NV                                         = $92AF;
3650   GL_HSL_HUE_NV                                           = $92AD;
3651   GL_HSL_LUMINOSITY_NV                                    = $92B0;
3652   GL_HSL_SATURATION_NV                                    = $92AE;
3653   GL_INVERT_OVG_NV                                        = $92B4;
3654   GL_INVERT_RGB_NV                                        = $92A3;
3655   GL_LIGHTEN_NV                                           = $9298;
3656   GL_LINEARBURN_NV                                        = $92A5;
3657   GL_LINEARDODGE_NV                                       = $92A4;
3658   GL_LINEARLIGHT_NV                                       = $92A7;
3659   GL_MINUS_CLAMPED_NV                                     = $92B3;
3660   GL_MINUS_NV                                             = $929F;
3661   GL_MULTIPLY_NV                                          = $9294;
3662   GL_OVERLAY_NV                                           = $9296;
3663   GL_PINLIGHT_NV                                          = $92A8;
3664   GL_PLUS_CLAMPED_ALPHA_NV                                = $92B2;
3665   GL_PLUS_CLAMPED_NV                                      = $92B1;
3666   GL_PLUS_DARKER_NV                                       = $9292;
3667   GL_PLUS_NV                                              = $9291;
3668   GL_RED_NV                                               = $1903;
3669   GL_SCREEN_NV                                            = $9295;
3670   GL_SOFTLIGHT_NV                                         = $929C;
3671   GL_SRC_ATOP_NV                                          = $928E;
3672   GL_SRC_IN_NV                                            = $928A;
3673   GL_SRC_NV                                               = $9286;
3674   GL_SRC_OUT_NV                                           = $928C;
3675   GL_SRC_OVER_NV                                          = $9288;
3676   GL_UNCORRELATED_NV                                      = $9282;
3677   GL_VIVIDLIGHT_NV                                        = $92A6;
3678   GL_XOR_NV                                               = $1506;
3679 type
3680   TglBlendParameteriNV                                    = procedure(aPname: GLenum; aValue: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3681   TglBlendBarrierNV                                       = procedure; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3682 var
3683   glBlendParameteriNV:                                      TglBlendParameteriNV;
3684   glBlendBarrierNV:                                         TglBlendBarrierNV;
3685
3686 { GL_NV_blend_equation_advanced_coherent }
3687 const
3688   GL_BLEND_ADVANCED_COHERENT_NV                           = $9285;
3689
3690 { GL_NV_conditional_render }
3691 const
3692   GL_QUERY_WAIT_NV                                        = $8E13;
3693   GL_QUERY_NO_WAIT_NV                                     = $8E14;
3694   GL_QUERY_BY_REGION_WAIT_NV                              = $8E15;
3695   GL_QUERY_BY_REGION_NO_WAIT_NV                           = $8E16;
3696 type
3697   TglBeginConditionalRenderNV                             = procedure(aId: GLuint; aMode: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3698   TglEndConditionalRenderNV                               = procedure; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3699 var
3700   glBeginConditionalRenderNV:                               TglBeginConditionalRenderNV;
3701   glEndConditionalRenderNV:                                 TglEndConditionalRenderNV;
3702
3703 { GL_NV_copy_buffer }
3704 const
3705   GL_COPY_READ_BUFFER_NV                                  = $8F36;
3706   GL_COPY_WRITE_BUFFER_NV                                 = $8F37;
3707 type
3708   TglCopyBufferSubDataNV                                  = procedure(aReadTarget: GLenum; aWriteTarget: GLenum; aReadOffset: GLintptr; aWriteOffset: GLintptr; aSize: GLsizeiptr); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3709 var
3710   glCopyBufferSubDataNV:                                    TglCopyBufferSubDataNV;
3711
3712 { GL_NV_coverage_sample }
3713 const
3714   GL_COVERAGE_COMPONENT_NV                                = $8ED0;
3715   GL_COVERAGE_COMPONENT4_NV                               = $8ED1;
3716   GL_COVERAGE_ATTACHMENT_NV                               = $8ED2;
3717   GL_COVERAGE_BUFFERS_NV                                  = $8ED3;
3718   GL_COVERAGE_SAMPLES_NV                                  = $8ED4;
3719   GL_COVERAGE_ALL_FRAGMENTS_NV                            = $8ED5;
3720   GL_COVERAGE_EDGE_FRAGMENTS_NV                           = $8ED6;
3721   GL_COVERAGE_AUTOMATIC_NV                                = $8ED7;
3722   GL_COVERAGE_BUFFER_BIT_NV                               = $00008000;
3723 type
3724   TglCoverageMaskNV                                       = procedure(aMask: GLboolean); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3725   TglCoverageOperationNV                                  = procedure(aOperation: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3726 var
3727   glCoverageMaskNV:                                         TglCoverageMaskNV;
3728   glCoverageOperationNV:                                    TglCoverageOperationNV;
3729
3730 { GL_NV_depth_nonlinear }
3731 const
3732   GL_DEPTH_COMPONENT16_NONLINEAR_NV                       = $8E2C;
3733
3734 { GL_NV_draw_buffers }
3735 const
3736   GL_MAX_DRAW_BUFFERS_NV                                  = $8824;
3737   GL_DRAW_BUFFER0_NV                                      = $8825;
3738   GL_DRAW_BUFFER1_NV                                      = $8826;
3739   GL_DRAW_BUFFER2_NV                                      = $8827;
3740   GL_DRAW_BUFFER3_NV                                      = $8828;
3741   GL_DRAW_BUFFER4_NV                                      = $8829;
3742   GL_DRAW_BUFFER5_NV                                      = $882A;
3743   GL_DRAW_BUFFER6_NV                                      = $882B;
3744   GL_DRAW_BUFFER7_NV                                      = $882C;
3745   GL_DRAW_BUFFER8_NV                                      = $882D;
3746   GL_DRAW_BUFFER9_NV                                      = $882E;
3747   GL_DRAW_BUFFER10_NV                                     = $882F;
3748   GL_DRAW_BUFFER11_NV                                     = $8830;
3749   GL_DRAW_BUFFER12_NV                                     = $8831;
3750   GL_DRAW_BUFFER13_NV                                     = $8832;
3751   GL_DRAW_BUFFER14_NV                                     = $8833;
3752   GL_DRAW_BUFFER15_NV                                     = $8834;
3753   GL_COLOR_ATTACHMENT0_NV                                 = $8CE0;
3754   GL_COLOR_ATTACHMENT1_NV                                 = $8CE1;
3755   GL_COLOR_ATTACHMENT2_NV                                 = $8CE2;
3756   GL_COLOR_ATTACHMENT3_NV                                 = $8CE3;
3757   GL_COLOR_ATTACHMENT4_NV                                 = $8CE4;
3758   GL_COLOR_ATTACHMENT5_NV                                 = $8CE5;
3759   GL_COLOR_ATTACHMENT6_NV                                 = $8CE6;
3760   GL_COLOR_ATTACHMENT7_NV                                 = $8CE7;
3761   GL_COLOR_ATTACHMENT8_NV                                 = $8CE8;
3762   GL_COLOR_ATTACHMENT9_NV                                 = $8CE9;
3763   GL_COLOR_ATTACHMENT10_NV                                = $8CEA;
3764   GL_COLOR_ATTACHMENT11_NV                                = $8CEB;
3765   GL_COLOR_ATTACHMENT12_NV                                = $8CEC;
3766   GL_COLOR_ATTACHMENT13_NV                                = $8CED;
3767   GL_COLOR_ATTACHMENT14_NV                                = $8CEE;
3768   GL_COLOR_ATTACHMENT15_NV                                = $8CEF;
3769 type
3770   TglDrawBuffersNV                                        = procedure(n: GLsizei; const aBufs: PGLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3771 var
3772   glDrawBuffersNV:                                          TglDrawBuffersNV;
3773
3774 { GL_NV_draw_instanced }
3775 type
3776   TglDrawArraysInstancedNV                                = procedure(aMode: GLenum; aFirst: GLint; aCount: GLsizei; aPrimcount: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3777   TglDrawElementsInstancedNV                              = procedure(aMode: GLenum; aCount: GLsizei; aType: GLenum; const aIndices: Pointer; aPrimcount: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3778 var
3779   glDrawArraysInstancedNV:                                  TglDrawArraysInstancedNV;
3780   glDrawElementsInstancedNV:                                TglDrawElementsInstancedNV;
3781
3782 { GL_NV_explicit_attrib_location }
3783   // none
3784
3785 { GL_NV_fbo_color_attachments }
3786 const
3787   GL_MAX_COLOR_ATTACHMENTS_NV                             = $8CDF;
3788
3789 { GL_NV_fence }
3790 const
3791   GL_ALL_COMPLETED_NV                                     = $84F2;
3792   GL_FENCE_STATUS_NV                                      = $84F3;
3793   GL_FENCE_CONDITION_NV                                   = $84F4;
3794 type
3795   TglDeleteFencesNV                                       = procedure(n: GLsizei; const aFences: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3796   TglGenFencesNV                                          = procedure(n: GLsizei; aFences: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3797   TglIsFenceNV                                            = function (aFence: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3798   TglTestFenceNV                                          = function (aFence: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3799   TglGetFenceivNV                                         = procedure(aFence: GLuint; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3800   TglFinishFenceNV                                        = procedure(aFence: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3801   TglSetFenceNV                                           = procedure(aFence: GLuint; aCondition: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3802 var
3803   glDeleteFencesNV:                                         TglDeleteFencesNV;
3804   glGenFencesNV:                                            TglGenFencesNV;
3805   glIsFenceNV:                                              TglIsFenceNV;
3806   glTestFenceNV:                                            TglTestFenceNV;
3807   glGetFenceivNV:                                           TglGetFenceivNV;
3808   glFinishFenceNV:                                          TglFinishFenceNV;
3809   glSetFenceNV:                                             TglSetFenceNV;
3810
3811 { GL_NV_framebuffer_blit }
3812 const
3813   GL_READ_FRAMEBUFFER_NV                                  = $8CA8;
3814   GL_DRAW_FRAMEBUFFER_NV                                  = $8CA9;
3815   GL_DRAW_FRAMEBUFFER_BINDING_NV                          = $8CA6;
3816   GL_READ_FRAMEBUFFER_BINDING_NV                          = $8CAA;
3817 type
3818   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}
3819 var
3820   glBlitFramebufferNV:                                      TglBlitFramebufferNV;
3821
3822 { GL_NV_framebuffer_multisample }
3823 const
3824   GL_RENDERBUFFER_SAMPLES_NV                              = $8CAB;
3825   GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_NV                = $8D56;
3826   GL_MAX_SAMPLES_NV                                       = $8D57;
3827 type
3828   TglRenderbufferStorageMultisampleNV                     = procedure(aTarget: GLenum; aSamples: GLsizei; aInternalformat: GLenum; aWidth: GLsizei; aHeight: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3829 var
3830   glRenderbufferStorageMultisampleNV:                       TglRenderbufferStorageMultisampleNV;
3831
3832 { GL_NV_generate_mipmap_sRGB }
3833   // none
3834
3835 { GL_NV_image_formats }
3836   // none
3837
3838 { GL_NV_instanced_arrays }
3839 const
3840   GL_VERTEX_ATTRIB_ARRAY_DIVISOR_NV                       = $88FE;
3841 type
3842   TglVertexAttribDivisorNV                                = procedure(aIndex: GLuint; aDivisor: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3843 var
3844   glVertexAttribDivisorNV:                                  TglVertexAttribDivisorNV;
3845
3846 { GL_NV_internalformat_sample_query }
3847 const
3848   //GL_TEXTURE_2D_MULTISAMPLE                             = $9100;
3849   GL_TEXTURE_2D_MULTISAMPLE_ARRAY                         = $9102;
3850   GL_MULTISAMPLES_NV                                      = $9371;
3851   GL_SUPERSAMPLE_SCALE_X_NV                               = $9372;
3852   GL_SUPERSAMPLE_SCALE_Y_NV                               = $9373;
3853   GL_CONFORMANT_NV                                        = $9374;
3854 type
3855   TglGetInternalformatSampleivNV                          = procedure(aTarget: GLenum; aInternalformat: GLenum; aSamples: GLsizei; aPname: GLenum; aBufSize: GLsizei; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3856 var
3857   glGetInternalformatSampleivNV:                            TglGetInternalformatSampleivNV;
3858
3859 { GL_NV_non_square_matrices }
3860 const
3861   GL_FLOAT_MAT2x3_NV                                      = $8B65;
3862   GL_FLOAT_MAT2x4_NV                                      = $8B66;
3863   GL_FLOAT_MAT3x2_NV                                      = $8B67;
3864   GL_FLOAT_MAT3x4_NV                                      = $8B68;
3865   GL_FLOAT_MAT4x2_NV                                      = $8B69;
3866   GL_FLOAT_MAT4x3_NV                                      = $8B6A;
3867 type
3868   TglUniformMatrix2x3fvNV                                 = procedure(aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3869   TglUniformMatrix3x2fvNV                                 = procedure(aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3870   TglUniformMatrix2x4fvNV                                 = procedure(aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3871   TglUniformMatrix4x2fvNV                                 = procedure(aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3872   TglUniformMatrix3x4fvNV                                 = procedure(aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3873   TglUniformMatrix4x3fvNV                                 = procedure(aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
3874 var
3875   glUniformMatrix2x3fvNV:                                   TglUniformMatrix2x3fvNV;
3876   glUniformMatrix3x2fvNV:                                   TglUniformMatrix3x2fvNV;
3877   glUniformMatrix2x4fvNV:                                   TglUniformMatrix2x4fvNV;
3878   glUniformMatrix4x2fvNV:                                   TglUniformMatrix4x2fvNV;
3879   glUniformMatrix3x4fvNV:                                   TglUniformMatrix3x4fvNV;
3880   glUniformMatrix4x3fvNV:                                   TglUniformMatrix4x3fvNV;
3881
3882 { GL_NV_path_rendering }
3883 const
3884   GL_PATH_FORMAT_SVG_NV                                   = $9070;
3885   GL_PATH_FORMAT_PS_NV                                    = $9071;
3886   GL_STANDARD_FONT_NAME_NV                                = $9072;
3887   GL_SYSTEM_FONT_NAME_NV                                  = $9073;
3888   GL_FILE_NAME_NV                                         = $9074;
3889   GL_PATH_STROKE_WIDTH_NV                                 = $9075;
3890   GL_PATH_END_CAPS_NV                                     = $9076;
3891   GL_PATH_INITIAL_END_CAP_NV                              = $9077;
3892   GL_PATH_TERMINAL_END_CAP_NV                             = $9078;
3893   GL_PATH_JOIN_STYLE_NV                                   = $9079;
3894   GL_PATH_MITER_LIMIT_NV                                  = $907A;
3895   GL_PATH_DASH_CAPS_NV                                    = $907B;
3896   GL_PATH_INITIAL_DASH_CAP_NV                             = $907C;
3897   GL_PATH_TERMINAL_DASH_CAP_NV                            = $907D;
3898   GL_PATH_DASH_OFFSET_NV                                  = $907E;
3899   GL_PATH_CLIENT_LENGTH_NV                                = $907F;
3900   GL_PATH_FILL_MODE_NV                                    = $9080;
3901   GL_PATH_FILL_MASK_NV                                    = $9081;
3902   GL_PATH_FILL_COVER_MODE_NV                              = $9082;
3903   GL_PATH_STROKE_COVER_MODE_NV                            = $9083;
3904   GL_PATH_STROKE_MASK_NV                                  = $9084;
3905   GL_COUNT_UP_NV                                          = $9088;
3906   GL_COUNT_DOWN_NV                                        = $9089;
3907   GL_PATH_OBJECT_BOUNDING_BOX_NV                          = $908A;
3908   GL_CONVEX_HULL_NV                                       = $908B;
3909   GL_BOUNDING_BOX_NV                                      = $908D;
3910   GL_TRANSLATE_X_NV                                       = $908E;
3911   GL_TRANSLATE_Y_NV                                       = $908F;
3912   GL_TRANSLATE_2D_NV                                      = $9090;
3913   GL_TRANSLATE_3D_NV                                      = $9091;
3914   GL_AFFINE_2D_NV                                         = $9092;
3915   GL_AFFINE_3D_NV                                         = $9094;
3916   GL_TRANSPOSE_AFFINE_2D_NV                               = $9096;
3917   GL_TRANSPOSE_AFFINE_3D_NV                               = $9098;
3918   GL_UTF8_NV                                              = $909A;
3919   GL_UTF16_NV                                             = $909B;
3920   GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV                    = $909C;
3921   GL_PATH_COMMAND_COUNT_NV                                = $909D;
3922   GL_PATH_COORD_COUNT_NV                                  = $909E;
3923   GL_PATH_DASH_ARRAY_COUNT_NV                             = $909F;
3924   GL_PATH_COMPUTED_LENGTH_NV                              = $90A0;
3925   GL_PATH_FILL_BOUNDING_BOX_NV                            = $90A1;
3926   GL_PATH_STROKE_BOUNDING_BOX_NV                          = $90A2;
3927   GL_SQUARE_NV                                            = $90A3;
3928   GL_ROUND_NV                                             = $90A4;
3929   GL_TRIANGULAR_NV                                        = $90A5;
3930   GL_BEVEL_NV                                             = $90A6;
3931   GL_MITER_REVERT_NV                                      = $90A7;
3932   GL_MITER_TRUNCATE_NV                                    = $90A8;
3933   GL_SKIP_MISSING_GLYPH_NV                                = $90A9;
3934   GL_USE_MISSING_GLYPH_NV                                 = $90AA;
3935   GL_PATH_ERROR_POSITION_NV                               = $90AB;
3936   GL_ACCUM_ADJACENT_PAIRS_NV                              = $90AD;
3937   GL_ADJACENT_PAIRS_NV                                    = $90AE;
3938   GL_FIRST_TO_REST_NV                                     = $90AF;
3939   GL_PATH_GEN_MODE_NV                                     = $90B0;
3940   GL_PATH_GEN_COEFF_NV                                    = $90B1;
3941   GL_PATH_GEN_COMPONENTS_NV                               = $90B3;
3942   GL_PATH_STENCIL_FUNC_NV                                 = $90B7;
3943   GL_PATH_STENCIL_REF_NV                                  = $90B8;
3944   GL_PATH_STENCIL_VALUE_MASK_NV                           = $90B9;
3945   GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV                  = $90BD;
3946   GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV                   = $90BE;
3947   GL_PATH_COVER_DEPTH_FUNC_NV                             = $90BF;
3948   GL_PATH_DASH_OFFSET_RESET_NV                            = $90B4;
3949   GL_MOVE_TO_RESETS_NV                                    = $90B5;
3950   GL_MOVE_TO_CONTINUES_NV                                 = $90B6;
3951   GL_CLOSE_PATH_NV                                        = $00;
3952   GL_MOVE_TO_NV                                           = $02;
3953   GL_RELATIVE_MOVE_TO_NV                                  = $03;
3954   GL_LINE_TO_NV                                           = $04;
3955   GL_RELATIVE_LINE_TO_NV                                  = $05;
3956   GL_HORIZONTAL_LINE_TO_NV                                = $06;
3957   GL_RELATIVE_HORIZONTAL_LINE_TO_NV                       = $07;
3958   GL_VERTICAL_LINE_TO_NV                                  = $08;
3959   GL_RELATIVE_VERTICAL_LINE_TO_NV                         = $09;
3960   GL_QUADRATIC_CURVE_TO_NV                                = $0A;
3961   GL_RELATIVE_QUADRATIC_CURVE_TO_NV                       = $0B;
3962   GL_CUBIC_CURVE_TO_NV                                    = $0C;
3963   GL_RELATIVE_CUBIC_CURVE_TO_NV                           = $0D;
3964   GL_SMOOTH_QUADRATIC_CURVE_TO_NV                         = $0E;
3965   GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV                = $0F;
3966   GL_SMOOTH_CUBIC_CURVE_TO_NV                             = $10;
3967   GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV                    = $11;
3968   GL_SMALL_CCW_ARC_TO_NV                                  = $12;
3969   GL_RELATIVE_SMALL_CCW_ARC_TO_NV                         = $13;
3970   GL_SMALL_CW_ARC_TO_NV                                   = $14;
3971   GL_RELATIVE_SMALL_CW_ARC_TO_NV                          = $15;
3972   GL_LARGE_CCW_ARC_TO_NV                                  = $16;
3973   GL_RELATIVE_LARGE_CCW_ARC_TO_NV                         = $17;
3974   GL_LARGE_CW_ARC_TO_NV                                   = $18;
3975   GL_RELATIVE_LARGE_CW_ARC_TO_NV                          = $19;
3976   GL_RESTART_PATH_NV                                      = $F0;
3977   GL_DUP_FIRST_CUBIC_CURVE_TO_NV                          = $F2;
3978   GL_DUP_LAST_CUBIC_CURVE_TO_NV                           = $F4;
3979   GL_RECT_NV                                              = $F6;
3980   GL_CIRCULAR_CCW_ARC_TO_NV                               = $F8;
3981   GL_CIRCULAR_CW_ARC_TO_NV                                = $FA;
3982   GL_CIRCULAR_TANGENT_ARC_TO_NV                           = $FC;
3983   GL_ARC_TO_NV                                            = $FE;
3984   GL_RELATIVE_ARC_TO_NV                                   = $FF;
3985   GL_BOLD_BIT_NV                                          = $01;
3986   GL_ITALIC_BIT_NV                                        = $02;
3987   GL_GLYPH_WIDTH_BIT_NV                                   = $01;
3988   GL_GLYPH_HEIGHT_BIT_NV                                  = $02;
3989   GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV                    = $04;
3990   GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV                    = $08;
3991   GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV              = $10;
3992   GL_GLYPH_VERTICAL_BEARING_X_BIT_NV                      = $20;
3993   GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV                      = $40;
3994   GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV                = $80;
3995   GL_GLYPH_HAS_KERNING_BIT_NV                             = $100;
3996   GL_FONT_X_MIN_BOUNDS_BIT_NV                             = $00010000;
3997   GL_FONT_Y_MIN_BOUNDS_BIT_NV                             = $00020000;
3998   GL_FONT_X_MAX_BOUNDS_BIT_NV                             = $00040000;
3999   GL_FONT_Y_MAX_BOUNDS_BIT_NV                             = $00080000;
4000   GL_FONT_UNITS_PER_EM_BIT_NV                             = $00100000;
4001   GL_FONT_ASCENDER_BIT_NV                                 = $00200000;
4002   GL_FONT_DESCENDER_BIT_NV                                = $00400000;
4003   GL_FONT_HEIGHT_BIT_NV                                   = $00800000;
4004   GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV                        = $01000000;
4005   GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV                       = $02000000;
4006   GL_FONT_UNDERLINE_POSITION_BIT_NV                       = $04000000;
4007   GL_FONT_UNDERLINE_THICKNESS_BIT_NV                      = $08000000;
4008   GL_FONT_HAS_KERNING_BIT_NV                              = $10000000;
4009   GL_ROUNDED_RECT_NV                                      = $E8;
4010   GL_RELATIVE_ROUNDED_RECT_NV                             = $E9;
4011   GL_ROUNDED_RECT2_NV                                     = $EA;
4012   GL_RELATIVE_ROUNDED_RECT2_NV                            = $EB;
4013   GL_ROUNDED_RECT4_NV                                     = $EC;
4014   GL_RELATIVE_ROUNDED_RECT4_NV                            = $ED;
4015   GL_ROUNDED_RECT8_NV                                     = $EE;
4016   GL_RELATIVE_ROUNDED_RECT8_NV                            = $EF;
4017   GL_RELATIVE_RECT_NV                                     = $F7;
4018   GL_FONT_GLYPHS_AVAILABLE_NV                             = $9368;
4019   GL_FONT_TARGET_UNAVAILABLE_NV                           = $9369;
4020   GL_FONT_UNAVAILABLE_NV                                  = $936A;
4021   GL_FONT_UNINTELLIGIBLE_NV                               = $936B;
4022   GL_CONIC_CURVE_TO_NV                                    = $1A;
4023   GL_RELATIVE_CONIC_CURVE_TO_NV                           = $1B;
4024   GL_FONT_NUM_GLYPH_INDICES_BIT_NV                        = $20000000;
4025   GL_STANDARD_FONT_FORMAT_NV                              = $936C;
4026   GL_PATH_PROJECTION_NV                                   = $1701;
4027   GL_PATH_MODELVIEW_NV                                    = $1700;
4028   GL_PATH_MODELVIEW_STACK_DEPTH_NV                        = $0BA3;
4029   GL_PATH_MODELVIEW_MATRIX_NV                             = $0BA6;
4030   GL_PATH_MAX_MODELVIEW_STACK_DEPTH_NV                    = $0D36;
4031   GL_PATH_TRANSPOSE_MODELVIEW_MATRIX_NV                   = $84E3;
4032   GL_PATH_PROJECTION_STACK_DEPTH_NV                       = $0BA4;
4033   GL_PATH_PROJECTION_MATRIX_NV                            = $0BA7;
4034   GL_PATH_MAX_PROJECTION_STACK_DEPTH_NV                   = $0D38;
4035   GL_PATH_TRANSPOSE_PROJECTION_MATRIX_NV                  = $84E4;
4036   GL_FRAGMENT_INPUT_NV                                    = $936D;
4037 type
4038   TglGenPathsNV                                           = function (aRange: GLsizei): GLuint; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4039   TglDeletePathsNV                                        = procedure(aPath: GLuint; aRange: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4040   TglIsPathNV                                             = function (aPath: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4041   TglPathCommandsNV                                       = procedure(aPath: GLuint; aNumCommands: GLsizei; const aCommands: PGLubyte; aNumCoords: GLsizei; aCoordType: GLenum; const aCoords: Pointer); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4042   TglPathCoordsNV                                         = procedure(aPath: GLuint; aNumCoords: GLsizei; aCoordType: GLenum; const aCoords: Pointer); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4043   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}
4044   TglPathSubCoordsNV                                      = procedure(aPath: GLuint; aCoordStart: GLsizei; aNumCoords: GLsizei; aCoordType: GLenum; const aCoords: Pointer); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4045   TglPathStringNV                                         = procedure(aPath: GLuint; aFormat: GLenum; aLength: GLsizei; const aPathString: Pointer); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4046   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}
4047   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}
4048   TglWeightPathsNV                                        = procedure(aResultPath: GLuint; aNumPaths: GLsizei; const aPaths: PGLuint; const aWeights: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4049   TglCopyPathNV                                           = procedure(aResultPath: GLuint; aSrcPath: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4050   TglInterpolatePathsNV                                   = procedure(aResultPath: GLuint; aPathA: GLuint; aPathB: GLuint; aWeight: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4051   TglTransformPathNV                                      = procedure(aResultPath: GLuint; aSrcPath: GLuint; aTransformType: GLenum; const aTransformValues: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4052   TglPathParameterivNV                                    = procedure(aPath: GLuint; aPname: GLenum; const aValue: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4053   TglPathParameteriNV                                     = procedure(aPath: GLuint; aPname: GLenum; aValue: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4054   TglPathParameterfvNV                                    = procedure(aPath: GLuint; aPname: GLenum; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4055   TglPathParameterfNV                                     = procedure(aPath: GLuint; aPname: GLenum; aValue: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4056   TglPathDashArrayNV                                      = procedure(aPath: GLuint; aDashCount: GLsizei; const aDashArray: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4057   TglPathStencilFuncNV                                    = procedure(aFunc: GLenum; aRef: GLint; aMask: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4058   TglPathStencilDepthOffsetNV                             = procedure(aFactor: GLfloat; aUnits: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4059   TglStencilFillPathNV                                    = procedure(aPath: GLuint; aFillMode: GLenum; aMask: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4060   TglStencilStrokePathNV                                  = procedure(aPath: GLuint; aReference: GLint; aMask: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4061   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}
4062   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}
4063   TglPathCoverDepthFuncNV                                 = procedure(aFunc: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4064   TglCoverFillPathNV                                      = procedure(aPath: GLuint; aCoverMode: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4065   TglCoverStrokePathNV                                    = procedure(aPath: GLuint; aCoverMode: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4066   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}
4067   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}
4068   TglGetPathParameterivNV                                 = procedure(aPath: GLuint; aPname: GLenum; aValue: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4069   TglGetPathParameterfvNV                                 = procedure(aPath: GLuint; aPname: GLenum; aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4070   TglGetPathCommandsNV                                    = procedure(aPath: GLuint; aCommands: PGLubyte); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4071   TglGetPathCoordsNV                                      = procedure(aPath: GLuint; aCoords: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4072   TglGetPathDashArrayNV                                   = procedure(aPath: GLuint; aDashArray: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4073   TglGetPathMetricsNV                                     = procedure(aMetricQueryMask: GLbitfield; aNumPaths: GLsizei; aPathNameType: GLenum; const aPaths: Pointer; aPathBase: GLuint; aStride: GLsizei; aMetrics: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4074   TglGetPathMetricRangeNV                                 = procedure(aMetricQueryMask: GLbitfield; aFirstPathName: GLuint; aNumPaths: GLsizei; aStride: GLsizei; aMetrics: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4075   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}
4076   TglIsPointInFillPathNV                                  = function (aPath: GLuint; aMask: GLuint; x: GLfloat; y: GLfloat): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4077   TglIsPointInStrokePathNV                                = function (aPath: GLuint; x: GLfloat; y: GLfloat): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4078   TglGetPathLengthNV                                      = function (aPath: GLuint; aStartSegment: GLsizei; aNumSegments: GLsizei): GLfloat; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4079   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}
4080   TglMatrixLoad3x2fNV                                     = procedure(aMatrixMode: GLenum; const m: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4081   TglMatrixLoad3x3fNV                                     = procedure(aMatrixMode: GLenum; const m: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4082   TglMatrixLoadTranspose3x3fNV                            = procedure(aMatrixMode: GLenum; const m: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4083   TglMatrixMult3x2fNV                                     = procedure(aMatrixMode: GLenum; const m: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4084   TglMatrixMult3x3fNV                                     = procedure(aMatrixMode: GLenum; const m: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4085   TglMatrixMultTranspose3x3fNV                            = procedure(aMatrixMode: GLenum; const m: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4086   TglStencilThenCoverFillPathNV                           = procedure(aPath: GLuint; aFillMode: GLenum; aMask: GLuint; aCoverMode: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4087   TglStencilThenCoverStrokePathNV                         = procedure(aPath: GLuint; aReference: GLint; aMask: GLuint; aCoverMode: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4088   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}
4089   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}
4090   TglPathGlyphIndexRangeNV                                = function (aFontTarget: GLenum; const aFontName: Pointer; aFontStyle: GLbitfield; aPathParameterTemplate: GLuint; aEmScale: GLfloat; aBaseAndCount: PGLuint): GLenum; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4091   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}
4092   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}
4093   TglProgramPathFragmentInputGenNV                        = procedure(aProgram: GLuint; aLocation: GLint; aGenMode: GLenum; aComponents: GLint; const aCoeffs: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4094   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}
4095 var
4096   glGenPathsNV:                                             TglGenPathsNV;
4097   glDeletePathsNV:                                          TglDeletePathsNV;
4098   glIsPathNV:                                               TglIsPathNV;
4099   glPathCommandsNV:                                         TglPathCommandsNV;
4100   glPathCoordsNV:                                           TglPathCoordsNV;
4101   glPathSubCommandsNV:                                      TglPathSubCommandsNV;
4102   glPathSubCoordsNV:                                        TglPathSubCoordsNV;
4103   glPathStringNV:                                           TglPathStringNV;
4104   glPathGlyphsNV:                                           TglPathGlyphsNV;
4105   glPathGlyphRangeNV:                                       TglPathGlyphRangeNV;
4106   glWeightPathsNV:                                          TglWeightPathsNV;
4107   glCopyPathNV:                                             TglCopyPathNV;
4108   glInterpolatePathsNV:                                     TglInterpolatePathsNV;
4109   glTransformPathNV:                                        TglTransformPathNV;
4110   glPathParameterivNV:                                      TglPathParameterivNV;
4111   glPathParameteriNV:                                       TglPathParameteriNV;
4112   glPathParameterfvNV:                                      TglPathParameterfvNV;
4113   glPathParameterfNV:                                       TglPathParameterfNV;
4114   glPathDashArrayNV:                                        TglPathDashArrayNV;
4115   glPathStencilFuncNV:                                      TglPathStencilFuncNV;
4116   glPathStencilDepthOffsetNV:                               TglPathStencilDepthOffsetNV;
4117   glStencilFillPathNV:                                      TglStencilFillPathNV;
4118   glStencilStrokePathNV:                                    TglStencilStrokePathNV;
4119   glStencilFillPathInstancedNV:                             TglStencilFillPathInstancedNV;
4120   glStencilStrokePathInstancedNV:                           TglStencilStrokePathInstancedNV;
4121   glPathCoverDepthFuncNV:                                   TglPathCoverDepthFuncNV;
4122   glCoverFillPathNV:                                        TglCoverFillPathNV;
4123   glCoverStrokePathNV:                                      TglCoverStrokePathNV;
4124   glCoverFillPathInstancedNV:                               TglCoverFillPathInstancedNV;
4125   glCoverStrokePathInstancedNV:                             TglCoverStrokePathInstancedNV;
4126   glGetPathParameterivNV:                                   TglGetPathParameterivNV;
4127   glGetPathParameterfvNV:                                   TglGetPathParameterfvNV;
4128   glGetPathCommandsNV:                                      TglGetPathCommandsNV;
4129   glGetPathCoordsNV:                                        TglGetPathCoordsNV;
4130   glGetPathDashArrayNV:                                     TglGetPathDashArrayNV;
4131   glGetPathMetricsNV:                                       TglGetPathMetricsNV;
4132   glGetPathMetricRangeNV:                                   TglGetPathMetricRangeNV;
4133   glGetPathSpacingNV:                                       TglGetPathSpacingNV;
4134   glIsPointInFillPathNV:                                    TglIsPointInFillPathNV;
4135   glIsPointInStrokePathNV:                                  TglIsPointInStrokePathNV;
4136   glGetPathLengthNV:                                        TglGetPathLengthNV;
4137   glPointAlongPathNV:                                       TglPointAlongPathNV;
4138   glMatrixLoad3x2fNV:                                       TglMatrixLoad3x2fNV;
4139   glMatrixLoad3x3fNV:                                       TglMatrixLoad3x3fNV;
4140   glMatrixLoadTranspose3x3fNV:                              TglMatrixLoadTranspose3x3fNV;
4141   glMatrixMult3x2fNV:                                       TglMatrixMult3x2fNV;
4142   glMatrixMult3x3fNV:                                       TglMatrixMult3x3fNV;
4143   glMatrixMultTranspose3x3fNV:                              TglMatrixMultTranspose3x3fNV;
4144   glStencilThenCoverFillPathNV:                             TglStencilThenCoverFillPathNV;
4145   glStencilThenCoverStrokePathNV:                           TglStencilThenCoverStrokePathNV;
4146   glStencilThenCoverFillPathInstancedNV:                    TglStencilThenCoverFillPathInstancedNV;
4147   glStencilThenCoverStrokePathInstancedNV:                  TglStencilThenCoverStrokePathInstancedNV;
4148   glPathGlyphIndexRangeNV:                                  TglPathGlyphIndexRangeNV;
4149   glPathGlyphIndexArrayNV:                                  TglPathGlyphIndexArrayNV;
4150   glPathMemoryGlyphIndexArrayNV:                            TglPathMemoryGlyphIndexArrayNV;
4151   glProgramPathFragmentInputGenNV:                          TglProgramPathFragmentInputGenNV;
4152   glGetProgramResourcefvNV:                                 TglGetProgramResourcefvNV;
4153
4154 { GL_NV_read_buffer }
4155 const
4156   GL_READ_BUFFER_NV                                       = $0C02;
4157 type
4158   TglReadBufferNV                                         = procedure(aMode: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4159 var
4160   glReadBufferNV:                                           TglReadBufferNV;
4161
4162 { GL_NV_read_buffer_front }
4163   // none
4164
4165 { GL_NV_read_depth }
4166   // none
4167
4168 { GL_NV_read_depth_stencil }
4169   // none
4170
4171 { GL_NV_read_stencil }
4172   // none
4173
4174 { GL_NV_sRGB_formats }
4175 const
4176   GL_SLUMINANCE_NV                                        = $8C46;
4177   GL_SLUMINANCE_ALPHA_NV                                  = $8C44;
4178   GL_SRGB8_NV                                             = $8C41;
4179   GL_SLUMINANCE8_NV                                       = $8C47;
4180   GL_SLUMINANCE8_ALPHA8_NV                                = $8C45;
4181   GL_COMPRESSED_SRGB_S3TC_DXT1_NV                         = $8C4C;
4182   GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_NV                   = $8C4D;
4183   GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_NV                   = $8C4E;
4184   GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_NV                   = $8C4F;
4185   GL_ETC1_SRGB8_NV                                        = $88EE;
4186
4187 { GL_NV_shader_noperspective_interpolation }
4188   // none
4189
4190 { GL_NV_shadow_samplers_array }
4191 const
4192   GL_SAMPLER_2D_ARRAY_SHADOW_NV                           = $8DC4;
4193
4194 { GL_NV_shadow_samplers_cube }
4195 const
4196   GL_SAMPLER_CUBE_SHADOW_NV                               = $8DC5;
4197
4198 { GL_NV_texture_border_clamp }
4199 const
4200   GL_TEXTURE_BORDER_COLOR_NV                              = $1004;
4201   GL_CLAMP_TO_BORDER_NV                                   = $812D;
4202
4203 { GL_NV_texture_compression_s3tc_update }
4204   // none
4205
4206 { GL_NV_texture_npot_2D_mipmap }
4207   // none
4208
4209 { GL_NV_viewport_array }
4210 const
4211   GL_MAX_VIEWPORTS_NV                                     = $825B;
4212   GL_VIEWPORT_SUBPIXEL_BITS_NV                            = $825C;
4213   GL_VIEWPORT_BOUNDS_RANGE_NV                             = $825D;
4214   GL_VIEWPORT_INDEX_PROVOKING_VERTEX_NV                   = $825F;
4215 type
4216   TglViewportArrayvNV                                     = procedure(aFirst: GLuint; aCount: GLsizei; const v: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4217   TglViewportIndexedfNV                                   = procedure(aIndex: GLuint; x: GLfloat; y: GLfloat; w: GLfloat; h: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4218   TglViewportIndexedfvNV                                  = procedure(aIndex: GLuint; const v: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4219   TglScissorArrayvNV                                      = procedure(aFirst: GLuint; aCount: GLsizei; const v: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4220   TglScissorIndexedNV                                     = procedure(aIndex: GLuint; aLeft: GLint; aBottom: GLint; aWidth: GLsizei; aHeight: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4221   TglScissorIndexedvNV                                    = procedure(aIndex: GLuint; const v: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4222   TglDepthRangeArrayfvNV                                  = procedure(aFirst: GLuint; aCount: GLsizei; const v: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4223   TglDepthRangeIndexedfNV                                 = procedure(aIndex: GLuint; n: GLfloat; f: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4224   TglGetFloati_vNV                                        = procedure(aTarget: GLenum; aIndex: GLuint; aData: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4225   TglEnableiNV                                            = procedure(aTarget: GLenum; aIndex: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4226   TglDisableiNV                                           = procedure(aTarget: GLenum; aIndex: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4227   TglIsEnablediNV                                         = function (aTarget: GLenum; aIndex: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4228 var
4229   glViewportArrayvNV:                                       TglViewportArrayvNV;
4230   glViewportIndexedfNV:                                     TglViewportIndexedfNV;
4231   glViewportIndexedfvNV:                                    TglViewportIndexedfvNV;
4232   glScissorArrayvNV:                                        TglScissorArrayvNV;
4233   glScissorIndexedNV:                                       TglScissorIndexedNV;
4234   glScissorIndexedvNV:                                      TglScissorIndexedvNV;
4235   glDepthRangeArrayfvNV:                                    TglDepthRangeArrayfvNV;
4236   glDepthRangeIndexedfNV:                                   TglDepthRangeIndexedfNV;
4237   glGetFloati_vNV:                                          TglGetFloati_vNV;
4238   glEnableiNV:                                              TglEnableiNV;
4239   glDisableiNV:                                             TglDisableiNV;
4240   glIsEnablediNV:                                           TglIsEnablediNV;
4241
4242 { GL_QCOM_alpha_test }
4243 const
4244   GL_ALPHA_TEST_QCOM                                      = $0BC0;
4245   GL_ALPHA_TEST_FUNC_QCOM                                 = $0BC1;
4246   GL_ALPHA_TEST_REF_QCOM                                  = $0BC2;
4247 type
4248   TglAlphaFuncQCOM                                        = procedure(aFunc: GLenum; aRef: GLclampf); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4249 var
4250   glAlphaFuncQCOM:                                          TglAlphaFuncQCOM;
4251
4252 { GL_QCOM_binning_control }
4253 const
4254   GL_BINNING_CONTROL_HINT_QCOM                            = $8FB0;
4255   GL_CPU_OPTIMIZED_QCOM                                   = $8FB1;
4256   GL_GPU_OPTIMIZED_QCOM                                   = $8FB2;
4257   GL_RENDER_DIRECT_TO_FRAMEBUFFER_QCOM                    = $8FB3;
4258
4259 { GL_QCOM_driver_control }
4260 type
4261   TglGetDriverControlsQCOM                                = procedure(aNum: PGLint; aSize: GLsizei; aDriverControls: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4262   TglGetDriverControlStringQCOM                           = procedure(aDriverControl: GLuint; aBufSize: GLsizei; aLength: PGLsizei; aDriverControlString: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4263   TglEnableDriverControlQCOM                              = procedure(aDriverControl: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4264   TglDisableDriverControlQCOM                             = procedure(aDriverControl: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4265 var
4266   glGetDriverControlsQCOM:                                  TglGetDriverControlsQCOM;
4267   glGetDriverControlStringQCOM:                             TglGetDriverControlStringQCOM;
4268   glEnableDriverControlQCOM:                                TglEnableDriverControlQCOM;
4269   glDisableDriverControlQCOM:                               TglDisableDriverControlQCOM;
4270
4271 { GL_QCOM_extended_get }
4272 const
4273   GL_TEXTURE_WIDTH_QCOM                                   = $8BD2;
4274   GL_TEXTURE_HEIGHT_QCOM                                  = $8BD3;
4275   GL_TEXTURE_DEPTH_QCOM                                   = $8BD4;
4276   GL_TEXTURE_INTERNAL_FORMAT_QCOM                         = $8BD5;
4277   GL_TEXTURE_FORMAT_QCOM                                  = $8BD6;
4278   GL_TEXTURE_TYPE_QCOM                                    = $8BD7;
4279   GL_TEXTURE_IMAGE_VALID_QCOM                             = $8BD8;
4280   GL_TEXTURE_NUM_LEVELS_QCOM                              = $8BD9;
4281   GL_TEXTURE_TARGET_QCOM                                  = $8BDA;
4282   GL_TEXTURE_OBJECT_VALID_QCOM                            = $8BDB;
4283   GL_STATE_RESTORE                                        = $8BDC;
4284 type
4285   TglExtGetTexturesQCOM                                   = procedure(aTextures: PGLuint; aMaxTextures: GLint; aNumTextures: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4286   TglExtGetBuffersQCOM                                    = procedure(aBuffers: PGLuint; aMaxBuffers: GLint; aNumBuffers: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4287   TglExtGetRenderbuffersQCOM                              = procedure(aRenderbuffers: PGLuint; aMaxRenderbuffers: GLint; aNumRenderbuffers: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4288   TglExtGetFramebuffersQCOM                               = procedure(aFramebuffers: PGLuint; aMaxFramebuffers: GLint; aNumFramebuffers: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4289   TglExtGetTexLevelParameterivQCOM                        = procedure(aTexture: GLuint; aFace: GLenum; aLevel: GLint; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4290   TglExtTexObjectStateOverrideiQCOM                       = procedure(aTarget: GLenum; aPname: GLenum; aParam: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4291   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}
4292   TglExtGetBufferPointervQCOM                             = procedure(aTarget: GLenum; aParams: PPGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4293 var
4294   glExtGetTexturesQCOM:                                     TglExtGetTexturesQCOM;
4295   glExtGetBuffersQCOM:                                      TglExtGetBuffersQCOM;
4296   glExtGetRenderbuffersQCOM:                                TglExtGetRenderbuffersQCOM;
4297   glExtGetFramebuffersQCOM:                                 TglExtGetFramebuffersQCOM;
4298   glExtGetTexLevelParameterivQCOM:                          TglExtGetTexLevelParameterivQCOM;
4299   glExtTexObjectStateOverrideiQCOM:                         TglExtTexObjectStateOverrideiQCOM;
4300   glExtGetTexSubImageQCOM:                                  TglExtGetTexSubImageQCOM;
4301   glExtGetBufferPointervQCOM:                               TglExtGetBufferPointervQCOM;
4302
4303 { GL_QCOM_extended_get2 }
4304 type
4305   TglExtGetShadersQCOM                                    = procedure(aShaders: PGLuint; aMaxShaders: GLint; aNumShaders: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4306   TglExtGetProgramsQCOM                                   = procedure(aPrograms: PGLuint; aMaxPrograms: GLint; aNumPrograms: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4307   TglExtIsProgramBinaryQCOM                               = function (aProgram: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4308   TglExtGetProgramBinarySourceQCOM                        = procedure(aProgram: GLuint; aShadertype: GLenum; aSource: PGLchar; aLength: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4309 var
4310   glExtGetShadersQCOM:                                      TglExtGetShadersQCOM;
4311   glExtGetProgramsQCOM:                                     TglExtGetProgramsQCOM;
4312   glExtIsProgramBinaryQCOM:                                 TglExtIsProgramBinaryQCOM;
4313   glExtGetProgramBinarySourceQCOM:                          TglExtGetProgramBinarySourceQCOM;
4314
4315 { GL_QCOM_perfmon_global_mode }
4316 const
4317   GL_PERFMON_GLOBAL_MODE_QCOM                             = $8FA0;
4318
4319 { GL_QCOM_tiled_rendering }
4320 const
4321   GL_COLOR_BUFFER_BIT0_QCOM                               = $00000001;
4322   GL_COLOR_BUFFER_BIT1_QCOM                               = $00000002;
4323   GL_COLOR_BUFFER_BIT2_QCOM                               = $00000004;
4324   GL_COLOR_BUFFER_BIT3_QCOM                               = $00000008;
4325   GL_COLOR_BUFFER_BIT4_QCOM                               = $00000010;
4326   GL_COLOR_BUFFER_BIT5_QCOM                               = $00000020;
4327   GL_COLOR_BUFFER_BIT6_QCOM                               = $00000040;
4328   GL_COLOR_BUFFER_BIT7_QCOM                               = $00000080;
4329   GL_DEPTH_BUFFER_BIT0_QCOM                               = $00000100;
4330   GL_DEPTH_BUFFER_BIT1_QCOM                               = $00000200;
4331   GL_DEPTH_BUFFER_BIT2_QCOM                               = $00000400;
4332   GL_DEPTH_BUFFER_BIT3_QCOM                               = $00000800;
4333   GL_DEPTH_BUFFER_BIT4_QCOM                               = $00001000;
4334   GL_DEPTH_BUFFER_BIT5_QCOM                               = $00002000;
4335   GL_DEPTH_BUFFER_BIT6_QCOM                               = $00004000;
4336   GL_DEPTH_BUFFER_BIT7_QCOM                               = $00008000;
4337   GL_STENCIL_BUFFER_BIT0_QCOM                             = $00010000;
4338   GL_STENCIL_BUFFER_BIT1_QCOM                             = $00020000;
4339   GL_STENCIL_BUFFER_BIT2_QCOM                             = $00040000;
4340   GL_STENCIL_BUFFER_BIT3_QCOM                             = $00080000;
4341   GL_STENCIL_BUFFER_BIT4_QCOM                             = $00100000;
4342   GL_STENCIL_BUFFER_BIT5_QCOM                             = $00200000;
4343   GL_STENCIL_BUFFER_BIT6_QCOM                             = $00400000;
4344   GL_STENCIL_BUFFER_BIT7_QCOM                             = $00800000;
4345   GL_MULTISAMPLE_BUFFER_BIT0_QCOM                         = $01000000;
4346   GL_MULTISAMPLE_BUFFER_BIT1_QCOM                         = $02000000;
4347   GL_MULTISAMPLE_BUFFER_BIT2_QCOM                         = $04000000;
4348   GL_MULTISAMPLE_BUFFER_BIT3_QCOM                         = $08000000;
4349   GL_MULTISAMPLE_BUFFER_BIT4_QCOM                         = $10000000;
4350   GL_MULTISAMPLE_BUFFER_BIT5_QCOM                         = $20000000;
4351   GL_MULTISAMPLE_BUFFER_BIT6_QCOM                         = $40000000;
4352   GL_MULTISAMPLE_BUFFER_BIT7_QCOM                         = $80000000;
4353 type
4354   TglStartTilingQCOM                                      = procedure(x: GLuint; y: GLuint; aWidth: GLuint; aHeight: GLuint; aPreserveMask: GLbitfield); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4355   TglEndTilingQCOM                                        = procedure(aPreserveMask: GLbitfield); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4356 var
4357   glStartTilingQCOM:                                        TglStartTilingQCOM;
4358   glEndTilingQCOM:                                          TglEndTilingQCOM;
4359
4360 { GL_QCOM_writeonly_rendering }
4361 const
4362   GL_WRITEONLY_RENDERING_QCOM                             = $8823;
4363
4364 { GL_VIV_shader_binary }
4365 const
4366   GL_SHADER_BINARY_VIV                                    = $8FC4;
4367 {$ENDIF}
4368
4369 { ================================================== EGL ============================================================= }
4370 type
4371   EGLint                = Integer;
4372   EGLboolean            = Cardinal;
4373   EGLenum               = Cardinal;
4374   EGLConfig             = Pointer;
4375   EGLContext            = Pointer;
4376   EGLDisplay            = Pointer;
4377   EGLSurface            = Pointer;
4378   EGLClientBuffer       = Pointer;
4379   EGLNativeDisplayType  = Pointer;
4380   EGLNativePixmapType   = Pointer;
4381   EGLNativeWindowType   = packed record
4382      element: Cardinal;
4383      width: Integer;
4384      height: Integer;
4385   end;
4386
4387   PEGLint               = ^EGLint;
4388   PEGLboolean           = ^EGLboolean;
4389   PEGLenum              = ^EGLenum;
4390   PEGLConfig            = ^EGLConfig;
4391   PEGLContext           = ^EGLContext;
4392   PEGLDisplay           = ^EGLDisplay;
4393   PEGLSurface           = ^EGLSurface;
4394   PEGLClientBuffer      = ^EGLClientBuffer;
4395   PEGLNativeDisplayType = ^EGLNativeDisplayType;
4396   PEGLNativePixmapType  = ^EGLNativePixmapType;
4397   PEGLNativeWindowType  = ^EGLNativeWindowType;
4398
4399 const
4400   EGL_FALSE: EGLboolean = 0;
4401   EGL_TRUE:  EGLboolean = 1;
4402
4403   EGL_DEFAULT_DISPLAY:  EGLNativeDisplayType  = nil;
4404   EGL_NO_CONTEXT:       EGLContext              = nil;
4405   EGL_NO_DISPLAY:                         EGLDisplay            = nil;
4406   EGL_NO_SURFACE:                         EGLSurface            = nil;
4407
4408   EGL_DONT_CARE: EGLint = -1;
4409
4410   EGL_SUCCESS                         = $3000;
4411   EGL_NOT_INITIALIZED                 = $3001;
4412   EGL_BAD_ACCESS                      = $3002;
4413   EGL_BAD_ALLOC                       = $3003;
4414   EGL_BAD_ATTRIBUTE                   = $3004;
4415   EGL_BAD_CONFIG                      = $3005;
4416   EGL_BAD_CONTEXT                     = $3006;
4417   EGL_BAD_CURRENT_SURFACE             = $3007;
4418   EGL_BAD_DISPLAY                     = $3008;
4419   EGL_BAD_MATCH                       = $3009;
4420   EGL_BAD_NATIVE_PIXMAP               = $300A;
4421   EGL_BAD_NATIVE_WINDOW               = $300B;
4422   EGL_BAD_PARAMETER                   = $300C;
4423   EGL_BAD_SURFACE                     = $300D;
4424   EGL_CONTEXT_LOST                    = $300E;
4425
4426   EGL_BUFFER_SIZE                     = $3020;
4427   EGL_ALPHA_SIZE                      = $3021;
4428   EGL_BLUE_SIZE                       = $3022;
4429   EGL_GREEN_SIZE                      = $3023;
4430   EGL_RED_SIZE                        = $3024;
4431   EGL_DEPTH_SIZE                      = $3025;
4432   EGL_STENCIL_SIZE                    = $3026;
4433   EGL_CONFIG_CAVEAT                   = $3027;
4434   EGL_CONFIG_ID                       = $3028;
4435   EGL_LEVEL                           = $3029;
4436   EGL_MAX_PBUFFER_HEIGHT              = $302A;
4437   EGL_MAX_PBUFFER_PIXELS              = $302B;
4438   EGL_MAX_PBUFFER_WIDTH               = $302C;
4439   EGL_NATIVE_RENDERABLE               = $302D;
4440   EGL_NATIVE_VISUAL_ID                = $302E;
4441   EGL_NATIVE_VISUAL_TYPE              = $302F;
4442   EGL_SAMPLES                         = $3031;
4443   EGL_SAMPLE_BUFFERS                  = $3032;
4444   EGL_SURFACE_TYPE                    = $3033;
4445   EGL_TRANSPARENT_TYPE                = $3034;
4446   EGL_TRANSPARENT_BLUE_VALUE          = $3035;
4447   EGL_TRANSPARENT_GREEN_VALUE         = $3036;
4448   EGL_TRANSPARENT_RED_VALUE           = $3037;
4449   EGL_NONE                            = $3038;
4450   EGL_BIND_TO_TEXTURE_RGB             = $3039;
4451   EGL_BIND_TO_TEXTURE_RGBA            = $303A;
4452   EGL_MIN_SWAP_INTERVAL               = $303B;
4453   EGL_MAX_SWAP_INTERVAL               = $303C;
4454   EGL_LUMINANCE_SIZE                  = $303D;
4455   EGL_ALPHA_MASK_SIZE                 = $303E;
4456   EGL_COLOR_BUFFER_TYPE               = $303F;
4457   EGL_RENDERABLE_TYPE                 = $3040;
4458   EGL_MATCH_NATIVE_PIXMAP             = $3041;
4459   EGL_CONFORMANT                      = $3042;
4460
4461   EGL_SLOW_CONFIG                     = $3050;
4462   EGL_NON_CONFORMANT_CONFIG           = $3051;
4463   EGL_TRANSPARENT_RGB                 = $3052;
4464   EGL_RGB_BUFFER                      = $308E;
4465   EGL_LUMINANCE_BUFFER                = $308F;
4466
4467   EGL_NO_TEXTURE                      = $305C;
4468   EGL_TEXTURE_RGB                     = $305D;
4469   EGL_TEXTURE_RGBA                    = $305E;
4470   EGL_TEXTURE_2D                      = $305F;
4471
4472   EGL_PBUFFER_BIT                     = $0001;
4473   EGL_PIXMAP_BIT                      = $0002;
4474   EGL_WINDOW_BIT                      = $0004;
4475   EGL_VG_COLORSPACE_LINEAR_BIT        = $0020;
4476   EGL_VG_ALPHA_FORMAT_PRE_BIT         = $0040;
4477   EGL_MULTISAMPLE_RESOLVE_BOX_BIT     = $0200;
4478   EGL_SWAP_BEHAVIOR_PRESERVED_BIT     = $0400;
4479
4480   EGL_OPENGL_ES_BIT                   = $0001;
4481   EGL_OPENVG_BIT                      = $0002;
4482   EGL_OPENGL_ES2_BIT                  = $0004;
4483   EGL_OPENGL_BIT                      = $0008;
4484
4485   EGL_VENDOR                          = $3053;
4486   EGL_VERSION                         = $3054;
4487   EGL_EXTENSIONS                      = $3055;
4488   EGL_CLIENT_APIS                     = $308D;
4489
4490   EGL_HEIGHT                          = $3056;
4491   EGL_WIDTH                           = $3057;
4492   EGL_LARGEST_PBUFFER                 = $3058;
4493   EGL_TEXTURE_FORMAT                  = $3080;
4494   EGL_TEXTURE_TARGET                  = $3081;
4495   EGL_MIPMAP_TEXTURE                  = $3082;
4496   EGL_MIPMAP_LEVEL                    = $3083;
4497   EGL_RENDER_BUFFER                   = $3086;
4498   EGL_VG_COLORSPACE                   = $3087;
4499   EGL_VG_ALPHA_FORMAT                 = $3088;
4500   EGL_HORIZONTAL_RESOLUTION           = $3090;
4501   EGL_VERTICAL_RESOLUTION             = $3091;
4502   EGL_PIXEL_ASPECT_RATIO              = $3092;
4503   EGL_SWAP_BEHAVIOR                   = $3093;
4504   EGL_MULTISAMPLE_RESOLVE             = $3099;
4505
4506   EGL_BACK_BUFFER                     = $3084;
4507   EGL_SINGLE_BUFFER                   = $3085;
4508
4509   EGL_VG_COLORSPACE_sRGB              = $3089;
4510   EGL_VG_COLORSPACE_LINEAR            = $308A;
4511
4512   EGL_VG_ALPHA_FORMAT_NONPRE          = $308B;
4513   EGL_VG_ALPHA_FORMAT_PRE             = $308C;
4514
4515   EGL_DISPLAY_SCALING                 = 10000;
4516
4517   EGL_UNKNOWN: EGLint                 = -1;
4518
4519   EGL_BUFFER_PRESERVED                = $3094;
4520   EGL_BUFFER_DESTROYED                = $3095;
4521
4522   EGL_OPENVG_IMAGE                    = $3096;
4523
4524   EGL_CONTEXT_CLIENT_TYPE             = $3097;
4525
4526   EGL_CONTEXT_CLIENT_VERSION          = $3098;
4527
4528   EGL_MULTISAMPLE_RESOLVE_DEFAULT     = $309A;
4529   EGL_MULTISAMPLE_RESOLVE_BOX         = $309B;
4530
4531   EGL_OPENGL_ES_API                   = $30A0;
4532   EGL_OPENVG_API                      = $30A1;
4533   EGL_OPENGL_API                      = $30A2;
4534
4535   EGL_DRAW                            = $3059;
4536   EGL_READ                            = $305A;
4537
4538   EGL_CORE_NATIVE_ENGINE              = $305B;
4539
4540   EGL_COLORSPACE                      = EGL_VG_COLORSPACE;
4541   EGL_ALPHA_FORMAT                    = EGL_VG_ALPHA_FORMAT;
4542   EGL_COLORSPACE_sRGB                 = EGL_VG_COLORSPACE_sRGB;
4543   EGL_COLORSPACE_LINEAR               = EGL_VG_COLORSPACE_LINEAR;
4544   EGL_ALPHA_FORMAT_NONPRE             = EGL_VG_ALPHA_FORMAT_NONPRE;
4545   EGL_ALPHA_FORMAT_PRE                = EGL_VG_ALPHA_FORMAT_PRE;
4546
4547 type
4548   TeglGetError  = function: EGLint; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4549
4550   TeglGetDisplay  = function(aDisplayID: EGLNativeDisplayType): EGLDisplay; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4551   TeglInitialize  = function(aDisplay: EGLDisplay; aMajor, aMinor: PEGLint): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4552   TeglTerminate   = function(aDisplay: EGLDisplay): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4553
4554   TeglQueryString = function(aDisplay: EGLDisplay; name: EGLint): PAnsiChar; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4555
4556   TeglGetConfigs      = function(aDisplay: EGLDisplay; aConfigs: PEGLConfig; aConfigSize: EGLint; numConfig: PEGLint): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4557   TeglChooseConfig    = function(aDisplay: EGLDisplay; const aAttribList: PEGLint; aConfigs: PEGLConfig; aConfigSize: EGLint; numConfig: PEGLint): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4558   TeglGetConfigAttrib = function(aDisplay: EGLDisplay; aConfig: EGLConfig; aAttribute: EGLint; aValue : PEGLint): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4559
4560   TeglCreateWindowSurface   = function(aDisplay: EGLDisplay; aConfig: EGLConfig; aWinType: PEGLNativeWindowType; const aAttribList: PEGLint): EGLSurface; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4561   TeglCreatePbufferSurface  = function(aDisplay: EGLDisplay; aConfig: EGLConfig; const aAttribList: PEGLint): EGLSurface; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4562   TeglCreatePixmapSurface   = function(aDisplay: EGLDisplay; aConfig: EGLConfig; aPixmap: EGLNativePixmapType; const aAttribList: PEGLint): EGLSurface; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4563   TeglDestroySurface        = function(aDisplay: EGLDisplay; aSurface: EGLSurface): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4564   TeglQuerySurface          = function(aDisplay: EGLDisplay; aSurface: EGLSurface; aAttribute: EGLint; aValue: PEGLint): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4565
4566   TeglBindAPI   = function(aApi: EGLenum): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4567   TeglQueryAPI  = function: EGLenum; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4568
4569   TeglWaitClient = function: EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4570
4571   TeglReleaseThread = function: EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4572
4573   TeglCreatePbufferFromClientBuffer = function(aDisplay: EGLDisplay; aBufType: EGLenum; aBuffer: EGLClientBuffer; aConfig: EGLConfig; const aAttribList: PEGLint): EGLSurface; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4574
4575   TeglSurfaceAttrib   = function(aDisplay: EGLDisplay; aSurface: EGLSurface; aAttribute: EGLint; aValue: EGLint): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4576   TeglBindTexImage    = function(aDisplay: EGLDisplay; aSurface: EGLSurface; aBuffer: EGLint): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4577   TeglReleaseTexImage = function(aDisplay: EGLDisplay; aSurface: EGLSurface; aBuffer: EGLint): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4578
4579   TeglSwapInterval = function(aDisplay: EGLDisplay; aInterval: EGLint): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4580
4581   TeglCreateContext   = function(aDisplay: EGLDisplay; aConfig: EGLConfig; aShareContext: EGLContext; const aAttribList: PEGLint): EGLContext; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4582   TeglDestroyContext  = function(aDisplay: EGLDisplay; aContext: EGLContext): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4583   TeglMakeCurrent     = function(aDisplay: EGLDisplay; aDraw: EGLSurface; aRead: EGLSurface; aContext: EGLContext): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4584
4585   TeglGetCurrentContext = function: EGLContext; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4586   TeglGetCurrentSurface = function(aReadDraw: EGLint): EGLSurface; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4587   TeglGetCurrentDisplay = function: EGLDisplay; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4588   TeglQueryContext      = function(aDisplay: EGLDisplay; aContext: EGLContext; aAttribute: EGLint; aValue: PEGLint): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4589
4590   TeglWaitGL      = function: EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4591   TeglWaitNative  = function(aEngine: EGLint): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4592   TeglSwapBuffers = function(aDisplay: EGLDisplay; aSurface: EGLSurface): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4593   TeglCopyBuffers = function(aDisplay: EGLDisplay; aSurface: EGLSurface; aTarget: EGLNativePixmapType): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4594
4595   TeglGetProcAddress = function(const aProcName: PAnsiChar): Pointer; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
4596
4597 var
4598   eglGetError: TeglGetError;
4599
4600   eglGetDisplay:  TeglGetDisplay;
4601   eglInitialize:  TeglInitialize;
4602   eglTerminate:   TeglTerminate;
4603
4604   eglQueryString: TeglQueryString;
4605
4606   eglGetConfigs:      TeglGetConfigs;
4607   eglChooseConfig:    TeglChooseConfig;
4608   eglGetConfigAttrib: TeglGetConfigAttrib;
4609
4610   eglCreateWindowSurface:   TeglCreateWindowSurface;
4611   eglCreatePbufferSurface:  TeglCreatePbufferSurface;
4612   eglCreatePixmapSurface:   TeglCreatePixmapSurface;
4613   eglDestroySurface:        TeglDestroySurface;
4614   eglQuerySurface:          TeglQuerySurface;
4615
4616   eglBindAPI:   TeglBindAPI;
4617   eglQueryAPI:  TeglQueryAPI;
4618
4619   eglWaitClient: TeglWaitClient;
4620
4621   eglReleaseThread: TeglReleaseThread;
4622
4623   eglCreatePbufferFromClientBuffer: TeglCreatePbufferFromClientBuffer;
4624
4625   eglSurfaceAttrib:   TeglSurfaceAttrib;
4626   eglBindTexImage:    TeglBindTexImage;
4627   eglReleaseTexImage: TeglReleaseTexImage;
4628
4629   eglSwapInterval: TeglSwapInterval;
4630
4631   eglCreateContext:   TeglCreateContext;
4632   eglDestroyContext:  TeglDestroyContext;
4633   eglMakeCurrent:     TeglMakeCurrent;
4634
4635   eglGetCurrentContext: TeglGetCurrentContext;
4636   eglGetCurrentSurface: TeglGetCurrentSurface;
4637   eglGetCurrentDisplay: TeglGetCurrentDisplay;
4638   eglQueryContext:      TeglQueryContext;
4639
4640   eglWaitGL:      TeglWaitGL;
4641   eglWaitNative:  TeglWaitNative;
4642   eglSwapBuffers: TeglSwapBuffers;
4643   eglCopyBuffers: TeglCopyBuffers;
4644
4645   eglGetProcAddress: TeglGetProcAddress;
4646
4647 { =================================================== DelphiGL ======================================================= }
4648 var
4649   GLmajor: Integer;
4650   GLminor: Integer;
4651
4652   GL_VERSION_1_0,
4653   GL_VERSION_1_1,
4654   GL_VERSION_2_0,
4655   GL_VERSION_3_0,
4656   GL_VERSION_3_1
4657 {$IFDEF OPENGLES_EXTENSIONS},
4658   GL_KHR_blend_equation_advanced,
4659   GL_KHR_blend_equation_advanced_coherent,
4660   GL_KHR_context_flush_control,
4661   GL_KHR_debug,
4662   GL_KHR_robust_buffer_access_behavior,
4663   GL_KHR_robustness,
4664   GL_KHR_texture_compression_astc_hdr,
4665   GL_KHR_texture_compression_astc_ldr,
4666   GL_OES_EGL_image,
4667   GL_OES_EGL_image_external,
4668   GL_OES_compressed_ETC1_RGB8_sub_texture,
4669   GL_OES_compressed_ETC1_RGB8_texture,
4670   GL_OES_compressed_paletted_texture,
4671   GL_OES_depth24,
4672   GL_OES_depth32,
4673   GL_OES_depth_texture,
4674   GL_OES_element_index_uint,
4675   GL_OES_fbo_render_mipmap,
4676   GL_OES_fragment_precision_high,
4677   GL_OES_get_program_binary,
4678   GL_OES_mapbuffer,
4679   GL_OES_packed_depth_stencil,
4680   GL_OES_required_internalformat,
4681   GL_OES_rgb8_rgba8,
4682   GL_OES_sample_shading,
4683   GL_OES_sample_variables,
4684   GL_OES_shader_image_atomic,
4685   GL_OES_shader_multisample_interpolation,
4686   GL_OES_standard_derivatives,
4687   GL_OES_stencil1,
4688   GL_OES_stencil4,
4689   GL_OES_surfaceless_context,
4690   GL_OES_texture_3D,
4691   GL_OES_texture_compression_astc,
4692   GL_OES_texture_float,
4693   GL_OES_texture_float_linear,
4694   GL_OES_texture_half_float,
4695   GL_OES_texture_half_float_linear,
4696   GL_OES_texture_npot,
4697   GL_OES_texture_stencil8,
4698   GL_OES_texture_storage_multisample_2d_array,
4699   GL_OES_vertex_array_object,
4700   GL_OES_vertex_half_float,
4701   GL_OES_vertex_type_10_10_10_2,
4702   GL_AMD_compressed_3DC_texture,
4703   GL_AMD_compressed_ATC_texture,
4704   GL_AMD_performance_monitor,
4705   GL_AMD_program_binary_Z400,
4706   GL_ANDROID_extension_pack_es31a,
4707   GL_ANGLE_depth_texture,
4708   GL_ANGLE_framebuffer_blit,
4709   GL_ANGLE_framebuffer_multisample,
4710   GL_ANGLE_instanced_arrays,
4711   GL_ANGLE_pack_reverse_row_order,
4712   GL_ANGLE_program_binary,
4713   GL_ANGLE_texture_compression_dxt3,
4714   GL_ANGLE_texture_compression_dxt5,
4715   GL_ANGLE_texture_usage,
4716   GL_ANGLE_translated_shader_source,
4717   GL_APPLE_clip_distance,
4718   GL_APPLE_color_buffer_packed_float,
4719   GL_APPLE_copy_texture_levels,
4720   GL_APPLE_framebuffer_multisample,
4721   GL_APPLE_rgb_422,
4722   GL_APPLE_sync,
4723   GL_APPLE_texture_format_BGRA8888,
4724   GL_APPLE_texture_max_level,
4725   GL_APPLE_texture_packed_float,
4726   GL_ARM_mali_program_binary,
4727   GL_ARM_mali_shader_binary,
4728   GL_ARM_rgba8,
4729   GL_ARM_shader_framebuffer_fetch,
4730   GL_ARM_shader_framebuffer_fetch_depth_stencil,
4731   GL_DMP_program_binary,
4732   GL_DMP_shader_binary,
4733   GL_EXT_base_instance,
4734   GL_EXT_blend_minmax,
4735   GL_EXT_color_buffer_half_float,
4736   GL_EXT_copy_image,
4737   GL_EXT_debug_label,
4738   GL_EXT_debug_marker,
4739   GL_EXT_discard_framebuffer,
4740   GL_EXT_disjoint_timer_query,
4741   GL_EXT_draw_buffers,
4742   GL_EXT_draw_buffers_indexed,
4743   GL_EXT_draw_elements_base_vertex,
4744   GL_EXT_draw_instanced,
4745   GL_EXT_geometry_point_size,
4746   GL_EXT_geometry_shader,
4747   GL_EXT_gpu_shader5,
4748   GL_EXT_instanced_arrays,
4749   GL_EXT_map_buffer_range,
4750   GL_EXT_multi_draw_arrays,
4751   GL_EXT_multi_draw_indirect,
4752   GL_EXT_multisampled_render_to_texture,
4753   GL_EXT_multiview_draw_buffers,
4754   GL_EXT_occlusion_query_boolean,
4755   GL_EXT_primitive_bounding_box,
4756   GL_EXT_pvrtc_sRGB,
4757   GL_EXT_read_format_bgra,
4758   GL_EXT_render_snorm,
4759   GL_EXT_robustness,
4760   GL_EXT_sRGB,
4761   GL_EXT_sRGB_write_control,
4762   GL_EXT_separate_shader_objects,
4763   GL_EXT_shader_framebuffer_fetch,
4764   GL_EXT_shader_implicit_conversions,
4765   GL_EXT_shader_integer_mix,
4766   GL_EXT_shader_io_blocks,
4767   GL_EXT_shader_pixel_local_storage,
4768   GL_EXT_shader_texture_lod,
4769   GL_EXT_shadow_samplers,
4770   GL_EXT_tessellation_point_size,
4771   GL_EXT_tessellation_shader,
4772   GL_EXT_texture_border_clamp,
4773   GL_EXT_texture_buffer,
4774   GL_EXT_texture_compression_dxt1,
4775   GL_EXT_texture_compression_s3tc,
4776   GL_EXT_texture_cube_map_array,
4777   GL_EXT_texture_filter_anisotropic,
4778   GL_EXT_texture_format_BGRA8888,
4779   GL_EXT_texture_norm16,
4780   GL_EXT_texture_rg,
4781   GL_EXT_texture_sRGB_decode,
4782   GL_EXT_texture_storage,
4783   GL_EXT_texture_type_2_10_10_10_REV,
4784   GL_EXT_texture_view,
4785   GL_EXT_unpack_subimage,
4786   GL_FJ_shader_binary_GCCSO,
4787   GL_IMG_multisampled_render_to_texture,
4788   GL_IMG_program_binary,
4789   GL_IMG_read_format,
4790   GL_IMG_shader_binary,
4791   GL_IMG_texture_compression_pvrtc,
4792   GL_IMG_texture_compression_pvrtc2,
4793   GL_INTEL_performance_query,
4794   GL_NV_bindless_texture,
4795   GL_NV_blend_equation_advanced,
4796   GL_NV_blend_equation_advanced_coherent,
4797   GL_NV_conditional_render,
4798   GL_NV_copy_buffer,
4799   GL_NV_coverage_sample,
4800   GL_NV_depth_nonlinear,
4801   GL_NV_draw_buffers,
4802   GL_NV_draw_instanced,
4803   GL_NV_explicit_attrib_location,
4804   GL_NV_fbo_color_attachments,
4805   GL_NV_fence,
4806   GL_NV_framebuffer_blit,
4807   GL_NV_framebuffer_multisample,
4808   GL_NV_generate_mipmap_sRGB,
4809   GL_NV_image_formats,
4810   GL_NV_instanced_arrays,
4811   GL_NV_internalformat_sample_query,
4812   GL_NV_non_square_matrices,
4813   GL_NV_path_rendering,
4814   GL_NV_read_buffer,
4815   GL_NV_read_buffer_front,
4816   GL_NV_read_depth,
4817   GL_NV_read_depth_stencil,
4818   GL_NV_read_stencil,
4819   GL_NV_sRGB_formats,
4820   GL_NV_shader_noperspective_interpolation,
4821   GL_NV_shadow_samplers_array,
4822   GL_NV_shadow_samplers_cube,
4823   GL_NV_texture_border_clamp,
4824   GL_NV_texture_compression_s3tc_update,
4825   GL_NV_texture_npot_2D_mipmap,
4826   GL_NV_viewport_array,
4827   GL_QCOM_alpha_test,
4828   GL_QCOM_binning_control,
4829   GL_QCOM_driver_control,
4830   GL_QCOM_extended_get,
4831   GL_QCOM_extended_get2,
4832   GL_QCOM_perfmon_global_mode,
4833   GL_QCOM_tiled_rendering,
4834   GL_QCOM_writeonly_rendering,
4835   GL_VIV_shader_binary
4836 {$ENDIF}
4837     : Boolean;
4838
4839 type
4840   EdglOpenGLES = class(Exception);
4841   EeglError = class(EdglOpenGLES)
4842   public
4843     ErrorCode: EGLint;
4844     constructor Create(const msg: string; const aErrorCode: EGLint);
4845   end;
4846
4847   TActivationFlag = (
4848     afReadOpenGLCore,
4849     afReadExtensions,
4850     afReadCoreVersion,
4851     afReadImplProp
4852   );
4853   TActivationFlags = set of TActivationFlag;
4854
4855   TdglRenderContext = packed record
4856     Display: EGLDisplay;
4857     Surface: EGLSurface;
4858     Context: EGLContext;
4859   end;
4860
4861 function InitOpenGLES(const aOpenGLESLibName: String = LIBNAME_OPENGLES; aEGLLibName: String = LIBNAME_EGL): Boolean;
4862
4863 function CreateRenderingContext(const aDisplayType: EGLNativeDisplayType;
4864                                 const aWindowType: PEGLNativeWindowType;
4865                                 const aConfigAttribs: PEGLint;
4866                                 const aContextAttribs: PEGLint): TdglRenderContext;
4867 procedure DestroyRenderingContext(const aContext: TdglRenderContext);
4868 function ActivateRenderingContext(const aContext: TdglRenderContext; const aFlags: TActivationFlags = [afReadOpenGLCore, afReadExtensions, afReadCoreVersion, afReadImplProp]): Boolean;
4869 function DeactivateRenderingContext(const aContext: TdglRenderContext): Boolean;
4870 procedure SwapBuffers(const aContext: TdglRenderContext);
4871
4872 procedure ReadOpenGLCore;
4873 procedure ReadExtensions;
4874 procedure ReadCoreVersion;
4875 procedure ReadImplementationProperties;
4876
4877 {$IFDEF OPENGLES_EXTENSIONS}
4878 procedure Read_GL_KHR_blend_equation_advanced;
4879 procedure Read_GL_KHR_debug;
4880 procedure Read_GL_KHR_robustness;
4881 procedure Read_GL_OES_EGL_image;
4882 procedure Read_GL_OES_get_program_binary;
4883 procedure Read_GL_OES_mapbuffer;
4884 procedure Read_GL_OES_sample_shading;
4885 procedure Read_GL_OES_texture_3D;
4886 procedure Read_GL_OES_texture_storage_multisample_2d_array;
4887 procedure Read_GL_OES_vertex_array_object;
4888 procedure Read_GL_AMD_performance_monitor;
4889 procedure Read_GL_ANGLE_framebuffer_blit;
4890 procedure Read_GL_ANGLE_framebuffer_multisample;
4891 procedure Read_GL_ANGLE_instanced_arrays;
4892 procedure Read_GL_ANGLE_translated_shader_source;
4893 procedure Read_GL_APPLE_copy_texture_levels;
4894 procedure Read_GL_APPLE_framebuffer_multisample;
4895 procedure Read_GL_APPLE_sync;
4896 procedure Read_GL_EXT_base_instance;
4897 procedure Read_GL_EXT_copy_image;
4898 procedure Read_GL_EXT_debug_label;
4899 procedure Read_GL_EXT_debug_marker;
4900 procedure Read_GL_EXT_discard_framebuffer;
4901 procedure Read_GL_EXT_disjoint_timer_query;
4902 procedure Read_GL_EXT_draw_buffers;
4903 procedure Read_GL_EXT_draw_buffers_indexed;
4904 procedure Read_GL_EXT_draw_elements_base_vertex;
4905 procedure Read_GL_EXT_draw_instanced;
4906 procedure Read_GL_EXT_geometry_shader;
4907 procedure Read_GL_EXT_instanced_arrays;
4908 procedure Read_GL_EXT_map_buffer_range;
4909 procedure Read_GL_EXT_multi_draw_arrays;
4910 procedure Read_GL_EXT_multi_draw_indirect;
4911 procedure Read_GL_EXT_multisampled_render_to_texture;
4912 procedure Read_GL_EXT_multiview_draw_buffers;
4913 procedure Read_GL_EXT_primitive_bounding_box;
4914 procedure Read_GL_EXT_robustness;
4915 procedure Read_GL_EXT_separate_shader_objects;
4916 procedure Read_GL_EXT_tessellation_shader;
4917 procedure Read_GL_EXT_texture_border_clamp;
4918 procedure Read_GL_EXT_texture_buffer;
4919 procedure Read_GL_EXT_texture_storage;
4920 procedure Read_GL_EXT_texture_view;
4921 procedure Read_GL_IMG_multisampled_render_to_texture;
4922 procedure Read_GL_INTEL_performance_query;
4923 procedure Read_GL_NV_bindless_texture;
4924 procedure Read_GL_NV_blend_equation_advanced;
4925 procedure Read_GL_NV_conditional_render;
4926 procedure Read_GL_NV_copy_buffer;
4927 procedure Read_GL_NV_coverage_sample;
4928 procedure Read_GL_NV_draw_buffers;
4929 procedure Read_GL_NV_draw_instanced;
4930 procedure Read_GL_NV_fence;
4931 procedure Read_GL_NV_framebuffer_blit;
4932 procedure Read_GL_NV_framebuffer_multisample;
4933 procedure Read_GL_NV_instanced_arrays;
4934 procedure Read_GL_NV_internalformat_sample_query;
4935 procedure Read_GL_NV_non_square_matrices;
4936 procedure Read_GL_NV_path_rendering;
4937 procedure Read_GL_NV_read_buffer;
4938 procedure Read_GL_NV_viewport_array;
4939 procedure Read_GL_QCOM_alpha_test;
4940 procedure Read_GL_QCOM_driver_control;
4941 procedure Read_GL_QCOM_extended_get;
4942 procedure Read_GL_QCOM_extended_get2;
4943 procedure Read_GL_QCOM_tiled_rendering;
4944 {$ENDIF}
4945
4946 implementation
4947
4948 var
4949   LibHandleOpenGLES: Pointer = nil;
4950   LibHandleEGL:      Pointer = nil;
4951
4952 function dglLoadLibrary(const name: PChar): Pointer;
4953 begin
4954   {$IFDEF DGL_LINUX}
4955   result := dlopen(name, RTLD_LAZY);
4956   {$ENDIF}
4957 end;
4958
4959 function dglGetProcAddress(const aProcName: PAnsiChar): Pointer;
4960 begin
4961   result := nil;
4962
4963   {$IFDEF DGL_LINUX}
4964   if Assigned(LibHandleOpenGLES) then
4965     result := dlsym(LibHandleOpenGLES, aProcName);
4966
4967   if not Assigned(result) and Assigned(eglGetProcAddress) then
4968     result := eglGetProcAddress(aProcName);
4969
4970   if not Assigned(result) and Assigned(LibHandleEGL) then
4971     result := dlsym(LibHandleEGL, aProcName);
4972   {$ENDIF}
4973 end;
4974
4975 function dglFreeAndNilLibrary(var aLibHandle: Pointer): Boolean;
4976 begin
4977   if Assigned(aLibHandle) then begin
4978     {$IFDEF DGL_LINUX}
4979     result := (dlclose(aLibHandle) = 0);
4980     aLibHandle := nil;
4981     {$ENDIF}
4982   end else
4983     result := false;
4984 end;
4985
4986 function InitOpenGLES(const aOpenGLESLibName: String; aEGLLibName: String): Boolean;
4987 begin
4988   result := true;
4989
4990   if Assigned(LibHandleOpenGLES) then
4991     dglFreeAndNilLibrary(LibHandleOpenGLES);
4992
4993   if Assigned(LibHandleEGL) then
4994     dglFreeAndNilLibrary(LibHandleEGL);
4995
4996   LibHandleOpenGLES := dglLoadLibrary(PChar(aOpenGLESLibName));
4997   LibHandleEGL      := dglLoadLibrary(PChar(aEGLLibName));
4998
4999   // load EGL procedures
5000   if Assigned(LibHandleEGL) then begin
5001     eglGetProcAddress                 := dglGetProcAddress('eglGetProcAddress');
5002     eglGetError                       := dglGetProcAddress('eglGetError');
5003     eglGetDisplay                     := dglGetProcAddress('eglGetDisplay');
5004     eglInitialize                     := dglGetProcAddress('eglInitialize');
5005     eglTerminate                      := dglGetProcAddress('eglTerminate');
5006     eglQueryString                    := dglGetProcAddress('eglQueryString');
5007     eglGetConfigs                     := dglGetProcAddress('eglGetConfigs');
5008     eglChooseConfig                   := dglGetProcAddress('eglChooseConfig');
5009     eglGetConfigAttrib                := dglGetProcAddress('eglGetConfigAttrib');
5010     eglCreateWindowSurface            := dglGetProcAddress('eglCreateWindowSurface');
5011     eglCreatePbufferSurface           := dglGetProcAddress('eglCreatePbufferSurface');
5012     eglCreatePixmapSurface            := dglGetProcAddress('eglCreatePixmapSurface');
5013     eglDestroySurface                 := dglGetProcAddress('eglDestroySurface');
5014     eglQuerySurface                   := dglGetProcAddress('eglQuerySurface');
5015     eglBindAPI                        := dglGetProcAddress('eglBindAPI');
5016     eglQueryAPI                       := dglGetProcAddress('eglQueryAPI');
5017     eglWaitClient                     := dglGetProcAddress('eglWaitClient');
5018     eglReleaseThread                  := dglGetProcAddress('eglReleaseThread');
5019     eglCreatePbufferFromClientBuffer  := dglGetProcAddress('eglCreatePbufferFromClientBuffer');
5020     eglSurfaceAttrib                  := dglGetProcAddress('eglSurfaceAttrib');
5021     eglBindTexImage                   := dglGetProcAddress('eglBindTexImage');
5022     eglReleaseTexImage                := dglGetProcAddress('eglReleaseTexImage');
5023     eglSwapInterval                   := dglGetProcAddress('eglSwapInterval');
5024     eglCreateContext                  := dglGetProcAddress('eglCreateContext');
5025     eglDestroyContext                 := dglGetProcAddress('eglDestroyContext');
5026     eglMakeCurrent                    := dglGetProcAddress('eglMakeCurrent');
5027     eglGetCurrentContext              := dglGetProcAddress('eglGetCurrentContext');
5028     eglGetCurrentSurface              := dglGetProcAddress('eglGetCurrentSurface');
5029     eglGetCurrentDisplay              := dglGetProcAddress('eglGetCurrentDisplay');
5030     eglQueryContext                   := dglGetProcAddress('eglQueryContext');
5031     eglWaitGL                         := dglGetProcAddress('eglWaitGL');
5032     eglWaitNative                     := dglGetProcAddress('eglWaitNative');
5033     eglSwapBuffers                    := dglGetProcAddress('eglSwapBuffers');
5034     eglCopyBuffers                    := dglGetProcAddress('eglCopyBuffers');
5035   end else
5036     result := false;
5037 end;
5038
5039 procedure RaiseEglError(const aMsg: String);
5040 var err: EGLint;
5041 begin
5042   err := eglGetError();
5043   raise EeglError.Create(aMsg + ' ErrorCode: 0x' + IntToHex(err, 8), err);
5044 end;
5045
5046 function CreateRenderingContext(const aDisplayType: EGLNativeDisplayType; const aWindowType: PEGLNativeWindowType;
5047   const aConfigAttribs: PEGLint; const aContextAttribs: PEGLint): TdglRenderContext;
5048 var
5049   ConfigCount: EGLint;
5050   Config: EGLConfig;
5051 begin
5052   if (not Assigned(LibHandleOpenGLES) or not Assigned(LibHandleEGL)) and
5053      not InitOpenGLES then
5054       raise EdglOpenGLES.Create('unable to initialize OpenGL library');
5055
5056   result.Display := eglGetDisplay(aDisplayType);
5057   if (result.Display = EGL_NO_DISPLAY) then
5058     RaiseEglError('unable to get display.');
5059
5060   if (eglInitialize(result.Display, nil, nil) <> EGL_TRUE) then
5061     RaiseEglError('unable to initialize egl.');
5062
5063   if (eglChooseConfig(result.Display, aConfigAttribs, @Config, 1, @ConfigCount) <> EGL_TRUE) or
5064      (ConfigCount < 1) then
5065     RaiseEglError('unable to get suitable config.');
5066
5067   if (eglBindAPI(EGL_OPENGL_ES_API) <> EGL_TRUE) then
5068     RaiseEglError('unable to get an appropriate EGL frame buffer configuration.');
5069
5070   result.Surface := eglCreateWindowSurface(result.Display, Config, aWindowType, nil);
5071   if (result.Surface = EGL_NO_SURFACE) then
5072     RaiseEglError('unable to create window surface.');
5073
5074   result.Context := eglCreateContext(result.Display, Config, EGL_NO_CONTEXT, aContextAttribs);
5075   if (result.Context = EGL_NO_CONTEXT) then begin
5076     eglDestroySurface(result.Display, result.Surface);
5077     RaiseEglError('unable to create context.');
5078   end;
5079 end;
5080
5081 procedure DestroyRenderingContext(const aContext: TdglRenderContext);
5082 begin
5083   if (eglGetCurrentContext = aContext.Context) and
5084      not DeactivateRenderingContext(aContext) then
5085     RaiseEglError('unable to unbind context.');
5086
5087   if (eglDestroyContext(aContext.Display, aContext.Context) <> EGL_TRUE) then
5088     RaiseEglError('unable to destory context.');
5089
5090   if (eglDestroySurface(aContext.Display, aContext.Surface) <> EGL_TRUE) then
5091     RaiseEglError('unable to destroy surface.');
5092 end;
5093
5094 function ActivateRenderingContext(const aContext: TdglRenderContext; const aFlags: TActivationFlags): Boolean;
5095 begin
5096   result := (eglMakeCurrent(aContext.Display, aContext.Surface, aContext.Surface, aContext.Context) = GL_TRUE);
5097   if (afReadOpenGLCore in aFlags) then
5098     ReadOpenGLCore;
5099   if (afReadExtensions in aFlags) then
5100     ReadExtensions;
5101   if (afReadCoreVersion in aFlags) then
5102     ReadCoreVersion;
5103   if (afReadImplProp in aFlags) then
5104     ReadImplementationProperties;
5105 end;
5106
5107 function DeactivateRenderingContext(const aContext: TdglRenderContext): Boolean;
5108 begin
5109   result := (eglMakeCurrent(aContext.Display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT) = EGL_TRUE);
5110 end;
5111
5112 procedure SwapBuffers(const aContext: TdglRenderContext);
5113 begin
5114   eglSwapBuffers(aContext.Display, aContext.Surface);
5115 end;
5116
5117 procedure ReadOpenGLCore;
5118 begin
5119 {$IFDEF OPENGLES_CORE_1_1}
5120   { ============================================= OpenGL ES 1.1 ====================================================== }
5121   { Available only in Common profile }
5122   glAlphaFunc                              := dglGetProcAddress('glAlphaFunc');
5123   glClearColor                             := dglGetProcAddress('glClearColor');
5124   glClearDepthf                            := dglGetProcAddress('glClearDepthf');
5125   glClipPlanef                             := dglGetProcAddress('glClipPlanef');
5126   glColor4f                                := dglGetProcAddress('glColor4f');
5127   glDepthRangef                            := dglGetProcAddress('glDepthRangef');
5128   glFogf                                   := dglGetProcAddress('glFogf');
5129   glFogfv                                  := dglGetProcAddress('glFogfv');
5130   glFrustumf                               := dglGetProcAddress('glFrustumf');
5131   glGetClipPlanef                          := dglGetProcAddress('glGetClipPlanef');
5132   glGetFloatv                              := dglGetProcAddress('glGetFloatv');
5133   glGetLightfv                             := dglGetProcAddress('glGetLightfv');
5134   glGetMaterialfv                          := dglGetProcAddress('glGetMaterialfv');
5135   glGetTexEnvfv                            := dglGetProcAddress('glGetTexEnvfv');
5136   glGetTexParameterfv                      := dglGetProcAddress('glGetTexParameterfv');
5137   glLightModelf                            := dglGetProcAddress('glLightModelf');
5138   glLightModelfv                           := dglGetProcAddress('glLightModelfv');
5139   glLightf                                 := dglGetProcAddress('glLightf');
5140   glLightfv                                := dglGetProcAddress('glLightfv');
5141   glLineWidth                              := dglGetProcAddress('glLineWidth');
5142   glLoadMatrixf                            := dglGetProcAddress('glLoadMatrixf');
5143   glMaterialf                              := dglGetProcAddress('glMaterialf');
5144   glMaterialfv                             := dglGetProcAddress('glMaterialfv');
5145   glMultMatrixf                            := dglGetProcAddress('glMultMatrixf');
5146   glMultiTexCoord4f                        := dglGetProcAddress('glMultiTexCoord4f');
5147   glNormal3f                               := dglGetProcAddress('glNormal3f');
5148   glOrthof                                 := dglGetProcAddress('glOrthof');
5149   glPointParameterf                        := dglGetProcAddress('glPointParameterf');
5150   glPointParameterfv                       := dglGetProcAddress('glPointParameterfv');
5151   glPointSize                              := dglGetProcAddress('glPointSize');
5152   glPolygonOffset                          := dglGetProcAddress('glPolygonOffset');
5153   glRotatef                                := dglGetProcAddress('glRotatef');
5154   glScalef                                 := dglGetProcAddress('glScalef');
5155   glTexEnvf                                := dglGetProcAddress('glTexEnvf');
5156   glTexEnvfv                               := dglGetProcAddress('glTexEnvfv');
5157   glTexParameterf                          := dglGetProcAddress('glTexParameterf');
5158   glTexParameterfv                         := dglGetProcAddress('glTexParameterfv');
5159   glTranslatef                             := dglGetProcAddress('glTranslatef');
5160
5161   { Available in both Common and Common-Lite profiles }
5162   glActiveTexture                          := dglGetProcAddress('glActiveTexture');
5163   glAlphaFuncx                             := dglGetProcAddress('glAlphaFuncx');
5164   glBindBuffer                             := dglGetProcAddress('glBindBuffer');
5165   glBindTexture                            := dglGetProcAddress('glBindTexture');
5166   glBlendFunc                              := dglGetProcAddress('glBlendFunc');
5167   glBufferData                             := dglGetProcAddress('glBufferData');
5168   glBufferSubData                          := dglGetProcAddress('glBufferSubData');
5169   glClear                                  := dglGetProcAddress('glClear');
5170   glClearColorx                            := dglGetProcAddress('glClearColorx');
5171   glClearDepthx                            := dglGetProcAddress('glClearDepthx');
5172   glClearStencil                           := dglGetProcAddress('glClearStencil');
5173   glClientActiveTexture                    := dglGetProcAddress('glClientActiveTexture');
5174   glClipPlanex                             := dglGetProcAddress('glClipPlanex');
5175   glColor4ub                               := dglGetProcAddress('glColor4ub');
5176   glColor4x                                := dglGetProcAddress('glColor4x');
5177   glColorMask                              := dglGetProcAddress('glColorMask');
5178   glColorPointer                           := dglGetProcAddress('glColorPointer');
5179   glCompressedTexImage2D                   := dglGetProcAddress('glCompressedTexImage2D');
5180   glCompressedTexSubImage2D                := dglGetProcAddress('glCompressedTexSubImage2D');
5181   glCopyTexImage2D                         := dglGetProcAddress('glCopyTexImage2D');
5182   glCopyTexSubImage2D                      := dglGetProcAddress('glCopyTexSubImage2D');
5183   glCullFace                               := dglGetProcAddress('glCullFace');
5184   glDeleteBuffers                          := dglGetProcAddress('glDeleteBuffers');
5185   glDeleteTextures                         := dglGetProcAddress('glDeleteTextures');
5186   glDepthFunc                              := dglGetProcAddress('glDepthFunc');
5187   glDepthMask                              := dglGetProcAddress('glDepthMask');
5188   glDepthRangex                            := dglGetProcAddress('glDepthRangex');
5189   glDisable                                := dglGetProcAddress('glDisable');
5190   glDisableClientState                     := dglGetProcAddress('glDisableClientState');
5191   glDrawArrays                             := dglGetProcAddress('glDrawArrays');
5192   glDrawElements                           := dglGetProcAddress('glDrawElements');
5193   glEnable                                 := dglGetProcAddress('glEnable');
5194   glEnableClientState                      := dglGetProcAddress('glEnableClientState');
5195   glFinish                                 := dglGetProcAddress('glFinish');
5196   glFlush                                  := dglGetProcAddress('glFlush');
5197   glFogx                                   := dglGetProcAddress('glFogx');
5198   glFogxv                                  := dglGetProcAddress('glFogxv');
5199   glFrontFace                              := dglGetProcAddress('glFrontFace');
5200   glFrustumx                               := dglGetProcAddress('glFrustumx');
5201   glGetBooleanv                            := dglGetProcAddress('glGetBooleanv');
5202   glGetBufferParameteriv                   := dglGetProcAddress('glGetBufferParameteriv');
5203   glGetClipPlanex                          := dglGetProcAddress('glGetClipPlanex');
5204   glGenBuffers                             := dglGetProcAddress('glGenBuffers');
5205   glGenTextures                            := dglGetProcAddress('glGenTextures');
5206   glGetError                               := dglGetProcAddress('glGetError');
5207   glGetFixedv                              := dglGetProcAddress('glGetFixedv');
5208   glGetIntegerv                            := dglGetProcAddress('glGetIntegerv');
5209   glGetLightxv                             := dglGetProcAddress('glGetLightxv');
5210   glGetMaterialxv                          := dglGetProcAddress('glGetMaterialxv');
5211   glGetPointerv                            := dglGetProcAddress('glGetPointerv');
5212   glGetString                              := dglGetProcAddress('glGetString');
5213   glGetTexEnviv                            := dglGetProcAddress('glGetTexEnviv');
5214   glGetTexEnvxv                            := dglGetProcAddress('glGetTexEnvxv');
5215   glGetTexParameteriv                      := dglGetProcAddress('glGetTexParameteriv');
5216   glGetTexParameterxv                      := dglGetProcAddress('glGetTexParameterxv');
5217   glHint                                   := dglGetProcAddress('glHint');
5218   glIsBuffer                               := dglGetProcAddress('glIsBuffer');
5219   glIsEnabled                              := dglGetProcAddress('glIsEnabled');
5220   glIsTexture                              := dglGetProcAddress('glIsTexture');
5221   glLightModelx                            := dglGetProcAddress('glLightModelx');
5222   glLightModelxv                           := dglGetProcAddress('glLightModelxv');
5223   glLightx                                 := dglGetProcAddress('glLightx');
5224   glLightxv                                := dglGetProcAddress('glLightxv');
5225   glLineWidthx                             := dglGetProcAddress('glLineWidthx');
5226   glLoadIdentity                           := dglGetProcAddress('glLoadIdentity');
5227   glLoadMatrix                             := dglGetProcAddress('glLoadMatrix');
5228   glLogicOp                                := dglGetProcAddress('glLogicOp');
5229   glMaterialx                              := dglGetProcAddress('glMaterialx');
5230   glMaterialxv                             := dglGetProcAddress('glMaterialxv');
5231   glMatrixMode                             := dglGetProcAddress('glMatrixMode');
5232   glMultMatrixx                            := dglGetProcAddress('glMultMatrixx');
5233   glMultiTexCoord4x                        := dglGetProcAddress('glMultiTexCoord4x');
5234   glNormal3x                               := dglGetProcAddress('glNormal3x');
5235   glNormalPointer                          := dglGetProcAddress('glNormalPointer');
5236   glOrthox                                 := dglGetProcAddress('glOrthox');
5237   glPixelStorei                            := dglGetProcAddress('glPixelStorei');
5238   glPointParameterx                        := dglGetProcAddress('glPointParameterx');
5239   glPointParameterxv                       := dglGetProcAddress('glPointParameterxv');
5240   glPointSizex                             := dglGetProcAddress('glPointSizex');
5241   glPolygonOffsetx                         := dglGetProcAddress('glPolygonOffsetx');
5242   glPopMatrix                              := dglGetProcAddress('glPopMatrix');
5243   glPushMatrix                             := dglGetProcAddress('glPushMatrix');
5244   glReadPixels                             := dglGetProcAddress('glReadPixels');
5245   glRotatex                                := dglGetProcAddress('glRotatex');
5246   glSampleCoverage                         := dglGetProcAddress('glSampleCoverage');
5247   glSampleCoveragex                        := dglGetProcAddress('glSampleCoveragex');
5248   glScalex                                 := dglGetProcAddress('glScalex');
5249   glScissor                                := dglGetProcAddress('glScissor');
5250   glShadeModel                             := dglGetProcAddress('glShadeModel');
5251   glStencilFunc                            := dglGetProcAddress('glStencilFunc');
5252   glStencilMask                            := dglGetProcAddress('glStencilMask');
5253   glStencilOp                              := dglGetProcAddress('glStencilOp');
5254   glTexCoordPointer                        := dglGetProcAddress('glTexCoordPointer');
5255   glTexEnvi                                := dglGetProcAddress('glTexEnvi');
5256   glTexEnvx                                := dglGetProcAddress('glTexEnvx');
5257   glTexEnviv                               := dglGetProcAddress('glTexEnviv');
5258   glTexEnvxv                               := dglGetProcAddress('glTexEnvxv');
5259   glTexImage2D                             := dglGetProcAddress('glTexImage2D');
5260   glTexParameteri                          := dglGetProcAddress('glTexParameteri');
5261   glTexParameterx                          := dglGetProcAddress('glTexParameterx');
5262   glTexParameteriv                         := dglGetProcAddress('glTexParameteriv');
5263   glTexParameterxv                         := dglGetProcAddress('glTexParameterxv');
5264   glTexSubImage2D                          := dglGetProcAddress('glTexSubImage2D');
5265   glTranslatex                             := dglGetProcAddress('glTranslatex');
5266   glVertexPointer                          := dglGetProcAddress('glVertexPointer');
5267   glViewport                               := dglGetProcAddress('glViewport');
5268 {$ENDIF}
5269
5270 {$IFDEF OPENGLES_CORE_2_0}
5271   { ============================================= OpenGL ES 2.0 ====================================================== }
5272   glAttachShader                           := dglGetProcAddress('glAttachShader');
5273   glBindAttribLocation                     := dglGetProcAddress('glBindAttribLocation');
5274   glBindFramebuffer                        := dglGetProcAddress('glBindFramebuffer');
5275   glBindRenderbuffer                       := dglGetProcAddress('glBindRenderbuffer');
5276   glBlendColor                             := dglGetProcAddress('glBlendColor');
5277   glBlendEquation                          := dglGetProcAddress('glBlendEquation');
5278   glBlendEquationSeparate                  := dglGetProcAddress('glBlendEquationSeparate');
5279   glBlendFuncSeparate                      := dglGetProcAddress('glBlendFuncSeparate');
5280   glCheckFramebufferStatus                 := dglGetProcAddress('glCheckFramebufferStatus');
5281   glCompileShader                          := dglGetProcAddress('glCompileShader');
5282   glCreateProgram                          := dglGetProcAddress('glCreateProgram');
5283   glCreateShader                           := dglGetProcAddress('glCreateShader');
5284   glDeleteFramebuffers                     := dglGetProcAddress('glDeleteFramebuffers');
5285   glDeleteProgram                          := dglGetProcAddress('glDeleteProgram');
5286   glDeleteRenderbuffers                    := dglGetProcAddress('glDeleteRenderbuffers');
5287   glDeleteShader                           := dglGetProcAddress('glDeleteShader');
5288   glDetachShader                           := dglGetProcAddress('glDetachShader');
5289   glDisableVertexAttribArray               := dglGetProcAddress('glDisableVertexAttribArray');
5290   glEnableVertexAttribArray                := dglGetProcAddress('glEnableVertexAttribArray');
5291   glFramebufferRenderbuffer                := dglGetProcAddress('glFramebufferRenderbuffer');
5292   glFramebufferTexture2D                   := dglGetProcAddress('glFramebufferTexture2D');
5293   glGenerateMipmap                         := dglGetProcAddress('glGenerateMipmap');
5294   glGenFramebuffers                        := dglGetProcAddress('glGenFramebuffers');
5295   glGenRenderbuffers                       := dglGetProcAddress('glGenRenderbuffers');
5296   glGetActiveAttrib                        := dglGetProcAddress('glGetActiveAttrib');
5297   glGetActiveUniform                       := dglGetProcAddress('glGetActiveUniform');
5298   glGetAttachedShaders                     := dglGetProcAddress('glGetAttachedShaders');
5299   glGetAttribLocation                      := dglGetProcAddress('glGetAttribLocation');
5300   glGetFramebufferAttachmentParameteriv    := dglGetProcAddress('glGetFramebufferAttachmentParameteriv');
5301   glGetProgramiv                           := dglGetProcAddress('glGetProgramiv');
5302   glGetProgramInfoLog                      := dglGetProcAddress('glGetProgramInfoLog');
5303   glGetRenderbufferParameteriv             := dglGetProcAddress('glGetRenderbufferParameteriv');
5304   glGetShaderiv                            := dglGetProcAddress('glGetShaderiv');
5305   glGetShaderInfoLog                       := dglGetProcAddress('glGetShaderInfoLog');
5306   glGetShaderPrecisionFormat               := dglGetProcAddress('glGetShaderPrecisionFormat');
5307   glGetShaderSource                        := dglGetProcAddress('glGetShaderSource');
5308   glGetUniformfv                           := dglGetProcAddress('glGetUniformfv');
5309   glGetUniformiv                           := dglGetProcAddress('glGetUniformiv');
5310   glGetUniformLocation                     := dglGetProcAddress('glGetUniformLocation');
5311   glGetVertexAttribfv                      := dglGetProcAddress('glGetVertexAttribfv');
5312   glGetVertexAttribiv                      := dglGetProcAddress('glGetVertexAttribiv');
5313   glGetVertexAttribPointerv                := dglGetProcAddress('glGetVertexAttribPointerv');
5314   glIsFramebuffer                          := dglGetProcAddress('glIsFramebuffer');
5315   glIsProgram                              := dglGetProcAddress('glIsProgram');
5316   glIsRenderbuffer                         := dglGetProcAddress('glIsRenderbuffer');
5317   glIsShader                               := dglGetProcAddress('glIsShader');
5318   glLinkProgram                            := dglGetProcAddress('glLinkProgram');
5319   glReleaseShaderCompiler                  := dglGetProcAddress('glReleaseShaderCompiler');
5320   glRenderbufferStorage                    := dglGetProcAddress('glRenderbufferStorage');
5321   glShaderBinary                           := dglGetProcAddress('glShaderBinary');
5322   glShaderSource                           := dglGetProcAddress('glShaderSource');
5323   glStencilFuncSeparate                    := dglGetProcAddress('glStencilFuncSeparate');
5324   glStencilMaskSeparate                    := dglGetProcAddress('glStencilMaskSeparate');
5325   glStencilOpSeparate                      := dglGetProcAddress('glStencilOpSeparate');
5326   glUniform1f                              := dglGetProcAddress('glUniform1f');
5327   glUniform1fv                             := dglGetProcAddress('glUniform1fv');
5328   glUniform1i                              := dglGetProcAddress('glUniform1i');
5329   glUniform1iv                             := dglGetProcAddress('glUniform1iv');
5330   glUniform2f                              := dglGetProcAddress('glUniform2f');
5331   glUniform2fv                             := dglGetProcAddress('glUniform2fv');
5332   glUniform2i                              := dglGetProcAddress('glUniform2i');
5333   glUniform2iv                             := dglGetProcAddress('glUniform2iv');
5334   glUniform3f                              := dglGetProcAddress('glUniform3f');
5335   glUniform3fv                             := dglGetProcAddress('glUniform3fv');
5336   glUniform3i                              := dglGetProcAddress('glUniform3i');
5337   glUniform3iv                             := dglGetProcAddress('glUniform3iv');
5338   glUniform4f                              := dglGetProcAddress('glUniform4f');
5339   glUniform4fv                             := dglGetProcAddress('glUniform4fv');
5340   glUniform4i                              := dglGetProcAddress('glUniform4i');
5341   glUniform4iv                             := dglGetProcAddress('glUniform4iv');
5342   glUniformMatrix2fv                       := dglGetProcAddress('glUniformMatrix2fv');
5343   glUniformMatrix3fv                       := dglGetProcAddress('glUniformMatrix3fv');
5344   glUniformMatrix4fv                       := dglGetProcAddress('glUniformMatrix4fv');
5345   glUseProgram                             := dglGetProcAddress('glUseProgram');
5346   glValidateProgram                        := dglGetProcAddress('glValidateProgram');
5347   glVertexAttrib1f                         := dglGetProcAddress('glVertexAttrib1f');
5348   glVertexAttrib1fv                        := dglGetProcAddress('glVertexAttrib1fv');
5349   glVertexAttrib2f                         := dglGetProcAddress('glVertexAttrib2f');
5350   glVertexAttrib2fv                        := dglGetProcAddress('glVertexAttrib2fv');
5351   glVertexAttrib3f                         := dglGetProcAddress('glVertexAttrib3f');
5352   glVertexAttrib3fv                        := dglGetProcAddress('glVertexAttrib3fv');
5353   glVertexAttrib4f                         := dglGetProcAddress('glVertexAttrib4f');
5354   glVertexAttrib4fv                        := dglGetProcAddress('glVertexAttrib4fv');
5355   glVertexAttribPointer                    := dglGetProcAddress('glVertexAttribPointer');
5356 {$ENDIF}
5357
5358 {$IFDEF OPENGLES_CORE_3_0}
5359   { ============================================= OpenGL ES 3.0 ====================================================== }
5360   glReadBuffer                             := dglGetProcAddress('glReadBuffer');
5361   glDrawRangeElements                      := dglGetProcAddress('glDrawRangeElements');
5362   glTexImage3D                             := dglGetProcAddress('glTexImage3D');
5363   glTexSubImage3D                          := dglGetProcAddress('glTexSubImage3D');
5364   glCopyTexSubImage3D                      := dglGetProcAddress('glCopyTexSubImage3D');
5365   glCompressedTexImage3D                   := dglGetProcAddress('glCompressedTexImage3D');
5366   glCompressedTexSubImage3D                := dglGetProcAddress('glCompressedTexSubImage3D');
5367   glGenQueries                             := dglGetProcAddress('glGenQueries');
5368   glDeleteQueries                          := dglGetProcAddress('glDeleteQueries');
5369   glIsQuery                                := dglGetProcAddress('glIsQuery');
5370   glBeginQuery                             := dglGetProcAddress('glBeginQuery');
5371   glEndQuery                               := dglGetProcAddress('glEndQuery');
5372   glGetQueryiv                             := dglGetProcAddress('glGetQueryiv');
5373   glGetQueryObjectuiv                      := dglGetProcAddress('glGetQueryObjectuiv');
5374   glUnmapBuffer                            := dglGetProcAddress('glUnmapBuffer');
5375   glGetBufferPointerv                      := dglGetProcAddress('glGetBufferPointerv');
5376   glDrawBuffers                            := dglGetProcAddress('glDrawBuffers');
5377   glUniformMatrix2x3fv                     := dglGetProcAddress('glUniformMatrix2x3fv');
5378   glUniformMatrix3x2fv                     := dglGetProcAddress('glUniformMatrix3x2fv');
5379   glUniformMatrix2x4fv                     := dglGetProcAddress('glUniformMatrix2x4fv');
5380   glUniformMatrix4x2fv                     := dglGetProcAddress('glUniformMatrix4x2fv');
5381   glUniformMatrix3x4fv                     := dglGetProcAddress('glUniformMatrix3x4fv');
5382   glUniformMatrix4x3fv                     := dglGetProcAddress('glUniformMatrix4x3fv');
5383   glBlitFramebuffer                        := dglGetProcAddress('glBlitFramebuffer');
5384   glRenderbufferStorageMultisample         := dglGetProcAddress('glRenderbufferStorageMultisample');
5385   glFramebufferTextureLayer                := dglGetProcAddress('glFramebufferTextureLayer');
5386   glMapBufferRange                         := dglGetProcAddress('glMapBufferRange');
5387   glFlushMappedBufferRange                 := dglGetProcAddress('glFlushMappedBufferRange');
5388   glBindVertexArray                        := dglGetProcAddress('glBindVertexArray');
5389   glDeleteVertexArrays                     := dglGetProcAddress('glDeleteVertexArrays');
5390   glGenVertexArrays                        := dglGetProcAddress('glGenVertexArrays');
5391   glIsVertexArray                          := dglGetProcAddress('glIsVertexArray');
5392   glGetIntegeriv                           := dglGetProcAddress('glGetIntegeriv');
5393   glBeginTransformFeedback                 := dglGetProcAddress('glBeginTransformFeedback');
5394   glEndTransformFeedback                   := dglGetProcAddress('glEndTransformFeedback');
5395   glBindBufferRange                        := dglGetProcAddress('glBindBufferRange');
5396   glBindBufferBase                         := dglGetProcAddress('glBindBufferBase');
5397   glTransformFeedbackVaryings              := dglGetProcAddress('glTransformFeedbackVaryings');
5398   glGetTransformFeedbackVarying            := dglGetProcAddress('glGetTransformFeedbackVarying');
5399   glVertexAttribIPointer                   := dglGetProcAddress('glVertexAttribIPointer');
5400   glGetVertexAttribIiv                     := dglGetProcAddress('glGetVertexAttribIiv');
5401   glGetVertexAttribIuiv                    := dglGetProcAddress('glGetVertexAttribIuiv');
5402   glVertexAttribI4i                        := dglGetProcAddress('glVertexAttribI4i');
5403   glVertexAttribI4ui                       := dglGetProcAddress('glVertexAttribI4ui');
5404   glVertexAttribI4iv                       := dglGetProcAddress('glVertexAttribI4iv');
5405   glVertexAttribI4uiv                      := dglGetProcAddress('glVertexAttribI4uiv');
5406   glGetUniformuiv                          := dglGetProcAddress('glGetUniformuiv');
5407   glGetFragDataLocation                    := dglGetProcAddress('glGetFragDataLocation');
5408   glUniform1ui                             := dglGetProcAddress('glUniform1ui');
5409   glUniform2ui                             := dglGetProcAddress('glUniform2ui');
5410   glUniform3ui                             := dglGetProcAddress('glUniform3ui');
5411   glUniform4ui                             := dglGetProcAddress('glUniform4ui');
5412   glUniform1uiv                            := dglGetProcAddress('glUniform1uiv');
5413   glUniform2uiv                            := dglGetProcAddress('glUniform2uiv');
5414   glUniform3uiv                            := dglGetProcAddress('glUniform3uiv');
5415   glUniform4uiv                            := dglGetProcAddress('glUniform4uiv');
5416   glClearBufferiv                          := dglGetProcAddress('glClearBufferiv');
5417   glClearBufferuiv                         := dglGetProcAddress('glClearBufferuiv');
5418   glClearBufferfv                          := dglGetProcAddress('glClearBufferfv');
5419   glClearBufferfi                          := dglGetProcAddress('glClearBufferfi');
5420   glGetStringi                             := dglGetProcAddress('glGetStringi');
5421   glCopyBufferSubData                      := dglGetProcAddress('glCopyBufferSubData');
5422   glGetUniformIndices                      := dglGetProcAddress('glGetUniformIndices');
5423   glGetActiveUniformsiv                    := dglGetProcAddress('glGetActiveUniformsiv');
5424   glGetUniformBlockIndex                   := dglGetProcAddress('glGetUniformBlockIndex');
5425   glGetActiveUniformBlockiv                := dglGetProcAddress('glGetActiveUniformBlockiv');
5426   glGetActiveUniformBlockName              := dglGetProcAddress('glGetActiveUniformBlockName');
5427   glUniformBlockBinding                    := dglGetProcAddress('glUniformBlockBinding');
5428   glDrawArraysInstanced                    := dglGetProcAddress('glDrawArraysInstanced');
5429   glDrawElementsInstanced                  := dglGetProcAddress('glDrawElementsInstanced');
5430   glFenceSync                              := dglGetProcAddress('glFenceSync');
5431   glIsSync                                 := dglGetProcAddress('glIsSync');
5432   glDeleteSync                             := dglGetProcAddress('glDeleteSync');
5433   glClientWaitSync                         := dglGetProcAddress('glClientWaitSync');
5434   glWaitSync                               := dglGetProcAddress('glWaitSync');
5435   glGetInteger64v                          := dglGetProcAddress('glGetInteger64v');
5436   glGetSynciv                              := dglGetProcAddress('glGetSynciv');
5437   glGetInteger64iv                         := dglGetProcAddress('glGetInteger64iv');
5438   glGetBufferParameteri64v                 := dglGetProcAddress('glGetBufferParameteri64v');
5439   glGenSamplers                            := dglGetProcAddress('glGenSamplers');
5440   glDeleteSamplers                         := dglGetProcAddress('glDeleteSamplers');
5441   glIsSampler                              := dglGetProcAddress('glIsSampler');
5442   glBindSampler                            := dglGetProcAddress('glBindSampler');
5443   glSamplerParameteri                      := dglGetProcAddress('glSamplerParameteri');
5444   glSamplerParameteriv                     := dglGetProcAddress('glSamplerParameteriv');
5445   glSamplerParameterf                      := dglGetProcAddress('glSamplerParameterf');
5446   glSamplerParameterfv                     := dglGetProcAddress('glSamplerParameterfv');
5447   glGetSamplerParameteriv                  := dglGetProcAddress('glGetSamplerParameteriv');
5448   glGetSamplerParameterfv                  := dglGetProcAddress('glGetSamplerParameterfv');
5449   glVertexAttribDivisor                    := dglGetProcAddress('glVertexAttribDivisor');
5450   glBindTransformFeedback                  := dglGetProcAddress('glBindTransformFeedback');
5451   glDeleteTransformFeedbacks               := dglGetProcAddress('glDeleteTransformFeedbacks');
5452   glGenTransformFeedbacks                  := dglGetProcAddress('glGenTransformFeedbacks');
5453   glIsTransformFeedback                    := dglGetProcAddress('glIsTransformFeedback');
5454   glPauseTransformFeedback                 := dglGetProcAddress('glPauseTransformFeedback');
5455   glResumeTransformFeedback                := dglGetProcAddress('glResumeTransformFeedback');
5456   glGetProgramBinary                       := dglGetProcAddress('glGetProgramBinary');
5457   glProgramBinary                          := dglGetProcAddress('glProgramBinary');
5458   glProgramParameteri                      := dglGetProcAddress('glProgramParameteri');
5459   glInvalidateFramebuffer                  := dglGetProcAddress('glInvalidateFramebuffer');
5460   glInvalidateSubFramebuffer               := dglGetProcAddress('glInvalidateSubFramebuffer');
5461   glTexStorage2D                           := dglGetProcAddress('glTexStorage2D');
5462   glTexStorage3D                           := dglGetProcAddress('glTexStorage3D');
5463   glGetInternalformativ                    := dglGetProcAddress('glGetInternalformativ');
5464 {$ENDIF}
5465
5466 {$IFDEF OPENGLES_CORE_3_1}
5467   { ============================================= OpenGL ES 3.1 ====================================================== }
5468   glDispatchCompute                        := dglGetProcAddress('glDispatchCompute');
5469   glDispatchComputeIndirect                := dglGetProcAddress('glDispatchComputeIndirect');
5470   glDrawArraysIndirect                     := dglGetProcAddress('glDrawArraysIndirect');
5471   glDrawElementsIndirect                   := dglGetProcAddress('glDrawElementsIndirect');
5472   glFramebufferParameteri                  := dglGetProcAddress('glFramebufferParameteri');
5473   glGetFramebufferParameteriv              := dglGetProcAddress('glGetFramebufferParameteriv');
5474   glGetProgramInterfaceiv                  := dglGetProcAddress('glGetProgramInterfaceiv');
5475   glGetProgramResourceIndex                := dglGetProcAddress('glGetProgramResourceIndex');
5476   glGetProgramResourceName                 := dglGetProcAddress('glGetProgramResourceName');
5477   glGetProgramResourceiv                   := dglGetProcAddress('glGetProgramResourceiv');
5478   glGetProgramResourceLocation             := dglGetProcAddress('glGetProgramResourceLocation');
5479   glUseProgramStages                       := dglGetProcAddress('glUseProgramStages');
5480   glActiveShaderProgram                    := dglGetProcAddress('glActiveShaderProgram');
5481   glCreateShaderProgramv                   := dglGetProcAddress('glCreateShaderProgramv');
5482   glBindProgramPipeline                    := dglGetProcAddress('glBindProgramPipeline');
5483   glDeleteProgramPipelines                 := dglGetProcAddress('glDeleteProgramPipelines');
5484   glGenProgramPipelines                    := dglGetProcAddress('glGenProgramPipelines');
5485   glIsProgramPipeline                      := dglGetProcAddress('glIsProgramPipeline');
5486   glGetProgramPipelineiv                   := dglGetProcAddress('glGetProgramPipelineiv');
5487   glProgramUniform1i                       := dglGetProcAddress('glProgramUniform1i');
5488   glProgramUniform2i                       := dglGetProcAddress('glProgramUniform2i');
5489   glProgramUniform3i                       := dglGetProcAddress('glProgramUniform3i');
5490   glProgramUniform4i                       := dglGetProcAddress('glProgramUniform4i');
5491   glProgramUniform1ui                      := dglGetProcAddress('glProgramUniform1ui');
5492   glProgramUniform2ui                      := dglGetProcAddress('glProgramUniform2ui');
5493   glProgramUniform3ui                      := dglGetProcAddress('glProgramUniform3ui');
5494   glProgramUniform4ui                      := dglGetProcAddress('glProgramUniform4ui');
5495   glProgramUniform1f                       := dglGetProcAddress('glProgramUniform1f');
5496   glProgramUniform2f                       := dglGetProcAddress('glProgramUniform2f');
5497   glProgramUniform3f                       := dglGetProcAddress('glProgramUniform3f');
5498   glProgramUniform4f                       := dglGetProcAddress('glProgramUniform4f');
5499   glProgramUniform1iv                      := dglGetProcAddress('glProgramUniform1iv');
5500   glProgramUniform2iv                      := dglGetProcAddress('glProgramUniform2iv');
5501   glProgramUniform3iv                      := dglGetProcAddress('glProgramUniform3iv');
5502   glProgramUniform4iv                      := dglGetProcAddress('glProgramUniform4iv');
5503   glProgramUniform1uiv                     := dglGetProcAddress('glProgramUniform1uiv');
5504   glProgramUniform2uiv                     := dglGetProcAddress('glProgramUniform2uiv');
5505   glProgramUniform3uiv                     := dglGetProcAddress('glProgramUniform3uiv');
5506   glProgramUniform4uiv                     := dglGetProcAddress('glProgramUniform4uiv');
5507   glProgramUniform1fv                      := dglGetProcAddress('glProgramUniform1fv');
5508   glProgramUniform2fv                      := dglGetProcAddress('glProgramUniform2fv');
5509   glProgramUniform3fv                      := dglGetProcAddress('glProgramUniform3fv');
5510   glProgramUniform4fv                      := dglGetProcAddress('glProgramUniform4fv');
5511   glProgramUniformMatrix2fv                := dglGetProcAddress('glProgramUniformMatrix2fv');
5512   glProgramUniformMatrix3fv                := dglGetProcAddress('glProgramUniformMatrix3fv');
5513   glProgramUniformMatrix4fv                := dglGetProcAddress('glProgramUniformMatrix4fv');
5514   glProgramUniformMatrix2x3fv              := dglGetProcAddress('glProgramUniformMatrix2x3fv');
5515   glProgramUniformMatrix3x2fv              := dglGetProcAddress('glProgramUniformMatrix3x2fv');
5516   glProgramUniformMatrix2x4fv              := dglGetProcAddress('glProgramUniformMatrix2x4fv');
5517   glProgramUniformMatrix4x2fv              := dglGetProcAddress('glProgramUniformMatrix4x2fv');
5518   glProgramUniformMatrix3x4fv              := dglGetProcAddress('glProgramUniformMatrix3x4fv');
5519   glProgramUniformMatrix4x3fv              := dglGetProcAddress('glProgramUniformMatrix4x3fv');
5520   glValidateProgramPipeline                := dglGetProcAddress('glValidateProgramPipeline');
5521   glGetProgramPipelineInfoLog              := dglGetProcAddress('glGetProgramPipelineInfoLog');
5522   glBindImageTexture                       := dglGetProcAddress('glBindImageTexture');
5523   glGetBooleaniv                           := dglGetProcAddress('glGetBooleaniv');
5524   glMemoryBarrier                          := dglGetProcAddress('glMemoryBarrier');
5525   glMemoryBarrierByRegion                  := dglGetProcAddress('glMemoryBarrierByRegion');
5526   glTexStorage2DMultisample                := dglGetProcAddress('glTexStorage2DMultisample');
5527   glGetMultisamplefv                       := dglGetProcAddress('glGetMultisamplefv');
5528   glSampleMaski                            := dglGetProcAddress('glSampleMaski');
5529   glGetTexLevelParameteriv                 := dglGetProcAddress('glGetTexLevelParameteriv');
5530   glGetTexLevelParameterfv                 := dglGetProcAddress('glGetTexLevelParameterfv');
5531   glBindVertexBuffer                       := dglGetProcAddress('glBindVertexBuffer');
5532   glVertexAttribFormat                     := dglGetProcAddress('glVertexAttribFormat');
5533   glVertexAttribIFormat                    := dglGetProcAddress('glVertexAttribIFormat');
5534   glVertexAttribBinding                    := dglGetProcAddress('glVertexAttribBinding');
5535   glVertexBindingDivisor                   := dglGetProcAddress('glVertexBindingDivisor');
5536 {$ENDIF}
5537 end;
5538
5539 procedure ReadExtensions;
5540 begin
5541 {$IFDEF OPENGLES_EXTENSIONS}
5542   Read_GL_KHR_blend_equation_advanced;
5543   Read_GL_KHR_debug;
5544   Read_GL_KHR_robustness;
5545   Read_GL_OES_EGL_image;
5546   Read_GL_OES_get_program_binary;
5547   Read_GL_OES_mapbuffer;
5548   Read_GL_OES_sample_shading;
5549   Read_GL_OES_texture_3D;
5550   Read_GL_OES_texture_storage_multisample_2d_array;
5551   Read_GL_OES_vertex_array_object;
5552   Read_GL_AMD_performance_monitor;
5553   Read_GL_ANGLE_framebuffer_blit;
5554   Read_GL_ANGLE_framebuffer_multisample;
5555   Read_GL_ANGLE_instanced_arrays;
5556   Read_GL_ANGLE_translated_shader_source;
5557   Read_GL_APPLE_copy_texture_levels;
5558   Read_GL_APPLE_framebuffer_multisample;
5559   Read_GL_APPLE_sync;
5560   Read_GL_EXT_base_instance;
5561   Read_GL_EXT_copy_image;
5562   Read_GL_EXT_debug_label;
5563   Read_GL_EXT_debug_marker;
5564   Read_GL_EXT_discard_framebuffer;
5565   Read_GL_EXT_disjoint_timer_query;
5566   Read_GL_EXT_draw_buffers;
5567   Read_GL_EXT_draw_buffers_indexed;
5568   Read_GL_EXT_draw_elements_base_vertex;
5569   Read_GL_EXT_draw_instanced;
5570   Read_GL_EXT_geometry_shader;
5571   Read_GL_EXT_instanced_arrays;
5572   Read_GL_EXT_map_buffer_range;
5573   Read_GL_EXT_multi_draw_arrays;
5574   Read_GL_EXT_multi_draw_indirect;
5575   Read_GL_EXT_multisampled_render_to_texture;
5576   Read_GL_EXT_multiview_draw_buffers;
5577   Read_GL_EXT_primitive_bounding_box;
5578   Read_GL_EXT_robustness;
5579   Read_GL_EXT_separate_shader_objects;
5580   Read_GL_EXT_tessellation_shader;
5581   Read_GL_EXT_texture_border_clamp;
5582   Read_GL_EXT_texture_buffer;
5583   Read_GL_EXT_texture_storage;
5584   Read_GL_EXT_texture_view;
5585   Read_GL_IMG_multisampled_render_to_texture;
5586   Read_GL_INTEL_performance_query;
5587   Read_GL_NV_bindless_texture;
5588   Read_GL_NV_blend_equation_advanced;
5589   Read_GL_NV_conditional_render;
5590   Read_GL_NV_copy_buffer;
5591   Read_GL_NV_coverage_sample;
5592   Read_GL_NV_draw_buffers;
5593   Read_GL_NV_draw_instanced;
5594   Read_GL_NV_fence;
5595   Read_GL_NV_framebuffer_blit;
5596   Read_GL_NV_framebuffer_multisample;
5597   Read_GL_NV_instanced_arrays;
5598   Read_GL_NV_internalformat_sample_query;
5599   Read_GL_NV_non_square_matrices;
5600   Read_GL_NV_path_rendering;
5601   Read_GL_NV_read_buffer;
5602   Read_GL_NV_viewport_array;
5603   Read_GL_QCOM_alpha_test;
5604   Read_GL_QCOM_driver_control;
5605   Read_GL_QCOM_extended_get;
5606   Read_GL_QCOM_extended_get2;
5607   Read_GL_QCOM_tiled_rendering;
5608 {$ENDIF}
5609 end;
5610
5611 procedure ReadCoreVersion;
5612 var
5613   AnsiBuffer: AnsiString;
5614   Buffer: String;
5615
5616   procedure TrimAndSplitVersionString(const aBuffer: String; out aMajor, aMinor: Integer);
5617   var
5618     p, s, e, len: Integer;
5619   begin
5620     aMajor := 0;
5621     aMinor := 0;
5622     try
5623       len := Length(aBuffer);
5624       p := Pos('.', aBuffer);
5625       if (p = 0) then
5626         exit;
5627
5628       s := p;
5629       while (s > 1) and (aBuffer[s - 1] in ['0'..'9']) do
5630         dec(s);
5631       if (s = p) then
5632         exit;
5633
5634       e := p;
5635       while (e < len) and (aBuffer[e + 1] in ['0'..'9']) do
5636         inc(e);
5637       if (s = p) then
5638         exit;
5639
5640       aMajor := StrToInt(Copy(aBuffer, s - 1, p - s + 1));
5641       aMinor := StrToInt(Copy(aBuffer, p + 1, e - p + 1));
5642     except
5643       aMajor := 0;
5644       aMinor := 0;
5645     end;
5646   end;
5647
5648 begin
5649   if not Assigned(glGetString) then
5650     glGetString := dglGetProcAddress('glGetString');
5651   AnsiBuffer := PAnsiChar(glGetString(GL_VERSION));
5652   Buffer     := String(AnsiBuffer);
5653
5654   TrimAndSplitVersionString(Buffer, GLmajor, GLminor);
5655
5656   GL_VERSION_1_0 := true; // OpenGL ES is always supported
5657   GL_VERSION_1_1 := (GLmajor >= 1) and (GLminor >= 1);
5658   GL_VERSION_2_0 := (GLmajor >= 2) and (GLminor >= 0);
5659   GL_VERSION_3_0 := (GLmajor >= 3) and (GLminor >= 0);
5660   GL_VERSION_3_1 := (GLmajor >= 3) and (GLminor >= 1);
5661 end;
5662
5663 {$IFDEF OPENGLES_EXTENSIONS}
5664 procedure ReadImplementationProperties;
5665
5666   function GetExtensions: String;
5667   var
5668     ExtCount, i: GLint;
5669   begin
5670     result := '';
5671
5672     if not Assigned(glGetString) then
5673       glGetString := dglGetProcAddress('glGetString');
5674     if Assigned(glGetString) then
5675       result := String(PAnsiChar(glGetString(GL_EXTENSIONS)));
5676
5677 {$IFDEF OPENGLES_CORE_3_0}
5678     if (result = '') then begin
5679       if not Assigned(glGetIntegerv) then
5680         glGetIntegerv := dglGetProcAddress('glGetIntegerv');
5681       if not Assigned(glGetStringi) then
5682         glGetStringi := dglGetProcAddress('glGetStringi');
5683       if Assigned(glGetStringi) and Assigned(glGetIntegerv) then begin
5684         glGetIntegerv(GL_NUM_EXTENSIONS, @ExtCount);
5685         for i := 0 to ExtCount-1 do begin
5686           if (result <> '') then
5687             result := result + #$20;
5688           result := result + PAnsiChar(glGetStringi(GL_EXTENSIONS, i));
5689         end;
5690       end;
5691     end;
5692 {$ENDIF}
5693
5694     result := #$20 + result + #$20;
5695   end;
5696
5697   function CheckEx(const aAllExt, aExt: String): Boolean;
5698   begin
5699     result := (Pos(#$20 + aExt + #$20, aAllExt) > 0);
5700   end;
5701
5702 var
5703   Buffer: String;
5704 begin
5705   ReadCoreVersion;
5706
5707   Buffer := GetExtensions;
5708
5709   // KHR
5710   GL_KHR_blend_equation_advanced                := CheckEx(Buffer, 'GL_KHR_blend_equation_advanced');
5711   GL_KHR_blend_equation_advanced_coherent       := CheckEx(Buffer, 'GL_KHR_blend_equation_advanced_coherent');
5712   GL_KHR_context_flush_control                  := CheckEx(Buffer, 'GL_KHR_context_flush_control');
5713   GL_KHR_debug                                  := CheckEx(Buffer, 'GL_KHR_debug');
5714   GL_KHR_robust_buffer_access_behavior          := CheckEx(Buffer, 'GL_KHR_robust_buffer_access_behavior');
5715   GL_KHR_robustness                             := CheckEx(Buffer, 'GL_KHR_robustness');
5716   GL_KHR_texture_compression_astc_hdr           := CheckEx(Buffer, 'GL_KHR_texture_compression_astc_hdr');
5717   GL_KHR_texture_compression_astc_ldr           := CheckEx(Buffer, 'GL_KHR_texture_compression_astc_ldr');
5718
5719   // OES
5720   GL_OES_EGL_image                              := CheckEx(Buffer, 'GL_OES_EGL_image');
5721   GL_OES_EGL_image_external                     := CheckEx(Buffer, 'GL_OES_EGL_image_external');
5722   GL_OES_compressed_ETC1_RGB8_sub_texture       := CheckEx(Buffer, 'GL_OES_compressed_ETC1_RGB8_sub_texture');
5723   GL_OES_compressed_ETC1_RGB8_texture           := CheckEx(Buffer, 'GL_OES_compressed_ETC1_RGB8_texture');
5724   GL_OES_compressed_paletted_texture            := CheckEx(Buffer, 'GL_OES_compressed_paletted_texture');
5725   GL_OES_depth24                                := CheckEx(Buffer, 'GL_OES_depth24');
5726   GL_OES_depth32                                := CheckEx(Buffer, 'GL_OES_depth32');
5727   GL_OES_depth_texture                          := CheckEx(Buffer, 'GL_OES_depth_texture');
5728   GL_OES_element_index_uint                     := CheckEx(Buffer, 'GL_OES_element_index_uint');
5729   GL_OES_fbo_render_mipmap                      := CheckEx(Buffer, 'GL_OES_fbo_render_mipmap');
5730   GL_OES_fragment_precision_high                := CheckEx(Buffer, 'GL_OES_fragment_precision_high');
5731   GL_OES_get_program_binary                     := CheckEx(Buffer, 'GL_OES_get_program_binary');
5732   GL_OES_mapbuffer                              := CheckEx(Buffer, 'GL_OES_mapbuffer');
5733   GL_OES_packed_depth_stencil                   := CheckEx(Buffer, 'GL_OES_packed_depth_stencil');
5734   GL_OES_required_internalformat                := CheckEx(Buffer, 'GL_OES_required_internalformat');
5735   GL_OES_rgb8_rgba8                             := CheckEx(Buffer, 'GL_OES_rgb8_rgba8');
5736   GL_OES_sample_shading                         := CheckEx(Buffer, 'GL_OES_sample_shading');
5737   GL_OES_sample_variables                       := CheckEx(Buffer, 'GL_OES_sample_variables');
5738   GL_OES_shader_image_atomic                    := CheckEx(Buffer, 'GL_OES_shader_image_atomic');
5739   GL_OES_shader_multisample_interpolation       := CheckEx(Buffer, 'GL_OES_shader_multisample_interpolation');
5740   GL_OES_standard_derivatives                   := CheckEx(Buffer, 'GL_OES_standard_derivatives');
5741   GL_OES_stencil1                               := CheckEx(Buffer, 'GL_OES_stencil1');
5742   GL_OES_stencil4                               := CheckEx(Buffer, 'GL_OES_stencil4');
5743   GL_OES_surfaceless_context                    := CheckEx(Buffer, 'GL_OES_surfaceless_context');
5744   GL_OES_texture_3D                             := CheckEx(Buffer, 'GL_OES_texture_3D');
5745   GL_OES_texture_compression_astc               := CheckEx(Buffer, 'GL_OES_texture_compression_astc');
5746   GL_OES_texture_float                          := CheckEx(Buffer, 'GL_OES_texture_float');
5747   GL_OES_texture_float_linear                   := CheckEx(Buffer, 'GL_OES_texture_float_linear');
5748   GL_OES_texture_half_float                     := CheckEx(Buffer, 'GL_OES_texture_half_float');
5749   GL_OES_texture_half_float_linear              := CheckEx(Buffer, 'GL_OES_texture_half_float_linear');
5750   GL_OES_texture_npot                           := CheckEx(Buffer, 'GL_OES_texture_npot');
5751   GL_OES_texture_stencil8                       := CheckEx(Buffer, 'GL_OES_texture_stencil8');
5752   GL_OES_texture_storage_multisample_2d_array   := CheckEx(Buffer, 'GL_OES_texture_storage_multisample_2d_array');
5753   GL_OES_vertex_array_object                    := CheckEx(Buffer, 'GL_OES_vertex_array_object');
5754   GL_OES_vertex_half_float                      := CheckEx(Buffer, 'GL_OES_vertex_half_float');
5755   GL_OES_vertex_type_10_10_10_2                 := CheckEx(Buffer, 'GL_OES_vertex_type_10_10_10_2');
5756
5757   // AMD
5758   GL_AMD_compressed_3DC_texture                 := CheckEx(Buffer, 'GL_AMD_compressed_3DC_texture');
5759   GL_AMD_compressed_ATC_texture                 := CheckEx(Buffer, 'GL_AMD_compressed_ATC_texture');
5760   GL_AMD_performance_monitor                    := CheckEx(Buffer, 'GL_AMD_performance_monitor');
5761   GL_AMD_program_binary_Z400                    := CheckEx(Buffer, 'GL_AMD_program_binary_Z400');
5762
5763   // ANDROID
5764   GL_ANDROID_extension_pack_es31a               := CheckEx(Buffer, 'GL_ANDROID_extension_pack_es31a');
5765
5766   // ANGLE
5767   GL_ANGLE_depth_texture                        := CheckEx(Buffer, 'GL_ANGLE_depth_texture');
5768   GL_ANGLE_framebuffer_blit                     := CheckEx(Buffer, 'GL_ANGLE_framebuffer_blit');
5769   GL_ANGLE_framebuffer_multisample              := CheckEx(Buffer, 'GL_ANGLE_framebuffer_multisample');
5770   GL_ANGLE_instanced_arrays                     := CheckEx(Buffer, 'GL_ANGLE_instanced_arrays');
5771   GL_ANGLE_pack_reverse_row_order               := CheckEx(Buffer, 'GL_ANGLE_pack_reverse_row_order');
5772   GL_ANGLE_program_binary                       := CheckEx(Buffer, 'GL_ANGLE_program_binary');
5773   GL_ANGLE_texture_compression_dxt3             := CheckEx(Buffer, 'GL_ANGLE_texture_compression_dxt3');
5774   GL_ANGLE_texture_compression_dxt5             := CheckEx(Buffer, 'GL_ANGLE_texture_compression_dxt5');
5775   GL_ANGLE_texture_usage                        := CheckEx(Buffer, 'GL_ANGLE_texture_usage');
5776   GL_ANGLE_translated_shader_source             := CheckEx(Buffer, 'GL_ANGLE_translated_shader_source');
5777
5778   // APPLE
5779   GL_APPLE_clip_distance                        := CheckEx(Buffer, 'GL_APPLE_clip_distance');
5780   GL_APPLE_color_buffer_packed_float            := CheckEx(Buffer, 'GL_APPLE_color_buffer_packed_float');
5781   GL_APPLE_copy_texture_levels                  := CheckEx(Buffer, 'GL_APPLE_copy_texture_levels');
5782   GL_APPLE_framebuffer_multisample              := CheckEx(Buffer, 'GL_APPLE_framebuffer_multisample');
5783   GL_APPLE_rgb_422                              := CheckEx(Buffer, 'GL_APPLE_rgb_422');
5784   GL_APPLE_sync                                 := CheckEx(Buffer, 'GL_APPLE_sync');
5785   GL_APPLE_texture_format_BGRA8888              := CheckEx(Buffer, 'GL_APPLE_texture_format_BGRA8888');
5786   GL_APPLE_texture_max_level                    := CheckEx(Buffer, 'GL_APPLE_texture_max_level');
5787   GL_APPLE_texture_packed_float                 := CheckEx(Buffer, 'GL_APPLE_texture_packed_float');
5788
5789   // ARM
5790   GL_ARM_mali_program_binary                    := CheckEx(Buffer, 'GL_ARM_mali_program_binary');
5791   GL_ARM_mali_shader_binary                     := CheckEx(Buffer, 'GL_ARM_mali_shader_binary');
5792   GL_ARM_rgba8                                  := CheckEx(Buffer, 'GL_ARM_rgba8');
5793   GL_ARM_shader_framebuffer_fetch               := CheckEx(Buffer, 'GL_ARM_shader_framebuffer_fetch');
5794   GL_ARM_shader_framebuffer_fetch_depth_stencil := CheckEx(Buffer, 'GL_ARM_shader_framebuffer_fetch_depth_stencil');
5795
5796   // DMP
5797   GL_DMP_program_binary                         := CheckEx(Buffer, 'GL_DMP_program_binary');
5798   GL_DMP_shader_binary                          := CheckEx(Buffer, 'GL_DMP_shader_binary');
5799
5800   // EXT
5801   GL_EXT_base_instance                          := CheckEx(Buffer, 'GL_EXT_base_instance');
5802   GL_EXT_blend_minmax                           := CheckEx(Buffer, 'GL_EXT_blend_minmax');
5803   GL_EXT_color_buffer_half_float                := CheckEx(Buffer, 'GL_EXT_color_buffer_half_float');
5804   GL_EXT_copy_image                             := CheckEx(Buffer, 'GL_EXT_copy_image');
5805   GL_EXT_debug_label                            := CheckEx(Buffer, 'GL_EXT_debug_label');
5806   GL_EXT_debug_marker                           := CheckEx(Buffer, 'GL_EXT_debug_marker');
5807   GL_EXT_discard_framebuffer                    := CheckEx(Buffer, 'GL_EXT_discard_framebuffer');
5808   GL_EXT_disjoint_timer_query                   := CheckEx(Buffer, 'GL_EXT_disjoint_timer_query');
5809   GL_EXT_draw_buffers                           := CheckEx(Buffer, 'GL_EXT_draw_buffers');
5810   GL_EXT_draw_buffers_indexed                   := CheckEx(Buffer, 'GL_EXT_draw_buffers_indexed');
5811   GL_EXT_draw_elements_base_vertex              := CheckEx(Buffer, 'GL_EXT_draw_elements_base_vertex');
5812   GL_EXT_draw_instanced                         := CheckEx(Buffer, 'GL_EXT_draw_instanced');
5813   GL_EXT_geometry_point_size                    := CheckEx(Buffer, 'GL_EXT_geometry_point_size');
5814   GL_EXT_geometry_shader                        := CheckEx(Buffer, 'GL_EXT_geometry_shader');
5815   GL_EXT_gpu_shader5                            := CheckEx(Buffer, 'GL_EXT_gpu_shader5');
5816   GL_EXT_instanced_arrays                       := CheckEx(Buffer, 'GL_EXT_instanced_arrays');
5817   GL_EXT_map_buffer_range                       := CheckEx(Buffer, 'GL_EXT_map_buffer_range');
5818   GL_EXT_multi_draw_arrays                      := CheckEx(Buffer, 'GL_EXT_multi_draw_arrays');
5819   GL_EXT_multi_draw_indirect                    := CheckEx(Buffer, 'GL_EXT_multi_draw_indirect');
5820   GL_EXT_multisampled_render_to_texture         := CheckEx(Buffer, 'GL_EXT_multisampled_render_to_texture');
5821   GL_EXT_multiview_draw_buffers                 := CheckEx(Buffer, 'GL_EXT_multiview_draw_buffers');
5822   GL_EXT_occlusion_query_boolean                := CheckEx(Buffer, 'GL_EXT_occlusion_query_boolean');
5823   GL_EXT_primitive_bounding_box                 := CheckEx(Buffer, 'GL_EXT_primitive_bounding_box');
5824   GL_EXT_pvrtc_sRGB                             := CheckEx(Buffer, 'GL_EXT_pvrtc_sRGB');
5825   GL_EXT_read_format_bgra                       := CheckEx(Buffer, 'GL_EXT_read_format_bgra');
5826   GL_EXT_render_snorm                           := CheckEx(Buffer, 'GL_EXT_render_snorm');
5827   GL_EXT_robustness                             := CheckEx(Buffer, 'GL_EXT_robustness');
5828   GL_EXT_sRGB                                   := CheckEx(Buffer, 'GL_EXT_sRGB');
5829   GL_EXT_sRGB_write_control                     := CheckEx(Buffer, 'GL_EXT_sRGB_write_control');
5830   GL_EXT_separate_shader_objects                := CheckEx(Buffer, 'GL_EXT_separate_shader_objects');
5831   GL_EXT_shader_framebuffer_fetch               := CheckEx(Buffer, 'GL_EXT_shader_framebuffer_fetch');
5832   GL_EXT_shader_implicit_conversions            := CheckEx(Buffer, 'GL_EXT_shader_implicit_conversions');
5833   GL_EXT_shader_integer_mix                     := CheckEx(Buffer, 'GL_EXT_shader_integer_mix');
5834   GL_EXT_shader_io_blocks                       := CheckEx(Buffer, 'GL_EXT_shader_io_blocks');
5835   GL_EXT_shader_pixel_local_storage             := CheckEx(Buffer, 'GL_EXT_shader_pixel_local_storage');
5836   GL_EXT_shader_texture_lod                     := CheckEx(Buffer, 'GL_EXT_shader_texture_lod');
5837   GL_EXT_shadow_samplers                        := CheckEx(Buffer, 'GL_EXT_shadow_samplers');
5838   GL_EXT_tessellation_point_size                := CheckEx(Buffer, 'GL_EXT_tessellation_point_size');
5839   GL_EXT_tessellation_shader                    := CheckEx(Buffer, 'GL_EXT_tessellation_shader');
5840   GL_EXT_texture_border_clamp                   := CheckEx(Buffer, 'GL_EXT_texture_border_clamp');
5841   GL_EXT_texture_buffer                         := CheckEx(Buffer, 'GL_EXT_texture_buffer');
5842   GL_EXT_texture_compression_dxt1               := CheckEx(Buffer, 'GL_EXT_texture_compression_dxt1');
5843   GL_EXT_texture_compression_s3tc               := CheckEx(Buffer, 'GL_EXT_texture_compression_s3tc');
5844   GL_EXT_texture_cube_map_array                 := CheckEx(Buffer, 'GL_EXT_texture_cube_map_array');
5845   GL_EXT_texture_filter_anisotropic             := CheckEx(Buffer, 'GL_EXT_texture_filter_anisotropic');
5846   GL_EXT_texture_format_BGRA8888                := CheckEx(Buffer, 'GL_EXT_texture_format_BGRA8888');
5847   GL_EXT_texture_norm16                         := CheckEx(Buffer, 'GL_EXT_texture_norm16');
5848   GL_EXT_texture_rg                             := CheckEx(Buffer, 'GL_EXT_texture_rg');
5849   GL_EXT_texture_sRGB_decode                    := CheckEx(Buffer, 'GL_EXT_texture_sRGB_decode');
5850   GL_EXT_texture_storage                        := CheckEx(Buffer, 'GL_EXT_texture_storage');
5851   GL_EXT_texture_type_2_10_10_10_REV            := CheckEx(Buffer, 'GL_EXT_texture_type_2_10_10_10_REV');
5852   GL_EXT_texture_view                           := CheckEx(Buffer, 'GL_EXT_texture_view');
5853   GL_EXT_unpack_subimage                        := CheckEx(Buffer, 'GL_EXT_unpack_subimage');
5854
5855   // FJ
5856   GL_FJ_shader_binary_GCCSO                     := CheckEx(Buffer, 'GL_FJ_shader_binary_GCCSO');
5857
5858   // IMG
5859   GL_IMG_multisampled_render_to_texture         := CheckEx(Buffer, 'GL_IMG_multisampled_render_to_texture');
5860   GL_IMG_program_binary                         := CheckEx(Buffer, 'GL_IMG_program_binary');
5861   GL_IMG_read_format                            := CheckEx(Buffer, 'GL_IMG_read_format');
5862   GL_IMG_shader_binary                          := CheckEx(Buffer, 'GL_IMG_shader_binary');
5863   GL_IMG_texture_compression_pvrtc              := CheckEx(Buffer, 'GL_IMG_texture_compression_pvrtc');
5864   GL_IMG_texture_compression_pvrtc2             := CheckEx(Buffer, 'GL_IMG_texture_compression_pvrtc2');
5865
5866   // INTEL
5867   GL_INTEL_performance_query                    := CheckEx(Buffer, 'GL_INTEL_performance_query');
5868
5869   // NV
5870   GL_NV_bindless_texture                        := CheckEx(Buffer, 'GL_NV_bindless_texture');
5871   GL_NV_blend_equation_advanced                 := CheckEx(Buffer, 'GL_NV_blend_equation_advanced');
5872   GL_NV_blend_equation_advanced_coherent        := CheckEx(Buffer, 'GL_NV_blend_equation_advanced_coherent');
5873   GL_NV_conditional_render                      := CheckEx(Buffer, 'GL_NV_conditional_render');
5874   GL_NV_copy_buffer                             := CheckEx(Buffer, 'GL_NV_copy_buffer');
5875   GL_NV_coverage_sample                         := CheckEx(Buffer, 'GL_NV_coverage_sample');
5876   GL_NV_depth_nonlinear                         := CheckEx(Buffer, 'GL_NV_depth_nonlinear');
5877   GL_NV_draw_buffers                            := CheckEx(Buffer, 'GL_NV_draw_buffers');
5878   GL_NV_draw_instanced                          := CheckEx(Buffer, 'GL_NV_draw_instanced');
5879   GL_NV_explicit_attrib_location                := CheckEx(Buffer, 'GL_NV_explicit_attrib_location');
5880   GL_NV_fbo_color_attachments                   := CheckEx(Buffer, 'GL_NV_fbo_color_attachments');
5881   GL_NV_fence                                   := CheckEx(Buffer, 'GL_NV_fence');
5882   GL_NV_framebuffer_blit                        := CheckEx(Buffer, 'GL_NV_framebuffer_blit');
5883   GL_NV_framebuffer_multisample                 := CheckEx(Buffer, 'GL_NV_framebuffer_multisample');
5884   GL_NV_generate_mipmap_sRGB                    := CheckEx(Buffer, 'GL_NV_generate_mipmap_sRGB');
5885   GL_NV_image_formats                           := CheckEx(Buffer, 'GL_NV_image_formats');
5886   GL_NV_instanced_arrays                        := CheckEx(Buffer, 'GL_NV_instanced_arrays');
5887   GL_NV_internalformat_sample_query             := CheckEx(Buffer, 'GL_NV_internalformat_sample_query');
5888   GL_NV_non_square_matrices                     := CheckEx(Buffer, 'GL_NV_non_square_matrices');
5889   GL_NV_path_rendering                          := CheckEx(Buffer, 'GL_NV_path_rendering');
5890   GL_NV_read_buffer                             := CheckEx(Buffer, 'GL_NV_read_buffer');
5891   GL_NV_read_buffer_front                       := CheckEx(Buffer, 'GL_NV_read_buffer_front');
5892   GL_NV_read_depth                              := CheckEx(Buffer, 'GL_NV_read_depth');
5893   GL_NV_read_depth_stencil                      := CheckEx(Buffer, 'GL_NV_read_depth_stencil');
5894   GL_NV_read_stencil                            := CheckEx(Buffer, 'GL_NV_read_stencil');
5895   GL_NV_sRGB_formats                            := CheckEx(Buffer, 'GL_NV_sRGB_formats');
5896   GL_NV_shader_noperspective_interpolation      := CheckEx(Buffer, 'GL_NV_shader_noperspective_interpolation');
5897   GL_NV_shadow_samplers_array                   := CheckEx(Buffer, 'GL_NV_shadow_samplers_array');
5898   GL_NV_shadow_samplers_cube                    := CheckEx(Buffer, 'GL_NV_shadow_samplers_cube');
5899   GL_NV_texture_border_clamp                    := CheckEx(Buffer, 'GL_NV_texture_border_clamp');
5900   GL_NV_texture_compression_s3tc_update         := CheckEx(Buffer, 'GL_NV_texture_compression_s3tc_update');
5901   GL_NV_texture_npot_2D_mipmap                  := CheckEx(Buffer, 'GL_NV_texture_npot_2D_mipmap');
5902   GL_NV_viewport_array                          := CheckEx(Buffer, 'GL_NV_viewport_array');
5903
5904   // QCOM
5905   GL_QCOM_alpha_test                            := CheckEx(Buffer, 'GL_QCOM_alpha_test');
5906   GL_QCOM_binning_control                       := CheckEx(Buffer, 'GL_QCOM_binning_control');
5907   GL_QCOM_driver_control                        := CheckEx(Buffer, 'GL_QCOM_driver_control');
5908   GL_QCOM_extended_get                          := CheckEx(Buffer, 'GL_QCOM_extended_get');
5909   GL_QCOM_extended_get2                         := CheckEx(Buffer, 'GL_QCOM_extended_get2');
5910   GL_QCOM_perfmon_global_mode                   := CheckEx(Buffer, 'GL_QCOM_perfmon_global_mode');
5911   GL_QCOM_tiled_rendering                       := CheckEx(Buffer, 'GL_QCOM_tiled_rendering');
5912   GL_QCOM_writeonly_rendering                   := CheckEx(Buffer, 'GL_QCOM_writeonly_rendering');
5913
5914   // VIV
5915   GL_VIV_shader_binary                          := CheckEx(Buffer, 'GL_VIV_shader_binary');
5916 end;
5917 {$ELSE}
5918 procedure ReadImplementationProperties;
5919 begin
5920   // nothing to do here
5921 end;
5922 {$ENDIF}
5923
5924 {$IFDEF OPENGLES_EXTENSIONS}
5925 procedure Read_GL_KHR_blend_equation_advanced;
5926 begin
5927   glBlendBarrierKHR                                        := dglGetProcAddress('glBlendBarrierKHR');
5928 end;
5929
5930 procedure Read_GL_KHR_debug;
5931 begin
5932   glDebugMessageControlKHR                                 := dglGetProcAddress('glDebugMessageControlKHR');
5933   glDebugMessageInsertKHR                                  := dglGetProcAddress('glDebugMessageInsertKHR');
5934   glDebugMessageCallbackKHR                                := dglGetProcAddress('glDebugMessageCallbackKHR');
5935   glGetDebugMessageLogKHR                                  := dglGetProcAddress('glGetDebugMessageLogKHR');
5936   glPushDebugGroupKHR                                      := dglGetProcAddress('glPushDebugGroupKHR');
5937   glPopDebugGroupKHR                                       := dglGetProcAddress('glPopDebugGroupKHR');
5938   glObjectLabelKHR                                         := dglGetProcAddress('glObjectLabelKHR');
5939   glGetObjectLabelKHR                                      := dglGetProcAddress('glGetObjectLabelKHR');
5940   glObjectPtrLabelKHR                                      := dglGetProcAddress('glObjectPtrLabelKHR');
5941   glGetObjectPtrLabelKHR                                   := dglGetProcAddress('glGetObjectPtrLabelKHR');
5942   glGetPointervKHR                                         := dglGetProcAddress('glGetPointervKHR');
5943 end;
5944
5945 procedure Read_GL_KHR_robustness;
5946 begin
5947   glGetGraphicsResetStatusKHR                              := dglGetProcAddress('glGetGraphicsResetStatusKHR');
5948   glReadnPixelsKHR                                         := dglGetProcAddress('glReadnPixelsKHR');
5949   glGetnUniformfvKHR                                       := dglGetProcAddress('glGetnUniformfvKHR');
5950   glGetnUniformivKHR                                       := dglGetProcAddress('glGetnUniformivKHR');
5951   glGetnUniformuivKHR                                      := dglGetProcAddress('glGetnUniformuivKHR');
5952 end;
5953
5954 procedure Read_GL_OES_EGL_image;
5955 begin
5956   glEGLImageTargetTexture2DOES                             := dglGetProcAddress('glEGLImageTargetTexture2DOES');
5957   glEGLImageTargetRenderbufferStorageOES                   := dglGetProcAddress('glEGLImageTargetRenderbufferStorageOES');
5958 end;
5959
5960 procedure Read_GL_OES_get_program_binary;
5961 begin
5962   glGetProgramBinaryOES                                    := dglGetProcAddress('glGetProgramBinaryOES');
5963   glProgramBinaryOES                                       := dglGetProcAddress('glProgramBinaryOES');
5964 end;
5965
5966 procedure Read_GL_OES_mapbuffer;
5967 begin
5968   glMapBufferOES                                           := dglGetProcAddress('glMapBufferOES');
5969   glUnmapBufferOES                                         := dglGetProcAddress('glUnmapBufferOES');
5970   glGetBufferPointervOES                                   := dglGetProcAddress('glGetBufferPointervOES');
5971 end;
5972
5973 procedure Read_GL_OES_sample_shading;
5974 begin
5975   glMinSampleShadingOES                                    := dglGetProcAddress('glMinSampleShadingOES');
5976 end;
5977
5978 procedure Read_GL_OES_texture_3D;
5979 begin
5980   glTexImage3DOES                                          := dglGetProcAddress('glTexImage3DOES');
5981   glTexSubImage3DOES                                       := dglGetProcAddress('glTexSubImage3DOES');
5982   glCopyTexSubImage3DOES                                   := dglGetProcAddress('glCopyTexSubImage3DOES');
5983   glCompressedTexImage3DOES                                := dglGetProcAddress('glCompressedTexImage3DOES');
5984   glCompressedTexSubImage3DOES                             := dglGetProcAddress('glCompressedTexSubImage3DOES');
5985   glFramebufferTexture3DOES                                := dglGetProcAddress('glFramebufferTexture3DOES');
5986 end;
5987
5988 procedure Read_GL_OES_texture_storage_multisample_2d_array;
5989 begin
5990   glTexStorage3DMultisampleOES                             := dglGetProcAddress('glTexStorage3DMultisampleOES');
5991 end;
5992
5993 procedure Read_GL_OES_vertex_array_object;
5994 begin
5995   glBindVertexArrayOES                                     := dglGetProcAddress('glBindVertexArrayOES');
5996   glDeleteVertexArraysOES                                  := dglGetProcAddress('glDeleteVertexArraysOES');
5997   glGenVertexArraysOES                                     := dglGetProcAddress('glGenVertexArraysOES');
5998   glIsVertexArrayOES                                       := dglGetProcAddress('glIsVertexArrayOES');
5999 end;
6000
6001 procedure Read_GL_AMD_performance_monitor;
6002 begin
6003   glGetPerfMonitorGroupsAMD                                := dglGetProcAddress('glGetPerfMonitorGroupsAMD');
6004   glGetPerfMonitorCountersAMD                              := dglGetProcAddress('glGetPerfMonitorCountersAMD');
6005   glGetPerfMonitorGroupStringAMD                           := dglGetProcAddress('glGetPerfMonitorGroupStringAMD');
6006   glGetPerfMonitorCounterStringAMD                         := dglGetProcAddress('glGetPerfMonitorCounterStringAMD');
6007   glGetPerfMonitorCounterInfoAMD                           := dglGetProcAddress('glGetPerfMonitorCounterInfoAMD');
6008   glGenPerfMonitorsAMD                                     := dglGetProcAddress('glGenPerfMonitorsAMD');
6009   glDeletePerfMonitorsAMD                                  := dglGetProcAddress('glDeletePerfMonitorsAMD');
6010   glSelectPerfMonitorCountersAMD                           := dglGetProcAddress('glSelectPerfMonitorCountersAMD');
6011   glBeginPerfMonitorAMD                                    := dglGetProcAddress('glBeginPerfMonitorAMD');
6012   glEndPerfMonitorAMD                                      := dglGetProcAddress('glEndPerfMonitorAMD');
6013   glGetPerfMonitorCounterDataAMD                           := dglGetProcAddress('glGetPerfMonitorCounterDataAMD');
6014 end;
6015
6016 procedure Read_GL_ANGLE_framebuffer_blit;
6017 begin
6018   glBlitFramebufferANGLE                                   := dglGetProcAddress('glBlitFramebufferANGLE');
6019 end;
6020
6021 procedure Read_GL_ANGLE_framebuffer_multisample;
6022 begin
6023   glRenderbufferStorageMultisampleANGLE                    := dglGetProcAddress('glRenderbufferStorageMultisampleANGLE');
6024 end;
6025
6026 procedure Read_GL_ANGLE_instanced_arrays;
6027 begin
6028   glDrawArraysInstancedANGLE                               := dglGetProcAddress('glDrawArraysInstancedANGLE');
6029   glDrawElementsInstancedANGLE                             := dglGetProcAddress('glDrawElementsInstancedANGLE');
6030   glVertexAttribDivisorANGLE                               := dglGetProcAddress('glVertexAttribDivisorANGLE');
6031 end;
6032
6033 procedure Read_GL_ANGLE_translated_shader_source;
6034 begin
6035   glGetTranslatedShaderSourceANGLE                         := dglGetProcAddress('glGetTranslatedShaderSourceANGLE');
6036 end;
6037
6038 procedure Read_GL_APPLE_copy_texture_levels;
6039 begin
6040   glCopyTextureLevelsAPPLE                                 := dglGetProcAddress('glCopyTextureLevelsAPPLE');
6041 end;
6042
6043 procedure Read_GL_APPLE_framebuffer_multisample;
6044 begin
6045   glRenderbufferStorageMultisampleAPPLE                    := dglGetProcAddress('glRenderbufferStorageMultisampleAPPLE');
6046   glResolveMultisampleFramebufferAPPLE                     := dglGetProcAddress('glResolveMultisampleFramebufferAPPLE');
6047 end;
6048
6049 procedure Read_GL_APPLE_sync;
6050 begin
6051   glFenceSyncAPPLE                                         := dglGetProcAddress('glFenceSyncAPPLE');
6052   glIsSyncAPPLE                                            := dglGetProcAddress('glIsSyncAPPLE');
6053   glDeleteSyncAPPLE                                        := dglGetProcAddress('glDeleteSyncAPPLE');
6054   glClientWaitSyncAPPLE                                    := dglGetProcAddress('glClientWaitSyncAPPLE');
6055   glWaitSyncAPPLE                                          := dglGetProcAddress('glWaitSyncAPPLE');
6056   glGetInteger64vAPPLE                                     := dglGetProcAddress('glGetInteger64vAPPLE');
6057   glGetSyncivAPPLE                                         := dglGetProcAddress('glGetSyncivAPPLE');
6058 end;
6059
6060 procedure Read_GL_EXT_base_instance;
6061 begin
6062   glDrawArraysInstancedBaseInstanceEXT                     := dglGetProcAddress('glDrawArraysInstancedBaseInstanceEXT');
6063   glDrawElementsInstancedBaseInstanceEXT                   := dglGetProcAddress('glDrawElementsInstancedBaseInstanceEXT');
6064   glDrawElementsInstancedBaseVertexBaseInstanceEXT         := dglGetProcAddress('glDrawElementsInstancedBaseVertexBaseInstanceEXT');
6065 end;
6066
6067 procedure Read_GL_EXT_copy_image;
6068 begin
6069   glCopyImageSubDataEXT                                    := dglGetProcAddress('glCopyImageSubDataEXT');
6070 end;
6071
6072 procedure Read_GL_EXT_debug_label;
6073 begin
6074   glLabelObjectEXT                                         := dglGetProcAddress('glLabelObjectEXT');
6075   glGetObjectLabelEXT                                      := dglGetProcAddress('glGetObjectLabelEXT');
6076 end;
6077
6078 procedure Read_GL_EXT_debug_marker;
6079 begin
6080   glInsertEventMarkerEXT                                   := dglGetProcAddress('glInsertEventMarkerEXT');
6081   glPushGroupMarkerEXT                                     := dglGetProcAddress('glPushGroupMarkerEXT');
6082   glPopGroupMarkerEXT                                      := dglGetProcAddress('glPopGroupMarkerEXT');
6083 end;
6084
6085 procedure Read_GL_EXT_discard_framebuffer;
6086 begin
6087   glDiscardFramebufferEXT                                  := dglGetProcAddress('glDiscardFramebufferEXT');
6088 end;
6089
6090 procedure Read_GL_EXT_disjoint_timer_query;
6091 begin
6092   glGenQueriesEXT                                          := dglGetProcAddress('glGenQueriesEXT');
6093   glDeleteQueriesEXT                                       := dglGetProcAddress('glDeleteQueriesEXT');
6094   glIsQueryEXT                                             := dglGetProcAddress('glIsQueryEXT');
6095   glBeginQueryEXT                                          := dglGetProcAddress('glBeginQueryEXT');
6096   glEndQueryEXT                                            := dglGetProcAddress('glEndQueryEXT');
6097   glQueryCounterEXT                                        := dglGetProcAddress('glQueryCounterEXT');
6098   glGetQueryivEXT                                          := dglGetProcAddress('glGetQueryivEXT');
6099   glGetQueryObjectivEXT                                    := dglGetProcAddress('glGetQueryObjectivEXT');
6100   glGetQueryObjectuivEXT                                   := dglGetProcAddress('glGetQueryObjectuivEXT');
6101   glGetQueryObjecti64vEXT                                  := dglGetProcAddress('glGetQueryObjecti64vEXT');
6102   glGetQueryObjectui64vEXT                                 := dglGetProcAddress('glGetQueryObjectui64vEXT');
6103 end;
6104
6105 procedure Read_GL_EXT_draw_buffers;
6106 begin
6107   glDrawBuffersEXT                                         := dglGetProcAddress('glDrawBuffersEXT');
6108 end;
6109
6110 procedure Read_GL_EXT_draw_buffers_indexed;
6111 begin
6112   glEnableiEXT                                             := dglGetProcAddress('glEnableiEXT');
6113   glDisableiEXT                                            := dglGetProcAddress('glDisableiEXT');
6114   glBlendEquationiEXT                                      := dglGetProcAddress('glBlendEquationiEXT');
6115   glBlendEquationSeparateiEXT                              := dglGetProcAddress('glBlendEquationSeparateiEXT');
6116   glBlendFunciEXT                                          := dglGetProcAddress('glBlendFunciEXT');
6117   glBlendFuncSeparateiEXT                                  := dglGetProcAddress('glBlendFuncSeparateiEXT');
6118   glColorMaskiEXT                                          := dglGetProcAddress('glColorMaskiEXT');
6119   glIsEnablediEXT                                          := dglGetProcAddress('glIsEnablediEXT');
6120 end;
6121
6122 procedure Read_GL_EXT_draw_elements_base_vertex;
6123 begin
6124   glDrawElementsBaseVertexEXT                              := dglGetProcAddress('glDrawElementsBaseVertexEXT');
6125   glDrawRangeElementsBaseVertexEXT                         := dglGetProcAddress('glDrawRangeElementsBaseVertexEXT');
6126   glDrawElementsInstancedBaseVertexEXT                     := dglGetProcAddress('glDrawElementsInstancedBaseVertexEXT');
6127   glMultiDrawElementsBaseVertexEXT                         := dglGetProcAddress('glMultiDrawElementsBaseVertexEXT');
6128 end;
6129
6130 procedure Read_GL_EXT_draw_instanced;
6131 begin
6132   glDrawArraysInstancedEXT                                 := dglGetProcAddress('glDrawArraysInstancedEXT');
6133   glDrawElementsInstancedEXT                               := dglGetProcAddress('glDrawElementsInstancedEXT');
6134 end;
6135
6136 procedure Read_GL_EXT_geometry_shader;
6137 begin
6138   glFramebufferTextureEXT                                  := dglGetProcAddress('glFramebufferTextureEXT');
6139 end;
6140
6141 procedure Read_GL_EXT_instanced_arrays;
6142 begin
6143   glVertexAttribDivisorEXT                                 := dglGetProcAddress('glVertexAttribDivisorEXT');
6144 end;
6145
6146 procedure Read_GL_EXT_map_buffer_range;
6147 begin
6148   glMapBufferRangeEXT                                      := dglGetProcAddress('glMapBufferRangeEXT');
6149   glFlushMappedBufferRangeEXT                              := dglGetProcAddress('glFlushMappedBufferRangeEXT');
6150 end;
6151
6152 procedure Read_GL_EXT_multi_draw_arrays;
6153 begin
6154   glMultiDrawArraysEXT                                     := dglGetProcAddress('glMultiDrawArraysEXT');
6155   glMultiDrawElementsEXT                                   := dglGetProcAddress('glMultiDrawElementsEXT');
6156 end;
6157
6158 procedure Read_GL_EXT_multi_draw_indirect;
6159 begin
6160   glMultiDrawArraysIndirectEXT                             := dglGetProcAddress('glMultiDrawArraysIndirectEXT');
6161   glMultiDrawElementsIndirectEXT                           := dglGetProcAddress('glMultiDrawElementsIndirectEXT');
6162 end;
6163
6164 procedure Read_GL_EXT_multisampled_render_to_texture;
6165 begin
6166   glRenderbufferStorageMultisampleEXT                      := dglGetProcAddress('glRenderbufferStorageMultisampleEXT');
6167   glFramebufferTexture2DMultisampleEXT                     := dglGetProcAddress('glFramebufferTexture2DMultisampleEXT');
6168 end;
6169
6170 procedure Read_GL_EXT_multiview_draw_buffers;
6171 begin
6172   glReadBufferIndexedEXT                                   := dglGetProcAddress('glReadBufferIndexedEXT');
6173   glDrawBuffersIndexedEXT                                  := dglGetProcAddress('glDrawBuffersIndexedEXT');
6174   glGetIntegeri_vEXT                                       := dglGetProcAddress('glGetIntegeri_vEXT');
6175 end;
6176
6177 procedure Read_GL_EXT_primitive_bounding_box;
6178 begin
6179   glPrimitiveBoundingBoxEXT                                := dglGetProcAddress('glPrimitiveBoundingBoxEXT');
6180 end;
6181
6182 procedure Read_GL_EXT_robustness;
6183 begin
6184   glGetGraphicsResetStatusEXT                              := dglGetProcAddress('glGetGraphicsResetStatusEXT');
6185   glReadnPixelsEXT                                         := dglGetProcAddress('glReadnPixelsEXT');
6186   glGetnUniformfvEXT                                       := dglGetProcAddress('glGetnUniformfvEXT');
6187   glGetnUniformivEXT                                       := dglGetProcAddress('glGetnUniformivEXT');
6188 end;
6189
6190 procedure Read_GL_EXT_separate_shader_objects;
6191 begin
6192   glActiveShaderProgramEXT                                 := dglGetProcAddress('glActiveShaderProgramEXT');
6193   glBindProgramPipelineEXT                                 := dglGetProcAddress('glBindProgramPipelineEXT');
6194   glCreateShaderProgramvEXT                                := dglGetProcAddress('glCreateShaderProgramvEXT');
6195   glDeleteProgramPipelinesEXT                              := dglGetProcAddress('glDeleteProgramPipelinesEXT');
6196   glGenProgramPipelinesEXT                                 := dglGetProcAddress('glGenProgramPipelinesEXT');
6197   glGetProgramPipelineInfoLogEXT                           := dglGetProcAddress('glGetProgramPipelineInfoLogEXT');
6198   glGetProgramPipelineivEXT                                := dglGetProcAddress('glGetProgramPipelineivEXT');
6199   glIsProgramPipelineEXT                                   := dglGetProcAddress('glIsProgramPipelineEXT');
6200   glProgramParameteriEXT                                   := dglGetProcAddress('glProgramParameteriEXT');
6201   glProgramUniform1fEXT                                    := dglGetProcAddress('glProgramUniform1fEXT');
6202   glProgramUniform1fvEXT                                   := dglGetProcAddress('glProgramUniform1fvEXT');
6203   glProgramUniform1iEXT                                    := dglGetProcAddress('glProgramUniform1iEXT');
6204   glProgramUniform1ivEXT                                   := dglGetProcAddress('glProgramUniform1ivEXT');
6205   glProgramUniform2fEXT                                    := dglGetProcAddress('glProgramUniform2fEXT');
6206   glProgramUniform2fvEXT                                   := dglGetProcAddress('glProgramUniform2fvEXT');
6207   glProgramUniform2iEXT                                    := dglGetProcAddress('glProgramUniform2iEXT');
6208   glProgramUniform2ivEXT                                   := dglGetProcAddress('glProgramUniform2ivEXT');
6209   glProgramUniform3fEXT                                    := dglGetProcAddress('glProgramUniform3fEXT');
6210   glProgramUniform3fvEXT                                   := dglGetProcAddress('glProgramUniform3fvEXT');
6211   glProgramUniform3iEXT                                    := dglGetProcAddress('glProgramUniform3iEXT');
6212   glProgramUniform3ivEXT                                   := dglGetProcAddress('glProgramUniform3ivEXT');
6213   glProgramUniform4fEXT                                    := dglGetProcAddress('glProgramUniform4fEXT');
6214   glProgramUniform4fvEXT                                   := dglGetProcAddress('glProgramUniform4fvEXT');
6215   glProgramUniform4iEXT                                    := dglGetProcAddress('glProgramUniform4iEXT');
6216   glProgramUniform4ivEXT                                   := dglGetProcAddress('glProgramUniform4ivEXT');
6217   glProgramUniformMatrix2fvEXT                             := dglGetProcAddress('glProgramUniformMatrix2fvEXT');
6218   glProgramUniformMatrix3fvEXT                             := dglGetProcAddress('glProgramUniformMatrix3fvEXT');
6219   glProgramUniformMatrix4fvEXT                             := dglGetProcAddress('glProgramUniformMatrix4fvEXT');
6220   glUseProgramStagesEXT                                    := dglGetProcAddress('glUseProgramStagesEXT');
6221   glValidateProgramPipelineEXT                             := dglGetProcAddress('glValidateProgramPipelineEXT');
6222   glProgramUniform1uiEXT                                   := dglGetProcAddress('glProgramUniform1uiEXT');
6223   glProgramUniform2uiEXT                                   := dglGetProcAddress('glProgramUniform2uiEXT');
6224   glProgramUniform3uiEXT                                   := dglGetProcAddress('glProgramUniform3uiEXT');
6225   glProgramUniform4uiEXT                                   := dglGetProcAddress('glProgramUniform4uiEXT');
6226   glProgramUniform1uivEXT                                  := dglGetProcAddress('glProgramUniform1uivEXT');
6227   glProgramUniform2uivEXT                                  := dglGetProcAddress('glProgramUniform2uivEXT');
6228   glProgramUniform3uivEXT                                  := dglGetProcAddress('glProgramUniform3uivEXT');
6229   glProgramUniform4uivEXT                                  := dglGetProcAddress('glProgramUniform4uivEXT');
6230   glProgramUniformMatrix2x3fvEXT                           := dglGetProcAddress('glProgramUniformMatrix2x3fvEXT');
6231   glProgramUniformMatrix3x2fvEXT                           := dglGetProcAddress('glProgramUniformMatrix3x2fvEXT');
6232   glProgramUniformMatrix2x4fvEXT                           := dglGetProcAddress('glProgramUniformMatrix2x4fvEXT');
6233   glProgramUniformMatrix4x2fvEXT                           := dglGetProcAddress('glProgramUniformMatrix4x2fvEXT');
6234   glProgramUniformMatrix3x4fvEXT                           := dglGetProcAddress('glProgramUniformMatrix3x4fvEXT');
6235   glProgramUniformMatrix4x3fvEXT                           := dglGetProcAddress('glProgramUniformMatrix4x3fvEXT');
6236 end;
6237
6238 procedure Read_GL_EXT_tessellation_shader;
6239 begin
6240   glPatchParameteriEXT                                     := dglGetProcAddress('glPatchParameteriEXT');
6241 end;
6242
6243 procedure Read_GL_EXT_texture_border_clamp;
6244 begin
6245   glTexParameterIivEXT                                     := dglGetProcAddress('glTexParameterIivEXT');
6246   glTexParameterIuivEXT                                    := dglGetProcAddress('glTexParameterIuivEXT');
6247   glGetTexParameterIivEXT                                  := dglGetProcAddress('glGetTexParameterIivEXT');
6248   glGetTexParameterIuivEXT                                 := dglGetProcAddress('glGetTexParameterIuivEXT');
6249   glSamplerParameterIivEXT                                 := dglGetProcAddress('glSamplerParameterIivEXT');
6250   glSamplerParameterIuivEXT                                := dglGetProcAddress('glSamplerParameterIuivEXT');
6251   glGetSamplerParameterIivEXT                              := dglGetProcAddress('glGetSamplerParameterIivEXT');
6252   glGetSamplerParameterIuivEXT                             := dglGetProcAddress('glGetSamplerParameterIuivEXT');
6253 end;
6254
6255 procedure Read_GL_EXT_texture_buffer;
6256 begin
6257   glTexBufferEXT                                           := dglGetProcAddress('glTexBufferEXT');
6258   glTexBufferRangeEXT                                      := dglGetProcAddress('glTexBufferRangeEXT');
6259 end;
6260
6261 procedure Read_GL_EXT_texture_storage;
6262 begin
6263   glTexStorage1DEXT                                        := dglGetProcAddress('glTexStorage1DEXT');
6264   glTexStorage2DEXT                                        := dglGetProcAddress('glTexStorage2DEXT');
6265   glTexStorage3DEXT                                        := dglGetProcAddress('glTexStorage3DEXT');
6266   glTextureStorage1DEXT                                    := dglGetProcAddress('glTextureStorage1DEXT');
6267   glTextureStorage2DEXT                                    := dglGetProcAddress('glTextureStorage2DEXT');
6268   glTextureStorage3DEXT                                    := dglGetProcAddress('glTextureStorage3DEXT');
6269 end;
6270
6271 procedure Read_GL_EXT_texture_view;
6272 begin
6273   glTextureViewEXT                                         := dglGetProcAddress('glTextureViewEXT');
6274 end;
6275
6276 procedure Read_GL_IMG_multisampled_render_to_texture;
6277 begin
6278   glRenderbufferStorageMultisampleIMG                      := dglGetProcAddress('glRenderbufferStorageMultisampleIMG');
6279   glFramebufferTexture2DMultisampleIMG                     := dglGetProcAddress('glFramebufferTexture2DMultisampleIMG');
6280 end;
6281
6282 procedure Read_GL_INTEL_performance_query;
6283 begin
6284   glBeginPerfQueryINTEL                                    := dglGetProcAddress('glBeginPerfQueryINTEL');
6285   glCreatePerfQueryINTEL                                   := dglGetProcAddress('glCreatePerfQueryINTEL');
6286   glDeletePerfQueryINTEL                                   := dglGetProcAddress('glDeletePerfQueryINTEL');
6287   glEndPerfQueryINTEL                                      := dglGetProcAddress('glEndPerfQueryINTEL');
6288   glGetFirstPerfQueryIdINTEL                               := dglGetProcAddress('glGetFirstPerfQueryIdINTEL');
6289   glGetNextPerfQueryIdINTEL                                := dglGetProcAddress('glGetNextPerfQueryIdINTEL');
6290   glGetPerfCounterInfoINTEL                                := dglGetProcAddress('glGetPerfCounterInfoINTEL');
6291   glGetPerfQueryDataINTEL                                  := dglGetProcAddress('glGetPerfQueryDataINTEL');
6292   glGetPerfQueryIdByNameINTEL                              := dglGetProcAddress('glGetPerfQueryIdByNameINTEL');
6293   glGetPerfQueryInfoINTEL                                  := dglGetProcAddress('glGetPerfQueryInfoINTEL');
6294 end;
6295
6296 procedure Read_GL_NV_bindless_texture;
6297 begin
6298   glGetTextureHandleNV                                     := dglGetProcAddress('glGetTextureHandleNV');
6299   glGetTextureSamplerHandleNV                              := dglGetProcAddress('glGetTextureSamplerHandleNV');
6300   glMakeTextureHandleResidentNV                            := dglGetProcAddress('glMakeTextureHandleResidentNV');
6301   glMakeTextureHandleNonResidentNV                         := dglGetProcAddress('glMakeTextureHandleNonResidentNV');
6302   glGetImageHandleNV                                       := dglGetProcAddress('glGetImageHandleNV');
6303   glMakeImageHandleResidentNV                              := dglGetProcAddress('glMakeImageHandleResidentNV');
6304   glMakeImageHandleNonResidentNV                           := dglGetProcAddress('glMakeImageHandleNonResidentNV');
6305   glUniformHandleui64NV                                    := dglGetProcAddress('glUniformHandleui64NV');
6306   glUniformHandleui64vNV                                   := dglGetProcAddress('glUniformHandleui64vNV');
6307   glProgramUniformHandleui64NV                             := dglGetProcAddress('glProgramUniformHandleui64NV');
6308   glProgramUniformHandleui64vNV                            := dglGetProcAddress('glProgramUniformHandleui64vNV');
6309   glIsTextureHandleResidentNV                              := dglGetProcAddress('glIsTextureHandleResidentNV');
6310   glIsImageHandleResidentNV                                := dglGetProcAddress('glIsImageHandleResidentNV');
6311 end;
6312
6313 procedure Read_GL_NV_blend_equation_advanced;
6314 begin
6315   glBlendParameteriNV                                      := dglGetProcAddress('glBlendParameteriNV');
6316   glBlendBarrierNV                                         := dglGetProcAddress('glBlendBarrierNV');
6317 end;
6318
6319 procedure Read_GL_NV_conditional_render;
6320 begin
6321   glBeginConditionalRenderNV                               := dglGetProcAddress('glBeginConditionalRenderNV');
6322   glEndConditionalRenderNV                                 := dglGetProcAddress('glEndConditionalRenderNV');
6323 end;
6324
6325 procedure Read_GL_NV_copy_buffer;
6326 begin
6327   glCopyBufferSubDataNV                                    := dglGetProcAddress('glCopyBufferSubDataNV');
6328 end;
6329
6330 procedure Read_GL_NV_coverage_sample;
6331 begin
6332   glCoverageMaskNV                                         := dglGetProcAddress('glCoverageMaskNV');
6333   glCoverageOperationNV                                    := dglGetProcAddress('glCoverageOperationNV');
6334 end;
6335
6336 procedure Read_GL_NV_draw_buffers;
6337 begin
6338   glDrawBuffersNV                                          := dglGetProcAddress('glDrawBuffersNV');
6339 end;
6340
6341 procedure Read_GL_NV_draw_instanced;
6342 begin
6343   glDrawArraysInstancedNV                                  := dglGetProcAddress('glDrawArraysInstancedNV');
6344   glDrawElementsInstancedNV                                := dglGetProcAddress('glDrawElementsInstancedNV');
6345 end;
6346
6347 procedure Read_GL_NV_fence;
6348 begin
6349   glDeleteFencesNV                                         := dglGetProcAddress('glDeleteFencesNV');
6350   glGenFencesNV                                            := dglGetProcAddress('glGenFencesNV');
6351   glIsFenceNV                                              := dglGetProcAddress('glIsFenceNV');
6352   glTestFenceNV                                            := dglGetProcAddress('glTestFenceNV');
6353   glGetFenceivNV                                           := dglGetProcAddress('glGetFenceivNV');
6354   glFinishFenceNV                                          := dglGetProcAddress('glFinishFenceNV');
6355   glSetFenceNV                                             := dglGetProcAddress('glSetFenceNV');
6356 end;
6357
6358 procedure Read_GL_NV_framebuffer_blit;
6359 begin
6360   glBlitFramebufferNV                                      := dglGetProcAddress('glBlitFramebufferNV');
6361 end;
6362
6363 procedure Read_GL_NV_framebuffer_multisample;
6364 begin
6365   glRenderbufferStorageMultisampleNV                       := dglGetProcAddress('glRenderbufferStorageMultisampleNV');
6366 end;
6367
6368 procedure Read_GL_NV_instanced_arrays;
6369 begin
6370   glVertexAttribDivisorNV                                  := dglGetProcAddress('glVertexAttribDivisorNV');
6371 end;
6372
6373 procedure Read_GL_NV_internalformat_sample_query;
6374 begin
6375   glGetInternalformatSampleivNV                            := dglGetProcAddress('glGetInternalformatSampleivNV');
6376 end;
6377
6378 procedure Read_GL_NV_non_square_matrices;
6379 begin
6380   glUniformMatrix2x3fvNV                                   := dglGetProcAddress('glUniformMatrix2x3fvNV');
6381   glUniformMatrix3x2fvNV                                   := dglGetProcAddress('glUniformMatrix3x2fvNV');
6382   glUniformMatrix2x4fvNV                                   := dglGetProcAddress('glUniformMatrix2x4fvNV');
6383   glUniformMatrix4x2fvNV                                   := dglGetProcAddress('glUniformMatrix4x2fvNV');
6384   glUniformMatrix3x4fvNV                                   := dglGetProcAddress('glUniformMatrix3x4fvNV');
6385   glUniformMatrix4x3fvNV                                   := dglGetProcAddress('glUniformMatrix4x3fvNV');
6386 end;
6387
6388 procedure Read_GL_NV_path_rendering;
6389 begin
6390   glGenPathsNV                                             := dglGetProcAddress('glGenPathsNV');
6391   glDeletePathsNV                                          := dglGetProcAddress('glDeletePathsNV');
6392   glIsPathNV                                               := dglGetProcAddress('glIsPathNV');
6393   glPathCommandsNV                                         := dglGetProcAddress('glPathCommandsNV');
6394   glPathCoordsNV                                           := dglGetProcAddress('glPathCoordsNV');
6395   glPathSubCommandsNV                                      := dglGetProcAddress('glPathSubCommandsNV');
6396   glPathSubCoordsNV                                        := dglGetProcAddress('glPathSubCoordsNV');
6397   glPathStringNV                                           := dglGetProcAddress('glPathStringNV');
6398   glPathGlyphsNV                                           := dglGetProcAddress('glPathGlyphsNV');
6399   glPathGlyphRangeNV                                       := dglGetProcAddress('glPathGlyphRangeNV');
6400   glWeightPathsNV                                          := dglGetProcAddress('glWeightPathsNV');
6401   glCopyPathNV                                             := dglGetProcAddress('glCopyPathNV');
6402   glInterpolatePathsNV                                     := dglGetProcAddress('glInterpolatePathsNV');
6403   glTransformPathNV                                        := dglGetProcAddress('glTransformPathNV');
6404   glPathParameterivNV                                      := dglGetProcAddress('glPathParameterivNV');
6405   glPathParameteriNV                                       := dglGetProcAddress('glPathParameteriNV');
6406   glPathParameterfvNV                                      := dglGetProcAddress('glPathParameterfvNV');
6407   glPathParameterfNV                                       := dglGetProcAddress('glPathParameterfNV');
6408   glPathDashArrayNV                                        := dglGetProcAddress('glPathDashArrayNV');
6409   glPathStencilFuncNV                                      := dglGetProcAddress('glPathStencilFuncNV');
6410   glPathStencilDepthOffsetNV                               := dglGetProcAddress('glPathStencilDepthOffsetNV');
6411   glStencilFillPathNV                                      := dglGetProcAddress('glStencilFillPathNV');
6412   glStencilStrokePathNV                                    := dglGetProcAddress('glStencilStrokePathNV');
6413   glStencilFillPathInstancedNV                             := dglGetProcAddress('glStencilFillPathInstancedNV');
6414   glStencilStrokePathInstancedNV                           := dglGetProcAddress('glStencilStrokePathInstancedNV');
6415   glPathCoverDepthFuncNV                                   := dglGetProcAddress('glPathCoverDepthFuncNV');
6416   glCoverFillPathNV                                        := dglGetProcAddress('glCoverFillPathNV');
6417   glCoverStrokePathNV                                      := dglGetProcAddress('glCoverStrokePathNV');
6418   glCoverFillPathInstancedNV                               := dglGetProcAddress('glCoverFillPathInstancedNV');
6419   glCoverStrokePathInstancedNV                             := dglGetProcAddress('glCoverStrokePathInstancedNV');
6420   glGetPathParameterivNV                                   := dglGetProcAddress('glGetPathParameterivNV');
6421   glGetPathParameterfvNV                                   := dglGetProcAddress('glGetPathParameterfvNV');
6422   glGetPathCommandsNV                                      := dglGetProcAddress('glGetPathCommandsNV');
6423   glGetPathCoordsNV                                        := dglGetProcAddress('glGetPathCoordsNV');
6424   glGetPathDashArrayNV                                     := dglGetProcAddress('glGetPathDashArrayNV');
6425   glGetPathMetricsNV                                       := dglGetProcAddress('glGetPathMetricsNV');
6426   glGetPathMetricRangeNV                                   := dglGetProcAddress('glGetPathMetricRangeNV');
6427   glGetPathSpacingNV                                       := dglGetProcAddress('glGetPathSpacingNV');
6428   glIsPointInFillPathNV                                    := dglGetProcAddress('glIsPointInFillPathNV');
6429   glIsPointInStrokePathNV                                  := dglGetProcAddress('glIsPointInStrokePathNV');
6430   glGetPathLengthNV                                        := dglGetProcAddress('glGetPathLengthNV');
6431   glPointAlongPathNV                                       := dglGetProcAddress('glPointAlongPathNV');
6432   glMatrixLoad3x2fNV                                       := dglGetProcAddress('glMatrixLoad3x2fNV');
6433   glMatrixLoad3x3fNV                                       := dglGetProcAddress('glMatrixLoad3x3fNV');
6434   glMatrixLoadTranspose3x3fNV                              := dglGetProcAddress('glMatrixLoadTranspose3x3fNV');
6435   glMatrixMult3x2fNV                                       := dglGetProcAddress('glMatrixMult3x2fNV');
6436   glMatrixMult3x3fNV                                       := dglGetProcAddress('glMatrixMult3x3fNV');
6437   glMatrixMultTranspose3x3fNV                              := dglGetProcAddress('glMatrixMultTranspose3x3fNV');
6438   glStencilThenCoverFillPathNV                             := dglGetProcAddress('glStencilThenCoverFillPathNV');
6439   glStencilThenCoverStrokePathNV                           := dglGetProcAddress('glStencilThenCoverStrokePathNV');
6440   glStencilThenCoverFillPathInstancedNV                    := dglGetProcAddress('glStencilThenCoverFillPathInstancedNV');
6441   glStencilThenCoverStrokePathInstancedNV                  := dglGetProcAddress('glStencilThenCoverStrokePathInstancedNV');
6442   glPathGlyphIndexRangeNV                                  := dglGetProcAddress('glPathGlyphIndexRangeNV');
6443   glPathGlyphIndexArrayNV                                  := dglGetProcAddress('glPathGlyphIndexArrayNV');
6444   glPathMemoryGlyphIndexArrayNV                            := dglGetProcAddress('glPathMemoryGlyphIndexArrayNV');
6445   glProgramPathFragmentInputGenNV                          := dglGetProcAddress('glProgramPathFragmentInputGenNV');
6446   glGetProgramResourcefvNV                                 := dglGetProcAddress('glGetProgramResourcefvNV');
6447 end;
6448
6449 procedure Read_GL_NV_read_buffer;
6450 begin
6451   glReadBufferNV                                           := dglGetProcAddress('glReadBufferNV');
6452 end;
6453
6454 procedure Read_GL_NV_viewport_array;
6455 begin
6456   glViewportArrayvNV                                       := dglGetProcAddress('glViewportArrayvNV');
6457   glViewportIndexedfNV                                     := dglGetProcAddress('glViewportIndexedfNV');
6458   glViewportIndexedfvNV                                    := dglGetProcAddress('glViewportIndexedfvNV');
6459   glScissorArrayvNV                                        := dglGetProcAddress('glScissorArrayvNV');
6460   glScissorIndexedNV                                       := dglGetProcAddress('glScissorIndexedNV');
6461   glScissorIndexedvNV                                      := dglGetProcAddress('glScissorIndexedvNV');
6462   glDepthRangeArrayfvNV                                    := dglGetProcAddress('glDepthRangeArrayfvNV');
6463   glDepthRangeIndexedfNV                                   := dglGetProcAddress('glDepthRangeIndexedfNV');
6464   glGetFloati_vNV                                          := dglGetProcAddress('glGetFloati_vNV');
6465   glEnableiNV                                              := dglGetProcAddress('glEnableiNV');
6466   glDisableiNV                                             := dglGetProcAddress('glDisableiNV');
6467   glIsEnablediNV                                           := dglGetProcAddress('glIsEnablediNV');
6468 end;
6469
6470 procedure Read_GL_QCOM_alpha_test;
6471 begin
6472   glAlphaFuncQCOM                                          := dglGetProcAddress('glAlphaFuncQCOM');
6473 end;
6474
6475 procedure Read_GL_QCOM_driver_control;
6476 begin
6477   glGetDriverControlsQCOM                                  := dglGetProcAddress('glGetDriverControlsQCOM');
6478   glGetDriverControlStringQCOM                             := dglGetProcAddress('glGetDriverControlStringQCOM');
6479   glEnableDriverControlQCOM                                := dglGetProcAddress('glEnableDriverControlQCOM');
6480   glDisableDriverControlQCOM                               := dglGetProcAddress('glDisableDriverControlQCOM');
6481 end;
6482
6483 procedure Read_GL_QCOM_extended_get;
6484 begin
6485   glExtGetTexturesQCOM                                     := dglGetProcAddress('glExtGetTexturesQCOM');
6486   glExtGetBuffersQCOM                                      := dglGetProcAddress('glExtGetBuffersQCOM');
6487   glExtGetRenderbuffersQCOM                                := dglGetProcAddress('glExtGetRenderbuffersQCOM');
6488   glExtGetFramebuffersQCOM                                 := dglGetProcAddress('glExtGetFramebuffersQCOM');
6489   glExtGetTexLevelParameterivQCOM                          := dglGetProcAddress('glExtGetTexLevelParameterivQCOM');
6490   glExtTexObjectStateOverrideiQCOM                         := dglGetProcAddress('glExtTexObjectStateOverrideiQCOM');
6491   glExtGetTexSubImageQCOM                                  := dglGetProcAddress('glExtGetTexSubImageQCOM');
6492   glExtGetBufferPointervQCOM                               := dglGetProcAddress('glExtGetBufferPointervQCOM');
6493 end;
6494
6495 procedure Read_GL_QCOM_extended_get2;
6496 begin
6497   glExtGetShadersQCOM                                      := dglGetProcAddress('glExtGetShadersQCOM');
6498   glExtGetProgramsQCOM                                     := dglGetProcAddress('glExtGetProgramsQCOM');
6499   glExtIsProgramBinaryQCOM                                 := dglGetProcAddress('glExtIsProgramBinaryQCOM');
6500   glExtGetProgramBinarySourceQCOM                          := dglGetProcAddress('glExtGetProgramBinarySourceQCOM');
6501 end;
6502
6503 procedure Read_GL_QCOM_tiled_rendering;
6504 begin
6505   glStartTilingQCOM                                        := dglGetProcAddress('glStartTilingQCOM');
6506   glEndTilingQCOM                                          := dglGetProcAddress('glEndTilingQCOM');
6507 end;
6508 {$ENDIF}
6509
6510 constructor EeglError.Create(const msg: string; const aErrorCode: EGLint);
6511 begin
6512   inherited Create(msg);
6513   ErrorCode := aErrorCode;
6514 end;
6515
6516 end.