* implemented functions to create, destroy, active and deactivate a rendering context
[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 unit dglOpenGLES;
39
40 interface
41
42 {$IFDEF FPC}
43   {$MODE Delphi}
44 {$ENDIF}
45
46 // detecting Linux
47 {$IFDEF linux}          // Linux
48   {$DEFINE DGL_LINUX}
49 {$ENDIF}
50
51 //check if system is supported and set system dependent constants
52 uses
53   sysutils
54   {$IFDEF DGL_LINUX}
55   , dl
56   {$ENDIF}
57   ;
58
59 {$IFDEF DGL_LINUX}
60 const
61   LIBNAME_OPENGLES = 'libGLESv2.so';
62   LIBNAME_EGL      = 'libEGL.so';
63
64 {$ELSE}
65   {$ERROR 'unknown/unsupported system'}
66
67 {$ENDIF}
68
69 { ================================================== OpenGL Es ======================================================= }
70 type
71   { OpenGL ES 2.0 }
72   GLbyte      = Byte;
73   GLclampf    = Single;
74   GLfixed     = Integer;
75   GLshort     = ShortInt;
76   GLushort    = Word;
77   GLvoid      = Pointer;
78   GLint64     = Int64;
79   GLuint64    = UInt64;
80   GLenum      = Cardinal;
81   GLuint      = Cardinal;
82   GLchar      = AnsiChar;
83   GLbitfield  = Cardinal;
84   GLint       = Integer;
85   GLboolean   = ByteBool;
86   GLsizei     = Integer;
87   GLfloat     = Single;
88
89   PGLbyte     = ^GLbyte;
90   PGLclampf   = ^GLclampf;
91   PGLfixed    = ^GLfixed;
92   PGLshort    = ^GLshort;
93   PGLushort   = ^GLushort;
94   PGLvoid     = Pointer;
95   PPGLvoid    = ^PGLvoid;
96   PGLint64    = ^GLint64;
97   PGLuint64   = ^GLuint64;
98   PGLenum     = ^GLenum;
99   PGLuint     = ^GLuint;
100   PGLchar     = ^GLchar;
101   PPGLchar    = ^PGLChar;
102   PGLbitfield = ^GLbitfield;
103   PGLint      = ^GLint;
104   PGLboolean  = ^GLboolean;
105   PGLsizei    = ^GLsizei;
106   PGLfloat    = ^GLfloat;
107
108   { OpenGL ES 3.0 }
109   GLsync = Pointer;
110
111
112 const
113   { OpenGL ES 2.0 }
114   GL_DEPTH_BUFFER_BIT                               = $00000100;
115   GL_STENCIL_BUFFER_BIT                             = $00000400;
116   GL_COLOR_BUFFER_BIT                               = $00004000;
117   GL_FALSE                                          = $0000;
118   GL_TRUE                                           = $0001;
119   GL_POINTS                                         = $0000;
120   GL_LINES                                          = $0001;
121   GL_LINE_LOOP                                      = $0002;
122   GL_LINE_STRIP                                     = $0003;
123   GL_TRIANGLES                                      = $0004;
124   GL_TRIANGLE_STRIP                                 = $0005;
125   GL_TRIANGLE_FAN                                   = $0006;
126   GL_ZERO                                           = $0000;
127   GL_ONE                                            = $0001;
128   GL_SRC_COLOR                                      = $0300;
129   GL_ONE_MINUS_SRC_COLOR                            = $0301;
130   GL_SRC_ALPHA                                      = $0302;
131   GL_ONE_MINUS_SRC_ALPHA                            = $0303;
132   GL_DST_ALPHA                                      = $0304;
133   GL_ONE_MINUS_DST_ALPHA                            = $0305;
134   GL_DST_COLOR                                      = $0306;
135   GL_ONE_MINUS_DST_COLOR                            = $0307;
136   GL_SRC_ALPHA_SATURATE                             = $0308;
137   GL_FUNC_ADD                                       = $8006;
138   GL_BLEND_EQUATION                                 = $8009;
139   GL_BLEND_EQUATION_RGB                             = $8009;
140   GL_BLEND_EQUATION_ALPHA                           = $883D;
141   GL_FUNC_SUBTRACT                                  = $800A;
142   GL_FUNC_REVERSE_SUBTRACT                          = $800B;
143   GL_BLEND_DST_RGB                                  = $80C8;
144   GL_BLEND_SRC_RGB                                  = $80C9;
145   GL_BLEND_DST_ALPHA                                = $80CA;
146   GL_BLEND_SRC_ALPHA                                = $80CB;
147   GL_CONSTANT_COLOR                                 = $8001;
148   GL_ONE_MINUS_CONSTANT_COLOR                       = $8002;
149   GL_CONSTANT_ALPHA                                 = $8003;
150   GL_ONE_MINUS_CONSTANT_ALPHA                       = $8004;
151   GL_BLEND_COLOR                                    = $8005;
152   GL_ARRAY_BUFFER                                   = $8892;
153   GL_ELEMENT_ARRAY_BUFFER                           = $8893;
154   GL_ARRAY_BUFFER_BINDING                           = $8894;
155   GL_ELEMENT_ARRAY_BUFFER_BINDING                   = $8895;
156   GL_STREAM_DRAW                                    = $88E0;
157   GL_STATIC_DRAW                                    = $88E4;
158   GL_DYNAMIC_DRAW                                   = $88E8;
159   GL_BUFFER_SIZE                                    = $8764;
160   GL_BUFFER_USAGE                                   = $8765;
161   GL_CURRENT_VERTEX_ATTRIB                          = $8626;
162   GL_FRONT                                          = $0404;
163   GL_BACK                                           = $0405;
164   GL_FRONT_AND_BACK                                 = $0408;
165   GL_TEXTURE_2D                                     = $0DE1;
166   GL_CULL_FACE                                      = $0B44;
167   GL_BLEND                                          = $0BE2;
168   GL_DITHER                                         = $0BD0;
169   GL_STENCIL_TEST                                   = $0B90;
170   GL_DEPTH_TEST                                     = $0B71;
171   GL_SCISSOR_TEST                                   = $0C11;
172   GL_POLYGON_OFFSET_FILL                            = $8037;
173   GL_SAMPLE_ALPHA_TO_COVERAGE                       = $809E;
174   GL_SAMPLE_COVERAGE                                = $80A0;
175   GL_NO_ERROR                                       = $0000;
176   GL_INVALID_ENUM                                   = $0500;
177   GL_INVALID_VALUE                                  = $0501;
178   GL_INVALID_OPERATION                              = $0502;
179   GL_OUT_OF_MEMORY                                  = $0505;
180   GL_CW                                             = $0900;
181   GL_CCW                                            = $0901;
182   GL_LINE_WIDTH                                     = $0B21;
183   GL_ALIASED_POINT_SIZE_RANGE                       = $846D;
184   GL_ALIASED_LINE_WIDTH_RANGE                       = $846E;
185   GL_CULL_FACE_MODE                                 = $0B45;
186   GL_FRONT_FACE                                     = $0B46;
187   GL_DEPTH_RANGE                                    = $0B70;
188   GL_DEPTH_WRITEMASK                                = $0B72;
189   GL_DEPTH_CLEAR_VALUE                              = $0B73;
190   GL_DEPTH_FUNC                                     = $0B74;
191   GL_STENCIL_CLEAR_VALUE                            = $0B91;
192   GL_STENCIL_FUNC                                   = $0B92;
193   GL_STENCIL_FAIL                                   = $0B94;
194   GL_STENCIL_PASS_DEPTH_FAIL                        = $0B95;
195   GL_STENCIL_PASS_DEPTH_PASS                        = $0B96;
196   GL_STENCIL_REF                                    = $0B97;
197   GL_STENCIL_VALUE_MASK                             = $0B93;
198   GL_STENCIL_WRITEMASK                              = $0B98;
199   GL_STENCIL_BACK_FUNC                              = $8800;
200   GL_STENCIL_BACK_FAIL                              = $8801;
201   GL_STENCIL_BACK_PASS_DEPTH_FAIL                   = $8802;
202   GL_STENCIL_BACK_PASS_DEPTH_PASS                   = $8803;
203   GL_STENCIL_BACK_REF                               = $8CA3;
204   GL_STENCIL_BACK_VALUE_MASK                        = $8CA4;
205   GL_STENCIL_BACK_WRITEMASK                         = $8CA5;
206   GL_VIEWPORT                                       = $0BA2;
207   GL_SCISSOR_BOX                                    = $0C10;
208   GL_COLOR_CLEAR_VALUE                              = $0C22;
209   GL_COLOR_WRITEMASK                                = $0C23;
210   GL_UNPACK_ALIGNMENT                               = $0CF5;
211   GL_PACK_ALIGNMENT                                 = $0D05;
212   GL_MAX_TEXTURE_SIZE                               = $0D33;
213   GL_MAX_VIEWPORT_DIMS                              = $0D3A;
214   GL_SUBPIXEL_BITS                                  = $0D50;
215   GL_RED_BITS                                       = $0D52;
216   GL_GREEN_BITS                                     = $0D53;
217   GL_BLUE_BITS                                      = $0D54;
218   GL_ALPHA_BITS                                     = $0D55;
219   GL_DEPTH_BITS                                     = $0D56;
220   GL_STENCIL_BITS                                   = $0D57;
221   GL_POLYGON_OFFSET_UNITS                           = $2A00;
222   GL_POLYGON_OFFSET_FACTOR                          = $8038;
223   GL_TEXTURE_BINDING_2D                             = $8069;
224   GL_SAMPLE_BUFFERS                                 = $80A8;
225   GL_SAMPLES                                        = $80A9;
226   GL_SAMPLE_COVERAGE_VALUE                          = $80AA;
227   GL_SAMPLE_COVERAGE_INVERT                         = $80AB;
228   GL_NUM_COMPRESSED_TEXTURE_FORMATS                 = $86A2;
229   GL_COMPRESSED_TEXTURE_FORMATS                     = $86A3;
230   GL_DONT_CARE                                      = $1100;
231   GL_FASTEST                                        = $1101;
232   GL_NICEST                                         = $1102;
233   GL_GENERATE_MIPMAP_HINT                           = $8192;
234   GL_BYTE                                           = $1400;
235   GL_UNSIGNED_BYTE                                  = $1401;
236   GL_SHORT                                          = $1402;
237   GL_UNSIGNED_SHORT                                 = $1403;
238   GL_INT                                            = $1404;
239   GL_UNSIGNED_INT                                   = $1405;
240   GL_FLOAT                                          = $1406;
241   GL_FIXED                                          = $140C;
242   GL_DEPTH_COMPONENT                                = $1902;
243   GL_ALPHA                                          = $1906;
244   GL_RGB                                            = $1907;
245   GL_RGBA                                           = $1908;
246   GL_LUMINANCE                                      = $1909;
247   GL_LUMINANCE_ALPHA                                = $190A;
248   GL_UNSIGNED_SHORT_4_4_4_4                         = $8033;
249   GL_UNSIGNED_SHORT_5_5_5_1                         = $8034;
250   GL_UNSIGNED_SHORT_5_6_5                           = $8363;
251   GL_FRAGMENT_SHADER                                = $8B30;
252   GL_VERTEX_SHADER                                  = $8B31;
253   GL_MAX_VERTEX_ATTRIBS                             = $8869;
254   GL_MAX_VERTEX_UNIFORM_VECTORS                     = $8DFB;
255   GL_MAX_VARYING_VECTORS                            = $8DFC;
256   GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS               = $8B4D;
257   GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS                 = $8B4C;
258   GL_MAX_TEXTURE_IMAGE_UNITS                        = $8872;
259   GL_MAX_FRAGMENT_UNIFORM_VECTORS                   = $8DFD;
260   GL_SHADER_TYPE                                    = $8B4F;
261   GL_DELETE_STATUS                                  = $8B80;
262   GL_LINK_STATUS                                    = $8B82;
263   GL_VALIDATE_STATUS                                = $8B83;
264   GL_ATTACHED_SHADERS                               = $8B85;
265   GL_ACTIVE_UNIFORMS                                = $8B86;
266   GL_ACTIVE_UNIFORM_MAX_LENGTH                      = $8B87;
267   GL_ACTIVE_ATTRIBUTES                              = $8B89;
268   GL_ACTIVE_ATTRIBUTE_MAX_LENGTH                    = $8B8A;
269   GL_SHADING_LANGUAGE_VERSION                       = $8B8C;
270   GL_CURRENT_PROGRAM                                = $8B8D;
271   GL_NEVER                                          = $0200;
272   GL_LESS                                           = $0201;
273   GL_EQUAL                                          = $0202;
274   GL_LEQUAL                                         = $0203;
275   GL_GREATER                                        = $0204;
276   GL_NOTEQUAL                                       = $0205;
277   GL_GEQUAL                                         = $0206;
278   GL_ALWAYS                                         = $0207;
279   GL_KEEP                                           = $1E00;
280   GL_REPLACE                                        = $1E01;
281   GL_INCR                                           = $1E02;
282   GL_DECR                                           = $1E03;
283   GL_INVERT                                         = $150A;
284   GL_INCR_WRAP                                      = $8507;
285   GL_DECR_WRAP                                      = $8508;
286   GL_VENDOR                                         = $1F00;
287   GL_RENDERER                                       = $1F01;
288   GL_VERSION                                        = $1F02;
289   GL_EXTENSIONS                                     = $1F03;
290   GL_NEAREST                                        = $2600;
291   GL_LINEAR                                         = $2601;
292   GL_NEAREST_MIPMAP_NEAREST                         = $2700;
293   GL_LINEAR_MIPMAP_NEAREST                          = $2701;
294   GL_NEAREST_MIPMAP_LINEAR                          = $2702;
295   GL_LINEAR_MIPMAP_LINEAR                           = $2703;
296   GL_TEXTURE_MAG_FILTER                             = $2800;
297   GL_TEXTURE_MIN_FILTER                             = $2801;
298   GL_TEXTURE_WRAP_S                                 = $2802;
299   GL_TEXTURE_WRAP_T                                 = $2803;
300   GL_TEXTURE                                        = $1702;
301   GL_TEXTURE_CUBE_MAP                               = $8513;
302   GL_TEXTURE_BINDING_CUBE_MAP                       = $8514;
303   GL_TEXTURE_CUBE_MAP_POSITIVE_X                    = $8515;
304   GL_TEXTURE_CUBE_MAP_NEGATIVE_X                    = $8516;
305   GL_TEXTURE_CUBE_MAP_POSITIVE_Y                    = $8517;
306   GL_TEXTURE_CUBE_MAP_NEGATIVE_Y                    = $8518;
307   GL_TEXTURE_CUBE_MAP_POSITIVE_Z                    = $8519;
308   GL_TEXTURE_CUBE_MAP_NEGATIVE_Z                    = $851A;
309   GL_MAX_CUBE_MAP_TEXTURE_SIZE                      = $851C;
310   GL_TEXTURE0                                       = $84C0;
311   GL_TEXTURE1                                       = $84C1;
312   GL_TEXTURE2                                       = $84C2;
313   GL_TEXTURE3                                       = $84C3;
314   GL_TEXTURE4                                       = $84C4;
315   GL_TEXTURE5                                       = $84C5;
316   GL_TEXTURE6                                       = $84C6;
317   GL_TEXTURE7                                       = $84C7;
318   GL_TEXTURE8                                       = $84C8;
319   GL_TEXTURE9                                       = $84C9;
320   GL_TEXTURE10                                      = $84CA;
321   GL_TEXTURE11                                      = $84CB;
322   GL_TEXTURE12                                      = $84CC;
323   GL_TEXTURE13                                      = $84CD;
324   GL_TEXTURE14                                      = $84CE;
325   GL_TEXTURE15                                      = $84CF;
326   GL_TEXTURE16                                      = $84D0;
327   GL_TEXTURE17                                      = $84D1;
328   GL_TEXTURE18                                      = $84D2;
329   GL_TEXTURE19                                      = $84D3;
330   GL_TEXTURE20                                      = $84D4;
331   GL_TEXTURE21                                      = $84D5;
332   GL_TEXTURE22                                      = $84D6;
333   GL_TEXTURE23                                      = $84D7;
334   GL_TEXTURE24                                      = $84D8;
335   GL_TEXTURE25                                      = $84D9;
336   GL_TEXTURE26                                      = $84DA;
337   GL_TEXTURE27                                      = $84DB;
338   GL_TEXTURE28                                      = $84DC;
339   GL_TEXTURE29                                      = $84DD;
340   GL_TEXTURE30                                      = $84DE;
341   GL_TEXTURE31                                      = $84DF;
342   GL_ACTIVE_TEXTURE                                 = $84E0;
343   GL_REPEAT                                         = $2901;
344   GL_CLAMP_TO_EDGE                                  = $812F;
345   GL_MIRRORED_REPEAT                                = $8370;
346   GL_FLOAT_VEC2                                     = $8B50;
347   GL_FLOAT_VEC3                                     = $8B51;
348   GL_FLOAT_VEC4                                     = $8B52;
349   GL_INT_VEC2                                       = $8B53;
350   GL_INT_VEC3                                       = $8B54;
351   GL_INT_VEC4                                       = $8B55;
352   GL_BOOL                                           = $8B56;
353   GL_BOOL_VEC2                                      = $8B57;
354   GL_BOOL_VEC3                                      = $8B58;
355   GL_BOOL_VEC4                                      = $8B59;
356   GL_FLOAT_MAT2                                     = $8B5A;
357   GL_FLOAT_MAT3                                     = $8B5B;
358   GL_FLOAT_MAT4                                     = $8B5C;
359   GL_SAMPLER_2D                                     = $8B5E;
360   GL_SAMPLER_CUBE                                   = $8B60;
361   GL_VERTEX_ATTRIB_ARRAY_ENABLED                    = $8622;
362   GL_VERTEX_ATTRIB_ARRAY_SIZE                       = $8623;
363   GL_VERTEX_ATTRIB_ARRAY_STRIDE                     = $8624;
364   GL_VERTEX_ATTRIB_ARRAY_TYPE                       = $8625;
365   GL_VERTEX_ATTRIB_ARRAY_NORMALIZED                 = $886A;
366   GL_VERTEX_ATTRIB_ARRAY_POINTER                    = $8645;
367   GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING             = $889F;
368   GL_IMPLEMENTATION_COLOR_READ_TYPE                 = $8B9A;
369   GL_IMPLEMENTATION_COLOR_READ_FORMAT               = $8B9B;
370   GL_COMPILE_STATUS                                 = $8B81;
371   GL_INFO_LOG_LENGTH                                = $8B84;
372   GL_SHADER_SOURCE_LENGTH                           = $8B88;
373   GL_SHADER_COMPILER                                = $8DFA;
374   GL_SHADER_BINARY_FORMATS                          = $8DF8;
375   GL_NUM_SHADER_BINARY_FORMATS                      = $8DF9;
376   GL_LOW_FLOAT                                      = $8DF0;
377   GL_MEDIUM_FLOAT                                   = $8DF1;
378   GL_HIGH_FLOAT                                     = $8DF2;
379   GL_LOW_INT                                        = $8DF3;
380   GL_MEDIUM_INT                                     = $8DF4;
381   GL_HIGH_INT                                       = $8DF5;
382   GL_FRAMEBUFFER                                    = $8D40;
383   GL_RENDERBUFFER                                   = $8D41;
384   GL_RGBA4                                          = $8056;
385   GL_RGB5_A1                                        = $8057;
386   GL_RGB565                                         = $8D62;
387   GL_DEPTH_COMPONENT16                              = $81A5;
388   GL_STENCIL_INDEX8                                 = $8D48;
389   GL_RENDERBUFFER_WIDTH                             = $8D42;
390   GL_RENDERBUFFER_HEIGHT                            = $8D43;
391   GL_RENDERBUFFER_INTERNAL_FORMAT                   = $8D44;
392   GL_RENDERBUFFER_RED_SIZE                          = $8D50;
393   GL_RENDERBUFFER_GREEN_SIZE                        = $8D51;
394   GL_RENDERBUFFER_BLUE_SIZE                         = $8D52;
395   GL_RENDERBUFFER_ALPHA_SIZE                        = $8D53;
396   GL_RENDERBUFFER_DEPTH_SIZE                        = $8D54;
397   GL_RENDERBUFFER_STENCIL_SIZE                      = $8D55;
398   GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE             = $8CD0;
399   GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME             = $8CD1;
400   GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL           = $8CD2;
401   GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE   = $8CD3;
402   GL_COLOR_ATTACHMENT0                              = $8CE0;
403   GL_DEPTH_ATTACHMENT                               = $8D00;
404   GL_STENCIL_ATTACHMENT                             = $8D20;
405   GL_NONE                                           = $0000;
406   GL_FRAMEBUFFER_COMPLETE                           = $8CD5;
407   GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT              = $8CD6;
408   GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT      = $8CD7;
409   GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS              = $8CD9;
410   GL_FRAMEBUFFER_UNSUPPORTED                        = $8CDD;
411   GL_FRAMEBUFFER_BINDING                            = $8CA6;
412   GL_RENDERBUFFER_BINDING                           = $8CA7;
413   GL_MAX_RENDERBUFFER_SIZE                          = $84E8;
414   GL_INVALID_FRAMEBUFFER_OPERATION                  = $0506;
415
416   { OpenGL ES 3.0 }
417   GL_READ_BUFFER                                    = $0C02;
418   GL_UNPACK_ROW_LENGTH                              = $0CF2;
419   GL_UNPACK_SKIP_ROWS                               = $0CF3;
420   GL_UNPACK_SKIP_PIXELS                             = $0CF4;
421   GL_PACK_ROW_LENGTH                                = $0D02;
422   GL_PACK_SKIP_ROWS                                 = $0D03;
423   GL_PACK_SKIP_PIXELS                               = $0D04;
424   GL_COLOR                                          = $1800;
425   GL_DEPTH                                          = $1801;
426   GL_STENCIL                                        = $1802;
427   GL_RED                                            = $1903;
428   GL_RGB8                                           = $8051;
429   GL_RGBA8                                          = $8058;
430   GL_RGB10_A2                                       = $8059;
431   GL_TEXTURE_BINDING_3D                             = $806A;
432   GL_UNPACK_SKIP_IMAGES                             = $806D;
433   GL_UNPACK_IMAGE_HEIGHT                            = $806E;
434   GL_TEXTURE_3D                                     = $806F;
435   GL_TEXTURE_WRAP_R                                 = $8072;
436   GL_MAX_3D_TEXTURE_SIZE                            = $8073;
437   GL_UNSIGNED_INT_2_10_10_10_REV                    = $8368;
438   GL_MAX_ELEMENTS_VERTICES                          = $80E8;
439   GL_MAX_ELEMENTS_INDICES                           = $80E9;
440   GL_TEXTURE_MIN_LOD                                = $813A;
441   GL_TEXTURE_MAX_LOD                                = $813B;
442   GL_TEXTURE_BASE_LEVEL                             = $813C;
443   GL_TEXTURE_MAX_LEVEL                              = $813D;
444   GL_MIN                                            = $8007;
445   GL_MAX                                            = $8008;
446   GL_DEPTH_COMPONENT24                              = $81A6;
447   GL_MAX_TEXTURE_LOD_BIAS                           = $84FD;
448   GL_TEXTURE_COMPARE_MODE                           = $884C;
449   GL_TEXTURE_COMPARE_FUNC                           = $884D;
450   GL_CURRENT_QUERY                                  = $8865;
451   GL_QUERY_RESULT                                   = $8866;
452   GL_QUERY_RESULT_AVAILABLE                         = $8867;
453   GL_BUFFER_MAPPED                                  = $88BC;
454   GL_BUFFER_MAP_POINTER                             = $88BD;
455   GL_STREAM_READ                                    = $88E1;
456   GL_STREAM_COPY                                    = $88E2;
457   GL_STATIC_READ                                    = $88E5;
458   GL_STATIC_COPY                                    = $88E6;
459   GL_DYNAMIC_READ                                   = $88E9;
460   GL_DYNAMIC_COPY                                   = $88EA;
461   GL_MAX_DRAW_BUFFERS                               = $8824;
462   GL_DRAW_BUFFER0                                   = $8825;
463   GL_DRAW_BUFFER1                                   = $8826;
464   GL_DRAW_BUFFER2                                   = $8827;
465   GL_DRAW_BUFFER3                                   = $8828;
466   GL_DRAW_BUFFER4                                   = $8829;
467   GL_DRAW_BUFFER5                                   = $882A;
468   GL_DRAW_BUFFER6                                   = $882B;
469   GL_DRAW_BUFFER7                                   = $882C;
470   GL_DRAW_BUFFER8                                   = $882D;
471   GL_DRAW_BUFFER9                                   = $882E;
472   GL_DRAW_BUFFER10                                  = $882F;
473   GL_DRAW_BUFFER11                                  = $8830;
474   GL_DRAW_BUFFER12                                  = $8831;
475   GL_DRAW_BUFFER13                                  = $8832;
476   GL_DRAW_BUFFER14                                  = $8833;
477   GL_DRAW_BUFFER15                                  = $8834;
478   GL_MAX_FRAGMENT_UNIFORM_COMPONENTS                = $8B49;
479   GL_MAX_VERTEX_UNIFORM_COMPONENTS                  = $8B4A;
480   GL_SAMPLER_3D                                     = $8B5F;
481   GL_SAMPLER_2D_SHADOW                              = $8B62;
482   GL_FRAGMENT_SHADER_DERIVATIVE_HINT                = $8B8B;
483   GL_PIXEL_PACK_BUFFER                              = $88EB;
484   GL_PIXEL_UNPACK_BUFFER                            = $88EC;
485   GL_PIXEL_PACK_BUFFER_BINDING                      = $88ED;
486   GL_PIXEL_UNPACK_BUFFER_BINDING                    = $88EF;
487   GL_FLOAT_MAT2x3                                   = $8B65;
488   GL_FLOAT_MAT2x4                                   = $8B66;
489   GL_FLOAT_MAT3x2                                   = $8B67;
490   GL_FLOAT_MAT3x4                                   = $8B68;
491   GL_FLOAT_MAT4x2                                   = $8B69;
492   GL_FLOAT_MAT4x3                                   = $8B6A;
493   GL_SRGB                                           = $8C40;
494   GL_SRGB8                                          = $8C41;
495   GL_SRGB8_ALPHA8                                   = $8C43;
496   GL_COMPARE_REF_TO_TEXTURE                         = $884E;
497   GL_MAJOR_VERSION                                  = $821B;
498   GL_MINOR_VERSION                                  = $821C;
499   GL_NUM_EXTENSIONS                                 = $821D;
500   GL_RGBA32F                                        = $8814;
501   GL_RGB32F                                         = $8815;
502   GL_RGBA16F                                        = $881A;
503   GL_RGB16F                                         = $881B;
504   GL_VERTEX_ATTRIB_ARRAY_INTEGER                    = $88FD;
505   GL_MAX_ARRAY_TEXTURE_LAYERS                       = $88FF;
506   GL_MIN_PROGRAM_TEXEL_OFFSET                       = $8904;
507   GL_MAX_PROGRAM_TEXEL_OFFSET                       = $8905;
508   GL_MAX_VARYING_COMPONENTS                         = $8B4B;
509   GL_TEXTURE_2D_ARRAY                               = $8C1A;
510   GL_TEXTURE_BINDING_2D_ARRAY                       = $8C1D;
511   GL_R11F_G11F_B10F                                 = $8C3A;
512   GL_UNSIGNED_INT_10F_11F_11F_REV                   = $8C3B;
513   GL_RGB9_E5                                        = $8C3D;
514   GL_UNSIGNED_INT_5_9_9_9_REV                       = $8C3E;
515   GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH          = $8C76;
516   GL_TRANSFORM_FEEDBACK_BUFFER_MODE                 = $8C7F;
517   GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS     = $8C80;
518   GL_TRANSFORM_FEEDBACK_VARYINGS                    = $8C83;
519   GL_TRANSFORM_FEEDBACK_BUFFER_START                = $8C84;
520   GL_TRANSFORM_FEEDBACK_BUFFER_SIZE                 = $8C85;
521   GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN          = $8C88;
522   GL_RASTERIZER_DISCARD                             = $8C89;
523   GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS  = $8C8A;
524   GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS        = $8C8B;
525   GL_INTERLEAVED_ATTRIBS                            = $8C8C;
526   GL_SEPARATE_ATTRIBS                               = $8C8D;
527   GL_TRANSFORM_FEEDBACK_BUFFER                      = $8C8E;
528   GL_TRANSFORM_FEEDBACK_BUFFER_BINDING              = $8C8F;
529   GL_RGBA32UI                                       = $8D70;
530   GL_RGB32UI                                        = $8D71;
531   GL_RGBA16UI                                       = $8D76;
532   GL_RGB16UI                                        = $8D77;
533   GL_RGBA8UI                                        = $8D7C;
534   GL_RGB8UI                                         = $8D7D;
535   GL_RGBA32I                                        = $8D82;
536   GL_RGB32I                                         = $8D83;
537   GL_RGBA16I                                        = $8D88;
538   GL_RGB16I                                         = $8D89;
539   GL_RGBA8I                                         = $8D8E;
540   GL_RGB8I                                          = $8D8F;
541   GL_RED_INTEGER                                    = $8D94;
542   GL_RGB_INTEGER                                    = $8D98;
543   GL_RGBA_INTEGER                                   = $8D99;
544   GL_SAMPLER_2D_ARRAY                               = $8DC1;
545   GL_SAMPLER_2D_ARRAY_SHADOW                        = $8DC4;
546   GL_SAMPLER_CUBE_SHADOW                            = $8DC5;
547   GL_UNSIGNED_INT_VEC2                              = $8DC6;
548   GL_UNSIGNED_INT_VEC3                              = $8DC7;
549   GL_UNSIGNED_INT_VEC4                              = $8DC8;
550   GL_INT_SAMPLER_2D                                 = $8DCA;
551   GL_INT_SAMPLER_3D                                 = $8DCB;
552   GL_INT_SAMPLER_CUBE                               = $8DCC;
553   GL_INT_SAMPLER_2D_ARRAY                           = $8DCF;
554   GL_UNSIGNED_INT_SAMPLER_2D                        = $8DD2;
555   GL_UNSIGNED_INT_SAMPLER_3D                        = $8DD3;
556   GL_UNSIGNED_INT_SAMPLER_CUBE                      = $8DD4;
557   GL_UNSIGNED_INT_SAMPLER_2D_ARRAY                  = $8DD7;
558   GL_BUFFER_ACCESS_FLAGS                            = $911F;
559   GL_BUFFER_MAP_LENGTH                              = $9120;
560   GL_BUFFER_MAP_OFFSET                              = $9121;
561   GL_DEPTH_COMPONENT32F                             = $8CAC;
562   GL_DEPTH32F_STENCIL8                              = $8CAD;
563   GL_FLOAT_32_UNSIGNED_INT_24_8_REV                 = $8DAD;
564   GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING          = $8210;
565   GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE          = $8211;
566   GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE                = $8212;
567   GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE              = $8213;
568   GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE               = $8214;
569   GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE              = $8215;
570   GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE              = $8216;
571   GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE            = $8217;
572   GL_FRAMEBUFFER_DEFAULT                            = $8218;
573   GL_FRAMEBUFFER_UNDEFINED                          = $8219;
574   GL_DEPTH_STENCIL_ATTACHMENT                       = $821A;
575   GL_DEPTH_STENCIL                                  = $84F9;
576   GL_UNSIGNED_INT_24_8                              = $84FA;
577   GL_DEPTH24_STENCIL8                               = $88F0;
578   GL_UNSIGNED_NORMALIZED                            = $8C17;
579   GL_DRAW_FRAMEBUFFER_BINDING                       = $8CA6;
580   GL_READ_FRAMEBUFFER                               = $8CA8;
581   GL_DRAW_FRAMEBUFFER                               = $8CA9;
582   GL_READ_FRAMEBUFFER_BINDING                       = $8CAA;
583   GL_RENDERBUFFER_SAMPLES                           = $8CAB;
584   GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER           = $8CD4;
585   GL_MAX_COLOR_ATTACHMENTS                          = $8CDF;
586   GL_COLOR_ATTACHMENT1                              = $8CE1;
587   GL_COLOR_ATTACHMENT2                              = $8CE2;
588   GL_COLOR_ATTACHMENT3                              = $8CE3;
589   GL_COLOR_ATTACHMENT4                              = $8CE4;
590   GL_COLOR_ATTACHMENT5                              = $8CE5;
591   GL_COLOR_ATTACHMENT6                              = $8CE6;
592   GL_COLOR_ATTACHMENT7                              = $8CE7;
593   GL_COLOR_ATTACHMENT8                              = $8CE8;
594   GL_COLOR_ATTACHMENT9                              = $8CE9;
595   GL_COLOR_ATTACHMENT10                             = $8CEA;
596   GL_COLOR_ATTACHMENT11                             = $8CEB;
597   GL_COLOR_ATTACHMENT12                             = $8CEC;
598   GL_COLOR_ATTACHMENT13                             = $8CED;
599   GL_COLOR_ATTACHMENT14                             = $8CEE;
600   GL_COLOR_ATTACHMENT15                             = $8CEF;
601   GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE             = $8D56;
602   GL_MAX_SAMPLES                                    = $8D57;
603   GL_HALF_FLOAT                                     = $140B;
604   GL_MAP_READ_BIT                                   = $0001;
605   GL_MAP_WRITE_BIT                                  = $0002;
606   GL_MAP_INVALIDATE_RANGE_BIT                       = $0004;
607   GL_MAP_INVALIDATE_BUFFER_BIT                      = $0008;
608   GL_MAP_FLUSH_EXPLICIT_BIT                         = $0010;
609   GL_MAP_UNSYNCHRONIZED_BIT                         = $0020;
610   GL_RG                                             = $8227;
611   GL_RG_INTEGER                                     = $8228;
612   GL_R8                                             = $8229;
613   GL_RG8                                            = $822B;
614   GL_R16F                                           = $822D;
615   GL_R32F                                           = $822E;
616   GL_RG16F                                          = $822F;
617   GL_RG32F                                          = $8230;
618   GL_R8I                                            = $8231;
619   GL_R8UI                                           = $8232;
620   GL_R16I                                           = $8233;
621   GL_R16UI                                          = $8234;
622   GL_R32I                                           = $8235;
623   GL_R32UI                                          = $8236;
624   GL_RG8I                                           = $8237;
625   GL_RG8UI                                          = $8238;
626   GL_RG16I                                          = $8239;
627   GL_RG16UI                                         = $823A;
628   GL_RG32I                                          = $823B;
629   GL_RG32UI                                         = $823C;
630   GL_VERTEX_ARRAY_BINDING                           = $85B5;
631   GL_R8_SNORM                                       = $8F94;
632   GL_RG8_SNORM                                      = $8F95;
633   GL_RGB8_SNORM                                     = $8F96;
634   GL_RGBA8_SNORM                                    = $8F97;
635   GL_SIGNED_NORMALIZED                              = $8F9C;
636   GL_PRIMITIVE_RESTART_FIXED_INDEX                  = $8D69;
637   GL_COPY_READ_BUFFER                               = $8F36;
638   GL_COPY_WRITE_BUFFER                              = $8F37;
639   GL_COPY_READ_BUFFER_BINDING                       = $8F36;
640   GL_COPY_WRITE_BUFFER_BINDING                      = $8F37;
641   GL_UNIFORM_BUFFER                                 = $8A11;
642   GL_UNIFORM_BUFFER_BINDING                         = $8A28;
643   GL_UNIFORM_BUFFER_START                           = $8A29;
644   GL_UNIFORM_BUFFER_SIZE                            = $8A2A;
645   GL_MAX_VERTEX_UNIFORM_BLOCKS                      = $8A2B;
646   GL_MAX_FRAGMENT_UNIFORM_BLOCKS                    = $8A2D;
647   GL_MAX_COMBINED_UNIFORM_BLOCKS                    = $8A2E;
648   GL_MAX_UNIFORM_BUFFER_BINDINGS                    = $8A2F;
649   GL_MAX_UNIFORM_BLOCK_SIZE                         = $8A30;
650   GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS         = $8A31;
651   GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS       = $8A33;
652   GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT                = $8A34;
653   GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH           = $8A35;
654   GL_ACTIVE_UNIFORM_BLOCKS                          = $8A36;
655   GL_UNIFORM_TYPE                                   = $8A37;
656   GL_UNIFORM_SIZE                                   = $8A38;
657   GL_UNIFORM_NAME_LENGTH                            = $8A39;
658   GL_UNIFORM_BLOCK_INDEX                            = $8A3A;
659   GL_UNIFORM_OFFSET                                 = $8A3B;
660   GL_UNIFORM_ARRAY_STRIDE                           = $8A3C;
661   GL_UNIFORM_MATRIX_STRIDE                          = $8A3D;
662   GL_UNIFORM_IS_ROW_MAJOR                           = $8A3E;
663   GL_UNIFORM_BLOCK_BINDING                          = $8A3F;
664   GL_UNIFORM_BLOCK_DATA_SIZE                        = $8A40;
665   GL_UNIFORM_BLOCK_NAME_LENGTH                      = $8A41;
666   GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS                  = $8A42;
667   GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES           = $8A43;
668   GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER      = $8A44;
669   GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER    = $8A46;
670   GL_INVALID_INDEX                                  = $FFFFFFFF;
671   GL_MAX_VERTEX_OUTPUT_COMPONENTS                   = $9122;
672   GL_MAX_FRAGMENT_INPUT_COMPONENTS                  = $9125;
673   GL_MAX_SERVER_WAIT_TIMEOUT                        = $9111;
674   GL_OBJECT_TYPE                                    = $9112;
675   GL_SYNC_CONDITION                                 = $9113;
676   GL_SYNC_STATUS                                    = $9114;
677   GL_SYNC_FLAGS                                     = $9115;
678   GL_SYNC_FENCE                                     = $9116;
679   GL_SYNC_GPU_COMMANDS_COMPLETE                     = $9117;
680   GL_UNSIGNALED                                     = $9118;
681   GL_SIGNALED                                       = $9119;
682   GL_ALREADY_SIGNALED                               = $911A;
683   GL_TIMEOUT_EXPIRED                                = $911B;
684   GL_CONDITION_SATISFIED                            = $911C;
685   GL_WAIT_FAILED                                    = $911D;
686   GL_SYNC_FLUSH_COMMANDS_BIT                        = $00000001;
687   GL_TIMEOUT_IGNORED                                = $FFFFFFFFFFFFFFFF;
688   GL_VERTEX_ATTRIB_ARRAY_DIVISOR                    = $88FE;
689   GL_ANY_SAMPLES_PASSED                             = $8C2F;
690   GL_ANY_SAMPLES_PASSED_CONSERVATIVE                = $8D6A;
691   GL_SAMPLER_BINDING                                = $8919;
692   GL_RGB10_A2UI                                     = $906F;
693   GL_TEXTURE_SWIZZLE_R                              = $8E42;
694   GL_TEXTURE_SWIZZLE_G                              = $8E43;
695   GL_TEXTURE_SWIZZLE_B                              = $8E44;
696   GL_TEXTURE_SWIZZLE_A                              = $8E45;
697   GL_GREEN                                          = $1904;
698   GL_BLUE                                           = $1905;
699   GL_INT_2_10_10_10_REV                             = $8D9F;
700   GL_TRANSFORM_FEEDBACK                             = $8E22;
701   GL_TRANSFORM_FEEDBACK_PAUSED                      = $8E23;
702   GL_TRANSFORM_FEEDBACK_ACTIVE                      = $8E24;
703   GL_TRANSFORM_FEEDBACK_BINDING                     = $8E25;
704   GL_PROGRAM_BINARY_RETRIEVABLE_HINT                = $8257;
705   GL_PROGRAM_BINARY_LENGTH                          = $8741;
706   GL_NUM_PROGRAM_BINARY_FORMATS                     = $87FE;
707   GL_PROGRAM_BINARY_FORMATS                         = $87FF;
708   GL_COMPRESSED_R11_EAC                             = $9270;
709   GL_COMPRESSED_SIGNED_R11_EAC                      = $9271;
710   GL_COMPRESSED_RG11_EAC                            = $9272;
711   GL_COMPRESSED_SIGNED_RG11_EAC                     = $9273;
712   GL_COMPRESSED_RGB8_ETC2                           = $9274;
713   GL_COMPRESSED_SRGB8_ETC2                          = $9275;
714   GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2       = $9276;
715   GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2      = $9277;
716   GL_COMPRESSED_RGBA8_ETC2_EAC                      = $9278;
717   GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC               = $9279;
718   GL_TEXTURE_IMMUTABLE_FORMAT                       = $912F;
719   GL_MAX_ELEMENT_INDEX                              = $8D6B;
720   GL_NUM_SAMPLE_COUNTS                              = $9380;
721   GL_TEXTURE_IMMUTABLE_LEVELS                       = $82DF;
722
723   { OpenGL ES 3.1 }
724   GL_COMPUTE_SHADER                                 = $91B9;
725   GL_MAX_COMPUTE_UNIFORM_BLOCKS                     = $91BB;
726   GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS                = $91BC;
727   GL_MAX_COMPUTE_IMAGE_UNIFORMS                     = $91BD;
728   GL_MAX_COMPUTE_SHARED_MEMORY_SIZE                 = $8262;
729   GL_MAX_COMPUTE_UNIFORM_COMPONENTS                 = $8263;
730   GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS             = $8264;
731   GL_MAX_COMPUTE_ATOMIC_COUNTERS                    = $8265;
732   GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS        = $8266;
733   GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS             = $90EB;
734   GL_MAX_COMPUTE_WORK_GROUP_COUNT                   = $91BE;
735   GL_MAX_COMPUTE_WORK_GROUP_SIZE                    = $91BF;
736   GL_COMPUTE_WORK_GROUP_SIZE                        = $8267;
737   GL_DISPATCH_INDIRECT_BUFFER                       = $90EE;
738   GL_DISPATCH_INDIRECT_BUFFER_BINDING               = $90EF;
739   GL_COMPUTE_SHADER_BIT                             = $00000020;
740   GL_DRAW_INDIRECT_BUFFER                           = $8F3F;
741   GL_DRAW_INDIRECT_BUFFER_BINDING                   = $8F43;
742   GL_MAX_UNIFORM_LOCATIONS                          = $826E;
743   GL_FRAMEBUFFER_DEFAULT_WIDTH                      = $9310;
744   GL_FRAMEBUFFER_DEFAULT_HEIGHT                     = $9311;
745   GL_FRAMEBUFFER_DEFAULT_SAMPLES                    = $9313;
746   GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS     = $9314;
747   GL_MAX_FRAMEBUFFER_WIDTH                          = $9315;
748   GL_MAX_FRAMEBUFFER_HEIGHT                         = $9316;
749   GL_MAX_FRAMEBUFFER_SAMPLES                        = $9318;
750   GL_UNIFORM                                        = $92E1;
751   GL_UNIFORM_BLOCK                                  = $92E2;
752   GL_PROGRAM_INPUT                                  = $92E3;
753   GL_PROGRAM_OUTPUT                                 = $92E4;
754   GL_BUFFER_VARIABLE                                = $92E5;
755   GL_SHADER_STORAGE_BLOCK                           = $92E6;
756   GL_ATOMIC_COUNTER_BUFFER                          = $92C0;
757   GL_TRANSFORM_FEEDBACK_VARYING                     = $92F4;
758   GL_ACTIVE_RESOURCES                               = $92F5;
759   GL_MAX_NAME_LENGTH                                = $92F6;
760   GL_MAX_NUM_ACTIVE_VARIABLES                       = $92F7;
761   GL_NAME_LENGTH                                    = $92F9;
762   GL_TYPE                                           = $92FA;
763   GL_ARRAY_SIZE                                     = $92FB;
764   GL_OFFSET                                         = $92FC;
765   GL_BLOCK_INDEX                                    = $92FD;
766   GL_ARRAY_STRIDE                                   = $92FE;
767   GL_MATRIX_STRIDE                                  = $92FF;
768   GL_IS_ROW_MAJOR                                   = $9300;
769   GL_ATOMIC_COUNTER_BUFFER_INDEX                    = $9301;
770   GL_BUFFER_BINDING                                 = $9302;
771   GL_BUFFER_DATA_SIZE                               = $9303;
772   GL_NUM_ACTIVE_VARIABLES                           = $9304;
773   GL_ACTIVE_VARIABLES                               = $9305;
774   GL_REFERENCED_BY_VERTEX_SHADER                    = $9306;
775   GL_REFERENCED_BY_FRAGMENT_SHADER                  = $930A;
776   GL_REFERENCED_BY_COMPUTE_SHADER                   = $930B;
777   GL_TOP_LEVEL_ARRAY_SIZE                           = $930C;
778   GL_TOP_LEVEL_ARRAY_STRIDE                         = $930D;
779   GL_LOCATION                                       = $930E;
780   GL_VERTEX_SHADER_BIT                              = $00000001;
781   GL_FRAGMENT_SHADER_BIT                            = $00000002;
782   GL_ALL_SHADER_BITS                                = $FFFFFFFF;
783   GL_PROGRAM_SEPARABLE                              = $8258;
784   GL_ACTIVE_PROGRAM                                 = $8259;
785   GL_PROGRAM_PIPELINE_BINDING                       = $825A;
786   GL_ATOMIC_COUNTER_BUFFER_BINDING                  = $92C1;
787   GL_ATOMIC_COUNTER_BUFFER_START                    = $92C2;
788   GL_ATOMIC_COUNTER_BUFFER_SIZE                     = $92C3;
789   GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS              = $92CC;
790   GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS            = $92D0;
791   GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS            = $92D1;
792   GL_MAX_VERTEX_ATOMIC_COUNTERS                     = $92D2;
793   GL_MAX_FRAGMENT_ATOMIC_COUNTERS                   = $92D6;
794   GL_MAX_COMBINED_ATOMIC_COUNTERS                   = $92D7;
795   GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE                 = $92D8;
796   GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS             = $92DC;
797   GL_ACTIVE_ATOMIC_COUNTER_BUFFERS                  = $92D9;
798   GL_UNSIGNED_INT_ATOMIC_COUNTER                    = $92DB;
799   GL_MAX_IMAGE_UNITS                                = $8F38;
800   GL_MAX_VERTEX_IMAGE_UNIFORMS                      = $90CA;
801   GL_MAX_FRAGMENT_IMAGE_UNIFORMS                    = $90CE;
802   GL_MAX_COMBINED_IMAGE_UNIFORMS                    = $90CF;
803   GL_IMAGE_BINDING_NAME                             = $8F3A;
804   GL_IMAGE_BINDING_LEVEL                            = $8F3B;
805   GL_IMAGE_BINDING_LAYERED                          = $8F3C;
806   GL_IMAGE_BINDING_LAYER                            = $8F3D;
807   GL_IMAGE_BINDING_ACCESS                           = $8F3E;
808   GL_IMAGE_BINDING_FORMAT                           = $906E;
809   GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT                = $00000001;
810   GL_ELEMENT_ARRAY_BARRIER_BIT                      = $00000002;
811   GL_UNIFORM_BARRIER_BIT                            = $00000004;
812   GL_TEXTURE_FETCH_BARRIER_BIT                      = $00000008;
813   GL_SHADER_IMAGE_ACCESS_BARRIER_BIT                = $00000020;
814   GL_COMMAND_BARRIER_BIT                            = $00000040;
815   GL_PIXEL_BUFFER_BARRIER_BIT                       = $00000080;
816   GL_TEXTURE_UPDATE_BARRIER_BIT                     = $00000100;
817   GL_BUFFER_UPDATE_BARRIER_BIT                      = $00000200;
818   GL_FRAMEBUFFER_BARRIER_BIT                        = $00000400;
819   GL_TRANSFORM_FEEDBACK_BARRIER_BIT                 = $00000800;
820   GL_ATOMIC_COUNTER_BARRIER_BIT                     = $00001000;
821   GL_ALL_BARRIER_BITS                               = $FFFFFFFF;
822   GL_IMAGE_2D                                       = $904D;
823   GL_IMAGE_3D                                       = $904E;
824   GL_IMAGE_CUBE                                     = $9050;
825   GL_IMAGE_2D_ARRAY                                 = $9053;
826   GL_INT_IMAGE_2D                                   = $9058;
827   GL_INT_IMAGE_3D                                   = $9059;
828   GL_INT_IMAGE_CUBE                                 = $905B;
829   GL_INT_IMAGE_2D_ARRAY                             = $905E;
830   GL_UNSIGNED_INT_IMAGE_2D                          = $9063;
831   GL_UNSIGNED_INT_IMAGE_3D                          = $9064;
832   GL_UNSIGNED_INT_IMAGE_CUBE                        = $9066;
833   GL_UNSIGNED_INT_IMAGE_2D_ARRAY                    = $9069;
834   GL_IMAGE_FORMAT_COMPATIBILITY_TYPE                = $90C7;
835   GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE             = $90C8;
836   GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS            = $90C9;
837   GL_READ_ONLY                                      = $88B8;
838   GL_WRITE_ONLY                                     = $88B9;
839   GL_READ_WRITE                                     = $88BA;
840   GL_SHADER_STORAGE_BUFFER                          = $90D2;
841   GL_SHADER_STORAGE_BUFFER_BINDING                  = $90D3;
842   GL_SHADER_STORAGE_BUFFER_START                    = $90D4;
843   GL_SHADER_STORAGE_BUFFER_SIZE                     = $90D5;
844   GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS               = $90D6;
845   GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS             = $90DA;
846   GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS              = $90DB;
847   GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS             = $90DC;
848   GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS             = $90DD;
849   GL_MAX_SHADER_STORAGE_BLOCK_SIZE                  = $90DE;
850   GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT         = $90DF;
851   GL_SHADER_STORAGE_BARRIER_BIT                     = $00002000;
852   GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES           = $8F39;
853   GL_DEPTH_STENCIL_TEXTURE_MODE                     = $90EA;
854   GL_STENCIL_INDEX                                  = $1901;
855   GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET              = $8E5E;
856   GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET              = $8E5F;
857   GL_SAMPLE_POSITION                                = $8E50;
858   GL_SAMPLE_MASK                                    = $8E51;
859   GL_SAMPLE_MASK_VALUE                              = $8E52;
860   GL_TEXTURE_2D_MULTISAMPLE                         = $9100;
861   GL_MAX_SAMPLE_MASK_WORDS                          = $8E59;
862   GL_MAX_COLOR_TEXTURE_SAMPLES                      = $910E;
863   GL_MAX_DEPTH_TEXTURE_SAMPLES                      = $910F;
864   GL_MAX_INTEGER_SAMPLES                            = $9110;
865   GL_TEXTURE_BINDING_2D_MULTISAMPLE                 = $9104;
866   GL_TEXTURE_SAMPLES                                = $9106;
867   GL_TEXTURE_FIXED_SAMPLE_LOCATIONS                 = $9107;
868   GL_TEXTURE_WIDTH                                  = $1000;
869   GL_TEXTURE_HEIGHT                                 = $1001;
870   GL_TEXTURE_DEPTH                                  = $8071;
871   GL_TEXTURE_INTERNAL_FORMAT                        = $1003;
872   GL_TEXTURE_RED_SIZE                               = $805C;
873   GL_TEXTURE_GREEN_SIZE                             = $805D;
874   GL_TEXTURE_BLUE_SIZE                              = $805E;
875   GL_TEXTURE_ALPHA_SIZE                             = $805F;
876   GL_TEXTURE_DEPTH_SIZE                             = $884A;
877   GL_TEXTURE_STENCIL_SIZE                           = $88F1;
878   GL_TEXTURE_SHARED_SIZE                            = $8C3F;
879   GL_TEXTURE_RED_TYPE                               = $8C10;
880   GL_TEXTURE_GREEN_TYPE                             = $8C11;
881   GL_TEXTURE_BLUE_TYPE                              = $8C12;
882   GL_TEXTURE_ALPHA_TYPE                             = $8C13;
883   GL_TEXTURE_DEPTH_TYPE                             = $8C16;
884   GL_TEXTURE_COMPRESSED                             = $86A1;
885   GL_SAMPLER_2D_MULTISAMPLE                         = $9108;
886   GL_INT_SAMPLER_2D_MULTISAMPLE                     = $9109;
887   GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE            = $910A;
888   GL_VERTEX_ATTRIB_BINDING                          = $82D4;
889   GL_VERTEX_ATTRIB_RELATIVE_OFFSET                  = $82D5;
890   GL_VERTEX_BINDING_DIVISOR                         = $82D6;
891   GL_VERTEX_BINDING_OFFSET                          = $82D7;
892   GL_VERTEX_BINDING_STRIDE                          = $82D8;
893   GL_VERTEX_BINDING_BUFFER                          = $8F4F;
894   GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET              = $82D9;
895   GL_MAX_VERTEX_ATTRIB_BINDINGS                     = $82DA;
896   GL_MAX_VERTEX_ATTRIB_STRIDE                       = $82E5;
897
898
899 type
900   { OpenGL Es 2.0 }
901   TglActiveTexture                        = procedure(aTexture: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
902   TglAttachShader                         = procedure(aProgram: GLuint; aShader: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
903   TglBindAttribLocation                   = procedure(aProgram: GLuint; aIndex: GLuint; const aName: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
904   TglBindBuffer                           = procedure(aTarget: GLenum; aBuffer: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
905   TglBindFramebuffer                      = procedure(aTarget: GLenum; aFramebuffer: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
906   TglBindRenderbuffer                     = procedure(aTarget: GLenum; aRenderbuffer: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
907   TglBindTexture                          = procedure(aTarget: GLenum; aTexture: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
908   TglBlendColor                           = procedure(aRed: GLfloat; aGreen: GLfloat; aBlue: GLfloat; aAlpha: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
909   TglBlendEquation                        = procedure(aMode: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
910   TglBlendEquationSeparate                = procedure(aModeRGB: GLenum; aModeAlpha: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
911   TglBlendFunc                            = procedure(aSFactor: GLenum; aDFactor: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
912   TglBlendFuncSeparate                    = procedure(aSFactorRGB: GLenum; aDFactorRGB: GLenum; aSFactorAlpha: GLenum; aDFactorAlpha: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
913   TglBufferData                           = procedure(aTarget: GLenum; aSize: PGLsizei; const aData: PGLvoid; aUsage: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
914   TglBufferSubData                        = procedure(aTarget: GLenum; aOffset: PGLint; aSize: PGLsizei; const aData: PGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
915   TglCheckFramebufferStatus               = function(aTarget: GLenum): GLenum; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
916   TglClear                                = procedure(aMask: GLbitfield); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
917   TglClearColor                           = procedure(aRed: GLfloat; aGreen: GLfloat; aBlue: GLfloat; aAlpha: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
918   TglClearDepthf                          = procedure(d: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
919   TglClearStencil                         = procedure(s: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
920   TglColorMask                            = procedure(aRed: GLboolean; aGreen: GLboolean; aBlue: GLboolean; aAlpha: GLboolean); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
921   TglCompileShader                        = procedure(aShader: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
922   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}
923   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}
924   TglCopyTexImage2D                       = procedure(aTarget: GLenum; aLevel: GLint; aInternalformat: GLenum; aX: GLint; aY: GLint; aWidth: GLsizei; aHeight: GLsizei; aBorder: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
925   TglCopyTexSubImage2D                    = procedure(aTarget: GLenum; aLevel: GLint; aXoffset: GLint; aYoffset: GLint; aX: GLint; aY: GLint; aWidth: GLsizei; aHeight: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
926   TglCreateProgram                        = function: GLuint; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
927   TglCreateShader                         = function(aType: GLenum): GLuint; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
928   TglCullFace                             = procedure(aMode: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
929   TglDeleteBuffers                        = procedure(n: GLsizei; const aBuffers: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
930   TglDeleteFramebuffers                   = procedure(n: GLsizei; const aFrameBuffers: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
931   TglDeleteProgram                        = procedure(aProgram: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
932   TglDeleteRenderbuffers                  = procedure(n: GLsizei; const aRenderBuffers: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
933   TglDeleteShader                         = procedure(aShader: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
934   TglDeleteTextures                       = procedure(n: GLsizei; const aTextures: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
935   TglDepthFunc                            = procedure(aFunc: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
936   TglDepthMask                            = procedure(aFlag: GLboolean); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
937   TglDepthRangef                          = procedure(n: GLfloat; aF: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
938   TglDetachShader                         = procedure(aProgram: GLuint; aShader: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
939   TglDisable                              = procedure(aCap: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
940   TglDisableVertexAttribArray             = procedure(aIndex: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
941   TglDrawArrays                           = procedure(aMode: GLenum; aFirst: GLint; aCount: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
942   TglDrawElements                         = procedure(aMode: GLenum; aCount: GLsizei; aType: GLenum; const aIndices: PGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
943   TglEnable                               = procedure(aCap: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
944   TglEnableVertexAttribArray              = procedure(aIndex: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
945   TglFinish                               = procedure; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
946   TglFlush                                = procedure; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
947   TglFramebufferRenderbuffer              = procedure(aTarget: GLenum; aAttachment: GLenum; aRenderbuffertarget: GLenum; aRenderbuffer: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
948   TglFramebufferTexture2D                 = procedure(aTarget: GLenum; aAttachment: GLenum; aTextarget: GLenum; aTexture: GLuint; aLevel: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
949   TglFrontFace                            = procedure(aMode: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
950   TglGenBuffers                           = procedure(n: GLsizei; aBuffers: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
951   TglGenerateMipmap                       = procedure(aTarget: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
952   TglGenFramebuffers                      = procedure(n: GLsizei; aFramebuffers: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
953   TglGenRenderbuffers                     = procedure(n: GLsizei; aRenderbuffers: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
954   TglGenTextures                          = procedure(n: GLsizei; aTextures: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
955   TglGetActiveAttrib                      = procedure(aProgram: GLuint; aIndex: GLuint; aBufSize: GLsizei; aLength: PGLsizei; aSize: PGLint; aType: PGLenum; aName: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
956   TglGetActiveUniform                     = procedure(aProgram: GLuint; aIndex: GLuint; aBufSize: GLsizei; aLength: PGLsizei; aSize: PGLint; aType: PGLenum; aName: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
957   TglGetAttachedShaders                   = procedure(aProgram: GLuint; aMaxCount: GLsizei; aCount: PGLsizei; aShaders: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
958   TglGetAttribLocation                    = function(aProgram: GLuint; const aName: PGLchar): GLint; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
959   TglGetBooleanv                          = procedure(aPname: GLenum; aData: PGLboolean); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
960   TglGetBufferParameteriv                 = procedure(aTarget: GLenum; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
961   TglGetError                             = function: GLenum; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
962   TglGetFloatv                            = procedure(aPname: GLenum; aData: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
963   TglGetFramebufferAttachmentParameteriv  = procedure(aTarget: GLenum; aAttachment: GLenum; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
964   TglGetIntegerv                          = procedure(aPname: GLenum; aData: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
965   TglGetProgramiv                         = procedure(aProgram: GLuint; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
966   TglGetProgramInfoLog                    = procedure(aProgram: GLuint; aBufSize: GLsizei; aLength: PGLsizei; aInfoLog: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
967   TglGetRenderbufferParameteriv           = procedure(aTarget: GLenum; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
968   TglGetShaderiv                          = procedure(aShader: GLuint; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
969   TglGetShaderInfoLog                     = procedure(aShader: GLuint; aBufSize: GLsizei; aLength: PGLsizei; aInfoLog: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
970   TglGetShaderPrecisionFormat             = procedure(aShadertype: GLenum; aPrecisiontype: GLenum; aRange: PGLint; aPrecision: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
971   TglGetShaderSource                      = procedure(aShader: GLuint; aBufSize: GLsizei; aLength: PGLsizei; aSource: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
972   TglGetString                            = function(aName: GLenum): PAnsiChar; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
973   TglGetTexParameterfv                    = procedure(aTarget: GLenum; aPname: GLenum; aParams: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
974   TglGetTexParameteriv                    = procedure(aTarget: GLenum; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
975   TglGetUniformfv                         = procedure(aProgram: GLuint; aLocation: GLint; aParams: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
976   TglGetUniformiv                         = procedure(aProgram: GLuint; aLocation: GLint; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
977   TglGetUniformLocation                   = function(aProgram: GLuint; const aName: PGLchar): GLint; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
978   TglGetVertexAttribfv                    = procedure(aIndex: GLuint; aPname: GLenum; aParams: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
979   TglGetVertexAttribiv                    = procedure(aIndex: GLuint; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
980   TglGetVertexAttribPointerv              = procedure(aIndex: GLuint; aPname: GLenum; aPointer: PPGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
981   TglHint                                 = procedure(aTarget: GLenum; aMode: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
982   TglIsBuffer                             = function(aBuffer: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
983   TglIsEnabled                            = function(aCap: GLenum): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
984   TglIsFramebuffer                        = function(aFramebuffer: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
985   TglIsProgram                            = function(aProgram: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
986   TglIsRenderbuffer                       = function(aRenderbuffer: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
987   TglIsShader                             = function(aShader: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
988   TglIsTexture                            = function(aTexture: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
989   TglLineWidth                            = procedure(aWidth: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
990   TglLinkProgram                          = procedure(aProgram: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
991   TglPixelStorei                          = procedure(aPname: GLenum; aParam: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
992   TglPolygonOffset                        = procedure(aFactor: GLfloat; aUnits: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
993   TglReadPixels                           = procedure(aX: GLint; aY: GLint; aWidth: GLsizei; aHeight: GLsizei; aFormat: GLenum; aType: GLenum; aPixels: PGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
994   TglReleaseShaderCompiler                = procedure; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
995   TglRenderbufferStorage                  = procedure(aTarget: GLenum; aInternalformat: GLenum; aWidth: GLsizei; aHeight: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
996   TglSampleCoverage                       = procedure(aValue: GLfloat; aInvert: GLboolean); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
997   TglScissor                              = procedure(aX: GLint; aY: GLint; aWidth: GLsizei; aHeight: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
998   TglShaderBinary                         = procedure(aCount: GLsizei; const aShaders: PGLuint; aBinaryformat: GLenum; const aBinary: PGLvoid; aLength: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
999   TglShaderSource                         = procedure(aShader: GLuint; aCount: GLsizei; const aString: PPGLchar; const aLength: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1000   TglStencilFunc                          = procedure(aFunc: GLenum; aRef: GLint; aMask: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1001   TglStencilFuncSeparate                  = procedure(aFace: GLenum; aFunc: GLenum; aRef: GLint; aMask: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1002   TglStencilMask                          = procedure(aMask: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1003   TglStencilMaskSeparate                  = procedure(aFace: GLenum; aMask: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1004   TglStencilOp                            = procedure(aFail: GLenum; aZfail: GLenum; aZpass: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1005   TglStencilOpSeparate                    = procedure(aFace: GLenum; aSfail: GLenum; aDpfail: GLenum; aDppass: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1006   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}
1007   TglTexParameterf                        = procedure(aTarget: GLenum; aPname: GLenum; aParam: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1008   TglTexParameterfv                       = procedure(aTarget: GLenum; aPname: GLenum; const aParams: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1009   TglTexParameteri                        = procedure(aTarget: GLenum; aPname: GLenum; aParam: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1010   TglTexParameteriv                       = procedure(aTarget: GLenum; aPname: GLenum; const aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1011   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}
1012   TglUniform1f                            = procedure(aLocation: GLint; aV0: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1013   TglUniform1fv                           = procedure(aLocation: GLint; aCount: GLsizei; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1014   TglUniform1i                            = procedure(aLocation: GLint; aV0: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1015   TglUniform1iv                           = procedure(aLocation: GLint; aCount: GLsizei; const aValue: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1016   TglUniform2f                            = procedure(aLocation: GLint; aV0: GLfloat; aV1: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1017   TglUniform2fv                           = procedure(aLocation: GLint; aCount: GLsizei; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1018   TglUniform2i                            = procedure(aLocation: GLint; aV0: GLint; aV1: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1019   TglUniform2iv                           = procedure(aLocation: GLint; aCount: GLsizei; const aValue: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1020   TglUniform3f                            = procedure(aLocation: GLint; aV0: GLfloat; aV1: GLfloat; aV2: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1021   TglUniform3fv                           = procedure(aLocation: GLint; aCount: GLsizei; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1022   TglUniform3i                            = procedure(aLocation: GLint; aV0: GLint; aV1: GLint; aV2: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1023   TglUniform3iv                           = procedure(aLocation: GLint; aCount: GLsizei; const aValue: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1024   TglUniform4f                            = procedure(aLocation: GLint; aV0: GLfloat; aV1: GLfloat; aV2: GLfloat; aV3: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1025   TglUniform4fv                           = procedure(aLocation: GLint; aCount: GLsizei; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1026   TglUniform4i                            = procedure(aLocation: GLint; aV0: GLint; aV1: GLint; aV2: GLint; aV3: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1027   TglUniform4iv                           = procedure(aLocation: GLint; aCount: GLsizei; const aValue: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1028   TglUniformMatrix2fv                     = procedure(aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1029   TglUniformMatrix3fv                     = procedure(aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1030   TglUniformMatrix4fv                     = procedure(aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1031   TglUseProgram                           = procedure(aProgram: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1032   TglValidateProgram                      = procedure(aProgram: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1033   TglVertexAttrib1f                       = procedure(aIndex: GLuint; aX: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1034   TglVertexAttrib1fv                      = procedure(aIndex: GLuint; const v: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1035   TglVertexAttrib2f                       = procedure(aIndex: GLuint; aX: GLfloat; aY: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1036   TglVertexAttrib2fv                      = procedure(aIndex: GLuint; const v: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1037   TglVertexAttrib3f                       = procedure(aIndex: GLuint; aX: GLfloat; aY: GLfloat; aZ: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1038   TglVertexAttrib3fv                      = procedure(aIndex: GLuint; const v: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1039   TglVertexAttrib4f                       = procedure(aIndex: GLuint; aX: GLfloat; aY: GLfloat; aZ: GLfloat; aW: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1040   TglVertexAttrib4fv                      = procedure(aIndex: GLuint; const v: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1041   TglVertexAttribPointer                  = procedure(aIndex: GLuint; aSize: GLint; aType: GLenum; aNormalized: GLboolean; aStride: GLsizei; const aPointer: PGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1042   TglViewport                             = procedure(aX: GLint; aY: GLint; aWidth: GLsizei; aHeight: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1043
1044   { OpenGL ES 3.0 }
1045   TglReadBuffer                           = procedure(aSrc: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1046   TglDrawRangeElements                    = procedure(aMode: GLenum; aStart: GLuint; aEnd: GLuint; aCount: GLsizei; aType: GLenum; const aIndices: PGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1047   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}
1048   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}
1049   TglCopyTexSubImage3D                    = procedure(aTarget: GLenum; aLevel: GLint; aXoffset: GLint; aYoffset: GLint; aZoffset: GLint; aX: GLint; aY: GLint; aWidth: GLsizei; aHeight: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1050   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}
1051   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}
1052   TglGenQueries                           = procedure(n: GLsizei; aIDs: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1053   TglDeleteQueries                        = procedure(n: GLsizei; const aIDs: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1054   TglIsQuery                              = function(aId: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1055   TglBeginQuery                           = procedure(aTarget: GLenum; aId: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1056   TglEndQuery                             = procedure(aTarget: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1057   TglGetQueryiv                           = procedure(aTarget: GLenum; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1058   TglGetQueryObjectuiv                    = procedure(aId: GLuint; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1059   TglUnmapBuffer                          = function(aTarget: GLenum): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1060   TglGetBufferPointerv                    = procedure(aTarget: GLenum; aPname: GLenum; aParams: PPGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1061   TglDrawBuffers                          = procedure(n: GLsizei; const aBufs: PGLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1062   TglUniformMatrix2x3fv                   = procedure(aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1063   TglUniformMatrix3x2fv                   = procedure(aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1064   TglUniformMatrix2x4fv                   = procedure(aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1065   TglUniformMatrix4x2fv                   = procedure(aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1066   TglUniformMatrix3x4fv                   = procedure(aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1067   TglUniformMatrix4x3fv                   = procedure(aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1068   TglBlitFramebuffer                      = 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}
1069   TglRenderbufferStorageMultisample       = procedure(aTarget: GLenum; aSamples: GLsizei; aInternalformat: GLenum; aWidth: GLsizei; aHeight: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1070   TglFramebufferTextureLayer              = procedure(aTarget: GLenum; aAttachment: GLenum; aTexture: GLuint; aLevel: GLint; aLayer: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1071   TglMapBufferRange                       = function(aTarget: GLenum; aOffset: PGLint; aLength: PGLsizei; aAccess: GLbitfield): PGLvoid; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1072   TglFlushMappedBufferRange               = procedure(aTarget: GLenum; aOffset: PGLint; aLength: PGLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1073   TglBindVertexArray                      = procedure(aArray: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1074   TglDeleteVertexArrays                   = procedure(n: GLsizei; const aArrays: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1075   TglGenVertexArrays                      = procedure(n: GLsizei; aArrays: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1076   TglIsVertexArray                        = function(aArray: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1077   TglGetIntegeri_v                        = procedure(aTarget: GLenum; aIndex: GLuint; aData: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1078   TglBeginTransformFeedback               = procedure(aPrimitiveMode: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1079   TglEndTransformFeedback                 = procedure; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1080   TglBindBufferRange                      = procedure(aTarget: GLenum; aIndex: GLuint; aBuffer: GLuint; aOffset: PGLint; aSize: PGLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1081   TglBindBufferBase                       = procedure(aTarget: GLenum; aIndex: GLuint; aBuffer: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1082   TglTransformFeedbackVaryings            = procedure(aProgram: GLuint; aCount: GLsizei; const aVaryings: PPGLchar; aBufferMode: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1083   TglGetTransformFeedbackVarying          = procedure(aProgram: GLuint; aIndex: GLuint; aBufSize: GLsizei; aLength: PGLsizei; aSize: PGLsizei; aType: PGLenum; aName: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1084   TglVertexAttribIPointer                 = procedure(aIndex: GLuint; aSize: GLint; aType: GLenum; aStride: GLsizei; const aPointer: PGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1085   TglGetVertexAttribIiv                   = procedure(aIndex: GLuint; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1086   TglGetVertexAttribIuiv                  = procedure(aIndex: GLuint; aPname: GLenum; aParams: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1087   TglVertexAttribI4i                      = procedure(aIndex: GLuint; aX: GLint; aY: GLint; aZ: GLint; aW: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1088   TglVertexAttribI4ui                     = procedure(aIndex: GLuint; aX: GLuint; aY: GLuint; aZ: GLuint; aW: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1089   TglVertexAttribI4iv                     = procedure(aIndex: GLuint; const v: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1090   TglVertexAttribI4uiv                    = procedure(aIndex: GLuint; const v: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1091   TglGetUniformuiv                        = procedure(aProgram: GLuint; aLocation: GLint; aParams: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1092   TglGetFragDataLocation                  = function(aProgram: GLuint; const aName: PGLchar): GLint; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1093   TglUniform1ui                           = procedure(aLocation: GLint; aV0: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1094   TglUniform2ui                           = procedure(aLocation: GLint; aV0: GLuint; aV1: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1095   TglUniform3ui                           = procedure(aLocation: GLint; aV0: GLuint; aV1: GLuint; aV2: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1096   TglUniform4ui                           = procedure(aLocation: GLint; aV0: GLuint; aV1: GLuint; aV2: GLuint; aV3: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1097   TglUniform1uiv                          = procedure(aLocation: GLint; aCount: GLsizei; const aValue: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1098   TglUniform2uiv                          = procedure(aLocation: GLint; aCount: GLsizei; const aValue: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1099   TglUniform3uiv                          = procedure(aLocation: GLint; aCount: GLsizei; const aValue: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1100   TglUniform4uiv                          = procedure(aLocation: GLint; aCount: GLsizei; const aValue: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1101   TglClearBufferiv                        = procedure(aBuffer: GLenum; aDrawbuffer: GLint; const aValue: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1102   TglClearBufferuiv                       = procedure(aBuffer: GLenum; aDrawbuffer: GLint; const aValue: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1103   TglClearBufferfv                        = procedure(aBuffer: GLenum; aDrawbuffer: GLint; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1104   TglClearBufferfi                        = procedure(aBuffer: GLenum; aDrawbuffer: GLint; aDepth: GLfloat; aStencil: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1105   TglGetStringi                           = function(aName: GLenum; aIndex: GLuint): PGLchar; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1106   TglCopyBufferSubData                    = procedure(aReadTarget: GLenum; aWriteTarget: GLenum; aReadOffset: PGLint; aWriteOffset: PGLint; aSize: PGLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1107   TglGetUniformIndices                    = procedure(aProgram: GLuint; aUniformCount: GLsizei; const aUniformNames: PPGLchar; aUniformIndices: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1108   TglGetActiveUniformsiv                  = procedure(aProgram: GLuint; aUniformCount: GLsizei; const aUniformIndices: PGLuint; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1109   TglGetUniformBlockIndex                 = function(aProgram: GLuint; const aUniformBlockName: PGLchar): GLuint; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1110   TglGetActiveUniformBlockiv              = procedure(aProgram: GLuint; aUniformBlockIndex: GLuint; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1111   TglGetActiveUniformBlockName            = procedure(aProgram: GLuint; aUniformBlockIndex: GLuint; aBufSize: GLsizei; aLength: PGLsizei; aUniformBlockName: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1112   TglUniformBlockBinding                  = procedure(aProgram: GLuint; aUniformBlockIndex: GLuint; aUniformBlockBinding: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1113   TglDrawArraysInstanced                  = procedure(aMode: GLenum; aFirst: GLint; aCount: GLsizei; aInstancecount: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1114   TglDrawElementsInstanced                = procedure(aMode: GLenum; aCount: GLsizei; aType: GLenum; const aIndices: PGLvoid; aInstanceCount: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1115   TglFenceSync                            = function(aCondition: GLenum; aFlags: GLbitfield): GLsync; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1116   TglIsSync                               = function(aSync: GLsync): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1117   TglDeleteSync                           = procedure(aSync: GLsync); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1118   TglClientWaitSync                       = function(aSync: GLsync; aFlags: GLbitfield; aTimeout: GLuint64): GLenum; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1119   TglWaitSync                             = procedure(aSync: GLsync; aFlags: GLbitfield; aTimeout: GLuint64); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1120   TglGetInteger64v                        = procedure(aPname: GLenum; aData: PGLint64); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1121   TglGetSynciv                            = procedure(aSync: GLsync; aPname: GLenum; aBufSize: GLsizei; aLength: PGLsizei; aValue: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1122   TglGetInteger64i_v                      = procedure(aTarget: GLenum; aIndex: GLuint; aData: PGLint64); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1123   TglGetBufferParameteri64v               = procedure(aTarget: GLenum; aPname: GLenum; aParams: PGLint64); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1124   TglGenSamplers                          = procedure(aCount: GLsizei; aSamplers: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1125   TglDeleteSamplers                       = procedure(aCount: GLsizei; const aSamplers: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1126   TglIsSampler                            = function(aSampler: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1127   TglBindSampler                          = procedure(aUnit: GLuint; aSampler: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1128   TglSamplerParameteri                    = procedure(aSampler: GLuint; aPname: GLenum; aParam: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1129   TglSamplerParameteriv                   = procedure(aSampler: GLuint; aPname: GLenum; const aParam: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1130   TglSamplerParameterf                    = procedure(aSampler: GLuint; aPname: GLenum; aParam: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1131   TglSamplerParameterfv                   = procedure(aSampler: GLuint; aPname: GLenum; const aParam: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1132   TglGetSamplerParameteriv                = procedure(aSampler: GLuint; aPname: GLenum; const aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1133   TglGetSamplerParameterfv                = procedure(aSampler: GLuint; aPname: GLenum; const aParams: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1134   TglVertexAttribDivisor                  = procedure(aIndex: GLuint; aDivisor: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1135   TglBindTransformFeedback                = procedure(aTarget: GLenum; aId: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1136   TglDeleteTransformFeedbacks             = procedure(n: GLsizei; const aIDs: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1137   TglGenTransformFeedbacks                = procedure(n: GLsizei; const aIDs: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1138   TglIsTransformFeedback                  = function(aId: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1139   TglPauseTransformFeedback               = procedure; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1140   TglResumeTransformFeedback              = procedure; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1141   TglGetProgramBinary                     = procedure(aProgram: GLuint; aBufSize: GLsizei; aLength: PGLsizei; aBinaryFormat: PGLenum; aBinary: PGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1142   TglProgramBinary                        = procedure(aProgram: GLuint; aBinaryFormat: GLenum; const aBinary: PGLvoid; aLength: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1143   TglProgramParameteri                    = procedure(aProgram: GLuint; aPname: GLenum; aValue: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1144   TglInvalidateFramebuffer                = procedure(aTarget: GLenum; aNumAttachments: GLsizei; const aAttachments: PGLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1145   TglInvalidateSubFramebuffer             = procedure(aTarget: GLenum; aNumAttachments: GLsizei; const aAttachments: PGLenum; aX: GLint; aY: GLint; aWidth: GLsizei; aHeight: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1146   TglTexStorage2D                         = procedure(aTarget: GLenum; aLevels: GLsizei; aInternalformat: GLenum; aWidth: GLsizei; aHeight: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1147   TglTexStorage3D                         = procedure(aTarget: GLenum; aLevels: GLsizei; aInternalformat: GLenum; aWidth: GLsizei; aHeight: GLsizei; aDepth: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1148   TglGetInternalformativ                  = procedure(aTarget: GLenum; aInternalformat: GLenum; aPname: GLenum; aBufSize: GLsizei; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1149
1150   { OpenGL ES 3.1 }
1151   TglDispatchCompute                      = procedure(aNumGroupsX: GLuint; aNumGroupsY: GLuint; aNumGroupsZ: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1152   TglDispatchComputeIndirect              = procedure(aIndirect: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1153   TglDrawArraysIndirect                   = procedure(aMode: GLenum; const aIndirect: PGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1154   TglDrawElementsIndirect                 = procedure(aMode: GLenum; aType: GLenum; const aIndirect: PGLvoid); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1155   TglFramebufferParameteri                = procedure(aTarget: GLenum; aPname: GLenum; aParam: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1156   TglGetFramebufferParameteriv            = procedure(aTarget: GLenum; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1157   TglGetProgramInterfaceiv                = procedure(aProgram: GLuint; aProgramInterface: GLenum; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1158   TglGetProgramResourceIndex              = function (aProgram: GLuint; aProgramInterface: GLenum; const aName: PGLchar): GLuint; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1159   TglGetProgramResourceName               = procedure(aProgram: GLuint; aProgramInterface: GLenum; aIndex: GLuint; aBufSize: GLsizei; aLength: PGLsizei; aName: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1160   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}
1161   TglGetProgramResourceLocation           = function (aProgram: GLuint; aProgramInterface: GLenum; const aName: PGLchar): GLint; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1162   TglUseProgramStages                     = procedure(aPipeline: GLuint; aStages: GLbitfield; aProgram: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1163   TglActiveShaderProgram                  = procedure(aPipeline: GLuint; aProgram: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1164   TglCreateShaderProgramv                 = function (aType: GLenum; aCount: GLsizei; const aStrings: PPGLchar): GLuint; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1165   TglBindProgramPipeline                  = procedure(aPipeline: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1166   TglDeleteProgramPipelines               = procedure(aN: GLsizei; const aPipelines: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1167   TglGenProgramPipelines                  = procedure(aN: GLsizei; aPipelines: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1168   TglIsProgramPipeline                    = function (aPipeline: GLuint): GLboolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1169   TglGetProgramPipelineiv                 = procedure(aPipeline: GLuint; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1170   TglProgramUniform1i                     = procedure(aProgram: GLuint; aLocation: GLint; aV0: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1171   TglProgramUniform2i                     = procedure(aProgram: GLuint; aLocation: GLint; aV0: GLint; aV1: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1172   TglProgramUniform3i                     = procedure(aProgram: GLuint; aLocation: GLint; aV0: GLint; aV1: GLint; aV2: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1173   TglProgramUniform4i                     = procedure(aProgram: GLuint; aLocation: GLint; aV0: GLint; aV1: GLint; aV2: GLint; aV3: GLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1174   TglProgramUniform1ui                    = procedure(aProgram: GLuint; aLocation: GLint; aV0: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1175   TglProgramUniform2ui                    = procedure(aProgram: GLuint; aLocation: GLint; aV0: GLuint; aV1: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1176   TglProgramUniform3ui                    = procedure(aProgram: GLuint; aLocation: GLint; aV0: GLuint; aV1: GLuint; aV2: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1177   TglProgramUniform4ui                    = procedure(aProgram: GLuint; aLocation: GLint; aV0: GLuint; aV1: GLuint; aV2: GLuint; aV3: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1178   TglProgramUniform1f                     = procedure(aProgram: GLuint; aLocation: GLint; aV0: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1179   TglProgramUniform2f                     = procedure(aProgram: GLuint; aLocation: GLint; aV0: GLfloat; aV1: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1180   TglProgramUniform3f                     = procedure(aProgram: GLuint; aLocation: GLint; aV0: GLfloat; aV1: GLfloat; aV2: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1181   TglProgramUniform4f                     = procedure(aProgram: GLuint; aLocation: GLint; aV0: GLfloat; aV1: GLfloat; aV2: GLfloat; aV3: GLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1182   TglProgramUniform1iv                    = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1183   TglProgramUniform2iv                    = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1184   TglProgramUniform3iv                    = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1185   TglProgramUniform4iv                    = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1186   TglProgramUniform1uiv                   = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1187   TglProgramUniform2uiv                   = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1188   TglProgramUniform3uiv                   = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1189   TglProgramUniform4uiv                   = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1190   TglProgramUniform1fv                    = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1191   TglProgramUniform2fv                    = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1192   TglProgramUniform3fv                    = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1193   TglProgramUniform4fv                    = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1194   TglProgramUniformMatrix2fv              = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1195   TglProgramUniformMatrix3fv              = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1196   TglProgramUniformMatrix4fv              = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1197   TglProgramUniformMatrix2x3fv            = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1198   TglProgramUniformMatrix3x2fv            = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1199   TglProgramUniformMatrix2x4fv            = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1200   TglProgramUniformMatrix4x2fv            = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1201   TglProgramUniformMatrix3x4fv            = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1202   TglProgramUniformMatrix4x3fv            = procedure(aProgram: GLuint; aLocation: GLint; aCount: GLsizei; aTranspose: GLboolean; const aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1203   TglValidateProgramPipeline              = procedure(aPipeline: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1204   TglGetProgramPipelineInfoLog            = procedure(aPipeline: GLuint; aBufSize: GLsizei; aLength: PGLsizei; aInfoLog: PGLchar); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1205   TglBindImageTexture                     = procedure(aUnit: GLuint; aTexture: GLuint; aLevel: GLint; aLayered: GLboolean; aLayer: GLint; aAccess: GLenum; aFormat: GLenum); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1206   TglGetBooleaniV                         = procedure(aTarget: GLenum; aIndex: GLuint; aData: PGLboolean); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1207   TglMemoryBarrier                        = procedure(aBarriers: GLbitfield); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1208   TglMemoryBarrierByRegion                = procedure(aBarriers: GLbitfield); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1209   TglTexStorage2DMultisample              = procedure(aTarget: GLenum; aSamples: GLsizei; aInternalformat: GLenum; aWidth: GLsizei; aHeight: GLsizei; aFixedsamplelocations: GLboolean); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1210   TglGetMultisamplefv                     = procedure(aPname: GLenum; aIndex: GLuint; aValue: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1211   TglSampleMaski                          = procedure(aMaskNumber: GLuint; aMask: GLbitfield); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1212   TglGetTexLevelParameteriv               = procedure(aTarget: GLenum; aLevel: GLint; aPname: GLenum; aParams: PGLint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1213   TglGetTexLevelParameterfv               = procedure(aTarget: GLenum; aLevel: GLint; aPname: GLenum; aParams: PGLfloat); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1214   TglBindVertexBuffer                     = procedure(aBindingindex: GLuint; aBuffer: GLuint; aOffset: PGLint; aStride: GLsizei); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1215   TglVertexAttribFormat                   = procedure(aAttribindex: GLuint; aSize: GLint; aType: GLenum; aNormalized: GLboolean; aRelativeoffset: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1216   TglVertexAttribIFormat                  = procedure(aAttribindex: GLuint; aSize: GLint; aType: GLenum; aRelativeoffset: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1217   TglVertexAttribBinding                  = procedure(aAttribindex: GLuint; aBindingindex: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1218   TglVertexBindingDivisor                 = procedure(aBindingindex: GLuint; aDivisor: GLuint); {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1219
1220
1221 var
1222   { *** PROCEDURES *** }
1223   { OpenGL ES 2.0 }
1224   glActiveTexture:                          TglActiveTexture;
1225   glAttachShader:                           TglAttachShader;
1226   glBindAttribLocation:                     TglBindAttribLocation;
1227   glBindBuffer:                             TglBindBuffer;
1228   glBindFramebuffer:                        TglBindFramebuffer;
1229   glBindRenderbuffer:                       TglBindRenderbuffer;
1230   glBindTexture:                            TglBindTexture;
1231   glBlendColor:                             TglBlendColor;
1232   glBlendEquation:                          TglBlendEquation;
1233   glBlendEquationSeparate:                  TglBlendEquationSeparate;
1234   glBlendFunc:                              TglBlendFunc;
1235   glBlendFuncSeparate:                      TglBlendFuncSeparate;
1236   glBufferData:                             TglBufferData;
1237   glBufferSubData:                          TglBufferSubData;
1238   glCheckFramebufferStatus:                 TglCheckFramebufferStatus;
1239   glClear:                                  TglClear;
1240   glClearColor:                             TglClearColor;
1241   glClearDepthf:                            TglClearDepthf;
1242   glClearStencil:                           TglClearStencil;
1243   glColorMask:                              TglColorMask;
1244   glCompileShader:                          TglCompileShader;
1245   glCompressedTexImage2D:                   TglCompressedTexImage2D;
1246   glCompressedTexSubImage2D:                TglCompressedTexSubImage2D;
1247   glCopyTexImage2D:                         TglCopyTexImage2D;
1248   glCopyTexSubImage2D:                      TglCopyTexSubImage2D;
1249   glCreateProgram:                          TglCreateProgram;
1250   glCreateShader:                           TglCreateShader;
1251   glCullFace:                               TglCullFace;
1252   glDeleteBuffers:                          TglDeleteBuffers;
1253   glDeleteFramebuffers:                     TglDeleteFramebuffers;
1254   glDeleteProgram:                          TglDeleteProgram;
1255   glDeleteRenderbuffers:                    TglDeleteRenderbuffers;
1256   glDeleteShader:                           TglDeleteShader;
1257   glDeleteTextures:                         TglDeleteTextures;
1258   glDepthFunc:                              TglDepthFunc;
1259   glDepthMask:                              TglDepthMask;
1260   glDepthRangef:                            TglDepthRangef;
1261   glDetachShader:                           TglDetachShader;
1262   glDisable:                                TglDisable;
1263   glDisableVertexAttribArray:               TglDisableVertexAttribArray;
1264   glDrawArrays:                             TglDrawArrays;
1265   glDrawElements:                           TglDrawElements;
1266   glEnable:                                 TglEnable;
1267   glEnableVertexAttribArray:                TglEnableVertexAttribArray;
1268   glFinish:                                 TglFinish;
1269   glFlush:                                  TglFlush;
1270   glFramebufferRenderbuffer:                TglFramebufferRenderbuffer;
1271   glFramebufferTexture2D:                   TglFramebufferTexture2D;
1272   glFrontFace:                              TglFrontFace;
1273   glGenBuffers:                             TglGenBuffers;
1274   glGenerateMipmap:                         TglGenerateMipmap;
1275   glGenFramebuffers:                        TglGenFramebuffers;
1276   glGenRenderbuffers:                       TglGenRenderbuffers;
1277   glGenTextures:                            TglGenTextures;
1278   glGetActiveAttrib:                        TglGetActiveAttrib;
1279   glGetActiveUniform:                       TglGetActiveUniform;
1280   glGetAttachedShaders:                     TglGetAttachedShaders;
1281   glGetAttribLocation:                      TglGetAttribLocation;
1282   glGetBooleanv:                            TglGetBooleanv;
1283   glGetBufferParameteriv:                   TglGetBufferParameteriv;
1284   glGetError:                               TglGetError;
1285   glGetFloatv:                              TglGetFloatv;
1286   glGetFramebufferAttachmentParameteriv:    TglGetFramebufferAttachmentParameteriv;
1287   glGetIntegerv:                            TglGetIntegerv;
1288   glGetProgramiv:                           TglGetProgramiv;
1289   glGetProgramInfoLog:                      TglGetProgramInfoLog;
1290   glGetRenderbufferParameteriv:             TglGetRenderbufferParameteriv;
1291   glGetShaderiv:                            TglGetShaderiv;
1292   glGetShaderInfoLog:                       TglGetShaderInfoLog;
1293   glGetShaderPrecisionFormat:               TglGetShaderPrecisionFormat;
1294   glGetShaderSource:                        TglGetShaderSource;
1295   glGetString:                              TglGetString;
1296   glGetTexParameterfv:                      TglGetTexParameterfv;
1297   glGetTexParameteriv:                      TglGetTexParameteriv;
1298   glGetUniformfv:                           TglGetUniformfv;
1299   glGetUniformiv:                           TglGetUniformiv;
1300   glGetUniformLocation:                     TglGetUniformLocation;
1301   glGetVertexAttribfv:                      TglGetVertexAttribfv;
1302   glGetVertexAttribiv:                      TglGetVertexAttribiv;
1303   glGetVertexAttribPointerv:                TglGetVertexAttribPointerv;
1304   glHint:                                   TglHint;
1305   glIsBuffer:                               TglIsBuffer;
1306   glIsEnabled:                              TglIsEnabled;
1307   glIsFramebuffer:                          TglIsFramebuffer;
1308   glIsProgram:                              TglIsProgram;
1309   glIsRenderbuffer:                         TglIsRenderbuffer;
1310   glIsShader:                               TglIsShader;
1311   glIsTexture:                              TglIsTexture;
1312   glLineWidth:                              TglLineWidth;
1313   glLinkProgram:                            TglLinkProgram;
1314   glPixelStorei:                            TglPixelStorei;
1315   glPolygonOffset:                          TglPolygonOffset;
1316   glReadPixels:                             TglReadPixels;
1317   glReleaseShaderCompiler:                  TglReleaseShaderCompiler;
1318   glRenderbufferStorage:                    TglRenderbufferStorage;
1319   glSampleCoverage:                         TglSampleCoverage;
1320   glScissor:                                TglScissor;
1321   glShaderBinary:                           TglShaderBinary;
1322   glShaderSource:                           TglShaderSource;
1323   glStencilFunc:                            TglStencilFunc;
1324   glStencilFuncSeparate:                    TglStencilFuncSeparate;
1325   glStencilMask:                            TglStencilMask;
1326   glStencilMaskSeparate:                    TglStencilMaskSeparate;
1327   glStencilOp:                              TglStencilOp;
1328   glStencilOpSeparate:                      TglStencilOpSeparate;
1329   glTexImage2D:                             TglTexImage2D;
1330   glTexParameterf:                          TglTexParameterf;
1331   glTexParameterfv:                         TglTexParameterfv;
1332   glTexParameteri:                          TglTexParameteri;
1333   glTexParameteriv:                         TglTexParameteriv;
1334   glTexSubImage2D:                          TglTexSubImage2D;
1335   glUniform1f:                              TglUniform1f;
1336   glUniform1fv:                             TglUniform1fv;
1337   glUniform1i:                              TglUniform1i;
1338   glUniform1iv:                             TglUniform1iv;
1339   glUniform2f:                              TglUniform2f;
1340   glUniform2fv:                             TglUniform2fv;
1341   glUniform2i:                              TglUniform2i;
1342   glUniform2iv:                             TglUniform2iv;
1343   glUniform3f:                              TglUniform3f;
1344   glUniform3fv:                             TglUniform3fv;
1345   glUniform3i:                              TglUniform3i;
1346   glUniform3iv:                             TglUniform3iv;
1347   glUniform4f:                              TglUniform4f;
1348   glUniform4fv:                             TglUniform4fv;
1349   glUniform4i:                              TglUniform4i;
1350   glUniform4iv:                             TglUniform4iv;
1351   glUniformMatrix2fv:                       TglUniformMatrix2fv;
1352   glUniformMatrix3fv:                       TglUniformMatrix3fv;
1353   glUniformMatrix4fv:                       TglUniformMatrix4fv;
1354   glUseProgram:                             TglUseProgram;
1355   glValidateProgram:                        TglValidateProgram;
1356   glVertexAttrib1f:                         TglVertexAttrib1f;
1357   glVertexAttrib1fv:                        TglVertexAttrib1fv;
1358   glVertexAttrib2f:                         TglVertexAttrib2f;
1359   glVertexAttrib2fv:                        TglVertexAttrib2fv;
1360   glVertexAttrib3f:                         TglVertexAttrib3f;
1361   glVertexAttrib3fv:                        TglVertexAttrib3fv;
1362   glVertexAttrib4f:                         TglVertexAttrib4f;
1363   glVertexAttrib4fv:                        TglVertexAttrib4fv;
1364   glVertexAttribPointer:                    TglVertexAttribPointer;
1365   glViewport:                               TglViewport;
1366
1367   { OpenGL ES 3.0 }
1368   glReadBuffer:                             TglReadBuffer;
1369   glDrawRangeElements:                      TglDrawRangeElements;
1370   glTexImage3D:                             TglTexImage3D;
1371   glTexSubImage3D:                          TglTexSubImage3D;
1372   glCopyTexSubImage3D:                      TglCopyTexSubImage3D;
1373   glCompressedTexImage3D:                   TglCompressedTexImage3D;
1374   glCompressedTexSubImage3D:                TglCompressedTexSubImage3D;
1375   glGenQueries:                             TglGenQueries;
1376   glDeleteQueries:                          TglDeleteQueries;
1377   glIsQuery:                                TglIsQuery;
1378   glBeginQuery:                             TglBeginQuery;
1379   glEndQuery:                               TglEndQuery;
1380   glGetQueryiv:                             TglGetQueryiv;
1381   glGetQueryObjectuiv:                      TglGetQueryObjectuiv;
1382   glUnmapBuffer:                            TglUnmapBuffer;
1383   glGetBufferPointerv:                      TglGetBufferPointerv;
1384   glDrawBuffers:                            TglDrawBuffers;
1385   glUniformMatrix2x3fv:                     TglUniformMatrix2x3fv;
1386   glUniformMatrix3x2fv:                     TglUniformMatrix3x2fv;
1387   glUniformMatrix2x4fv:                     TglUniformMatrix2x4fv;
1388   glUniformMatrix4x2fv:                     TglUniformMatrix4x2fv;
1389   glUniformMatrix3x4fv:                     TglUniformMatrix3x4fv;
1390   glUniformMatrix4x3fv:                     TglUniformMatrix4x3fv;
1391   glBlitFramebuffer:                        TglBlitFramebuffer;
1392   glRenderbufferStorageMultisample:         TglRenderbufferStorageMultisample;
1393   glFramebufferTextureLayer:                TglFramebufferTextureLayer;
1394   glMapBufferRange:                         TglMapBufferRange;
1395   glFlushMappedBufferRange:                 TglFlushMappedBufferRange;
1396   glBindVertexArray:                        TglBindVertexArray;
1397   glDeleteVertexArrays:                     TglDeleteVertexArrays;
1398   glGenVertexArrays:                        TglGenVertexArrays;
1399   glIsVertexArray:                          TglIsVertexArray;
1400   glGetIntegeri_v:                          TglGetIntegeri_v;
1401   glBeginTransformFeedback:                 TglBeginTransformFeedback;
1402   glEndTransformFeedback:                   TglEndTransformFeedback;
1403   glBindBufferRange:                        TglBindBufferRange;
1404   glBindBufferBase:                         TglBindBufferBase;
1405   glTransformFeedbackVaryings:              TglTransformFeedbackVaryings;
1406   glGetTransformFeedbackVarying:            TglGetTransformFeedbackVarying;
1407   glVertexAttribIPointer:                   TglVertexAttribIPointer;
1408   glGetVertexAttribIiv:                     TglGetVertexAttribIiv;
1409   glGetVertexAttribIuiv:                    TglGetVertexAttribIuiv;
1410   glVertexAttribI4i:                        TglVertexAttribI4i;
1411   glVertexAttribI4ui:                       TglVertexAttribI4ui;
1412   glVertexAttribI4iv:                       TglVertexAttribI4iv;
1413   glVertexAttribI4uiv:                      TglVertexAttribI4uiv;
1414   glGetUniformuiv:                          TglGetUniformuiv;
1415   glGetFragDataLocation:                    TglGetFragDataLocation;
1416   glUniform1ui:                             TglUniform1ui;
1417   glUniform2ui:                             TglUniform2ui;
1418   glUniform3ui:                             TglUniform3ui;
1419   glUniform4ui:                             TglUniform4ui;
1420   glUniform1uiv:                            TglUniform1uiv;
1421   glUniform2uiv:                            TglUniform2uiv;
1422   glUniform3uiv:                            TglUniform3uiv;
1423   glUniform4uiv:                            TglUniform4uiv;
1424   glClearBufferiv:                          TglClearBufferiv;
1425   glClearBufferuiv:                         TglClearBufferuiv;
1426   glClearBufferfv:                          TglClearBufferfv;
1427   glClearBufferfi:                          TglClearBufferfi;
1428   glGetStringi:                             TglGetStringi;
1429   glCopyBufferSubData:                      TglCopyBufferSubData;
1430   glGetUniformIndices:                      TglGetUniformIndices;
1431   glGetActiveUniformsiv:                    TglGetActiveUniformsiv;
1432   glGetUniformBlockIndex:                   TglGetUniformBlockIndex;
1433   glGetActiveUniformBlockiv:                TglGetActiveUniformBlockiv;
1434   glGetActiveUniformBlockName:              TglGetActiveUniformBlockName;
1435   glUniformBlockBinding:                    TglUniformBlockBinding;
1436   glDrawArraysInstanced:                    TglDrawArraysInstanced;
1437   glDrawElementsInstanced:                  TglDrawElementsInstanced;
1438   glFenceSync:                              TglFenceSync;
1439   glIsSync:                                 TglIsSync;
1440   glDeleteSync:                             TglDeleteSync;
1441   glClientWaitSync:                         TglClientWaitSync;
1442   glWaitSync:                               TglWaitSync;
1443   glGetInteger64v:                          TglGetInteger64v;
1444   glGetSynciv:                              TglGetSynciv;
1445   glGetInteger64i_v:                        TglGetInteger64i_v;
1446   glGetBufferParameteri64v:                 TglGetBufferParameteri64v;
1447   glGenSamplers:                            TglGenSamplers;
1448   glDeleteSamplers:                         TglDeleteSamplers;
1449   glIsSampler:                              TglIsSampler;
1450   glBindSampler:                            TglBindSampler;
1451   glSamplerParameteri:                      TglSamplerParameteri;
1452   glSamplerParameteriv:                     TglSamplerParameteriv;
1453   glSamplerParameterf:                      TglSamplerParameterf;
1454   glSamplerParameterfv:                     TglSamplerParameterfv;
1455   glGetSamplerParameteriv:                  TglGetSamplerParameteriv;
1456   glGetSamplerParameterfv:                  TglGetSamplerParameterfv;
1457   glVertexAttribDivisor:                    TglVertexAttribDivisor;
1458   glBindTransformFeedback:                  TglBindTransformFeedback;
1459   glDeleteTransformFeedbacks:               TglDeleteTransformFeedbacks;
1460   glGenTransformFeedbacks:                  TglGenTransformFeedbacks;
1461   glIsTransformFeedback:                    TglIsTransformFeedback;
1462   glPauseTransformFeedback:                 TglPauseTransformFeedback;
1463   glResumeTransformFeedback:                TglResumeTransformFeedback;
1464   glGetProgramBinary:                       TglGetProgramBinary;
1465   glProgramBinary:                          TglProgramBinary;
1466   glProgramParameteri:                      TglProgramParameteri;
1467   glInvalidateFramebuffer:                  TglInvalidateFramebuffer;
1468   glInvalidateSubFramebuffer:               TglInvalidateSubFramebuffer;
1469   glTexStorage2D:                           TglTexStorage2D;
1470   glTexStorage3D:                           TglTexStorage3D;
1471   glGetInternalformativ:                    TglGetInternalformativ;
1472
1473   { OpenGL ES 3.1 }
1474   glDispatchCompute:                        TglDispatchCompute;
1475   glDispatchComputeIndirect:                TglDispatchComputeIndirect;
1476   glDrawArraysIndirect:                     TglDrawArraysIndirect;
1477   glDrawElementsIndirect:                   TglDrawElementsIndirect;
1478   glFramebufferParameteri:                  TglFramebufferParameteri;
1479   glGetFramebufferParameteriv:              TglGetFramebufferParameteriv;
1480   glGetProgramInterfaceiv:                  TglGetProgramInterfaceiv;
1481   glGetProgramResourceIndex:                TglGetProgramResourceIndex;
1482   glGetProgramResourceName:                 TglGetProgramResourceName;
1483   glGetProgramResourceiv:                   TglGetProgramResourceiv;
1484   glGetProgramResourceLocation:             TglGetProgramResourceLocation;
1485   glUseProgramStages:                       TglUseProgramStages;
1486   glActiveShaderProgram:                    TglActiveShaderProgram;
1487   glCreateShaderProgramv:                   TglCreateShaderProgramv;
1488   glBindProgramPipeline:                    TglBindProgramPipeline;
1489   glDeleteProgramPipelines:                 TglDeleteProgramPipelines;
1490   glGenProgramPipelines:                    TglGenProgramPipelines;
1491   glIsProgramPipeline:                      TglIsProgramPipeline;
1492   glGetProgramPipelineiv:                   TglGetProgramPipelineiv;
1493   glProgramUniform1i:                       TglProgramUniform1i;
1494   glProgramUniform2i:                       TglProgramUniform2i;
1495   glProgramUniform3i:                       TglProgramUniform3i;
1496   glProgramUniform4i:                       TglProgramUniform4i;
1497   glProgramUniform1ui:                      TglProgramUniform1ui;
1498   glProgramUniform2ui:                      TglProgramUniform2ui;
1499   glProgramUniform3ui:                      TglProgramUniform3ui;
1500   glProgramUniform4ui:                      TglProgramUniform4ui;
1501   glProgramUniform1f:                       TglProgramUniform1f;
1502   glProgramUniform2f:                       TglProgramUniform2f;
1503   glProgramUniform3f:                       TglProgramUniform3f;
1504   glProgramUniform4f:                       TglProgramUniform4f;
1505   glProgramUniform1iv:                      TglProgramUniform1iv;
1506   glProgramUniform2iv:                      TglProgramUniform2iv;
1507   glProgramUniform3iv:                      TglProgramUniform3iv;
1508   glProgramUniform4iv:                      TglProgramUniform4iv;
1509   glProgramUniform1uiv:                     TglProgramUniform1uiv;
1510   glProgramUniform2uiv:                     TglProgramUniform2uiv;
1511   glProgramUniform3uiv:                     TglProgramUniform3uiv;
1512   glProgramUniform4uiv:                     TglProgramUniform4uiv;
1513   glProgramUniform1fv:                      TglProgramUniform1fv;
1514   glProgramUniform2fv:                      TglProgramUniform2fv;
1515   glProgramUniform3fv:                      TglProgramUniform3fv;
1516   glProgramUniform4fv:                      TglProgramUniform4fv;
1517   glProgramUniformMatrix2fv:                TglProgramUniformMatrix2fv;
1518   glProgramUniformMatrix3fv:                TglProgramUniformMatrix3fv;
1519   glProgramUniformMatrix4fv:                TglProgramUniformMatrix4fv;
1520   glProgramUniformMatrix2x3fv:              TglProgramUniformMatrix2x3fv;
1521   glProgramUniformMatrix3x2fv:              TglProgramUniformMatrix3x2fv;
1522   glProgramUniformMatrix2x4fv:              TglProgramUniformMatrix2x4fv;
1523   glProgramUniformMatrix4x2fv:              TglProgramUniformMatrix4x2fv;
1524   glProgramUniformMatrix3x4fv:              TglProgramUniformMatrix3x4fv;
1525   glProgramUniformMatrix4x3fv:              TglProgramUniformMatrix4x3fv;
1526   glValidateProgramPipeline:                TglValidateProgramPipeline;
1527   glGetProgramPipelineInfoLog:              TglGetProgramPipelineInfoLog;
1528   glBindImageTexture:                       TglBindImageTexture;
1529   glGetBooleaniV:                           TglGetBooleaniV;
1530   glMemoryBarrier:                          TglMemoryBarrier;
1531   glMemoryBarrierByRegion:                  TglMemoryBarrierByRegion;
1532   glTexStorage2DMultisample:                TglTexStorage2DMultisample;
1533   glGetMultisamplefv:                       TglGetMultisamplefv;
1534   glSampleMaski:                            TglSampleMaski;
1535   glGetTexLevelParameteriv:                 TglGetTexLevelParameteriv;
1536   glGetTexLevelParameterfv:                 TglGetTexLevelParameterfv;
1537   glBindVertexBuffer:                       TglBindVertexBuffer;
1538   glVertexAttribFormat:                     TglVertexAttribFormat;
1539   glVertexAttribIFormat:                    TglVertexAttribIFormat;
1540   glVertexAttribBinding:                    TglVertexAttribBinding;
1541   glVertexBindingDivisor:                   TglVertexBindingDivisor;
1542
1543
1544 { ===================================================== EGL ========================================================== }
1545 type
1546   EGLint                = Integer;
1547   EGLboolean            = Cardinal;
1548   EGLenum               = Cardinal;
1549   EGLConfig             = Pointer;
1550   EGLContext            = Pointer;
1551   EGLDisplay            = Pointer;
1552   EGLSurface            = Pointer;
1553   EGLClientBuffer       = Pointer;
1554   EGLNativeDisplayType  = Pointer;
1555   EGLNativePixmapType   = Pointer;
1556   EGLNativeWindowType   = packed record
1557      element: Cardinal;
1558      width: Integer;
1559      height: Integer;
1560   end;
1561
1562   PEGLint               = ^EGLint;
1563   PEGLboolean           = ^EGLboolean;
1564   PEGLenum              = ^EGLenum;
1565   PEGLConfig            = ^EGLConfig;
1566   PEGLContext           = ^EGLContext;
1567   PEGLDisplay           = ^EGLDisplay;
1568   PEGLSurface           = ^EGLSurface;
1569   PEGLClientBuffer      = ^EGLClientBuffer;
1570   PEGLNativeDisplayType = ^EGLNativeDisplayType;
1571   PEGLNativePixmapType  = ^EGLNativePixmapType;
1572   PEGLNativeWindowType  = ^EGLNativeWindowType;
1573
1574 const
1575   EGL_FALSE: EGLboolean = 0;
1576   EGL_TRUE:  EGLboolean = 1;
1577
1578   EGL_DEFAULT_DISPLAY:  EGLNativeDisplayType  = nil;
1579   EGL_NO_CONTEXT:       EGLContext              = nil;
1580   EGL_NO_DISPLAY:                         EGLDisplay            = nil;
1581   EGL_NO_SURFACE:                         EGLSurface            = nil;
1582
1583   EGL_DONT_CARE: EGLint = -1;
1584
1585   EGL_SUCCESS                         = $3000;
1586   EGL_NOT_INITIALIZED                 = $3001;
1587   EGL_BAD_ACCESS                      = $3002;
1588   EGL_BAD_ALLOC                       = $3003;
1589   EGL_BAD_ATTRIBUTE                   = $3004;
1590   EGL_BAD_CONFIG                      = $3005;
1591   EGL_BAD_CONTEXT                     = $3006;
1592   EGL_BAD_CURRENT_SURFACE             = $3007;
1593   EGL_BAD_DISPLAY                     = $3008;
1594   EGL_BAD_MATCH                       = $3009;
1595   EGL_BAD_NATIVE_PIXMAP               = $300A;
1596   EGL_BAD_NATIVE_WINDOW               = $300B;
1597   EGL_BAD_PARAMETER                   = $300C;
1598   EGL_BAD_SURFACE                     = $300D;
1599   EGL_CONTEXT_LOST                    = $300E;
1600
1601   EGL_BUFFER_SIZE                     = $3020;
1602   EGL_ALPHA_SIZE                      = $3021;
1603   EGL_BLUE_SIZE                       = $3022;
1604   EGL_GREEN_SIZE                      = $3023;
1605   EGL_RED_SIZE                        = $3024;
1606   EGL_DEPTH_SIZE                      = $3025;
1607   EGL_STENCIL_SIZE                    = $3026;
1608   EGL_CONFIG_CAVEAT                   = $3027;
1609   EGL_CONFIG_ID                       = $3028;
1610   EGL_LEVEL                           = $3029;
1611   EGL_MAX_PBUFFER_HEIGHT              = $302A;
1612   EGL_MAX_PBUFFER_PIXELS              = $302B;
1613   EGL_MAX_PBUFFER_WIDTH               = $302C;
1614   EGL_NATIVE_RENDERABLE               = $302D;
1615   EGL_NATIVE_VISUAL_ID                = $302E;
1616   EGL_NATIVE_VISUAL_TYPE              = $302F;
1617   EGL_SAMPLES                         = $3031;
1618   EGL_SAMPLE_BUFFERS                  = $3032;
1619   EGL_SURFACE_TYPE                    = $3033;
1620   EGL_TRANSPARENT_TYPE                = $3034;
1621   EGL_TRANSPARENT_BLUE_VALUE          = $3035;
1622   EGL_TRANSPARENT_GREEN_VALUE         = $3036;
1623   EGL_TRANSPARENT_RED_VALUE           = $3037;
1624   EGL_NONE                            = $3038;
1625   EGL_BIND_TO_TEXTURE_RGB             = $3039;
1626   EGL_BIND_TO_TEXTURE_RGBA            = $303A;
1627   EGL_MIN_SWAP_INTERVAL               = $303B;
1628   EGL_MAX_SWAP_INTERVAL               = $303C;
1629   EGL_LUMINANCE_SIZE                  = $303D;
1630   EGL_ALPHA_MASK_SIZE                 = $303E;
1631   EGL_COLOR_BUFFER_TYPE               = $303F;
1632   EGL_RENDERABLE_TYPE                 = $3040;
1633   EGL_MATCH_NATIVE_PIXMAP             = $3041;
1634   EGL_CONFORMANT                      = $3042;
1635
1636   EGL_SLOW_CONFIG                     = $3050;
1637   EGL_NON_CONFORMANT_CONFIG           = $3051;
1638   EGL_TRANSPARENT_RGB                 = $3052;
1639   EGL_RGB_BUFFER                      = $308E;
1640   EGL_LUMINANCE_BUFFER                = $308F;
1641
1642   EGL_NO_TEXTURE                      = $305C;
1643   EGL_TEXTURE_RGB                     = $305D;
1644   EGL_TEXTURE_RGBA                    = $305E;
1645   EGL_TEXTURE_2D                      = $305F;
1646
1647   EGL_PBUFFER_BIT                     = $0001;
1648   EGL_PIXMAP_BIT                      = $0002;
1649   EGL_WINDOW_BIT                      = $0004;
1650   EGL_VG_COLORSPACE_LINEAR_BIT        = $0020;
1651   EGL_VG_ALPHA_FORMAT_PRE_BIT         = $0040;
1652   EGL_MULTISAMPLE_RESOLVE_BOX_BIT     = $0200;
1653   EGL_SWAP_BEHAVIOR_PRESERVED_BIT     = $0400;
1654
1655   EGL_OPENGL_ES_BIT                   = $0001;
1656   EGL_OPENVG_BIT                      = $0002;
1657   EGL_OPENGL_ES2_BIT                  = $0004;
1658   EGL_OPENGL_BIT                      = $0008;
1659
1660   EGL_VENDOR                          = $3053;
1661   EGL_VERSION                         = $3054;
1662   EGL_EXTENSIONS                      = $3055;
1663   EGL_CLIENT_APIS                     = $308D;
1664
1665   EGL_HEIGHT                          = $3056;
1666   EGL_WIDTH                           = $3057;
1667   EGL_LARGEST_PBUFFER                 = $3058;
1668   EGL_TEXTURE_FORMAT                  = $3080;
1669   EGL_TEXTURE_TARGET                  = $3081;
1670   EGL_MIPMAP_TEXTURE                  = $3082;
1671   EGL_MIPMAP_LEVEL                    = $3083;
1672   EGL_RENDER_BUFFER                   = $3086;
1673   EGL_VG_COLORSPACE                   = $3087;
1674   EGL_VG_ALPHA_FORMAT                 = $3088;
1675   EGL_HORIZONTAL_RESOLUTION           = $3090;
1676   EGL_VERTICAL_RESOLUTION             = $3091;
1677   EGL_PIXEL_ASPECT_RATIO              = $3092;
1678   EGL_SWAP_BEHAVIOR                   = $3093;
1679   EGL_MULTISAMPLE_RESOLVE             = $3099;
1680
1681   EGL_BACK_BUFFER                     = $3084;
1682   EGL_SINGLE_BUFFER                   = $3085;
1683
1684   EGL_VG_COLORSPACE_sRGB              = $3089;
1685   EGL_VG_COLORSPACE_LINEAR            = $308A;
1686
1687   EGL_VG_ALPHA_FORMAT_NONPRE          = $308B;
1688   EGL_VG_ALPHA_FORMAT_PRE             = $308C;
1689
1690   EGL_DISPLAY_SCALING                 = 10000;
1691
1692   EGL_UNKNOWN: EGLint                 = -1;
1693
1694   EGL_BUFFER_PRESERVED                = $3094;
1695   EGL_BUFFER_DESTROYED                = $3095;
1696
1697   EGL_OPENVG_IMAGE                    = $3096;
1698
1699   EGL_CONTEXT_CLIENT_TYPE             = $3097;
1700
1701   EGL_CONTEXT_CLIENT_VERSION          = $3098;
1702
1703   EGL_MULTISAMPLE_RESOLVE_DEFAULT     = $309A;
1704   EGL_MULTISAMPLE_RESOLVE_BOX         = $309B;
1705
1706   EGL_OPENGL_ES_API                   = $30A0;
1707   EGL_OPENVG_API                      = $30A1;
1708   EGL_OPENGL_API                      = $30A2;
1709
1710   EGL_DRAW                            = $3059;
1711   EGL_READ                            = $305A;
1712
1713   EGL_CORE_NATIVE_ENGINE              = $305B;
1714
1715   EGL_COLORSPACE                      = EGL_VG_COLORSPACE;
1716   EGL_ALPHA_FORMAT                    = EGL_VG_ALPHA_FORMAT;
1717   EGL_COLORSPACE_sRGB                 = EGL_VG_COLORSPACE_sRGB;
1718   EGL_COLORSPACE_LINEAR               = EGL_VG_COLORSPACE_LINEAR;
1719   EGL_ALPHA_FORMAT_NONPRE             = EGL_VG_ALPHA_FORMAT_NONPRE;
1720   EGL_ALPHA_FORMAT_PRE                = EGL_VG_ALPHA_FORMAT_PRE;
1721
1722 type
1723   TeglGetError  = function: EGLint; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1724
1725   TeglGetDisplay  = function(aDisplayID: EGLNativeDisplayType): EGLDisplay; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1726   TeglInitialize  = function(aDisplay: EGLDisplay; aMajor, aMinor: PEGLint): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1727   TeglTerminate   = function(aDisplay: EGLDisplay): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1728
1729   TeglQueryString = function(aDisplay: EGLDisplay; aName: EGLint): PAnsiChar; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1730
1731   TeglGetConfigs      = function(aDisplay: EGLDisplay; aConfigs: PEGLConfig; aConfigSize: EGLint; aNumConfig: PEGLint): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1732   TeglChooseConfig    = function(aDisplay: EGLDisplay; const aAttribList: PEGLint; aConfigs: PEGLConfig; aConfigSize: EGLint; aNumConfig: PEGLint): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1733   TeglGetConfigAttrib = function(aDisplay: EGLDisplay; aConfig: EGLConfig; aAttribute: EGLint; aValue : PEGLint): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1734
1735   TeglCreateWindowSurface   = function(aDisplay: EGLDisplay; aConfig: EGLConfig; aWinType: PEGLNativeWindowType; const aAttribList: PEGLint): EGLSurface; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1736   TeglCreatePbufferSurface  = function(aDisplay: EGLDisplay; aConfig: EGLConfig; const aAttribList: PEGLint): EGLSurface; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1737   TeglCreatePixmapSurface   = function(aDisplay: EGLDisplay; aConfig: EGLConfig; aPixmap: EGLNativePixmapType; const aAttribList: PEGLint): EGLSurface; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1738   TeglDestroySurface        = function(aDisplay: EGLDisplay; aSurface: EGLSurface): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1739   TeglQuerySurface          = function(aDisplay: EGLDisplay; aSurface: EGLSurface; aAttribute: EGLint; aValue: PEGLint): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1740
1741   TeglBindAPI   = function(aApi: EGLenum): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1742   TeglQueryAPI  = function: EGLenum; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1743
1744   TeglWaitClient = function: EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1745
1746   TeglReleaseThread = function: EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1747
1748   TeglCreatePbufferFromClientBuffer = function(aDisplay: EGLDisplay; aBufType: EGLenum; aBuffer: EGLClientBuffer; aConfig: EGLConfig; const aAttribList: PEGLint): EGLSurface; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1749
1750   TeglSurfaceAttrib   = function(aDisplay: EGLDisplay; aSurface: EGLSurface; aAttribute: EGLint; aValue: EGLint): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1751   TeglBindTexImage    = function(aDisplay: EGLDisplay; aSurface: EGLSurface; aBuffer: EGLint): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1752   TeglReleaseTexImage = function(aDisplay: EGLDisplay; aSurface: EGLSurface; aBuffer: EGLint): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1753
1754   TeglSwapInterval = function(aDisplay: EGLDisplay; aInterval: EGLint): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1755
1756   TeglCreateContext   = function(aDisplay: EGLDisplay; aConfig: EGLConfig; aShareContext: EGLContext; const aAttribList: PEGLint): EGLContext; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1757   TeglDestroyContext  = function(aDisplay: EGLDisplay; aContext: EGLContext): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1758   TeglMakeCurrent     = function(aDisplay: EGLDisplay; aDraw: EGLSurface; aRead: EGLSurface; aContext: EGLContext): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1759
1760   TeglGetCurrentContext = function: EGLContext; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1761   TeglGetCurrentSurface = function(aReadDraw: EGLint): EGLSurface; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1762   TeglGetCurrentDisplay = function: EGLDisplay; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1763   TeglQueryContext      = function(aDisplay: EGLDisplay; aContext: EGLContext; aAttribute: EGLint; aValue: PEGLint): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1764
1765   TeglWaitGL      = function: EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1766   TeglWaitNative  = function(aEngine: EGLint): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1767   TeglSwapBuffers = function(aDisplay: EGLDisplay; aSurface: EGLSurface): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1768   TeglCopyBuffers = function(aDisplay: EGLDisplay; aSurface: EGLSurface; aTarget: EGLNativePixmapType): EGLBoolean; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1769
1770   TeglGetProcAddress = function(const aProcName: PAnsiChar): Pointer; {$IFDEF DGL_WIN}stdcall;{$ELSE}cdecl;{$ENDIF}
1771
1772
1773 var
1774   eglGetError: TeglGetError;
1775
1776   eglGetDisplay:  TeglGetDisplay;
1777   eglInitialize:  TeglInitialize;
1778   eglTerminate:   TeglTerminate;
1779
1780   eglQueryString: TeglQueryString;
1781
1782   eglGetConfigs:      TeglGetConfigs;
1783   eglChooseConfig:    TeglChooseConfig;
1784   eglGetConfigAttrib: TeglGetConfigAttrib;
1785
1786   eglCreateWindowSurface:   TeglCreateWindowSurface;
1787   eglCreatePbufferSurface:  TeglCreatePbufferSurface;
1788   eglCreatePixmapSurface:   TeglCreatePixmapSurface;
1789   eglDestroySurface:        TeglDestroySurface;
1790   eglQuerySurface:          TeglQuerySurface;
1791
1792   eglBindAPI:   TeglBindAPI;
1793   eglQueryAPI:  TeglQueryAPI;
1794
1795   eglWaitClient: TeglWaitClient;
1796
1797   eglReleaseThread: TeglReleaseThread;
1798
1799   eglCreatePbufferFromClientBuffer: TeglCreatePbufferFromClientBuffer;
1800
1801   eglSurfaceAttrib:   TeglSurfaceAttrib;
1802   eglBindTexImage:    TeglBindTexImage;
1803   eglReleaseTexImage: TeglReleaseTexImage;
1804
1805   eglSwapInterval: TeglSwapInterval;
1806
1807   eglCreateContext:   TeglCreateContext;
1808   eglDestroyContext:  TeglDestroyContext;
1809   eglMakeCurrent:     TeglMakeCurrent;
1810
1811   eglGetCurrentContext: TeglGetCurrentContext;
1812   eglGetCurrentSurface: TeglGetCurrentSurface;
1813   eglGetCurrentDisplay: TeglGetCurrentDisplay;
1814   eglQueryContext:      TeglQueryContext;
1815
1816   eglWaitGL:      TeglWaitGL;
1817   eglWaitNative:  TeglWaitNative;
1818   eglSwapBuffers: TeglSwapBuffers;
1819   eglCopyBuffers: TeglCopyBuffers;
1820
1821   eglGetProcAddress: TeglGetProcAddress;
1822
1823
1824 { =================================================== DelphiGL ======================================================= }
1825 type
1826   EdglOpenGLES = class(Exception);
1827   EeglError = class(EdglOpenGLES)
1828   public
1829     ErrorCode: EGLint;
1830     constructor Create(const msg: string; const aErrorCode: EGLint);
1831   end;
1832
1833   TdglRenderContext = packed record
1834     Display: EGLDisplay;
1835     Surface: EGLSurface;
1836     Context: EGLContext;
1837   end;
1838
1839 function InitOpenGLES(const aOpenGLESLibName: String = LIBNAME_OPENGLES; aEGLLibName: String = LIBNAME_EGL): Boolean;
1840
1841 function CreateRenderingContext(const aDisplayType: EGLNativeDisplayType; const aWindowType: PEGLNativeWindowType; const aAttributes: PEGLint): TdglRenderContext;
1842 procedure DestroyRenderingContext(const aContext: TdglRenderContext);
1843 function ActivateRenderingContext(const aContext: TdglRenderContext): Boolean;
1844 function DeactivateRenderingContext(const aContext: TdglRenderContext): Boolean;
1845 procedure SwapBuffers(const aContext: TdglRenderContext);
1846
1847 procedure ReadExtensions;
1848
1849 implementation
1850
1851 var
1852   LibHandleOpenGLES: Pointer = nil;
1853   LibHandleEGL:      Pointer = nil;
1854
1855 function dglLoadLibrary(const aName: PChar): Pointer;
1856 begin
1857   {$IFDEF DGL_LINUX}
1858   result := dlopen(aName, RTLD_LAZY);
1859   {$ENDIF}
1860 end;
1861
1862 function dglGetProcAddress(const aProcName: PAnsiChar): Pointer;
1863 begin
1864   result := nil;
1865
1866   if Assigned(LibHandleOpenGLES) then
1867     result := dlsym(LibHandleOpenGLES, aProcName);
1868
1869   if not Assigned(result) and Assigned(eglGetProcAddress) then
1870     result := eglGetProcAddress(aProcName);
1871
1872   if not Assigned(result) and Assigned(LibHandleEGL) then
1873     result := dlsym(LibHandleEGL, aProcName);
1874 end;
1875
1876 function dglFreeAndNilLibrary(var aLibHandle: Pointer): Boolean;
1877 begin
1878   if Assigned(aLibHandle) then begin
1879     {$IFDEF DGL_LINUX}
1880     result := (dlclose(aLibHandle) = 0);
1881     aLibHandle := nil;
1882     {$ENDIF}
1883   end else
1884     result := false;
1885 end;
1886
1887 procedure ReadOpenGLCore;
1888 begin
1889
1890 end;
1891
1892 function InitOpenGLES(const aOpenGLESLibName: String; aEGLLibName: String): Boolean;
1893 begin
1894   result := true;
1895
1896   if Assigned(LibHandleOpenGLES) then
1897     dglFreeAndNilLibrary(LibHandleOpenGLES);
1898
1899   if Assigned(LibHandleEGL) then
1900     dglFreeAndNilLibrary(LibHandleEGL);
1901
1902   LibHandleOpenGLES := dglLoadLibrary(PChar(aOpenGLESLibName));
1903   LibHandleEGL      := dglLoadLibrary(PChar(aEGLLibName));
1904
1905   // load EGL procedures
1906   if Assigned(LibHandleEGL) then begin
1907     eglGetProcAddress                 := dglGetProcAddress('eglGetProcAddress');
1908     eglGetError                       := dglGetProcAddress('eglGetError');
1909     eglGetDisplay                     := dglGetProcAddress('eglGetDisplay');
1910     eglInitialize                     := dglGetProcAddress('eglInitialize');
1911     eglTerminate                      := dglGetProcAddress('eglTerminate');
1912     eglQueryString                    := dglGetProcAddress('eglQueryString');
1913     eglGetConfigs                     := dglGetProcAddress('eglGetConfigs');
1914     eglChooseConfig                   := dglGetProcAddress('eglChooseConfig');
1915     eglGetConfigAttrib                := dglGetProcAddress('eglGetConfigAttrib');
1916     eglCreateWindowSurface            := dglGetProcAddress('eglCreateWindowSurface');
1917     eglCreatePbufferSurface           := dglGetProcAddress('eglCreatePbufferSurface');
1918     eglCreatePixmapSurface            := dglGetProcAddress('eglCreatePixmapSurface');
1919     eglDestroySurface                 := dglGetProcAddress('eglDestroySurface');
1920     eglQuerySurface                   := dglGetProcAddress('eglQuerySurface');
1921     eglBindAPI                        := dglGetProcAddress('eglBindAPI');
1922     eglQueryAPI                       := dglGetProcAddress('eglQueryAPI');
1923     eglWaitClient                     := dglGetProcAddress('eglWaitClient');
1924     eglReleaseThread                  := dglGetProcAddress('eglReleaseThread');
1925     eglCreatePbufferFromClientBuffer  := dglGetProcAddress('eglCreatePbufferFromClientBuffer');
1926     eglSurfaceAttrib                  := dglGetProcAddress('eglSurfaceAttrib');
1927     eglBindTexImage                   := dglGetProcAddress('eglBindTexImage');
1928     eglReleaseTexImage                := dglGetProcAddress('eglReleaseTexImage');
1929     eglSwapInterval                   := dglGetProcAddress('eglSwapInterval');
1930     eglCreateContext                  := dglGetProcAddress('eglCreateContext');
1931     eglDestroyContext                 := dglGetProcAddress('eglDestroyContext');
1932     eglMakeCurrent                    := dglGetProcAddress('eglMakeCurrent');
1933     eglGetCurrentContext              := dglGetProcAddress('eglGetCurrentContext');
1934     eglGetCurrentSurface              := dglGetProcAddress('eglGetCurrentSurface');
1935     eglGetCurrentDisplay              := dglGetProcAddress('eglGetCurrentDisplay');
1936     eglQueryContext                   := dglGetProcAddress('eglQueryContext');
1937     eglWaitGL                         := dglGetProcAddress('eglWaitGL');
1938     eglWaitNative                     := dglGetProcAddress('eglWaitNative');
1939     eglSwapBuffers                    := dglGetProcAddress('eglSwapBuffers');
1940     eglCopyBuffers                    := dglGetProcAddress('eglCopyBuffers');
1941   end else
1942     result := false;
1943 end;
1944
1945 procedure RaiseEglError(const aMsg: String);
1946 var err: EGLint;
1947 begin
1948   err := eglGetError();
1949   raise EeglError.Create(aMsg + ' ErrorCode: 0x' + IntToHex(err, 8), err);
1950 end;
1951
1952 function CreateRenderingContext(const aDisplayType: EGLNativeDisplayType; const aWindowType: PEGLNativeWindowType; const aAttributes: PEGLint): TdglRenderContext;
1953 var
1954   ConfigCount: EGLint;
1955   Config: EGLConfig;
1956 begin
1957   if (not Assigned(LibHandleOpenGLES) or not Assigned(LibHandleEGL)) and
1958      not InitOpenGLES then
1959       raise EdglOpenGLES.Create('unable to initialize OpenGL library');
1960
1961   result.Display := eglGetDisplay(aDisplayType);
1962   if (result.Display = EGL_NO_DISPLAY) then
1963     RaiseEglError('unable to get display.');
1964
1965   if (eglInitialize(result.Display, nil, nil) <> EGL_TRUE) then
1966     RaiseEglError('unable to initialize egl.');
1967
1968   if (eglChooseConfig(result.Display, aAttributes, @Config, 1, @ConfigCount) <> EGL_TRUE) or
1969      (ConfigCount <> 1) then
1970     RaiseEglError('unable to get suitable config.');
1971
1972   result.Surface := eglCreateWindowSurface(result.Display, Config, aWindowType, nil);
1973   if (result.Surface = EGL_NO_SURFACE) then
1974     RaiseEglError('unable to create window surface.');
1975
1976   result.Context := eglCreateContext(result.Display, Config, EGL_NO_CONTEXT, nil);
1977   if (result.Context = EGL_NO_CONTEXT) then begin
1978     eglDestroySurface(result.Display, result.Surface);
1979     RaiseEglError('unable to create context.');
1980   end;
1981 end;
1982
1983 procedure DestroyRenderingContext(const aContext: TdglRenderContext);
1984 begin
1985   if (eglGetCurrentContext = aContext.Context) and
1986      not DeactivateRenderingContext(aContext) then
1987     RaiseEglError('unable to unbind context.');
1988
1989   if (eglDestroyContext(aContext.Display, aContext.Context) <> EGL_TRUE) then
1990     RaiseEglError('unable to destory context.');
1991
1992   if (eglDestroySurface(aContext.Display, aContext.Surface) <> EGL_TRUE) then
1993     RaiseEglError('unable to destroy surface.');
1994 end;
1995
1996 function ActivateRenderingContext(const aContext: TdglRenderContext): Boolean;
1997 begin
1998   result := (eglMakeCurrent(aContext.Display, aContext.Surface, aContext.Surface, aContext.Context) = GL_TRUE);
1999 end;
2000
2001 function DeactivateRenderingContext(const aContext: TdglRenderContext): Boolean;
2002 begin
2003   result := (eglMakeCurrent(aContext.Display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT) = EGL_TRUE);
2004 end;
2005
2006 procedure SwapBuffers(const aContext: TdglRenderContext);
2007 begin
2008   eglSwapBuffers(aContext.Display, aContext.Surface);
2009 end;
2010
2011 procedure ReadExtensions;
2012 begin
2013   glActiveTexture                           := dglGetProcAddress('glActiveTexture');
2014   glAttachShader                            := dglGetProcAddress('glAttachShader');
2015   glBindAttribLocation                      := dglGetProcAddress('glBindAttribLocation');
2016   glBindBuffer                              := dglGetProcAddress('glBindBuffer');
2017   glBindFramebuffer                         := dglGetProcAddress('glBindFramebuffer');
2018   glBindRenderbuffer                        := dglGetProcAddress('glBindRenderbuffer');
2019   glBindTexture                             := dglGetProcAddress('glBindTexture');
2020   glBlendColor                              := dglGetProcAddress('glBlendColor');
2021   glBlendEquation                           := dglGetProcAddress('glBlendEquation');
2022   glBlendEquationSeparate                   := dglGetProcAddress('glBlendEquationSeparate');
2023   glBlendFunc                               := dglGetProcAddress('glBlendFunc');
2024   glBlendFuncSeparate                       := dglGetProcAddress('glBlendFuncSeparate');
2025   glBufferData                              := dglGetProcAddress('glBufferData');
2026   glBufferSubData                           := dglGetProcAddress('glBufferSubData');
2027   glCheckFramebufferStatus                  := dglGetProcAddress('glCheckFramebufferStatus');
2028   glClear                                   := dglGetProcAddress('glClear');
2029   glClearColor                              := dglGetProcAddress('glClearColor');
2030   glClearDepthf                             := dglGetProcAddress('glClearDepthf');
2031   glClearStencil                            := dglGetProcAddress('glClearStencil');
2032   glColorMask                               := dglGetProcAddress('glColorMask');
2033   glCompileShader                           := dglGetProcAddress('glCompileShader');
2034   glCompressedTexImage2D                    := dglGetProcAddress('glCompressedTexImage2D');
2035   glCompressedTexSubImage2D                 := dglGetProcAddress('glCompressedTexSubImage2D');
2036   glCopyTexImage2D                          := dglGetProcAddress('glCopyTexImage2D');
2037   glCopyTexSubImage2D                       := dglGetProcAddress('glCopyTexSubImage2D');
2038   glCreateProgram                           := dglGetProcAddress('glCreateProgram');
2039   glCreateShader                            := dglGetProcAddress('glCreateShader');
2040   glCullFace                                := dglGetProcAddress('glCullFace');
2041   glDeleteBuffers                           := dglGetProcAddress('glDeleteBuffers');
2042   glDeleteFramebuffers                      := dglGetProcAddress('glDeleteFramebuffers');
2043   glDeleteProgram                           := dglGetProcAddress('glDeleteProgram');
2044   glDeleteRenderbuffers                     := dglGetProcAddress('glDeleteRenderbuffers');
2045   glDeleteShader                            := dglGetProcAddress('glDeleteShader');
2046   glDeleteTextures                          := dglGetProcAddress('glDeleteTextures');
2047   glDepthFunc                               := dglGetProcAddress('glDepthFunc');
2048   glDepthMask                               := dglGetProcAddress('glDepthMask');
2049   glDepthRangef                             := dglGetProcAddress('glDepthRangef');
2050   glDetachShader                            := dglGetProcAddress('glDetachShader');
2051   glDisable                                 := dglGetProcAddress('glDisable');
2052   glDisableVertexAttribArray                := dglGetProcAddress('glDisableVertexAttribArray');
2053   glDrawArrays                              := dglGetProcAddress('glDrawArrays');
2054   glDrawElements                            := dglGetProcAddress('glDrawElements');
2055   glEnable                                  := dglGetProcAddress('glEnable');
2056   glEnableVertexAttribArray                 := dglGetProcAddress('glEnableVertexAttribArray');
2057   glFinish                                  := dglGetProcAddress('glFinish');
2058   glFlush                                   := dglGetProcAddress('glFlush');
2059   glFramebufferRenderbuffer                 := dglGetProcAddress('glFramebufferRenderbuffer');
2060   glFramebufferTexture2D                    := dglGetProcAddress('glFramebufferTexture2D');
2061   glFrontFace                               := dglGetProcAddress('glFrontFace');
2062   glGenBuffers                              := dglGetProcAddress('glGenBuffers');
2063   glGenerateMipmap                          := dglGetProcAddress('glGenerateMipmap');
2064   glGenFramebuffers                         := dglGetProcAddress('glGenFramebuffers');
2065   glGenRenderbuffers                        := dglGetProcAddress('glGenRenderbuffers');
2066   glGenTextures                             := dglGetProcAddress('glGenTextures');
2067   glGetActiveAttrib                         := dglGetProcAddress('glGetActiveAttrib');
2068   glGetActiveUniform                        := dglGetProcAddress('glGetActiveUniform');
2069   glGetAttachedShaders                      := dglGetProcAddress('glGetAttachedShaders');
2070   glGetAttribLocation                       := dglGetProcAddress('glGetAttribLocation');
2071   glGetBooleanv                             := dglGetProcAddress('glGetBooleanv');
2072   glGetBufferParameteriv                    := dglGetProcAddress('glGetBufferParameteriv');
2073   glGetError                                := dglGetProcAddress('glGetError');
2074   glGetFloatv                               := dglGetProcAddress('glGetFloatv');
2075   glGetFramebufferAttachmentParameteriv     := dglGetProcAddress('glGetFramebufferAttachmentParameteriv');
2076   glGetIntegerv                             := dglGetProcAddress('glGetIntegerv');
2077   glGetProgramiv                            := dglGetProcAddress('glGetProgramiv');
2078   glGetProgramInfoLog                       := dglGetProcAddress('glGetProgramInfoLog');
2079   glGetRenderbufferParameteriv              := dglGetProcAddress('glGetRenderbufferParameteriv');
2080   glGetShaderiv                             := dglGetProcAddress('glGetShaderiv');
2081   glGetShaderInfoLog                        := dglGetProcAddress('glGetShaderInfoLog');
2082   glGetShaderPrecisionFormat                := dglGetProcAddress('glGetShaderPrecisionFormat');
2083   glGetShaderSource                         := dglGetProcAddress('glGetShaderSource');
2084   glGetString                               := dglGetProcAddress('glGetString');
2085   glGetTexParameterfv                       := dglGetProcAddress('glGetTexParameterfv');
2086   glGetTexParameteriv                       := dglGetProcAddress('glGetTexParameteriv');
2087   glGetUniformfv                            := dglGetProcAddress('glGetUniformfv');
2088   glGetUniformiv                            := dglGetProcAddress('glGetUniformiv');
2089   glGetUniformLocation                      := dglGetProcAddress('glGetUniformLocation');
2090   glGetVertexAttribfv                       := dglGetProcAddress('glGetVertexAttribfv');
2091   glGetVertexAttribiv                       := dglGetProcAddress('glGetVertexAttribiv');
2092   glGetVertexAttribPointerv                 := dglGetProcAddress('glGetVertexAttribPointerv');
2093   glHint                                    := dglGetProcAddress('glHint');
2094   glIsBuffer                                := dglGetProcAddress('glIsBuffer');
2095   glIsEnabled                               := dglGetProcAddress('glIsEnabled');
2096   glIsFramebuffer                           := dglGetProcAddress('glIsFramebuffer');
2097   glIsProgram                               := dglGetProcAddress('glIsProgram');
2098   glIsRenderbuffer                          := dglGetProcAddress('glIsRenderbuffer');
2099   glIsShader                                := dglGetProcAddress('glIsShader');
2100   glIsTexture                               := dglGetProcAddress('glIsTexture');
2101   glLineWidth                               := dglGetProcAddress('glLineWidth');
2102   glLinkProgram                             := dglGetProcAddress('glLinkProgram');
2103   glPixelStorei                             := dglGetProcAddress('glPixelStorei');
2104   glPolygonOffset                           := dglGetProcAddress('glPolygonOffset');
2105   glReadPixels                              := dglGetProcAddress('glReadPixels');
2106   glReleaseShaderCompiler                   := dglGetProcAddress('glReleaseShaderCompiler');
2107   glRenderbufferStorage                     := dglGetProcAddress('glRenderbufferStorage');
2108   glSampleCoverage                          := dglGetProcAddress('glSampleCoverage');
2109   glScissor                                 := dglGetProcAddress('glScissor');
2110   glShaderBinary                            := dglGetProcAddress('glShaderBinary');
2111   glShaderSource                            := dglGetProcAddress('glShaderSource');
2112   glStencilFunc                             := dglGetProcAddress('glStencilFunc');
2113   glStencilFuncSeparate                     := dglGetProcAddress('glStencilFuncSeparate');
2114   glStencilMask                             := dglGetProcAddress('glStencilMask');
2115   glStencilMaskSeparate                     := dglGetProcAddress('glStencilMaskSeparate');
2116   glStencilOp                               := dglGetProcAddress('glStencilOp');
2117   glStencilOpSeparate                       := dglGetProcAddress('glStencilOpSeparate');
2118   glTexImage2D                              := dglGetProcAddress('glTexImage2D');
2119   glTexParameterf                           := dglGetProcAddress('glTexParameterf');
2120   glTexParameterfv                          := dglGetProcAddress('glTexParameterfv');
2121   glTexParameteri                           := dglGetProcAddress('glTexParameteri');
2122   glTexParameteriv                          := dglGetProcAddress('glTexParameteriv');
2123   glTexSubImage2D                           := dglGetProcAddress('glTexSubImage2D');
2124   glUniform1f                               := dglGetProcAddress('glUniform1f');
2125   glUniform1fv                              := dglGetProcAddress('glUniform1fv');
2126   glUniform1i                               := dglGetProcAddress('glUniform1i');
2127   glUniform1iv                              := dglGetProcAddress('glUniform1iv');
2128   glUniform2f                               := dglGetProcAddress('glUniform2f');
2129   glUniform2fv                              := dglGetProcAddress('glUniform2fv');
2130   glUniform2i                               := dglGetProcAddress('glUniform2i');
2131   glUniform2iv                              := dglGetProcAddress('glUniform2iv');
2132   glUniform3f                               := dglGetProcAddress('glUniform3f');
2133   glUniform3fv                              := dglGetProcAddress('glUniform3fv');
2134   glUniform3i                               := dglGetProcAddress('glUniform3i');
2135   glUniform3iv                              := dglGetProcAddress('glUniform3iv');
2136   glUniform4f                               := dglGetProcAddress('glUniform4f');
2137   glUniform4fv                              := dglGetProcAddress('glUniform4fv');
2138   glUniform4i                               := dglGetProcAddress('glUniform4i');
2139   glUniform4iv                              := dglGetProcAddress('glUniform4iv');
2140   glUniformMatrix2fv                        := dglGetProcAddress('glUniformMatrix2fv');
2141   glUniformMatrix3fv                        := dglGetProcAddress('glUniformMatrix3fv');
2142   glUniformMatrix4fv                        := dglGetProcAddress('glUniformMatrix4fv');
2143   glUseProgram                              := dglGetProcAddress('glUseProgram');
2144   glValidateProgram                         := dglGetProcAddress('glValidateProgram');
2145   glVertexAttrib1f                          := dglGetProcAddress('glVertexAttrib1f');
2146   glVertexAttrib1fv                         := dglGetProcAddress('glVertexAttrib1fv');
2147   glVertexAttrib2f                          := dglGetProcAddress('glVertexAttrib2f');
2148   glVertexAttrib2fv                         := dglGetProcAddress('glVertexAttrib2fv');
2149   glVertexAttrib3f                          := dglGetProcAddress('glVertexAttrib3f');
2150   glVertexAttrib3fv                         := dglGetProcAddress('glVertexAttrib3fv');
2151   glVertexAttrib4f                          := dglGetProcAddress('glVertexAttrib4f');
2152   glVertexAttrib4fv                         := dglGetProcAddress('glVertexAttrib4fv');
2153   glVertexAttribPointer                     := dglGetProcAddress('glVertexAttribPointer');
2154   glViewport                                := dglGetProcAddress('glViewport');
2155
2156   { OpenGL ES 3.0 }
2157   glReadBuffer                              := dglGetProcAddress('glReadBuffer');
2158   glDrawRangeElements                       := dglGetProcAddress('glDrawRangeElements');
2159   glTexImage3D                              := dglGetProcAddress('glTexImage3D');
2160   glTexSubImage3D                           := dglGetProcAddress('glTexSubImage3D');
2161   glCopyTexSubImage3D                       := dglGetProcAddress('glCopyTexSubImage3D');
2162   glCompressedTexImage3D                    := dglGetProcAddress('glCompressedTexImage3D');
2163   glCompressedTexSubImage3D                 := dglGetProcAddress('glCompressedTexSubImage3D');
2164   glGenQueries                              := dglGetProcAddress('glGenQueries');
2165   glDeleteQueries                           := dglGetProcAddress('glDeleteQueries');
2166   glIsQuery                                 := dglGetProcAddress('glIsQuery');
2167   glBeginQuery                              := dglGetProcAddress('glBeginQuery');
2168   glEndQuery                                := dglGetProcAddress('glEndQuery');
2169   glGetQueryiv                              := dglGetProcAddress('glGetQueryiv');
2170   glGetQueryObjectuiv                       := dglGetProcAddress('glGetQueryObjectuiv');
2171   glUnmapBuffer                             := dglGetProcAddress('glUnmapBuffer');
2172   glGetBufferPointerv                       := dglGetProcAddress('glGetBufferPointerv');
2173   glDrawBuffers                             := dglGetProcAddress('glDrawBuffers');
2174   glUniformMatrix2x3fv                      := dglGetProcAddress('glUniformMatrix2x3fv');
2175   glUniformMatrix3x2fv                      := dglGetProcAddress('glUniformMatrix3x2fv');
2176   glUniformMatrix2x4fv                      := dglGetProcAddress('glUniformMatrix2x4fv');
2177   glUniformMatrix4x2fv                      := dglGetProcAddress('glUniformMatrix4x2fv');
2178   glUniformMatrix3x4fv                      := dglGetProcAddress('glUniformMatrix3x4fv');
2179   glUniformMatrix4x3fv                      := dglGetProcAddress('glUniformMatrix4x3fv');
2180   glBlitFramebuffer                         := dglGetProcAddress('glBlitFramebuffer');
2181   glRenderbufferStorageMultisample          := dglGetProcAddress('glRenderbufferStorageMultisample');
2182   glFramebufferTextureLayer                 := dglGetProcAddress('glFramebufferTextureLayer');
2183   glMapBufferRange                          := dglGetProcAddress('glMapBufferRange');
2184   glFlushMappedBufferRange                  := dglGetProcAddress('glFlushMappedBufferRange');
2185   glBindVertexArray                         := dglGetProcAddress('glBindVertexArray');
2186   glDeleteVertexArrays                      := dglGetProcAddress('glDeleteVertexArrays');
2187   glGenVertexArrays                         := dglGetProcAddress('glGenVertexArrays');
2188   glIsVertexArray                           := dglGetProcAddress('glIsVertexArray');
2189   glGetIntegeri_v                           := dglGetProcAddress('glGetIntegeri_v');
2190   glBeginTransformFeedback                  := dglGetProcAddress('glBeginTransformFeedback');
2191   glEndTransformFeedback                    := dglGetProcAddress('glEndTransformFeedback');
2192   glBindBufferRange                         := dglGetProcAddress('glBindBufferRange');
2193   glBindBufferBase                          := dglGetProcAddress('glBindBufferBase');
2194   glTransformFeedbackVaryings               := dglGetProcAddress('glTransformFeedbackVaryings');
2195   glGetTransformFeedbackVarying             := dglGetProcAddress('glGetTransformFeedbackVarying');
2196   glVertexAttribIPointer                    := dglGetProcAddress('glVertexAttribIPointer');
2197   glGetVertexAttribIiv                      := dglGetProcAddress('glGetVertexAttribIiv');
2198   glGetVertexAttribIuiv                     := dglGetProcAddress('glGetVertexAttribIuiv');
2199   glVertexAttribI4i                         := dglGetProcAddress('glVertexAttribI4i');
2200   glVertexAttribI4ui                        := dglGetProcAddress('glVertexAttribI4ui');
2201   glVertexAttribI4iv                        := dglGetProcAddress('glVertexAttribI4iv');
2202   glVertexAttribI4uiv                       := dglGetProcAddress('glVertexAttribI4uiv');
2203   glGetUniformuiv                           := dglGetProcAddress('glGetUniformuiv');
2204   glGetFragDataLocation                     := dglGetProcAddress('glGetFragDataLocation');
2205   glUniform1ui                              := dglGetProcAddress('glUniform1ui');
2206   glUniform2ui                              := dglGetProcAddress('glUniform2ui');
2207   glUniform3ui                              := dglGetProcAddress('glUniform3ui');
2208   glUniform4ui                              := dglGetProcAddress('glUniform4ui');
2209   glUniform1uiv                             := dglGetProcAddress('glUniform1uiv');
2210   glUniform2uiv                             := dglGetProcAddress('glUniform2uiv');
2211   glUniform3uiv                             := dglGetProcAddress('glUniform3uiv');
2212   glUniform4uiv                             := dglGetProcAddress('glUniform4uiv');
2213   glClearBufferiv                           := dglGetProcAddress('glClearBufferiv');
2214   glClearBufferuiv                          := dglGetProcAddress('glClearBufferuiv');
2215   glClearBufferfv                           := dglGetProcAddress('glClearBufferfv');
2216   glClearBufferfi                           := dglGetProcAddress('glClearBufferfi');
2217   glGetStringi                              := dglGetProcAddress('glGetStringi');
2218   glCopyBufferSubData                       := dglGetProcAddress('glCopyBufferSubData');
2219   glGetUniformIndices                       := dglGetProcAddress('glGetUniformIndices');
2220   glGetActiveUniformsiv                     := dglGetProcAddress('glGetActiveUniformsiv');
2221   glGetUniformBlockIndex                    := dglGetProcAddress('glGetUniformBlockIndex');
2222   glGetActiveUniformBlockiv                 := dglGetProcAddress('glGetActiveUniformBlockiv');
2223   glGetActiveUniformBlockName               := dglGetProcAddress('glGetActiveUniformBlockName');
2224   glUniformBlockBinding                     := dglGetProcAddress('glUniformBlockBinding');
2225   glDrawArraysInstanced                     := dglGetProcAddress('glDrawArraysInstanced');
2226   glDrawElementsInstanced                   := dglGetProcAddress('glDrawElementsInstanced');
2227   glFenceSync                               := dglGetProcAddress('glFenceSync');
2228   glIsSync                                  := dglGetProcAddress('glIsSync');
2229   glDeleteSync                              := dglGetProcAddress('glDeleteSync');
2230   glClientWaitSync                          := dglGetProcAddress('glClientWaitSync');
2231   glWaitSync                                := dglGetProcAddress('glWaitSync');
2232   glGetInteger64v                           := dglGetProcAddress('glGetInteger64v');
2233   glGetSynciv                               := dglGetProcAddress('glGetSynciv');
2234   glGetInteger64i_v                         := dglGetProcAddress('glGetInteger64i_v');
2235   glGetBufferParameteri64v                  := dglGetProcAddress('glGetBufferParameteri64v');
2236   glGenSamplers                             := dglGetProcAddress('glGenSamplers');
2237   glDeleteSamplers                          := dglGetProcAddress('glDeleteSamplers');
2238   glIsSampler                               := dglGetProcAddress('glIsSampler');
2239   glBindSampler                             := dglGetProcAddress('glBindSampler');
2240   glSamplerParameteri                       := dglGetProcAddress('glSamplerParameteri');
2241   glSamplerParameteriv                      := dglGetProcAddress('glSamplerParameteriv');
2242   glSamplerParameterf                       := dglGetProcAddress('glSamplerParameterf');
2243   glSamplerParameterfv                      := dglGetProcAddress('glSamplerParameterfv');
2244   glGetSamplerParameteriv                   := dglGetProcAddress('glGetSamplerParameteriv');
2245   glGetSamplerParameterfv                   := dglGetProcAddress('glGetSamplerParameterfv');
2246   glVertexAttribDivisor                     := dglGetProcAddress('glVertexAttribDivisor');
2247   glBindTransformFeedback                   := dglGetProcAddress('glBindTransformFeedback');
2248   glDeleteTransformFeedbacks                := dglGetProcAddress('glDeleteTransformFeedbacks');
2249   glGenTransformFeedbacks                   := dglGetProcAddress('glGenTransformFeedbacks');
2250   glIsTransformFeedback                     := dglGetProcAddress('glIsTransformFeedback');
2251   glPauseTransformFeedback                  := dglGetProcAddress('glPauseTransformFeedback');
2252   glResumeTransformFeedback                 := dglGetProcAddress('glResumeTransformFeedback');
2253   glGetProgramBinary                        := dglGetProcAddress('glGetProgramBinary');
2254   glProgramBinary                           := dglGetProcAddress('glProgramBinary');
2255   glProgramParameteri                       := dglGetProcAddress('glProgramParameteri');
2256   glInvalidateFramebuffer                   := dglGetProcAddress('glInvalidateFramebuffer');
2257   glInvalidateSubFramebuffer                := dglGetProcAddress('glInvalidateSubFramebuffer');
2258   glTexStorage2D                            := dglGetProcAddress('glTexStorage2D');
2259   glTexStorage3D                            := dglGetProcAddress('glTexStorage3D');
2260   glGetInternalformativ                     := dglGetProcAddress('glGetInternalformativ');
2261
2262   { OpenGL ES 3.1 }
2263   glDispatchCompute                         := dglGetProcAddress('glDispatchCompute');
2264   glDispatchComputeIndirect                 := dglGetProcAddress('glDispatchComputeIndirect');
2265   glDrawArraysIndirect                      := dglGetProcAddress('glDrawArraysIndirect');
2266   glDrawElementsIndirect                    := dglGetProcAddress('glDrawElementsIndirect');
2267   glFramebufferParameteri                   := dglGetProcAddress('glFramebufferParameteri');
2268   glGetFramebufferParameteriv               := dglGetProcAddress('glGetFramebufferParameteriv');
2269   glGetProgramInterfaceiv                   := dglGetProcAddress('glGetProgramInterfaceiv');
2270   glGetProgramResourceIndex                 := dglGetProcAddress('glGetProgramResourceIndex');
2271   glGetProgramResourceName                  := dglGetProcAddress('glGetProgramResourceName');
2272   glGetProgramResourceiv                    := dglGetProcAddress('glGetProgramResourceiv');
2273   glGetProgramResourceLocation              := dglGetProcAddress('glGetProgramResourceLocation');
2274   glUseProgramStages                        := dglGetProcAddress('glUseProgramStages');
2275   glActiveShaderProgram                     := dglGetProcAddress('glActiveShaderProgram');
2276   glCreateShaderProgramv                    := dglGetProcAddress('glCreateShaderProgramv');
2277   glBindProgramPipeline                     := dglGetProcAddress('glBindProgramPipeline');
2278   glDeleteProgramPipelines                  := dglGetProcAddress('glDeleteProgramPipelines');
2279   glGenProgramPipelines                     := dglGetProcAddress('glGenProgramPipelines');
2280   glIsProgramPipeline                       := dglGetProcAddress('glIsProgramPipeline');
2281   glGetProgramPipelineiv                    := dglGetProcAddress('glGetProgramPipelineiv');
2282   glProgramUniform1i                        := dglGetProcAddress('glProgramUniform1i');
2283   glProgramUniform2i                        := dglGetProcAddress('glProgramUniform2i');
2284   glProgramUniform3i                        := dglGetProcAddress('glProgramUniform3i');
2285   glProgramUniform4i                        := dglGetProcAddress('glProgramUniform4i');
2286   glProgramUniform1ui                       := dglGetProcAddress('glProgramUniform1ui');
2287   glProgramUniform2ui                       := dglGetProcAddress('glProgramUniform2ui');
2288   glProgramUniform3ui                       := dglGetProcAddress('glProgramUniform3ui');
2289   glProgramUniform4ui                       := dglGetProcAddress('glProgramUniform4ui');
2290   glProgramUniform1f                        := dglGetProcAddress('glProgramUniform1f');
2291   glProgramUniform2f                        := dglGetProcAddress('glProgramUniform2f');
2292   glProgramUniform3f                        := dglGetProcAddress('glProgramUniform3f');
2293   glProgramUniform4f                        := dglGetProcAddress('glProgramUniform4f');
2294   glProgramUniform1iv                       := dglGetProcAddress('glProgramUniform1iv');
2295   glProgramUniform2iv                       := dglGetProcAddress('glProgramUniform2iv');
2296   glProgramUniform3iv                       := dglGetProcAddress('glProgramUniform3iv');
2297   glProgramUniform4iv                       := dglGetProcAddress('glProgramUniform4iv');
2298   glProgramUniform1uiv                      := dglGetProcAddress('glProgramUniform1uiv');
2299   glProgramUniform2uiv                      := dglGetProcAddress('glProgramUniform2uiv');
2300   glProgramUniform3uiv                      := dglGetProcAddress('glProgramUniform3uiv');
2301   glProgramUniform4uiv                      := dglGetProcAddress('glProgramUniform4uiv');
2302   glProgramUniform1fv                       := dglGetProcAddress('glProgramUniform1fv');
2303   glProgramUniform2fv                       := dglGetProcAddress('glProgramUniform2fv');
2304   glProgramUniform3fv                       := dglGetProcAddress('glProgramUniform3fv');
2305   glProgramUniform4fv                       := dglGetProcAddress('glProgramUniform4fv');
2306   glProgramUniformMatrix2fv                 := dglGetProcAddress('glProgramUniformMatrix2fv');
2307   glProgramUniformMatrix3fv                 := dglGetProcAddress('glProgramUniformMatrix3fv');
2308   glProgramUniformMatrix4fv                 := dglGetProcAddress('glProgramUniformMatrix4fv');
2309   glProgramUniformMatrix2x3fv               := dglGetProcAddress('glProgramUniformMatrix2x3fv');
2310   glProgramUniformMatrix3x2fv               := dglGetProcAddress('glProgramUniformMatrix3x2fv');
2311   glProgramUniformMatrix2x4fv               := dglGetProcAddress('glProgramUniformMatrix2x4fv');
2312   glProgramUniformMatrix4x2fv               := dglGetProcAddress('glProgramUniformMatrix4x2fv');
2313   glProgramUniformMatrix3x4fv               := dglGetProcAddress('glProgramUniformMatrix3x4fv');
2314   glProgramUniformMatrix4x3fv               := dglGetProcAddress('glProgramUniformMatrix4x3fv');
2315   glValidateProgramPipeline                 := dglGetProcAddress('glValidateProgramPipeline');
2316   glGetProgramPipelineInfoLog               := dglGetProcAddress('glGetProgramPipelineInfoLog');
2317   glBindImageTexture                        := dglGetProcAddress('glBindImageTexture');
2318   glGetBooleaniV                            := dglGetProcAddress('glGetBooleaniV');
2319   glMemoryBarrier                           := dglGetProcAddress('glMemoryBarrier');
2320   glMemoryBarrierByRegion                   := dglGetProcAddress('glMemoryBarrierByRegion');
2321   glTexStorage2DMultisample                 := dglGetProcAddress('glTexStorage2DMultisample');
2322   glGetMultisamplefv                        := dglGetProcAddress('glGetMultisamplefv');
2323   glSampleMaski                             := dglGetProcAddress('glSampleMaski');
2324   glGetTexLevelParameteriv                  := dglGetProcAddress('glGetTexLevelParameteriv');
2325   glGetTexLevelParameterfv                  := dglGetProcAddress('glGetTexLevelParameterfv');
2326   glBindVertexBuffer                        := dglGetProcAddress('glBindVertexBuffer');
2327   glVertexAttribFormat                      := dglGetProcAddress('glVertexAttribFormat');
2328   glVertexAttribIFormat                     := dglGetProcAddress('glVertexAttribIFormat');
2329   glVertexAttribBinding                     := dglGetProcAddress('glVertexAttribBinding');
2330   glVertexBindingDivisor                    := dglGetProcAddress('glVertexBindingDivisor');
2331 end;
2332
2333 constructor EeglError.Create(const msg: string; const aErrorCode: EGLint);
2334 begin
2335   inherited Create(msg);
2336   ErrorCode := aErrorCode;
2337 end;
2338
2339 end.
2340