Browse Source

Update ZenGL 4.2

Mirrel 1 year ago
parent
commit
56b5a1e40b
90 changed files with 3962 additions and 6518 deletions
  1. 6 0
      Zengl_SRC/Update_ZenGL.txt
  2. 16 0
      Zengl_SRC/bin/shaders/demo20.fs
  3. 20 0
      Zengl_SRC/bin/shaders/demo20.vs
  4. BIN
      Zengl_SRC/bin/x86_64-linux/demo03
  5. BIN
      Zengl_SRC/bin/x86_64-linux/demo13
  6. 36 0
      Zengl_SRC/bin/x86_64-linux/log.txt
  7. 0 0
      Zengl_SRC/demos/Delphi/tmp/__tmpForDelphi
  8. 14 5
      Zengl_SRC/demos/FreePascal/01 - Initialization/Makefile
  9. 14 5
      Zengl_SRC/demos/FreePascal/02 - Resources/Makefile
  10. 14 5
      Zengl_SRC/demos/FreePascal/03 - Input/Makefile
  11. 14 5
      Zengl_SRC/demos/FreePascal/04 - Screen Settings/Makefile
  12. 14 5
      Zengl_SRC/demos/FreePascal/05 - Primitives/Makefile
  13. 14 5
      Zengl_SRC/demos/FreePascal/06 - Text/Makefile
  14. 14 5
      Zengl_SRC/demos/FreePascal/07 - Sprites/Makefile
  15. 14 5
      Zengl_SRC/demos/FreePascal/08 - Sprite Engine/Makefile
  16. 14 5
      Zengl_SRC/demos/FreePascal/09 - Sprite Engine(Classes)/Makefile
  17. 14 5
      Zengl_SRC/demos/FreePascal/10 - Tiles/Makefile
  18. 14 5
      Zengl_SRC/demos/FreePascal/11 - Grid/Makefile
  19. 14 6
      Zengl_SRC/demos/FreePascal/12 - Render into Texture/Makefile
  20. 14 5
      Zengl_SRC/demos/FreePascal/13 - Particles/Makefile
  21. 14 5
      Zengl_SRC/demos/FreePascal/14 - Sound/Makefile
  22. 14 5
      Zengl_SRC/demos/FreePascal/15 - Video/Makefile
  23. 14 5
      Zengl_SRC/demos/FreePascal/16 - Physics/Makefile
  24. 19 0
      Zengl_SRC/demos/FreePascal/Makefile
  25. 0 0
      Zengl_SRC/demos/FreePascal/tmp/__tmpForFPC
  26. 21 0
      Zengl_SRC/demos/Lazarus/02 - Resources/demo02.lps
  27. 140 0
      Zengl_SRC/demos/Lazarus/03 - Input/backup/demo03.lpi
  28. 20 0
      Zengl_SRC/demos/Lazarus/03 - Input/backup/demo03.lps
  29. 1 0
      Zengl_SRC/demos/Lazarus/03 - Input/demo03.lpi
  30. 1 0
      Zengl_SRC/demos/Lazarus/03 - Input/demo03.lpr
  31. 21 0
      Zengl_SRC/demos/Lazarus/03 - Input/demo03.lps
  32. 20 0
      Zengl_SRC/demos/Lazarus/04 - Screen Settings/demo04.lps
  33. 21 0
      Zengl_SRC/demos/Lazarus/05 - Primitives/demo05.lps
  34. 21 0
      Zengl_SRC/demos/Lazarus/06 - Text/demo06.lps
  35. 20 0
      Zengl_SRC/demos/Lazarus/07 - Sprites/demo07.lps
  36. 20 0
      Zengl_SRC/demos/Lazarus/09 - Sprite Engine(Classes)/demo09.lps
  37. 21 0
      Zengl_SRC/demos/Lazarus/10 - Tiles/demo10.lps
  38. 139 0
      Zengl_SRC/demos/Lazarus/11 - Grid/backup/demo11.lpi
  39. 115 0
      Zengl_SRC/demos/Lazarus/11 - Grid/backup/demo11.lpr
  40. 23 0
      Zengl_SRC/demos/Lazarus/11 - Grid/backup/demo11.lps
  41. 2 2
      Zengl_SRC/demos/Lazarus/11 - Grid/demo11.lpr
  42. 23 0
      Zengl_SRC/demos/Lazarus/11 - Grid/demo11.lps
  43. 21 0
      Zengl_SRC/demos/Lazarus/12 - Render into Texture/demo12.lps
  44. 141 0
      Zengl_SRC/demos/Lazarus/13 - Particles/backup/demo13.lpi
  45. 21 0
      Zengl_SRC/demos/Lazarus/13 - Particles/backup/demo13.lps
  46. 2 0
      Zengl_SRC/demos/Lazarus/13 - Particles/demo13.lpi
  47. 22 0
      Zengl_SRC/demos/Lazarus/13 - Particles/demo13.lps
  48. 20 0
      Zengl_SRC/demos/Lazarus/14 - Sound/demo14.lps
  49. 20 0
      Zengl_SRC/demos/Lazarus/15 - Video/demo15.lps
  50. 141 0
      Zengl_SRC/demos/Lazarus/16 - Physics/backup/demo16.lpi
  51. 231 0
      Zengl_SRC/demos/Lazarus/16 - Physics/backup/demo16.lpr
  52. 22 0
      Zengl_SRC/demos/Lazarus/16 - Physics/backup/demo16.lps
  53. 1 0
      Zengl_SRC/demos/Lazarus/16 - Physics/demo16.lps
  54. 24 0
      Zengl_SRC/demos/Lazarus/18 - LCLZenGL/backup/demo.lfm
  55. 323 0
      Zengl_SRC/demos/Lazarus/18 - LCLZenGL/backup/demo.pas
  56. 96 0
      Zengl_SRC/demos/Lazarus/18 - LCLZenGL/backup/demoLCL.lpi
  57. 222 0
      Zengl_SRC/demos/Lazarus/18 - LCLZenGL/backup/demoLCL.lps
  58. 3 3
      Zengl_SRC/demos/Lazarus/18 - LCLZenGL/demo.lfm
  59. 1 1
      Zengl_SRC/demos/Lazarus/18 - LCLZenGL/demo.pas
  60. 1 0
      Zengl_SRC/demos/Lazarus/18 - LCLZenGL/demoLCL.lpi
  61. 108 0
      Zengl_SRC/demos/Lazarus/18 - LCLZenGL/demoLCL.lps
  62. 145 0
      Zengl_SRC/demos/Lazarus/19 - OpenGL33_01/backup/demo19.lpi
  63. 25 0
      Zengl_SRC/demos/Lazarus/19 - OpenGL33_01/backup/demo19.lps
  64. 8 7
      Zengl_SRC/demos/Lazarus/19 - OpenGL33_01/demo19.lpr
  65. 2 6
      Zengl_SRC/demos/Lazarus/19 - OpenGL33_01/demo19.lps
  66. 131 0
      Zengl_SRC/demos/Lazarus/20 - OpenGL33_02/backup/demo20.lps
  67. BIN
      Zengl_SRC/demos/Lazarus/20 - OpenGL33_02/demo20.ico
  68. 77 0
      Zengl_SRC/demos/Lazarus/20 - OpenGL33_02/demo20.lpi
  69. 398 0
      Zengl_SRC/demos/Lazarus/20 - OpenGL33_02/demo20.lpr
  70. 130 0
      Zengl_SRC/demos/Lazarus/20 - OpenGL33_02/demo20.lps
  71. 39 0
      Zengl_SRC/demos/Lazarus/20 - OpenGL33_02/zglCustomConfig.cfg
  72. 272 0
      Zengl_SRC/demos/Lazarus/20 - OpenGL33_02/zgl_config.cfg
  73. 31 0
      Zengl_SRC/demos/MacOS readME.txt
  74. 4 0
      Zengl_SRC/headers/zgl_config.cfg
  75. 2 0
      Zengl_SRC/next.txt
  76. 4 3
      Zengl_SRC/src/zgl_application.pas
  77. 1 1
      Zengl_SRC/src/zgl_file.pas
  78. 17 6
      Zengl_SRC/src/zgl_joystick.pas
  79. 12 3
      Zengl_SRC/src/zgl_lib_ogg.pas
  80. 2 1
      Zengl_SRC/src/zgl_lib_theora.pas
  81. 20 17
      Zengl_SRC/src/zgl_lib_zip.pas
  82. 4 2
      Zengl_SRC/src/zgl_opengl_all.pas
  83. 1 1
      Zengl_SRC/src/zgl_screen.pas
  84. 6 5
      Zengl_SRC/src/zgl_sound.pas
  85. 3 3
      Zengl_SRC/src/zgl_text.pas
  86. 14 7
      Zengl_SRC/src/zgl_window.pas
  87. 1 1
      Zengl_SRC/srcGEGL/gegl_xrandr.pas
  88. 8 0
      Zengl_SRC/srcGL/GLdefine.cfg
  89. 0 6321
      Zengl_SRC/srcGL/old zgl_gl_const_all.pas
  90. 235 47
      Zengl_SRC/srcGL/zgl_matrix.pas

+ 6 - 0
Zengl_SRC/Update_ZenGL.txt

@@ -1,3 +1,9 @@
+29.09.2023
+	Корректированы файлы "Makefile" для "FreePascal", добавлена возможность компиляции под Linux64.
+
+28.09.2023
+	Добавлена демка 20 "OpenGL33_2", показывающая работу с матрицами. В демо происходит вращение куба.
+
 18.09.2023
 18.09.2023
 	Добавлено определение "CLEAR_STATE". Теперь если его отключить, то не будут очищаться события клавиатуры, мыши, джойстика и тачпада. Пользователю надо будет самому определить где он будет очищать данные события.
 	Добавлено определение "CLEAR_STATE". Теперь если его отключить, то не будут очищаться события клавиатуры, мыши, джойстика и тачпада. Пользователю надо будет самому определить где он будет очищать данные события.
 
 

+ 16 - 0
Zengl_SRC/bin/shaders/demo20.fs

@@ -0,0 +1,16 @@
+#version 330 core
+
+// текстура
+uniform sampler2D colorTexture;
+
+// параметры, полученные из вершинного шейдера
+in vec2 fragTexcoord;
+
+// результирующий цвет пикселя на экране
+out vec4 color;
+
+void main(void)
+{
+  // получим цвет пикселя из текстуры по текстурным координатам
+  color = texture(colorTexture, fragTexcoord);
+}

+ 20 - 0
Zengl_SRC/bin/shaders/demo20.vs

@@ -0,0 +1,20 @@
+#version 330 core
+
+// матрица преобразования координат, получаемая из программы
+uniform mat4 projMatr;
+
+// входные вершинные атрибуты
+layout(location = 0) in vec3 position;
+layout(location = 1) in vec2 texcoord;
+
+// исходящие параметры, которые будут переданы в фрагментный шейдер
+out vec2 fragTexcoord;
+
+void main(void)
+{
+  // перевод позиции вершины из локальных координат в однородные
+  gl_Position = projMatr * vec4(position, 1.0);
+
+  // передадим текстурные координаты в фрагментный шейдер
+  fragTexcoord = texcoord;
+}

BIN
Zengl_SRC/bin/x86_64-linux/demo03


BIN
Zengl_SRC/bin/x86_64-linux/demo13


+ 36 - 0
Zengl_SRC/bin/x86_64-linux/log.txt

@@ -0,0 +1,36 @@
+==================================
+=== ZenGL - 0.4.2 (29.09.2023) ===
+==================================
+[00000000ms] Begin
+[00000022ms] Current mode: 2560 x 1440
+[00000072ms] GLX Extension - ok
+[00000072ms] GLX_PBUFFER: TRUE
+[00000072ms] glXChooseVisual: zDepth = 24; stencil = 0; fsaa = 0
+[00000077ms] GL_VERSION: 4.6 (Compatibility Profile) Mesa 23.1.4-1
+[00000077ms] GL_RENDERER: AMD Radeon Graphics (navi22, LLVM 15.0.7, DRM 3.52, 6.4.0-2-amd64)
+[00000077ms] GL_VENDOR: AMD
+[00000077ms] GL_MAX_TEXTURE_SIZE: 16384
+[00000077ms] GL_EXT_TEXTURE_COMPRESSION_S3TC: TRUE
+[00000077ms] GL_SGIS_GENERATE_MIPMAP: TRUE
+[00000077ms] GL_MAX_TEXTURE_UNITS_ARB: 8
+[00000077ms] GL_EXT_TEXTURE_FILTER_ANISOTROPIC: TRUE
+[00000077ms] GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT: 16
+[00000077ms] GL_EXT_BLEND_FUNC_SEPARATE: TRUE
+[00000077ms] GL_MAX_RENDERBUFFER_SIZE: 16384
+[00000077ms] GL_EXT_FRAMEBUFFER_OBJECT: TRUE
+[00000077ms] Support WaitVSync: TRUE
+[00000077ms] Ogg: Initialized
+[00000078ms] Theora: Initialized
+[00000089ms] Texture loaded: "../data/font-page0.png"
+[00000121ms] Texture loaded: "../data/CalibriBold50pt-page0.png"
+[00000122ms] Joy: Couldn't find joysticks
+[00005004ms] Terminate program
+[00005005ms] Average FPS: 60
+[00005005ms] Destroy GE-Elements: 1
+[00005005ms] Timers to free: 2
+[00005005ms] Fonts to free: 2
+[00005005ms] Font to free
+[00005005ms] Font to free
+[00005005ms] Render Targets not free!!!
+[00005005ms] Textures to free: 1
+[00005007ms] End

+ 0 - 0
Zengl_SRC/demos/Delphi/tmp/tmpForDelphi → Zengl_SRC/demos/Delphi/tmp/__tmpForDelphi


+ 14 - 5
Zengl_SRC/demos/FreePascal/01 - Initialization/Makefile

@@ -10,15 +10,14 @@ ifeq ($(shell uname), Linux)
   OS    = linux
   OS    = linux
 else ifeq ($(shell uname), Darwin)
 else ifeq ($(shell uname), Darwin)
   OS    = darwin
   OS    = darwin
-  ARCH  = i386
 endif
 endif
 
 
 # Variables
 # Variables
-# Rus: введите свой путь к FPC
-# Eng: enter your path to FPC
-FPC     = fpc
+# Rus: введите свой путь к FPC (fpc, fpc.exe or fpc.sh).
+# Eng: enter your path to FPC (fpc, fpc.exe or fpc.sh).
+FPC     = fpc.sh
 FLAGS   = -O3 -XsX -CX -Sd -al
 FLAGS   = -O3 -XsX -CX -Sd -al
-INCLUDE = -Fu../../../headers -Fi../../../headers -Fi../../../srcGEGL -Fi../../../src -Fi../../../srcGL -Fu../../../srcGEGL -Fu../../../extra -Fu../../../src -Fu../../../srcGL
+INCLUDE = -Fu../../../headers -Fi../../../headers -Fi../../../srcGEGL -Fi../../../src -Fi../../../srcGL -Fi../../../srcGL/EGL -Fi../../../srcGL/GLES -Fu../../../srcGEGL -Fu../../../extra -Fu../../../src -Fu../../../srcGL -Fu../../../srcGL/EGL -Fu../../../srcGL/GLES
 LIBS    = -Fu../../../lib/jpeg/$(ARCH)-$(OS) -Fu../../../lib/ogg/$(ARCH)-$(OS) -Fu../../../lib/theora/$(ARCH)-$(OS) -Fu../../../lib/zlib/$(ARCH)-$(OS) -Fu../../../lib/zip/$(ARCH)-$(OS)
 LIBS    = -Fu../../../lib/jpeg/$(ARCH)-$(OS) -Fu../../../lib/ogg/$(ARCH)-$(OS) -Fu../../../lib/theora/$(ARCH)-$(OS) -Fu../../../lib/zlib/$(ARCH)-$(OS) -Fu../../../lib/zip/$(ARCH)-$(OS)
 LIBSPPC = -Fu../../../lib/jpeg/powerpc-$(OS) -Fu../../../lib/ogg/powerpc-$(OS) -Fu../../../lib/theora/powerpc-$(OS) -Fu../../../lib/zlib/powerpc-$(OS) -Fu../../../lib/zip/powerpc-$(OS)
 LIBSPPC = -Fu../../../lib/jpeg/powerpc-$(OS) -Fu../../../lib/ogg/powerpc-$(OS) -Fu../../../lib/theora/powerpc-$(OS) -Fu../../../lib/zlib/powerpc-$(OS) -Fu../../../lib/zip/powerpc-$(OS)
 OUTPUT  = ../../../bin/
 OUTPUT  = ../../../bin/
@@ -44,6 +43,16 @@ linux32: clean
 	-FE$(OUTPUT)i386-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -TLINUX -Pi386 -Xd
 	-FE$(OUTPUT)i386-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -TLINUX -Pi386 -Xd
 	strip $(OUTPUT)i386-linux/$(TARGET) --strip-unneeded -R .comment -R .note
 	strip $(OUTPUT)i386-linux/$(TARGET) --strip-unneeded -R .comment -R .note
 
 
+Linux64: clean
+	$(FPC) $(UNIT) $(INCLUDE) \
+	-Fu../../../lib/jpeg/x86_64-linux \
+	-Fu../../../lib/ogg/x86_64-linux \
+	-Fu../../../lib/theora/x86_64-linux \
+	-Fu../../../lib/zlib/x86_64-linux \
+	-Fu../../../lib/zip/x86_64-linux \
+	-FE$(OUTPUT)x86_64-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -Tlinux -Px86_64 -Xd
+	strip $(OUTPUT)x86_64-linux/$(TARGET) --strip-unneeded -R .comment -R .note
+
 win32: clean
 win32: clean
 	$(FPC) $(UNIT) $(INCLUDE) \
 	$(FPC) $(UNIT) $(INCLUDE) \
 	-Fu../../../lib/jpeg/i386-win32 \
 	-Fu../../../lib/jpeg/i386-win32 \

+ 14 - 5
Zengl_SRC/demos/FreePascal/02 - Resources/Makefile

@@ -10,15 +10,14 @@ ifeq ($(shell uname), Linux)
   OS    = linux
   OS    = linux
 else ifeq ($(shell uname), Darwin)
 else ifeq ($(shell uname), Darwin)
   OS    = darwin
   OS    = darwin
-  ARCH  = i386
 endif
 endif
 
 
 # Variables
 # Variables
-# Rus: введите свой путь к FPC
-# Eng: enter your path to FPC
-FPC     = fpc
+# Rus: введите свой путь к FPC (fpc, fpc.exe or fpc.sh).
+# Eng: enter your path to FPC (fpc, fpc.exe or fpc.sh).
+FPC     = fpc.sh
 FLAGS   = -O3 -XsX -CX -Sd
 FLAGS   = -O3 -XsX -CX -Sd
-INCLUDE = -Fu../../../headers -Fi../../../headers -Fi../../../srcGEGL -Fi../../../src -Fi../../../srcGL -Fu../../../srcGEGL -Fu../../../extra -Fu../../../src -Fu../../../srcGL
+INCLUDE = -Fu../../../headers -Fi../../../headers -Fi../../../srcGEGL -Fi../../../src -Fi../../../srcGL -Fi../../../srcGL/EGL -Fi../../../srcGL/GLES -Fu../../../srcGEGL -Fu../../../extra -Fu../../../src -Fu../../../srcGL -Fu../../../srcGL/EGL -Fu../../../srcGL/GLES
 LIBS    = -Fu../../../lib/jpeg/$(ARCH)-$(OS) -Fu../../../lib/ogg/$(ARCH)-$(OS) -Fu../../../lib/theora/$(ARCH)-$(OS) -Fu../../../lib/zlib/$(ARCH)-$(OS) -Fu../../../lib/zip/$(ARCH)-$(OS)
 LIBS    = -Fu../../../lib/jpeg/$(ARCH)-$(OS) -Fu../../../lib/ogg/$(ARCH)-$(OS) -Fu../../../lib/theora/$(ARCH)-$(OS) -Fu../../../lib/zlib/$(ARCH)-$(OS) -Fu../../../lib/zip/$(ARCH)-$(OS)
 LIBSPPC = -Fu../../../lib/jpeg/powerpc-$(OS) -Fu../../../lib/ogg/powerpc-$(OS) -Fu../../../lib/theora/powerpc-$(OS) -Fu../../../lib/zlib/powerpc-$(OS) -Fu../../../lib/zip/powerpc-$(OS)
 LIBSPPC = -Fu../../../lib/jpeg/powerpc-$(OS) -Fu../../../lib/ogg/powerpc-$(OS) -Fu../../../lib/theora/powerpc-$(OS) -Fu../../../lib/zlib/powerpc-$(OS) -Fu../../../lib/zip/powerpc-$(OS)
 OUTPUT  = ../../../bin/
 OUTPUT  = ../../../bin/
@@ -43,6 +42,16 @@ linux32: clean
 	-Fu../../../lib/zip/i386-linux \
 	-Fu../../../lib/zip/i386-linux \
 	-FE$(OUTPUT)i386-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -TLINUX -Pi386 -Xd
 	-FE$(OUTPUT)i386-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -TLINUX -Pi386 -Xd
 	strip $(OUTPUT)i386-linux/$(TARGET) --strip-unneeded -R .comment -R .note
 	strip $(OUTPUT)i386-linux/$(TARGET) --strip-unneeded -R .comment -R .note
+	
+Linux64: clean
+	$(FPC) $(UNIT) $(INCLUDE) \
+	-Fu../../../lib/jpeg/x86_64-linux \
+	-Fu../../../lib/ogg/x86_64-linux \
+	-Fu../../../lib/theora/x86_64-linux \
+	-Fu../../../lib/zlib/x86_64-linux \
+	-Fu../../../lib/zip/x86_64-linux \
+	-FE$(OUTPUT)x86_64-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -Tlinux -Px86_64 -Xd
+	strip $(OUTPUT)x86_64-linux/$(TARGET) --strip-unneeded -R .comment -R .note
 
 
 win32: clean
 win32: clean
 	$(FPC) $(UNIT) $(INCLUDE) \
 	$(FPC) $(UNIT) $(INCLUDE) \

+ 14 - 5
Zengl_SRC/demos/FreePascal/03 - Input/Makefile

@@ -10,15 +10,14 @@ ifeq ($(shell uname), Linux)
   OS    = linux
   OS    = linux
 else ifeq ($(shell uname), Darwin)
 else ifeq ($(shell uname), Darwin)
   OS    = darwin
   OS    = darwin
-  ARCH  = i386
 endif
 endif
 
 
 # Variables
 # Variables
-# Rus: введите свой путь к FPC
-# Eng: enter your path to FPC 
-FPC     = fpc
+# Rus: введите свой путь к FPC (fpc, fpc.exe or fpc.sh).
+# Eng: enter your path to FPC (fpc, fpc.exe or fpc.sh).
+FPC     = fpc.sh
 FLAGS   = -O3 -XsX -CX -Sd
 FLAGS   = -O3 -XsX -CX -Sd
-INCLUDE = -Fu../../../headers -Fi../../../headers -Fi../../../srcGEGL -Fi../../../src -Fi../../../srcGL -Fu../../../srcGEGL -Fu../../../extra -Fu../../../src -Fu../../../srcGL
+INCLUDE = -Fu../../../headers -Fi../../../headers -Fi../../../srcGEGL -Fi../../../src -Fi../../../srcGL -Fi../../../srcGL/EGL -Fi../../../srcGL/GLES -Fu../../../srcGEGL -Fu../../../extra -Fu../../../src -Fu../../../srcGL -Fu../../../srcGL/EGL -Fu../../../srcGL/GLES
 LIBS    = -Fu../../../lib/jpeg/$(ARCH)-$(OS) -Fu../../../lib/ogg/$(ARCH)-$(OS) -Fu../../../lib/theora/$(ARCH)-$(OS) -Fu../../../lib/zlib/$(ARCH)-$(OS) -Fu../../../lib/zip/$(ARCH)-$(OS)
 LIBS    = -Fu../../../lib/jpeg/$(ARCH)-$(OS) -Fu../../../lib/ogg/$(ARCH)-$(OS) -Fu../../../lib/theora/$(ARCH)-$(OS) -Fu../../../lib/zlib/$(ARCH)-$(OS) -Fu../../../lib/zip/$(ARCH)-$(OS)
 LIBSPPC = -Fu../../../lib/jpeg/powerpc-$(OS) -Fu../../../lib/ogg/powerpc-$(OS) -Fu../../../lib/theora/powerpc-$(OS) -Fu../../../lib/zlib/powerpc-$(OS) -Fu../../../lib/zip/powerpc-$(OS)
 LIBSPPC = -Fu../../../lib/jpeg/powerpc-$(OS) -Fu../../../lib/ogg/powerpc-$(OS) -Fu../../../lib/theora/powerpc-$(OS) -Fu../../../lib/zlib/powerpc-$(OS) -Fu../../../lib/zip/powerpc-$(OS)
 OUTPUT  = ../../../bin/
 OUTPUT  = ../../../bin/
@@ -43,6 +42,16 @@ linux32: clean
 	-Fu../../../lib/zip/i386-linux \
 	-Fu../../../lib/zip/i386-linux \
 	-FE$(OUTPUT)i386-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -TLINUX -Pi386 -Xd
 	-FE$(OUTPUT)i386-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -TLINUX -Pi386 -Xd
 	strip $(OUTPUT)i386-linux/$(TARGET) --strip-unneeded -R .comment -R .note
 	strip $(OUTPUT)i386-linux/$(TARGET) --strip-unneeded -R .comment -R .note
+	
+Linux64: clean
+	$(FPC) $(UNIT) $(INCLUDE) \
+	-Fu../../../lib/jpeg/x86_64-linux \
+	-Fu../../../lib/ogg/x86_64-linux \
+	-Fu../../../lib/theora/x86_64-linux \
+	-Fu../../../lib/zlib/x86_64-linux \
+	-Fu../../../lib/zip/x86_64-linux \
+	-FE$(OUTPUT)x86_64-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -Tlinux -Px86_64 -Xd
+	strip $(OUTPUT)x86_64-linux/$(TARGET) --strip-unneeded -R .comment -R .note
 
 
 win32: clean
 win32: clean
 	$(FPC) $(UNIT) $(INCLUDE) \
 	$(FPC) $(UNIT) $(INCLUDE) \

+ 14 - 5
Zengl_SRC/demos/FreePascal/04 - Screen Settings/Makefile

@@ -10,15 +10,14 @@ ifeq ($(shell uname), Linux)
   OS    = linux
   OS    = linux
 else ifeq ($(shell uname), Darwin)
 else ifeq ($(shell uname), Darwin)
   OS    = darwin
   OS    = darwin
-  ARCH  = i386
 endif
 endif
 
 
 # Variables
 # Variables
-# Rus: введите свой путь к FPC
-# Eng: enter your path to FPC
-FPC     = fpc
+# Rus: введите свой путь к FPC (fpc, fpc.exe or fpc.sh).
+# Eng: enter your path to FPC (fpc, fpc.exe or fpc.sh).
+FPC     = fpc.sh
 FLAGS   = -O3 -XsX -CX -Sd
 FLAGS   = -O3 -XsX -CX -Sd
-INCLUDE = -Fu../../../headers -Fi../../../headers -Fi../../../srcGEGL -Fi../../../src -Fi../../../srcGL -Fu../../../srcGEGL -Fu../../../extra -Fu../../../src -Fu../../../srcGL
+INCLUDE = -Fu../../../headers -Fi../../../headers -Fi../../../srcGEGL -Fi../../../src -Fi../../../srcGL -Fi../../../srcGL/EGL -Fi../../../srcGL/GLES -Fu../../../srcGEGL -Fu../../../extra -Fu../../../src -Fu../../../srcGL -Fu../../../srcGL/EGL -Fu../../../srcGL/GLES
 LIBS    = -Fu../../../lib/jpeg/$(ARCH)-$(OS) -Fu../../../lib/ogg/$(ARCH)-$(OS) -Fu../../../lib/theora/$(ARCH)-$(OS) -Fu../../../lib/zlib/$(ARCH)-$(OS) -Fu../../../lib/zip/$(ARCH)-$(OS)
 LIBS    = -Fu../../../lib/jpeg/$(ARCH)-$(OS) -Fu../../../lib/ogg/$(ARCH)-$(OS) -Fu../../../lib/theora/$(ARCH)-$(OS) -Fu../../../lib/zlib/$(ARCH)-$(OS) -Fu../../../lib/zip/$(ARCH)-$(OS)
 LIBSPPC = -Fu../../../lib/jpeg/powerpc-$(OS) -Fu../../../lib/ogg/powerpc-$(OS) -Fu../../../lib/theora/powerpc-$(OS) -Fu../../../lib/zlib/powerpc-$(OS) -Fu../../../lib/zip/powerpc-$(OS)
 LIBSPPC = -Fu../../../lib/jpeg/powerpc-$(OS) -Fu../../../lib/ogg/powerpc-$(OS) -Fu../../../lib/theora/powerpc-$(OS) -Fu../../../lib/zlib/powerpc-$(OS) -Fu../../../lib/zip/powerpc-$(OS)
 OUTPUT  = ../../../bin/
 OUTPUT  = ../../../bin/
@@ -43,6 +42,16 @@ linux32: clean
 	-Fu../../../lib/zip/i386-linux \
 	-Fu../../../lib/zip/i386-linux \
 	-FE$(OUTPUT)i386-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -TLINUX -Pi386 -Xd
 	-FE$(OUTPUT)i386-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -TLINUX -Pi386 -Xd
 	strip $(OUTPUT)i386-linux/$(TARGET) --strip-unneeded -R .comment -R .note
 	strip $(OUTPUT)i386-linux/$(TARGET) --strip-unneeded -R .comment -R .note
+	
+Linux64: clean
+	$(FPC) $(UNIT) $(INCLUDE) \
+	-Fu../../../lib/jpeg/x86_64-linux \
+	-Fu../../../lib/ogg/x86_64-linux \
+	-Fu../../../lib/theora/x86_64-linux \
+	-Fu../../../lib/zlib/x86_64-linux \
+	-Fu../../../lib/zip/x86_64-linux \
+	-FE$(OUTPUT)x86_64-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -Tlinux -Px86_64 -Xd
+	strip $(OUTPUT)x86_64-linux/$(TARGET) --strip-unneeded -R .comment -R .note
 
 
 win32: clean
 win32: clean
 	$(FPC) $(UNIT) $(INCLUDE) \
 	$(FPC) $(UNIT) $(INCLUDE) \

+ 14 - 5
Zengl_SRC/demos/FreePascal/05 - Primitives/Makefile

@@ -10,15 +10,14 @@ ifeq ($(shell uname), Linux)
   OS    = linux
   OS    = linux
 else ifeq ($(shell uname), Darwin)
 else ifeq ($(shell uname), Darwin)
   OS    = darwin
   OS    = darwin
-  ARCH  = i386
 endif
 endif
 
 
 # Variables
 # Variables
-# Rus: введите свой путь к FPC
-# Eng: enter your path to FPC
-FPC     = fpc
+# Rus: введите свой путь к FPC (fpc, fpc.exe or fpc.sh).
+# Eng: enter your path to FPC (fpc, fpc.exe or fpc.sh).
+FPC     = fpc.sh
 FLAGS   = -O3 -XsX -CX -Sd -al
 FLAGS   = -O3 -XsX -CX -Sd -al
-INCLUDE = -Fu../../../headers -Fi../../../headers -Fi../../../srcGEGL -Fi../../../src -Fi../../../srcGL -Fu../../../srcGEGL -Fu../../../extra -Fu../../../src -Fu../../../srcGL
+INCLUDE = -Fu../../../headers -Fi../../../headers -Fi../../../srcGEGL -Fi../../../src -Fi../../../srcGL -Fi../../../srcGL/EGL -Fi../../../srcGL/GLES -Fu../../../srcGEGL -Fu../../../extra -Fu../../../src -Fu../../../srcGL -Fu../../../srcGL/EGL -Fu../../../srcGL/GLES
 LIBS    = -Fu../../../lib/jpeg/$(ARCH)-$(OS) -Fu../../../lib/ogg/$(ARCH)-$(OS) -Fu../../../lib/theora/$(ARCH)-$(OS) -Fu../../../lib/zlib/$(ARCH)-$(OS) -Fu../../../lib/zip/$(ARCH)-$(OS)
 LIBS    = -Fu../../../lib/jpeg/$(ARCH)-$(OS) -Fu../../../lib/ogg/$(ARCH)-$(OS) -Fu../../../lib/theora/$(ARCH)-$(OS) -Fu../../../lib/zlib/$(ARCH)-$(OS) -Fu../../../lib/zip/$(ARCH)-$(OS)
 LIBSPPC = -Fu../../../lib/jpeg/powerpc-$(OS) -Fu../../../lib/ogg/powerpc-$(OS) -Fu../../../lib/theora/powerpc-$(OS) -Fu../../../lib/zlib/powerpc-$(OS) -Fu../../../lib/zip/powerpc-$(OS)
 LIBSPPC = -Fu../../../lib/jpeg/powerpc-$(OS) -Fu../../../lib/ogg/powerpc-$(OS) -Fu../../../lib/theora/powerpc-$(OS) -Fu../../../lib/zlib/powerpc-$(OS) -Fu../../../lib/zip/powerpc-$(OS)
 OUTPUT  = ../../../bin/
 OUTPUT  = ../../../bin/
@@ -43,6 +42,16 @@ linux32: clean
 	-Fu../../../lib/zip/i386-linux \
 	-Fu../../../lib/zip/i386-linux \
 	-FE$(OUTPUT)i386-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -TLINUX -Pi386 -Xd
 	-FE$(OUTPUT)i386-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -TLINUX -Pi386 -Xd
 	strip $(OUTPUT)i386-linux/$(TARGET) --strip-unneeded -R .comment -R .note
 	strip $(OUTPUT)i386-linux/$(TARGET) --strip-unneeded -R .comment -R .note
+	
+Linux64: clean
+	$(FPC) $(UNIT) $(INCLUDE) \
+	-Fu../../../lib/jpeg/x86_64-linux \
+	-Fu../../../lib/ogg/x86_64-linux \
+	-Fu../../../lib/theora/x86_64-linux \
+	-Fu../../../lib/zlib/x86_64-linux \
+	-Fu../../../lib/zip/x86_64-linux \
+	-FE$(OUTPUT)x86_64-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -Tlinux -Px86_64 -Xd
+	strip $(OUTPUT)x86_64-linux/$(TARGET) --strip-unneeded -R .comment -R .note
 
 
 win32: clean
 win32: clean
 	$(FPC) $(UNIT) $(INCLUDE) \
 	$(FPC) $(UNIT) $(INCLUDE) \

+ 14 - 5
Zengl_SRC/demos/FreePascal/06 - Text/Makefile

@@ -10,15 +10,14 @@ ifeq ($(shell uname), Linux)
   OS    = linux
   OS    = linux
 else ifeq ($(shell uname), Darwin)
 else ifeq ($(shell uname), Darwin)
   OS    = darwin
   OS    = darwin
-  ARCH  = i386
 endif
 endif
 
 
 # Variables
 # Variables
-# Rus: введите свой путь к FPC
-# Eng: enter your path to FPC
-FPC     = fpc
+# Rus: введите свой путь к FPC (fpc, fpc.exe or fpc.sh).
+# Eng: enter your path to FPC (fpc, fpc.exe or fpc.sh).
+FPC     = fpc.sh
 FLAGS   = -O3 -XsX -CX -Sd -al
 FLAGS   = -O3 -XsX -CX -Sd -al
-INCLUDE = -Fu../../../headers -Fi../../../headers -Fi../../../srcGEGL -Fi../../../src -Fi../../../srcGL -Fu../../../srcGEGL -Fu../../../extra -Fu../../../src -Fu../../../srcGL
+INCLUDE = -Fu../../../headers -Fi../../../headers -Fi../../../srcGEGL -Fi../../../src -Fi../../../srcGL -Fi../../../srcGL/EGL -Fi../../../srcGL/GLES -Fu../../../srcGEGL -Fu../../../extra -Fu../../../src -Fu../../../srcGL -Fu../../../srcGL/EGL -Fu../../../srcGL/GLES
 LIBS    = -Fu../../../lib/jpeg/$(ARCH)-$(OS) -Fu../../../lib/ogg/$(ARCH)-$(OS) -Fu../../../lib/theora/$(ARCH)-$(OS) -Fu../../../lib/zlib/$(ARCH)-$(OS) -Fu../../../lib/zip/$(ARCH)-$(OS)
 LIBS    = -Fu../../../lib/jpeg/$(ARCH)-$(OS) -Fu../../../lib/ogg/$(ARCH)-$(OS) -Fu../../../lib/theora/$(ARCH)-$(OS) -Fu../../../lib/zlib/$(ARCH)-$(OS) -Fu../../../lib/zip/$(ARCH)-$(OS)
 LIBSPPC = -Fu../../../lib/jpeg/powerpc-$(OS) -Fu../../../lib/ogg/powerpc-$(OS) -Fu../../../lib/theora/powerpc-$(OS) -Fu../../../lib/zlib/powerpc-$(OS) -Fu../../../lib/zip/powerpc-$(OS)
 LIBSPPC = -Fu../../../lib/jpeg/powerpc-$(OS) -Fu../../../lib/ogg/powerpc-$(OS) -Fu../../../lib/theora/powerpc-$(OS) -Fu../../../lib/zlib/powerpc-$(OS) -Fu../../../lib/zip/powerpc-$(OS)
 OUTPUT  = ../../../bin/
 OUTPUT  = ../../../bin/
@@ -43,6 +42,16 @@ linux32: clean
 	-Fu../../../lib/zip/i386-linux \
 	-Fu../../../lib/zip/i386-linux \
 	-FE$(OUTPUT)i386-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -TLINUX -Pi386 -Xd
 	-FE$(OUTPUT)i386-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -TLINUX -Pi386 -Xd
 	strip $(OUTPUT)i386-linux/$(TARGET) --strip-unneeded -R .comment -R .note
 	strip $(OUTPUT)i386-linux/$(TARGET) --strip-unneeded -R .comment -R .note
+	
+Linux64: clean
+	$(FPC) $(UNIT) $(INCLUDE) \
+	-Fu../../../lib/jpeg/x86_64-linux \
+	-Fu../../../lib/ogg/x86_64-linux \
+	-Fu../../../lib/theora/x86_64-linux \
+	-Fu../../../lib/zlib/x86_64-linux \
+	-Fu../../../lib/zip/x86_64-linux \
+	-FE$(OUTPUT)x86_64-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -Tlinux -Px86_64 -Xd
+	strip $(OUTPUT)x86_64-linux/$(TARGET) --strip-unneeded -R .comment -R .note
 
 
 win32: clean
 win32: clean
 	$(FPC) $(UNIT) $(INCLUDE) \
 	$(FPC) $(UNIT) $(INCLUDE) \

+ 14 - 5
Zengl_SRC/demos/FreePascal/07 - Sprites/Makefile

@@ -10,15 +10,14 @@ ifeq ($(shell uname), Linux)
   OS    = linux
   OS    = linux
 else ifeq ($(shell uname), Darwin)
 else ifeq ($(shell uname), Darwin)
   OS    = darwin
   OS    = darwin
-  ARCH  = i386
 endif
 endif
 
 
 # Variables
 # Variables
-# Rus: введите свой путь к FPC
-# Eng: enter your path to FPC
-FPC     = fpc
+# Rus: введите свой путь к FPC (fpc, fpc.exe or fpc.sh).
+# Eng: enter your path to FPC (fpc, fpc.exe or fpc.sh).
+FPC     = fpc.sh
 FLAGS   = -O3 -XsX -CX -Sd -al
 FLAGS   = -O3 -XsX -CX -Sd -al
-INCLUDE = -Fu../../../headers -Fi../../../headers -Fi../../../srcGEGL -Fi../../../src -Fi../../../srcGL -Fu../../../srcGEGL -Fu../../../extra -Fu../../../src -Fu../../../srcGL
+INCLUDE = -Fu../../../headers -Fi../../../headers -Fi../../../srcGEGL -Fi../../../src -Fi../../../srcGL -Fi../../../srcGL/EGL -Fi../../../srcGL/GLES -Fu../../../srcGEGL -Fu../../../extra -Fu../../../src -Fu../../../srcGL -Fu../../../srcGL/EGL -Fu../../../srcGL/GLES
 LIBS    = -Fu../../../lib/jpeg/$(ARCH)-$(OS) -Fu../../../lib/ogg/$(ARCH)-$(OS) -Fu../../../lib/theora/$(ARCH)-$(OS) -Fu../../../lib/zlib/$(ARCH)-$(OS) -Fu../../../lib/zip/$(ARCH)-$(OS)
 LIBS    = -Fu../../../lib/jpeg/$(ARCH)-$(OS) -Fu../../../lib/ogg/$(ARCH)-$(OS) -Fu../../../lib/theora/$(ARCH)-$(OS) -Fu../../../lib/zlib/$(ARCH)-$(OS) -Fu../../../lib/zip/$(ARCH)-$(OS)
 LIBSPPC = -Fu../../../lib/jpeg/powerpc-$(OS) -Fu../../../lib/ogg/powerpc-$(OS) -Fu../../../lib/theora/powerpc-$(OS) -Fu../../../lib/zlib/powerpc-$(OS) -Fu../../../lib/zip/powerpc-$(OS)
 LIBSPPC = -Fu../../../lib/jpeg/powerpc-$(OS) -Fu../../../lib/ogg/powerpc-$(OS) -Fu../../../lib/theora/powerpc-$(OS) -Fu../../../lib/zlib/powerpc-$(OS) -Fu../../../lib/zip/powerpc-$(OS)
 OUTPUT  = ../../../bin/
 OUTPUT  = ../../../bin/
@@ -43,6 +42,16 @@ linux32: clean
 	-Fu../../../lib/zip/i386-linux \
 	-Fu../../../lib/zip/i386-linux \
 	-FE$(OUTPUT)i386-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -TLINUX -Pi386 -Xd
 	-FE$(OUTPUT)i386-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -TLINUX -Pi386 -Xd
 	strip $(OUTPUT)i386-linux/$(TARGET) --strip-unneeded -R .comment -R .note
 	strip $(OUTPUT)i386-linux/$(TARGET) --strip-unneeded -R .comment -R .note
+		
+Linux64: clean
+	$(FPC) $(UNIT) $(INCLUDE) \
+	-Fu../../../lib/jpeg/x86_64-linux \
+	-Fu../../../lib/ogg/x86_64-linux \
+	-Fu../../../lib/theora/x86_64-linux \
+	-Fu../../../lib/zlib/x86_64-linux \
+	-Fu../../../lib/zip/x86_64-linux \
+	-FE$(OUTPUT)x86_64-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -Tlinux -Px86_64 -Xd
+	strip $(OUTPUT)x86_64-linux/$(TARGET) --strip-unneeded -R .comment -R .note
 
 
 win32: clean
 win32: clean
 	$(FPC) $(UNIT) $(INCLUDE) \
 	$(FPC) $(UNIT) $(INCLUDE) \

+ 14 - 5
Zengl_SRC/demos/FreePascal/08 - Sprite Engine/Makefile

@@ -10,15 +10,14 @@ ifeq ($(shell uname), Linux)
   OS    = linux
   OS    = linux
 else ifeq ($(shell uname), Darwin)
 else ifeq ($(shell uname), Darwin)
   OS    = darwin
   OS    = darwin
-  ARCH  = i386
 endif
 endif
 
 
 # Variables
 # Variables
-# Rus: введите свой путь к FPC
-# Eng: enter your path to FPC
-FPC     = fpc
+# Rus: введите свой путь к FPC (fpc, fpc.exe or fpc.sh).
+# Eng: enter your path to FPC (fpc, fpc.exe or fpc.sh).
+FPC     = fpc.sh
 FLAGS   = -O3 -XsX -CX -Sd -al
 FLAGS   = -O3 -XsX -CX -Sd -al
-INCLUDE = -Fu../../../headers -Fi../../../headers -Fi../../../srcGEGL -Fi../../../src -Fi../../../srcGL -Fu../../../srcGEGL -Fu../../../extra -Fu../../../src -Fu../../../srcGL
+INCLUDE = -Fu../../../headers -Fi../../../headers -Fi../../../srcGEGL -Fi../../../src -Fi../../../srcGL -Fi../../../srcGL/EGL -Fi../../../srcGL/GLES -Fu../../../srcGEGL -Fu../../../extra -Fu../../../src -Fu../../../srcGL -Fu../../../srcGL/EGL -Fu../../../srcGL/GLES
 LIBS    = -Fu../../../lib/jpeg/$(ARCH)-$(OS) -Fu../../../lib/ogg/$(ARCH)-$(OS) -Fu../../../lib/theora/$(ARCH)-$(OS) -Fu../../../lib/zlib/$(ARCH)-$(OS) -Fu../../../lib/zip/$(ARCH)-$(OS)
 LIBS    = -Fu../../../lib/jpeg/$(ARCH)-$(OS) -Fu../../../lib/ogg/$(ARCH)-$(OS) -Fu../../../lib/theora/$(ARCH)-$(OS) -Fu../../../lib/zlib/$(ARCH)-$(OS) -Fu../../../lib/zip/$(ARCH)-$(OS)
 LIBSPPC = -Fu../../../lib/jpeg/powerpc-$(OS) -Fu../../../lib/ogg/powerpc-$(OS) -Fu../../../lib/theora/powerpc-$(OS) -Fu../../../lib/zlib/powerpc-$(OS) -Fu../../../lib/zip/powerpc-$(OS)
 LIBSPPC = -Fu../../../lib/jpeg/powerpc-$(OS) -Fu../../../lib/ogg/powerpc-$(OS) -Fu../../../lib/theora/powerpc-$(OS) -Fu../../../lib/zlib/powerpc-$(OS) -Fu../../../lib/zip/powerpc-$(OS)
 OUTPUT  = ../../../bin/
 OUTPUT  = ../../../bin/
@@ -44,6 +43,16 @@ linux32: clean
 	-FE$(OUTPUT)i386-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -TLINUX -Pi386 -Xd
 	-FE$(OUTPUT)i386-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -TLINUX -Pi386 -Xd
 	strip $(OUTPUT)i386-linux/$(TARGET) --strip-unneeded -R .comment -R .note
 	strip $(OUTPUT)i386-linux/$(TARGET) --strip-unneeded -R .comment -R .note
 
 
+Linux64: clean
+	$(FPC) $(UNIT) $(INCLUDE) \
+	-Fu../../../lib/jpeg/x86_64-linux \
+	-Fu../../../lib/ogg/x86_64-linux \
+	-Fu../../../lib/theora/x86_64-linux \
+	-Fu../../../lib/zlib/x86_64-linux \
+	-Fu../../../lib/zip/x86_64-linux \
+	-FE$(OUTPUT)x86_64-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -Tlinux -Px86_64 -Xd
+	strip $(OUTPUT)x86_64-linux/$(TARGET) --strip-unneeded -R .comment -R .note
+
 win32: clean
 win32: clean
 	$(FPC) $(UNIT) $(INCLUDE) \
 	$(FPC) $(UNIT) $(INCLUDE) \
 	-Fu../../../lib/jpeg/i386-win32 \
 	-Fu../../../lib/jpeg/i386-win32 \

+ 14 - 5
Zengl_SRC/demos/FreePascal/09 - Sprite Engine(Classes)/Makefile

@@ -10,15 +10,14 @@ ifeq ($(shell uname), Linux)
   OS    = linux
   OS    = linux
 else ifeq ($(shell uname), Darwin)
 else ifeq ($(shell uname), Darwin)
   OS    = darwin
   OS    = darwin
-  ARCH  = i386
 endif
 endif
 
 
 # Variables
 # Variables
-# Rus: введите свой путь к FPC
-# Eng: enter your path to FPC
-FPC     = fpc
+# Rus: введите свой путь к FPC (fpc, fpc.exe or fpc.sh).
+# Eng: enter your path to FPC (fpc, fpc.exe or fpc.sh).
+FPC     = fpc.sh
 FLAGS   = -O3 -XsX -CX -Sd -al
 FLAGS   = -O3 -XsX -CX -Sd -al
-INCLUDE = -Fu../../../headers -Fi../../../headers -Fi../../../srcGEGL -Fi../../../src -Fi../../../srcGL -Fu../../../srcGEGL -Fu../../../extra -Fu../../../src -Fu../../../srcGL
+INCLUDE = -Fu../../../headers -Fi../../../headers -Fi../../../srcGEGL -Fi../../../src -Fi../../../srcGL -Fi../../../srcGL/EGL -Fi../../../srcGL/GLES -Fu../../../srcGEGL -Fu../../../extra -Fu../../../src -Fu../../../srcGL -Fu../../../srcGL/EGL -Fu../../../srcGL/GLES
 LIBS    = -Fu../../../lib/jpeg/$(ARCH)-$(OS) -Fu../../../lib/ogg/$(ARCH)-$(OS) -Fu../../../lib/theora/$(ARCH)-$(OS) -Fu../../../lib/zlib/$(ARCH)-$(OS) -Fu../../../lib/zip/$(ARCH)-$(OS)
 LIBS    = -Fu../../../lib/jpeg/$(ARCH)-$(OS) -Fu../../../lib/ogg/$(ARCH)-$(OS) -Fu../../../lib/theora/$(ARCH)-$(OS) -Fu../../../lib/zlib/$(ARCH)-$(OS) -Fu../../../lib/zip/$(ARCH)-$(OS)
 LIBSPPC = -Fu../../../lib/jpeg/powerpc-$(OS) -Fu../../../lib/ogg/powerpc-$(OS) -Fu../../../lib/theora/powerpc-$(OS) -Fu../../../lib/zlib/powerpc-$(OS) -Fu../../../lib/zip/powerpc-$(OS)
 LIBSPPC = -Fu../../../lib/jpeg/powerpc-$(OS) -Fu../../../lib/ogg/powerpc-$(OS) -Fu../../../lib/theora/powerpc-$(OS) -Fu../../../lib/zlib/powerpc-$(OS) -Fu../../../lib/zip/powerpc-$(OS)
 OUTPUT  = ../../../bin/
 OUTPUT  = ../../../bin/
@@ -44,6 +43,16 @@ linux32: clean
 	-FE$(OUTPUT)i386-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -TLINUX -Pi386 -Xd
 	-FE$(OUTPUT)i386-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -TLINUX -Pi386 -Xd
 	strip $(OUTPUT)i386-linux/$(TARGET) --strip-unneeded -R .comment -R .note
 	strip $(OUTPUT)i386-linux/$(TARGET) --strip-unneeded -R .comment -R .note
 
 
+Linux64: clean
+	$(FPC) $(UNIT) $(INCLUDE) \
+	-Fu../../../lib/jpeg/x86_64-linux \
+	-Fu../../../lib/ogg/x86_64-linux \
+	-Fu../../../lib/theora/x86_64-linux \
+	-Fu../../../lib/zlib/x86_64-linux \
+	-Fu../../../lib/zip/x86_64-linux \
+	-FE$(OUTPUT)x86_64-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -Tlinux -Px86_64 -Xd
+	strip $(OUTPUT)x86_64-linux/$(TARGET) --strip-unneeded -R .comment -R .note
+
 win32: clean
 win32: clean
 	$(FPC) $(UNIT) $(INCLUDE) \
 	$(FPC) $(UNIT) $(INCLUDE) \
 	-Fu../../../lib/jpeg/i386-win32 \
 	-Fu../../../lib/jpeg/i386-win32 \

+ 14 - 5
Zengl_SRC/demos/FreePascal/10 - Tiles/Makefile

@@ -10,15 +10,14 @@ ifeq ($(shell uname), Linux)
   OS    = linux
   OS    = linux
 else ifeq ($(shell uname), Darwin)
 else ifeq ($(shell uname), Darwin)
   OS    = darwin
   OS    = darwin
-  ARCH  = i386
 endif
 endif
 
 
 # Variables
 # Variables
-# Rus: введите свой путь к FPC
-# Eng: enter your path to FPC
-FPC     = fpc
+# Rus: введите свой путь к FPC (fpc, fpc.exe or fpc.sh).
+# Eng: enter your path to FPC (fpc, fpc.exe or fpc.sh).
+FPC     = fpc.sh
 FLAGS   = -O3 -XsX -CX -Sd -al
 FLAGS   = -O3 -XsX -CX -Sd -al
-INCLUDE = -Fu../../../headers -Fi../../../headers -Fi../../../srcGEGL -Fi../../../src -Fi../../../srcGL -Fu../../../srcGEGL -Fu../../../extra -Fu../../../src -Fu../../../srcGL
+INCLUDE = -Fu../../../headers -Fi../../../headers -Fi../../../srcGEGL -Fi../../../src -Fi../../../srcGL -Fi../../../srcGL/EGL -Fi../../../srcGL/GLES -Fu../../../srcGEGL -Fu../../../extra -Fu../../../src -Fu../../../srcGL -Fu../../../srcGL/EGL -Fu../../../srcGL/GLES
 LIBS    = -Fu../../../lib/jpeg/$(ARCH)-$(OS) -Fu../../../lib/ogg/$(ARCH)-$(OS) -Fu../../../lib/theora/$(ARCH)-$(OS) -Fu../../../lib/zlib/$(ARCH)-$(OS) -Fu../../../lib/zip/$(ARCH)-$(OS)
 LIBS    = -Fu../../../lib/jpeg/$(ARCH)-$(OS) -Fu../../../lib/ogg/$(ARCH)-$(OS) -Fu../../../lib/theora/$(ARCH)-$(OS) -Fu../../../lib/zlib/$(ARCH)-$(OS) -Fu../../../lib/zip/$(ARCH)-$(OS)
 LIBSPPC = -Fu../../../lib/jpeg/powerpc-$(OS) -Fu../../../lib/ogg/powerpc-$(OS) -Fu../../../lib/theora/powerpc-$(OS) -Fu../../../lib/zlib/powerpc-$(OS) -Fu../../../lib/zip/powerpc-$(OS)
 LIBSPPC = -Fu../../../lib/jpeg/powerpc-$(OS) -Fu../../../lib/ogg/powerpc-$(OS) -Fu../../../lib/theora/powerpc-$(OS) -Fu../../../lib/zlib/powerpc-$(OS) -Fu../../../lib/zip/powerpc-$(OS)
 OUTPUT  = ../../../bin/
 OUTPUT  = ../../../bin/
@@ -44,6 +43,16 @@ linux32: clean
 	-FE$(OUTPUT)i386-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -TLINUX -Pi386 -Xd
 	-FE$(OUTPUT)i386-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -TLINUX -Pi386 -Xd
 	strip $(OUTPUT)i386-linux/$(TARGET) --strip-unneeded -R .comment -R .note
 	strip $(OUTPUT)i386-linux/$(TARGET) --strip-unneeded -R .comment -R .note
 
 
+Linux64: clean
+	$(FPC) $(UNIT) $(INCLUDE) \
+	-Fu../../../lib/jpeg/x86_64-linux \
+	-Fu../../../lib/ogg/x86_64-linux \
+	-Fu../../../lib/theora/x86_64-linux \
+	-Fu../../../lib/zlib/x86_64-linux \
+	-Fu../../../lib/zip/x86_64-linux \
+	-FE$(OUTPUT)x86_64-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -Tlinux -Px86_64 -Xd
+	strip $(OUTPUT)x86_64-linux/$(TARGET) --strip-unneeded -R .comment -R .note
+
 win32: clean
 win32: clean
 	$(FPC) $(UNIT) $(INCLUDE) \
 	$(FPC) $(UNIT) $(INCLUDE) \
 	-Fu../../../lib/jpeg/i386-win32 \
 	-Fu../../../lib/jpeg/i386-win32 \

+ 14 - 5
Zengl_SRC/demos/FreePascal/11 - Grid/Makefile

@@ -10,15 +10,14 @@ ifeq ($(shell uname), Linux)
   OS    = linux
   OS    = linux
 else ifeq ($(shell uname), Darwin)
 else ifeq ($(shell uname), Darwin)
   OS    = darwin
   OS    = darwin
-  ARCH  = i386
 endif
 endif
 
 
 # Variables
 # Variables
-# Rus: введите свой путь к FPC
-# Eng: enter your path to FPC
-FPC     = fpc
+# Rus: введите свой путь к FPC (fpc, fpc.exe or fpc.sh).
+# Eng: enter your path to FPC (fpc, fpc.exe or fpc.sh).
+FPC     = fpc.sh
 FLAGS   = -O3 -XsX -CX -Sd -al
 FLAGS   = -O3 -XsX -CX -Sd -al
-INCLUDE = -Fu../../../headers -Fi../../../headers -Fi../../../srcGEGL -Fi../../../src -Fi../../../srcGL -Fu../../../srcGEGL -Fu../../../extra -Fu../../../src -Fu../../../srcGL
+INCLUDE = -Fu../../../headers -Fi../../../headers -Fi../../../srcGEGL -Fi../../../src -Fi../../../srcGL -Fi../../../srcGL/EGL -Fi../../../srcGL/GLES -Fu../../../srcGEGL -Fu../../../extra -Fu../../../src -Fu../../../srcGL -Fu../../../srcGL/EGL -Fu../../../srcGL/GLES
 LIBS    = -Fu../../../lib/jpeg/$(ARCH)-$(OS) -Fu../../../lib/ogg/$(ARCH)-$(OS) -Fu../../../lib/theora/$(ARCH)-$(OS) -Fu../../../lib/zlib/$(ARCH)-$(OS) -Fu../../../lib/zip/$(ARCH)-$(OS)
 LIBS    = -Fu../../../lib/jpeg/$(ARCH)-$(OS) -Fu../../../lib/ogg/$(ARCH)-$(OS) -Fu../../../lib/theora/$(ARCH)-$(OS) -Fu../../../lib/zlib/$(ARCH)-$(OS) -Fu../../../lib/zip/$(ARCH)-$(OS)
 LIBSPPC = -Fu../../../lib/jpeg/powerpc-$(OS) -Fu../../../lib/ogg/powerpc-$(OS) -Fu../../../lib/theora/powerpc-$(OS) -Fu../../../lib/zlib/powerpc-$(OS) -Fu../../../lib/zip/powerpc-$(OS)
 LIBSPPC = -Fu../../../lib/jpeg/powerpc-$(OS) -Fu../../../lib/ogg/powerpc-$(OS) -Fu../../../lib/theora/powerpc-$(OS) -Fu../../../lib/zlib/powerpc-$(OS) -Fu../../../lib/zip/powerpc-$(OS)
 OUTPUT  = ../../../bin/
 OUTPUT  = ../../../bin/
@@ -44,6 +43,16 @@ linux32: clean
 	-FE$(OUTPUT)i386-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -TLINUX -Pi386 -Xd
 	-FE$(OUTPUT)i386-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -TLINUX -Pi386 -Xd
 	strip $(OUTPUT)i386-linux/$(TARGET) --strip-unneeded -R .comment -R .note
 	strip $(OUTPUT)i386-linux/$(TARGET) --strip-unneeded -R .comment -R .note
 
 
+Linux64: clean
+	$(FPC) $(UNIT) $(INCLUDE) \
+	-Fu../../../lib/jpeg/x86_64-linux \
+	-Fu../../../lib/ogg/x86_64-linux \
+	-Fu../../../lib/theora/x86_64-linux \
+	-Fu../../../lib/zlib/x86_64-linux \
+	-Fu../../../lib/zip/x86_64-linux \
+	-FE$(OUTPUT)x86_64-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -Tlinux -Px86_64 -Xd
+	strip $(OUTPUT)x86_64-linux/$(TARGET) --strip-unneeded -R .comment -R .note
+
 win32: clean
 win32: clean
 	$(FPC) $(UNIT) $(INCLUDE) \
 	$(FPC) $(UNIT) $(INCLUDE) \
 	-Fu../../../lib/jpeg/i386-win32 \
 	-Fu../../../lib/jpeg/i386-win32 \

+ 14 - 6
Zengl_SRC/demos/FreePascal/12 - Render into Texture/Makefile

@@ -10,15 +10,13 @@ ifeq ($(shell uname), Linux)
   OS    = linux
   OS    = linux
 else ifeq ($(shell uname), Darwin)
 else ifeq ($(shell uname), Darwin)
   OS    = darwin
   OS    = darwin
-  ARCH  = i386
 endif
 endif
 
 
-# Variables
-# Rus: введите свой путь к FPC
-# Eng: enter your path to FPC
-FPC     = fpc
+# Variables# Rus: введите свой путь к FPC (fpc, fpc.exe or fpc.sh).
+# Eng: enter your path to FPC (fpc, fpc.exe or fpc.sh).
+FPC     = fpc.sh
 FLAGS   = -O3 -XsX -CX -Sd -al
 FLAGS   = -O3 -XsX -CX -Sd -al
-INCLUDE = -Fu../../../headers -Fi../../../headers -Fi../../../srcGEGL -Fi../../../src -Fi../../../srcGL -Fu../../../srcGEGL -Fu../../../extra -Fu../../../src -Fu../../../srcGL
+INCLUDE = -Fu../../../headers -Fi../../../headers -Fi../../../srcGEGL -Fi../../../src -Fi../../../srcGL -Fi../../../srcGL/EGL -Fi../../../srcGL/GLES -Fu../../../srcGEGL -Fu../../../extra -Fu../../../src -Fu../../../srcGL -Fu../../../srcGL/EGL -Fu../../../srcGL/GLES
 LIBS    = -Fu../../../lib/jpeg/$(ARCH)-$(OS) -Fu../../../lib/ogg/$(ARCH)-$(OS) -Fu../../../lib/theora/$(ARCH)-$(OS) -Fu../../../lib/zlib/$(ARCH)-$(OS) -Fu../../../lib/zip/$(ARCH)-$(OS)
 LIBS    = -Fu../../../lib/jpeg/$(ARCH)-$(OS) -Fu../../../lib/ogg/$(ARCH)-$(OS) -Fu../../../lib/theora/$(ARCH)-$(OS) -Fu../../../lib/zlib/$(ARCH)-$(OS) -Fu../../../lib/zip/$(ARCH)-$(OS)
 LIBSPPC = -Fu../../../lib/jpeg/powerpc-$(OS) -Fu../../../lib/ogg/powerpc-$(OS) -Fu../../../lib/theora/powerpc-$(OS) -Fu../../../lib/zlib/powerpc-$(OS) -Fu../../../lib/zip/powerpc-$(OS)
 LIBSPPC = -Fu../../../lib/jpeg/powerpc-$(OS) -Fu../../../lib/ogg/powerpc-$(OS) -Fu../../../lib/theora/powerpc-$(OS) -Fu../../../lib/zlib/powerpc-$(OS) -Fu../../../lib/zip/powerpc-$(OS)
 OUTPUT  = ../../../bin/
 OUTPUT  = ../../../bin/
@@ -44,6 +42,16 @@ linux32: clean
 	-FE$(OUTPUT)i386-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -TLINUX -Pi386 -Xd
 	-FE$(OUTPUT)i386-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -TLINUX -Pi386 -Xd
 	strip $(OUTPUT)i386-linux/$(TARGET) --strip-unneeded -R .comment -R .note
 	strip $(OUTPUT)i386-linux/$(TARGET) --strip-unneeded -R .comment -R .note
 
 
+Linux64: clean
+	$(FPC) $(UNIT) $(INCLUDE) \
+	-Fu../../../lib/jpeg/x86_64-linux \
+	-Fu../../../lib/ogg/x86_64-linux \
+	-Fu../../../lib/theora/x86_64-linux \
+	-Fu../../../lib/zlib/x86_64-linux \
+	-Fu../../../lib/zip/x86_64-linux \
+	-FE$(OUTPUT)x86_64-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -Tlinux -Px86_64 -Xd
+	strip $(OUTPUT)x86_64-linux/$(TARGET) --strip-unneeded -R .comment -R .note
+
 win32: clean
 win32: clean
 	$(FPC) $(UNIT) $(INCLUDE) \
 	$(FPC) $(UNIT) $(INCLUDE) \
 	-Fu../../../lib/jpeg/i386-win32 \
 	-Fu../../../lib/jpeg/i386-win32 \

+ 14 - 5
Zengl_SRC/demos/FreePascal/13 - Particles/Makefile

@@ -10,15 +10,14 @@ ifeq ($(shell uname), Linux)
   OS    = linux
   OS    = linux
 else ifeq ($(shell uname), Darwin)
 else ifeq ($(shell uname), Darwin)
   OS    = darwin
   OS    = darwin
-  ARCH  = i386
 endif
 endif
 
 
 # Variables
 # Variables
-# Rus: введите свой путь к FPC
-# Eng: enter your path to FPC
-FPC     = fpc
+# Rus: введите свой путь к FPC (fpc, fpc.exe or fpc.sh).
+# Eng: enter your path to FPC (fpc, fpc.exe or fpc.sh).
+FPC     = fpc.sh
 FLAGS   = -O3 -XsX -CX -Sd -al
 FLAGS   = -O3 -XsX -CX -Sd -al
-INCLUDE = -Fu../../../headers -Fi../../../headers -Fi../../../srcGEGL -Fi../../../src -Fi../../../srcGL -Fu../../../srcGEGL -Fu../../../extra -Fu../../../src -Fu../../../srcGL
+INCLUDE = -Fu../../../headers -Fi../../../headers -Fi../../../srcGEGL -Fi../../../src -Fi../../../srcGL -Fi../../../srcGL/EGL -Fi../../../srcGL/GLES -Fu../../../srcGEGL -Fu../../../extra -Fu../../../src -Fu../../../srcGL -Fu../../../srcGL/EGL -Fu../../../srcGL/GLES
 LIBS    = -Fu../../../lib/jpeg/$(ARCH)-$(OS) -Fu../../../lib/ogg/$(ARCH)-$(OS) -Fu../../../lib/theora/$(ARCH)-$(OS) -Fu../../../lib/zlib/$(ARCH)-$(OS) -Fu../../../lib/zip/$(ARCH)-$(OS)
 LIBS    = -Fu../../../lib/jpeg/$(ARCH)-$(OS) -Fu../../../lib/ogg/$(ARCH)-$(OS) -Fu../../../lib/theora/$(ARCH)-$(OS) -Fu../../../lib/zlib/$(ARCH)-$(OS) -Fu../../../lib/zip/$(ARCH)-$(OS)
 LIBSPPC = -Fu../../../lib/jpeg/powerpc-$(OS) -Fu../../../lib/ogg/powerpc-$(OS) -Fu../../../lib/theora/powerpc-$(OS) -Fu../../../lib/zlib/powerpc-$(OS) -Fu../../../lib/zip/powerpc-$(OS)
 LIBSPPC = -Fu../../../lib/jpeg/powerpc-$(OS) -Fu../../../lib/ogg/powerpc-$(OS) -Fu../../../lib/theora/powerpc-$(OS) -Fu../../../lib/zlib/powerpc-$(OS) -Fu../../../lib/zip/powerpc-$(OS)
 OUTPUT  = ../../../bin/
 OUTPUT  = ../../../bin/
@@ -44,6 +43,16 @@ linux32: clean
 	-FE$(OUTPUT)i386-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -TLINUX -Pi386 -Xd
 	-FE$(OUTPUT)i386-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -TLINUX -Pi386 -Xd
 	strip $(OUTPUT)i386-linux/$(TARGET) --strip-unneeded -R .comment -R .note
 	strip $(OUTPUT)i386-linux/$(TARGET) --strip-unneeded -R .comment -R .note
 
 
+Linux64: clean
+	$(FPC) $(UNIT) $(INCLUDE) \
+	-Fu../../../lib/jpeg/x86_64-linux \
+	-Fu../../../lib/ogg/x86_64-linux \
+	-Fu../../../lib/theora/x86_64-linux \
+	-Fu../../../lib/zlib/x86_64-linux \
+	-Fu../../../lib/zip/x86_64-linux \
+	-FE$(OUTPUT)x86_64-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -Tlinux -Px86_64 -Xd
+	strip $(OUTPUT)x86_64-linux/$(TARGET) --strip-unneeded -R .comment -R .note
+
 win32: clean
 win32: clean
 	$(FPC) $(UNIT) $(INCLUDE) \
 	$(FPC) $(UNIT) $(INCLUDE) \
 	-Fu../../../lib/jpeg/i386-win32 \
 	-Fu../../../lib/jpeg/i386-win32 \

+ 14 - 5
Zengl_SRC/demos/FreePascal/14 - Sound/Makefile

@@ -10,15 +10,14 @@ ifeq ($(shell uname), Linux)
   OS    = linux
   OS    = linux
 else ifeq ($(shell uname), Darwin)
 else ifeq ($(shell uname), Darwin)
   OS    = darwin
   OS    = darwin
-  ARCH  = i386
 endif
 endif
 
 
 # Variables
 # Variables
-# Rus: введите свой путь к FPC
-# Eng: enter your path to FPC
-FPC     = fpc
+# Rus: введите свой путь к FPC (fpc, fpc.exe or fpc.sh).
+# Eng: enter your path to FPC (fpc, fpc.exe or fpc.sh).
+FPC     = fpc.sh
 FLAGS   = -O3 -XsX -CX -Sd -al
 FLAGS   = -O3 -XsX -CX -Sd -al
-INCLUDE = -Fu../../../headers -Fi../../../headers -Fi../../../srcGEGL -Fi../../../src -Fi../../../srcGL -Fu../../../srcGEGL -Fu../../../extra -Fu../../../src -Fu../../../srcGL
+INCLUDE = -Fu../../../headers -Fi../../../headers -Fi../../../srcGEGL -Fi../../../src -Fi../../../srcGL -Fi../../../srcGL/EGL -Fi../../../srcGL/GLES -Fu../../../srcGEGL -Fu../../../extra -Fu../../../src -Fu../../../srcGL -Fu../../../srcGL/EGL -Fu../../../srcGL/GLES
 LIBS    = -Fu../../../lib/jpeg/$(ARCH)-$(OS) -Fu../../../lib/ogg/$(ARCH)-$(OS) -Fu../../../lib/theora/$(ARCH)-$(OS) -Fu../../../lib/zlib/$(ARCH)-$(OS) -Fu../../../lib/zip/$(ARCH)-$(OS)
 LIBS    = -Fu../../../lib/jpeg/$(ARCH)-$(OS) -Fu../../../lib/ogg/$(ARCH)-$(OS) -Fu../../../lib/theora/$(ARCH)-$(OS) -Fu../../../lib/zlib/$(ARCH)-$(OS) -Fu../../../lib/zip/$(ARCH)-$(OS)
 LIBSPPC = -Fu../../../lib/jpeg/powerpc-$(OS) -Fu../../../lib/ogg/powerpc-$(OS) -Fu../../../lib/theora/powerpc-$(OS) -Fu../../../lib/zlib/powerpc-$(OS) -Fu../../../lib/zip/powerpc-$(OS)
 LIBSPPC = -Fu../../../lib/jpeg/powerpc-$(OS) -Fu../../../lib/ogg/powerpc-$(OS) -Fu../../../lib/theora/powerpc-$(OS) -Fu../../../lib/zlib/powerpc-$(OS) -Fu../../../lib/zip/powerpc-$(OS)
 OUTPUT  = ../../../bin/
 OUTPUT  = ../../../bin/
@@ -44,6 +43,16 @@ linux32: clean
 	-FE$(OUTPUT)i386-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -TLINUX -Pi386 -Xd
 	-FE$(OUTPUT)i386-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -TLINUX -Pi386 -Xd
 	strip $(OUTPUT)i386-linux/$(TARGET) --strip-unneeded -R .comment -R .note
 	strip $(OUTPUT)i386-linux/$(TARGET) --strip-unneeded -R .comment -R .note
 
 
+Linux64: clean
+	$(FPC) $(UNIT) $(INCLUDE) \
+	-Fu../../../lib/jpeg/x86_64-linux \
+	-Fu../../../lib/ogg/x86_64-linux \
+	-Fu../../../lib/theora/x86_64-linux \
+	-Fu../../../lib/zlib/x86_64-linux \
+	-Fu../../../lib/zip/x86_64-linux \
+	-FE$(OUTPUT)x86_64-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -Tlinux -Px86_64 -Xd
+	strip $(OUTPUT)x86_64-linux/$(TARGET) --strip-unneeded -R .comment -R .note
+
 win32: clean
 win32: clean
 	$(FPC) $(UNIT) $(INCLUDE) \
 	$(FPC) $(UNIT) $(INCLUDE) \
 	-Fu../../../lib/jpeg/i386-win32 \
 	-Fu../../../lib/jpeg/i386-win32 \

+ 14 - 5
Zengl_SRC/demos/FreePascal/15 - Video/Makefile

@@ -10,15 +10,14 @@ ifeq ($(shell uname), Linux)
   OS    = linux
   OS    = linux
 else ifeq ($(shell uname), Darwin)
 else ifeq ($(shell uname), Darwin)
   OS    = darwin
   OS    = darwin
-  ARCH  = i386
 endif
 endif
 
 
 # Variables
 # Variables
-# Rus: введите свой путь к FPC
-# Eng: enter your path to FPC
-FPC     = fpc
+# Rus: введите свой путь к FPC (fpc, fpc.exe or fpc.sh).
+# Eng: enter your path to FPC (fpc, fpc.exe or fpc.sh).
+FPC     = fpc.sh
 FLAGS   = -O3 -XsX -CX -Sd -al
 FLAGS   = -O3 -XsX -CX -Sd -al
-INCLUDE = -Fu../../../headers -Fi../../../headers -Fi../../../srcGEGL -Fi../../../src -Fi../../../srcGL -Fu../../../srcGEGL -Fu../../../extra -Fu../../../src -Fu../../../srcGL
+INCLUDE = -Fu../../../headers -Fi../../../headers -Fi../../../srcGEGL -Fi../../../src -Fi../../../srcGL -Fi../../../srcGL/EGL -Fi../../../srcGL/GLES -Fu../../../srcGEGL -Fu../../../extra -Fu../../../src -Fu../../../srcGL -Fu../../../srcGL/EGL -Fu../../../srcGL/GLES
 LIBS    = -Fu../../../lib/jpeg/$(ARCH)-$(OS) -Fu../../../lib/ogg/$(ARCH)-$(OS) -Fu../../../lib/theora/$(ARCH)-$(OS) -Fu../../../lib/zlib/$(ARCH)-$(OS) -Fu../../../lib/zip/$(ARCH)-$(OS)
 LIBS    = -Fu../../../lib/jpeg/$(ARCH)-$(OS) -Fu../../../lib/ogg/$(ARCH)-$(OS) -Fu../../../lib/theora/$(ARCH)-$(OS) -Fu../../../lib/zlib/$(ARCH)-$(OS) -Fu../../../lib/zip/$(ARCH)-$(OS)
 LIBSPPC = -Fu../../../lib/jpeg/powerpc-$(OS) -Fu../../../lib/ogg/powerpc-$(OS) -Fu../../../lib/theora/powerpc-$(OS) -Fu../../../lib/zlib/powerpc-$(OS) -Fu../../../lib/zip/powerpc-$(OS)
 LIBSPPC = -Fu../../../lib/jpeg/powerpc-$(OS) -Fu../../../lib/ogg/powerpc-$(OS) -Fu../../../lib/theora/powerpc-$(OS) -Fu../../../lib/zlib/powerpc-$(OS) -Fu../../../lib/zip/powerpc-$(OS)
 OUTPUT  = ../../../bin/
 OUTPUT  = ../../../bin/
@@ -44,6 +43,16 @@ linux32: clean
 	-FE$(OUTPUT)i386-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -TLINUX -Pi386 -Xd
 	-FE$(OUTPUT)i386-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -TLINUX -Pi386 -Xd
 	strip $(OUTPUT)i386-linux/$(TARGET) --strip-unneeded -R .comment -R .note
 	strip $(OUTPUT)i386-linux/$(TARGET) --strip-unneeded -R .comment -R .note
 
 
+Linux64: clean
+	$(FPC) $(UNIT) $(INCLUDE) \
+	-Fu../../../lib/jpeg/x86_64-linux \
+	-Fu../../../lib/ogg/x86_64-linux \
+	-Fu../../../lib/theora/x86_64-linux \
+	-Fu../../../lib/zlib/x86_64-linux \
+	-Fu../../../lib/zip/x86_64-linux \
+	-FE$(OUTPUT)x86_64-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -Tlinux -Px86_64 -Xd
+	strip $(OUTPUT)x86_64-linux/$(TARGET) --strip-unneeded -R .comment -R .note
+
 win32: clean
 win32: clean
 	$(FPC) $(UNIT) $(INCLUDE) \
 	$(FPC) $(UNIT) $(INCLUDE) \
 	-Fu../../../lib/jpeg/i386-win32 \
 	-Fu../../../lib/jpeg/i386-win32 \

+ 14 - 5
Zengl_SRC/demos/FreePascal/16 - Physics/Makefile

@@ -10,15 +10,14 @@ ifeq ($(shell uname), Linux)
   OS    = linux
   OS    = linux
 else ifeq ($(shell uname), Darwin)
 else ifeq ($(shell uname), Darwin)
   OS    = darwin
   OS    = darwin
-  ARCH  = i386
 endif
 endif
 
 
 # Variables
 # Variables
-# Rus: введите свой путь к FPC
-# Eng: enter your path to FPC
-FPC     = fpc
+# Rus: введите свой путь к FPC (fpc, fpc.exe or fpc.sh).
+# Eng: enter your path to FPC (fpc, fpc.exe or fpc.sh).
+FPC     = fpc.sh
 FLAGS   = -O3 -XsX -CX -Sd -al
 FLAGS   = -O3 -XsX -CX -Sd -al
-INCLUDE = -Fu../../../headers -Fi../../../headers -Fi../../../srcGEGL -Fi../../../src -Fi../../../srcGL -Fu../../../srcGEGL -Fu../../../extra -Fu../../../src -Fu../../../srcGL
+INCLUDE = -Fu../../../headers -Fi../../../headers -Fi../../../srcGEGL -Fi../../../src -Fi../../../srcGL -Fi../../../srcGL/EGL -Fi../../../srcGL/GLES -Fu../../../srcGEGL -Fu../../../extra -Fu../../../src -Fu../../../srcGL -Fu../../../srcGL/EGL -Fu../../../srcGL/GLES
 LIBS    = -Fu../../../lib/chipmunk/$(ARCH)-$(OS) -Fu../../../lib/jpeg/$(ARCH)-$(OS) -Fu../../../lib/ogg/$(ARCH)-$(OS) -Fu../../../lib/theora/$(ARCH)-$(OS) -Fu../../../lib/zlib/$(ARCH)-$(OS) -Fu../../../lib/zip/$(ARCH)-$(OS)
 LIBS    = -Fu../../../lib/chipmunk/$(ARCH)-$(OS) -Fu../../../lib/jpeg/$(ARCH)-$(OS) -Fu../../../lib/ogg/$(ARCH)-$(OS) -Fu../../../lib/theora/$(ARCH)-$(OS) -Fu../../../lib/zlib/$(ARCH)-$(OS) -Fu../../../lib/zip/$(ARCH)-$(OS)
 LIBSPPC = -Fu../../../lib/chipmunk/powerpc-$(OS) -Fu../../../lib/jpeg/powerpc-$(OS) -Fu../../../lib/ogg/powerpc-$(OS) -Fu../../../lib/theora/powerpc-$(OS) -Fu../../../lib/zlib/powerpc-$(OS) -Fu../../../lib/zip/powerpc-$(OS)
 LIBSPPC = -Fu../../../lib/chipmunk/powerpc-$(OS) -Fu../../../lib/jpeg/powerpc-$(OS) -Fu../../../lib/ogg/powerpc-$(OS) -Fu../../../lib/theora/powerpc-$(OS) -Fu../../../lib/zlib/powerpc-$(OS) -Fu../../../lib/zip/powerpc-$(OS)
 OUTPUT  = ../../../bin/
 OUTPUT  = ../../../bin/
@@ -45,6 +44,16 @@ linux32: clean
 	-FE$(OUTPUT)i386-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -TLINUX -Pi386 -Xd
 	-FE$(OUTPUT)i386-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -TLINUX -Pi386 -Xd
 	strip $(OUTPUT)i386-linux/$(TARGET) --strip-unneeded -R .comment -R .note
 	strip $(OUTPUT)i386-linux/$(TARGET) --strip-unneeded -R .comment -R .note
 
 
+Linux64: clean
+	$(FPC) $(UNIT) $(INCLUDE) \
+	-Fu../../../lib/jpeg/x86_64-linux \
+	-Fu../../../lib/ogg/x86_64-linux \
+	-Fu../../../lib/theora/x86_64-linux \
+	-Fu../../../lib/zlib/x86_64-linux \
+	-Fu../../../lib/zip/x86_64-linux \
+	-FE$(OUTPUT)x86_64-linux/ -FU$(TMP) $(FLAGS) -o$(TARGET) -Tlinux -Px86_64 -Xd
+	strip $(OUTPUT)x86_64-linux/$(TARGET) --strip-unneeded -R .comment -R .note
+
 win32: clean
 win32: clean
 	$(FPC) $(UNIT) $(INCLUDE) \
 	$(FPC) $(UNIT) $(INCLUDE) \
 	-Fu../../../lib/chipmunk/i386-win32 \
 	-Fu../../../lib/chipmunk/i386-win32 \

+ 19 - 0
Zengl_SRC/demos/FreePascal/Makefile

@@ -54,6 +54,25 @@ linux32:
 	make -C $(DEMO16) linux32
 	make -C $(DEMO16) linux32
 	make -C $(DEMO17) linux32
 	make -C $(DEMO17) linux32
 
 
+linux64:
+	make -C $(DEMO01) linux64
+	make -C $(DEMO02) linux64
+	make -C $(DEMO03) linux64
+	make -C $(DEMO04) linux64
+	make -C $(DEMO05) linux64
+	make -C $(DEMO06) linux64
+	make -C $(DEMO07) linux64
+	make -C $(DEMO08) linux64
+	make -C $(DEMO09) linux64
+	make -C $(DEMO10) linux64
+	make -C $(DEMO11) linux64
+	make -C $(DEMO12) linux64
+	make -C $(DEMO13) linux64
+	make -C $(DEMO14) linux64
+	make -C $(DEMO15) linux64
+	make -C $(DEMO16) linux64
+	make -C $(DEMO17) linux64
+
 win32:
 win32:
 	make -C $(DEMO01) win32
 	make -C $(DEMO01) win32
 	make -C $(DEMO02) win32
 	make -C $(DEMO02) win32

+ 0 - 0
Zengl_SRC/demos/FreePascal/tmp/tmpForFPC → Zengl_SRC/demos/FreePascal/tmp/__tmpForFPC


+ 21 - 0
Zengl_SRC/demos/Lazarus/02 - Resources/demo02.lps

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONFIG>
+  <ProjectSession>
+    <Version Value="12"/>
+    <BuildModes Active="Release"/>
+    <Units Count="1">
+      <Unit0>
+        <Filename Value="demo02.lpr"/>
+        <IsPartOfProject Value="True"/>
+        <IsVisibleTab Value="True"/>
+        <CursorPos X="41" Y="18"/>
+        <UsageCount Value="20"/>
+        <Loaded Value="True"/>
+      </Unit0>
+    </Units>
+    <RunParams>
+      <FormatVersion Value="2"/>
+      <Modes ActiveMode="default"/>
+    </RunParams>
+  </ProjectSession>
+</CONFIG>

+ 140 - 0
Zengl_SRC/demos/Lazarus/03 - Input/backup/demo03.lpi

@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONFIG>
+  <ProjectOptions>
+    <Version Value="12"/>
+    <General>
+      <Flags>
+        <SaveOnlyProjectUnits Value="True"/>
+        <MainUnitHasCreateFormStatements Value="False"/>
+        <MainUnitHasTitleStatement Value="False"/>
+        <MainUnitHasScaledStatement Value="False"/>
+        <CompatibilityMode Value="True"/>
+      </Flags>
+      <SessionStorage Value="InProjectDir"/>
+      <ResourceType Value="res"/>
+      <UseXPManifest Value="True"/>
+      <Icon Value="0"/>
+    </General>
+    <i18n>
+      <EnableI18N LFM="False"/>
+    </i18n>
+    <BuildModes Count="2">
+      <Item1 Name="Release" Default="True"/>
+      <Item2 Name="Debug">
+        <CompilerOptions>
+          <Version Value="11"/>
+          <Target>
+            <Filename Value="../../../bin/$(TargetCPU)-$(TargetOS)/demo03"/>
+          </Target>
+          <SearchPaths>
+            <IncludeFiles Value="$(ProjOutDir);../../../headers"/>
+            <OtherUnitFiles Value="../../../headers;../../../src;../../../lib/jpeg/$(TargetCPU)-$(TargetOS);../../../lib/msvcrt/$(TargetCPU);../../../lib/ogg/$(TargetCPU)-$(TargetOS);../../../lib/theora/$(TargetCPU)-$(TargetOS);../../../lib/zlib/$(TargetCPU)-$(TargetOS);../../../lib/zip/$(TargetCPU)-$(TargetOS)"/>
+            <UnitOutputDirectory Value="../tmp/$(TargetCPU)-$(TargetOS)"/>
+          </SearchPaths>
+          <Parsing>
+            <SyntaxOptions>
+              <SyntaxMode Value="Delphi"/>
+            </SyntaxOptions>
+          </Parsing>
+          <CodeGeneration>
+            <Checks>
+              <IOChecks Value="True"/>
+              <RangeChecks Value="True"/>
+              <OverflowChecks Value="True"/>
+              <StackChecks Value="True"/>
+            </Checks>
+            <VerifyObjMethodCallValidity Value="True"/>
+            <Optimizations>
+              <OptimizationLevel Value="0"/>
+            </Optimizations>
+          </CodeGeneration>
+          <Linking>
+            <Debugging>
+              <UseHeaptrc Value="True"/>
+            </Debugging>
+            <Options>
+              <Win32>
+                <GraphicApplication Value="True"/>
+              </Win32>
+            </Options>
+          </Linking>
+          <Other>
+            <Verbosity>
+              <ShowNotes Value="False"/>
+              <ShowHints Value="False"/>
+            </Verbosity>
+          </Other>
+        </CompilerOptions>
+      </Item2>
+    </BuildModes>
+    <PublishOptions>
+      <Version Value="2"/>
+    </PublishOptions>
+    <RunParams>
+      <FormatVersion Value="2"/>
+      <Modes Count="1">
+        <Mode0 Name="default"/>
+      </Modes>
+    </RunParams>
+    <Units Count="1">
+      <Unit0>
+        <Filename Value="demo03.lpr"/>
+        <IsPartOfProject Value="True"/>
+      </Unit0>
+    </Units>
+  </ProjectOptions>
+  <CompilerOptions>
+    <Version Value="11"/>
+    <Target>
+      <Filename Value="../../../bin/$(TargetCPU)-$(TargetOS)/demo03"/>
+    </Target>
+    <SearchPaths>
+      <IncludeFiles Value="$(ProjOutDir);../../../headers;../../../srcGEGL;../../../src;../../../srcGL"/>
+      <OtherUnitFiles Value="../../../headers;../../../src;../../../srcGEGL;../../../lib/jpeg/$(TargetCPU)-$(TargetOS);../../../lib/msvcrt/$(TargetCPU);../../../lib/ogg/$(TargetCPU)-$(TargetOS);../../../lib/theora/$(TargetCPU)-$(TargetOS);../../../lib/zlib/$(TargetCPU)-$(TargetOS);../../../lib/zip/$(TargetCPU)-$(TargetOS);../../../srcGL"/>
+      <UnitOutputDirectory Value="../tmp/$(TargetCPU)-$(TargetOS)"/>
+    </SearchPaths>
+    <Parsing>
+      <SyntaxOptions>
+        <SyntaxMode Value="Delphi"/>
+      </SyntaxOptions>
+    </Parsing>
+    <CodeGeneration>
+      <SmartLinkUnit Value="True"/>
+      <Optimizations>
+        <OptimizationLevel Value="3"/>
+      </Optimizations>
+    </CodeGeneration>
+    <Linking>
+      <Debugging>
+        <DebugInfoType Value="dsDwarf2"/>
+        <StripSymbols Value="True"/>
+        <UseExternalDbgSyms Value="True"/>
+      </Debugging>
+      <LinkSmart Value="True"/>
+      <Options>
+        <Win32>
+          <GraphicApplication Value="True"/>
+        </Win32>
+      </Options>
+    </Linking>
+    <Other>
+      <Verbosity>
+        <ShowNotes Value="False"/>
+        <ShowHints Value="False"/>
+      </Verbosity>
+    </Other>
+  </CompilerOptions>
+  <Debugging>
+    <Exceptions Count="3">
+      <Item1>
+        <Name Value="EAbort"/>
+      </Item1>
+      <Item2>
+        <Name Value="ECodetoolError"/>
+      </Item2>
+      <Item3>
+        <Name Value="EFOpenError"/>
+      </Item3>
+    </Exceptions>
+  </Debugging>
+</CONFIG>

+ 20 - 0
Zengl_SRC/demos/Lazarus/03 - Input/backup/demo03.lps

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONFIG>
+  <ProjectSession>
+    <Version Value="12"/>
+    <BuildModes Active="Release"/>
+    <Units Count="1">
+      <Unit0>
+        <Filename Value="demo03.lpr"/>
+        <IsPartOfProject Value="True"/>
+        <IsVisibleTab Value="True"/>
+        <UsageCount Value="20"/>
+        <Loaded Value="True"/>
+      </Unit0>
+    </Units>
+    <RunParams>
+      <FormatVersion Value="2"/>
+      <Modes ActiveMode="default"/>
+    </RunParams>
+  </ProjectSession>
+</CONFIG>

+ 1 - 0
Zengl_SRC/demos/Lazarus/03 - Input/demo03.lpi

@@ -106,6 +106,7 @@
     </CodeGeneration>
     </CodeGeneration>
     <Linking>
     <Linking>
       <Debugging>
       <Debugging>
+        <GenerateDebugInfo Value="False"/>
         <DebugInfoType Value="dsDwarf2"/>
         <DebugInfoType Value="dsDwarf2"/>
         <StripSymbols Value="True"/>
         <StripSymbols Value="True"/>
         <UseExternalDbgSyms Value="True"/>
         <UseExternalDbgSyms Value="True"/>

+ 1 - 0
Zengl_SRC/demos/Lazarus/03 - Input/demo03.lpr

@@ -220,6 +220,7 @@ begin
   text_Draw( fntMain, 400, 360, 'JOYSTICK ( Found: ' + u_IntToStr( joyCount ) + ' )', TEXT_HALIGN_CENTER );
   text_Draw( fntMain, 400, 360, 'JOYSTICK ( Found: ' + u_IntToStr( joyCount ) + ' )', TEXT_HALIGN_CENTER );
 
 
   setTextColor(Get_Color(cl_Black));
   setTextColor(Get_Color(cl_Black));
+  // здесь пример где идёт обработка только одного джойстика, а их в системе может быть несколько.
   text_Draw( fntMain, 100, 400, 'Axis X: ' + u_FloatToStr( joy_AxisPos( 0, JOY_AXIS_X ) ) );
   text_Draw( fntMain, 100, 400, 'Axis X: ' + u_FloatToStr( joy_AxisPos( 0, JOY_AXIS_X ) ) );
   text_Draw( fntMain, 100, 420, 'Axis Y: ' + u_FloatToStr( joy_AxisPos( 0, JOY_AXIS_Y ) ) );
   text_Draw( fntMain, 100, 420, 'Axis Y: ' + u_FloatToStr( joy_AxisPos( 0, JOY_AXIS_Y ) ) );
   setTextColor(Get_Color(cl_Black05));
   setTextColor(Get_Color(cl_Black05));

+ 21 - 0
Zengl_SRC/demos/Lazarus/03 - Input/demo03.lps

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONFIG>
+  <ProjectSession>
+    <Version Value="12"/>
+    <BuildModes Active="Release"/>
+    <Units Count="1">
+      <Unit0>
+        <Filename Value="demo03.lpr"/>
+        <IsPartOfProject Value="True"/>
+        <IsVisibleTab Value="True"/>
+        <UsageCount Value="20"/>
+        <Loaded Value="True"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit0>
+    </Units>
+    <RunParams>
+      <FormatVersion Value="2"/>
+      <Modes ActiveMode="default"/>
+    </RunParams>
+  </ProjectSession>
+</CONFIG>

+ 20 - 0
Zengl_SRC/demos/Lazarus/04 - Screen Settings/demo04.lps

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONFIG>
+  <ProjectSession>
+    <Version Value="12"/>
+    <BuildModes Active="Release"/>
+    <Units Count="1">
+      <Unit0>
+        <Filename Value="demo04.lpr"/>
+        <IsPartOfProject Value="True"/>
+        <IsVisibleTab Value="True"/>
+        <UsageCount Value="20"/>
+        <Loaded Value="True"/>
+      </Unit0>
+    </Units>
+    <RunParams>
+      <FormatVersion Value="2"/>
+      <Modes ActiveMode="default"/>
+    </RunParams>
+  </ProjectSession>
+</CONFIG>

+ 21 - 0
Zengl_SRC/demos/Lazarus/05 - Primitives/demo05.lps

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONFIG>
+  <ProjectSession>
+    <Version Value="12"/>
+    <BuildModes Active="Release"/>
+    <Units Count="1">
+      <Unit0>
+        <Filename Value="demo05.lpr"/>
+        <IsPartOfProject Value="True"/>
+        <IsVisibleTab Value="True"/>
+        <CursorPos X="34" Y="27"/>
+        <UsageCount Value="20"/>
+        <Loaded Value="True"/>
+      </Unit0>
+    </Units>
+    <RunParams>
+      <FormatVersion Value="2"/>
+      <Modes ActiveMode="default"/>
+    </RunParams>
+  </ProjectSession>
+</CONFIG>

+ 21 - 0
Zengl_SRC/demos/Lazarus/06 - Text/demo06.lps

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONFIG>
+  <ProjectSession>
+    <Version Value="12"/>
+    <BuildModes Active="Default"/>
+    <Units Count="1">
+      <Unit0>
+        <Filename Value="demo06.lpr"/>
+        <IsPartOfProject Value="True"/>
+        <IsVisibleTab Value="True"/>
+        <UsageCount Value="20"/>
+        <Loaded Value="True"/>
+      </Unit0>
+    </Units>
+    <JumpHistory HistoryIndex="-1"/>
+    <RunParams>
+      <FormatVersion Value="2"/>
+      <Modes ActiveMode=""/>
+    </RunParams>
+  </ProjectSession>
+</CONFIG>

+ 20 - 0
Zengl_SRC/demos/Lazarus/07 - Sprites/demo07.lps

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONFIG>
+  <ProjectSession>
+    <Version Value="12"/>
+    <BuildModes Active="Release"/>
+    <Units Count="1">
+      <Unit0>
+        <Filename Value="demo07.lpr"/>
+        <IsPartOfProject Value="True"/>
+        <IsVisibleTab Value="True"/>
+        <UsageCount Value="20"/>
+        <Loaded Value="True"/>
+      </Unit0>
+    </Units>
+    <RunParams>
+      <FormatVersion Value="2"/>
+      <Modes ActiveMode="default"/>
+    </RunParams>
+  </ProjectSession>
+</CONFIG>

+ 20 - 0
Zengl_SRC/demos/Lazarus/09 - Sprite Engine(Classes)/demo09.lps

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONFIG>
+  <ProjectSession>
+    <Version Value="12"/>
+    <BuildModes Active="Release"/>
+    <Units Count="1">
+      <Unit0>
+        <Filename Value="demo09.lpr"/>
+        <IsPartOfProject Value="True"/>
+        <IsVisibleTab Value="True"/>
+        <UsageCount Value="20"/>
+        <Loaded Value="True"/>
+      </Unit0>
+    </Units>
+    <RunParams>
+      <FormatVersion Value="2"/>
+      <Modes ActiveMode="default"/>
+    </RunParams>
+  </ProjectSession>
+</CONFIG>

+ 21 - 0
Zengl_SRC/demos/Lazarus/10 - Tiles/demo10.lps

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONFIG>
+  <ProjectSession>
+    <Version Value="12"/>
+    <BuildModes Active="Release"/>
+    <Units Count="1">
+      <Unit0>
+        <Filename Value="demo10.lpr"/>
+        <IsPartOfProject Value="True"/>
+        <IsVisibleTab Value="True"/>
+        <CursorPos X="84" Y="20"/>
+        <UsageCount Value="20"/>
+        <Loaded Value="True"/>
+      </Unit0>
+    </Units>
+    <RunParams>
+      <FormatVersion Value="2"/>
+      <Modes ActiveMode="default"/>
+    </RunParams>
+  </ProjectSession>
+</CONFIG>

+ 139 - 0
Zengl_SRC/demos/Lazarus/11 - Grid/backup/demo11.lpi

@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONFIG>
+  <ProjectOptions>
+    <Version Value="12"/>
+    <General>
+      <Flags>
+        <SaveOnlyProjectUnits Value="True"/>
+        <MainUnitHasCreateFormStatements Value="False"/>
+        <MainUnitHasTitleStatement Value="False"/>
+        <MainUnitHasScaledStatement Value="False"/>
+        <CompatibilityMode Value="True"/>
+      </Flags>
+      <SessionStorage Value="InProjectDir"/>
+      <ResourceType Value="res"/>
+      <UseXPManifest Value="True"/>
+      <Icon Value="0"/>
+    </General>
+    <i18n>
+      <EnableI18N LFM="False"/>
+    </i18n>
+    <BuildModes Count="2">
+      <Item1 Name="Release" Default="True"/>
+      <Item2 Name="Debug">
+        <CompilerOptions>
+          <Version Value="11"/>
+          <Target>
+            <Filename Value="../../../bin/$(TargetCPU)-$(TargetOS)/demo11"/>
+          </Target>
+          <SearchPaths>
+            <IncludeFiles Value="$(ProjOutDir);../../../headers"/>
+            <OtherUnitFiles Value="../../../headers;../../../extra;../../../src;../../../lib/jpeg/$(TargetCPU)-$(TargetOS);../../../lib/msvcrt/$(TargetCPU);../../../lib/ogg/$(TargetCPU)-$(TargetOS);../../../lib/theora/$(TargetCPU)-$(TargetOS);../../../lib/zlib/$(TargetCPU)-$(TargetOS);../../../lib/zip/$(TargetCPU)-$(TargetOS)"/>
+            <UnitOutputDirectory Value="../tmp/$(TargetCPU)-$(TargetOS)"/>
+          </SearchPaths>
+          <Parsing>
+            <SyntaxOptions>
+              <SyntaxMode Value="Delphi"/>
+            </SyntaxOptions>
+          </Parsing>
+          <CodeGeneration>
+            <Checks>
+              <IOChecks Value="True"/>
+              <RangeChecks Value="True"/>
+              <OverflowChecks Value="True"/>
+              <StackChecks Value="True"/>
+            </Checks>
+            <VerifyObjMethodCallValidity Value="True"/>
+            <Optimizations>
+              <OptimizationLevel Value="0"/>
+            </Optimizations>
+          </CodeGeneration>
+          <Linking>
+            <Debugging>
+              <UseHeaptrc Value="True"/>
+            </Debugging>
+            <Options>
+              <Win32>
+                <GraphicApplication Value="True"/>
+              </Win32>
+            </Options>
+          </Linking>
+          <Other>
+            <Verbosity>
+              <ShowNotes Value="False"/>
+              <ShowHints Value="False"/>
+            </Verbosity>
+          </Other>
+        </CompilerOptions>
+      </Item2>
+    </BuildModes>
+    <PublishOptions>
+      <Version Value="2"/>
+    </PublishOptions>
+    <RunParams>
+      <FormatVersion Value="2"/>
+      <Modes Count="1">
+        <Mode0 Name="default"/>
+      </Modes>
+    </RunParams>
+    <Units Count="1">
+      <Unit0>
+        <Filename Value="demo11.lpr"/>
+        <IsPartOfProject Value="True"/>
+      </Unit0>
+    </Units>
+  </ProjectOptions>
+  <CompilerOptions>
+    <Version Value="11"/>
+    <Target>
+      <Filename Value="../../../bin/$(TargetCPU)-$(TargetOS)/demo11"/>
+    </Target>
+    <SearchPaths>
+      <IncludeFiles Value="$(ProjOutDir);../../../headers;../../../srcGEGL;../../../src;../../../srcGL"/>
+      <OtherUnitFiles Value="../../../headers;../../../extra;../../../src;../../../srcGL;../../../srcGEGL;../../../lib/jpeg/$(TargetCPU)-$(TargetOS);../../../lib/msvcrt/$(TargetCPU);../../../lib/ogg/$(TargetCPU)-$(TargetOS);../../../lib/theora/$(TargetCPU)-$(TargetOS);../../../lib/zlib/$(TargetCPU)-$(TargetOS);../../../lib/zip/$(TargetCPU)-$(TargetOS)"/>
+      <UnitOutputDirectory Value="../tmp/$(TargetCPU)-$(TargetOS)"/>
+    </SearchPaths>
+    <Parsing>
+      <SyntaxOptions>
+        <SyntaxMode Value="Delphi"/>
+      </SyntaxOptions>
+    </Parsing>
+    <CodeGeneration>
+      <SmartLinkUnit Value="True"/>
+      <Optimizations>
+        <OptimizationLevel Value="3"/>
+      </Optimizations>
+    </CodeGeneration>
+    <Linking>
+      <Debugging>
+        <DebugInfoType Value="dsDwarf2Set"/>
+        <StripSymbols Value="True"/>
+      </Debugging>
+      <LinkSmart Value="True"/>
+      <Options>
+        <Win32>
+          <GraphicApplication Value="True"/>
+        </Win32>
+      </Options>
+    </Linking>
+    <Other>
+      <Verbosity>
+        <ShowNotes Value="False"/>
+        <ShowHints Value="False"/>
+      </Verbosity>
+    </Other>
+  </CompilerOptions>
+  <Debugging>
+    <Exceptions Count="3">
+      <Item1>
+        <Name Value="EAbort"/>
+      </Item1>
+      <Item2>
+        <Name Value="ECodetoolError"/>
+      </Item2>
+      <Item3>
+        <Name Value="EFOpenError"/>
+      </Item3>
+    </Exceptions>
+  </Debugging>
+</CONFIG>

+ 115 - 0
Zengl_SRC/demos/Lazarus/11 - Grid/backup/demo11.lpr

@@ -0,0 +1,115 @@
+program demo11;
+
+{$I zglCustomConfig.cfg}
+{$I zgl_config.cfg}
+
+{$IFDEF WINDOWS}
+  {$R *.res}
+{$ENDIF}
+
+uses
+  {$IFDEF UNIX}
+  cthreads,
+  {$ENDIF}
+  {$IFDEF USE_ZENGL_STATIC}
+  zgl_screen,
+  zgl_window,
+  zgl_timers,
+  zgl_keyboard,
+  zgl_fx,
+  zgl_textures,
+  zgl_textures_png,
+  zgl_textures_jpg,
+  zgl_grid_2d,
+  zgl_font,
+  zgl_text,
+  zgl_math_2d,
+  zgl_types,
+  zgl_utils
+  {$ELSE}
+  zglHeader
+  {$ENDIF}
+  ;
+
+var
+  dirRes      : UTF8String {$IFNDEF MACOSX} = '../data/' {$ENDIF};
+  fntMain     : LongWord;
+  texBack     : zglPTexture;
+  grid        : zglTGrid2D;
+  wave        : Single;
+
+  TimeStart  : LongWord = 0;
+
+procedure Init;
+var
+  i, j : Integer;
+begin
+  texBack := tex_LoadFromFile( dirRes + 'back04.jpg' );
+
+  fntMain := font_LoadFromFile( dirRes + 'font.zfi' );
+
+  // RU: Инициализация сетки размером 21x16. Основная идея - каждый узел сетки это смещение относительно её верхнего левого угла.
+  // EN: Initialization of grid with size 21x16. Main idea - every node of grid is an offset from the top left corner.
+  grid.Cols := 21;
+  grid.Rows := 16;
+  SetLength( grid.Grid, grid.Cols, grid.Rows );
+  for i := 0 to grid.Cols - 1 do
+    for j := 0 to grid.Rows - 1 do
+    begin
+      grid.Grid[ i, j ].X := i * 40;
+      grid.Grid[ i, j ].Y := j * 40;
+    end;
+  setFontTextScale(15, fntMain);
+end;
+
+procedure Draw;
+begin
+  // RU: Рендерим сетку в координатах 0,0.
+  // EN: Render grid in coordinates 0,0.
+  sgrid2d_Draw( texBack, 0, 0, @grid );
+
+  text_Draw( fntMain, 0, 0, 'FPS: ' + u_IntToStr( zgl_Get( RENDER_FPS ) ) );
+end;
+
+procedure Timer;
+var
+  i, j : Integer;
+  cwave, swave : Single;
+begin
+  wave  := wave + random( 1000 ) / 10000;
+  cwave := cos( wave );
+  swave := sin( wave );
+
+  // RU: Симуляция простого эффекта под водой.
+  // EN: Simulation of simple underwater effect.
+  for i := 1 to grid.Cols - 2 do
+    for j := 1 to grid.Rows - 2 do
+    begin
+      if ( i mod 2 = 0 ) and ( j mod 2 = 0 ) Then
+      begin
+        grid.Grid[ i, j ].X := i * 40 + cwave;
+        grid.Grid[ i, j ].Y := j * 40 + swave;
+      end else
+      begin
+        grid.Grid[ i, j ].X := i * 40 - cwave;
+        grid.Grid[ i, j ].Y := j * 40 - swave;
+      end;
+    end;
+end;
+
+Begin
+  {$IFNDEF USE_ZENGL_STATIC}
+  if not zglLoad( libZenGL ) Then exit;
+  {$ENDIF}
+
+  randomize();
+
+  TimeStart := timer_Add( @Timer, 16, t_Start );
+
+  zgl_Reg( SYS_LOAD, @Init );
+  zgl_Reg( SYS_DRAW, @Draw );
+
+  wnd_SetCaption(utf8_Copy('11 - Grid'));
+
+  zgl_Init();
+End.

+ 23 - 0
Zengl_SRC/demos/Lazarus/11 - Grid/backup/demo11.lps

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONFIG>
+  <ProjectSession>
+    <Version Value="12"/>
+    <BuildModes Active="Release"/>
+    <Units Count="1">
+      <Unit0>
+        <Filename Value="demo11.lpr"/>
+        <IsPartOfProject Value="True"/>
+        <IsVisibleTab Value="True"/>
+        <TopLine Value="63"/>
+        <CursorPos X="27" Y="81"/>
+        <UsageCount Value="21"/>
+        <Loaded Value="True"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit0>
+    </Units>
+    <RunParams>
+      <FormatVersion Value="2"/>
+      <Modes ActiveMode="default"/>
+    </RunParams>
+  </ProjectSession>
+</CONFIG>

+ 2 - 2
Zengl_SRC/demos/Lazarus/11 - Grid/demo11.lpr

@@ -77,8 +77,8 @@ var
   cwave, swave : Single;
   cwave, swave : Single;
 begin
 begin
   wave  := wave + random( 1000 ) / 10000;
   wave  := wave + random( 1000 ) / 10000;
-  cwave := cos( wave );
-  swave := sin( wave );
+  cwave := cos( wave ) * 3;
+  swave := sin( wave ) * 3;
 
 
   // RU: Симуляция простого эффекта под водой.
   // RU: Симуляция простого эффекта под водой.
   // EN: Simulation of simple underwater effect.
   // EN: Simulation of simple underwater effect.

+ 23 - 0
Zengl_SRC/demos/Lazarus/11 - Grid/demo11.lps

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONFIG>
+  <ProjectSession>
+    <Version Value="12"/>
+    <BuildModes Active="Release"/>
+    <Units Count="1">
+      <Unit0>
+        <Filename Value="demo11.lpr"/>
+        <IsPartOfProject Value="True"/>
+        <IsVisibleTab Value="True"/>
+        <TopLine Value="62"/>
+        <CursorPos X="27" Y="81"/>
+        <UsageCount Value="21"/>
+        <Loaded Value="True"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit0>
+    </Units>
+    <RunParams>
+      <FormatVersion Value="2"/>
+      <Modes ActiveMode="default"/>
+    </RunParams>
+  </ProjectSession>
+</CONFIG>

+ 21 - 0
Zengl_SRC/demos/Lazarus/12 - Render into Texture/demo12.lps

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONFIG>
+  <ProjectSession>
+    <Version Value="12"/>
+    <BuildModes Active="Release"/>
+    <Units Count="1">
+      <Unit0>
+        <Filename Value="demo12.lpr"/>
+        <IsPartOfProject Value="True"/>
+        <IsVisibleTab Value="True"/>
+        <CursorPos X="27" Y="31"/>
+        <UsageCount Value="20"/>
+        <Loaded Value="True"/>
+      </Unit0>
+    </Units>
+    <RunParams>
+      <FormatVersion Value="2"/>
+      <Modes ActiveMode="default"/>
+    </RunParams>
+  </ProjectSession>
+</CONFIG>

+ 141 - 0
Zengl_SRC/demos/Lazarus/13 - Particles/backup/demo13.lpi

@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONFIG>
+  <ProjectOptions>
+    <Version Value="12"/>
+    <General>
+      <Flags>
+        <SaveOnlyProjectUnits Value="True"/>
+        <MainUnitHasCreateFormStatements Value="False"/>
+        <MainUnitHasTitleStatement Value="False"/>
+        <MainUnitHasScaledStatement Value="False"/>
+        <CompatibilityMode Value="True"/>
+      </Flags>
+      <SessionStorage Value="InProjectDir"/>
+      <ResourceType Value="res"/>
+      <UseXPManifest Value="True"/>
+      <Icon Value="0"/>
+    </General>
+    <i18n>
+      <EnableI18N LFM="False"/>
+    </i18n>
+    <BuildModes Count="2">
+      <Item1 Name="Release" Default="True"/>
+      <Item2 Name="Debug">
+        <CompilerOptions>
+          <Version Value="11"/>
+          <Target>
+            <Filename Value="../../../bin/$(TargetCPU)-$(TargetOS)/demo13"/>
+          </Target>
+          <SearchPaths>
+            <IncludeFiles Value="$(ProjOutDir);../../../headers"/>
+            <OtherUnitFiles Value="../../../headers;../../../extra;../../../src;../../../lib/jpeg/$(TargetCPU)-$(TargetOS);../../../lib/msvcrt/$(TargetCPU);../../../lib/ogg/$(TargetCPU)-$(TargetOS);../../../lib/theora/$(TargetCPU)-$(TargetOS);../../../lib/zlib/$(TargetCPU)-$(TargetOS);../../../lib/zip/$(TargetCPU)-$(TargetOS)"/>
+            <UnitOutputDirectory Value="../tmp/$(TargetCPU)-$(TargetOS)"/>
+          </SearchPaths>
+          <Parsing>
+            <SyntaxOptions>
+              <SyntaxMode Value="Delphi"/>
+            </SyntaxOptions>
+          </Parsing>
+          <CodeGeneration>
+            <Checks>
+              <IOChecks Value="True"/>
+              <RangeChecks Value="True"/>
+              <OverflowChecks Value="True"/>
+              <StackChecks Value="True"/>
+            </Checks>
+            <VerifyObjMethodCallValidity Value="True"/>
+            <Optimizations>
+              <OptimizationLevel Value="0"/>
+            </Optimizations>
+          </CodeGeneration>
+          <Linking>
+            <Debugging>
+              <UseHeaptrc Value="True"/>
+            </Debugging>
+            <Options>
+              <Win32>
+                <GraphicApplication Value="True"/>
+              </Win32>
+            </Options>
+          </Linking>
+          <Other>
+            <Verbosity>
+              <ShowNotes Value="False"/>
+              <ShowHints Value="False"/>
+            </Verbosity>
+          </Other>
+        </CompilerOptions>
+      </Item2>
+    </BuildModes>
+    <PublishOptions>
+      <Version Value="2"/>
+    </PublishOptions>
+    <RunParams>
+      <FormatVersion Value="2"/>
+      <Modes Count="1">
+        <Mode0 Name="default"/>
+      </Modes>
+    </RunParams>
+    <Units Count="1">
+      <Unit0>
+        <Filename Value="demo13.lpr"/>
+        <IsPartOfProject Value="True"/>
+      </Unit0>
+    </Units>
+  </ProjectOptions>
+  <CompilerOptions>
+    <Version Value="11"/>
+    <Target>
+      <Filename Value="../../../bin/$(TargetCPU)-$(TargetOS)/demo13"/>
+    </Target>
+    <SearchPaths>
+      <IncludeFiles Value="$(ProjOutDir);../../../headers;../../../srcGEGL;../../../srcGL/EGL;../../../srcGL/GLES;../../../src;../../../srcGL"/>
+      <OtherUnitFiles Value="../../../headers;../../../extra;../../../src;../../../lib/jpeg/$(TargetCPU)-$(TargetOS);../../../lib/msvcrt/$(TargetCPU);../../../lib/ogg/$(TargetCPU)-$(TargetOS);../../../lib/theora/$(TargetCPU)-$(TargetOS);../../../lib/zlib/$(TargetCPU)-$(TargetOS);../../../lib/zip/$(TargetCPU)-$(TargetOS);../../../srcGEGL;../../../srcGL;../../../srcGL/EGL;../../../srcGL/GLES"/>
+      <UnitOutputDirectory Value="../tmp/$(TargetCPU)-$(TargetOS)"/>
+    </SearchPaths>
+    <Parsing>
+      <SyntaxOptions>
+        <SyntaxMode Value="Delphi"/>
+      </SyntaxOptions>
+    </Parsing>
+    <CodeGeneration>
+      <SmartLinkUnit Value="True"/>
+      <Optimizations>
+        <OptimizationLevel Value="3"/>
+      </Optimizations>
+    </CodeGeneration>
+    <Linking>
+      <Debugging>
+        <GenerateDebugInfo Value="False"/>
+        <DebugInfoType Value="dsDwarf2Set"/>
+        <StripSymbols Value="True"/>
+        <UseExternalDbgSyms Value="True"/>
+      </Debugging>
+      <LinkSmart Value="True"/>
+      <Options>
+        <Win32>
+          <GraphicApplication Value="True"/>
+        </Win32>
+      </Options>
+    </Linking>
+    <Other>
+      <Verbosity>
+        <ShowNotes Value="False"/>
+        <ShowHints Value="False"/>
+      </Verbosity>
+    </Other>
+  </CompilerOptions>
+  <Debugging>
+    <Exceptions Count="3">
+      <Item1>
+        <Name Value="EAbort"/>
+      </Item1>
+      <Item2>
+        <Name Value="ECodetoolError"/>
+      </Item2>
+      <Item3>
+        <Name Value="EFOpenError"/>
+      </Item3>
+    </Exceptions>
+  </Debugging>
+</CONFIG>

+ 21 - 0
Zengl_SRC/demos/Lazarus/13 - Particles/backup/demo13.lps

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONFIG>
+  <ProjectSession>
+    <Version Value="12"/>
+    <BuildModes Active="Release"/>
+    <Units Count="1">
+      <Unit0>
+        <Filename Value="demo13.lpr"/>
+        <IsPartOfProject Value="True"/>
+        <IsVisibleTab Value="True"/>
+        <UsageCount Value="20"/>
+        <Loaded Value="True"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit0>
+    </Units>
+    <RunParams>
+      <FormatVersion Value="2"/>
+      <Modes ActiveMode="default"/>
+    </RunParams>
+  </ProjectSession>
+</CONFIG>

+ 2 - 0
Zengl_SRC/demos/Lazarus/13 - Particles/demo13.lpi

@@ -100,12 +100,14 @@
     </Parsing>
     </Parsing>
     <CodeGeneration>
     <CodeGeneration>
       <SmartLinkUnit Value="True"/>
       <SmartLinkUnit Value="True"/>
+      <TargetOS Value="linux"/>
       <Optimizations>
       <Optimizations>
         <OptimizationLevel Value="3"/>
         <OptimizationLevel Value="3"/>
       </Optimizations>
       </Optimizations>
     </CodeGeneration>
     </CodeGeneration>
     <Linking>
     <Linking>
       <Debugging>
       <Debugging>
+        <GenerateDebugInfo Value="False"/>
         <DebugInfoType Value="dsDwarf2Set"/>
         <DebugInfoType Value="dsDwarf2Set"/>
         <StripSymbols Value="True"/>
         <StripSymbols Value="True"/>
         <UseExternalDbgSyms Value="True"/>
         <UseExternalDbgSyms Value="True"/>

+ 22 - 0
Zengl_SRC/demos/Lazarus/13 - Particles/demo13.lps

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONFIG>
+  <ProjectSession>
+    <Version Value="12"/>
+    <BuildModes Active="Release"/>
+    <Units Count="1">
+      <Unit0>
+        <Filename Value="demo13.lpr"/>
+        <IsPartOfProject Value="True"/>
+        <IsVisibleTab Value="True"/>
+        <CursorPos X="42" Y="34"/>
+        <UsageCount Value="21"/>
+        <Loaded Value="True"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit0>
+    </Units>
+    <RunParams>
+      <FormatVersion Value="2"/>
+      <Modes ActiveMode="default"/>
+    </RunParams>
+  </ProjectSession>
+</CONFIG>

+ 20 - 0
Zengl_SRC/demos/Lazarus/14 - Sound/demo14.lps

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONFIG>
+  <ProjectSession>
+    <Version Value="12"/>
+    <BuildModes Active="Release"/>
+    <Units Count="1">
+      <Unit0>
+        <Filename Value="demo14.lpr"/>
+        <IsPartOfProject Value="True"/>
+        <IsVisibleTab Value="True"/>
+        <UsageCount Value="20"/>
+        <Loaded Value="True"/>
+      </Unit0>
+    </Units>
+    <RunParams>
+      <FormatVersion Value="2"/>
+      <Modes ActiveMode="default"/>
+    </RunParams>
+  </ProjectSession>
+</CONFIG>

+ 20 - 0
Zengl_SRC/demos/Lazarus/15 - Video/demo15.lps

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONFIG>
+  <ProjectSession>
+    <Version Value="12"/>
+    <BuildModes Active="Release"/>
+    <Units Count="1">
+      <Unit0>
+        <Filename Value="demo15.lpr"/>
+        <IsPartOfProject Value="True"/>
+        <IsVisibleTab Value="True"/>
+        <UsageCount Value="20"/>
+        <Loaded Value="True"/>
+      </Unit0>
+    </Units>
+    <RunParams>
+      <FormatVersion Value="2"/>
+      <Modes ActiveMode="default"/>
+    </RunParams>
+  </ProjectSession>
+</CONFIG>

+ 141 - 0
Zengl_SRC/demos/Lazarus/16 - Physics/backup/demo16.lpi

@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONFIG>
+  <ProjectOptions>
+    <Version Value="12"/>
+    <General>
+      <Flags>
+        <SaveOnlyProjectUnits Value="True"/>
+        <MainUnitHasCreateFormStatements Value="False"/>
+        <MainUnitHasTitleStatement Value="False"/>
+        <MainUnitHasScaledStatement Value="False"/>
+        <CompatibilityMode Value="True"/>
+      </Flags>
+      <SessionStorage Value="InProjectDir"/>
+      <ResourceType Value="res"/>
+      <UseXPManifest Value="True"/>
+      <Icon Value="0"/>
+    </General>
+    <i18n>
+      <EnableI18N LFM="False"/>
+    </i18n>
+    <BuildModes Count="2">
+      <Item1 Name="Release" Default="True"/>
+      <Item2 Name="Debug">
+        <CompilerOptions>
+          <Version Value="11"/>
+          <Target>
+            <Filename Value="../../../bin/$(TargetCPU)-$(TargetOS)/demo16"/>
+          </Target>
+          <SearchPaths>
+            <IncludeFiles Value="$(ProjOutDir);../../../headers"/>
+            <OtherUnitFiles Value="../../../headers;../../../extra;../../../src;../../../lib/chipmunk/$(TargetCPU)-$(TargetOS);../../../lib/jpeg/$(TargetCPU)-$(TargetOS);../../../lib/msvcrt/$(TargetCPU);../../../lib/ogg/$(TargetCPU)-$(TargetOS);../../../lib/theora/$(TargetCPU)-$(TargetOS);../../../lib/zlib/$(TargetCPU)-$(TargetOS);../../../lib/zip/$(TargetCPU)-$(TargetOS)"/>
+            <UnitOutputDirectory Value="../tmp/$(TargetCPU)-$(TargetOS)"/>
+          </SearchPaths>
+          <Parsing>
+            <SyntaxOptions>
+              <SyntaxMode Value="Delphi"/>
+            </SyntaxOptions>
+          </Parsing>
+          <CodeGeneration>
+            <Checks>
+              <IOChecks Value="True"/>
+              <RangeChecks Value="True"/>
+              <OverflowChecks Value="True"/>
+              <StackChecks Value="True"/>
+            </Checks>
+            <VerifyObjMethodCallValidity Value="True"/>
+            <Optimizations>
+              <OptimizationLevel Value="0"/>
+            </Optimizations>
+          </CodeGeneration>
+          <Linking>
+            <Debugging>
+              <UseHeaptrc Value="True"/>
+            </Debugging>
+            <Options>
+              <Win32>
+                <GraphicApplication Value="True"/>
+              </Win32>
+            </Options>
+          </Linking>
+          <Other>
+            <Verbosity>
+              <ShowNotes Value="False"/>
+              <ShowHints Value="False"/>
+            </Verbosity>
+          </Other>
+        </CompilerOptions>
+      </Item2>
+    </BuildModes>
+    <PublishOptions>
+      <Version Value="2"/>
+    </PublishOptions>
+    <RunParams>
+      <FormatVersion Value="2"/>
+      <Modes Count="1">
+        <Mode0 Name="default"/>
+      </Modes>
+    </RunParams>
+    <Units Count="1">
+      <Unit0>
+        <Filename Value="demo16.lpr"/>
+        <IsPartOfProject Value="True"/>
+      </Unit0>
+    </Units>
+  </ProjectOptions>
+  <CompilerOptions>
+    <Version Value="11"/>
+    <Target>
+      <Filename Value="../../../bin/$(TargetCPU)-$(TargetOS)/demo16"/>
+    </Target>
+    <SearchPaths>
+      <IncludeFiles Value="$(ProjOutDir);../../../headers;../../../srcGEGL;../../../src;../../../srcGL"/>
+      <OtherUnitFiles Value="../../../extra;../../../src;../../../srcGL;../../../srcGEGL;../../../lib/zlib/$(TargetCPU)-$(TargetOS);../../../lib/zip/$(TargetCPU)-$(TargetOS);../../../lib/jpeg/$(TargetCPU)-$(TargetOS);../../../lib/msvcrt/$(TargetCPU);../../../lib/chipmunk/$(TargetCPU)-$(TargetOS);../../../lib/ogg/$(TargetCPU)-$(TargetOS);../../../lib/theora/$(TargetCPU)-$(TargetOS)"/>
+      <UnitOutputDirectory Value="../tmp/$(TargetCPU)-$(TargetOS)"/>
+    </SearchPaths>
+    <Parsing>
+      <SyntaxOptions>
+        <SyntaxMode Value="Delphi"/>
+      </SyntaxOptions>
+    </Parsing>
+    <CodeGeneration>
+      <SmartLinkUnit Value="True"/>
+      <Optimizations>
+        <OptimizationLevel Value="3"/>
+      </Optimizations>
+    </CodeGeneration>
+    <Linking>
+      <Debugging>
+        <GenerateDebugInfo Value="False"/>
+        <DebugInfoType Value="dsDwarf2Set"/>
+        <StripSymbols Value="True"/>
+        <UseExternalDbgSyms Value="True"/>
+      </Debugging>
+      <LinkSmart Value="True"/>
+      <Options>
+        <Win32>
+          <GraphicApplication Value="True"/>
+        </Win32>
+      </Options>
+    </Linking>
+    <Other>
+      <Verbosity>
+        <ShowNotes Value="False"/>
+        <ShowHints Value="False"/>
+      </Verbosity>
+    </Other>
+  </CompilerOptions>
+  <Debugging>
+    <Exceptions Count="3">
+      <Item1>
+        <Name Value="EAbort"/>
+      </Item1>
+      <Item2>
+        <Name Value="ECodetoolError"/>
+      </Item2>
+      <Item3>
+        <Name Value="EFOpenError"/>
+      </Item3>
+    </Exceptions>
+  </Debugging>
+</CONFIG>

+ 231 - 0
Zengl_SRC/demos/Lazarus/16 - Physics/backup/demo16.lpr

@@ -0,0 +1,231 @@
+program demo16;
+
+// RU: В этом файле конфигурации содержится "опция" USE_CHIPMUNK_STATIC для статической компиляции с Chipmunk
+// EN: This file contains "option" USE_CHIPMUNK_STATIC for static compilation with Chipmunk
+{$I zglCustomConfig.cfg}
+{$I zgl_config.cfg}
+
+{$IFDEF WINDOWS}
+  {$R *.res}
+{$ENDIF}
+
+uses
+  {$IFDEF UNIX}
+  cthreads,
+  {$ENDIF}
+  zglChipmunk,
+  {$IFDEF USE_ZENGL_STATIC}
+  zgl_screen,
+  zgl_window,
+  zgl_timers,
+  zgl_keyboard,
+  zgl_mouse,
+  zgl_textures,
+  zgl_textures_png,
+  zgl_render_2d,
+  zgl_font,
+  zgl_text,
+  zgl_primitives_2d,
+  zgl_math_2d,
+  zgl_types,
+  zgl_utils
+  {$ELSE}
+  zglHeader
+  {$ENDIF}
+  ;
+
+var
+  dirRes  : UTF8String {$IFNDEF MACOSX} = '../data/' {$ENDIF};
+  fntMain : LongWord;
+  space   : PcpSpace;
+  bCount  : Integer;
+  Bodies  : array of PcpBody;
+  Shapes  : array of PcpShape;
+
+  TimePhisics: LongWord;
+
+// RU: Добавить объект "шар"
+//     x, y - координаты центра
+//     mass - масса
+//     r    - радиус
+//     e    - коэффициент эластичности
+//     u    - коэффициент трения
+//
+// EN: Add new object "ball"
+//     x, y - coordinates
+//     mass - mass
+//     r    - radius
+//     e    - coefficient of restitution. (elasticity)
+//     u    - coefficient of friction
+procedure cpAddBall(x, y, r, mass, e, u : cpFloat);
+begin
+  INC(bCount);
+  SetLength(Bodies, bCount);
+  SetLength(Shapes, bCount);
+
+  Bodies[bCount - 1]   := cpBodyNew(mass, cpMomentForCircle(mass, 0, r, cpvzero));
+  Bodies[bCount - 1]^.p := cpv(x, y);
+  cpSpaceAddBody(space, Bodies[bCount - 1]);
+
+  Shapes[bCount - 1]   := cpCircleShapeNew(Bodies[bCount - 1], r, cpvzero);
+  Shapes[bCount - 1]^.e := e;
+  Shapes[bCount - 1]^.u := u;
+  cpSpaceAddShape( space, Shapes[ bCount - 1 ] );
+end;
+
+// RU: Добавить объект "коробка"
+//     Схож с процедурой cpAddBall по аргументам
+//     x, y - координаты центра
+//     w, h - ширина и высота
+//
+// EN: Add bew object "box"
+//     Arguments are similar to arguments of procedure cpAddBall
+//     x, y - coordinates of center
+//     w, h - width and height
+procedure cpAddBox(x, y, w, h, mass, e, u : cpFloat);
+  var
+    points : array[0..3] of cpVect;
+    f      : cpFloat;
+begin
+  INC(bCount);
+  SetLength(Bodies, bCount);
+  SetLength(Shapes, bCount);
+
+  points[0].x := - w / 2;
+  points[0].y := - h / 2;
+  points[1].x := - w / 2;
+  points[1].y := h / 2;
+  points[2].x := w / 2;
+  points[2].y := h / 2;
+  points[3].x := w / 2;
+  points[3].y := - h / 2;
+
+  f := cpMomentForPoly(mass, 4, @points[0], cpvzero);
+  Bodies[bCount - 1]   := cpBodyNew(mass, f);
+  Bodies[bCount - 1]^.p := cpv(x + w / 2, y + h / 2);
+  cpSpaceAddBody(space, Bodies[bCount - 1]);
+
+  Shapes[bCount - 1] := cpPolyShapeNew(Bodies[bCount - 1], 4, @points[0], cpvzero);
+  Shapes[bCount - 1]^.e := e;
+  Shapes[bCount - 1]^.u := u;
+  cpSpaceAddShape(space, Shapes[bCount - 1]);
+end;
+
+procedure Init;
+var
+  staticBody : PcpBody;
+  ground     : PcpShape;
+  e, u       : cpFloat;
+begin
+  fntMain := font_LoadFromFile(dirRes + 'font.zfi');
+  setFontTextScale(15, fntMain);
+
+  cpInitChipmunk();
+
+  // RU: Создаем новый "мир".
+  // EN: Create new world.
+  space            := cpSpaceNew();
+  // RU: Задаем количество итераций обработки(рекомендуется 10).
+  // EN: Set count of iterations of processing(recommended is 10).
+  space^.iterations := 10;
+  space^.elasticIterations := 10;
+  // RU: Задаем силу гравитации.
+  // EN: Set the gravity.
+  space^.gravity    := cpv(1, 100);
+  // RU: Задаем коэффициент "затухания" движения объектов.
+  // EN: Set the damping for moving of objects.
+  space^.damping    := 0.99;
+
+  e := 1;
+  u := 0.9;
+  // RU: Создадим статичное "тело".
+  // EN: Create a static "body".
+  staticBody := cpBodyNew(INFINITY, INFINITY);
+  // RU: Добавим три отрезка для ограничения мира. Первый параметр - указатель на созданное тело, два последующих - координаты точек отрезка, последний - толщина отрезка.
+  // EN: Add three segments for restriction of world. First parameter - pointer of created body, next two - coordinates of segment points, the last one - width of segment.
+  ground := cpSegmentShapeNew(staticBody, cpv(5, 0), cpv(5, 590), 1);
+  ground^.e := e;
+  ground^.u := u;
+  cpSpaceAddStaticShape(space, ground );
+  ground := cpSegmentShapeNew(staticBody, cpv(795, 0), cpv(795, 590), 1);
+  ground^.e := e;
+  ground^.u := u;
+  cpSpaceAddStaticShape(space, ground);
+  ground := cpSegmentShapeNew(staticBody, cpv(0, 590), cpv(800, 590), 1);
+  ground^.e := e;
+  ground^.u := u;
+  cpSpaceAddStaticShape(space, ground);
+  // RU: Добавим треугольник.
+  // EN: Add the triangle.
+  staticBody := cpBodyNew(INFINITY, INFINITY);
+  ground := cpSegmentShapeNew(staticBody, cpv(400, 300), cpv(200, 350), 1);
+  ground^.e := e;
+  ground^.u := u;
+  cpSpaceAddStaticShape(space, ground);
+  ground := cpSegmentShapeNew(staticBody, cpv(200, 350), cpv(700, 350), 1);
+  ground^.e := e;
+  ground^.u := u;
+  cpSpaceAddStaticShape(space, ground);
+  ground := cpSegmentShapeNew(staticBody, cpv(700, 350), cpv(400, 300), 1);
+  ground^.e := e;
+  ground^.u := u;
+  cpSpaceAddStaticShape(space, ground);
+end;
+
+procedure Draw;
+begin
+  batch2d_Begin();
+
+  // RU: Рендерим объекты указанного "мира". Второй аргумент функции отвечает за показ точек соприкосновения.
+  // EN: Render objects for specified "world". Second argument responsible for rendering of collision points.
+  cpDrawSpace(space, TRUE);
+
+  text_Draw(fntMain, 10, 5,  'FPS: ' + u_IntToStr(zgl_Get(RENDER_FPS)));
+  text_Draw(fntMain, 10, 25, 'Use your mouse: Left Click - box, Right Click - ball');
+  batch2d_End();
+end;
+
+procedure KeyMouseEvent;
+begin
+  // два варианта работы с мышью, статический и динамический
+  if (mouseAction[M_BLEFT].state and is_Press) > 0 Then
+    cpAddBox(mouseX - 10, mouseY - 10, 48, 32, 1, 0.5, 0.5);
+
+  if mouseBClick(M_BRIGHT) Then
+    cpAddBall(mouseX, mouseY, 16, 2, 0.5, 0.1);
+end;
+
+procedure Phisics;
+begin
+  cpSpaceStep(space, 1 / zgl_Get(RENDER_FPS));
+end;
+
+procedure Quit;
+begin
+  // RU: Очистка объектов и "мира".
+  // EN: Free objects and "world".
+  cpSpaceFreeChildren(space);
+  cpSpaceFree(space);
+end;
+
+Begin
+  randomize();
+
+  {$IFNDEF USE_ZENGL_STATIC}
+  if not zglLoad( libZenGL ) Then exit;
+  {$ENDIF}
+  {$IFNDEF USE_CHIPMUNK_STATIC}
+  if not cpLoad( libChipmunk ) Then exit;
+  {$ENDIF}
+
+  TimePhisics := timer_Add(@Phisics, 16, t_Start);
+
+  zgl_Reg(SYS_EVENTS, @KeyMouseEvent);
+  zgl_Reg(SYS_LOAD, @Init);
+  zgl_Reg(SYS_DRAW, @Draw);
+  zgl_Reg(SYS_EXIT, @Quit);
+
+  wnd_SetCaption(utf8_Copy('16 - Physics Simple'));
+
+  zgl_Init();
+End.

+ 22 - 0
Zengl_SRC/demos/Lazarus/16 - Physics/backup/demo16.lps

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONFIG>
+  <ProjectSession>
+    <Version Value="12"/>
+    <BuildModes Active="Release"/>
+    <Units Count="1">
+      <Unit0>
+        <Filename Value="demo16.lpr"/>
+        <IsPartOfProject Value="True"/>
+        <IsVisibleTab Value="True"/>
+        <TopLine Value="175"/>
+        <CursorPos X="46" Y="191"/>
+        <UsageCount Value="20"/>
+        <Loaded Value="True"/>
+      </Unit0>
+    </Units>
+    <RunParams>
+      <FormatVersion Value="2"/>
+      <Modes ActiveMode="default"/>
+    </RunParams>
+  </ProjectSession>
+</CONFIG>

+ 1 - 0
Zengl_SRC/demos/Lazarus/16 - Physics/demo16.lps

@@ -8,6 +8,7 @@
         <Filename Value="demo16.lpr"/>
         <Filename Value="demo16.lpr"/>
         <IsPartOfProject Value="True"/>
         <IsPartOfProject Value="True"/>
         <IsVisibleTab Value="True"/>
         <IsVisibleTab Value="True"/>
+        <CursorPos X="10" Y="19"/>
         <UsageCount Value="20"/>
         <UsageCount Value="20"/>
         <Loaded Value="True"/>
         <Loaded Value="True"/>
       </Unit0>
       </Unit0>

+ 24 - 0
Zengl_SRC/demos/Lazarus/18 - LCLZenGL/backup/demo.lfm

@@ -0,0 +1,24 @@
+object Form1: TForm1
+  Left = 256
+  Height = 600
+  Top = 577
+  Width = 800
+  BorderStyle = bsSingle
+  Caption = 'demo LCL'
+  OnActivate = FormActivate
+  OnClose = FormClose
+  OnCreate = FormCreate
+  OnDeactivate = FormDeactivate
+  OnKeyDown = FormKeyDown
+  OnMouseDown = FormMouseDown
+  OnMouseMove = FormMouseMove
+  Position = poScreenCenter
+  LCLVersion = '2.2.0.4'
+  object Timer1: TTimer
+    Enabled = False
+    Interval = 10
+    OnTimer = Timer1Timer
+    Left = 64
+    Top = 26
+  end
+end

+ 323 - 0
Zengl_SRC/demos/Lazarus/18 - LCLZenGL/backup/demo.pas

@@ -0,0 +1,323 @@
+unit demo;
+
+{$mode objfpc}{$H+}
+{$I zglCustomConfig.cfg}
+
+interface
+
+// RU: обратите внимание!!!
+//     Проекты LCL имеют свои конфигурационные файлы "zgl_config.cfg". Лучше всего для каждого вашего проекта иметь свой
+//     конфигурационный файл, это может решить многие проблемы, если вдруг вы будете вносить изменения в конфигурацию проекта
+//     и, это отобразится на других ваших проектах использующих тот же конфигурационный файл.
+// EN: note!!!
+//     LCL projects have their own configuration files "zgl_config.cfg". It's best to have a separate config file for each of
+//     your projects, this can solve many problems if you suddenly make changes to the project config and it will show up on
+//     your other projects using the same config file.
+
+uses
+  Classes,
+  SysUtils,
+  Forms,
+  Controls,
+  Graphics,
+  Dialogs,
+  ExtCtrls,
+
+{$IFDEF LINUX}
+  {$IFDEF LCLGTK2}
+  GTK2, GDK2x, GTK2Proc,
+  {$ENDIF}
+{$ENDIF}
+
+  {$IFDEF USE_ZENGL_STATIC}
+  zgl_application,
+  zgl_window,
+  zgl_screen,
+  zgl_render_2d,
+  zgl_joystick,
+  zgl_mouse,
+  zgl_fx,
+  zgl_font,
+  zgl_text,
+  zgl_textures,
+  zgl_textures_png,
+  zgl_types,
+  zgl_collision_2d,
+  zgl_sprite_2d,
+  // sound
+  zgl_sound,
+  zgl_sound_wav,
+  zgl_sound_ogg,
+  zgl_utils
+  {$ELSE}
+  zglHeader
+  {$ENDIF}
+  , LCLType;
+
+type
+
+  { TForm1 }
+
+  TForm1 = class(TForm)
+    Timer1: TTimer;
+    procedure FormActivate(Sender: TObject);
+    procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
+    procedure FormCreate(Sender: TObject);
+    procedure FormDeactivate(Sender: TObject);
+    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
+    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
+      Shift: TShiftState; X, Y: Integer);
+    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
+    procedure Timer1Timer(Sender: TObject);
+  private
+
+  public
+
+  end;
+
+var
+  Form1: TForm1;
+
+//-----------------------------------------
+  dirRes  : UTF8String;
+
+  fntMain : Byte;
+  MyIcon    : array[ 0..1 ] of zglPTexture;
+  sound, audio   : zglPSound;
+  audioPlay : Boolean = false;
+  state   : Integer;
+  r : zglTRect2D;
+  p : Integer;
+
+  // добавляем номер звука, пока для одного звука
+  IDSound: array[0..1] of Integer;
+
+  joyCount   : Integer;
+  // для возможности изменения экрана
+  ScreenWidth : integer = 800;
+  ScreenHeight : integer = 600;
+
+//------------------------------------------
+
+implementation
+
+{$R *.lfm}
+
+// RU: Т.к. звуковая подсистема нацелена на 3D, для позиционирования звуков в 2D нужны некоторые ухищрения.
+// EN: Because sound subsystem using 3D, there is some tricky way to calculate sound position in 2D.
+function CalcX2D( const X : Single ) : Single;
+begin
+  Result := ( X - ScreenWidth / 2 ) * ( 10 / ScreenHeight / 2 );         // сменил смещение по X и Y, теперь более явно можно
+end;                                                                     // отдалить/приблизить звук
+
+function CalcY2D( const Y : Single ) : Single;
+begin
+  Result := ( Y - ScreenWidth / 2 ) * ( 10 / ScreenHeight / 2 );
+end;
+
+procedure Draw;
+begin
+  setFontTextScale(15, fntMain);
+  text_Draw( fntMain, 0, 0, 'Escape - Exit' );
+
+  // RU: Координаты мыши можно получить при помощи функций mouse_X и mouse_Y.
+  // EN: Mouse coordinates can be got using functions mouse_X and mouse_Y.
+  text_Draw( fntMain, 0, 18, 'Mouse X, Y: ' + u_IntToStr( mouseX ) + '; ' + u_IntToStr( mouseY ) );
+
+  ssprite2d_Draw( MyIcon[ state ], ( ScreenWidth - 128 ) / 2, ( ScreenHeight - 128 ) / 2, 128, 128, 0 );
+  text_Draw( fntMain, ScreenWidth / 2, ScreenHeight / 2 + 64, 'Skillet - Comatose - Whispers In The Dark', TEXT_HALIGN_CENTER );
+
+  if col2d_PointInRect( mouseX, mouseY, r ) Then
+    begin
+      fx_SetBlendMode( FX_BLEND_ADD );
+      ssprite2d_Draw(MyIcon[state], (ScreenWidth - 132) / 2, (ScreenHeight - 132) / 2, 132, 132, 0, 155);
+      fx_SetBlendMode( FX_BLEND_NORMAL );
+    end;
+  Application.ProcessMessages;
+end;
+
+procedure Init;
+begin
+  wnd_SetSize( Form1.ClientWidth, Form1.ClientHeight );
+  scrVSync := true;
+  // RU: Инициализируем звуковую подсистему. Для Windows можно сделать выбор между DirectSound и OpenAL отредактировав файл zgl_config.cfg.
+  // EN: Initializing sound subsystem. For Windows can be used DirectSound or OpenAL, see zgl_config.cfg.
+  snd_Init();
+
+  // RU: Загружаем звуковой файл и устанавливаем для него максимальноe количество проигрываемых источников в 2.
+  // EN: Load the sound file and set maximum count of sources that can be played to 2.
+
+
+  // RU: Инициализируем обработку ввода джойстиков и получаем количество подключенных джойстиков.
+  // EN: Initialize processing joystick input and get count of plugged joysticks.
+  joyCount := joy_Init();
+
+  // RU: Загружаем текстуры, которые будут индикаторами.
+  // EN: Load the textures, that will be indicators.
+  MyIcon[ 0 ] := tex_LoadFromFile( dirRes + 'audio-stop.png' );
+  MyIcon[ 1 ] := tex_LoadFromFile( dirRes + 'audio-play.png' );
+
+  fntMain := font_LoadFromFile( dirRes + 'font.zfi' );
+
+  sound := snd_LoadFromFile( dirRes + 'click.wav', 2 );
+  audio := snd_LoadFromFile(dirRes + 'music.ogg', 2);
+end;
+
+{ TForm1 }
+
+procedure TForm1.FormCreate(Sender: TObject);
+begin
+  // RU: вариант для неизменного окна или выбирайте нужный вариант в настройках формы.
+  // EN: option for a fixed window or select the desired option in the form settings.
+  // Form1.BorderStyle := bsSingle;
+end;
+
+procedure TForm1.FormDeactivate(Sender: TObject);
+begin
+  Timer1.Enabled := false;
+end;
+
+// закрываем форму
+procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
+begin
+  Timer1.Enabled := false;
+  zgl_Destroy;
+  Application.Terminate;
+end;
+
+procedure TForm1.FormActivate(Sender: TObject);
+{$IFDEF LINUX}
+  var
+    widget : PGtkWidget;
+{$ENDIF}
+begin
+  // Производим инициализацию --------------------------------------------------
+  // RU: Вертикальная синхронизация поможет избежать загрузки процессора.
+  // EN: Vertical synchronization will decrease a CPU loading.
+  scrVSync := true;
+
+  // RU: Перед стартом необходимо настроить viewport.
+  // EN: Before the start need to configure a viewport.
+  wnd_SetPos( Form1.Left, Form1.Top );
+//  wnd_SetSize( Form1.ClientWidth, Form1.ClientHeight );
+
+  Form1.BringToFront();
+  r.X := ( Form1.ClientWidth - 128 ) / 2;
+  r.Y := ( Form1.ClientHeight - 128 ) / 2;
+  r.W := 128;
+  r.H := 128;
+//-----------------------------------------------------
+
+  zgl_Reg(SYS_LOAD, @Init);
+  zgl_Reg( SYS_DRAW, @Draw );
+
+  {$IFDEF LINUX}
+    {$IFDEF LCLGTK2}
+    widget := GetFixedWidget( PGtkWidget( Handle ) );
+    gtk_widget_realize( widget );
+    if not zgl_InitToHandle( GDK_WINDOW_XID( widget^.window ) ) then
+    begin
+      zgl_Destroy;
+      Application.Terminate;
+      Exit;
+    end;
+    {$ENDIF}
+  {$ENDIF}
+
+  {$IFDEF WINDOWS}
+    if not zgl_InitToHandle( Handle ) then
+    begin
+      zgl_Destroy;
+      Application.Terminate;
+      Exit;
+    end;
+  {$ENDIF}
+
+  // RU: таймер должен быть изначально выключен! Включаем таймер только когда окно инициализировано.
+  // EN: the timer must be initially turned off! We turn on the timer only when the window is initialized.
+  Timer1.Enabled := True;
+end;
+
+// RU: проверка нажатия клавиши.
+// EN: keypress check.
+procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
+begin
+  if Key = 27 then
+    Form1.Close;
+end;
+
+// RU: обработка мыши и проигрывание музыки.
+// EN: mouse handling and music playback.
+procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
+  Shift: TShiftState; X, Y: Integer);
+begin
+  Timer1.Enabled := false;
+  if Button = mbLeft then
+  begin
+    // RU: В данном случаи мы начинаем воспроизводить звук сразу в указанных координатах, но их можно менять и в процессе используя процедуру snd_SetPos.
+    //     Важно: Для OpenAL можно позиционировать только mono-звуки
+    //
+    // EN: In this case, we begin to play the sound directly in these coordinates, but they can be changed later using procedure snd_SetPos.
+    //     Important: OpenAL can position only mono-sounds.
+
+// !!! -------------------------------------------------------------------------
+// RU: эта часть изменена!!! Теперь можно заново воспроизводить звуки, даже если они не закончили играть.
+// EN: this part has changed! Sounds can now be replayed even if they haven't finished playing.
+    if snd_Get(sound, IDSound[0], SND_STATE_PLAYING) = IDSound[0] then
+      snd_Stop(sound, IDSound[0]);
+    IDSound[0] := snd_Play(sound, FALSE, CalcX2D(X), CalcY2D(Y));
+// !!! -------------------------------------------------------------------------
+
+// RU: добавляем проверку на проигрывание звука, только если много разных звуков/музыки, то номера надо менять (не только 1!!!)
+// EN: we add a check for sound playback, only if there are many different sounds / music, then the numbers must be changed (not only 1 !!!)
+    if col2d_PointInRect(X, Y, r) Then
+    begin
+      if audioPlay then
+        snd_Stop(audio, IDSound[1])
+      else
+        IDSound[1] := snd_Play(audio, False);
+      audioPlay := not audioPlay;
+    end;
+  end;
+  Timer1.Enabled := true;
+end;
+
+// RU: для примера использования перемещения мышки.
+// EN: for an example of using mouse movement.
+procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
+  Y: Integer);
+begin
+  Timer1.Enabled := False;
+  mouseX := X;
+  mouseY := Y;
+  Timer1.Enabled := True;
+end;
+
+procedure TForm1.Timer1Timer(Sender: TObject);
+begin
+  Timer1.Enabled := False;
+  app_PLoop;
+
+  // RU: Проверяем играет ли музыка(1 - играет, 0 - не играет). Так же можно проверить и звуки - подставив zglPSound и ID вот так:
+  //     snd_Get( Sound, ID...
+  //     ID возвращается функцией snd_Play
+  //
+  // EN: Check if music playing(1 - playing, 0 - not playing). Sounds also can be checked this way - just use zglPSound and ID:
+  //     snd_Get( Sound, ID...
+  //     ID returns by function snd_Play.
+  state := snd_Get( audio, IDSound[1], SND_STATE_PLAYING );
+  if state = 0 Then
+    audioPlay := False;
+
+  // RU: Получаем в процентах позицию проигрывания аудиопотока и ставим громкость для плавных переходов.
+  // EN: Get position in percent's for audio stream and set volume for smooth playing.
+  p := snd_Get( audio, IDSound[1], SND_STATE_PERCENT );
+  if ( p >= 0 ) and ( p < 25 ) Then
+    snd_SetVolume(audio, IDSound[1], ( 1 / 24 ) * p );
+  if ( p >= 75 ) and ( p < 100 ) Then
+    snd_SetVolume(audio, IDSound[1], 1 - ( 1 / 24 ) * ( p - 75 ) );
+  Timer1.Enabled := True;
+end;
+
+end.
+

+ 96 - 0
Zengl_SRC/demos/Lazarus/18 - LCLZenGL/backup/demoLCL.lpi

@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONFIG>
+  <ProjectOptions>
+    <Version Value="12"/>
+    <General>
+      <Flags>
+        <CompatibilityMode Value="True"/>
+      </Flags>
+      <SessionStorage Value="InProjectDir"/>
+      <Title Value="demoLCL"/>
+      <Scaled Value="True"/>
+      <ResourceType Value="res"/>
+      <UseXPManifest Value="True"/>
+      <XPManifest>
+        <DpiAware Value="True"/>
+      </XPManifest>
+    </General>
+    <BuildModes Count="1">
+      <Item1 Name="Default" Default="True"/>
+    </BuildModes>
+    <PublishOptions>
+      <Version Value="2"/>
+      <UseFileFilters Value="True"/>
+    </PublishOptions>
+    <RunParams>
+      <FormatVersion Value="2"/>
+    </RunParams>
+    <RequiredPackages Count="1">
+      <Item1>
+        <PackageName Value="LCL"/>
+      </Item1>
+    </RequiredPackages>
+    <Units Count="2">
+      <Unit0>
+        <Filename Value="demoLCL.lpr"/>
+        <IsPartOfProject Value="True"/>
+      </Unit0>
+      <Unit1>
+        <Filename Value="demo.pas"/>
+        <IsPartOfProject Value="True"/>
+        <ComponentName Value="Form1"/>
+        <HasResources Value="True"/>
+        <ResourceBaseClass Value="Form"/>
+      </Unit1>
+    </Units>
+  </ProjectOptions>
+  <CompilerOptions>
+    <Version Value="11"/>
+    <Target>
+      <Filename Value="../../../bin/$(TargetCPU)-$(TargetOS)/demoLCL"/>
+    </Target>
+    <SearchPaths>
+      <IncludeFiles Value="$(ProjOutDir);../../../srcGEGL;../../../src;../../../srcGL;../../../srcGL/GLES;../../../srcGL/EGL"/>
+      <OtherUnitFiles Value="../../../src;../../../srcGL;../../../srcGL/EGL;../../../srcGL/GLES;../../../lib/zlib/$(TargetCPU)-$(TargetOS);../../../lib/zip/$(TargetCPU)-$(TargetOS);../../../lib/theora/$(TargetCPU)-$(TargetOS);../../../lib/ogg/$(TargetCPU)-$(TargetOS);../../../lib/msvcrt/$(TargetCPU);../../../lib/jpeg/$(TargetCPU)-$(TargetOS);../../../lib/chipmunk/$(TargetCPU)-$(TargetOS);../../../srcGEGL"/>
+      <UnitOutputDirectory Value="../tmp/$(TargetCPU)-$(TargetOS)"/>
+    </SearchPaths>
+    <Parsing>
+      <SyntaxOptions>
+        <SyntaxMode Value="Delphi"/>
+      </SyntaxOptions>
+    </Parsing>
+    <CodeGeneration>
+      <SmartLinkUnit Value="True"/>
+    </CodeGeneration>
+    <Linking>
+      <Debugging>
+        <DebugInfoType Value="dsDwarf2Set"/>
+        <StripSymbols Value="True"/>
+      </Debugging>
+      <LinkSmart Value="True"/>
+      <Options>
+        <Win32>
+          <GraphicApplication Value="True"/>
+        </Win32>
+      </Options>
+    </Linking>
+    <Other>
+      <Verbosity>
+        <ShoLineNum Value="True"/>
+      </Verbosity>
+    </Other>
+  </CompilerOptions>
+  <Debugging>
+    <Exceptions Count="3">
+      <Item1>
+        <Name Value="EAbort"/>
+      </Item1>
+      <Item2>
+        <Name Value="ECodetoolError"/>
+      </Item2>
+      <Item3>
+        <Name Value="EFOpenError"/>
+      </Item3>
+    </Exceptions>
+  </Debugging>
+</CONFIG>

+ 222 - 0
Zengl_SRC/demos/Lazarus/18 - LCLZenGL/backup/demoLCL.lps

@@ -0,0 +1,222 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONFIG>
+  <ProjectSession>
+    <Version Value="12"/>
+    <BuildModes Active="Default"/>
+    <Units Count="10">
+      <Unit0>
+        <Filename Value="demoLCL.lpr"/>
+        <IsPartOfProject Value="True"/>
+        <UsageCount Value="21"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit0>
+      <Unit1>
+        <Filename Value="demo.pas"/>
+        <IsPartOfProject Value="True"/>
+        <ComponentName Value="Form1"/>
+        <HasResources Value="True"/>
+        <ResourceBaseClass Value="Form"/>
+        <IsVisibleTab Value="True"/>
+        <TopLine Value="46"/>
+        <CursorPos X="62" Y="82"/>
+        <UsageCount Value="21"/>
+        <Loaded Value="True"/>
+        <LoadedDesigner Value="True"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit1>
+      <Unit2>
+        <Filename Value="../../../src/zgl_application.pas"/>
+        <EditorIndex Value="-1"/>
+        <CursorPos X="11" Y="28"/>
+        <UsageCount Value="10"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit2>
+      <Unit3>
+        <Filename Value="zgl_config.cfg"/>
+        <EditorIndex Value="-1"/>
+        <UsageCount Value="10"/>
+        <DefaultSyntaxHighlighter Value="None"/>
+      </Unit3>
+      <Unit4>
+        <Filename Value="../../../src/zgl_text.pas"/>
+        <EditorIndex Value="6"/>
+        <TopLine Value="149"/>
+        <CursorPos X="46" Y="175"/>
+        <UsageCount Value="10"/>
+        <Loaded Value="True"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit4>
+      <Unit5>
+        <Filename Value="../../../src/zgl_window.pas"/>
+        <EditorIndex Value="1"/>
+        <TopLine Value="1057"/>
+        <CursorPos Y="1015"/>
+        <UsageCount Value="10"/>
+        <Loaded Value="True"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit5>
+      <Unit6>
+        <Filename Value="../../../src/zgl_opengl.pas"/>
+        <EditorIndex Value="2"/>
+        <TopLine Value="558"/>
+        <CursorPos Y="601"/>
+        <UsageCount Value="10"/>
+        <Loaded Value="True"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit6>
+      <Unit7>
+        <Filename Value="../../../srcGL/zgl_pasOpenGL.pas"/>
+        <EditorIndex Value="5"/>
+        <TopLine Value="10154"/>
+        <CursorPos Y="10191"/>
+        <UsageCount Value="10"/>
+        <Loaded Value="True"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit7>
+      <Unit8>
+        <Filename Value="../../../src/zgl_opengl_all.pas"/>
+        <EditorIndex Value="3"/>
+        <TopLine Value="320"/>
+        <CursorPos X="37" Y="348"/>
+        <UsageCount Value="10"/>
+        <Loaded Value="True"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit8>
+      <Unit9>
+        <Filename Value="../../../src/zgl_screen.pas"/>
+        <EditorIndex Value="4"/>
+        <TopLine Value="1059"/>
+        <CursorPos Y="1061"/>
+        <UsageCount Value="10"/>
+        <Loaded Value="True"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit9>
+    </Units>
+    <JumpHistory Count="30" HistoryIndex="29">
+      <Position1>
+        <Filename Value="../../../src/zgl_opengl_all.pas"/>
+        <Caret Line="315" TopLine="303"/>
+      </Position1>
+      <Position2>
+        <Filename Value="../../../src/zgl_opengl_all.pas"/>
+        <Caret Line="316" TopLine="306"/>
+      </Position2>
+      <Position3>
+        <Filename Value="../../../src/zgl_opengl_all.pas"/>
+        <Caret Line="317" TopLine="306"/>
+      </Position3>
+      <Position4>
+        <Filename Value="../../../src/zgl_opengl_all.pas"/>
+        <Caret Line="318" TopLine="306"/>
+      </Position4>
+      <Position5>
+        <Filename Value="../../../src/zgl_opengl_all.pas"/>
+        <Caret Line="319" TopLine="306"/>
+      </Position5>
+      <Position6>
+        <Filename Value="../../../src/zgl_opengl_all.pas"/>
+        <Caret Line="320" TopLine="306"/>
+      </Position6>
+      <Position7>
+        <Filename Value="../../../src/zgl_opengl_all.pas"/>
+        <Caret Line="321" TopLine="306"/>
+      </Position7>
+      <Position8>
+        <Filename Value="../../../src/zgl_opengl_all.pas"/>
+        <Caret Line="322" TopLine="306"/>
+      </Position8>
+      <Position9>
+        <Filename Value="../../../src/zgl_opengl_all.pas"/>
+        <Caret Line="324" TopLine="306"/>
+      </Position9>
+      <Position10>
+        <Filename Value="../../../src/zgl_opengl_all.pas"/>
+        <Caret Line="325" TopLine="306"/>
+      </Position10>
+      <Position11>
+        <Filename Value="../../../src/zgl_opengl_all.pas"/>
+        <Caret Line="328" TopLine="306"/>
+      </Position11>
+      <Position12>
+        <Filename Value="../../../src/zgl_opengl_all.pas"/>
+        <Caret Line="345" TopLine="306"/>
+      </Position12>
+      <Position13>
+        <Filename Value="../../../src/zgl_opengl_all.pas"/>
+        <Caret Line="226" TopLine="199"/>
+      </Position13>
+      <Position14>
+        <Filename Value="../../../src/zgl_opengl_all.pas"/>
+        <Caret Line="227" TopLine="199"/>
+      </Position14>
+      <Position15>
+        <Filename Value="../../../src/zgl_opengl_all.pas"/>
+        <Caret Line="243" TopLine="211"/>
+      </Position15>
+      <Position16>
+        <Filename Value="../../../src/zgl_opengl_all.pas"/>
+        <Caret Line="244" TopLine="211"/>
+      </Position16>
+      <Position17>
+        <Filename Value="../../../src/zgl_opengl_all.pas"/>
+        <Caret Line="246" TopLine="211"/>
+      </Position17>
+      <Position18>
+        <Filename Value="../../../src/zgl_opengl_all.pas"/>
+        <Caret Line="247" TopLine="211"/>
+      </Position18>
+      <Position19>
+        <Filename Value="../../../src/zgl_opengl_all.pas"/>
+        <Caret Line="248" TopLine="211"/>
+      </Position19>
+      <Position20>
+        <Filename Value="../../../src/zgl_opengl_all.pas"/>
+        <Caret Line="250" TopLine="211"/>
+      </Position20>
+      <Position21>
+        <Filename Value="../../../src/zgl_opengl_all.pas"/>
+        <Caret Line="251" TopLine="211"/>
+      </Position21>
+      <Position22>
+        <Filename Value="../../../src/zgl_opengl_all.pas"/>
+        <Caret Line="252" TopLine="211"/>
+      </Position22>
+      <Position23>
+        <Filename Value="../../../src/zgl_opengl_all.pas"/>
+        <Caret Line="257" TopLine="212"/>
+      </Position23>
+      <Position24>
+        <Filename Value="../../../src/zgl_opengl_all.pas"/>
+        <Caret Line="262" TopLine="217"/>
+      </Position24>
+      <Position25>
+        <Filename Value="../../../src/zgl_opengl_all.pas"/>
+        <Caret Line="346" TopLine="320"/>
+      </Position25>
+      <Position26>
+        <Filename Value="../../../src/zgl_opengl_all.pas"/>
+        <Caret Line="348" Column="37" TopLine="320"/>
+      </Position26>
+      <Position27>
+        <Filename Value="demo.pas"/>
+        <Caret Line="216" TopLine="191"/>
+      </Position27>
+      <Position28>
+        <Filename Value="../../../src/zgl_window.pas"/>
+        <Caret Line="1015" TopLine="989"/>
+      </Position28>
+      <Position29>
+        <Filename Value="demo.pas"/>
+        <Caret Line="141" TopLine="108"/>
+      </Position29>
+      <Position30>
+        <Filename Value="demo.pas"/>
+        <Caret Line="216" TopLine="191"/>
+      </Position30>
+    </JumpHistory>
+    <RunParams>
+      <FormatVersion Value="2"/>
+      <Modes ActiveMode=""/>
+    </RunParams>
+  </ProjectSession>
+</CONFIG>

+ 3 - 3
Zengl_SRC/demos/Lazarus/18 - LCLZenGL/demo.lfm

@@ -1,7 +1,7 @@
 object Form1: TForm1
 object Form1: TForm1
-  Left = 255
+  Left = 256
   Height = 600
   Height = 600
-  Top = 540
+  Top = 577
   Width = 800
   Width = 800
   BorderStyle = bsSingle
   BorderStyle = bsSingle
   Caption = 'demo LCL'
   Caption = 'demo LCL'
@@ -13,7 +13,7 @@ object Form1: TForm1
   OnMouseDown = FormMouseDown
   OnMouseDown = FormMouseDown
   OnMouseMove = FormMouseMove
   OnMouseMove = FormMouseMove
   Position = poScreenCenter
   Position = poScreenCenter
-  LCLVersion = '2.2.4.0'
+  LCLVersion = '2.2.0.4'
   object Timer1: TTimer
   object Timer1: TTimer
     Enabled = False
     Enabled = False
     Interval = 10
     Interval = 10

+ 1 - 1
Zengl_SRC/demos/Lazarus/18 - LCLZenGL/demo.pas

@@ -79,7 +79,7 @@ var
   Form1: TForm1;
   Form1: TForm1;
 
 
 //-----------------------------------------
 //-----------------------------------------
-  dirRes  : UTF8String;
+  dirRes  : UTF8String {$IFNDEF MACOSX} = '../data/' {$ENDIF};
 
 
   fntMain : Byte;
   fntMain : Byte;
   MyIcon    : array[ 0..1 ] of zglPTexture;
   MyIcon    : array[ 0..1 ] of zglPTexture;

+ 1 - 0
Zengl_SRC/demos/Lazarus/18 - LCLZenGL/demoLCL.lpi

@@ -64,6 +64,7 @@
     </CodeGeneration>
     </CodeGeneration>
     <Linking>
     <Linking>
       <Debugging>
       <Debugging>
+        <GenerateDebugInfo Value="False"/>
         <DebugInfoType Value="dsDwarf2Set"/>
         <DebugInfoType Value="dsDwarf2Set"/>
         <StripSymbols Value="True"/>
         <StripSymbols Value="True"/>
       </Debugging>
       </Debugging>

+ 108 - 0
Zengl_SRC/demos/Lazarus/18 - LCLZenGL/demoLCL.lps

@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONFIG>
+  <ProjectSession>
+    <Version Value="12"/>
+    <BuildModes Active="Default"/>
+    <Units Count="10">
+      <Unit0>
+        <Filename Value="demoLCL.lpr"/>
+        <IsPartOfProject Value="True"/>
+        <UsageCount Value="21"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit0>
+      <Unit1>
+        <Filename Value="demo.pas"/>
+        <IsPartOfProject Value="True"/>
+        <ComponentName Value="Form1"/>
+        <HasResources Value="True"/>
+        <ResourceBaseClass Value="Form"/>
+        <IsVisibleTab Value="True"/>
+        <TopLine Value="46"/>
+        <CursorPos X="51" Y="76"/>
+        <UsageCount Value="21"/>
+        <Loaded Value="True"/>
+        <LoadedDesigner Value="True"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit1>
+      <Unit2>
+        <Filename Value="../../../src/zgl_application.pas"/>
+        <EditorIndex Value="-1"/>
+        <CursorPos X="11" Y="28"/>
+        <UsageCount Value="10"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit2>
+      <Unit3>
+        <Filename Value="zgl_config.cfg"/>
+        <EditorIndex Value="-1"/>
+        <UsageCount Value="10"/>
+        <DefaultSyntaxHighlighter Value="None"/>
+      </Unit3>
+      <Unit4>
+        <Filename Value="../../../src/zgl_text.pas"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="149"/>
+        <CursorPos X="46" Y="175"/>
+        <UsageCount Value="10"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit4>
+      <Unit5>
+        <Filename Value="../../../src/zgl_window.pas"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="1057"/>
+        <CursorPos Y="1015"/>
+        <UsageCount Value="10"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit5>
+      <Unit6>
+        <Filename Value="../../../src/zgl_opengl.pas"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="558"/>
+        <CursorPos Y="601"/>
+        <UsageCount Value="10"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit6>
+      <Unit7>
+        <Filename Value="../../../srcGL/zgl_pasOpenGL.pas"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="10154"/>
+        <CursorPos Y="10191"/>
+        <UsageCount Value="10"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit7>
+      <Unit8>
+        <Filename Value="../../../src/zgl_opengl_all.pas"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="320"/>
+        <CursorPos X="37" Y="348"/>
+        <UsageCount Value="10"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit8>
+      <Unit9>
+        <Filename Value="../../../src/zgl_screen.pas"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="1059"/>
+        <CursorPos Y="1061"/>
+        <UsageCount Value="10"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit9>
+    </Units>
+    <JumpHistory Count="3" HistoryIndex="2">
+      <Position1>
+        <Filename Value="demo.pas"/>
+        <Caret Line="216" TopLine="191"/>
+      </Position1>
+      <Position2>
+        <Filename Value="demo.pas"/>
+        <Caret Line="141" TopLine="108"/>
+      </Position2>
+      <Position3>
+        <Filename Value="demo.pas"/>
+        <Caret Line="216" TopLine="191"/>
+      </Position3>
+    </JumpHistory>
+    <RunParams>
+      <FormatVersion Value="2"/>
+      <Modes ActiveMode=""/>
+    </RunParams>
+  </ProjectSession>
+</CONFIG>

+ 145 - 0
Zengl_SRC/demos/Lazarus/19 - OpenGL33_01/backup/demo19.lpi

@@ -0,0 +1,145 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONFIG>
+  <ProjectOptions>
+    <Version Value="12"/>
+    <General>
+      <Flags>
+        <SaveOnlyProjectUnits Value="True"/>
+        <MainUnitHasCreateFormStatements Value="False"/>
+        <MainUnitHasTitleStatement Value="False"/>
+        <MainUnitHasScaledStatement Value="False"/>
+        <CompatibilityMode Value="True"/>
+      </Flags>
+      <SessionStorage Value="InProjectDir"/>
+      <Title Value="demo19"/>
+      <ResourceType Value="res"/>
+      <UseXPManifest Value="True"/>
+      <Icon Value="0"/>
+    </General>
+    <i18n>
+      <EnableI18N LFM="False"/>
+    </i18n>
+    <BuildModes Count="2">
+      <Item1 Name="Release" Default="True"/>
+      <Item2 Name="Debug">
+        <CompilerOptions>
+          <Version Value="11"/>
+          <Target>
+            <Filename Value="demo19"/>
+          </Target>
+          <SearchPaths>
+            <IncludeFiles Value="$(ProjOutDir);../../../headers"/>
+            <OtherUnitFiles Value="../../../headers;../../../extra;../../../src;../../../lib/jpeg/$(TargetCPU)-$(TargetOS);../../../lib/msvcrt/$(TargetCPU);../../../lib/ogg/$(TargetCPU)-$(TargetOS);../../../lib/theora/$(TargetCPU)-$(TargetOS);../../../lib/zlib/$(TargetCPU)-$(TargetOS);../../../lib/zip/$(TargetCPU)-$(TargetOS)"/>
+            <UnitOutputDirectory Value="../tmp/$(TargetCPU)-$(TargetOS)"/>
+          </SearchPaths>
+          <Parsing>
+            <SyntaxOptions>
+              <SyntaxMode Value="Delphi"/>
+            </SyntaxOptions>
+          </Parsing>
+          <CodeGeneration>
+            <Checks>
+              <IOChecks Value="True"/>
+              <RangeChecks Value="True"/>
+              <OverflowChecks Value="True"/>
+              <StackChecks Value="True"/>
+            </Checks>
+            <VerifyObjMethodCallValidity Value="True"/>
+            <Optimizations>
+              <OptimizationLevel Value="0"/>
+            </Optimizations>
+          </CodeGeneration>
+          <Linking>
+            <Debugging>
+              <UseHeaptrc Value="True"/>
+            </Debugging>
+            <Options>
+              <Win32>
+                <GraphicApplication Value="True"/>
+              </Win32>
+            </Options>
+          </Linking>
+          <Other>
+            <Verbosity>
+              <ShowNotes Value="False"/>
+              <ShowHints Value="False"/>
+            </Verbosity>
+          </Other>
+        </CompilerOptions>
+      </Item2>
+    </BuildModes>
+    <PublishOptions>
+      <Version Value="2"/>
+    </PublishOptions>
+    <RunParams>
+      <FormatVersion Value="2"/>
+      <Modes Count="1">
+        <Mode0 Name="default"/>
+      </Modes>
+    </RunParams>
+    <Units Count="2">
+      <Unit0>
+        <Filename Value="demo19.lpr"/>
+        <IsPartOfProject Value="True"/>
+      </Unit0>
+      <Unit1>
+        <Filename Value="../../../../srcGL/zgl_matrix.pas"/>
+        <IsPartOfProject Value="True"/>
+      </Unit1>
+    </Units>
+  </ProjectOptions>
+  <CompilerOptions>
+    <Version Value="11"/>
+    <Target>
+      <Filename Value="../../../bin/$(TargetCPU)-$(TargetOS)/demo19"/>
+    </Target>
+    <SearchPaths>
+      <IncludeFiles Value="$(ProjOutDir);../../../srcGEGL;../../../srcGL;../../../src;../../../srcGL/EGL;../../../srcGL/GLES"/>
+      <OtherUnitFiles Value="../../../src;../../../srcGEGL;../../../srcGL;../../../srcGL/EGL;../../../srcGL/GLES;../../../lib/zlib/$(TargetCPU)-$(TargetOS);../../../lib/zip/$(TargetCPU)-$(TargetOS);../../../lib/theora/$(TargetCPU)-$(TargetOS);../../../lib/ogg/$(TargetCPU)-$(TargetOS);../../../lib/msvcrt/$(TargetCPU);../../../lib/jpeg/$(TargetCPU)-$(TargetOS);../../../lib/chipmunk/$(TargetCPU)-$(TargetOS)"/>
+      <UnitOutputDirectory Value="../tmp/$(TargetCPU)-$(TargetOS)"/>
+    </SearchPaths>
+    <Parsing>
+      <SyntaxOptions>
+        <SyntaxMode Value="Delphi"/>
+      </SyntaxOptions>
+    </Parsing>
+    <CodeGeneration>
+      <SmartLinkUnit Value="True"/>
+      <Optimizations>
+        <OptimizationLevel Value="3"/>
+      </Optimizations>
+    </CodeGeneration>
+    <Linking>
+      <Debugging>
+        <DebugInfoType Value="dsDwarf2"/>
+        <StripSymbols Value="True"/>
+        <UseExternalDbgSyms Value="True"/>
+      </Debugging>
+      <LinkSmart Value="True"/>
+      <Options>
+        <Win32>
+          <GraphicApplication Value="True"/>
+        </Win32>
+      </Options>
+    </Linking>
+    <Other>
+      <Verbosity>
+        <ShowNotes Value="False"/>
+        <ShowHints Value="False"/>
+      </Verbosity>
+    </Other>
+  </CompilerOptions>
+  <Debugging>
+    <Exceptions Count="3">
+      <Item1>
+        <Name Value="EAbort"/>
+      </Item1>
+      <Item2>
+        <Name Value="ECodetoolError"/>
+      </Item2>
+      <Item3>
+        <Name Value="EFOpenError"/>
+      </Item3>
+    </Exceptions>
+  </Debugging>
+</CONFIG>

+ 25 - 0
Zengl_SRC/demos/Lazarus/19 - OpenGL33_01/backup/demo19.lps

@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONFIG>
+  <ProjectSession>
+    <Version Value="12"/>
+    <BuildModes Active="Release"/>
+    <Units Count="2">
+      <Unit0>
+        <Filename Value="demo19.lpr"/>
+        <IsPartOfProject Value="True"/>
+        <IsVisibleTab Value="True"/>
+        <UsageCount Value="20"/>
+        <Loaded Value="True"/>
+      </Unit0>
+      <Unit1>
+        <Filename Value="../../../../srcGL/zgl_matrix.pas"/>
+        <IsPartOfProject Value="True"/>
+        <UsageCount Value="20"/>
+      </Unit1>
+    </Units>
+    <RunParams>
+      <FormatVersion Value="2"/>
+      <Modes ActiveMode="default"/>
+    </RunParams>
+  </ProjectSession>
+</CONFIG>

+ 8 - 7
Zengl_SRC/demos/Lazarus/19 - OpenGL33_01/demo19.lpr

@@ -56,8 +56,8 @@ var
   vao: GLuint;
   vao: GLuint;
   vboHandles: array[0..1] of GLuint;
   vboHandles: array[0..1] of GLuint;
 
 
-// RU: создание VAO и VBO.
-// EN: creation of VAO and VBO.
+// RU: создание VAO и VBO. Во избежание ошибок, создавайте VAO и VBO после создания шейдера!
+// EN: creation of VAO and VBO. To avoid errors, create VAO and VBO after creating the shader!
 procedure createVBOAndVAO;
 procedure createVBOAndVAO;
 begin
 begin
   // RU: буферные объекты.
   // RU: буферные объекты.
@@ -108,12 +108,12 @@ end;
 // EN: We use our projection matrix.
 // EN: We use our projection matrix.
 procedure UserMode;
 procedure UserMode;
 begin
 begin
-  Matrix4_Perspective(45, zgl_Get(WINDOW_WIDTH) / zgl_Get(WINDOW_HEIGHT), 1, 100);
+  Matrix4x4_Perspective(45, zgl_Get(WINDOW_WIDTH) / zgl_Get(WINDOW_HEIGHT), 1, 100);
   // glUseProgram(shadProg);        // это не обязательно в данном случае.
   // glUseProgram(shadProg);        // это не обязательно в данном случае.
   // RU: если данная переменная не используется в шейдере, то и вызов делать не будем.
   // RU: если данная переменная не используется в шейдере, то и вызов делать не будем.
   // EN: if this variable is not used in the shader, then we will not make the call.
   // EN: if this variable is not used in the shader, then we will not make the call.
   if projMatrLoc <> -1 then
   if projMatrLoc <> -1 then
-    glUniformMatrix4fv(projMatrLoc, 1, GL_FALSE, @projMatr);
+    glUniformMatrix4fv(projMatrLoc, 1, GL_FALSE, @zgl_MatrixS[projectionMatrix]);
   // glUseProgram(0);             // это не обязательно в данном случае.
   // glUseProgram(0);             // это не обязательно в данном случае.
 end;
 end;
 
 
@@ -124,9 +124,6 @@ procedure Init;
 var
 var
   status: GLint;
   status: GLint;
 begin
 begin
-  // RU: создаём буфера и привязываем их к VAO.
-  // EN: we create buffers and bind them to VAO.
-  createVBOAndVAO;
   // RU: создание шедерной программы и шейдеров.
   // RU: создание шедерной программы и шейдеров.
   // EN: creating a shader program and shaders.
   // EN: creating a shader program and shaders.
   shadProg := glCreateProgram;
   shadProg := glCreateProgram;
@@ -184,6 +181,10 @@ begin
   glDeleteShader(fragShad);
   glDeleteShader(fragShad);
 
 
   glUseProgram(shadProg);
   glUseProgram(shadProg);
+  // RU: создаём буфера и привязываем их к VAO.
+  // EN: we create buffers and bind them to VAO.
+  createVBOAndVAO;
+
   zgl_Enable(DEPTH_BUFFER);
   zgl_Enable(DEPTH_BUFFER);
   glDepthMask(GL_TRUE);
   glDepthMask(GL_TRUE);
   glDepthFunc(GL_LEQUAL);
   glDepthFunc(GL_LEQUAL);

+ 2 - 6
Zengl_SRC/demos/Lazarus/19 - OpenGL33_01/demo19.lps

@@ -8,18 +8,14 @@
         <Filename Value="demo19.lpr"/>
         <Filename Value="demo19.lpr"/>
         <IsPartOfProject Value="True"/>
         <IsPartOfProject Value="True"/>
         <IsVisibleTab Value="True"/>
         <IsVisibleTab Value="True"/>
-        <TopLine Value="206"/>
-        <CursorPos X="49" Y="284"/>
-        <UsageCount Value="207"/>
+        <UsageCount Value="20"/>
         <Loaded Value="True"/>
         <Loaded Value="True"/>
         <DefaultSyntaxHighlighter Value="Delphi"/>
         <DefaultSyntaxHighlighter Value="Delphi"/>
       </Unit0>
       </Unit0>
       <Unit1>
       <Unit1>
         <Filename Value="../../../../srcGL/zgl_matrix.pas"/>
         <Filename Value="../../../../srcGL/zgl_matrix.pas"/>
         <IsPartOfProject Value="True"/>
         <IsPartOfProject Value="True"/>
-        <EditorIndex Value="-1"/>
-        <CursorPos X="20" Y="8"/>
-        <UsageCount Value="218"/>
+        <UsageCount Value="20"/>
         <DefaultSyntaxHighlighter Value="Delphi"/>
         <DefaultSyntaxHighlighter Value="Delphi"/>
       </Unit1>
       </Unit1>
     </Units>
     </Units>

+ 131 - 0
Zengl_SRC/demos/Lazarus/20 - OpenGL33_02/backup/demo20.lps

@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONFIG>
+  <ProjectSession>
+    <Version Value="12"/>
+    <BuildModes Active="Default"/>
+    <Units>
+      <Unit>
+        <Filename Value="demo20.lpr"/>
+        <IsPartOfProject Value="True"/>
+        <CursorPos X="8" Y="17"/>
+        <UsageCount Value="22"/>
+        <Loaded Value="True"/>
+      </Unit>
+      <Unit>
+        <Filename Value="../../../src/zgl_window.pas"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="877"/>
+        <CursorPos X="173" Y="892"/>
+        <UsageCount Value="10"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit>
+      <Unit>
+        <Filename Value="../../../src/zgl_application.pas"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="1047"/>
+        <CursorPos X="70" Y="1079"/>
+        <UsageCount Value="10"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit>
+      <Unit>
+        <Filename Value="../../../src/zgl_file.pas"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="395"/>
+        <CursorPos X="32" Y="406"/>
+        <UsageCount Value="10"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit>
+      <Unit>
+        <Filename Value="../../../src/zgl_joystick.pas"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="456"/>
+        <CursorPos X="50" Y="489"/>
+        <UsageCount Value="10"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit>
+      <Unit>
+        <Filename Value="../../../src/zgl_lib_ogg.pas"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="447"/>
+        <CursorPos X="43" Y="475"/>
+        <UsageCount Value="10"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit>
+      <Unit>
+        <Filename Value="../../../src/zgl_lib_theora.pas"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="136"/>
+        <CursorPos X="11" Y="164"/>
+        <UsageCount Value="10"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit>
+      <Unit>
+        <Filename Value="../../../src/zgl_lib_zip.pas"/>
+        <IsVisibleTab Value="True"/>
+        <EditorIndex Value="1"/>
+        <TopLine Value="225"/>
+        <CursorPos X="109" Y="257"/>
+        <UsageCount Value="10"/>
+        <Loaded Value="True"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit>
+      <Unit>
+        <Filename Value="../../../../../../FPC_3_2/projects/Zengl_SRC/src/zgl_lib_zip.pas"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="425"/>
+        <CursorPos X="3" Y="431"/>
+        <UsageCount Value="10"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit>
+      <Unit>
+        <Filename Value="../../../src/zgl_sound.pas"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="1600"/>
+        <CursorPos X="13" Y="412"/>
+        <UsageCount Value="10"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit>
+      <Unit>
+        <Filename Value="../../../../../../FPC_3_2/projects/Zengl_SRC/src/zgl_sound.pas"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="1600"/>
+        <UsageCount Value="10"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit>
+      <Unit>
+        <Filename Value="../../../src/zgl_textures_png.pas"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="316"/>
+        <CursorPos X="8" Y="343"/>
+        <UsageCount Value="10"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit>
+      <Unit>
+        <Filename Value="../../../../../../FPC_3_2/projects/Zengl_SRC/src/zgl_textures_png.pas"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="319"/>
+        <CursorPos X="7" Y="344"/>
+        <UsageCount Value="10"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit>
+      <Unit>
+        <Filename Value="../../../../../../FPC_3_2/projects/Zengl_SRC/src/zgl_window.pas"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="874"/>
+        <CursorPos X="11" Y="897"/>
+        <UsageCount Value="10"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit>
+    </Units>
+    <JumpHistory>
+      <Position>
+        <Filename Value="demo20.lpr"/>
+        <Caret Line="17" Column="8"/>
+      </Position>
+    </JumpHistory>
+    <RunParams>
+      <FormatVersion Value="2"/>
+      <Modes ActiveMode=""/>
+    </RunParams>
+  </ProjectSession>
+</CONFIG>

BIN
Zengl_SRC/demos/Lazarus/20 - OpenGL33_02/demo20.ico


+ 77 - 0
Zengl_SRC/demos/Lazarus/20 - OpenGL33_02/demo20.lpi

@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONFIG>
+  <ProjectOptions>
+    <Version Value="12"/>
+    <General>
+      <Flags>
+        <MainUnitHasCreateFormStatements Value="False"/>
+        <MainUnitHasTitleStatement Value="False"/>
+        <MainUnitHasScaledStatement Value="False"/>
+      </Flags>
+      <SessionStorage Value="InProjectDir"/>
+      <Title Value="demo20"/>
+      <UseAppBundle Value="False"/>
+      <ResourceType Value="res"/>
+    </General>
+    <BuildModes>
+      <Item Name="Default" Default="True"/>
+    </BuildModes>
+    <PublishOptions>
+      <Version Value="2"/>
+      <UseFileFilters Value="True"/>
+    </PublishOptions>
+    <RunParams>
+      <FormatVersion Value="2"/>
+    </RunParams>
+    <Units>
+      <Unit>
+        <Filename Value="demo20.lpr"/>
+        <IsPartOfProject Value="True"/>
+      </Unit>
+    </Units>
+  </ProjectOptions>
+  <CompilerOptions>
+    <Version Value="11"/>
+    <Target>
+      <Filename Value="../../../bin/$(TargetCPU)-$(TargetOS)/demo20"/>
+    </Target>
+    <SearchPaths>
+      <IncludeFiles Value="$(ProjOutDir);../../../src;../../../srcGEGL;../../../srcGL;../../../srcGL/EGL;../../../srcGL/GLES"/>
+      <OtherUnitFiles Value="../../../src;../../../srcGEGL;../../../srcGL;../../../srcGL/EGL;../../../srcGL/GLES;../../../lib/zlib/$(TargetCPU)-$(TargetOS);../../../lib/zip/$(TargetCPU)-$(TargetOS);../../../lib/theora/$(TargetCPU)-$(TargetOS);../../../lib/ogg/$(TargetCPU)-$(TargetOS);../../../lib/msvcrt/$(TargetCPU);../../../lib/jpeg/$(TargetCPU)-$(TargetOS);../../../lib/chipmunk/$(TargetCPU)-$(TargetOS)"/>
+      <UnitOutputDirectory Value="../tmp/$(TargetCPU)-$(TargetOS)"/>
+    </SearchPaths>
+    <Parsing>
+      <SyntaxOptions>
+        <SyntaxMode Value="Delphi"/>
+      </SyntaxOptions>
+    </Parsing>
+    <CodeGeneration>
+      <SmartLinkUnit Value="True"/>
+      <Optimizations>
+        <OptimizationLevel Value="3"/>
+      </Optimizations>
+    </CodeGeneration>
+    <Linking>
+      <Debugging>
+        <GenerateDebugInfo Value="False"/>
+        <DebugInfoType Value="dsDwarf3"/>
+        <StripSymbols Value="True"/>
+        <UseExternalDbgSyms Value="True"/>
+      </Debugging>
+      <LinkSmart Value="True"/>
+    </Linking>
+  </CompilerOptions>
+  <Debugging>
+    <Exceptions>
+      <Item>
+        <Name Value="EAbort"/>
+      </Item>
+      <Item>
+        <Name Value="ECodetoolError"/>
+      </Item>
+      <Item>
+        <Name Value="EFOpenError"/>
+      </Item>
+    </Exceptions>
+  </Debugging>
+</CONFIG>

+ 398 - 0
Zengl_SRC/demos/Lazarus/20 - OpenGL33_02/demo20.lpr

@@ -0,0 +1,398 @@
+program demo20;
+
+// RU: Этот файл содержит некоторые настройки(например использовать ли статическую компиляцию) и определения ОС под которую происходит компиляция.
+// EN: This file contains some options(e.g. whether to use static compilation) and defines of OS for which is compilation going.
+{$I zglCustomConfig.cfg}
+{$I zgl_config.cfg}
+
+{$IFDEF WINDOWS}
+  {$R *.res}
+{$ENDIF}
+
+uses
+  {$IFDEF UNIX}
+  cthreads,
+  {$ENDIF}
+  Math,
+  zgl_window,
+  zgl_screen,
+  zgl_timers,
+  zgl_utils,
+  zgl_types,
+  zgl_textures,
+  zgl_textures_png,
+  zgl_pasOpenGL,
+  zgl_opengl_all,
+  zgl_gltypeconst,
+  zgl_matrix,    // new
+  zgl_file,
+  zgl_log;
+
+const
+  _vertex   = 0;
+  _texture  = 1;
+  _index    = 2;
+  // RU: константы для размеров нашего окна. Окно изначально создаётся статичным.
+  // EN: constants for the size of our window. The window is initially created static.
+  windowWidth = 1280;
+  windowHeight = 1024;
+  // RU: количество вершин куба.
+  // EN: number of vertices of the cube.
+  cubeVerticesCount = 24;
+  // RU: количество индексов куба.
+  // EN: number of cube indexes.
+  cubeIndicesCount = 36;
+
+var
+  DirApp   : UTF8String;
+  DirHome  : UTF8String;
+  DirShader: UTF8String{$IfNDef MAC_COCOA} = '../shaders/'{$EndIf};
+  dirRes   : UTF8String{$IFNDEF MACOSX} = '../data/' {$ENDIF};
+
+  TimeStart  : LongWord = 0;
+
+  // RU: переменная для хранения индекса юниформа.
+  // EN: variable to store the uniform index.
+  projMatrLoc: GLuint;
+  // RU: шейдер, вершинный шейдер, фрагментный шейдер.
+  // EN: shader, vertex shader, fragment shader.
+  shadProg, vertShad, fragShad: GLuint;
+(*  // RU: вершины (3 координаты).
+  // EN: vertices (3 coordinates).
+  verticesData: array[0..11] of Single = (-1, 0, -1, 1,
+                                          1, 0, -0.4, 1,
+                                          3, 1, 0, 1);
+  // RU: цвет.
+  // EN: color.
+  colorData: array[0..11] of Single    = (1, 0, 0, 1,
+                                          0, 1, 0, 1,
+                                          0, 0, 1, 1);   *)
+
+  vao: GLuint;
+  vboHandles: array[0..2] of GLuint;
+  // RU: описание геометрии куба для всех его сторон. Координаты вершин куба.
+  // EN: description of the geometry of the cube for all its sides. Coordinates of the vertices of the cube.
+  cubePositions: array [0..cubeVerticesCount - 1, 0..2] of Single = ((-1, 1, 1), (1, 1, 1), (1, -1, 1), (-1, -1, 1),       // front?
+                                                                     (1, 1, -1), (-1, 1, -1), (-1, -1, -1), (1, -1, -1),   // back?
+                                                                     (-1, 1, -1), (1, 1, -1), (1, 1, 1), (-1, 1, 1),       // top?
+                                                                     (1, -1, -1), (-1, -1, -1), (-1, -1, 1), (1, -1, 1),   // bottom?
+                                                                     (-1, 1, -1), (-1, 1, 1), (-1, -1, 1), (-1, -1, -1),   // left?
+                                                                     (1, 1, 1), (1, 1, -1), (1, -1, -1), (1, -1, 1));      // right?
+  // RU: текстурные кооринаты куба.
+  // EN: texture coordinates of the cube.
+  cubeTexcoords: array [0..cubeVerticesCount - 1, 0..1] of Single = ((0, 1), (1, 1), (1, 0), (0, 0),       // front?
+                                                                     (0, 1), (1, 1), (1, 0), (0, 0),       // back?
+                                                                     (0, 1), (1, 1), (1, 0), (0, 0),       // top?
+                                                                     (0, 1), (1, 1), (1, 0), (0, 0),       // bottom?
+                                                                     (0, 1), (1, 1), (1, 0), (0, 0),       // left?
+                                                                     (0, 1), (1, 1), (1, 0), (0, 0));      // right?
+  // RU: индексы вершин куба в порядке поротив часовой стрелки.
+  // EN: cube vertex indices in counterclockwise order.
+  cubeIndices: array [0..cubeIndicesCount - 1] of LongWord = ( 0, 3, 1,  1, 3, 2,   // front
+                                                              4, 7, 5,  5, 7, 6,   // back
+                                                              8,11, 9,  9,11,10,   // top
+                                                             12,15,13, 13,15,14,   // bottom
+                                                             16,19,17, 17,19,18,   // left
+                                                             20,23,21, 21,23,22);  // right
+  // RU: значение угла вращения по X, Y и Z.
+  // EN: rotation angle value in X, Y and Z.
+  cubeRotation: array [0..2] of Single;
+  // RU: текстура.
+  // EN: texture.
+  texMiku: zglPTexture;
+  // RU: переменная для хранения индекса текстуры.
+  // EN: variable to store the texture index.
+  textureLocation: GLint = -1;
+  // RU: переменные для хранения индексов вершинных атрибутов.
+  // EN: variables for storing vertex attribute indices.
+  positionLocation: GLint = -1;
+  texcoordLocation: GLint = -1;
+  // RU:
+  // EN:
+
+// RU: создание VAO и VBO. Во избежание ошибок, создавайте VAO и VBO после создания шейдера!
+// EN: creation of VAO and VBO. To avoid errors, create VAO and VBO after creating the shader!
+procedure createVBOAndVAO;
+begin
+  // RU: буферные объекты.
+  // EN: buffer objects.
+  glGenBuffers(3, @vboHandles);
+
+  // RU: Создаём объект массива вершин (для того чтоб при прорисовке этого не делать).
+  // EN: We create an object of an array of vertices (so that we don’t have to do this when drawing).
+  glGenVertexArrays(1, @vao);
+  // установим созданный VAO как текущий
+  glBindVertexArray(vao);
+
+  // vertex
+  positionLocation := glGetAttribLocation(shadProg, 'position');
+  if positionLocation <> -1 then
+  begin
+    // RU: закрепить индекс 0 за буфером координат.
+    // EN: assign index 0 to the coordinate buffer.
+    glBindBuffer(GL_ARRAY_BUFFER, vboHandles[_vertex]);
+    // RU: заполнить буфер координат.      Это позволительно, ошибки не создаёт.
+    // EN: fill the coordinate buffer.     This is permissible and does not create errors.
+    glBufferData(GL_ARRAY_BUFFER, cubeVerticesCount * 3 * SizeOf(Single), @cubePositions, GL_STATIC_DRAW);
+    glVertexAttribPointer(positionLocation, 3, GL_FLOAT, GL_FALSE, 3 * SizeOf(Single), nil);
+    // RU: активируем массив вершинных атрибутов.
+    // EN: activate the array of vertex attributes.
+    glEnableVertexAttribArray(positionLocation);
+  end;
+  // texture        в данном случае texcoordLocation должно быть равно константе _texture.
+  texcoordLocation := glGetAttribLocation(shadProg, 'texcoord');
+  if texcoordLocation <> - 1 then
+  begin
+    // RU: закрепить индекс 1 за буфером текстуры.
+    // EN: assign index 1 to the texture buffer.
+    glBindBuffer(GL_ARRAY_BUFFER, vboHandles[_texture]);
+    // RU: заполнить буфер текстур.
+    // EN: fill the color buffer.      This is permissible and does not create errors.
+    glBufferData(GL_ARRAY_BUFFER, cubeVerticesCount * 2 * SizeOf(Single), @cubeTexcoords, GL_STATIC_DRAW);
+    glVertexAttribPointer(texcoordLocation, 2, GL_FLOAT, GL_FALSE, 2 * SizeOf(Single), nil);
+    glEnableVertexAttribArray(texcoordLocation);
+  end;
+
+  // RU: вывод будет происходить используя индексный буфер.
+  // EN: output will occur using the index buffer.
+  glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vboHandles[_index]);
+  glBufferData(GL_ELEMENT_ARRAY_BUFFER, cubeIndicesCount * SizeOf(LongWord), @cubeIndices, GL_STATIC_DRAW);
+end;
+
+// RU: определяем ViewPort для нашей программы.
+// EN: We define the ViewPort for our program.
+procedure UserSetViewPort;
+begin
+  glViewport(0, 0, windowWidth, windowHeight);
+end;
+
+// RU: используем свою матрицу проекции.
+// EN: We use our projection matrix.
+procedure UserMode;
+begin
+  // RU: если матрица будет изменяться, то желательно сразу вычислить значение
+  //     aspectRatio = windowWidth / windowHeight, чтоб не делать это постоянно.
+  // EN: if the matrix changes, then it is advisable to immediately calculate the value of
+  //     aspectRatio = windowWidth / windowHeight, so as not to do this constantly.
+  Matrix4x4_Perspective(45, windowWidth / windowHeight, 1, 100);
+  // glUseProgram(shadProg);        // это не обязательно в данном случае.
+
+  // RU: если данная переменная не используется в шейдере, то и вызов делать не будем.
+  // EN: if this variable is not used in the shader, then we will not make the call.
+  if projMatrLoc <> -1 then
+  // RU: мы можем привязать любую матрицу к uniform.
+  // EN: we can bind any matrix to a uniform.
+    glUniformMatrix4fv(projMatrLoc, 1, GL_FALSE, @zgl_Matrixs[modelViewProjectionMatrix]);
+  // glUseProgram(0);             // это не обязательно в данном случае.
+end;
+
+// RU: Тут можно выполнять загрузку основных ресурсов и производить инициализацию
+//     начальных данных программы.
+// EN: Here you can load the main resources and initialize the initial program data.
+procedure Init;
+var
+  status: GLint;
+begin
+  // RU: создание шедерной программы и шейдеров.
+  // EN: creating a shader program and shaders.
+  shadProg := glCreateProgram;
+  vertShad := glCreateShader(GL_VERTEX_SHADER);
+  fragShad := glCreateShader(GL_FRAGMENT_SHADER);
+  // RU: загружаем шейдера, компилируем и делаем проверку успешно скомпилирован
+  //     шейдер или нет.
+  // EN: we load the shader, compile it and check whether the shader compiled
+  //     successfully or not.
+  if not LoadAndCreateShader(DirShader + 'demo20.vs', vertShad) or not LoadAndCreateShader(DirShader + 'demo20.fs', fragShad) then
+  begin
+    log_Add('Shader not loaded!!!');
+    zgl_Exit;
+  end;
+  // RU: присоединяем шейдера к программе.
+  // EN: We attach the shader to the program.
+  glAttachShader(shadProg, vertShad);
+  glAttachShader(shadProg, fragShad);
+  // RU: линкуем программу.
+  // EN: link the program.
+  glLinkProgram(shadProg);
+  // RU: проверяем статус линковки.
+  // EN: check the status of the link.
+  glGetProgramiv(shadProg, GL_LINK_STATUS, @status);
+  if status <> 1 then
+  begin
+    log_Add('Shader program not link!!!');
+    zgl_Exit;
+  end;
+  // RU: получаем юниформ-индекс projMatr из шейдерной программы.
+  // EN: get the uniform index projMatr from the shader program.
+  projMatrLoc := glGetUniformLocation(shadProg, 'projMatr');
+  // RU: проверяем, указана ли данная матрица в шейдере.
+  // EN: we check whether this matrix is specified in the shader.
+  if projMatrLoc <> -1 then
+  begin
+    // RU: это может быть не критичной ошибкой. Просто данный аргумент не
+    //     используется в шейдере или удалён из шейдера, как не используемый.
+    // EN: this may not be a critical error. It’s just that this argument is not
+    //     used in the shader or has been removed from the shader as not being used.
+    log_Add('projMatr not found in shader.');
+  end;
+
+  // RU: проверка корректности скомпилированной программы.
+  // EN: checking the correctness of the compiled program.
+  glValidateProgram(shadProg);
+  glGetProgramiv(shadProg, GL_VALIDATE_STATUS, @status);
+  if status <> 1 then
+  begin
+    log_Add('Shader program not validate!!!');
+    zgl_Exit;
+  end;
+
+  glDeleteShader(vertShad);
+  glDeleteShader(fragShad);
+
+  glUseProgram(shadProg);
+
+  // RU: создаём буфера и привязываем их к VAO.
+  // EN: we create buffers and bind them to VAO.
+  createVBOAndVAO;
+  zgl_Enable(DEPTH_BUFFER);
+  glDepthMask(GL_TRUE);
+  glDepthFunc(GL_LEQUAL);
+  glDepthRange(0.0, 1.0);
+
+  // RU: начальные вычисления для матриц. Это можно сделать здесь, но если матрицы будут меняться в процессе программы, то здесь делать нельзя.
+  // EN: initial calculations for matrices. This can be done here, but if the matrices will change during the program, then it cannot be done here.
+  Matrix4x4_Translation(@zgl_MatrixS[viewMatrix], -1, 1, -2);
+  Matrix4x4Multiply4x4(@zgl_MatrixS[projectionMatrix], @zgl_MatrixS[viewMatrix], @zgl_MatrixS[viewProjectionMatrix]);
+
+  // загруженная текстура ни как не связана с объектом...
+  texMiku := tex_LoadFromFile(dirRes + 'back02.png');
+
+  //  glActiveTexture(GL_TEXTURE0);                      // возникает вопрос, а зачем это, если и без этого работает?
+  //  glBindTexture(GL_TEXTURE_2D, texMiku.ID);          // возможно когда много текстур и разных объектов?
+
+  // RU: получаем юниформ-индекс colorTexture из шейдерной программы.
+  // EN: get the uniform index colorTexture from the shader program.
+  textureLocation := glGetUniformLocation(shadProg, 'colorTexture');
+  if textureLocation <> -1 then
+    glUniform1f(textureLocation, 0);
+end;
+
+procedure Draw;
+begin
+  // RU: Тут "рисуем" что угодно :)
+  // EN: Here "draw" anything :)
+  glClearDepth(1);
+  // glUseProgram(shadProg);             // это не обязательно в данном случае.
+  // glBindVertexArray(vao);             // это не обязательно в данном случае.
+  glDrawElements(GL_TRIANGLES, cubeIndicesCount, GL_UNSIGNED_INT, nil);
+
+  // glUseProgram(0);                    // это не обязательно  в данном случае.
+end;
+
+procedure Update( dt : Double );
+begin
+  // RU: Эта функция наземенима для реализация плавного движения чего-либо, т.к. точность таймеров ограничена FPS.
+  // EN: This function is the best way to implement smooth moving of something, because accuracy of timers are restricted by FPS.
+end;
+
+// RU: Пример использования таймера.
+// EN: An example of using a timer.
+procedure Timer;
+begin
+  cubeRotation[0] := cubeRotation[0] + 0.015;
+  if cubeRotation[0] > 360 then
+    cubeRotation[0] := cubeRotation[0] - 360;
+  cubeRotation[1] := cubeRotation[1] + 0.045;
+  if cubeRotation[1] > 360 then
+    cubeRotation[1] := cubeRotation[1] - 360;
+  cubeRotation[2] := cubeRotation[2] + 0.025;
+  if cubeRotation[2] > 360 then
+    cubeRotation[2] := cubeRotation[2] - 360;
+  Matrix4x4_Rotation(@zgl_MatrixS[modelMatrix], cubeRotation[0], cubeRotation[1], cubeRotation[2]);
+  Matrix4x4Multiply4x4(@zgl_MatrixS[viewProjectionMatrix], @zgl_MatrixS[modelMatrix], @zgl_MatrixS[modelViewProjectionMatrix]);
+  // RU: Будем в заголовке показывать количество кадров в секунду.
+  // EN: Caption will show the frames per second.
+  wnd_SetCaption( 'test OpenGL 3.3. [ FPS: ' + u_IntToStr( zgl_Get( RENDER_FPS ) ) + ' ]' );
+end;
+
+procedure KeyMouseEvent;
+begin
+  // RU: Функция обработки клавиатуры, мыши, джойстика и тачпада. Все события связанные с ними очищаются после её обработки.
+  //     Все попытки обработать клавиатуру, мышь или тачпад в других функциях могут привести к непредвиденным ситуациям.
+  // EN: Keyboard, mouse, joystick and touchpad handling function. All events associated with them are cleared after processing it.
+  //     Any attempt to handle the keyboard, mouse, or touchpad in other functions may lead to unexpected situations.
+end;
+
+procedure Quit;
+begin
+  // RU: События которые надо произвести по завершению программы. Очистка данных.
+  // EN: Events to be performed at the end of the program.
+  // это нужно или нет?
+  glBindBuffer(GL_ARRAY_BUFFER, 0);
+  glDeleteBuffers(2, @vboHandles);
+  glBindVertexArray(0);
+  glDeleteVertexArrays(1, @vao);
+
+  glUseProgram(0);
+
+  glDeleteProgram(shadProg);
+end;
+
+Begin
+  // RU: Для загрузки/создания каких-то своих настроек/профилей/etc. можно получить путь к домашенему каталогу пользователя, или к исполняемому файлу(не работает для GNU/Linux).
+  // EN: For loading/creating your own options/profiles/etc. you can get path to user home directory, or to executable file(not works for GNU/Linux).
+  DirApp  := utf8_Copy( PAnsiChar( zgl_Get( DIRECTORY_APPLICATION ) ) );
+  DirHome := utf8_Copy( PAnsiChar( zgl_Get( DIRECTORY_HOME ) ) );
+
+  // RU: Устанавливаем интервал на обработку событий клавиатуры, мыши, тачпада. И регистрируем процедуру.
+  //     Вызывать zgl_SetEventInterval не обязательно. Значение 16 стоит по умолчанию.
+  // EN: We set the interval for processing keyboard, mouse, touchpad events. And we register the procedure.
+  //     Calling zgl_SetEventInterval is optional. The default is 16.
+  zgl_SetEventsInterval(16);
+  zgl_Reg(SYS_EVENTS, @KeyMouseEvent);
+
+  // RU: Создаем таймер с интервалом 1000мс.
+  // EN: Create a timer with interval 1000ms.
+  TimeStart := timer_Add( @Timer, round(1000 / 60), t_Start );
+
+  // RU: Регистрируем процедуру, что выполнится сразу после инициализации ZenGL.
+  // EN: Register the procedure, that will be executed after ZenGL initialization.
+  zgl_Reg( SYS_LOAD, @Init );
+  // RU: Регистрируем процедуру, где будет происходить рендер.
+  // EN: Register the render procedure.
+  zgl_Reg( SYS_DRAW, @Draw );
+  // RU: Регистрируем процедуру, которая будет принимать разницу времени между кадрами.
+  // EN: Register the procedure, that will get delta time between the frames.
+  zgl_Reg( SYS_UPDATE, @Update );
+  // RU: Регистрируем процедуру, которая выполнится после завершения работы ZenGL.
+  // EN: Register the procedure, that will be executed after ZenGL shutdown.
+  zgl_Reg( SYS_EXIT, @Quit );
+  // RU: пользовательский ViewPort. В данном случае это не обязательно.
+  // EN: custom ViewPort. In this case it is not necessary.
+  zgl_Reg(OGL_VIEW_PORT, @UserSetViewPort);
+  // RU: пользовательский режим 2d или 3d.
+  // EN: custom 2d or 3d mode.
+  zgl_Reg(OGL_USER_MODE, @UserMode);
+
+  // RU: Устанавливаем заголовок окна.
+  // EN: Set the caption of the window.
+  wnd_SetCaption(utf8_Copy('01 - Initialization'));
+  // RU: Разрешаем курсор мыши. True - по умолчанию, значит определять не надо.
+  // EN: Allow to show the mouse cursor. True - by default, which means there is no need to define it.
+  wnd_ShowCursor( TRUE );
+
+  // RU: Указываем первоначальные настройки.
+  // EN: Set screen options.
+  zgl_SetParam(windowWidth, windowHeight, false, false);
+
+  {$IfDef GL_VERSION_3_0}
+  // RU: Устанавливаем контекст OpenGL 3.3. Для этого надо включить  дефайн "USE_GL_33" и отключить "USE_MIN_OPENGL" в GLdefine.cfg.
+  // EN: Setting context OpenGL 3.3. To do this, enable the "USE_GL_33" define and disable "USE_MIN_OPENGL" in GLdefine.cfg.
+  SetGLVersionAndFlags(3, 3);
+  {$EndIf}
+
+  // RU: Инициализируем ZenGL.
+  // EN: Initialize ZenGL.
+  zgl_Init();
+End.
+

+ 130 - 0
Zengl_SRC/demos/Lazarus/20 - OpenGL33_02/demo20.lps

@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONFIG>
+  <ProjectSession>
+    <Version Value="12"/>
+    <BuildModes Active="Default"/>
+    <Units>
+      <Unit>
+        <Filename Value="demo20.lpr"/>
+        <IsPartOfProject Value="True"/>
+        <IsVisibleTab Value="True"/>
+        <CursorPos X="8" Y="17"/>
+        <UsageCount Value="22"/>
+        <Loaded Value="True"/>
+      </Unit>
+      <Unit>
+        <Filename Value="../../../src/zgl_window.pas"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="877"/>
+        <CursorPos X="173" Y="892"/>
+        <UsageCount Value="10"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit>
+      <Unit>
+        <Filename Value="../../../src/zgl_application.pas"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="1047"/>
+        <CursorPos X="70" Y="1079"/>
+        <UsageCount Value="10"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit>
+      <Unit>
+        <Filename Value="../../../src/zgl_file.pas"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="395"/>
+        <CursorPos X="32" Y="406"/>
+        <UsageCount Value="10"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit>
+      <Unit>
+        <Filename Value="../../../src/zgl_joystick.pas"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="456"/>
+        <CursorPos X="50" Y="489"/>
+        <UsageCount Value="10"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit>
+      <Unit>
+        <Filename Value="../../../src/zgl_lib_ogg.pas"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="447"/>
+        <CursorPos X="43" Y="475"/>
+        <UsageCount Value="10"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit>
+      <Unit>
+        <Filename Value="../../../src/zgl_lib_theora.pas"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="136"/>
+        <CursorPos X="11" Y="164"/>
+        <UsageCount Value="10"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit>
+      <Unit>
+        <Filename Value="../../../src/zgl_lib_zip.pas"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="225"/>
+        <CursorPos X="109" Y="257"/>
+        <UsageCount Value="10"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit>
+      <Unit>
+        <Filename Value="../../../../../../FPC_3_2/projects/Zengl_SRC/src/zgl_lib_zip.pas"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="425"/>
+        <CursorPos X="3" Y="431"/>
+        <UsageCount Value="10"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit>
+      <Unit>
+        <Filename Value="../../../src/zgl_sound.pas"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="1600"/>
+        <CursorPos X="13" Y="412"/>
+        <UsageCount Value="10"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit>
+      <Unit>
+        <Filename Value="../../../../../../FPC_3_2/projects/Zengl_SRC/src/zgl_sound.pas"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="1600"/>
+        <UsageCount Value="10"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit>
+      <Unit>
+        <Filename Value="../../../src/zgl_textures_png.pas"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="316"/>
+        <CursorPos X="8" Y="343"/>
+        <UsageCount Value="10"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit>
+      <Unit>
+        <Filename Value="../../../../../../FPC_3_2/projects/Zengl_SRC/src/zgl_textures_png.pas"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="319"/>
+        <CursorPos X="7" Y="344"/>
+        <UsageCount Value="10"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit>
+      <Unit>
+        <Filename Value="../../../../../../FPC_3_2/projects/Zengl_SRC/src/zgl_window.pas"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="874"/>
+        <CursorPos X="11" Y="897"/>
+        <UsageCount Value="10"/>
+        <DefaultSyntaxHighlighter Value="Delphi"/>
+      </Unit>
+    </Units>
+    <JumpHistory>
+      <Position>
+        <Filename Value="demo20.lpr"/>
+        <Caret Line="17" Column="8"/>
+      </Position>
+    </JumpHistory>
+    <RunParams>
+      <FormatVersion Value="2"/>
+      <Modes ActiveMode=""/>
+    </RunParams>
+  </ProjectSession>
+</CONFIG>

+ 39 - 0
Zengl_SRC/demos/Lazarus/20 - OpenGL33_02/zglCustomConfig.cfg

@@ -0,0 +1,39 @@
+// Выставляем в постоянную компиляцию без собранных библиотек, с скомпилированными библиотеками на данный момент можно использовать версию 3.12
+{$DEFINE USE_ZENGL_STATIC}
+
+// RU: Использовать статическую компиляцию с библиотекой Chipmunk. Возможно только для FreePascal
+// EN: Use a static compilation with Chipmunk. Possible only for FreePascal
+{$IFDEF FPC}
+  {$DEFINE USE_CHIPMUNK_STATIC}
+{$ENDIF}
+
+// RU: Ниже определяются ОС и объявляются специальные дефайны. Список возможных дефайнов:
+// EN: Conditions below determine OS and define special defines. Possible defines are:
+// - WINDOWS
+// - MACOSX
+// - iOS
+// - ANDROID
+{$IFDEF MSWINDOWS}
+  {$DEFINE WINDOWS}
+{$ENDIF}
+{$IFDEF DARWIN}
+  {$IF DEFINED(iPHONESIM) or (DEFINED(DARWIN) and DEFINED(CPUARM))}
+    {$DEFINE iOS}
+  {$ELSE}
+    {$DEFINE MACOSX}
+  {$IFEND}
+{$ENDIF}
+
+// RU: Ограничения.
+// EN: Restrictions.
+
+// RU: Chipmunk для iOS может быть использован только со статической компиляцией.
+// EB: Chipmunk for iOS can be used only with static compilation.
+{$IFDEF iOS}
+  {$DEFINE USE_CHIPMUNK_STATIC}
+{$ENDIF}
+// RU: Chipmunk для Android может быть использован только с линковкой к libchipmunk.so.
+// EB: Chipmunk for Andriud can be used only with linking to libchipmunk.so.
+{$IFDEF ANDROID}
+  {$DEFINE USE_CHIPMUNK_LINK}
+{$ENDIF}

+ 272 - 0
Zengl_SRC/demos/Lazarus/20 - OpenGL33_02/zgl_config.cfg

@@ -0,0 +1,272 @@
+// мобильные платформы
+// mobile
+{$IF DEFINED(ANDROID) OR DEFINED(iOS) OR DEFINED(iPHONESIM)}
+  {$DEFINE MOBILE}
+{$IFEND}
+
+// так как мне надоело делать проверки, но я знаю что их надо делать, я добавляю дополнительную "отладочную"
+// информацию. Для себя я смогу это отключить, но это можно будет использовать для выявления каких-нибудь определённых багов.
+{$DEFINE FULL_LOGGING}
+
+// Rus: обработка старых процедур для клавиатуры. Если не хотим использовать GreenEngine.
+// Eng: processing of old procedures for the keyboard. If we do not want to use GreenEngine.
+{.$DEFINE KEYBOARD_OLD_FUNCTION}
+{$IFNDEF KEYBOARD_OLD_FUNCTION}
+  {$I gegl_config.cfg}
+{$ENDIF}
+
+// inializing in Handle (LCL, VCL)
+{.$DEFINE USE_INIT_HANDLE}
+
+// Delphi 7 and down
+{$IFNDEF FPC}
+  {$IFDEF VER150}                    // Delphi 7
+    {$DEFINE DELPHI7_AND_DOWN}
+  {$ENDIF}
+  {$IFDEF VER140}                    // Delphi 6
+    {$DEFINE DELPHI7_AND_DOWN}
+  {$ENDIF}
+  {$IFDEF VER130}                    // Delphi 5
+    {$DEFINE DELPHI7_AND_DOWN}
+  {$ENDIF}
+  {$IFDEF VER120}                    // Delphi 4
+    {$DEFINE DELPHI7_AND_DOWN}
+  {$ENDIF}
+  {$IFDEF VER110}                    // C++ Builder 3
+    {$DEFINE DELPHI7_AND_DOWN}
+  {$ENDIF}
+  {$IFDEF VER100}                    // Delphi 3
+    {$DEFINE DELPHI7_AND_DOWN}
+  {$ENDIF}
+{$ENDIF}
+
+// Переделать!
+{$IF DEFINED(DARWIN) AND (NOT DEFINED(iOS) OR NOT DEFINED(iPHONESIM))}
+  {$IFNDEF CPUi386 }
+    {$DEFINE MAC_COCOA}
+  {$ENDIF}
+{$IFEND}
+
+{$IFDEF MAC_COCOA}
+  {$DEFINE NO_USE_STATIC_LIBRARY}
+{$ENDIF}
+
+// Use compile library (dll, so ...)
+{$DEFINE LIBRARY_COMPILE}
+
+{$IFDEF MOBILE}
+  {$UNDEF USE_INIT_HANDLE}
+{$ENDIF}
+
+// Rus: вы можете принудительно включить виртуальную клавиатуру везде, а так же виртуальные джойстики.
+// Eng: you can force enable virtual keyboard everywhere, as well as virtual joysticks.
+{.$DEFINE USE_VKEYBOARD}
+
+// Escape = exit
+{$DEFINE USE_EXIT_ESCAPE}
+
+// Rus: включаем события очистки клавиатуры, мыши, джойстика и тачпада.
+// Eng:
+{$DEFINE CLEAR_STATE}
+
+//******************************************************************************
+//       Defines for GNU/Linux
+//******************************************************************************
+{$IFDEF LINUX}
+  // custom -----------------
+  {$DEFINE USE_OGG_STATIC}
+  {.$DEFINE USE_THEORA_STATIC}
+  // ------------------------
+
+  {$DEFINE USE_X11}
+  {$DEFINE USE_LIBJPEG}
+  {$DEFINE USE_OPENAL}
+  {$DEFINE USE_VORBIS}
+
+  {.$DEFINE USE_FULL_GLX}
+
+  // OpenGL ES render for PC
+  {.$DEFINE USE_GLES}
+  {.$DEFINE NO_EGL}
+  {$IFDEF USE_GLES}
+    // на данный момент ни где не используется. Но, надо знать, данное определение есть для стационарных компьютеров.
+    {$DEFINE USE_GLES_ON_DESKTOP}
+  {$ENDIF}
+{$ENDIF}
+
+//******************************************************************************
+//       Defines for Android
+//******************************************************************************
+{$IFDEF ANDROID}
+// Rus: если вы будете использовать (ARM v5) или (ARM v6) отключите DEFINE CPUARMV7A.
+// Eng: if you will be using (ARM v5) or (ARM v6) disable DEFINE CPUARMV7A.
+  {$IFNDEF CPU64}
+    {$DEFINE CPUARMV7A}
+  {$ENDIF}
+  {$IF DEFINED(CPU64) OR DEFINED(CPUARMV7A) or DEFINED(CPUi386) or DEFINED(CPUx86_64)}
+    {$DEFINE NOT_OLD_ARM}   // старшие версии Anroid.
+  {$IFEND}
+  {$DEFINE ANDROID}
+  {$DEFINE USE_GLES}
+  {$DEFINE NO_EGL}
+  {$DEFINE USE_VORBIS}
+  {$DEFINE USE_LIBJPEG}
+  {$DEFINE USE_OPENAL}
+  {$UNDEF  USE_X11}
+  {$UNDEF  USE_OGG_STATIC}
+  {$UNDEF  USE_THEORA_STATIC}
+  {$DEFINE USE_VKEYBOARD}
+  {$UNDEF USE_INIT_HANDLE}
+{$ENDIF}
+
+//******************************************************************************
+//       Defines for Windows and Windows Mobile
+//******************************************************************************
+{$IFDEF MSWINDOWS}
+  {$DEFINE WINDOWS}
+{$ENDIF}
+{$IFDEF WINDOWS}
+  // custom -----------------
+  {$DEFINE USE_LIBJPEG}
+  {$DEFINE USE_OPENAL}               // disable if use DX Sound
+  {$DEFINE USE_OGG_STATIC}
+  {$DEFINE USE_THEORA_STATIC}
+  // ------------------------
+
+  {$DEFINE USE_VORBIS}
+  {.$DEFINE USE_FULL_WGL}
+
+  // OpenGL ES render for PC
+  {.$DEFINE USE_GLES}
+  {$DEFINE NO_EGL}
+  {$IFDEF USE_GLES}
+    {$DEFINE USE_GLES_ON_DESKTOP}
+  {$ENDIF}
+{$ENDIF}
+
+//******************************************************************************
+// Defines for MacOS X and iOS
+//******************************************************************************
+// Переделать!
+{$IFDEF DARWIN}
+  // custom -----------------
+  {/$DEFINE USE_OGG_STATIC}
+  {/$DEFINE USE_THEORA_STATIC}
+  // ------------------------
+
+  {$DEFINE USE_LIBJPEG}
+  {$DEFINE USE_OPENAL}
+  {$DEFINE USE_VORBIS}
+
+  {$IF DEFINED(iPHONESIM) or (DEFINED(DARWIN) and DEFINED(CPUARM))}
+    {$DEFINE iOS}
+    {$DEFINE USE_GLES}
+    {$DEFINE NO_EGL}
+    {.$UNDEF  USE_LIBJPEG}
+    {$DEFINE USE_OGG_STATIC}
+    {.$DEFINE USE_THEORA_STATIC}
+
+    {$UNDEF USE_INIT_HANDLE}
+
+    {$IFNDEF iPHONESIM}
+      // custom -----------
+      // If you don't need to decode theora, you can uncomment this DEFINE
+      // ------------------
+    {$ENDIF}
+  {$ELSE}
+    {$DEFINE MACOSX}
+    // OpenGL ES render for PC
+    {.$DEFINE USE_GLES}
+    {$DEFINE NO_EGL}
+    {$IFDEF USE_GLES}
+      {.$DEFINE USE_GLES_ON_DESKTOP}
+    {$ENDIF}
+  {$IFEND}
+{$ENDIF}
+//******************************************************************************
+
+{$IFNDEF USE_GLES}
+  // Rus: Включите необходимые вам флаги!
+  // Eng: Turn on the flags you need!
+  {.$DEFINE USE_GL_21}
+  {$DEFINE USE_GL_33}
+  {.$DEFINE USE_GL_46}
+  {$I GLdefine.cfg}
+{$ELSE}
+  {$I gles_conf.cfg}
+{$ENDIF}
+
+// Functionality
+{$DEFINE USE_LOG_FLUSH}
+{$DEFINE USE_ZIP}
+{$DEFINE USE_JOYSTICK}
+{$DEFINE USE_JPG}
+{$DEFINE USE_PNG}
+{$DEFINE USE_PVR}
+{$DEFINE USE_TGA}
+{$DEFINE USE_SENGINE}
+{$DEFINE USE_PARTICLES}
+{$DEFINE USE_SOUND}
+{$IFDEF USE_SOUND}
+  {$DEFINE USE_OGG}
+  {$DEFINE USE_WAV}
+{$ENDIF}
+{$DEFINE USE_VIDEO}
+{$IFDEF USE_VIDEO}
+  {$DEFINE USE_THEORA}
+{$ENDIF}
+
+// Rus: включите/выключите нужные определения для ваших видеокарт. Это будет влиять на OpenGL, GLES, EGL.
+//      Как я понимаю, корпорации предоставляют разные реализации одних и тех же функций, по разному оптимизированными
+//      для определённых видеокарт. И, таким образом, мы можем создать сильно оптимизированныую программу, которая будет
+//      "сама выбирать" какую функцию использовать для данной видеокарты.
+//      Но, это сложно...
+// Eng: enable/disable the necessary definitions for your graphics cards. This will affect OpenGL, GLES, EGL.
+//      As I understand it, corporations provide different implementations of the same functions, optimized differently
+//      for certain video cards. And thus, we can create a highly optimized program that will "select" which function
+//      to use for a given video card.
+//      But it is difficult...
+{$DEFINE VID_NV}
+{$DEFINE VID_AMD}
+{$DEFINE VID_INTEL}
+{$DEFINE VID_APPLE}
+
+// Enable if you want to use zlib compression functions
+// WARNING: ZenGL doesn't provide all needed object files, you should use yours(just have no desire to recompile zlib for every platform)
+
+// Disable unsupported features
+{$IFNDEF FPC}
+  {$UNDEF USE_OGG_STATIC}
+  {$UNDEF USE_THEORA_STATIC}
+{$ENDIF}
+
+// Specially for buggy Delphi, which trying to parse everything...
+{$MINENUMSIZE 4}
+{$DEFINE USE_INLINE}
+{$IFDEF FPC}
+  {$I zgl_fpc.cfg}
+
+  {$IFNDEF MACOSX}
+    {$IFDEF cpui386}
+      {$DEFINE USE_ASM}
+    {$ENDIF}
+  {$ENDIF}
+{$ELSE}
+  {$DEFINE USE_ASM}
+  {$WARN COMBINING_SIGNED_UNSIGNED OFF}
+  {$WARN COMPARING_SIGNED_UNSIGNED OFF}
+  {$IFNDEF DELPHI7_AND_DOWN}
+    {$DEFINE CPUx86_64}
+  {$ELSE}
+    {$DEFINE CPUi386}
+    {$UNDEF USE_INLINE}
+  {$ENDIF}
+{$ENDIF}
+
+{$IFNDEF USE_INIT_HANDLE}
+  {$DEFINE WND_USE}
+{$ELSE}
+  {$IFDEF WINDOWS}
+    {$DEFINE WND_USE}
+  {$ENDIF}
+{$ENDIF}

+ 31 - 0
Zengl_SRC/demos/MacOS readME.txt

@@ -0,0 +1,31 @@
+MacOS.
+
+Rus:
+Не тестировалось на ARM-архитектуре!!! Но большая вероятность, что должно работать!
+Установите «Homebrew».
+Используя «Homebrew» установите:
+- libzip
+- libogg
+- libvorbis
+- theora
+Можно пользоваться ZenGL.
+На данное время не работают демки 12, 15, 16 и ограниченно работает демка 4.
+Новые демки (19, 20) я не проверял. Вы можете сами попробовать их настроить для MacOS.
+
+ZenGL уже содержит эти скомпилированные библиотеки, но они для x86_64-архитектуры и могут не работать.
+
+
+Eng:
+Not tested in ARM-architecture!!! But there's a good chance it should work!
+
+Install Homebrew.
+Using "Homebrew" install:
+- libzip
+-libogg
+- libvorbis
+-theora
+You can use ZenGL.
+At this time demos 12, 15, 16 are not working and demo 4 is working to a limited extent.
+I haven't checked the new demos (19, 20). You can try setting them up for MacOS yourself.
+
+ZenGL already contains these compiled libraries, but they are for x86_64 architecture and may not work.

+ 4 - 0
Zengl_SRC/headers/zgl_config.cfg

@@ -8,6 +8,10 @@
 // информацию. Для себя я смогу это отключить, но это можно будет использовать для выявления каких-нибудь определённых багов.
 // информацию. Для себя я смогу это отключить, но это можно будет использовать для выявления каких-нибудь определённых багов.
 {$DEFINE FULL_LOGGING}
 {$DEFINE FULL_LOGGING}
 
 
+// Rus: включение автоматической очистки событий: key_ClearState, mouse_ClearState, joy_ClearState, touch_ClearState.
+// Eng: enabling automatic event clearing: key_ClearState, mouse_ClearState, joy_ClearState, touch_ClearState.
+{$DEFINE CLEAR_STATE}
+
 // Rus: обработка старых процедур для клавиатуры. Если не хотим использовать GreenEngine.
 // Rus: обработка старых процедур для клавиатуры. Если не хотим использовать GreenEngine.
 // Eng: processing of old procedures for the keyboard. If we do not want to use GreenEngine.
 // Eng: processing of old procedures for the keyboard. If we do not want to use GreenEngine.
 {.$DEFINE KEYBOARD_OLD_FUNCTION}
 {.$DEFINE KEYBOARD_OLD_FUNCTION}

+ 2 - 0
Zengl_SRC/next.txt

@@ -20,3 +20,5 @@
   - LCL проекты требуют корректировки при развёртывании окна во весь экран (только в Linux&?).
   - LCL проекты требуют корректировки при развёртывании окна во весь экран (только в Linux&?).
 
 
   - определить интервал обработки событий клавиатуры, мыши, тачпада/тачскрина на самый минимальный таймер. Иначе могут быть проблемы с обработкой событий. Это вызовет задержки в программе (могут не срабатывать нажатия/отжатия).
   - определить интервал обработки событий клавиатуры, мыши, тачпада/тачскрина на самый минимальный таймер. Иначе могут быть проблемы с обработкой событий. Это вызовет задержки в программе (могут не срабатывать нажатия/отжатия).
+  
+  - ввести работу с XInput. 

+ 4 - 3
Zengl_SRC/src/zgl_application.pas

@@ -249,8 +249,8 @@ var
 
 
   {$IfNDef USE_INIT_HANDLE}
   {$IfNDef USE_INIT_HANDLE}
   oldTimeDraw: Double;
   oldTimeDraw: Double;
-  useFPS     : LongWord = 30;
-  deltaFPS   : Single = 1000 / 30;
+  useFPS     : LongWord = 60;
+  deltaFPS   : Single = 1000 / 60;
   // номер таймера опроса событий
   // номер таймера опроса событий
   timeAppEvents: LongWord;
   timeAppEvents: LongWord;
   // интервал опроса событий
   // интервал опроса событий
@@ -705,7 +705,6 @@ begin
       scr_Init();
       scr_Init();
       continue;
       continue;
     end;
     end;
-
     if winOn Then
     if winOn Then
     case event._type of
     case event._type of
         ClientMessage:
         ClientMessage:
@@ -832,6 +831,8 @@ begin
 
 
               keyboardUp(key);
               keyboardUp(key);
             end;
             end;
+        MotionNotify:
+           ;
     end;
     end;
   end;
   end;
 {$ENDIF}
 {$ENDIF}

+ 1 - 1
Zengl_SRC/src/zgl_file.pas

@@ -403,7 +403,7 @@ begin
 {$ENDIF}
 {$ENDIF}
   {$IfDef FULL_LOGGING}
   {$IfDef FULL_LOGGING}
   if not Result then
   if not Result then
-    log_Add('File ' + name + 'not found!');
+    log_Add('File ' + name + ' not found!');
   {$EndIf}
   {$EndIf}
 end;
 end;
 
 

+ 17 - 6
Zengl_SRC/src/zgl_joystick.pas

@@ -207,7 +207,9 @@ uses
   zgl_utils;
   zgl_utils;
 
 
 var
 var
+  // массив общего количества джойстиков.
   joyArray: array[0..15] of zglTJoy;
   joyArray: array[0..15] of zglTJoy;
+  // настоящее количество джойстиков.
   joyCount: Integer;
   joyCount: Integer;
 
 
 function joy_Init: Byte;
 function joy_Init: Byte;
@@ -232,8 +234,11 @@ begin
           SetLength(joyArray[joyCount].Info.Name, 256);
           SetLength(joyArray[joyCount].Info.Name, 256);
           FpIOCtl(joyArray[joyCount].device, JSIOCGNAME,    @joyArray[joyCount].Info.Name[1]);
           FpIOCtl(joyArray[joyCount].device, JSIOCGNAME,    @joyArray[joyCount].Info.Name[1]);
           FpIOCtl(joyArray[joyCount].device, JSIOCGAXMAP,   @joyArray[joyCount].axesMap[0]);
           FpIOCtl(joyArray[joyCount].device, JSIOCGAXMAP,   @joyArray[joyCount].axesMap[0]);
+        //  log_Add('Map = ' + u_IntToStr(joyArray[joyCount].axesMap[0]));
           FpIOCtl(joyArray[joyCount].device, JSIOCGAXES,    @joyArray[joyCount].Info.Count.Axes);
           FpIOCtl(joyArray[joyCount].device, JSIOCGAXES,    @joyArray[joyCount].Info.Count.Axes);
+        //  log_Add('Axes = ' + u_IntToStr(joyArray[joyCount].Info.Count.Axes));
           FpIOCtl(joyArray[joyCount].device, JSIOCGBUTTONS, @joyArray[joyCount].Info.Count.Buttons);
           FpIOCtl(joyArray[joyCount].device, JSIOCGBUTTONS, @joyArray[joyCount].Info.Count.Buttons);
+        //  log_Add('Buttons = ' + u_IntToStr(joyArray[joyCount].Info.Count.Buttons));
 
 
           for j := 0 to joyArray[joyCount].Info.Count.Axes - 1 do
           for j := 0 to joyArray[joyCount].Info.Count.Axes - 1 do
             with joyArray[joyCount].Info do
             with joyArray[joyCount].Info do
@@ -255,9 +260,9 @@ begin
           // Checking if joystick is a real one, because laptops with accelerometer can be detected as a joystick :)
           // Checking if joystick is a real one, because laptops with accelerometer can be detected as a joystick :)
           if (joyArray[joyCount].Info.Count.Axes >= 2) and (joyArray[joyCount].Info.Count.Buttons > 0) Then
           if (joyArray[joyCount].Info.Count.Axes >= 2) and (joyArray[joyCount].Info.Count.Buttons > 0) Then
             begin
             begin
-              log_Add('Joy: Find "' + joyArray[joyCount].Info.Name + '" (ID: ' + u_IntToStr(joyCount) +
-                       '; Axes: ' + u_IntToStr(joyArray[joyCount].Info.Count.Axes) +
-                       '; Buttons: ' + u_IntToStr(joyArray[joyCount].Info.Count.Buttons) + ')');
+              log_Add('Joy: Found "' + joyArray[joyCount].Info.Name + '" (ID: ' + u_IntToStr(joyCount) + '; Axes: ' +
+                      u_IntToStr(joyArray[joyCount].Info.Count.Axes) + '; Buttons: ' +
+                      u_IntToStr(joyArray[joyCount].Info.Count.Buttons) + ')');
 
 
               INC(joyCount);
               INC(joyCount);
             end;
             end;
@@ -308,7 +313,7 @@ begin
             INC(joyArray[i].Info.Count.Axes, 2);
             INC(joyArray[i].Info.Count.Axes, 2);
           end;
           end;
 
 
-        log_Add('Joy: Find "' + joyArray[i].Info.Name + '" (ID: ' + u_IntToStr(i) +
+        log_Add('Joy: Found "' + joyArray[i].Info.Name + '" (ID: ' + u_IntToStr(i) +
                  '; Axes: ' + u_IntToStr(joyArray[i].Info.Count.Axes) +
                  '; Axes: ' + u_IntToStr(joyArray[i].Info.Count.Axes) +
                  '; Buttons: ' + u_IntToStr(joyArray[i].Info.Count.Buttons) + ')');
                  '; Buttons: ' + u_IntToStr(joyArray[i].Info.Count.Buttons) + ')');
 
 
@@ -356,10 +361,16 @@ begin
   for i := 0 to joyCount - 1 do
   for i := 0 to joyCount - 1 do
     begin
     begin
       while FpRead(joyArray[i].device, event, 8) = 8 do
       while FpRead(joyArray[i].device, event, 8) = 8 do
+        // кнопки "Опции", "Поделится", "PS" относятся к событию "value".
+        // крестовина относится к событию "_type".
+        // курки относятся к событию "_type", но полное отжатие относится к типу "value".
         case event._type of
         case event._type of
           JS_EVENT_AXIS:
           JS_EVENT_AXIS:
             begin
             begin
-              joyArray[i].State.Axis[JS_AXIS[joyArray[i].axesMap[event.number]]] := Round((event.value / 32767) * 1000) / 1000;
+          //    if joyArray[i].axesMap[event.number] < 16 then      // это ещё раз надо редактировать, опять какая-то фигня происходит и значения меняются.
+                joyArray[i].State.Axis[JS_AXIS[joyArray[i].axesMap[event.number]]] := Round((event.value / 32767) * 1000) / 1000
+          //    else
+          //      joyArray[i].State.Axis[JS_AXIS[joyArray[i].axesMap[event.number]]] := event.value;
             end;
             end;
           JS_EVENT_BUTTON:
           JS_EVENT_BUTTON:
             case event.value of
             case event.value of
@@ -388,7 +399,7 @@ begin
   state.dwSize := SizeOf(TJOYINFOEX);
   state.dwSize := SizeOf(TJOYINFOEX);
   for i := 0 to joyCount - 1 do
   for i := 0 to joyCount - 1 do
     begin
     begin
-      state.dwFlags := JOY_RETURNALL or JOY_USEDEADZONE;
+      state.dwFlags := JOY_RETURNALL{ or JOY_USEDEADZONE};
       if joyArray[i].caps.wCaps and JOYCAPS_POVCTS > 0 Then
       if joyArray[i].caps.wCaps and JOYCAPS_POVCTS > 0 Then
         state.dwFlags := state.dwFlags or JOY_RETURNPOVCTS;
         state.dwFlags := state.dwFlags or JOY_RETURNPOVCTS;
 
 

+ 12 - 3
Zengl_SRC/src/zgl_lib_ogg.pas

@@ -354,14 +354,18 @@ var
   vorbisInit: Boolean;
   vorbisInit: Boolean;
 
 
 implementation
 implementation
+
 {$IFNDEF USE_OGG_STATIC}
 {$IFNDEF USE_OGG_STATIC}
 uses
 uses
   {$IFDEF MAC_COCOA}
   {$IFDEF MAC_COCOA}
   zgl_application,
   zgl_application,
   {$ENDIF}
   {$ENDIF}
-  zgl_utils;
+  zgl_utils,
+  zgl_file,
+  zgl_log;
 {$ENDIF}
 {$ENDIF}
 
 
+
 {$IFNDEF USE_OGG_STATIC}
 {$IFNDEF USE_OGG_STATIC}
 var
 var
   oggLibrary      : {$IFDEF UNIX} Pointer {$ENDIF} {$IFDEF WINDOWS} HMODULE {$ENDIF};
   oggLibrary      : {$IFDEF UNIX} Pointer {$ENDIF} {$IFDEF WINDOWS} HMODULE {$ENDIF};
@@ -462,10 +466,15 @@ begin
     vorbisfileLibrary := dlopen(libvorbisfile);
     vorbisfileLibrary := dlopen(libvorbisfile);
     {$ENDIF}
     {$ENDIF}
     {$IfDef MAC_COCOA}
     {$IfDef MAC_COCOA}
-    vorbisLibrary := dlopen(PAnsiChar({'/usr/local/lib/' + }libvorbis), 1);
-    vorbisfileLibrary := dlopen(PAnsiChar({'/usr/local/lib/' + }libvorbisfile), 1);
+    vorbisLibrary := dlopen(PAnsiChar(libvorbis), 1);
+    vorbisfileLibrary := dlopen(PAnsiChar(libvorbisfile), 1);
     {$EndIf}
     {$EndIf}
 
 
+    if vorbisfileLibrary = LIB_ERROR then
+      log_Add('vorbisfileLibrary not loaded!!!');
+    if vorbisLibrary = LIB_ERROR then
+      log_Add('vorbisLibrary not loaded!!!');
+
     if (vorbisLibrary <> LIB_ERROR) and (vorbisfileLibrary <> LIB_ERROR) Then
     if (vorbisLibrary <> LIB_ERROR) and (vorbisfileLibrary <> LIB_ERROR) Then
     begin
     begin
       ov_clear          := dlsym(vorbisfileLibrary, 'ov_clear');
       ov_clear          := dlsym(vorbisfileLibrary, 'ov_clear');

+ 2 - 1
Zengl_SRC/src/zgl_lib_theora.pas

@@ -160,7 +160,8 @@ implementation
 {$IFDEF MAC_COCOA}
 {$IFDEF MAC_COCOA}
 {$IFNDEF USE_THEORA_STATIC}
 {$IFNDEF USE_THEORA_STATIC}
 uses
 uses
-  zgl_application;
+  zgl_application,
+  zgl_file;
 {$ENDIF}
 {$ENDIF}
 {$ENDIF}
 {$ENDIF}
 
 

+ 20 - 17
Zengl_SRC/src/zgl_lib_zip.pas

@@ -120,6 +120,11 @@ const
   libz = 'libz.so';
   libz = 'libz.so';
   libzip = 'libzip.so';
   libzip = 'libzip.so';
 {$EndIf}
 {$EndIf}
+{$IfDef MAC_COCOA}
+const
+  libz = 'libz.dylib';
+  libzip = 'libzip.dylib';
+{$EndIf}
 
 
 {$IFDEF USE_ZIP}
 {$IFDEF USE_ZIP}
 const
 const
@@ -130,6 +135,16 @@ const
   ZIP_FL_RECOMPRESS = 16; // force recompression of data
   ZIP_FL_RECOMPRESS = 16; // force recompression of data
   ZIP_FL_ENCRYPTED  = 32; // read encrypted data
   ZIP_FL_ENCRYPTED  = 32; // read encrypted data
 
 
+  Z_OK              = 0;
+  Z_STREAM_END      = 1;
+  Z_NEED_DICT       = 2;
+  Z_ERRNO           = (-1);
+  Z_STREAM_ERROR    = (-2);
+  Z_DATA_ERROR      = (-3);
+  Z_MEM_ERROR       = (-4);
+  Z_BUF_ERROR       = (-5);
+  Z_VERSION_ERROR   = (-6);
+
 type
 type
   Pzip      = ^Tzip;
   Pzip      = ^Tzip;
   Pzip_stat = ^Tzip_stat;
   Pzip_stat = ^Tzip_stat;
@@ -268,6 +283,7 @@ function udimodsi4(num, den: LongWord; modwanted: Integer): LongWord; cdecl;
 function __umodsi3(a, b: clong): clong; cdecl;
 function __umodsi3(a, b: clong): clong; cdecl;
 {$EndIf}
 {$EndIf}
 
 
+{$IfNDef MAC_COCOA}
 {$If Not (defined (ANDROID) and defined(NOT_OLD_ARM))}
 {$If Not (defined (ANDROID) and defined(NOT_OLD_ARM))}
 function inflateInit_(var strm: z_stream_s; version: pchar; stream_size: cint): cint; cdecl; external
 function inflateInit_(var strm: z_stream_s; version: pchar; stream_size: cint): cint; cdecl; external
   {$ifdef DYNAMICZLIB}libz name 'inflateInit_'{$endif};
   {$ifdef DYNAMICZLIB}libz name 'inflateInit_'{$endif};
@@ -276,6 +292,7 @@ function inflateEnd(var strm: z_stream_s): cint; cdecl; external
 function inflate(var strm: z_stream_s; flush: cint): cint; cdecl; external
 function inflate(var strm: z_stream_s; flush: cint): cint; cdecl; external
   {$ifdef DYNAMICZLIB}libz name 'inflate'{$endif};
   {$ifdef DYNAMICZLIB}libz name 'inflate'{$endif};
 {$IfEnd}
 {$IfEnd}
+{$IfEnd}
 
 
 {$IFDEF USE_ZIP}
 {$IFDEF USE_ZIP}
 threadvar
 threadvar
@@ -321,7 +338,7 @@ procedure LoadLibZip(const zDLL, zlDLL: String);
 begin
 begin
   UnloadLibZip;
   UnloadLibZip;
 
 
-  zipDLL := dlopen(PChar(zDLL), 1);
+  zipDLL := dlopen(PAnsiChar(zDLL), 1);
   if zipDLL = nil then
   if zipDLL = nil then
   begin
   begin
     log_Add('Could not load Zip');
     log_Add('Could not load Zip');
@@ -344,7 +361,7 @@ begin
   @zip_get_num_entries := dlsym(zipDLL, 'zip_get_num_entries');
   @zip_get_num_entries := dlsym(zipDLL, 'zip_get_num_entries');
   @zip_get_name := dlsym(zipDLL, 'zip_get_name');
   @zip_get_name := dlsym(zipDLL, 'zip_get_name');
 
 
-  zipDLL := dlopen(PChar(zlDLL), 1);
+  zipDLL := dlopen(PAnsiChar(zlDLL), 1);
   if zipDLL = nil then
   if zipDLL = nil then
   begin
   begin
     log_Add('Could not load Zip');
     log_Add('Could not load Zip');
@@ -523,24 +540,10 @@ begin
 end;
 end;
 {$EndIf}
 {$EndIf}
 
 
-{$IfDef USE_ZIP}{$IfDef MAC_COCOA}
-initialization
-  {$IfDef NO_USE_STATIC_LIBRARY}
-  LoadLibZip('libzip.dylib', 'libz.dylib');
-  {$Else}
-  LoadLibZip('/usr/local/lib/libzip.dylib', '/usr/local/Cellar/zlib/1.2.11/lib/libz.dylib');
-  {$EndIf}
-
+{$IfDef USE_ZIP}{$If defined(MAC_COCOA) or (defined(ANDROID) and defined(NOT_OLD_ARM))}
 finalization
 finalization
 
 
   UnloadLibZip;
   UnloadLibZip;
 {$EndIf}{$EndIf}
 {$EndIf}{$EndIf}
-{$IfDef ANDROID}{$IfDef NOT_OLD_ARM}
-initialization
-  LoadLibZip(libzip, libz);
-
-finalization
-  UnloadLibZip;
-{$EndIf}{$EndIf}
 
 
 end.
 end.

+ 4 - 2
Zengl_SRC/src/zgl_opengl_all.pas

@@ -342,9 +342,11 @@ begin
 
 
   // WaitVSync
   // WaitVSync
 {$IFDEF LINUX}
 {$IFDEF LINUX}
-  glXSwapIntervalSGI := gl_GetProc('glXSwapInterval');
+  glXSwapIntervalSGI := dlsym(oglLibrary, PAnsiChar('glXSwapIntervalSGI'));
   if not Assigned(glXSwapIntervalSGI) then
   if not Assigned(glXSwapIntervalSGI) then
-    glXSwapIntervalSGI := dlsym(oglLibrary, PAnsiChar('glXSwapIntervalSGI'));
+    glXSwapIntervalSGI := gl_GetProc('glXSwapInterval');
+
+
   oglCanVSync        := Assigned(glXSwapIntervalSGI);
   oglCanVSync        := Assigned(glXSwapIntervalSGI);
 {$ENDIF}
 {$ENDIF}
 {$IFDEF WINDOWS}
 {$IFDEF WINDOWS}

+ 1 - 1
Zengl_SRC/src/zgl_screen.pas

@@ -35,7 +35,7 @@ interface
 
 
 uses
 uses
 {$IFDEF USE_X11}
 {$IFDEF USE_X11}
-  X, XLib, {gegl_}xrandr, UnixType,  //    gdk2, gtk2,   // эти два возможно можно будет в дальнейшем удалить.
+  X, XLib, gegl_xrandr, UnixType,  //    gdk2, gtk2,   // эти два возможно можно будет в дальнейшем удалить.
   {$IfNDef USE_GLES}
   {$IfNDef USE_GLES}
   zgl_glx_wgl,
   zgl_glx_wgl,
   {$EndIf}
   {$EndIf}

+ 6 - 5
Zengl_SRC/src/zgl_sound.pas

@@ -399,17 +399,18 @@ begin
   {$ENDIF}
   {$ENDIF}
 
 
   {$IfDef UNIX}
   {$IfDef UNIX}
+  {$IFDEF MAC_COCOA}
+  log_Add('OpenAL: opening "CoreAudio Software"');
+  oalDevice := alcOpenDevice('CoreAudio Software');
+  {$Else}
   log_Add('OpenAL: opening "ALSA Software"');
   log_Add('OpenAL: opening "ALSA Software"');
   oalDevice := alcOpenDevice('ALSA Software');
   oalDevice := alcOpenDevice('ALSA Software');
-  {$ENDIF}
+  {$ENDIF}{$ENDIF}
   {$IFDEF WINDOWS}
   {$IFDEF WINDOWS}
   log_Add('OpenAL: opening "Generic Software"');
   log_Add('OpenAL: opening "Generic Software"');
   oalDevice := alcOpenDevice('Generic Software');
   oalDevice := alcOpenDevice('Generic Software');
   {$ENDIF}
   {$ENDIF}
-  {$IFDEF MAC_COCOA}
-  log_Add('OpenAL: opening "CoreAudio Software"');
-  oalDevice := alcOpenDevice('CoreAudio Software');
-  {$ENDIF}
+
   {$IFDEF iOS}
   {$IFDEF iOS}
   log_Add('OpenAL: opening default device - "' + alcGetString(nil, ALC_DEFAULT_DEVICE_SPECIFIER) + '"');
   log_Add('OpenAL: opening default device - "' + alcGetString(nil, ALC_DEFAULT_DEVICE_SPECIFIER) + '"');
   oalDevice := alcOpenDevice(nil);
   oalDevice := alcOpenDevice(nil);

+ 3 - 3
Zengl_SRC/src/zgl_text.pas

@@ -70,7 +70,7 @@ function  text_GetHeight(fnt: LongWord; Width: Single; const Text: UTF8String; S
 function  text_GetXY(fnt: LongWord; const Rect: zglTRect2D; const Text: UTF8String; Flags: LongWord = TEXT_HALIGN_CENTER or TEXT_VALIGN_CENTER): zglTPoint2D;
 function  text_GetXY(fnt: LongWord; const Rect: zglTRect2D; const Text: UTF8String; Flags: LongWord = TEXT_HALIGN_CENTER or TEXT_VALIGN_CENTER): zglTPoint2D;
 procedure textFx_SetLength(Length: Integer; LastCoord: zglPPoint2D = nil; LastCharDesc: zglPCharDesc = nil);
 procedure textFx_SetLength(Length: Integer; LastCoord: zglPPoint2D = nil; LastCharDesc: zglPCharDesc = nil);
 // Index - size, fnt - num font
 // Index - size, fnt - num font
-procedure setFontTextScale(Index: LongWord; fnt: LongWord);
+procedure setFontTextScale(_Scale: LongWord; fnt: LongWord);
 // Rus: установка флага отключения шкалы размерности. Только для функций,
 // Rus: установка флага отключения шкалы размерности. Только для функций,
 //      которые используют свою собственную шкалу.
 //      которые используют свою собственную шкалу.
 // Eng: setting the flag for disabling the dimension scale. Only for functions
 // Eng: setting the flag for disabling the dimension scale. Only for functions
@@ -164,7 +164,7 @@ var
   textLinesCount: Integer;
   textLinesCount: Integer;
   useFont       : zglPFont;
   useFont       : zglPFont;
 
 
-procedure setFontTextScale(Index: LongWord; fnt: LongWord);
+procedure setFontTextScale(_Scale: LongWord; fnt: LongWord);
 var
 var
   i: Integer;
   i: Integer;
   charDesc: zglPCharDesc;
   charDesc: zglPCharDesc;
@@ -172,7 +172,7 @@ begin
   if fnt > MAX_USE_FONT then
   if fnt > MAX_USE_FONT then
     exit;
     exit;
   useFont := managerFont.Font[fnt];
   useFont := managerFont.Font[fnt];
-  useFont.Scale := useFont.ScaleNorm * Index / 10;
+  useFont.Scale := useFont.ScaleNorm * _Scale / 10;
   for i := 0 to 65535 do
   for i := 0 to 65535 do
   begin
   begin
     if Assigned(useFont.CharDesc[i]) then
     if Assigned(useFont.CharDesc[i]) then

+ 14 - 7
Zengl_SRC/src/zgl_window.pas

@@ -37,7 +37,7 @@ uses
   sysutils, BaseUnix,
   sysutils, BaseUnix,
   {$ENDIF}
   {$ENDIF}
   {$IFDEF USE_X11}
   {$IFDEF USE_X11}
-  X, XLib, XUtil, {gegl_}xrandr,
+  X, XLib, XUtil, gegl_xrandr,
   {$ENDIF}
   {$ENDIF}
   {$IFDEF WINDOWS}
   {$IFDEF WINDOWS}
   Windows,
   Windows,
@@ -52,11 +52,11 @@ uses
   zgl_types;
   zgl_types;
 
 
 const
 const
-  cs_ZenGL    = 'ZenGL - 0.4.1';
-  cs_Date     = '18.09.2023';
+  cs_ZenGL    = 'ZenGL - 0.4.2';
+  cs_Date     = '29.09.2023';
   cv_major    = 0;
   cv_major    = 0;
   cv_minor    = 4;
   cv_minor    = 4;
-  cv_revision = 1;
+  cv_revision = 2;
 
 
   // zgl_Reg
   // zgl_Reg
   SYS_APP_INIT           = $000001;
   SYS_APP_INIT           = $000001;
@@ -368,6 +368,9 @@ uses
   zgl_lib_theora,
   zgl_lib_theora,
   {$ENDIF}
   {$ENDIF}
   {$ENDIF}
   {$ENDIF}
+  {$IfDef USE_ZIP}    // MacOS, Android
+  zgl_lib_zip,
+  {$EndIf}
   {$IfNDef KEYBOARD_OLD_FUNCTION}
   {$IfNDef KEYBOARD_OLD_FUNCTION}
   gegl_VElements,
   gegl_VElements,
   {$EndIf}
   {$EndIf}
@@ -866,7 +869,7 @@ begin
   {$IFDEF USE_OGG}
   {$IFDEF USE_OGG}
   if not InitVorbis() Then
   if not InitVorbis() Then
     {$IFNDEF USE_OGG_STATIC}
     {$IFNDEF USE_OGG_STATIC}
-    log_Add('Ogg: Error while loading libraries: ' + libogg + ', ' + libvorbis + ', ' + libvorbisfile)
+    log_Add('Ogg: Error while loading libraries: ' + libogg + ' or(and) ' + libvorbis + ' or(and) ' + libvorbisfile)
     {$ENDIF}
     {$ENDIF}
   else
   else
     log_Add('Ogg: Initialized');
     log_Add('Ogg: Initialized');
@@ -889,6 +892,10 @@ begin
   zgl_GetSysDir();
   zgl_GetSysDir();
   {$EndIf}
   {$EndIf}
 
 
+  {$If defined(MAC_COCOA) or (defined(ANDROID) and defined(NOT_OLD_ARM))}
+  LoadLibZip(libzip, libz);
+  {$EndIf}
+
   scr_SetOptions;
   scr_SetOptions;
 
 
   oglFSAA    := FSAA;
   oglFSAA    := FSAA;
@@ -1303,7 +1310,7 @@ begin
 
 
     DESKTOP_WIDTH:
     DESKTOP_WIDTH:
     {$IFDEF USE_X11}
     {$IFDEF USE_X11}
-      Result := PXRRScreenSize(scrModeList + scrDesktop).width;
+      Result := {PXRRScreenSize(}scrModeList.Width + scrDesktop;//).width;
     {$ENDIF}
     {$ENDIF}
     {$IFDEF WINDOWS}
     {$IFDEF WINDOWS}
       Result := scrDesktop.dmPelsWidth;
       Result := scrDesktop.dmPelsWidth;
@@ -1313,7 +1320,7 @@ begin
     {$IFEND}
     {$IFEND}
     DESKTOP_HEIGHT:
     DESKTOP_HEIGHT:
     {$IFDEF USE_X11}
     {$IFDEF USE_X11}
-      Result := PXRRScreenSize(scrModeList + scrDesktop).height;
+      Result := {PXRRScreenSize(}scrModeList.Height + scrDesktop;//).height;
     {$ENDIF}
     {$ENDIF}
     {$IFDEF WINDOWS}
     {$IFDEF WINDOWS}
       Result := scrDesktop.dmPelsHeight;
       Result := scrDesktop.dmPelsHeight;

+ 1 - 1
Zengl_SRC/srcGEGL/gegl_xrandr.pas

@@ -379,7 +379,7 @@ type
 
 
 
 
 
 
-function XRRQueryExtension(dpy: PDisplay; event_base_return: Plongint; error_base_return: Plongint): TBool; cdecl; external libXrandr;
+function XRRQueryExtension(dpy: PDisplay; event_base_return: Plongint; error_base_return: Plongint): TBoolResult; cdecl; external libXrandr;
 function XRRQueryVersion(dpy: PDisplay; major_version_return: Plongint; minor_version_return: Plongint): TStatus; cdecl; external libXrandr;
 function XRRQueryVersion(dpy: PDisplay; major_version_return: Plongint; minor_version_return: Plongint): TStatus; cdecl; external libXrandr;
 function XRRGetScreenInfo(dpy: PDisplay; window: TWindow): PXRRScreenConfiguration; cdecl; external libXrandr;
 function XRRGetScreenInfo(dpy: PDisplay; window: TWindow): PXRRScreenConfiguration; cdecl; external libXrandr;
 procedure XRRFreeScreenConfigInfo(config: PXRRScreenConfiguration); cdecl; external libXrandr;
 procedure XRRFreeScreenConfigInfo(config: PXRRScreenConfiguration); cdecl; external libXrandr;

+ 8 - 0
Zengl_SRC/srcGL/GLdefine.cfg

@@ -117,6 +117,8 @@
 {$ENDIF}
 {$ENDIF}
 
 
 {$IFDEF USE_GL_32}
 {$IFDEF USE_GL_32}
+  {$define GL_VERSION_1_3}
+  {$define GL_VERSION_1_4}
   {$define GL_VERSION_1_5}
   {$define GL_VERSION_1_5}
   {$define GL_VERSION_2_0}
   {$define GL_VERSION_2_0}
   {$define GL_VERSION_2_1}
   {$define GL_VERSION_2_1}
@@ -126,6 +128,8 @@
 {$ENDIF}
 {$ENDIF}
 
 
 {$IFDEF USE_GL_33}
 {$IFDEF USE_GL_33}
+  {$define GL_VERSION_1_3}
+  {$define GL_VERSION_1_4}
   {$define GL_VERSION_1_5}
   {$define GL_VERSION_1_5}
   {$define GL_VERSION_2_0}
   {$define GL_VERSION_2_0}
   {$define GL_VERSION_2_1}
   {$define GL_VERSION_2_1}
@@ -136,6 +140,8 @@
 {$ENDIF}
 {$ENDIF}
 
 
 {$IFDEF USE_GL_41}
 {$IFDEF USE_GL_41}
+  {$define GL_VERSION_1_3}
+  {$define GL_VERSION_1_4}
   {$define GL_VERSION_1_5}
   {$define GL_VERSION_1_5}
   {$define GL_VERSION_2_0}
   {$define GL_VERSION_2_0}
   {$define GL_VERSION_2_1}
   {$define GL_VERSION_2_1}
@@ -148,6 +154,8 @@
 {$ENDIF}
 {$ENDIF}
 
 
 {$IFDEF USE_GL_46}
 {$IFDEF USE_GL_46}
+  {$define GL_VERSION_1_3}
+  {$define GL_VERSION_1_4}
   {$define GL_VERSION_1_5}
   {$define GL_VERSION_1_5}
   {$define GL_VERSION_2_0}
   {$define GL_VERSION_2_0}
   {$define GL_VERSION_2_1}
   {$define GL_VERSION_2_1}

+ 0 - 6321
Zengl_SRC/srcGL/old zgl_gl_const_all.pas

@@ -1,6321 +0,0 @@
-unit zgl_gl_const_all;
-
-interface
-
-{$IfDef LINUX}
-uses
-  xlib;
-{$EndIf}
-
-type
-  P_cl_context  = ^_cl_context;
-  _cl_context   = record end;
-  P_cl_event    = ^_cl_event;
-  _cl_event     = record end;
-
-  PPGLchar      = ^PGLChar;
-  PPGLcharARB   = ^PGLcharARB;
-
-  PGLboolean    = ^GLboolean;
-  PGLbyte       = ^GLbyte;
-  PGLchar       = ^GLchar;
-  PGLdouble     = ^GLdouble;
-  PGLenum       = ^GLenum;
-  PGLfloat      = ^GLfloat;
-  PGLint        = ^GLint;
-  PGLint64      = ^GLint64;
-  PGLint64EXT   = ^GLint64EXT;
-  PGLintptr     = ^GLintptr;
-  PGLshort      = ^GLshort;
-  PGLsizei      = ^GLsizei;
-  PGLsizeiptr   = ^GLsizeiptr;
-  PGLubyte      = ^GLubyte;
-  PGLuint       = ^GLuint;
-  PGLuint64     = ^GLuint64;
-  PGLuint64EXT  = ^GLuint64EXT;
-  PGLushort     = ^GLushort;
-
-  PGLcharARB    = ^GLcharARB;
-  PGLclampf     = ^GLclampf;
-  PGLfixed      = ^GLfixed;
-  PGLhalfNV     = ^GLhalfNV;
-  PGLhandleARB  = ^GLhandleARB;
-  PGLvdpauSurfaceNV  = ^GLvdpauSurfaceNV;
-
-  GLvoid = pointer;
-  GLenum = dword;
-  GLfloat = Single;     // khronos_float_t;
-  GLint = longint;
-  GLsizei = longint;
-  GLbitfield = dword;
-  GLdouble = double;
-  GLuint = dword;
-  GLboolean = byte;
-  GLubyte = Byte;       // khronos_uint8_t;
-  GLclampf = Single;    // khronos_float_t;
-  GLclampd = double;
-  {$IfDef CPU64}
-  GLsizeiptr = Int64;      // khronos_ssize_t;
-  GLintptr = Int64;        // khronos_intptr_t;
-  GLuint64 = QWord;        // khronos_uint64_t;
-  GLint64 = Int64;         // khronos_int64_t;
-  GLuint64EXT = QWord;     // khronos_uint64_t;
-  GLint64EXT = Int64;      // khronos_int64_t;
-  GLsizeiptrARB = Int64;   // khronos_ssize_t;
-  GLintptrARB = Int64;     // khronos_intptr_t;
-  {$Else}
-  GLsizeiptr = LongInt;    // khronos_ssize_t;
-  GLintptr = LongInt;      // khronos_intptr_t;
-  GLuint64 = DWord;        // khronos_uint64_t;
-  GLint64 = LongInt;       // khronos_int64_t;
-  GLuint64EXT = DWord;     // khronos_uint64_t;
-  GLsizeiptrARB = LongInt; // khronos_ssize_t;
-  GLintptrARB = LongInt;   // khronos_intptr_t;
-  {$EndIf}
-  GLchar = char;
-  GLshort = SmallInt;   // khronos_int16_t;
-  GLbyte = Byte;        // khronos_int8_t;
-  GLushort = Word;      // khronos_uint16_t;
-  GLhalf = Word;        //  khronos_uint16_t;
-  GLsync = Pointer;     // ^__GLsync;
-
-  GLeglImageOES = pointer;
-
-  GLhalfARB = Word;     // khronos_uint16_t;
-  GLfixed = LongInt;    // khronos_int32_t;
-  GLeglClientBufferEXT = pointer;
-
-  PPGLvoid = ^PGLvoid;
-  PGLvoid = Pointer;
-
-  {$ifdef __APPLE__}
-  GLhandleARB = pointer;
-  {$else}
-  GLhandleARB = dword;
-  {$EndIf}
-  GLcharARB = char;
-
-  GLhalfNV = word;
-  GLvdpauSurfaceNV = GLintptr;
-
-  {$IfDef LINUX}
-{???}  PDMparams  = ^DMparams;                               // ???
-  PGLXFBConfigSGIX  = ^GLXFBConfigSGIX;
-  GLXFBConfigSGIX = ^GLXFBConfigRec;
-
-  PGLXHyperpipeConfigSGIX  = ^GLXHyperpipeConfigSGIX;
-  GLXHyperpipeConfigSGIX = record
-        pipeName : array[0..79] of char;
-        channel : longint;
-        participationType : dword;
-        timeSlice : longint;
-      end;
-
-  PGLXHyperpipeNetworkSGIX  = ^GLXHyperpipeNetworkSGIX;
-  GLXHyperpipeNetworkSGIX = record
-        pipeName : array[0..79] of char;
-        networkId : longint;
-      end;
-
-  PGLXVideoCaptureDeviceNV  = ^GLXVideoCaptureDeviceNV;
-  GLXVideoCaptureDeviceNV = XID;
-
-  PGLXVideoDeviceNV  = ^GLXVideoDeviceNV;
-  GLXVideoDeviceNV = DWord;
-
-  Pint32_t  = ^int32_t;
-  int32_t = LongInt;
-  Pint64_t  = ^int64_t;
-  int64_t = Int64;
-  Plongint  = ^longint;
-  PXVisualInfo  = ^XVisualInfo;
-
-  cuint = LongWord;
-  cint = LongInt;
-
-  XPixmap = TXID;
-  XFont = TXID;
-  XColormap = TXID;
-  XWindow = TXID;
-
-  GLXContext = Pointer;
-  GLXPixmap = TXID;
-  GLXDrawable = TXID;
-  GLXContextID = TXID;
-
-(* GLX 1.3 and later *)
-  GLXFBConfigRec = record end;
-  GLXFBConfig = ^GLXFBConfigRec;
-
-  PGLXFBConfig = ^GLXFBConfig;          // ссылка на ссылку...
-  GLXFBConfigID = TXID;
-  GLXWindow = TXID;
-  GLXPbuffer = TXID;
-
-{  GLXFBConfig = ^__GLXFBConfigRec;
-  GLXFBConfigSGIX = ^__GLXFBConfigRec;}
-  {$EndIf}
-
-const
-  // GL_VERSION_1_1
-  { AttribMask }
-  GL_DEPTH_BUFFER_BIT = $00000100;
-  GL_STENCIL_BUFFER_BIT = $00000400;
-  GL_COLOR_BUFFER_BIT = $00004000;
-  { Boolean }
-  GL_TRUE = 1;
-  GL_FALSE = 0;
-  { BeginMode }
-  GL_POINTS = $0000;
-  GL_LINES = $0001;
-  GL_LINE_LOOP = $0002;
-  GL_LINE_STRIP = $0003;
-  GL_TRIANGLES = $0004;
-  GL_TRIANGLE_STRIP = $0005;
-  GL_TRIANGLE_FAN = $0006;
-  { AlphaFunction }
-  GL_NEVER = $0200;
-  GL_LESS = $0201;
-  GL_EQUAL = $0202;
-  GL_LEQUAL = $0203;
-  GL_GREATER = $0204;
-  GL_NOTEQUAL = $0205;
-  GL_GEQUAL = $0206;
-  GL_ALWAYS = $0207;
-  { BlendingFactorDest }
-  GL_ZERO = 0;
-  GL_ONE = 1;
-  GL_SRC_COLOR = $0300;
-  GL_ONE_MINUS_SRC_COLOR = $0301;
-  GL_SRC_ALPHA = $0302;
-  GL_ONE_MINUS_SRC_ALPHA = $0303;
-  GL_DST_ALPHA = $0304;
-  GL_ONE_MINUS_DST_ALPHA = $0305;
-  { BlendingFactorSrc }
-  GL_DST_COLOR = $0306;
-  GL_ONE_MINUS_DST_COLOR = $0307;
-  GL_SRC_ALPHA_SATURATE = $0308;
-  { DrawBufferMode }
-  GL_NONE = 0;
-  GL_FRONT_LEFT = $0400;
-  GL_FRONT_RIGHT = $0401;
-  GL_BACK_LEFT = $0402;
-  GL_BACK_RIGHT = $0403;
-  GL_FRONT = $0404;
-  GL_BACK = $0405;
-  GL_LEFT = $0406;
-  GL_RIGHT = $0407;
-  GL_FRONT_AND_BACK = $0408;
-  { ErrorCode }
-  GL_NO_ERROR = 0;
-  GL_INVALID_ENUM = $0500;
-  GL_INVALID_VALUE = $0501;
-  GL_INVALID_OPERATION = $0502;
-  GL_OUT_OF_MEMORY = $0505;
-  { FrontFaceDirection }
-  GL_CW = $0900;
-  GL_CCW = $0901;
-  { GetPName }
-  GL_POINT_SIZE = $0B11;
-  GL_POINT_SIZE_RANGE = $0B12;
-  GL_POINT_SIZE_GRANULARITY = $0B13;
-  GL_LINE_SMOOTH = $0B20;
-  GL_LINE_WIDTH = $0B21;
-  GL_LINE_WIDTH_RANGE = $0B22;
-  GL_LINE_WIDTH_GRANULARITY = $0B23;
-  GL_POLYGON_SMOOTH = $0B41;
-  GL_CULL_FACE = $0B44;
-  GL_CULL_FACE_MODE = $0B45;
-  GL_FRONT_FACE = $0B46;
-  GL_DEPTH_RANGE = $0B70;
-  GL_DEPTH_TEST = $0B71;
-  GL_DEPTH_WRITEMASK = $0B72;
-  GL_DEPTH_CLEAR_VALUE = $0B73;
-  GL_DEPTH_FUNC = $0B74;
-  GL_STENCIL_TEST = $0B90;
-  GL_STENCIL_CLEAR_VALUE = $0B91;
-  GL_STENCIL_FUNC = $0B92;
-  GL_STENCIL_VALUE_MASK = $0B93;
-  GL_STENCIL_FAIL = $0B94;
-  GL_STENCIL_PASS_DEPTH_FAIL = $0B95;
-  GL_STENCIL_PASS_DEPTH_PASS = $0B96;
-  GL_STENCIL_REF = $0B97;
-  GL_STENCIL_WRITEMASK = $0B98;
-  GL_VIEWPORT = $0BA2;
-  GL_DITHER = $0BD0;
-  GL_BLEND_DST = $0BE0;
-  GL_BLEND_SRC = $0BE1;
-  GL_BLEND = $0BE2;
-  GL_LOGIC_OP_MODE = $0BF0;
-  GL_COLOR_LOGIC_OP = $0BF2;
-  GL_DRAW_BUFFER = $0C01;
-  GL_READ_BUFFER = $0C02;
-  GL_SCISSOR_BOX = $0C10;
-  GL_SCISSOR_TEST = $0C11;
-  GL_COLOR_CLEAR_VALUE = $0C22;
-  GL_COLOR_WRITEMASK = $0C23;
-  GL_DOUBLEBUFFER = $0C32;
-  GL_STEREO = $0C33;
-  GL_LINE_SMOOTH_HINT = $0C52;
-  GL_POLYGON_SMOOTH_HINT = $0C53;
-  GL_UNPACK_SWAP_BYTES = $0CF0;
-  GL_UNPACK_LSB_FIRST = $0CF1;
-  GL_UNPACK_ROW_LENGTH = $0CF2;
-  GL_UNPACK_SKIP_ROWS = $0CF3;
-  GL_UNPACK_SKIP_PIXELS = $0CF4;
-  GL_UNPACK_ALIGNMENT = $0CF5;
-  GL_PACK_SWAP_BYTES = $0D00;
-  GL_PACK_LSB_FIRST = $0D01;
-  GL_PACK_ROW_LENGTH = $0D02;
-  GL_PACK_SKIP_ROWS = $0D03;
-  GL_PACK_SKIP_PIXELS = $0D04;
-  GL_PACK_ALIGNMENT = $0D05;
-  GL_MAX_TEXTURE_SIZE = $0D33;
-  GL_MAX_VIEWPORT_DIMS = $0D3A;
-  GL_SUBPIXEL_BITS = $0D50;
-  GL_TEXTURE_1D = $0DE0;
-  GL_TEXTURE_2D = $0DE1;
-  GL_POLYGON_OFFSET_UNITS = $2A00;
-  GL_POLYGON_OFFSET_POINT = $2A01;
-  GL_POLYGON_OFFSET_LINE = $2A02;
-  GL_POLYGON_OFFSET_FILL = $8037;
-  GL_POLYGON_OFFSET_FACTOR = $8038;
-  GL_TEXTURE_BINDING_1D = $8068;
-  GL_TEXTURE_BINDING_2D = $8069;
-  { GetTextureParameter }
-  GL_TEXTURE_WIDTH = $1000;
-  GL_TEXTURE_HEIGHT = $1001;
-  GL_TEXTURE_INTERNAL_FORMAT = $1003;
-  GL_TEXTURE_BORDER_COLOR = $1004;
-  GL_TEXTURE_BORDER = $1005;
-  GL_TEXTURE_RED_SIZE = $805C;
-  GL_TEXTURE_GREEN_SIZE = $805D;
-  GL_TEXTURE_BLUE_SIZE = $805E;
-  GL_TEXTURE_ALPHA_SIZE = $805F;
-  { HintMode }
-  GL_DONT_CARE = $1100;
-  GL_FASTEST = $1101;
-  GL_NICEST = $1102;
-  { DataType }
-  GL_BYTE = $1400;
-  GL_UNSIGNED_BYTE = $1401;
-  GL_SHORT = $1402;
-  GL_UNSIGNED_SHORT = $1403;
-  GL_INT = $1404;
-  GL_UNSIGNED_INT = $1405;
-  GL_FLOAT = $1406;
-  GL_DOUBLE = $140A;
-  { LogicOp }
-  GL_CLEAR = $1500;
-  GL_AND = $1501;
-  GL_AND_REVERSE = $1502;
-  GL_COPY = $1503;
-  GL_AND_INVERTED = $1504;
-  GL_NOOP = $1505;
-  GL_XOR = $1506;
-  GL_OR = $1507;
-  GL_NOR = $1508;
-  GL_EQUIV = $1509;
-  GL_INVERT = $150A;
-  GL_OR_REVERSE = $150B;
-  GL_COPY_INVERTED = $150C;
-  GL_OR_INVERTED = $150D;
-  GL_NAND = $150E;
-  GL_SET = $150F;
-  { MatrixMode (for gl3.h, FBO attachment type) }
-  GL_TEXTURE = $1702;
-  { PixelCopyType }
-  GL_COLOR = $1800;
-  GL_DEPTH = $1801;
-  GL_STENCIL = $1802;
-  { PixelFormat }
-  GL_STENCIL_INDEX = $1901;
-  GL_DEPTH_COMPONENT = $1902;
-  GL_RED = $1903;
-  GL_GREEN = $1904;
-  GL_BLUE = $1905;
-  GL_ALPHA = $1906;
-  GL_RGB = $1907;
-  GL_RGBA = $1908;
-  { PolygonMode }
-  GL_POINT = $1B00;
-  GL_LINE = $1B01;
-  GL_FILL = $1B02;
-  { StencilOp }
-  GL_KEEP = $1E00;
-  GL_REPLACE = $1E01;
-  GL_INCR = $1E02;
-  GL_DECR = $1E03;
-  { StringName }
-  GL_VENDOR = $1F00;
-  GL_RENDERER = $1F01;
-  GL_VERSION = $1F02;
-  GL_EXTENSIONS = $1F03;
-  { TextureMagFilter }
-  GL_NEAREST = $2600;
-  GL_LINEAR = $2601;
-  { TextureMinFilter }
-  GL_NEAREST_MIPMAP_NEAREST = $2700;
-  GL_LINEAR_MIPMAP_NEAREST = $2701;
-  GL_NEAREST_MIPMAP_LINEAR = $2702;
-  GL_LINEAR_MIPMAP_LINEAR = $2703;
-  { TextureParameterName }
-  GL_TEXTURE_MAG_FILTER = $2800;
-  GL_TEXTURE_MIN_FILTER = $2801;
-  GL_TEXTURE_WRAP_S = $2802;
-  GL_TEXTURE_WRAP_T = $2803;
-  { TextureTarget }
-  GL_PROXY_TEXTURE_1D = $8063;
-  GL_PROXY_TEXTURE_2D = $8064;
-  { TextureWrapMode }
-  GL_REPEAT = $2901;
-  { PixelInternalFormat }
-  GL_R3_G3_B2 = $2A10;
-  GL_RGB4 = $804F;
-  GL_RGB5 = $8050;
-  GL_RGB8 = $8051;
-  GL_RGB10 = $8052;
-  GL_RGB12 = $8053;
-  GL_RGB16 = $8054;
-  GL_RGBA2 = $8055;
-  GL_RGBA4 = $8056;
-  GL_RGB5_A1 = $8057;
-  GL_RGBA8 = $8058;
-  GL_RGB10_A2 = $8059;
-  GL_RGBA12 = $805A;
-  GL_RGBA16 = $805B;
-  // deprecated
-  GL_ACCUM = $0100;
-  GL_LOAD = $0101;
-  GL_RETURN = $0102;
-  GL_MULT = $0103;
-  GL_ADD = $0104;
-  GL_CURRENT_BIT = $00000001;
-  GL_POINT_BIT = $00000002;
-  GL_LINE_BIT = $00000004;
-  GL_POLYGON_BIT = $00000008;
-  GL_POLYGON_STIPPLE_BIT = $00000010;
-  GL_PIXEL_MODE_BIT = $00000020;
-  GL_LIGHTING_BIT = $00000040;
-  GL_FOG_BIT = $00000080;
-  GL_ACCUM_BUFFER_BIT = $00000200;
-  GL_VIEWPORT_BIT = $00000800;
-  GL_TRANSFORM_BIT = $00001000;
-  GL_ENABLE_BIT = $00002000;
-  GL_HINT_BIT = $00008000;
-  GL_EVAL_BIT = $00010000;
-  GL_LIST_BIT = $00020000;
-  GL_TEXTURE_BIT = $00040000;
-  GL_SCISSOR_BIT = $00080000;
-  GL_ALL_ATTRIB_BITS = $000FFFFF;
-  GL_QUADS = $0007;
-  GL_QUAD_STRIP = $0008;
-  GL_POLYGON = $0009;
-  GL_CLIP_PLANE0 = $3000;
-  GL_CLIP_PLANE1 = $3001;
-  GL_CLIP_PLANE2 = $3002;
-  GL_CLIP_PLANE3 = $3003;
-  GL_CLIP_PLANE4 = $3004;
-  GL_CLIP_PLANE5 = $3005;
-  GL_2_BYTES = $1407;
-  GL_3_BYTES = $1408;
-  GL_4_BYTES = $1409;
-  GL_AUX0 = $0409;
-  GL_AUX1 = $040A;
-  GL_AUX2 = $040B;
-  GL_AUX3 = $040C;
-  GL_STACK_OVERFLOW = $0503;
-  GL_STACK_UNDERFLOW = $0504;
-  GL_2D = $0600;
-  GL_3D = $0601;
-  GL_3D_COLOR = $0602;
-  GL_3D_COLOR_TEXTURE = $0603;
-  GL_4D_COLOR_TEXTURE = $0604;
-  GL_PASS_THROUGH_TOKEN = $0700;
-  GL_POINT_TOKEN = $0701;
-  GL_LINE_TOKEN = $0702;
-  GL_POLYGON_TOKEN = $0703;
-  GL_BITMAP_TOKEN = $0704;
-  GL_DRAW_PIXEL_TOKEN = $0705;
-  GL_COPY_PIXEL_TOKEN = $0706;
-  GL_LINE_RESET_TOKEN = $0707;
-  GL_EXP = $0800;
-  GL_EXP2 = $0801;
-  GL_COEFF = $0A00;
-  GL_ORDER = $0A01;
-  GL_DOMAIN = $0A02;
-  GL_CURRENT_COLOR = $0B00;
-  GL_CURRENT_INDEX = $0B01;
-  GL_CURRENT_NORMAL = $0B02;
-  GL_CURRENT_TEXTURE_COORDS = $0B03;
-  GL_CURRENT_RASTER_COLOR = $0B04;
-  GL_CURRENT_RASTER_INDEX = $0B05;
-  GL_CURRENT_RASTER_TEXTURE_COORDS = $0B06;
-  GL_CURRENT_RASTER_POSITION = $0B07;
-  GL_CURRENT_RASTER_POSITION_VALID = $0B08;
-  GL_CURRENT_RASTER_DISTANCE = $0B09;
-  GL_POINT_SMOOTH = $0B10;
-  GL_LINE_STIPPLE = $0B24;
-  GL_LINE_STIPPLE_PATTERN = $0B25;
-  GL_LINE_STIPPLE_REPEAT = $0B26;
-  GL_LIST_MODE = $0B30;
-  GL_MAX_LIST_NESTING = $0B31;
-  GL_LIST_BASE = $0B32;
-  GL_LIST_INDEX = $0B33;
-  GL_POLYGON_MODE = $0B40;
-  GL_POLYGON_STIPPLE = $0B42;
-  GL_EDGE_FLAG = $0B43;
-  GL_LIGHTING = $0B50;
-  GL_LIGHT_MODEL_LOCAL_VIEWER = $0B51;
-  GL_LIGHT_MODEL_TWO_SIDE = $0B52;
-  GL_LIGHT_MODEL_AMBIENT = $0B53;
-  GL_SHADE_MODEL = $0B54;
-  GL_COLOR_MATERIAL_FACE = $0B55;
-  GL_COLOR_MATERIAL_PARAMETER = $0B56;
-  GL_COLOR_MATERIAL = $0B57;
-  GL_FOG = $0B60;
-  GL_FOG_INDEX = $0B61;
-  GL_FOG_DENSITY = $0B62;
-  GL_FOG_START = $0B63;
-  GL_FOG_END = $0B64;
-  GL_FOG_MODE = $0B65;
-  GL_FOG_COLOR = $0B66;
-  GL_ACCUM_CLEAR_VALUE = $0B80;
-  GL_MATRIX_MODE = $0BA0;
-  GL_NORMALIZE = $0BA1;
-  GL_MODELVIEW_STACK_DEPTH = $0BA3;
-  GL_PROJECTION_STACK_DEPTH = $0BA4;
-  GL_TEXTURE_STACK_DEPTH = $0BA5;
-  GL_MODELVIEW_MATRIX = $0BA6;
-  GL_PROJECTION_MATRIX = $0BA7;
-  GL_TEXTURE_MATRIX = $0BA8;
-  GL_ATTRIB_STACK_DEPTH = $0BB0;
-  GL_CLIENT_ATTRIB_STACK_DEPTH = $0BB1;
-  GL_ALPHA_TEST = $0BC0;
-  GL_ALPHA_TEST_FUNC = $0BC1;
-  GL_ALPHA_TEST_REF = $0BC2;
-  GL_INDEX_LOGIC_OP = $0BF1;
-  GL_AUX_BUFFERS = $0C00;
-  GL_INDEX_CLEAR_VALUE = $0C20;
-  GL_INDEX_WRITEMASK = $0C21;
-  GL_INDEX_MODE = $0C30;
-  GL_RGBA_MODE = $0C31;
-  GL_RENDER_MODE = $0C40;
-  GL_PERSPECTIVE_CORRECTION_HINT = $0C50;
-  GL_POINT_SMOOTH_HINT = $0C51;
-  GL_FOG_HINT = $0C54;
-  GL_TEXTURE_GEN_S = $0C60;
-  GL_TEXTURE_GEN_T = $0C61;
-  GL_TEXTURE_GEN_R = $0C62;
-  GL_TEXTURE_GEN_Q = $0C63;
-  GL_PIXEL_MAP_I_TO_I = $0C70;
-  GL_PIXEL_MAP_S_TO_S = $0C71;
-  GL_PIXEL_MAP_I_TO_R = $0C72;
-  GL_PIXEL_MAP_I_TO_G = $0C73;
-  GL_PIXEL_MAP_I_TO_B = $0C74;
-  GL_PIXEL_MAP_I_TO_A = $0C75;
-  GL_PIXEL_MAP_R_TO_R = $0C76;
-  GL_PIXEL_MAP_G_TO_G = $0C77;
-  GL_PIXEL_MAP_B_TO_B = $0C78;
-  GL_PIXEL_MAP_A_TO_A = $0C79;
-  GL_PIXEL_MAP_I_TO_I_SIZE = $0CB0;
-  GL_PIXEL_MAP_S_TO_S_SIZE = $0CB1;
-  GL_PIXEL_MAP_I_TO_R_SIZE = $0CB2;
-  GL_PIXEL_MAP_I_TO_G_SIZE = $0CB3;
-  GL_PIXEL_MAP_I_TO_B_SIZE = $0CB4;
-  GL_PIXEL_MAP_I_TO_A_SIZE = $0CB5;
-  GL_PIXEL_MAP_R_TO_R_SIZE = $0CB6;
-  GL_PIXEL_MAP_G_TO_G_SIZE = $0CB7;
-  GL_PIXEL_MAP_B_TO_B_SIZE = $0CB8;
-  GL_PIXEL_MAP_A_TO_A_SIZE = $0CB9;
-  GL_MAP_COLOR = $0D10;
-  GL_MAP_STENCIL = $0D11;
-  GL_INDEX_SHIFT = $0D12;
-  GL_INDEX_OFFSET = $0D13;
-  GL_RED_SCALE = $0D14;
-  GL_RED_BIAS = $0D15;
-  GL_ZOOM_X = $0D16;
-  GL_ZOOM_Y = $0D17;
-  GL_GREEN_SCALE = $0D18;
-  GL_GREEN_BIAS = $0D19;
-  GL_BLUE_SCALE = $0D1A;
-  GL_BLUE_BIAS = $0D1B;
-  GL_ALPHA_SCALE = $0D1C;
-  GL_ALPHA_BIAS = $0D1D;
-  GL_DEPTH_SCALE = $0D1E;
-  GL_DEPTH_BIAS = $0D1F;
-  GL_MAX_EVAL_ORDER = $0D30;
-  GL_MAX_LIGHTS = $0D31;
-  GL_MAX_CLIP_PLANES = $0D32;
-  GL_MAX_PIXEL_MAP_TABLE = $0D34;
-  GL_MAX_ATTRIB_STACK_DEPTH = $0D35;
-  GL_MAX_MODELVIEW_STACK_DEPTH = $0D36;
-  GL_MAX_NAME_STACK_DEPTH = $0D37;
-  GL_MAX_PROJECTION_STACK_DEPTH = $0D38;
-  GL_MAX_TEXTURE_STACK_DEPTH = $0D39;
-  GL_MAX_CLIENT_ATTRIB_STACK_DEPTH = $0D3B;
-  GL_INDEX_BITS = $0D51;
-  GL_RED_BITS = $0D52;
-  GL_GREEN_BITS = $0D53;
-  GL_BLUE_BITS = $0D54;
-  GL_ALPHA_BITS = $0D55;
-  GL_DEPTH_BITS = $0D56;
-  GL_STENCIL_BITS = $0D57;
-  GL_ACCUM_RED_BITS = $0D58;
-  GL_ACCUM_GREEN_BITS = $0D59;
-  GL_ACCUM_BLUE_BITS = $0D5A;
-  GL_ACCUM_ALPHA_BITS = $0D5B;
-  GL_NAME_STACK_DEPTH = $0D70;
-  GL_AUTO_NORMAL = $0D80;
-  GL_MAP1_COLOR_4 = $0D90;
-  GL_MAP1_INDEX = $0D91;
-  GL_MAP1_NORMAL = $0D92;
-  GL_MAP1_TEXTURE_COORD_1 = $0D93;
-  GL_MAP1_TEXTURE_COORD_2 = $0D94;
-  GL_MAP1_TEXTURE_COORD_3 = $0D95;
-  GL_MAP1_TEXTURE_COORD_4 = $0D96;
-  GL_MAP1_VERTEX_3 = $0D97;
-  GL_MAP1_VERTEX_4 = $0D98;
-  GL_MAP2_COLOR_4 = $0DB0;
-  GL_MAP2_INDEX = $0DB1;
-  GL_MAP2_NORMAL = $0DB2;
-  GL_MAP2_TEXTURE_COORD_1 = $0DB3;
-  GL_MAP2_TEXTURE_COORD_2 = $0DB4;
-  GL_MAP2_TEXTURE_COORD_3 = $0DB5;
-  GL_MAP2_TEXTURE_COORD_4 = $0DB6;
-  GL_MAP2_VERTEX_3 = $0DB7;
-  GL_MAP2_VERTEX_4 = $0DB8;
-  GL_MAP1_GRID_DOMAIN = $0DD0;
-  GL_MAP1_GRID_SEGMENTS = $0DD1;
-  GL_MAP2_GRID_DOMAIN = $0DD2;
-  GL_MAP2_GRID_SEGMENTS = $0DD3;
-  GL_FEEDBACK_BUFFER_POINTER = $0DF0;
-  GL_FEEDBACK_BUFFER_SIZE = $0DF1;
-  GL_FEEDBACK_BUFFER_TYPE = $0DF2;
-  GL_SELECTION_BUFFER_POINTER = $0DF3;
-  GL_SELECTION_BUFFER_SIZE = $0DF4;
-  GL_LIGHT0 = $4000;
-  GL_LIGHT1 = $4001;
-  GL_LIGHT2 = $4002;
-  GL_LIGHT3 = $4003;
-  GL_LIGHT4 = $4004;
-  GL_LIGHT5 = $4005;
-  GL_LIGHT6 = $4006;
-  GL_LIGHT7 = $4007;
-  GL_AMBIENT = $1200;
-  GL_DIFFUSE = $1201;
-  GL_SPECULAR = $1202;
-  GL_POSITION = $1203;
-  GL_SPOT_DIRECTION = $1204;
-  GL_SPOT_EXPONENT = $1205;
-  GL_SPOT_CUTOFF = $1206;
-  GL_CONSTANT_ATTENUATION = $1207;
-  GL_LINEAR_ATTENUATION = $1208;
-  GL_QUADRATIC_ATTENUATION = $1209;
-  GL_COMPILE = $1300;
-  GL_COMPILE_AND_EXECUTE = $1301;
-  GL_EMISSION = $1600;
-  GL_SHININESS = $1601;
-  GL_AMBIENT_AND_DIFFUSE = $1602;
-  GL_COLOR_INDEXES = $1603;
-  GL_MODELVIEW = $1700;
-  GL_PROJECTION = $1701;
-  GL_COLOR_INDEX = $1900;
-  GL_LUMINANCE = $1909;
-  GL_LUMINANCE_ALPHA = $190A;
-  GL_BITMAP = $1A00;
-  GL_RENDER = $1C00;
-  GL_FEEDBACK = $1C01;
-  GL_SELECT = $1C02;
-  GL_FLAT = $1D00;
-  GL_SMOOTH = $1D01;
-  GL_S = $2000;
-  GL_T = $2001;
-  GL_R = $2002;
-  GL_Q = $2003;
-  GL_MODULATE = $2100;
-  GL_DECAL = $2101;
-  GL_TEXTURE_ENV_MODE = $2200;
-  GL_TEXTURE_ENV_COLOR = $2201;
-  GL_TEXTURE_ENV = $2300;
-  GL_EYE_LINEAR = $2400;
-  GL_OBJECT_LINEAR = $2401;
-  GL_SPHERE_MAP = $2402;
-  GL_TEXTURE_GEN_MODE = $2500;
-  GL_OBJECT_PLANE = $2501;
-  GL_EYE_PLANE = $2502;
-  GL_CLAMP = $2900;
-  GL_CLIENT_PIXEL_STORE_BIT = $00000001;
-  GL_CLIENT_VERTEX_ARRAY_BIT = $00000002;
-  GL_CLIENT_ALL_ATTRIB_BITS = $FFFFFFFF;
-  GL_ALPHA4 = $803B;
-  GL_ALPHA8 = $803C;
-  GL_ALPHA12 = $803D;
-  GL_ALPHA16 = $803E;
-  GL_LUMINANCE4 = $803F;
-  GL_LUMINANCE8 = $8040;
-  GL_LUMINANCE12 = $8041;
-  GL_LUMINANCE16 = $8042;
-  GL_LUMINANCE4_ALPHA4 = $8043;
-  GL_LUMINANCE6_ALPHA2 = $8044;
-  GL_LUMINANCE8_ALPHA8 = $8045;
-  GL_LUMINANCE12_ALPHA4 = $8046;
-  GL_LUMINANCE12_ALPHA12 = $8047;
-  GL_LUMINANCE16_ALPHA16 = $8048;
-  GL_INTENSITY = $8049;
-  GL_INTENSITY4 = $804A;
-  GL_INTENSITY8 = $804B;
-  GL_INTENSITY12 = $804C;
-  GL_INTENSITY16 = $804D;
-  GL_TEXTURE_LUMINANCE_SIZE = $8060;
-  GL_TEXTURE_INTENSITY_SIZE = $8061;
-  GL_TEXTURE_PRIORITY = $8066;
-  GL_TEXTURE_RESIDENT = $8067;
-  GL_VERTEX_ARRAY = $8074;
-  GL_NORMAL_ARRAY = $8075;
-  GL_COLOR_ARRAY = $8076;
-  GL_INDEX_ARRAY = $8077;
-  GL_TEXTURE_COORD_ARRAY = $8078;
-  GL_EDGE_FLAG_ARRAY = $8079;
-  GL_VERTEX_ARRAY_SIZE = $807A;
-  GL_VERTEX_ARRAY_TYPE = $807B;
-  GL_VERTEX_ARRAY_STRIDE = $807C;
-  GL_NORMAL_ARRAY_TYPE = $807E;
-  GL_NORMAL_ARRAY_STRIDE = $807F;
-  GL_COLOR_ARRAY_SIZE = $8081;
-  GL_COLOR_ARRAY_TYPE = $8082;
-  GL_COLOR_ARRAY_STRIDE = $8083;
-  GL_INDEX_ARRAY_TYPE = $8085;
-  GL_INDEX_ARRAY_STRIDE = $8086;
-  GL_TEXTURE_COORD_ARRAY_SIZE = $8088;
-  GL_TEXTURE_COORD_ARRAY_TYPE = $8089;
-  GL_TEXTURE_COORD_ARRAY_STRIDE = $808A;
-  GL_EDGE_FLAG_ARRAY_STRIDE = $808C;
-  GL_VERTEX_ARRAY_POINTER = $808E;
-  GL_NORMAL_ARRAY_POINTER = $808F;
-  GL_COLOR_ARRAY_POINTER = $8090;
-  GL_INDEX_ARRAY_POINTER = $8091;
-  GL_TEXTURE_COORD_ARRAY_POINTER = $8092;
-  GL_EDGE_FLAG_ARRAY_POINTER = $8093;
-  GL_V2F = $2A20;
-  GL_V3F = $2A21;
-  GL_C4UB_V2F = $2A22;
-  GL_C4UB_V3F = $2A23;
-  GL_C3F_V3F = $2A24;
-  GL_N3F_V3F = $2A25;
-  GL_C4F_N3F_V3F = $2A26;
-  GL_T2F_V3F = $2A27;
-  GL_T4F_V4F = $2A28;
-  GL_T2F_C4UB_V3F = $2A29;
-  GL_T2F_C3F_V3F = $2A2A;
-  GL_T2F_N3F_V3F = $2A2B;
-  GL_T2F_C4F_N3F_V3F = $2A2C;
-  GL_T4F_C4F_N3F_V4F = $2A2D;
-  GL_COLOR_TABLE_FORMAT_EXT = $80D8;
-  GL_COLOR_TABLE_WIDTH_EXT = $80D9;
-  GL_COLOR_TABLE_RED_SIZE_EXT = $80DA;
-  GL_COLOR_TABLE_GREEN_SIZE_EXT = $80DB;
-  GL_COLOR_TABLE_BLUE_SIZE_EXT = $80DC;
-  GL_COLOR_TABLE_ALPHA_SIZE_EXT = $80DD;
-  GL_COLOR_TABLE_LUMINANCE_SIZE_EXT = $80DE;
-  GL_COLOR_TABLE_INTENSITY_SIZE_EXT = $80DF;
-  GL_LOGIC_OP = GL_INDEX_LOGIC_OP;
-  GL_TEXTURE_COMPONENTS = GL_TEXTURE_INTERNAL_FORMAT;
-  // end deprecated
-
-  // GL_VERSION_1_2
-  GL_UNSIGNED_BYTE_3_3_2 = $8032;
-  GL_UNSIGNED_SHORT_4_4_4_4 = $8033;
-  GL_UNSIGNED_SHORT_5_5_5_1 = $8034;
-  GL_UNSIGNED_INT_8_8_8_8 = $8035;
-  GL_UNSIGNED_INT_10_10_10_2 = $8036;
-  GL_TEXTURE_BINDING_3D = $806A;
-  GL_PACK_SKIP_IMAGES = $806B;
-  GL_PACK_IMAGE_HEIGHT = $806C;
-  GL_UNPACK_SKIP_IMAGES = $806D;
-  GL_UNPACK_IMAGE_HEIGHT = $806E;
-  GL_TEXTURE_3D = $806F;
-  GL_PROXY_TEXTURE_3D = $8070;
-  GL_TEXTURE_DEPTH = $8071;
-  GL_TEXTURE_WRAP_R = $8072;
-  GL_MAX_3D_TEXTURE_SIZE = $8073;
-  GL_UNSIGNED_BYTE_2_3_3_REV = $8362;
-  GL_UNSIGNED_SHORT_5_6_5 = $8363;
-  GL_UNSIGNED_SHORT_5_6_5_REV = $8364;
-  GL_UNSIGNED_SHORT_4_4_4_4_REV = $8365;
-  GL_UNSIGNED_SHORT_1_5_5_5_REV = $8366;
-  GL_UNSIGNED_INT_8_8_8_8_REV = $8367;
-  GL_UNSIGNED_INT_2_10_10_10_REV = $8368;
-  GL_BGR = $80E0;
-  GL_BGRA = $80E1;
-  GL_MAX_ELEMENTS_VERTICES = $80E8;
-  GL_MAX_ELEMENTS_INDICES = $80E9;
-  GL_CLAMP_TO_EDGE = $812F;
-  GL_TEXTURE_MIN_LOD = $813A;
-  GL_TEXTURE_MAX_LOD = $813B;
-  GL_TEXTURE_BASE_LEVEL = $813C;
-  GL_TEXTURE_MAX_LEVEL = $813D;
-  GL_SMOOTH_POINT_SIZE_RANGE = $0B12;
-  GL_SMOOTH_POINT_SIZE_GRANULARITY = $0B13;
-  GL_SMOOTH_LINE_WIDTH_RANGE = $0B22;
-  GL_SMOOTH_LINE_WIDTH_GRANULARITY = $0B23;
-  GL_ALIASED_LINE_WIDTH_RANGE = $846E;
-  // deprecated
-  GL_RESCALE_NORMAL = $803A;
-  GL_LIGHT_MODEL_COLOR_CONTROL = $81F8;
-  GL_SINGLE_COLOR = $81F9;
-  GL_SEPARATE_SPECULAR_COLOR = $81FA;
-  GL_ALIASED_POINT_SIZE_RANGE = $846D;
-  // end deprecated
-
-  // GL_VERSION_1_3
-  GL_TEXTURE0 = $84C0;
-  GL_TEXTURE1 = $84C1;
-  GL_TEXTURE2 = $84C2;
-  GL_TEXTURE3 = $84C3;
-  GL_TEXTURE4 = $84C4;
-  GL_TEXTURE5 = $84C5;
-  GL_TEXTURE6 = $84C6;
-  GL_TEXTURE7 = $84C7;
-  GL_TEXTURE8 = $84C8;
-  GL_TEXTURE9 = $84C9;
-  GL_TEXTURE10 = $84CA;
-  GL_TEXTURE11 = $84CB;
-  GL_TEXTURE12 = $84CC;
-  GL_TEXTURE13 = $84CD;
-  GL_TEXTURE14 = $84CE;
-  GL_TEXTURE15 = $84CF;
-  GL_TEXTURE16 = $84D0;
-  GL_TEXTURE17 = $84D1;
-  GL_TEXTURE18 = $84D2;
-  GL_TEXTURE19 = $84D3;
-  GL_TEXTURE20 = $84D4;
-  GL_TEXTURE21 = $84D5;
-  GL_TEXTURE22 = $84D6;
-  GL_TEXTURE23 = $84D7;
-  GL_TEXTURE24 = $84D8;
-  GL_TEXTURE25 = $84D9;
-  GL_TEXTURE26 = $84DA;
-  GL_TEXTURE27 = $84DB;
-  GL_TEXTURE28 = $84DC;
-  GL_TEXTURE29 = $84DD;
-  GL_TEXTURE30 = $84DE;
-  GL_TEXTURE31 = $84DF;
-  GL_ACTIVE_TEXTURE = $84E0;
-  GL_MULTISAMPLE = $809D;
-  GL_SAMPLE_ALPHA_TO_COVERAGE = $809E;
-  GL_SAMPLE_ALPHA_TO_ONE = $809F;
-  GL_SAMPLE_COVERAGE = $80A0;
-  GL_SAMPLE_BUFFERS = $80A8;
-  GL_SAMPLES = $80A9;
-  GL_SAMPLE_COVERAGE_VALUE = $80AA;
-  GL_SAMPLE_COVERAGE_INVERT = $80AB;
-  GL_TEXTURE_CUBE_MAP = $8513;
-  GL_TEXTURE_BINDING_CUBE_MAP = $8514;
-  GL_TEXTURE_CUBE_MAP_POSITIVE_X = $8515;
-  GL_TEXTURE_CUBE_MAP_NEGATIVE_X = $8516;
-  GL_TEXTURE_CUBE_MAP_POSITIVE_Y = $8517;
-  GL_TEXTURE_CUBE_MAP_NEGATIVE_Y = $8518;
-  GL_TEXTURE_CUBE_MAP_POSITIVE_Z = $8519;
-  GL_TEXTURE_CUBE_MAP_NEGATIVE_Z = $851A;
-  GL_PROXY_TEXTURE_CUBE_MAP = $851B;
-  GL_MAX_CUBE_MAP_TEXTURE_SIZE = $851C;
-  GL_COMPRESSED_RGB = $84ED;
-  GL_COMPRESSED_RGBA = $84EE;
-  GL_TEXTURE_COMPRESSION_HINT = $84EF;
-  GL_TEXTURE_COMPRESSED_IMAGE_SIZE = $86A0;
-  GL_TEXTURE_COMPRESSED = $86A1;
-  GL_NUM_COMPRESSED_TEXTURE_FORMATS = $86A2;
-  GL_COMPRESSED_TEXTURE_FORMATS = $86A3;
-  GL_CLAMP_TO_BORDER = $812D;
-  // deprecated
-  GL_CLIENT_ACTIVE_TEXTURE = $84E1;
-  GL_MAX_TEXTURE_UNITS = $84E2;
-  GL_TRANSPOSE_MODELVIEW_MATRIX = $84E3;
-  GL_TRANSPOSE_PROJECTION_MATRIX = $84E4;
-  GL_TRANSPOSE_TEXTURE_MATRIX = $84E5;
-  GL_TRANSPOSE_COLOR_MATRIX = $84E6;
-  GL_MULTISAMPLE_BIT = $20000000;
-  GL_NORMAL_MAP = $8511;
-  GL_REFLECTION_MAP = $8512;
-  GL_COMPRESSED_ALPHA = $84E9;
-  GL_COMPRESSED_LUMINANCE = $84EA;
-  GL_COMPRESSED_LUMINANCE_ALPHA = $84EB;
-  GL_COMPRESSED_INTENSITY = $84EC;
-  GL_COMBINE = $8570;
-  GL_COMBINE_RGB = $8571;
-  GL_COMBINE_ALPHA = $8572;
-  GL_SOURCE0_RGB = $8580;
-  GL_SOURCE1_RGB = $8581;
-  GL_SOURCE2_RGB = $8582;
-  GL_SOURCE0_ALPHA = $8588;
-  GL_SOURCE1_ALPHA = $8589;
-  GL_SOURCE2_ALPHA = $858A;
-  GL_OPERAND0_RGB = $8590;
-  GL_OPERAND1_RGB = $8591;
-  GL_OPERAND2_RGB = $8592;
-  GL_OPERAND0_ALPHA = $8598;
-  GL_OPERAND1_ALPHA = $8599;
-  GL_OPERAND2_ALPHA = $859A;
-  GL_RGB_SCALE = $8573;
-  GL_ADD_SIGNED = $8574;
-  GL_INTERPOLATE = $8575;
-  GL_SUBTRACT = $84E7;
-  GL_CONSTANT = $8576;
-  GL_PRIMARY_COLOR = $8577;
-  GL_PREVIOUS = $8578;
-  GL_DOT3_RGB = $86AE;
-  GL_DOT3_RGBA = $86AF;
-  // end deprecated
-
-  // GL_VERSION_1_4
-  GL_BLEND_DST_RGB = $80C8;
-  GL_BLEND_SRC_RGB = $80C9;
-  GL_BLEND_DST_ALPHA = $80CA;
-  GL_BLEND_SRC_ALPHA = $80CB;
-  GL_POINT_FADE_THRESHOLD_SIZE = $8128;
-  GL_DEPTH_COMPONENT16 = $81A5;
-  GL_DEPTH_COMPONENT24 = $81A6;
-  GL_DEPTH_COMPONENT32 = $81A7;
-  GL_MIRRORED_REPEAT = $8370;
-  GL_MAX_TEXTURE_LOD_BIAS = $84FD;
-  GL_TEXTURE_LOD_BIAS = $8501;
-  GL_INCR_WRAP = $8507;
-  GL_DECR_WRAP = $8508;
-  GL_TEXTURE_DEPTH_SIZE = $884A;
-  GL_TEXTURE_COMPARE_MODE = $884C;
-  GL_TEXTURE_COMPARE_FUNC = $884D;
-  // deprecated
-  GL_POINT_SIZE_MIN = $8126;
-  GL_POINT_SIZE_MAX = $8127;
-  GL_POINT_DISTANCE_ATTENUATION = $8129;
-  GL_GENERATE_MIPMAP = $8191;
-  GL_GENERATE_MIPMAP_HINT = $8192;
-  GL_FOG_COORDINATE_SOURCE = $8450;
-  GL_FOG_COORDINATE = $8451;
-  GL_FRAGMENT_DEPTH = $8452;
-  GL_CURRENT_FOG_COORDINATE = $8453;
-  GL_FOG_COORDINATE_ARRAY_TYPE = $8454;
-  GL_FOG_COORDINATE_ARRAY_STRIDE = $8455;
-  GL_FOG_COORDINATE_ARRAY_POINTER = $8456;
-  GL_FOG_COORDINATE_ARRAY = $8457;
-  GL_COLOR_SUM = $8458;
-  GL_CURRENT_SECONDARY_COLOR = $8459;
-  GL_SECONDARY_COLOR_ARRAY_SIZE = $845A;
-  GL_SECONDARY_COLOR_ARRAY_TYPE = $845B;
-  GL_SECONDARY_COLOR_ARRAY_STRIDE = $845C;
-  GL_SECONDARY_COLOR_ARRAY_POINTER = $845D;
-  GL_SECONDARY_COLOR_ARRAY = $845E;
-  GL_TEXTURE_FILTER_CONTROL = $8500;
-  GL_DEPTH_TEXTURE_MODE = $884B;
-  GL_COMPARE_R_TO_TEXTURE = $884E;
-  // end deprecated
-
-  // GL_VERSION_1_5
-  GL_BUFFER_SIZE = $8764;
-  GL_BUFFER_USAGE = $8765;
-  GL_QUERY_COUNTER_BITS = $8864;
-  GL_CURRENT_QUERY = $8865;
-  GL_QUERY_RESULT = $8866;
-  GL_QUERY_RESULT_AVAILABLE = $8867;
-  GL_ARRAY_BUFFER = $8892;
-  GL_ELEMENT_ARRAY_BUFFER = $8893;
-  GL_ARRAY_BUFFER_BINDING = $8894;
-  GL_ELEMENT_ARRAY_BUFFER_BINDING = $8895;
-  GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = $889F;
-  GL_READ_ONLY = $88B8;
-  GL_WRITE_ONLY = $88B9;
-  GL_READ_WRITE = $88BA;
-  GL_BUFFER_ACCESS = $88BB;
-  GL_BUFFER_MAPPED = $88BC;
-  GL_BUFFER_MAP_POINTER = $88BD;
-  GL_STREAM_DRAW = $88E0;
-  GL_STREAM_READ = $88E1;
-  GL_STREAM_COPY = $88E2;
-  GL_STATIC_DRAW = $88E4;
-  GL_STATIC_READ = $88E5;
-  GL_STATIC_COPY = $88E6;
-  GL_DYNAMIC_DRAW = $88E8;
-  GL_DYNAMIC_READ = $88E9;
-  GL_DYNAMIC_COPY = $88EA;
-  GL_SAMPLES_PASSED = $8914;
-  // deprecated
-  GL_VERTEX_ARRAY_BUFFER_BINDING = $8896;
-  GL_NORMAL_ARRAY_BUFFER_BINDING = $8897;
-  GL_COLOR_ARRAY_BUFFER_BINDING = $8898;
-  GL_INDEX_ARRAY_BUFFER_BINDING = $8899;
-  GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING = $889A;
-  GL_EDGE_FLAG_ARRAY_BUFFER_BINDING = $889B;
-  GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING = $889C;
-  GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING = $889D;
-  GL_WEIGHT_ARRAY_BUFFER_BINDING = $889E;
-  GL_FOG_COORD_SRC = $8450;
-  GL_FOG_COORD = $8451;
-  GL_CURRENT_FOG_COORD = $8453;
-  GL_FOG_COORD_ARRAY_TYPE = $8454;
-  GL_FOG_COORD_ARRAY_STRIDE = $8455;
-  GL_FOG_COORD_ARRAY_POINTER = $8456;
-  GL_FOG_COORD_ARRAY = $8457;
-  GL_FOG_COORD_ARRAY_BUFFER_BINDING = $889D;
-  GL_SRC0_RGB = $8580;
-  GL_SRC1_RGB = $8581;
-  GL_SRC2_RGB = $8582;
-  GL_SRC0_ALPHA = $8588;
-  GL_SRC1_ALPHA = $8589;
-  GL_SRC2_ALPHA = $858A;
-  // end deprecated
-
-  // GL_VERSION_2_0
-  GL_BLEND_EQUATION_RGB = $8009;
-  GL_VERTEX_ATTRIB_ARRAY_ENABLED = $8622;
-  GL_VERTEX_ATTRIB_ARRAY_SIZE = $8623;
-  GL_VERTEX_ATTRIB_ARRAY_STRIDE = $8624;
-  GL_VERTEX_ATTRIB_ARRAY_TYPE = $8625;
-  GL_CURRENT_VERTEX_ATTRIB = $8626;
-  GL_VERTEX_PROGRAM_POINT_SIZE = $8642;
-  GL_VERTEX_ATTRIB_ARRAY_POINTER = $8645;
-  GL_STENCIL_BACK_FUNC = $8800;
-  GL_STENCIL_BACK_FAIL = $8801;
-  GL_STENCIL_BACK_PASS_DEPTH_FAIL = $8802;
-  GL_STENCIL_BACK_PASS_DEPTH_PASS = $8803;
-  GL_MAX_DRAW_BUFFERS = $8824;
-  GL_DRAW_BUFFER0 = $8825;
-  GL_DRAW_BUFFER1 = $8826;
-  GL_DRAW_BUFFER2 = $8827;
-  GL_DRAW_BUFFER3 = $8828;
-  GL_DRAW_BUFFER4 = $8829;
-  GL_DRAW_BUFFER5 = $882A;
-  GL_DRAW_BUFFER6 = $882B;
-  GL_DRAW_BUFFER7 = $882C;
-  GL_DRAW_BUFFER8 = $882D;
-  GL_DRAW_BUFFER9 = $882E;
-  GL_DRAW_BUFFER10 = $882F;
-  GL_DRAW_BUFFER11 = $8830;
-  GL_DRAW_BUFFER12 = $8831;
-  GL_DRAW_BUFFER13 = $8832;
-  GL_DRAW_BUFFER14 = $8833;
-  GL_DRAW_BUFFER15 = $8834;
-  GL_BLEND_EQUATION_ALPHA = $883D;
-  GL_MAX_VERTEX_ATTRIBS = $8869;
-  GL_VERTEX_ATTRIB_ARRAY_NORMALIZED = $886A;
-  GL_MAX_TEXTURE_IMAGE_UNITS = $8872;
-  GL_FRAGMENT_SHADER = $8B30;
-  GL_VERTEX_SHADER = $8B31;
-  GL_MAX_FRAGMENT_UNIFORM_COMPONENTS = $8B49;
-  GL_MAX_VERTEX_UNIFORM_COMPONENTS = $8B4A;
-  GL_MAX_VARYING_FLOATS = $8B4B;
-  GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS = $8B4C;
-  GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS = $8B4D;
-  GL_SHADER_TYPE = $8B4F;
-  GL_FLOAT_VEC2 = $8B50;
-  GL_FLOAT_VEC3 = $8B51;
-  GL_FLOAT_VEC4 = $8B52;
-  GL_INT_VEC2 = $8B53;
-  GL_INT_VEC3 = $8B54;
-  GL_INT_VEC4 = $8B55;
-  GL_BOOL = $8B56;
-  GL_BOOL_VEC2 = $8B57;
-  GL_BOOL_VEC3 = $8B58;
-  GL_BOOL_VEC4 = $8B59;
-  GL_FLOAT_MAT2 = $8B5A;
-  GL_FLOAT_MAT3 = $8B5B;
-  GL_FLOAT_MAT4 = $8B5C;
-  GL_SAMPLER_1D = $8B5D;
-  GL_SAMPLER_2D = $8B5E;
-  GL_SAMPLER_3D = $8B5F;
-  GL_SAMPLER_CUBE = $8B60;
-  GL_SAMPLER_1D_SHADOW = $8B61;
-  GL_SAMPLER_2D_SHADOW = $8B62;
-  GL_DELETE_STATUS = $8B80;
-  GL_COMPILE_STATUS = $8B81;
-  GL_LINK_STATUS = $8B82;
-  GL_VALIDATE_STATUS = $8B83;
-  GL_INFO_LOG_LENGTH = $8B84;
-  GL_ATTACHED_SHADERS = $8B85;
-  GL_ACTIVE_UNIFORMS = $8B86;
-  GL_ACTIVE_UNIFORM_MAX_LENGTH = $8B87;
-  GL_SHADER_SOURCE_LENGTH = $8B88;
-  GL_ACTIVE_ATTRIBUTES = $8B89;
-  GL_ACTIVE_ATTRIBUTE_MAX_LENGTH = $8B8A;
-  GL_FRAGMENT_SHADER_DERIVATIVE_HINT = $8B8B;
-  GL_SHADING_LANGUAGE_VERSION = $8B8C;
-  GL_CURRENT_PROGRAM = $8B8D;
-  GL_POINT_SPRITE_COORD_ORIGIN = $8CA0;
-  GL_LOWER_LEFT = $8CA1;
-  GL_UPPER_LEFT = $8CA2;
-  GL_STENCIL_BACK_REF = $8CA3;
-  GL_STENCIL_BACK_VALUE_MASK = $8CA4;
-  GL_STENCIL_BACK_WRITEMASK = $8CA5;
-  // deprecated
-  GL_VERTEX_PROGRAM_TWO_SIDE = $8643;
-  GL_POINT_SPRITE = $8861;
-  GL_COORD_REPLACE = $8862;
-  GL_MAX_TEXTURE_COORDS = $8871;
-  // end deprecated
-
-  // GL_VERSION_2_1
-  GL_PIXEL_PACK_BUFFER = $88EB;
-  GL_PIXEL_UNPACK_BUFFER = $88EC;
-  GL_PIXEL_PACK_BUFFER_BINDING = $88ED;
-  GL_PIXEL_UNPACK_BUFFER_BINDING = $88EF;
-  GL_FLOAT_MAT2x3 = $8B65;
-  GL_FLOAT_MAT2x4 = $8B66;
-  GL_FLOAT_MAT3x2 = $8B67;
-  GL_FLOAT_MAT3x4 = $8B68;
-  GL_FLOAT_MAT4x2 = $8B69;
-  GL_FLOAT_MAT4x3 = $8B6A;
-  GL_SRGB = $8C40;
-  GL_SRGB8 = $8C41;
-  GL_SRGB_ALPHA = $8C42;
-  GL_SRGB8_ALPHA8 = $8C43;
-  GL_COMPRESSED_SRGB = $8C48;
-  GL_COMPRESSED_SRGB_ALPHA = $8C49;
-  // deprecated
-  GL_CURRENT_RASTER_SECONDARY_COLOR = $845F;
-  GL_SLUMINANCE_ALPHA = $8C44;
-  GL_SLUMINANCE8_ALPHA8 = $8C45;
-  GL_SLUMINANCE = $8C46;
-  GL_SLUMINANCE8 = $8C47;
-  GL_COMPRESSED_SLUMINANCE = $8C4A;
-  GL_COMPRESSED_SLUMINANCE_ALPHA = $8C4B;
-  // end deprecated
-
-  // GL_VERSION_3_0
-  GL_COMPARE_REF_TO_TEXTURE = $884E;
-  GL_CLIP_DISTANCE0 = $3000;
-  GL_CLIP_DISTANCE1 = $3001;
-  GL_CLIP_DISTANCE2 = $3002;
-  GL_CLIP_DISTANCE3 = $3003;
-  GL_CLIP_DISTANCE4 = $3004;
-  GL_CLIP_DISTANCE5 = $3005;
-  GL_CLIP_DISTANCE6 = $3006;
-  GL_CLIP_DISTANCE7 = $3007;
-  GL_MAX_CLIP_DISTANCES = $0D32;
-  GL_MAJOR_VERSION = $821B;
-  GL_MINOR_VERSION = $821C;
-  GL_NUM_EXTENSIONS = $821D;
-  GL_CONTEXT_FLAGS = $821E;
-  GL_DEPTH_BUFFER = $8223;
-  GL_STENCIL_BUFFER = $8224;
-  GL_COMPRESSED_RED = $8225;
-  GL_COMPRESSED_RG = $8226;
-  GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT = $0001;
-  GL_RGBA32F = $8814;
-  GL_RGB32F = $8815;
-  GL_RGBA16F = $881A;
-  GL_RGB16F = $881B;
-  GL_VERTEX_ATTRIB_ARRAY_INTEGER = $88FD;
-  GL_MAX_ARRAY_TEXTURE_LAYERS = $88FF;
-  GL_MIN_PROGRAM_TEXEL_OFFSET = $8904;
-  GL_MAX_PROGRAM_TEXEL_OFFSET = $8905;
-  GL_CLAMP_READ_COLOR = $891C;
-  GL_FIXED_ONLY = $891D;
-  GL_MAX_VARYING_COMPONENTS = $8B4B;
-  GL_TEXTURE_1D_ARRAY = $8C18;
-  GL_PROXY_TEXTURE_1D_ARRAY = $8C19;
-  GL_TEXTURE_2D_ARRAY = $8C1A;
-  GL_PROXY_TEXTURE_2D_ARRAY = $8C1B;
-  GL_TEXTURE_BINDING_1D_ARRAY = $8C1C;
-  GL_TEXTURE_BINDING_2D_ARRAY = $8C1D;
-  GL_R11F_G11F_B10F = $8C3A;
-  GL_UNSIGNED_INT_10F_11F_11F_REV = $8C3B;
-  GL_RGB9_E5 = $8C3D;
-  GL_UNSIGNED_INT_5_9_9_9_REV = $8C3E;
-  GL_TEXTURE_SHARED_SIZE = $8C3F;
-  GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH = $8C76;
-  GL_TRANSFORM_FEEDBACK_BUFFER_MODE = $8C7F;
-  GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS = $8C80;
-  GL_TRANSFORM_FEEDBACK_VARYINGS = $8C83;
-  GL_TRANSFORM_FEEDBACK_BUFFER_START = $8C84;
-  GL_TRANSFORM_FEEDBACK_BUFFER_SIZE = $8C85;
-  GL_PRIMITIVES_GENERATED = $8C87;
-  GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN = $8C88;
-  GL_RASTERIZER_DISCARD = $8C89;
-  GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = $8C8A;
-  GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = $8C8B;
-  GL_INTERLEAVED_ATTRIBS = $8C8C;
-  GL_SEPARATE_ATTRIBS = $8C8D;
-  GL_TRANSFORM_FEEDBACK_BUFFER = $8C8E;
-  GL_TRANSFORM_FEEDBACK_BUFFER_BINDING = $8C8F;
-  GL_RGBA32UI = $8D70;
-  GL_RGB32UI = $8D71;
-  GL_RGBA16UI = $8D76;
-  GL_RGB16UI = $8D77;
-  GL_RGBA8UI = $8D7C;
-  GL_RGB8UI = $8D7D;
-  GL_RGBA32I = $8D82;
-  GL_RGB32I = $8D83;
-  GL_RGBA16I = $8D88;
-  GL_RGB16I = $8D89;
-  GL_RGBA8I = $8D8E;
-  GL_RGB8I = $8D8F;
-  GL_RED_INTEGER = $8D94;
-  GL_GREEN_INTEGER = $8D95;
-  GL_BLUE_INTEGER = $8D96;
-  GL_RGB_INTEGER = $8D98;
-  GL_RGBA_INTEGER = $8D99;
-  GL_BGR_INTEGER = $8D9A;
-  GL_BGRA_INTEGER = $8D9B;
-  GL_SAMPLER_1D_ARRAY = $8DC0;
-  GL_SAMPLER_2D_ARRAY = $8DC1;
-  GL_SAMPLER_1D_ARRAY_SHADOW = $8DC3;
-  GL_SAMPLER_2D_ARRAY_SHADOW = $8DC4;
-  GL_SAMPLER_CUBE_SHADOW = $8DC5;
-  GL_UNSIGNED_INT_VEC2 = $8DC6;
-  GL_UNSIGNED_INT_VEC3 = $8DC7;
-  GL_UNSIGNED_INT_VEC4 = $8DC8;
-  GL_INT_SAMPLER_1D = $8DC9;
-  GL_INT_SAMPLER_2D = $8DCA;
-  GL_INT_SAMPLER_3D = $8DCB;
-  GL_INT_SAMPLER_CUBE = $8DCC;
-  GL_INT_SAMPLER_1D_ARRAY = $8DCE;
-  GL_INT_SAMPLER_2D_ARRAY = $8DCF;
-  GL_UNSIGNED_INT_SAMPLER_1D = $8DD1;
-  GL_UNSIGNED_INT_SAMPLER_2D = $8DD2;
-  GL_UNSIGNED_INT_SAMPLER_3D = $8DD3;
-  GL_UNSIGNED_INT_SAMPLER_CUBE = $8DD4;
-  GL_UNSIGNED_INT_SAMPLER_1D_ARRAY = $8DD6;
-  GL_UNSIGNED_INT_SAMPLER_2D_ARRAY = $8DD7;
-  GL_QUERY_WAIT = $8E13;
-  GL_QUERY_NO_WAIT = $8E14;
-  GL_QUERY_BY_REGION_WAIT = $8E15;
-  GL_QUERY_BY_REGION_NO_WAIT = $8E16;
-  GL_BUFFER_ACCESS_FLAGS = $911F;
-  GL_BUFFER_MAP_LENGTH = $9120;
-  GL_BUFFER_MAP_OFFSET = $9121;
-  { Reuse tokens from ARB_depth_buffer_float }
-  { reuse GL_DEPTH_COMPONENT32F }
-  { reuse GL_DEPTH32F_STENCIL8 }
-  { reuse GL_FLOAT_32_UNSIGNED_INT_24_8_REV }
-  { Reuse tokens from ARB_framebuffer_object }
-  { reuse GL_INVALID_FRAMEBUFFER_OPERATION }
-  { reuse GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING }
-  { reuse GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE }
-  { reuse GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE }
-  { reuse GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE }
-  { reuse GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE }
-  { reuse GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE }
-  { reuse GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE }
-  { reuse GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE }
-  { reuse GL_FRAMEBUFFER_DEFAULT }
-  { reuse GL_FRAMEBUFFER_UNDEFINED }
-  { reuse GL_DEPTH_STENCIL_ATTACHMENT }
-  { reuse GL_INDEX }
-  { reuse GL_MAX_RENDERBUFFER_SIZE }
-  { reuse GL_DEPTH_STENCIL }
-  { reuse GL_UNSIGNED_INT_24_8 }
-  { reuse GL_DEPTH24_STENCIL8 }
-  { reuse GL_TEXTURE_STENCIL_SIZE }
-  { reuse GL_TEXTURE_RED_TYPE }
-  { reuse GL_TEXTURE_GREEN_TYPE }
-  { reuse GL_TEXTURE_BLUE_TYPE }
-  { reuse GL_TEXTURE_ALPHA_TYPE }
-  { reuse GL_TEXTURE_DEPTH_TYPE }
-  { reuse GL_UNSIGNED_NORMALIZED }
-  { reuse GL_FRAMEBUFFER_BINDING }
-  { reuse GL_DRAW_FRAMEBUFFER_BINDING }
-  { reuse GL_RENDERBUFFER_BINDING }
-  { reuse GL_READ_FRAMEBUFFER }
-  { reuse GL_DRAW_FRAMEBUFFER }
-  { reuse GL_READ_FRAMEBUFFER_BINDING }
-  { reuse GL_RENDERBUFFER_SAMPLES }
-  { reuse GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE }
-  { reuse GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME }
-  { reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL }
-  { reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE }
-  { reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER }
-  { reuse GL_FRAMEBUFFER_COMPLETE }
-  { reuse GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT }
-  { reuse GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT }
-  { reuse GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER }
-  { reuse GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER }
-  { reuse GL_FRAMEBUFFER_UNSUPPORTED }
-  { reuse GL_MAX_COLOR_ATTACHMENTS }
-  { reuse GL_COLOR_ATTACHMENT0 }
-  { reuse GL_COLOR_ATTACHMENT1 }
-  { reuse GL_COLOR_ATTACHMENT2 }
-  { reuse GL_COLOR_ATTACHMENT3 }
-  { reuse GL_COLOR_ATTACHMENT4 }
-  { reuse GL_COLOR_ATTACHMENT5 }
-  { reuse GL_COLOR_ATTACHMENT6 }
-  { reuse GL_COLOR_ATTACHMENT7 }
-  { reuse GL_COLOR_ATTACHMENT8 }
-  { reuse GL_COLOR_ATTACHMENT9 }
-  { reuse GL_COLOR_ATTACHMENT10 }
-  { reuse GL_COLOR_ATTACHMENT11 }
-  { reuse GL_COLOR_ATTACHMENT12 }
-  { reuse GL_COLOR_ATTACHMENT13 }
-  { reuse GL_COLOR_ATTACHMENT14 }
-  { reuse GL_COLOR_ATTACHMENT15 }
-  { reuse GL_DEPTH_ATTACHMENT }
-  { reuse GL_STENCIL_ATTACHMENT }
-  { reuse GL_FRAMEBUFFER }
-  { reuse GL_RENDERBUFFER }
-  { reuse GL_RENDERBUFFER_WIDTH }
-  { reuse GL_RENDERBUFFER_HEIGHT }
-  { reuse GL_RENDERBUFFER_INTERNAL_FORMAT }
-  { reuse GL_STENCIL_INDEX1 }
-  { reuse GL_STENCIL_INDEX4 }
-  { reuse GL_STENCIL_INDEX8 }
-  { reuse GL_STENCIL_INDEX16 }
-  { reuse GL_RENDERBUFFER_RED_SIZE }
-  { reuse GL_RENDERBUFFER_GREEN_SIZE }
-  { reuse GL_RENDERBUFFER_BLUE_SIZE }
-  { reuse GL_RENDERBUFFER_ALPHA_SIZE }
-  { reuse GL_RENDERBUFFER_DEPTH_SIZE }
-  { reuse GL_RENDERBUFFER_STENCIL_SIZE }
-  { reuse GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE }
-  { reuse GL_MAX_SAMPLES }
-  { Reuse tokens from ARB_framebuffer_sRGB }
-  { reuse GL_FRAMEBUFFER_SRGB }
-  { Reuse tokens from ARB_half_float_vertex }
-  { reuse GL_HALF_FLOAT }
-  { Reuse tokens from ARB_map_buffer_range }
-  { reuse GL_MAP_READ_BIT }
-  { reuse GL_MAP_WRITE_BIT }
-  { reuse GL_MAP_INVALIDATE_RANGE_BIT }
-  { reuse GL_MAP_INVALIDATE_BUFFER_BIT }
-  { reuse GL_MAP_FLUSH_EXPLICIT_BIT }
-  { reuse GL_MAP_UNSYNCHRONIZED_BIT }
-  { Reuse tokens from ARB_texture_compression_rgtc }
-  { reuse GL_COMPRESSED_RED_RGTC1 }
-  { reuse GL_COMPRESSED_SIGNED_RED_RGTC1 }
-  { reuse GL_COMPRESSED_RG_RGTC2 }
-  { reuse GL_COMPRESSED_SIGNED_RG_RGTC2 }
-  { Reuse tokens from ARB_texture_rg }
-  { reuse GL_RG }
-  { reuse GL_RG_INTEGER }
-  { reuse GL_R8 }
-  { reuse GL_R16 }
-  { reuse GL_RG8 }
-  { reuse GL_RG16 }
-  { reuse GL_R16F }
-  { reuse GL_R32F }
-  { reuse GL_RG16F }
-  { reuse GL_RG32F }
-  { reuse GL_R8I }
-  { reuse GL_R8UI }
-  { reuse GL_R16I }
-  { reuse GL_R16UI }
-  { reuse GL_R32I }
-  { reuse GL_R32UI }
-  { reuse GL_RG8I }
-  { reuse GL_RG8UI }
-  { reuse GL_RG16I }
-  { reuse GL_RG16UI }
-  { reuse GL_RG32I }
-  { reuse GL_RG32UI }
-  { Reuse tokens from ARB_vertex_array_object }
-  { reuse GL_VERTEX_ARRAY_BINDING }
-  // deprecated
-  GL_CLAMP_VERTEX_COLOR = $891A;
-  GL_CLAMP_FRAGMENT_COLOR = $891B;
-  GL_ALPHA_INTEGER = $8D97;
-  { Reuse tokens from ARB_framebuffer_object }
-  { reuse GL_TEXTURE_LUMINANCE_TYPE }
-  { reuse GL_TEXTURE_INTENSITY_TYPE }
-  // end deprecated
-
-  // GL_VERSION_3_1
-  GL_SAMPLER_2D_RECT = $8B63;
-  GL_SAMPLER_2D_RECT_SHADOW = $8B64;
-  GL_SAMPLER_BUFFER = $8DC2;
-  GL_INT_SAMPLER_2D_RECT = $8DCD;
-  GL_INT_SAMPLER_BUFFER = $8DD0;
-  GL_UNSIGNED_INT_SAMPLER_2D_RECT = $8DD5;
-  GL_UNSIGNED_INT_SAMPLER_BUFFER = $8DD8;
-  GL_TEXTURE_BUFFER = $8C2A;
-  GL_MAX_TEXTURE_BUFFER_SIZE = $8C2B;
-  GL_TEXTURE_BINDING_BUFFER = $8C2C;
-  GL_TEXTURE_BUFFER_DATA_STORE_BINDING = $8C2D;
-  GL_TEXTURE_BUFFER_FORMAT = $8C2E;
-  GL_TEXTURE_RECTANGLE = $84F5;
-  GL_TEXTURE_BINDING_RECTANGLE = $84F6;
-  GL_PROXY_TEXTURE_RECTANGLE = $84F7;
-  GL_MAX_RECTANGLE_TEXTURE_SIZE = $84F8;
-  GL_RED_SNORM = $8F90;
-  GL_RG_SNORM = $8F91;
-  GL_RGB_SNORM = $8F92;
-  GL_RGBA_SNORM = $8F93;
-  GL_R8_SNORM = $8F94;
-  GL_RG8_SNORM = $8F95;
-  GL_RGB8_SNORM = $8F96;
-  GL_RGBA8_SNORM = $8F97;
-  GL_R16_SNORM = $8F98;
-  GL_RG16_SNORM = $8F99;
-  GL_RGB16_SNORM = $8F9A;
-  GL_RGBA16_SNORM = $8F9B;
-  GL_SIGNED_NORMALIZED = $8F9C;
-  GL_PRIMITIVE_RESTART = $8F9D;
-  GL_PRIMITIVE_RESTART_INDEX = $8F9E;
-  { Reuse tokens from ARB_copy_buffer }
-  { reuse GL_COPY_READ_BUFFER }
-  { reuse GL_COPY_WRITE_BUFFER }
-  { Reuse tokens from ARB_draw_instanced (none) }
-  { Reuse tokens from ARB_uniform_buffer_object }
-  { reuse GL_UNIFORM_BUFFER }
-  { reuse GL_UNIFORM_BUFFER_BINDING }
-  { reuse GL_UNIFORM_BUFFER_START }
-  { reuse GL_UNIFORM_BUFFER_SIZE }
-  { reuse GL_MAX_VERTEX_UNIFORM_BLOCKS }
-  { reuse GL_MAX_FRAGMENT_UNIFORM_BLOCKS }
-  { reuse GL_MAX_COMBINED_UNIFORM_BLOCKS }
-  { reuse GL_MAX_UNIFORM_BUFFER_BINDINGS }
-  { reuse GL_MAX_UNIFORM_BLOCK_SIZE }
-  { reuse GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS }
-  { reuse GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS }
-  { reuse GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT }
-  { reuse GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH }
-  { reuse GL_ACTIVE_UNIFORM_BLOCKS }
-  { reuse GL_UNIFORM_TYPE }
-  { reuse GL_UNIFORM_SIZE }
-  { reuse GL_UNIFORM_NAME_LENGTH }
-  { reuse GL_UNIFORM_BLOCK_INDEX }
-  { reuse GL_UNIFORM_OFFSET }
-  { reuse GL_UNIFORM_ARRAY_STRIDE }
-  { reuse GL_UNIFORM_MATRIX_STRIDE }
-  { reuse GL_UNIFORM_IS_ROW_MAJOR }
-  { reuse GL_UNIFORM_BLOCK_BINDING }
-  { reuse GL_UNIFORM_BLOCK_DATA_SIZE }
-  { reuse GL_UNIFORM_BLOCK_NAME_LENGTH }
-  { reuse GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS }
-  { reuse GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES }
-  { reuse GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER }
-  { reuse GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER }
-  { reuse GL_INVALID_INDEX }
-
-  // GL_VERSION_3_2
-  GL_CONTEXT_CORE_PROFILE_BIT = $00000001;
-  GL_CONTEXT_COMPATIBILITY_PROFILE_BIT = $00000002;
-  GL_LINES_ADJACENCY = $000A;
-  GL_LINE_STRIP_ADJACENCY = $000B;
-  GL_TRIANGLES_ADJACENCY = $000C;
-  GL_TRIANGLE_STRIP_ADJACENCY = $000D;
-  GL_PROGRAM_POINT_SIZE = $8642;
-  GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS = $8C29;
-  GL_FRAMEBUFFER_ATTACHMENT_LAYERED = $8DA7;
-  GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS = $8DA8;
-  GL_GEOMETRY_SHADER = $8DD9;
-  GL_GEOMETRY_VERTICES_OUT = $8916;
-  GL_GEOMETRY_INPUT_TYPE = $8917;
-  GL_GEOMETRY_OUTPUT_TYPE = $8918;
-  GL_MAX_GEOMETRY_UNIFORM_COMPONENTS = $8DDF;
-  GL_MAX_GEOMETRY_OUTPUT_VERTICES = $8DE0;
-  GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS = $8DE1;
-  GL_MAX_VERTEX_OUTPUT_COMPONENTS = $9122;
-  GL_MAX_GEOMETRY_INPUT_COMPONENTS = $9123;
-  GL_MAX_GEOMETRY_OUTPUT_COMPONENTS = $9124;
-  GL_MAX_FRAGMENT_INPUT_COMPONENTS = $9125;
-  GL_CONTEXT_PROFILE_MASK = $9126;
-  { reuse GL_MAX_VARYING_COMPONENTS }
-  { reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER }
-  { Reuse tokens from ARB_depth_clamp }
-  { reuse GL_DEPTH_CLAMP }
-  { Reuse tokens from ARB_draw_elements_base_vertex (none) }
-  { Reuse tokens from ARB_fragment_coord_conventions (none) }
-  { Reuse tokens from ARB_provoking_vertex }
-  { reuse GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION }
-  { reuse GL_FIRST_VERTEX_CONVENTION }
-  { reuse GL_LAST_VERTEX_CONVENTION }
-  { reuse GL_PROVOKING_VERTEX }
-  { Reuse tokens from ARB_seamless_cube_map }
-  { reuse GL_TEXTURE_CUBE_MAP_SEAMLESS }
-  { Reuse tokens from ARB_sync }
-  { reuse GL_MAX_SERVER_WAIT_TIMEOUT }
-  { reuse GL_OBJECT_TYPE }
-  { reuse GL_SYNC_CONDITION }
-  { reuse GL_SYNC_STATUS }
-  { reuse GL_SYNC_FLAGS }
-  { reuse GL_SYNC_FENCE }
-  { reuse GL_SYNC_GPU_COMMANDS_COMPLETE }
-  { reuse GL_UNSIGNALED }
-  { reuse GL_SIGNALED }
-  { reuse GL_ALREADY_SIGNALED }
-  { reuse GL_TIMEOUT_EXPIRED }
-  { reuse GL_CONDITION_SATISFIED }
-  { reuse GL_WAIT_FAILED }
-  { reuse GL_TIMEOUT_IGNORED }
-  { reuse GL_SYNC_FLUSH_COMMANDS_BIT }
-  { reuse GL_TIMEOUT_IGNORED }
-  { Reuse tokens from ARB_texture_multisample }
-  { reuse GL_SAMPLE_POSITION }
-  { reuse GL_SAMPLE_MASK }
-  { reuse GL_SAMPLE_MASK_VALUE }
-  { reuse GL_MAX_SAMPLE_MASK_WORDS }
-  { reuse GL_TEXTURE_2D_MULTISAMPLE }
-  { reuse GL_PROXY_TEXTURE_2D_MULTISAMPLE }
-  { reuse GL_TEXTURE_2D_MULTISAMPLE_ARRAY }
-  { reuse GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY }
-  { reuse GL_TEXTURE_BINDING_2D_MULTISAMPLE }
-  { reuse GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY }
-  { reuse GL_TEXTURE_SAMPLES }
-  { reuse GL_TEXTURE_FIXED_SAMPLE_LOCATIONS }
-  { reuse GL_SAMPLER_2D_MULTISAMPLE }
-  { reuse GL_INT_SAMPLER_2D_MULTISAMPLE }
-  { reuse GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE }
-  { reuse GL_SAMPLER_2D_MULTISAMPLE_ARRAY }
-  { reuse GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY }
-  { reuse GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY }
-  { reuse GL_MAX_COLOR_TEXTURE_SAMPLES }
-  { reuse GL_MAX_DEPTH_TEXTURE_SAMPLES }
-  { reuse GL_MAX_INTEGER_SAMPLES }
-  { Don't need to reuse tokens from ARB_vertex_array_bgra since they're already in 1.2 core }
-
-  // GL_VERSION_3_3
-  GL_VERTEX_ATTRIB_ARRAY_DIVISOR = $88FE;
-  { Reuse tokens from ARB_blend_func_extended }
-  { reuse GL_SRC1_COLOR }
-  { reuse GL_ONE_MINUS_SRC1_COLOR }
-  { reuse GL_ONE_MINUS_SRC1_ALPHA }
-  { reuse GL_MAX_DUAL_SOURCE_DRAW_BUFFERS }
-  { Reuse tokens from ARB_explicit_attrib_location (none) }
-  { Reuse tokens from ARB_occlusion_query2 }
-  { reuse GL_ANY_SAMPLES_PASSED }
-  { Reuse tokens from ARB_sampler_objects }
-  { reuse GL_SAMPLER_BINDING }
-  { Reuse tokens from ARB_shader_bit_encoding (none) }
-  { Reuse tokens from ARB_texture_rgb10_a2ui }
-  { reuse GL_RGB10_A2UI }
-  { Reuse tokens from ARB_texture_swizzle }
-  { reuse GL_TEXTURE_SWIZZLE_R }
-  { reuse GL_TEXTURE_SWIZZLE_G }
-  { reuse GL_TEXTURE_SWIZZLE_B }
-  { reuse GL_TEXTURE_SWIZZLE_A }
-  { reuse GL_TEXTURE_SWIZZLE_RGBA }
-  { Reuse tokens from ARB_timer_query }
-  { reuse GL_TIME_ELAPSED }
-  { reuse GL_TIMESTAMP }
-  { Reuse tokens from ARB_vertex_type_2_10_10_10_rev }
-  { reuse GL_INT_2_10_10_10_REV }
-
-  // GL_VERSION_4_0
-  GL_SAMPLE_SHADING = $8C36;
-  GL_MIN_SAMPLE_SHADING_VALUE = $8C37;
-  GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET = $8E5E;
-  GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET = $8E5F;
-  GL_TEXTURE_CUBE_MAP_ARRAY = $9009;
-  GL_TEXTURE_BINDING_CUBE_MAP_ARRAY = $900A;
-  GL_PROXY_TEXTURE_CUBE_MAP_ARRAY = $900B;
-  GL_SAMPLER_CUBE_MAP_ARRAY = $900C;
-  GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW = $900D;
-  GL_INT_SAMPLER_CUBE_MAP_ARRAY = $900E;
-  GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY = $900F;
-  { Reuse tokens from ARB_texture_query_lod (none) }
-  { Reuse tokens from ARB_draw_buffers_blend (none) }
-  { Reuse tokens from ARB_draw_indirect }
-  { reuse GL_DRAW_INDIRECT_BUFFER }
-  { reuse GL_DRAW_INDIRECT_BUFFER_BINDING }
-  { Reuse tokens from ARB_gpu_shader5 }
-  { reuse GL_GEOMETRY_SHADER_INVOCATIONS }
-  { reuse GL_MAX_GEOMETRY_SHADER_INVOCATIONS }
-  { reuse GL_MIN_FRAGMENT_INTERPOLATION_OFFSET }
-  { reuse GL_MAX_FRAGMENT_INTERPOLATION_OFFSET }
-  { reuse GL_FRAGMENT_INTERPOLATION_OFFSET_BITS }
-  { reuse GL_MAX_VERTEX_STREAMS }
-  { Reuse tokens from ARB_gpu_shader_fp64 }
-  { reuse GL_DOUBLE_VEC2 }
-  { reuse GL_DOUBLE_VEC3 }
-  { reuse GL_DOUBLE_VEC4 }
-  { reuse GL_DOUBLE_MAT2 }
-  { reuse GL_DOUBLE_MAT3 }
-  { reuse GL_DOUBLE_MAT4 }
-  { reuse GL_DOUBLE_MAT2x3 }
-  { reuse GL_DOUBLE_MAT2x4 }
-  { reuse GL_DOUBLE_MAT3x2 }
-  { reuse GL_DOUBLE_MAT3x4 }
-  { reuse GL_DOUBLE_MAT4x2 }
-  { reuse GL_DOUBLE_MAT4x3 }
-  { Reuse tokens from ARB_shader_subroutine }
-  { reuse GL_ACTIVE_SUBROUTINES }
-  { reuse GL_ACTIVE_SUBROUTINE_UNIFORMS }
-  { reuse GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS }
-  { reuse GL_ACTIVE_SUBROUTINE_MAX_LENGTH }
-  { reuse GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH }
-  { reuse GL_MAX_SUBROUTINES }
-  { reuse GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS }
-  { reuse GL_NUM_COMPATIBLE_SUBROUTINES }
-  { reuse GL_COMPATIBLE_SUBROUTINES }
-  { Reuse tokens from ARB_tessellation_shader }
-  { reuse GL_PATCHES }
-  { reuse GL_PATCH_VERTICES }
-  { reuse GL_PATCH_DEFAULT_INNER_LEVEL }
-  { reuse GL_PATCH_DEFAULT_OUTER_LEVEL }
-  { reuse GL_TESS_CONTROL_OUTPUT_VERTICES }
-  { reuse GL_TESS_GEN_MODE }
-  { reuse GL_TESS_GEN_SPACING }
-  { reuse GL_TESS_GEN_VERTEX_ORDER }
-  { reuse GL_TESS_GEN_POINT_MODE }
-  { reuse GL_ISOLINES }
-  { reuse GL_FRACTIONAL_ODD }
-  { reuse GL_FRACTIONAL_EVEN }
-  { reuse GL_MAX_PATCH_VERTICES }
-  { reuse GL_MAX_TESS_GEN_LEVEL }
-  { reuse GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS }
-  { reuse GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS }
-  { reuse GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS }
-  { reuse GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS }
-  { reuse GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS }
-  { reuse GL_MAX_TESS_PATCH_COMPONENTS }
-  { reuse GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS }
-  { reuse GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS }
-  { reuse GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS }
-  { reuse GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS }
-  { reuse GL_MAX_TESS_CONTROL_INPUT_COMPONENTS }
-  { reuse GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS }
-  { reuse GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS }
-  { reuse GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS }
-  { reuse GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER }
-  { reuse GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER }
-  { reuse GL_TESS_EVALUATION_SHADER }
-  { reuse GL_TESS_CONTROL_SHADER }
-  { Reuse tokens from ARB_texture_buffer_object_rgb32 (none) }
-  { Reuse tokens from ARB_transform_feedback2 }
-  { reuse GL_TRANSFORM_FEEDBACK }
-  { reuse GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED }
-  { reuse GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE }
-  { reuse GL_TRANSFORM_FEEDBACK_BINDING }
-  { Reuse tokens from ARB_transform_feedback3 }
-  { reuse GL_MAX_TRANSFORM_FEEDBACK_BUFFERS }
-  { reuse GL_MAX_VERTEX_STREAMS }
-
-  // GL_VERSION_4_1
-  { Reuse tokens from ARB_ES2_compatibility }
-  { reuse GL_FIXED }
-  { reuse GL_IMPLEMENTATION_COLOR_READ_TYPE }
-  { reuse GL_IMPLEMENTATION_COLOR_READ_FORMAT }
-  { reuse GL_LOW_FLOAT }
-  { reuse GL_MEDIUM_FLOAT }
-  { reuse GL_HIGH_FLOAT }
-  { reuse GL_LOW_INT }
-  { reuse GL_MEDIUM_INT }
-  { reuse GL_HIGH_INT }
-  { reuse GL_SHADER_COMPILER }
-  { reuse GL_NUM_SHADER_BINARY_FORMATS }
-  { reuse GL_MAX_VERTEX_UNIFORM_VECTORS }
-  { reuse GL_MAX_VARYING_VECTORS }
-  { reuse GL_MAX_FRAGMENT_UNIFORM_VECTORS }
-  { reuse GL_RGB565 }
-  { Reuse tokens from ARB_get_program_binary }
-  { reuse GL_PROGRAM_BINARY_RETRIEVABLE_HINT }
-  { reuse GL_PROGRAM_BINARY_LENGTH }
-  { reuse GL_NUM_PROGRAM_BINARY_FORMATS }
-  { reuse GL_PROGRAM_BINARY_FORMATS }
-  { Reuse tokens from ARB_separate_shader_objects }
-  { reuse GL_VERTEX_SHADER_BIT }
-  { reuse GL_FRAGMENT_SHADER_BIT }
-  { reuse GL_GEOMETRY_SHADER_BIT }
-  { reuse GL_TESS_CONTROL_SHADER_BIT }
-  { reuse GL_TESS_EVALUATION_SHADER_BIT }
-  { reuse GL_ALL_SHADER_BITS }
-  { reuse GL_PROGRAM_SEPARABLE }
-  { reuse GL_ACTIVE_PROGRAM }
-  { reuse GL_PROGRAM_PIPELINE_BINDING }
-  { Reuse tokens from ARB_shader_precision (none) }
-  { Reuse tokens from ARB_vertex_attrib_64bit - all are in GL 3.0 and 4.0 already }
-  { Reuse tokens from ARB_viewport_array - some are in GL 1.1 and ARB_provoking_vertex already }
-  { reuse GL_MAX_VIEWPORTS }
-  { reuse GL_VIEWPORT_SUBPIXEL_BITS }
-  { reuse GL_VIEWPORT_BOUNDS_RANGE }
-  { reuse GL_LAYER_PROVOKING_VERTEX }
-  { reuse GL_VIEWPORT_INDEX_PROVOKING_VERTEX }
-  { reuse GL_UNDEFINED_VERTEX }
-
-  // GL_VERSION_4_2
-  { Reuse tokens from ARB_base_instance (none) }
-  { Reuse tokens from ARB_shading_language_420pack (none) }
-  { Reuse tokens from ARB_transform_feedback_instanced (none) }
-  { Reuse tokens from ARB_compressed_texture_pixel_storage }
-  { reuse GL_UNPACK_COMPRESSED_BLOCK_WIDTH }
-  { reuse GL_UNPACK_COMPRESSED_BLOCK_HEIGHT }
-  { reuse GL_UNPACK_COMPRESSED_BLOCK_DEPTH }
-  { reuse GL_UNPACK_COMPRESSED_BLOCK_SIZE }
-  { reuse GL_PACK_COMPRESSED_BLOCK_WIDTH }
-  { reuse GL_PACK_COMPRESSED_BLOCK_HEIGHT }
-  { reuse GL_PACK_COMPRESSED_BLOCK_DEPTH }
-  { reuse GL_PACK_COMPRESSED_BLOCK_SIZE }
-  { Reuse tokens from ARB_conservative_depth (none) }
-  { Reuse tokens from ARB_internalformat_query }
-  { reuse GL_NUM_SAMPLE_COUNTS }
-  { Reuse tokens from ARB_map_buffer_alignment }
-  { reuse GL_MIN_MAP_BUFFER_ALIGNMENT }
-  { Reuse tokens from ARB_shader_atomic_counters }
-  { reuse GL_ATOMIC_COUNTER_BUFFER }
-  { reuse GL_ATOMIC_COUNTER_BUFFER_BINDING }
-  { reuse GL_ATOMIC_COUNTER_BUFFER_START }
-  { reuse GL_ATOMIC_COUNTER_BUFFER_SIZE }
-  { reuse GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE }
-  { reuse GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS }
-  { reuse GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES }
-  { reuse GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER }
-  { reuse GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER }
-  { reuse GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER }
-  { reuse GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER }
-  { reuse GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER }
-  { reuse GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS }
-  { reuse GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS }
-  { reuse GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS }
-  { reuse GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS }
-  { reuse GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS }
-  { reuse GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS }
-  { reuse GL_MAX_VERTEX_ATOMIC_COUNTERS }
-  { reuse GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS }
-  { reuse GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS }
-  { reuse GL_MAX_GEOMETRY_ATOMIC_COUNTERS }
-  { reuse GL_MAX_FRAGMENT_ATOMIC_COUNTERS }
-  { reuse GL_MAX_COMBINED_ATOMIC_COUNTERS }
-  { reuse GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE }
-  { reuse GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS }
-  { reuse GL_ACTIVE_ATOMIC_COUNTER_BUFFERS }
-  { reuse GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX }
-  { reuse GL_UNSIGNED_INT_ATOMIC_COUNTER }
-  { Reuse tokens from ARB_shader_image_load_store }
-  { reuse GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT }
-  { reuse GL_ELEMENT_ARRAY_BARRIER_BIT }
-  { reuse GL_UNIFORM_BARRIER_BIT }
-  { reuse GL_TEXTURE_FETCH_BARRIER_BIT }
-  { reuse GL_SHADER_IMAGE_ACCESS_BARRIER_BIT }
-  { reuse GL_COMMAND_BARRIER_BIT }
-  { reuse GL_PIXEL_BUFFER_BARRIER_BIT }
-  { reuse GL_TEXTURE_UPDATE_BARRIER_BIT }
-  { reuse GL_BUFFER_UPDATE_BARRIER_BIT }
-  { reuse GL_FRAMEBUFFER_BARRIER_BIT }
-  { reuse GL_TRANSFORM_FEEDBACK_BARRIER_BIT }
-  { reuse GL_ATOMIC_COUNTER_BARRIER_BIT }
-  { reuse GL_ALL_BARRIER_BITS }
-  { reuse GL_MAX_IMAGE_UNITS }
-  { reuse GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS }
-  { reuse GL_IMAGE_BINDING_NAME }
-  { reuse GL_IMAGE_BINDING_LEVEL }
-  { reuse GL_IMAGE_BINDING_LAYERED }
-  { reuse GL_IMAGE_BINDING_LAYER }
-  { reuse GL_IMAGE_BINDING_ACCESS }
-  { reuse GL_IMAGE_1D }
-  { reuse GL_IMAGE_2D }
-  { reuse GL_IMAGE_3D }
-  { reuse GL_IMAGE_2D_RECT }
-  { reuse GL_IMAGE_CUBE }
-  { reuse GL_IMAGE_BUFFER }
-  { reuse GL_IMAGE_1D_ARRAY }
-  { reuse GL_IMAGE_2D_ARRAY }
-  { reuse GL_IMAGE_CUBE_MAP_ARRAY }
-  { reuse GL_IMAGE_2D_MULTISAMPLE }
-  { reuse GL_IMAGE_2D_MULTISAMPLE_ARRAY }
-  { reuse GL_INT_IMAGE_1D }
-  { reuse GL_INT_IMAGE_2D }
-  { reuse GL_INT_IMAGE_3D }
-  { reuse GL_INT_IMAGE_2D_RECT }
-  { reuse GL_INT_IMAGE_CUBE }
-  { reuse GL_INT_IMAGE_BUFFER }
-  { reuse GL_INT_IMAGE_1D_ARRAY }
-  { reuse GL_INT_IMAGE_2D_ARRAY }
-  { reuse GL_INT_IMAGE_CUBE_MAP_ARRAY }
-  { reuse GL_INT_IMAGE_2D_MULTISAMPLE }
-  { reuse GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY }
-  { reuse GL_UNSIGNED_INT_IMAGE_1D }
-  { reuse GL_UNSIGNED_INT_IMAGE_2D }
-  { reuse GL_UNSIGNED_INT_IMAGE_3D }
-  { reuse GL_UNSIGNED_INT_IMAGE_2D_RECT }
-  { reuse GL_UNSIGNED_INT_IMAGE_CUBE }
-  { reuse GL_UNSIGNED_INT_IMAGE_BUFFER }
-  { reuse GL_UNSIGNED_INT_IMAGE_1D_ARRAY }
-  { reuse GL_UNSIGNED_INT_IMAGE_2D_ARRAY }
-  { reuse GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY }
-  { reuse GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE }
-  { reuse GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY }
-  { reuse GL_MAX_IMAGE_SAMPLES }
-  { reuse GL_IMAGE_BINDING_FORMAT }
-  { reuse GL_IMAGE_FORMAT_COMPATIBILITY_TYPE }
-  { reuse GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE }
-  { reuse GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS }
-  { reuse GL_MAX_VERTEX_IMAGE_UNIFORMS }
-  { reuse GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS }
-  { reuse GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS }
-  { reuse GL_MAX_GEOMETRY_IMAGE_UNIFORMS }
-  { reuse GL_MAX_FRAGMENT_IMAGE_UNIFORMS }
-  { reuse GL_MAX_COMBINED_IMAGE_UNIFORMS }
-  { Reuse tokens from ARB_shading_language_packing (none) }
-  { Reuse tokens from ARB_texture_storage }
-  { reuse GL_TEXTURE_IMMUTABLE_FORMAT }
-
-  // GL_VERSION_4_3
-  GL_NUM_SHADING_LANGUAGE_VERSIONS  = $82E9;
-  GL_VERTEX_ATTRIB_ARRAY_LONG = $874E;
-  { Reuse tokens from ARB_arrays_of_arrays (none, GLSL only) }
-  { Reuse tokens from ARB_fragment_layer_viewport (none, GLSL only) }
-  { Reuse tokens from ARB_shader_image_size (none, GLSL only) }
-  { Reuse tokens from ARB_ES3_compatibility }
-  { reuse GL_COMPRESSED_RGB8_ETC2 }
-  { reuse GL_COMPRESSED_SRGB8_ETC2 }
-  { reuse GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 }
-  { reuse GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 }
-  { reuse GL_COMPRESSED_RGBA8_ETC2_EAC }
-  { reuse GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC }
-  { reuse GL_COMPRESSED_R11_EAC }
-  { reuse GL_COMPRESSED_SIGNED_R11_EAC }
-  { reuse GL_COMPRESSED_RG11_EAC }
-  { reuse GL_COMPRESSED_SIGNED_RG11_EAC }
-  { reuse GL_PRIMITIVE_RESTART_FIXED_INDEX }
-  { reuse GL_ANY_SAMPLES_PASSED_CONSERVATIVE }
-  { reuse GL_MAX_ELEMENT_INDEX }
-  { Reuse tokens from ARB_clear_buffer_object (none) }
-  { Reuse tokens from ARB_compute_shader }
-  { reuse GL_COMPUTE_SHADER }
-  { reuse GL_MAX_COMPUTE_UNIFORM_BLOCKS }
-  { reuse GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS }
-  { reuse GL_MAX_COMPUTE_IMAGE_UNIFORMS }
-  { reuse GL_MAX_COMPUTE_SHARED_MEMORY_SIZE }
-  { reuse GL_MAX_COMPUTE_UNIFORM_COMPONENTS }
-  { reuse GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS }
-  { reuse GL_MAX_COMPUTE_ATOMIC_COUNTERS }
-  { reuse GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS }
-  { reuse GL_MAX_COMPUTE_LOCAL_INVOCATIONS }
-  { reuse GL_MAX_COMPUTE_WORK_GROUP_COUNT }
-  { reuse GL_MAX_COMPUTE_WORK_GROUP_SIZE }
-  { reuse GL_COMPUTE_LOCAL_WORK_SIZE }
-  { reuse GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER }
-  { reuse GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER }
-  { reuse GL_DISPATCH_INDIRECT_BUFFER }
-  { reuse GL_DISPATCH_INDIRECT_BUFFER_BINDING }
-  { Reuse tokens from ARB_copy_image (none) }
-  { Reuse tokens from KHR_debug }
-  { reuse GL_DEBUG_OUTPUT_SYNCHRONOUS }
-  { reuse GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH }
-  { reuse GL_DEBUG_CALLBACK_FUNCTION }
-  { reuse GL_DEBUG_CALLBACK_USER_PARAM }
-  { reuse GL_DEBUG_SOURCE_API }
-  { reuse GL_DEBUG_SOURCE_WINDOW_SYSTEM }
-  { reuse GL_DEBUG_SOURCE_SHADER_COMPILER }
-  { reuse GL_DEBUG_SOURCE_THIRD_PARTY }
-  { reuse GL_DEBUG_SOURCE_APPLICATION }
-  { reuse GL_DEBUG_SOURCE_OTHER }
-  { reuse GL_DEBUG_TYPE_ERROR }
-  { reuse GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR }
-  { reuse GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR }
-  { reuse GL_DEBUG_TYPE_PORTABILITY }
-  { reuse GL_DEBUG_TYPE_PERFORMANCE }
-  { reuse GL_DEBUG_TYPE_OTHER }
-  { reuse GL_MAX_DEBUG_MESSAGE_LENGTH }
-  { reuse GL_MAX_DEBUG_LOGGED_MESSAGES }
-  { reuse GL_DEBUG_LOGGED_MESSAGES }
-  { reuse GL_DEBUG_SEVERITY_HIGH }
-  { reuse GL_DEBUG_SEVERITY_MEDIUM }
-  { reuse GL_DEBUG_SEVERITY_LOW }
-  { reuse GL_DEBUG_TYPE_MARKER }
-  { reuse GL_DEBUG_TYPE_PUSH_GROUP }
-  { reuse GL_DEBUG_TYPE_POP_GROUP }
-  { reuse GL_DEBUG_SEVERITY_NOTIFICATION }
-  { reuse GL_MAX_DEBUG_GROUP_STACK_DEPTH }
-  { reuse GL_DEBUG_GROUP_STACK_DEPTH }
-  { reuse GL_BUFFER }
-  { reuse GL_SHADER }
-  { reuse GL_PROGRAM }
-  { reuse GL_QUERY }
-  { reuse GL_PROGRAM_PIPELINE }
-  { reuse GL_SAMPLER }
-  { reuse GL_DISPLAY_LIST }
-  { reuse GL_MAX_LABEL_LENGTH }
-  { reuse GL_DEBUG_OUTPUT }
-  { reuse GL_CONTEXT_FLAG_DEBUG_BIT }
-  { reuse GL_STACK_UNDERFLOW }
-  { reuse GL_STACK_OVERFLOW }
-  { Reuse tokens from ARB_explicit_uniform_location }
-  { reuse GL_MAX_UNIFORM_LOCATIONS }
-  { Reuse tokens from ARB_framebuffer_no_attachments }
-  { reuse GL_FRAMEBUFFER_DEFAULT_WIDTH }
-  { reuse GL_FRAMEBUFFER_DEFAULT_HEIGHT }
-  { reuse GL_FRAMEBUFFER_DEFAULT_LAYERS }
-  { reuse GL_FRAMEBUFFER_DEFAULT_SAMPLES }
-  { reuse GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS }
-  { reuse GL_MAX_FRAMEBUFFER_WIDTH }
-  { reuse GL_MAX_FRAMEBUFFER_HEIGHT }
-  { reuse GL_MAX_FRAMEBUFFER_LAYERS }
-  { reuse GL_MAX_FRAMEBUFFER_SAMPLES }
-  { Reuse tokens from ARB_internalformat_query2 }
-  { reuse GL_INTERNALFORMAT_SUPPORTED }
-  { reuse GL_INTERNALFORMAT_PREFERRED }
-  { reuse GL_INTERNALFORMAT_RED_SIZE }
-  { reuse GL_INTERNALFORMAT_GREEN_SIZE }
-  { reuse GL_INTERNALFORMAT_BLUE_SIZE }
-  { reuse GL_INTERNALFORMAT_ALPHA_SIZE }
-  { reuse GL_INTERNALFORMAT_DEPTH_SIZE }
-  { reuse GL_INTERNALFORMAT_STENCIL_SIZE }
-  { reuse GL_INTERNALFORMAT_SHARED_SIZE }
-  { reuse GL_INTERNALFORMAT_RED_TYPE }
-  { reuse GL_INTERNALFORMAT_GREEN_TYPE }
-  { reuse GL_INTERNALFORMAT_BLUE_TYPE }
-  { reuse GL_INTERNALFORMAT_ALPHA_TYPE }
-  { reuse GL_INTERNALFORMAT_DEPTH_TYPE }
-  { reuse GL_INTERNALFORMAT_STENCIL_TYPE }
-  { reuse GL_MAX_WIDTH }
-  { reuse GL_MAX_HEIGHT }
-  { reuse GL_MAX_DEPTH }
-  { reuse GL_MAX_LAYERS }
-  { reuse GL_MAX_COMBINED_DIMENSIONS }
-  { reuse GL_COLOR_COMPONENTS }
-  { reuse GL_DEPTH_COMPONENTS }
-  { reuse GL_STENCIL_COMPONENTS }
-  { reuse GL_COLOR_RENDERABLE }
-  { reuse GL_DEPTH_RENDERABLE }
-  { reuse GL_STENCIL_RENDERABLE }
-  { reuse GL_FRAMEBUFFER_RENDERABLE }
-  { reuse GL_FRAMEBUFFER_RENDERABLE_LAYERED }
-  { reuse GL_FRAMEBUFFER_BLEND }
-  { reuse GL_READ_PIXELS }
-  { reuse GL_READ_PIXELS_FORMAT }
-  { reuse GL_READ_PIXELS_TYPE }
-  { reuse GL_TEXTURE_IMAGE_FORMAT }
-  { reuse GL_TEXTURE_IMAGE_TYPE }
-  { reuse GL_GET_TEXTURE_IMAGE_FORMAT }
-  { reuse GL_GET_TEXTURE_IMAGE_TYPE }
-  { reuse GL_MIPMAP }
-  { reuse GL_MANUAL_GENERATE_MIPMAP }
-  { reuse GL_AUTO_GENERATE_MIPMAP }
-  { reuse GL_COLOR_ENCODING }
-  { reuse GL_SRGB_READ }
-  { reuse GL_SRGB_WRITE }
-  { reuse GL_FILTER }
-  { reuse GL_VERTEX_TEXTURE }
-  { reuse GL_TESS_CONTROL_TEXTURE }
-  { reuse GL_TESS_EVALUATION_TEXTURE }
-  { reuse GL_GEOMETRY_TEXTURE }
-  { reuse GL_FRAGMENT_TEXTURE }
-  { reuse GL_COMPUTE_TEXTURE }
-  { reuse GL_TEXTURE_SHADOW }
-  { reuse GL_TEXTURE_GATHER }
-  { reuse GL_TEXTURE_GATHER_SHADOW }
-  { reuse GL_SHADER_IMAGE_LOAD }
-  { reuse GL_SHADER_IMAGE_STORE }
-  { reuse GL_SHADER_IMAGE_ATOMIC }
-  { reuse GL_IMAGE_TEXEL_SIZE }
-  { reuse GL_IMAGE_COMPATIBILITY_CLASS }
-  { reuse GL_IMAGE_PIXEL_FORMAT }
-  { reuse GL_IMAGE_PIXEL_TYPE }
-  { reuse GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST }
-  { reuse GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST }
-  { reuse GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE }
-  { reuse GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE }
-  { reuse GL_TEXTURE_COMPRESSED_BLOCK_WIDTH }
-  { reuse GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT }
-  { reuse GL_TEXTURE_COMPRESSED_BLOCK_SIZE }
-  { reuse GL_CLEAR_BUFFER }
-  { reuse GL_TEXTURE_VIEW }
-  { reuse GL_VIEW_COMPATIBILITY_CLASS }
-  { reuse GL_FULL_SUPPORT }
-  { reuse GL_CAVEAT_SUPPORT }
-  { reuse GL_IMAGE_CLASS_4_X_32 }
-  { reuse GL_IMAGE_CLASS_2_X_32 }
-  { reuse GL_IMAGE_CLASS_1_X_32 }
-  { reuse GL_IMAGE_CLASS_4_X_16 }
-  { reuse GL_IMAGE_CLASS_2_X_16 }
-  { reuse GL_IMAGE_CLASS_1_X_16 }
-  { reuse GL_IMAGE_CLASS_4_X_8 }
-  { reuse GL_IMAGE_CLASS_2_X_8 }
-  { reuse GL_IMAGE_CLASS_1_X_8 }
-  { reuse GL_IMAGE_CLASS_11_11_10 }
-  { reuse GL_IMAGE_CLASS_10_10_10_2 }
-  { reuse GL_VIEW_CLASS_128_BITS }
-  { reuse GL_VIEW_CLASS_96_BITS }
-  { reuse GL_VIEW_CLASS_64_BITS }
-  { reuse GL_VIEW_CLASS_48_BITS }
-  { reuse GL_VIEW_CLASS_32_BITS }
-  { reuse GL_VIEW_CLASS_24_BITS }
-  { reuse GL_VIEW_CLASS_16_BITS }
-  { reuse GL_VIEW_CLASS_8_BITS }
-  { reuse GL_VIEW_CLASS_S3TC_DXT1_RGB }
-  { reuse GL_VIEW_CLASS_S3TC_DXT1_RGBA }
-  { reuse GL_VIEW_CLASS_S3TC_DXT3_RGBA }
-  { reuse GL_VIEW_CLASS_S3TC_DXT5_RGBA }
-  { reuse GL_VIEW_CLASS_RGTC1_RED }
-  { reuse GL_VIEW_CLASS_RGTC2_RG }
-  { reuse GL_VIEW_CLASS_BPTC_UNORM }
-  { reuse GL_VIEW_CLASS_BPTC_FLOAT }
-  { Reuse tokens from ARB_invalidate_subdata (none) }
-  { Reuse tokens from ARB_multi_draw_indirect (none) }
-  { Reuse tokens from ARB_program_interface_query }
-  { reuse GL_UNIFORM }
-  { reuse GL_UNIFORM_BLOCK }
-  { reuse GL_PROGRAM_INPUT }
-  { reuse GL_PROGRAM_OUTPUT }
-  { reuse GL_BUFFER_VARIABLE }
-  { reuse GL_SHADER_STORAGE_BLOCK }
-  { reuse GL_VERTEX_SUBROUTINE }
-  { reuse GL_TESS_CONTROL_SUBROUTINE }
-  { reuse GL_TESS_EVALUATION_SUBROUTINE }
-  { reuse GL_GEOMETRY_SUBROUTINE }
-  { reuse GL_FRAGMENT_SUBROUTINE }
-  { reuse GL_COMPUTE_SUBROUTINE }
-  { reuse GL_VERTEX_SUBROUTINE_UNIFORM }
-  { reuse GL_TESS_CONTROL_SUBROUTINE_UNIFORM }
-  { reuse GL_TESS_EVALUATION_SUBROUTINE_UNIFORM }
-  { reuse GL_GEOMETRY_SUBROUTINE_UNIFORM }
-  { reuse GL_FRAGMENT_SUBROUTINE_UNIFORM }
-  { reuse GL_COMPUTE_SUBROUTINE_UNIFORM }
-  { reuse GL_TRANSFORM_FEEDBACK_VARYING }
-  { reuse GL_ACTIVE_RESOURCES }
-  { reuse GL_MAX_NAME_LENGTH }
-  { reuse GL_MAX_NUM_ACTIVE_VARIABLES }
-  { reuse GL_MAX_NUM_COMPATIBLE_SUBROUTINES }
-  { reuse GL_NAME_LENGTH }
-  { reuse GL_TYPE }
-  { reuse GL_ARRAY_SIZE }
-  { reuse GL_OFFSET }
-  { reuse GL_BLOCK_INDEX }
-  { reuse GL_ARRAY_STRIDE }
-  { reuse GL_MATRIX_STRIDE }
-  { reuse GL_IS_ROW_MAJOR }
-  { reuse GL_ATOMIC_COUNTER_BUFFER_INDEX }
-  { reuse GL_BUFFER_BINDING }
-  { reuse GL_BUFFER_DATA_SIZE }
-  { reuse GL_NUM_ACTIVE_VARIABLES }
-  { reuse GL_ACTIVE_VARIABLES }
-  { reuse GL_REFERENCED_BY_VERTEX_SHADER }
-  { reuse GL_REFERENCED_BY_TESS_CONTROL_SHADER }
-  { reuse GL_REFERENCED_BY_TESS_EVALUATION_SHADER }
-  { reuse GL_REFERENCED_BY_GEOMETRY_SHADER }
-  { reuse GL_REFERENCED_BY_FRAGMENT_SHADER }
-  { reuse GL_REFERENCED_BY_COMPUTE_SHADER }
-  { reuse GL_TOP_LEVEL_ARRAY_SIZE }
-  { reuse GL_TOP_LEVEL_ARRAY_STRIDE }
-  { reuse GL_LOCATION }
-  { reuse GL_LOCATION_INDEX }
-  { reuse GL_IS_PER_PATCH }
-  { Reuse tokens from ARB_robust_buffer_access_behavior (none) }
-  { Reuse tokens from ARB_shader_storage_buffer_object }
-  { reuse GL_SHADER_STORAGE_BUFFER }
-  { reuse GL_SHADER_STORAGE_BUFFER_BINDING }
-  { reuse GL_SHADER_STORAGE_BUFFER_START }
-  { reuse GL_SHADER_STORAGE_BUFFER_SIZE }
-  { reuse GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS }
-  { reuse GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS }
-  { reuse GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS }
-  { reuse GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS }
-  { reuse GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS }
-  { reuse GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS }
-  { reuse GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS }
-  { reuse GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS }
-  { reuse GL_MAX_SHADER_STORAGE_BLOCK_SIZE }
-  { reuse GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT }
-  { reuse GL_SHADER_STORAGE_BARRIER_BIT }
-  { reuse GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES }
-  { Reuse tokens from ARB_stencil_texturing }
-  { reuse GL_DEPTH_STENCIL_TEXTURE_MODE }
-  { Reuse tokens from ARB_texture_buffer_range }
-  { reuse GL_TEXTURE_BUFFER_OFFSET }
-  { reuse GL_TEXTURE_BUFFER_SIZE }
-  { reuse GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT }
-  { Reuse tokens from ARB_texture_query_levels (none) }
-  { Reuse tokens from ARB_texture_storage_multisample (none) }
-  { Reuse tokens from ARB_texture_view }
-  { reuse GL_TEXTURE_VIEW_MIN_LEVEL }
-  { reuse GL_TEXTURE_VIEW_NUM_LEVELS }
-  { reuse GL_TEXTURE_VIEW_MIN_LAYER }
-  { reuse GL_TEXTURE_VIEW_NUM_LAYERS }
-  { reuse GL_TEXTURE_IMMUTABLE_LEVELS }
-  { Reuse tokens from ARB_vertex_attrib_binding }
-  { reuse GL_VERTEX_ATTRIB_BINDING }
-  { reuse GL_VERTEX_ATTRIB_RELATIVE_OFFSET }
-  { reuse GL_VERTEX_BINDING_DIVISOR }
-  { reuse GL_VERTEX_BINDING_OFFSET }
-  { reuse GL_VERTEX_BINDING_STRIDE }
-  { reuse GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET }
-  { reuse GL_MAX_VERTEX_ATTRIB_BINDINGS }
-
-
-  // GL_3DFX_multisample
-  GL_MULTISAMPLE_3DFX = $86B2;
-  GL_SAMPLE_BUFFERS_3DFX = $86B3;
-  GL_SAMPLES_3DFX = $86B4;
-  GL_MULTISAMPLE_BIT_3DFX = $20000000;
-
-  // GL_3DFX_texture_compression_FXT1
-  GL_COMPRESSED_RGB_FXT1_3DFX = $86B0;
-  GL_COMPRESSED_RGBA_FXT1_3DFX = $86B1;
-
-  // GL_APPLE_client_storage
-  GL_UNPACK_CLIENT_STORAGE_APPLE = $85B2;
-
-  // GL_APPLE_element_array
-  GL_ELEMENT_ARRAY_APPLE = $8A0C;
-  GL_ELEMENT_ARRAY_TYPE_APPLE = $8A0D;
-  GL_ELEMENT_ARRAY_POINTER_APPLE = $8A0E;
-
-  // GL_APPLE_fence
-  GL_DRAW_PIXELS_APPLE = $8A0A;
-  GL_FENCE_APPLE = $8A0B;
-
-  // GL_APPLE_specular_vector
-  GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE = $85B0;
-
-  // GL_APPLE_transform_hint
-  GL_TRANSFORM_HINT_APPLE = $85B1;
-
-  // GL_APPLE_vertex_array_object
-  GL_VERTEX_ARRAY_BINDING_APPLE = $85B5;
-
-  // GL_APPLE_vertex_array_range
-  GL_VERTEX_ARRAY_RANGE_APPLE = $851D;
-  GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE = $851E;
-  GL_VERTEX_ARRAY_STORAGE_HINT_APPLE = $851F;
-  GL_VERTEX_ARRAY_RANGE_POINTER_APPLE = $8521;
-  GL_STORAGE_CLIENT_APPLE = $85B4;
-  GL_STORAGE_CACHED_APPLE = $85BE;
-  GL_STORAGE_SHARED_APPLE = $85BF;
-
-  // GL_APPLE_ycbcr_422
-  GL_YCBCR_422_APPLE = $85B9;
-  GL_UNSIGNED_SHORT_8_8_APPLE = $85BA;
-  GL_UNSIGNED_SHORT_8_8_REV_APPLE = $85BB;
-  GL_RGB_RAW_422_APPLE = $8A51;
-
-  // GL_APPLE_texture_range
-  GL_TEXTURE_RANGE_LENGTH_APPLE = $85B7;
-  GL_TEXTURE_RANGE_POINTER_APPLE = $85B8;
-  GL_TEXTURE_STORAGE_HINT_APPLE = $85BC;
-  GL_STORAGE_PRIVATE_APPLE = $85BD;
-  { reuse GL_STORAGE_CACHED_APPLE }
-  { reuse GL_STORAGE_SHARED_APPLE }
-
-  // GL_APPLE_float_pixels
-  GL_HALF_APPLE = $140B;
-  GL_RGBA_FLOAT32_APPLE = $8814;
-  GL_RGB_FLOAT32_APPLE = $8815;
-  GL_ALPHA_FLOAT32_APPLE = $8816;
-  GL_INTENSITY_FLOAT32_APPLE = $8817;
-  GL_LUMINANCE_FLOAT32_APPLE = $8818;
-  GL_LUMINANCE_ALPHA_FLOAT32_APPLE = $8819;
-  GL_RGBA_FLOAT16_APPLE = $881A;
-  GL_RGB_FLOAT16_APPLE = $881B;
-  GL_ALPHA_FLOAT16_APPLE = $881C;
-  GL_INTENSITY_FLOAT16_APPLE = $881D;
-  GL_LUMINANCE_FLOAT16_APPLE = $881E;
-  GL_LUMINANCE_ALPHA_FLOAT16_APPLE = $881F;
-  GL_COLOR_FLOAT_APPLE = $8A0F;
-
-  // GL_APPLE_vertex_program_evaluators
-  GL_VERTEX_ATTRIB_MAP1_APPLE = $8A00;
-  GL_VERTEX_ATTRIB_MAP2_APPLE = $8A01;
-  GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE = $8A02;
-  GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE = $8A03;
-  GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE = $8A04;
-  GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE = $8A05;
-  GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE = $8A06;
-  GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE = $8A07;
-  GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE = $8A08;
-  GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE = $8A09;
-
-  // GL_APPLE_aux_depth_stencil
-  GL_AUX_DEPTH_STENCIL_APPLE = $8A14;
-
-  // GL_APPLE_object_purgeable
-  GL_BUFFER_OBJECT_APPLE = $85B3;
-  GL_RELEASED_APPLE = $8A19;
-  GL_VOLATILE_APPLE = $8A1A;
-  GL_RETAINED_APPLE = $8A1B;
-  GL_UNDEFINED_APPLE = $8A1C;
-  GL_PURGEABLE_APPLE = $8A1D;
-
-  // GL_APPLE_row_bytes
-  GL_PACK_ROW_BYTES_APPLE = $8A15;
-  GL_UNPACK_ROW_BYTES_APPLE = $8A16;
-
-  // GL_APPLE_rgb_422
-  { reuse GL_UNSIGNED_SHORT_8_8_APPLE }
-  { reuse GL_UNSIGNED_SHORT_8_8_REV_APPLE }
-
-  // GL_ARB_depth_texture
-  GL_DEPTH_COMPONENT16_ARB = $81A5;
-  GL_DEPTH_COMPONENT24_ARB = $81A6;
-  GL_DEPTH_COMPONENT32_ARB = $81A7;
-  GL_TEXTURE_DEPTH_SIZE_ARB = $884A;
-  GL_DEPTH_TEXTURE_MODE_ARB = $884B;
-
-  // GL_ARB_fragment_program
-  GL_FRAGMENT_PROGRAM_ARB = $8804;
-  GL_PROGRAM_ALU_INSTRUCTIONS_ARB = $8805;
-  GL_PROGRAM_TEX_INSTRUCTIONS_ARB = $8806;
-  GL_PROGRAM_TEX_INDIRECTIONS_ARB = $8807;
-  GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB = $8808;
-  GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB = $8809;
-  GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB = $880A;
-  GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB = $880B;
-  GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB = $880C;
-  GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB = $880D;
-  GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB = $880E;
-  GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB = $880F;
-  GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB = $8810;
-  GL_MAX_TEXTURE_COORDS_ARB = $8871;
-  GL_MAX_TEXTURE_IMAGE_UNITS_ARB = $8872;
-
-  // GL_ARB_imaging
-  GL_CONSTANT_COLOR_ARB = $8001;
-  GL_ONE_MINUS_CONSTANT_COLOR = $8002;
-  GL_CONSTANT_ALPHA = $8003;
-  GL_ONE_MINUS_CONSTANT_ALPHA = $8004;
-  GL_BLEND_COLOR = $8005;
-  GL_FUNC_ADD = $8006;
-  GL_MIN = $8007;
-  GL_MAX = $8008;
-  GL_BLEND_EQUATION = $8009;
-  GL_FUNC_SUBTRACT = $800A;
-  GL_FUNC_REVERSE_SUBTRACT = $800B;
-  // deprecated
-  GL_CONVOLUTION_1D = $8010;
-  GL_CONVOLUTION_2D = $8011;
-  GL_SEPARABLE_2D = $8012;
-  GL_CONVOLUTION_BORDER_MODE = $8013;
-  GL_CONVOLUTION_FILTER_SCALE = $8014;
-  GL_CONVOLUTION_FILTER_BIAS = $8015;
-  GL_REDUCE = $8016;
-  GL_CONVOLUTION_FORMAT = $8017;
-  GL_CONVOLUTION_WIDTH = $8018;
-  GL_CONVOLUTION_HEIGHT = $8019;
-  GL_MAX_CONVOLUTION_WIDTH = $801A;
-  GL_MAX_CONVOLUTION_HEIGHT = $801B;
-  GL_POST_CONVOLUTION_RED_SCALE = $801C;
-  GL_POST_CONVOLUTION_GREEN_SCALE = $801D;
-  GL_POST_CONVOLUTION_BLUE_SCALE = $801E;
-  GL_POST_CONVOLUTION_ALPHA_SCALE = $801F;
-  GL_POST_CONVOLUTION_RED_BIAS = $8020;
-  GL_POST_CONVOLUTION_GREEN_BIAS = $8021;
-  GL_POST_CONVOLUTION_BLUE_BIAS = $8022;
-  GL_POST_CONVOLUTION_ALPHA_BIAS = $8023;
-  GL_HISTOGRAM = $8024;
-  GL_PROXY_HISTOGRAM = $8025;
-  GL_HISTOGRAM_WIDTH = $8026;
-  GL_HISTOGRAM_FORMAT = $8027;
-  GL_HISTOGRAM_RED_SIZE = $8028;
-  GL_HISTOGRAM_GREEN_SIZE = $8029;
-  GL_HISTOGRAM_BLUE_SIZE = $802A;
-  GL_HISTOGRAM_ALPHA_SIZE = $802B;
-  GL_HISTOGRAM_LUMINANCE_SIZE = $802C;
-  GL_HISTOGRAM_SINK = $802D;
-  GL_MINMAX = $802E;
-  GL_MINMAX_FORMAT = $802F;
-  GL_MINMAX_SINK = $8030;
-  GL_TABLE_TOO_LARGE = $8031;
-  GL_COLOR_MATRIX = $80B1;
-  GL_COLOR_MATRIX_STACK_DEPTH = $80B2;
-  GL_MAX_COLOR_MATRIX_STACK_DEPTH = $80B3;
-  GL_POST_COLOR_MATRIX_RED_SCALE = $80B4;
-  GL_POST_COLOR_MATRIX_GREEN_SCALE = $80B5;
-  GL_POST_COLOR_MATRIX_BLUE_SCALE = $80B6;
-  GL_POST_COLOR_MATRIX_ALPHA_SCALE = $80B7;
-  GL_POST_COLOR_MATRIX_RED_BIAS = $80B8;
-  GL_POST_COLOR_MATRIX_GREEN_BIAS = $80B9;
-  GL_POST_COLOR_MATRIX_BLUE_BIAS = $80BA;
-  GL_POST_COLOR_MATRIX_ALPHA_BIAS = $80BB;
-  GL_COLOR_TABLE = $80D0;
-  GL_POST_CONVOLUTION_COLOR_TABLE = $80D1;
-  GL_POST_COLOR_MATRIX_COLOR_TABLE = $80D2;
-  GL_PROXY_COLOR_TABLE = $80D3;
-  GL_PROXY_POST_CONVOLUTION_COLOR_TABLE = $80D4;
-  GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE = $80D5;
-  GL_COLOR_TABLE_SCALE = $80D6;
-  GL_COLOR_TABLE_BIAS = $80D7;
-  GL_COLOR_TABLE_FORMAT = $80D8;
-  GL_COLOR_TABLE_WIDTH = $80D9;
-  GL_COLOR_TABLE_RED_SIZE = $80DA;
-  GL_COLOR_TABLE_GREEN_SIZE = $80DB;
-  GL_COLOR_TABLE_BLUE_SIZE = $80DC;
-  GL_COLOR_TABLE_ALPHA_SIZE = $80DD;
-  GL_COLOR_TABLE_LUMINANCE_SIZE = $80DE;
-  GL_COLOR_TABLE_INTENSITY_SIZE = $80DF;
-  GL_CONSTANT_BORDER = $8151;
-  GL_REPLICATE_BORDER = $8153;
-  GL_CONVOLUTION_BORDER_COLOR = $8154;
-  // end deprecated
-
-  // GL_ARB_matrix_palette
-  GL_MATRIX_PALETTE_ARB = $8840;
-  GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB = $8841;
-  GL_MAX_PALETTE_MATRICES_ARB = $8842;
-  GL_CURRENT_PALETTE_MATRIX_ARB = $8843;
-  GL_MATRIX_INDEX_ARRAY_ARB = $8844;
-  GL_CURRENT_MATRIX_INDEX_ARB = $8845;
-  GL_MATRIX_INDEX_ARRAY_SIZE_ARB = $8846;
-  GL_MATRIX_INDEX_ARRAY_TYPE_ARB = $8847;
-  GL_MATRIX_INDEX_ARRAY_STRIDE_ARB = $8848;
-  GL_MATRIX_INDEX_ARRAY_POINTER_ARB = $8849;
-
-  // GL_ARB_multisample
-  GL_MULTISAMPLE_ARB = $809D;
-  GL_SAMPLE_ALPHA_TO_COVERAGE_ARB = $809E;
-  GL_SAMPLE_ALPHA_TO_ONE_ARB = $809F;
-  GL_SAMPLE_COVERAGE_ARB = $80A0;
-  GL_SAMPLE_BUFFERS_ARB = $80A8;
-  GL_SAMPLES_ARB = $80A9;
-  GL_SAMPLE_COVERAGE_VALUE_ARB = $80AA;
-  GL_SAMPLE_COVERAGE_INVERT_ARB = $80AB;
-  GL_MULTISAMPLE_BIT_ARB = $20000000;
-
-  // GL_ARB_multitexture
-  GL_TEXTURE0_ARB = $84C0;
-  GL_TEXTURE1_ARB = $84C1;
-  GL_TEXTURE2_ARB = $84C2;
-  GL_TEXTURE3_ARB = $84C3;
-  GL_TEXTURE4_ARB = $84C4;
-  GL_TEXTURE5_ARB = $84C5;
-  GL_TEXTURE6_ARB = $84C6;
-  GL_TEXTURE7_ARB = $84C7;
-  GL_TEXTURE8_ARB = $84C8;
-  GL_TEXTURE9_ARB = $84C9;
-  GL_TEXTURE10_ARB = $84CA;
-  GL_TEXTURE11_ARB = $84CB;
-  GL_TEXTURE12_ARB = $84CC;
-  GL_TEXTURE13_ARB = $84CD;
-  GL_TEXTURE14_ARB = $84CE;
-  GL_TEXTURE15_ARB = $84CF;
-  GL_TEXTURE16_ARB = $84D0;
-  GL_TEXTURE17_ARB = $84D1;
-  GL_TEXTURE18_ARB = $84D2;
-  GL_TEXTURE19_ARB = $84D3;
-  GL_TEXTURE20_ARB = $84D4;
-  GL_TEXTURE21_ARB = $84D5;
-  GL_TEXTURE22_ARB = $84D6;
-  GL_TEXTURE23_ARB = $84D7;
-  GL_TEXTURE24_ARB = $84D8;
-  GL_TEXTURE25_ARB = $84D9;
-  GL_TEXTURE26_ARB = $84DA;
-  GL_TEXTURE27_ARB = $84DB;
-  GL_TEXTURE28_ARB = $84DC;
-  GL_TEXTURE29_ARB = $84DD;
-  GL_TEXTURE30_ARB = $84DE;
-  GL_TEXTURE31_ARB = $84DF;
-  GL_ACTIVE_TEXTURE_ARB = $84E0;
-  GL_CLIENT_ACTIVE_TEXTURE_ARB = $84E1;
-  GL_MAX_TEXTURE_UNITS_ARB = $84E2;
-
-  // GL_ARB_point_parameters
-  GL_POINT_SIZE_MIN_ARB = $8126;
-  GL_POINT_SIZE_MAX_ARB = $8127;
-  GL_POINT_FADE_THRESHOLD_SIZE_ARB = $8128;
-  GL_POINT_DISTANCE_ATTENUATION_ARB = $8129;
-
-  // GL_ARB_shadow
-  GL_TEXTURE_COMPARE_MODE_ARB = $884C;
-  GL_TEXTURE_COMPARE_FUNC_ARB = $884D;
-  GL_COMPARE_R_TO_TEXTURE_ARB = $884E;
-
-  // GL_ARB_shadow_ambient
-  GL_TEXTURE_COMPARE_FAIL_VALUE_ARB = $80BF;
-
-  // GL_ARB_sparse_buffer
-  GL_SPARSE_STORAGE_BIT_ARB = $0400;
-  GL_SPARSE_BUFFER_PAGE_SIZE_ARB = $82F8;
-
-  // GL_ARB_texture_border_clamp
-  GL_CLAMP_TO_BORDER_ARB = $812D;
-
-  // GL_ARB_texture_compression
-  GL_COMPRESSED_ALPHA_ARB = $84E9;
-  GL_COMPRESSED_LUMINANCE_ARB = $84EA;
-  GL_COMPRESSED_LUMINANCE_ALPHA_ARB = $84EB;
-  GL_COMPRESSED_INTENSITY_ARB = $84EC;
-  GL_COMPRESSED_RGB_ARB = $84ED;
-  GL_COMPRESSED_RGBA_ARB = $84EE;
-  GL_TEXTURE_COMPRESSION_HINT_ARB = $84EF;
-  GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB = $86A0;
-  GL_TEXTURE_COMPRESSED_ARB = $86A1;
-  GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB = $86A2;
-  GL_COMPRESSED_TEXTURE_FORMATS_ARB = $86A3;
-
-  // GL_ARB_texture_cube_map
-  GL_NORMAL_MAP_ARB = $8511;
-  GL_REFLECTION_MAP_ARB = $8512;
-  GL_TEXTURE_CUBE_MAP_ARB = $8513;
-  GL_TEXTURE_BINDING_CUBE_MAP_ARB = $8514;
-  GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB = $8515;
-  GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB = $8516;
-  GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB = $8517;
-  GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB = $8518;
-  GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB = $8519;
-  GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB = $851A;
-  GL_PROXY_TEXTURE_CUBE_MAP_ARB = $851B;
-  GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB = $851C;
-
-  // GL_ARB_texture_env_combine
-  GL_COMBINE_ARB = $8570;
-  GL_COMBINE_RGB_ARB = $8571;
-  GL_COMBINE_ALPHA_ARB = $8572;
-  GL_SOURCE0_RGB_ARB = $8580;
-  GL_SOURCE1_RGB_ARB = $8581;
-  GL_SOURCE2_RGB_ARB = $8582;
-  GL_SOURCE0_ALPHA_ARB = $8588;
-  GL_SOURCE1_ALPHA_ARB = $8589;
-  GL_SOURCE2_ALPHA_ARB = $858A;
-  GL_OPERAND0_RGB_ARB = $8590;
-  GL_OPERAND1_RGB_ARB = $8591;
-  GL_OPERAND2_RGB_ARB = $8592;
-  GL_OPERAND0_ALPHA_ARB = $8598;
-  GL_OPERAND1_ALPHA_ARB = $8599;
-  GL_OPERAND2_ALPHA_ARB = $859A;
-  GL_RGB_SCALE_ARB = $8573;
-  GL_ADD_SIGNED_ARB = $8574;
-  GL_INTERPOLATE_ARB = $8575;
-  GL_SUBTRACT_ARB = $84E7;
-  GL_CONSTANT_ARB = $8576;
-  GL_PRIMARY_COLOR_ARB = $8577;
-  GL_PREVIOUS_ARB = $8578;
-
-  // GL_ARB_texture_env_dot3
-  GL_DOT3_RGB_ARB = $86AE;
-  GL_DOT3_RGBA_ARB = $86AF;
-
-  // GL_ARB_texture_filter_minmax
-  GL_TEXTURE_REDUCTION_MODE_ARB = $9366;
-  GL_WEIGHTED_AVERAGE_ARB = $9367;
-
-  // GL_ARB_texture_mirrored_repeat
-  GL_MIRRORED_REPEAT_ARB = $8370;
-
-  // GL_ARB_transpose_matrix
-  GL_TRANSPOSE_MODELVIEW_MATRIX_ARB = $84E3;
-  GL_TRANSPOSE_PROJECTION_MATRIX_ARB = $84E4;
-  GL_TRANSPOSE_TEXTURE_MATRIX_ARB = $84E5;
-  GL_TRANSPOSE_COLOR_MATRIX_ARB = $84E6;
-
-  // GL_ARB_vertex_blend
-  GL_MAX_VERTEX_UNITS_ARB = $86A4;
-  GL_ACTIVE_VERTEX_UNITS_ARB = $86A5;
-  GL_WEIGHT_SUM_UNITY_ARB = $86A6;
-  GL_VERTEX_BLEND_ARB = $86A7;
-  GL_CURRENT_WEIGHT_ARB = $86A8;
-  GL_WEIGHT_ARRAY_TYPE_ARB = $86A9;
-  GL_WEIGHT_ARRAY_STRIDE_ARB = $86AA;
-  GL_WEIGHT_ARRAY_SIZE_ARB = $86AB;
-  GL_WEIGHT_ARRAY_POINTER_ARB = $86AC;
-  GL_WEIGHT_ARRAY_ARB = $86AD;
-  GL_MODELVIEW0_ARB = $1700;
-  GL_MODELVIEW1_ARB = $850A;
-  GL_MODELVIEW2_ARB = $8722;
-  GL_MODELVIEW3_ARB = $8723;
-  GL_MODELVIEW4_ARB = $8724;
-  GL_MODELVIEW5_ARB = $8725;
-  GL_MODELVIEW6_ARB = $8726;
-  GL_MODELVIEW7_ARB = $8727;
-  GL_MODELVIEW8_ARB = $8728;
-  GL_MODELVIEW9_ARB = $8729;
-  GL_MODELVIEW10_ARB = $872A;
-  GL_MODELVIEW11_ARB = $872B;
-  GL_MODELVIEW12_ARB = $872C;
-  GL_MODELVIEW13_ARB = $872D;
-  GL_MODELVIEW14_ARB = $872E;
-  GL_MODELVIEW15_ARB = $872F;
-  GL_MODELVIEW16_ARB = $8730;
-  GL_MODELVIEW17_ARB = $8731;
-  GL_MODELVIEW18_ARB = $8732;
-  GL_MODELVIEW19_ARB = $8733;
-  GL_MODELVIEW20_ARB = $8734;
-  GL_MODELVIEW21_ARB = $8735;
-  GL_MODELVIEW22_ARB = $8736;
-  GL_MODELVIEW23_ARB = $8737;
-  GL_MODELVIEW24_ARB = $8738;
-  GL_MODELVIEW25_ARB = $8739;
-  GL_MODELVIEW26_ARB = $873A;
-  GL_MODELVIEW27_ARB = $873B;
-  GL_MODELVIEW28_ARB = $873C;
-  GL_MODELVIEW29_ARB = $873D;
-  GL_MODELVIEW30_ARB = $873E;
-  GL_MODELVIEW31_ARB = $873F;
-
-  // GL_ARB_vertex_buffer_object
-  GL_BUFFER_SIZE_ARB = $8764;
-  GL_BUFFER_USAGE_ARB = $8765;
-  GL_ARRAY_BUFFER_ARB = $8892;
-  GL_ELEMENT_ARRAY_BUFFER_ARB = $8893;
-  GL_ARRAY_BUFFER_BINDING_ARB = $8894;
-  GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB = $8895;
-  GL_VERTEX_ARRAY_BUFFER_BINDING_ARB = $8896;
-  GL_NORMAL_ARRAY_BUFFER_BINDING_ARB = $8897;
-  GL_COLOR_ARRAY_BUFFER_BINDING_ARB = $8898;
-  GL_INDEX_ARRAY_BUFFER_BINDING_ARB = $8899;
-  GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB = $889A;
-  GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB = $889B;
-  GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB = $889C;
-  GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB = $889D;
-  GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB = $889E;
-  GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB = $889F;
-  GL_READ_ONLY_ARB = $88B8;
-  GL_WRITE_ONLY_ARB = $88B9;
-  GL_READ_WRITE_ARB = $88BA;
-  GL_BUFFER_ACCESS_ARB = $88BB;
-  GL_BUFFER_MAPPED_ARB = $88BC;
-  GL_BUFFER_MAP_POINTER_ARB = $88BD;
-  GL_STREAM_DRAW_ARB = $88E0;
-  GL_STREAM_READ_ARB = $88E1;
-  GL_STREAM_COPY_ARB = $88E2;
-  GL_STATIC_DRAW_ARB = $88E4;
-  GL_STATIC_READ_ARB = $88E5;
-  GL_STATIC_COPY_ARB = $88E6;
-  GL_DYNAMIC_DRAW_ARB = $88E8;
-  GL_DYNAMIC_READ_ARB = $88E9;
-  GL_DYNAMIC_COPY_ARB = $88EA;
-
-  // GL_ARB_vertex_program
-  GL_COLOR_SUM_ARB = $8458;
-  GL_VERTEX_PROGRAM_ARB = $8620;
-  GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB = $8622;
-  GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB = $8623;
-  GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB = $8624;
-  GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB = $8625;
-  GL_CURRENT_VERTEX_ATTRIB_ARB = $8626;
-  GL_PROGRAM_LENGTH_ARB = $8627;
-  GL_PROGRAM_STRING_ARB = $8628;
-  GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB = $862E;
-  GL_MAX_PROGRAM_MATRICES_ARB = $862F;
-  GL_CURRENT_MATRIX_STACK_DEPTH_ARB = $8640;
-  GL_CURRENT_MATRIX_ARB = $8641;
-  GL_VERTEX_PROGRAM_POINT_SIZE_ARB = $8642;
-  GL_VERTEX_PROGRAM_TWO_SIDE_ARB = $8643;
-  GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB = $8645;
-  GL_PROGRAM_ERROR_POSITION_ARB = $864B;
-  GL_PROGRAM_BINDING_ARB = $8677;
-  GL_MAX_VERTEX_ATTRIBS_ARB = $8869;
-  GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB = $886A;
-  GL_PROGRAM_ERROR_STRING_ARB = $8874;
-  GL_PROGRAM_FORMAT_ASCII_ARB = $8875;
-  GL_PROGRAM_FORMAT_ARB = $8876;
-  GL_PROGRAM_INSTRUCTIONS_ARB = $88A0;
-  GL_MAX_PROGRAM_INSTRUCTIONS_ARB = $88A1;
-  GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB = $88A2;
-  GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB = $88A3;
-  GL_PROGRAM_TEMPORARIES_ARB = $88A4;
-  GL_MAX_PROGRAM_TEMPORARIES_ARB = $88A5;
-  GL_PROGRAM_NATIVE_TEMPORARIES_ARB = $88A6;
-  GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB = $88A7;
-  GL_PROGRAM_PARAMETERS_ARB = $88A8;
-  GL_MAX_PROGRAM_PARAMETERS_ARB = $88A9;
-  GL_PROGRAM_NATIVE_PARAMETERS_ARB = $88AA;
-  GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB = $88AB;
-  GL_PROGRAM_ATTRIBS_ARB = $88AC;
-  GL_MAX_PROGRAM_ATTRIBS_ARB = $88AD;
-  GL_PROGRAM_NATIVE_ATTRIBS_ARB = $88AE;
-  GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB = $88AF;
-  GL_PROGRAM_ADDRESS_REGISTERS_ARB = $88B0;
-  GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB = $88B1;
-  GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB = $88B2;
-  GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB = $88B3;
-  GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB = $88B4;
-  GL_MAX_PROGRAM_ENV_PARAMETERS_ARB = $88B5;
-  GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB = $88B6;
-  GL_TRANSPOSE_CURRENT_MATRIX_ARB = $88B7;
-  GL_MATRIX0_ARB = $88C0;
-  GL_MATRIX1_ARB = $88C1;
-  GL_MATRIX2_ARB = $88C2;
-  GL_MATRIX3_ARB = $88C3;
-  GL_MATRIX4_ARB = $88C4;
-  GL_MATRIX5_ARB = $88C5;
-  GL_MATRIX6_ARB = $88C6;
-  GL_MATRIX7_ARB = $88C7;
-  GL_MATRIX8_ARB = $88C8;
-  GL_MATRIX9_ARB = $88C9;
-  GL_MATRIX10_ARB = $88CA;
-  GL_MATRIX11_ARB = $88CB;
-  GL_MATRIX12_ARB = $88CC;
-  GL_MATRIX13_ARB = $88CD;
-  GL_MATRIX14_ARB = $88CE;
-  GL_MATRIX15_ARB = $88CF;
-  GL_MATRIX16_ARB = $88D0;
-  GL_MATRIX17_ARB = $88D1;
-  GL_MATRIX18_ARB = $88D2;
-  GL_MATRIX19_ARB = $88D3;
-  GL_MATRIX20_ARB = $88D4;
-  GL_MATRIX21_ARB = $88D5;
-  GL_MATRIX22_ARB = $88D6;
-  GL_MATRIX23_ARB = $88D7;
-  GL_MATRIX24_ARB = $88D8;
-  GL_MATRIX25_ARB = $88D9;
-  GL_MATRIX26_ARB = $88DA;
-  GL_MATRIX27_ARB = $88DB;
-  GL_MATRIX28_ARB = $88DC;
-  GL_MATRIX29_ARB = $88DD;
-  GL_MATRIX30_ARB = $88DE;
-  GL_MATRIX31_ARB = $88DF;
-
-  // GL_ARB_draw_buffers
-  GL_MAX_DRAW_BUFFERS_ARB = $8824;
-  GL_DRAW_BUFFER0_ARB = $8825;
-  GL_DRAW_BUFFER1_ARB = $8826;
-  GL_DRAW_BUFFER2_ARB = $8827;
-  GL_DRAW_BUFFER3_ARB = $8828;
-  GL_DRAW_BUFFER4_ARB = $8829;
-  GL_DRAW_BUFFER5_ARB = $882A;
-  GL_DRAW_BUFFER6_ARB = $882B;
-  GL_DRAW_BUFFER7_ARB = $882C;
-  GL_DRAW_BUFFER8_ARB = $882D;
-  GL_DRAW_BUFFER9_ARB = $882E;
-  GL_DRAW_BUFFER10_ARB = $882F;
-  GL_DRAW_BUFFER11_ARB = $8830;
-  GL_DRAW_BUFFER12_ARB = $8831;
-  GL_DRAW_BUFFER13_ARB = $8832;
-  GL_DRAW_BUFFER14_ARB = $8833;
-  GL_DRAW_BUFFER15_ARB = $8834;
-
-  // GL_ARB_texture_rectangle
-  GL_TEXTURE_RECTANGLE_ARB = $84F5;
-  GL_TEXTURE_BINDING_RECTANGLE_ARB = $84F6;
-  GL_PROXY_TEXTURE_RECTANGLE_ARB = $84F7;
-  GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB = $84F8;
-
-  // GL_ARB_color_buffer_float
-  GL_RGBA_FLOAT_MODE_ARB = $8820;
-  GL_CLAMP_VERTEX_COLOR_ARB = $891A;
-  GL_CLAMP_FRAGMENT_COLOR_ARB = $891B;
-  GL_CLAMP_READ_COLOR_ARB = $891C;
-  GL_FIXED_ONLY_ARB = $891D;
-  WGL_TYPE_RGBA_FLOAT_ARB = $21A0;
-  GLX_RGBA_FLOAT_TYPE = $20B9;
-  GLX_RGBA_FLOAT_BIT = $00000004;
-
-  // GL_ARB_compute_variable_group_size
-  GL_MAX_COMPUTE_VARIABLE_GROUP_INVOCATIONS_ARB = $9344;
-  GL_MAX_COMPUTE_FIXED_GROUP_INVOCATIONS_ARB = $90EB;
-  GL_MAX_COMPUTE_VARIABLE_GROUP_SIZE_ARB = $9345;
-  GL_MAX_COMPUTE_FIXED_GROUP_SIZE_ARB = $91BF;
-
-  // GL_ARB_half_float_pixel
-  GL_HALF_FLOAT_ARB = $140B;
-
-  // GL_ARB_texture_float
-  GL_TEXTURE_RED_TYPE_ARB = $8C10;
-  GL_TEXTURE_GREEN_TYPE_ARB = $8C11;
-  GL_TEXTURE_BLUE_TYPE_ARB = $8C12;
-  GL_TEXTURE_ALPHA_TYPE_ARB = $8C13;
-  GL_TEXTURE_LUMINANCE_TYPE_ARB = $8C14;
-  GL_TEXTURE_INTENSITY_TYPE_ARB = $8C15;
-  GL_TEXTURE_DEPTH_TYPE_ARB = $8C16;
-  GL_UNSIGNED_NORMALIZED_ARB = $8C17;
-  GL_RGBA32F_ARB = $8814;
-  GL_RGB32F_ARB = $8815;
-  GL_ALPHA32F_ARB = $8816;
-  GL_INTENSITY32F_ARB = $8817;
-  GL_LUMINANCE32F_ARB = $8818;
-  GL_LUMINANCE_ALPHA32F_ARB = $8819;
-  GL_RGBA16F_ARB = $881A;
-  GL_RGB16F_ARB = $881B;
-  GL_ALPHA16F_ARB = $881C;
-  GL_INTENSITY16F_ARB = $881D;
-  GL_LUMINANCE16F_ARB = $881E;
-  GL_LUMINANCE_ALPHA16F_ARB = $881F;
-
-  // GL_ARB_pixel_buffer_object
-  GL_PIXEL_PACK_BUFFER_ARB = $88EB;
-  GL_PIXEL_UNPACK_BUFFER_ARB = $88EC;
-  GL_PIXEL_PACK_BUFFER_BINDING_ARB = $88ED;
-  GL_PIXEL_UNPACK_BUFFER_BINDING_ARB = $88EF;
-
-  // GL_ARB_depth_buffer_float
-  GL_DEPTH_COMPONENT32F = $8CAC;
-  GL_DEPTH32F_STENCIL8 = $8CAD;
-  GL_FLOAT_32_UNSIGNED_INT_24_8_REV = $8DAD;
-
-  // GL_ARB_framebuffer_object
-  GL_INVALID_FRAMEBUFFER_OPERATION = $0506;
-  GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING = $8210;
-  GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE = $8211;
-  GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE = $8212;
-  GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE = $8213;
-  GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE = $8214;
-  GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE = $8215;
-  GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE = $8216;
-  GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE = $8217;
-  GL_FRAMEBUFFER_DEFAULT = $8218;
-  GL_FRAMEBUFFER_UNDEFINED = $8219;
-  GL_DEPTH_STENCIL_ATTACHMENT = $821A;
-  GL_MAX_RENDERBUFFER_SIZE = $84E8;
-  GL_DEPTH_STENCIL = $84F9;
-  GL_UNSIGNED_INT_24_8 = $84FA;
-  GL_DEPTH24_STENCIL8 = $88F0;
-  GL_TEXTURE_STENCIL_SIZE = $88F1;
-  GL_TEXTURE_RED_TYPE = $8C10;
-  GL_TEXTURE_GREEN_TYPE = $8C11;
-  GL_TEXTURE_BLUE_TYPE = $8C12;
-  GL_TEXTURE_ALPHA_TYPE = $8C13;
-  GL_TEXTURE_DEPTH_TYPE = $8C16;
-  GL_UNSIGNED_NORMALIZED = $8C17;
-  GL_FRAMEBUFFER_BINDING = $8CA6;
-  GL_DRAW_FRAMEBUFFER_BINDING = GL_FRAMEBUFFER_BINDING;
-  GL_RENDERBUFFER_BINDING = $8CA7;
-  GL_READ_FRAMEBUFFER = $8CA8;
-  GL_DRAW_FRAMEBUFFER = $8CA9;
-  GL_READ_FRAMEBUFFER_BINDING = $8CAA;
-  GL_RENDERBUFFER_SAMPLES = $8CAB;
-  GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = $8CD0;
-  GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = $8CD1;
-  GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = $8CD2;
-  GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = $8CD3;
-  GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER = $8CD4;
-  GL_FRAMEBUFFER_COMPLETE = $8CD5;
-  GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT = $8CD6;
-  GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = $8CD7;
-  GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER = $8CDB;
-  GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER = $8CDC;
-  GL_FRAMEBUFFER_UNSUPPORTED = $8CDD;
-  GL_MAX_COLOR_ATTACHMENTS = $8CDF;
-  GL_COLOR_ATTACHMENT0 = $8CE0;
-  GL_COLOR_ATTACHMENT1 = $8CE1;
-  GL_COLOR_ATTACHMENT2 = $8CE2;
-  GL_COLOR_ATTACHMENT3 = $8CE3;
-  GL_COLOR_ATTACHMENT4 = $8CE4;
-  GL_COLOR_ATTACHMENT5 = $8CE5;
-  GL_COLOR_ATTACHMENT6 = $8CE6;
-  GL_COLOR_ATTACHMENT7 = $8CE7;
-  GL_COLOR_ATTACHMENT8 = $8CE8;
-  GL_COLOR_ATTACHMENT9 = $8CE9;
-  GL_COLOR_ATTACHMENT10 = $8CEA;
-  GL_COLOR_ATTACHMENT11 = $8CEB;
-  GL_COLOR_ATTACHMENT12 = $8CEC;
-  GL_COLOR_ATTACHMENT13 = $8CED;
-  GL_COLOR_ATTACHMENT14 = $8CEE;
-  GL_COLOR_ATTACHMENT15 = $8CEF;
-  GL_DEPTH_ATTACHMENT = $8D00;
-  GL_STENCIL_ATTACHMENT = $8D20;
-  GL_FRAMEBUFFER = $8D40;
-  GL_RENDERBUFFER = $8D41;
-  GL_RENDERBUFFER_WIDTH = $8D42;
-  GL_RENDERBUFFER_HEIGHT = $8D43;
-  GL_RENDERBUFFER_INTERNAL_FORMAT = $8D44;
-  GL_STENCIL_INDEX1 = $8D46;
-  GL_STENCIL_INDEX4 = $8D47;
-  GL_STENCIL_INDEX8 = $8D48;
-  GL_STENCIL_INDEX16 = $8D49;
-  GL_RENDERBUFFER_RED_SIZE = $8D50;
-  GL_RENDERBUFFER_GREEN_SIZE = $8D51;
-  GL_RENDERBUFFER_BLUE_SIZE = $8D52;
-  GL_RENDERBUFFER_ALPHA_SIZE = $8D53;
-  GL_RENDERBUFFER_DEPTH_SIZE = $8D54;
-  GL_RENDERBUFFER_STENCIL_SIZE = $8D55;
-  GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE = $8D56;
-  GL_MAX_SAMPLES = $8D57;
-  // deprecated
-  GL_INDEX = $8222;
-  GL_TEXTURE_LUMINANCE_TYPE = $8C14;
-  GL_TEXTURE_INTENSITY_TYPE = $8C15;
-  // end deprecated
-
-  // GL_ARB_framebuffer_sRGB
-  GL_FRAMEBUFFER_SRGB = $8DB9;
-
-  // GL_ARB_geometry_shader4
-  GL_LINES_ADJACENCY_ARB = $000A;
-  GL_LINE_STRIP_ADJACENCY_ARB = $000B;
-  GL_TRIANGLES_ADJACENCY_ARB = $000C;
-  GL_TRIANGLE_STRIP_ADJACENCY_ARB = $000D;
-  GL_PROGRAM_POINT_SIZE_ARB = $8642;
-  GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB = $8C29;
-  GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB = $8DA7;
-  GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB = $8DA8;
-  GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB = $8DA9;
-  GL_GEOMETRY_SHADER_ARB = $8DD9;
-  GL_GEOMETRY_VERTICES_OUT_ARB = $8DDA;
-  GL_GEOMETRY_INPUT_TYPE_ARB = $8DDB;
-  GL_GEOMETRY_OUTPUT_TYPE_ARB = $8DDC;
-  GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB = $8DDD;
-  GL_MAX_VERTEX_VARYING_COMPONENTS_ARB = $8DDE;
-  GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB = $8DDF;
-  GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB = $8DE0;
-  GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB = $8DE1;
-  { reuse GL_MAX_VARYING_COMPONENTS }
-  { reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER }
-
-  // GL_ARB_gl_spirv
-  GL_SHADER_BINARY_FORMAT_SPIR_V_ARB = $9551;
-  GL_SPIR_V_BINARY_ARB = $9552;
-
-  // GL_ARB_half_float_vertex
-  GL_HALF_FLOAT = $140B;
-
-  // GL_ARB_instanced_arrays
-  GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB = $88FE;
-
-  // GL_ARB_map_buffer_range
-  GL_MAP_READ_BIT = $0001;
-  GL_MAP_WRITE_BIT = $0002;
-  GL_MAP_INVALIDATE_RANGE_BIT = $0004;
-  GL_MAP_INVALIDATE_BUFFER_BIT = $0008;
-  GL_MAP_FLUSH_EXPLICIT_BIT = $0010;
-  GL_MAP_UNSYNCHRONIZED_BIT = $0020;
-
-  // GL_ARB_texture_buffer_object
-  GL_TEXTURE_BUFFER_ARB = $8C2A;
-  GL_MAX_TEXTURE_BUFFER_SIZE_ARB = $8C2B;
-  GL_TEXTURE_BINDING_BUFFER_ARB = $8C2C;
-  GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB = $8C2D;
-  GL_TEXTURE_BUFFER_FORMAT_ARB = $8C2E;
-
-  // GL_ARB_texture_compression_rgtc
-  GL_COMPRESSED_RED_RGTC1 = $8DBB;
-  GL_COMPRESSED_SIGNED_RED_RGTC1 = $8DBC;
-  GL_COMPRESSED_RG_RGTC2 = $8DBD;
-  GL_COMPRESSED_SIGNED_RG_RGTC2 = $8DBE;
-
-  // GL_ARB_texture_rg
-  GL_RG = $8227;
-  GL_RG_INTEGER = $8228;
-  GL_R8 = $8229;
-  GL_R16 = $822A;
-  GL_RG8 = $822B;
-  GL_RG16 = $822C;
-  GL_R16F = $822D;
-  GL_R32F = $822E;
-  GL_RG16F = $822F;
-  GL_RG32F = $8230;
-  GL_R8I = $8231;
-  GL_R8UI = $8232;
-  GL_R16I = $8233;
-  GL_R16UI = $8234;
-  GL_R32I = $8235;
-  GL_R32UI = $8236;
-  GL_RG8I = $8237;
-  GL_RG8UI = $8238;
-  GL_RG16I = $8239;
-  GL_RG16UI = $823A;
-  GL_RG32I = $823B;
-  GL_RG32UI = $823C;
-
-  // GL_ARB_vertex_array_object
-  GL_VERTEX_ARRAY_BINDING = $85B5;
-
-  // GL_ARB_uniform_buffer_object
-  GL_UNIFORM_BUFFER = $8A11;
-  GL_UNIFORM_BUFFER_BINDING = $8A28;
-  GL_UNIFORM_BUFFER_START = $8A29;
-  GL_UNIFORM_BUFFER_SIZE = $8A2A;
-  GL_MAX_VERTEX_UNIFORM_BLOCKS = $8A2B;
-  GL_MAX_GEOMETRY_UNIFORM_BLOCKS = $8A2C;
-  GL_MAX_FRAGMENT_UNIFORM_BLOCKS = $8A2D;
-  GL_MAX_COMBINED_UNIFORM_BLOCKS = $8A2E;
-  GL_MAX_UNIFORM_BUFFER_BINDINGS = $8A2F;
-  GL_MAX_UNIFORM_BLOCK_SIZE = $8A30;
-  GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS = $8A31;
-  GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS = $8A32;
-  GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS = $8A33;
-  GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT = $8A34;
-  GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH = $8A35;
-  GL_ACTIVE_UNIFORM_BLOCKS = $8A36;
-  GL_UNIFORM_TYPE = $8A37;
-  GL_UNIFORM_SIZE = $8A38;
-  GL_UNIFORM_NAME_LENGTH = $8A39;
-  GL_UNIFORM_BLOCK_INDEX = $8A3A;
-  GL_UNIFORM_OFFSET = $8A3B;
-  GL_UNIFORM_ARRAY_STRIDE = $8A3C;
-  GL_UNIFORM_MATRIX_STRIDE = $8A3D;
-  GL_UNIFORM_IS_ROW_MAJOR = $8A3E;
-  GL_UNIFORM_BLOCK_BINDING = $8A3F;
-  GL_UNIFORM_BLOCK_DATA_SIZE = $8A40;
-  GL_UNIFORM_BLOCK_NAME_LENGTH = $8A41;
-  GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS = $8A42;
-  GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES = $8A43;
-  GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER = $8A44;
-  GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER = $8A45;
-  GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER = $8A46;
-  GL_INVALID_INDEX = $FFFFFFFF;
-
-  // GL_ARB_compatibility
-  { ARB_compatibility just defines tokens from core 3.0 }
-
-  // GL_ARB_copy_buffer
-  GL_COPY_READ_BUFFER_BINDING = $8F36;
-  GL_COPY_READ_BUFFER = GL_COPY_READ_BUFFER_BINDING;
-  GL_COPY_WRITE_BUFFER_BINDING = $8F37;
-  GL_COPY_WRITE_BUFFER = GL_COPY_WRITE_BUFFER_BINDING;
-
-  // GL_ARB_depth_clamp
-  GL_DEPTH_CLAMP = $864F;
-
-  // GL_ARB_provoking_vertex
-  GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION = $8E4C;
-  GL_FIRST_VERTEX_CONVENTION = $8E4D;
-  GL_LAST_VERTEX_CONVENTION = $8E4E;
-  GL_PROVOKING_VERTEX = $8E4F;
-
-  // GL_ARB_seamless_cube_map
-  GL_TEXTURE_CUBE_MAP_SEAMLESS = $884F;
-
-  // GL_ARB_sync
-  GL_MAX_SERVER_WAIT_TIMEOUT = $9111;
-  GL_OBJECT_TYPE = $9112;
-  GL_SYNC_CONDITION = $9113;
-  GL_SYNC_STATUS = $9114;
-  GL_SYNC_FLAGS = $9115;
-  GL_SYNC_FENCE = $9116;
-  GL_SYNC_GPU_COMMANDS_COMPLETE = $9117;
-  GL_UNSIGNALED = $9118;
-  GL_SIGNALED = $9119;
-  GL_ALREADY_SIGNALED = $911A;
-  GL_TIMEOUT_EXPIRED = $911B;
-  GL_CONDITION_SATISFIED = $911C;
-  GL_WAIT_FAILED = $911D;
-  GL_SYNC_FLUSH_COMMANDS_BIT = $00000001;
-  GL_TIMEOUT_IGNORED = $FFFFFFFFFFFFFFFF;
-
-  // GL_ARB_texture_multisample
-  GL_SAMPLE_POSITION = $8E50;
-  GL_SAMPLE_MASK = $8E51;
-  GL_SAMPLE_MASK_VALUE = $8E52;
-  GL_MAX_SAMPLE_MASK_WORDS = $8E59;
-  GL_TEXTURE_2D_MULTISAMPLE = $9100;
-  GL_PROXY_TEXTURE_2D_MULTISAMPLE = $9101;
-  GL_TEXTURE_2D_MULTISAMPLE_ARRAY = $9102;
-  GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY = $9103;
-  GL_TEXTURE_BINDING_2D_MULTISAMPLE = $9104;
-  GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY = $9105;
-  GL_TEXTURE_SAMPLES = $9106;
-  GL_TEXTURE_FIXED_SAMPLE_LOCATIONS = $9107;
-  GL_SAMPLER_2D_MULTISAMPLE = $9108;
-  GL_INT_SAMPLER_2D_MULTISAMPLE = $9109;
-  GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE = $910A;
-  GL_SAMPLER_2D_MULTISAMPLE_ARRAY = $910B;
-  GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY = $910C;
-  GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY = $910D;
-  GL_MAX_COLOR_TEXTURE_SAMPLES = $910E;
-  GL_MAX_DEPTH_TEXTURE_SAMPLES = $910F;
-  GL_MAX_INTEGER_SAMPLES = $9110;
-
-  // GL_ARB_vertex_array_bgra
-  { reuse GL_BGRA }
-
-  // GL_ARB_sample_shading
-  GL_SAMPLE_SHADING_ARB = $8C36;
-  GL_MIN_SAMPLE_SHADING_VALUE_ARB = $8C37;
-
-  // GL_ARB_sample_locations
-  GL_SAMPLE_LOCATION_SUBPIXEL_BITS_ARB = $933D;
-  GL_SAMPLE_LOCATION_PIXEL_GRID_WIDTH_ARB = $933E;
-  GL_SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_ARB = $933F;
-  GL_PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_ARB = $9340;
-  GL_SAMPLE_LOCATION_ARB = $8E50;
-  GL_PROGRAMMABLE_SAMPLE_LOCATION_ARB = $9341;
-  GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_ARB = $9342;
-  GL_FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_ARB = $9343;
-
-  // GL_ARB_texture_cube_map_array
-  GL_TEXTURE_CUBE_MAP_ARRAY_ARB = $9009;
-  GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB = $900A;
-  GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB = $900B;
-  GL_SAMPLER_CUBE_MAP_ARRAY_ARB = $900C;
-  GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB = $900D;
-  GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB = $900E;
-  GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB = $900F;
-
-  // GL_ARB_texture_gather
-  GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB = $8E5E;
-  GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB = $8E5F;
-
-  // GL_ARB_shading_language_include
-  GL_SHADER_INCLUDE_ARB = $8DAE;
-  GL_NAMED_STRING_LENGTH_ARB = $8DE9;
-  GL_NAMED_STRING_TYPE_ARB = $8DEA;
-
-  // GL_ARB_texture_compression_bptc
-  GL_COMPRESSED_RGBA_BPTC_UNORM_ARB = $8E8C;
-  GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB = $8E8D;
-  GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB = $8E8E;
-  GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB = $8E8F;
-
-  // GL_ARB_blend_func_extended
-  GL_SRC1_COLOR = $88F9;
-  { reuse GL_SRC1_ALPHA }
-  GL_ONE_MINUS_SRC1_COLOR = $88FA;
-  GL_ONE_MINUS_SRC1_ALPHA = $88FB;
-  GL_MAX_DUAL_SOURCE_DRAW_BUFFERS = $88FC;
-
-  // GL_ARB_occlusion_query2
-  GL_ANY_SAMPLES_PASSED = $8C2F;
-
-  // GL_ARB_parallel_shader_compile
-  GL_MAX_SHADER_COMPILER_THREADS_ARB = $91B0;
-  GL_COMPLETION_STATUS_ARB = $91B1;
-
-  // GL_ARB_sampler_objects
-  GL_SAMPLER_BINDING = $8919;
-
-  // GL_ARB_texture_rgb10_a2ui
-  GL_RGB10_A2UI = $906F;
-
-  // GL_ARB_texture_swizzle
-  GL_TEXTURE_SWIZZLE_R = $8E42;
-  GL_TEXTURE_SWIZZLE_G = $8E43;
-  GL_TEXTURE_SWIZZLE_B = $8E44;
-  GL_TEXTURE_SWIZZLE_A = $8E45;
-  GL_TEXTURE_SWIZZLE_RGBA = $8E46;
-
-  // GL_ARB_SPARSE_TEXTURE
-  GL_TEXTURE_SPARSE_ARB = $91A6;
-  GL_VIRTUAL_PAGE_SIZE_INDEX_ARB = $91A7;
-  GL_NUM_VIRTUAL_PAGE_SIZES_ARB = $91A8;
-  GL_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_ARB = $91A9;
-  GL_NUM_SPARSE_LEVELS_ARB = $91AA;
-  GL_VIRTUAL_PAGE_SIZE_X_ARB = $9195;
-  GL_VIRTUAL_PAGE_SIZE_Y_ARB = $9196;
-  GL_VIRTUAL_PAGE_SIZE_Z_ARB = $9197;
-  GL_MAX_SPARSE_TEXTURE_SIZE_ARB = $9198;
-  GL_MAX_SPARSE_3D_TEXTURE_SIZE_ARB = $9199;
-  GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS_ARB = $919A;
-  GL_MIN_SPARSE_LEVEL_ARB = $919B;
-
-  // GL_ARB_timer_query
-  GL_TIME_ELAPSED = $88BF;
-  GL_TIMESTAMP = $8E28;
-
-  // GL_ARB_vertex_type_2_10_10_10_rev
-  { reuse GL_UNSIGNED_INT_2_10_10_10_REV }
-  GL_INT_2_10_10_10_REV = $8D9F;
-
-  // GL_ARB_draw_indirect
-  GL_DRAW_INDIRECT_BUFFER = $8F3F;
-  GL_DRAW_INDIRECT_BUFFER_BINDING = $8F43;
-
-  // GL_ARB_gpu_shader5
-  GL_GEOMETRY_SHADER_INVOCATIONS = $887F;
-  GL_MAX_GEOMETRY_SHADER_INVOCATIONS = $8E5A;
-  GL_MIN_FRAGMENT_INTERPOLATION_OFFSET = $8E5B;
-  GL_MAX_FRAGMENT_INTERPOLATION_OFFSET = $8E5C;
-  GL_FRAGMENT_INTERPOLATION_OFFSET_BITS = $8E5D;
-  { reuse GL_MAX_VERTEX_STREAMS }
-
-  // GL_ARB_gpu_shader_fp64
-  { reuse GL_DOUBLE }
-  GL_DOUBLE_VEC2 = $8FFC;
-  GL_DOUBLE_VEC3 = $8FFD;
-  GL_DOUBLE_VEC4 = $8FFE;
-  GL_DOUBLE_MAT2 = $8F46;
-  GL_DOUBLE_MAT3 = $8F47;
-  GL_DOUBLE_MAT4 = $8F48;
-  GL_DOUBLE_MAT2x3 = $8F49;
-  GL_DOUBLE_MAT2x4 = $8F4A;
-  GL_DOUBLE_MAT3x2 = $8F4B;
-  GL_DOUBLE_MAT3x4 = $8F4C;
-  GL_DOUBLE_MAT4x2 = $8F4D;
-  GL_DOUBLE_MAT4x3 = $8F4E;
-
-  // GL_ARB_gpu_shader_int64
-  GL_INT64_ARB = $140E;
-  GL_INT64_VEC2_ARB = $8FE9;
-  GL_INT64_VEC3_ARB = $8FEA;
-  GL_INT64_VEC4_ARB = $8FEB;
-  GL_UNSIGNED_INT64_VEC2_ARB = $8FF5;
-  GL_UNSIGNED_INT64_VEC3_ARB = $8FF6;
-  GL_UNSIGNED_INT64_VEC4_ARB = $8FF7;
-
-  // GL_ARB_shader_subroutine
-  GL_ACTIVE_SUBROUTINES = $8DE5;
-  GL_ACTIVE_SUBROUTINE_UNIFORMS = $8DE6;
-  GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS = $8E47;
-  GL_ACTIVE_SUBROUTINE_MAX_LENGTH = $8E48;
-  GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH = $8E49;
-  GL_MAX_SUBROUTINES = $8DE7;
-  GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS = $8DE8;
-  GL_NUM_COMPATIBLE_SUBROUTINES = $8E4A;
-  GL_COMPATIBLE_SUBROUTINES = $8E4B;
-  { reuse GL_UNIFORM_SIZE }
-  { reuse GL_UNIFORM_NAME_LENGTH }
-
-  // GL_ARB_tessellation_shader
-  GL_PATCHES = $000E;
-  GL_PATCH_VERTICES = $8E72;
-  GL_PATCH_DEFAULT_INNER_LEVEL = $8E73;
-  GL_PATCH_DEFAULT_OUTER_LEVEL = $8E74;
-  GL_TESS_CONTROL_OUTPUT_VERTICES = $8E75;
-  GL_TESS_GEN_MODE = $8E76;
-  GL_TESS_GEN_SPACING = $8E77;
-  GL_TESS_GEN_VERTEX_ORDER = $8E78;
-  GL_TESS_GEN_POINT_MODE = $8E79;
-  { reuse GL_TRIANGLES }
-  { reuse GL_QUADS }
-  GL_ISOLINES = $8E7A;
-  { reuse GL_EQUAL }
-  GL_FRACTIONAL_ODD = $8E7B;
-  GL_FRACTIONAL_EVEN = $8E7C;
-  { reuse GL_CCW }
-  { reuse GL_CW }
-  GL_MAX_PATCH_VERTICES = $8E7D;
-  GL_MAX_TESS_GEN_LEVEL = $8E7E;
-  GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS = $8E7F;
-  GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS = $8E80;
-  GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS = $8E81;
-  GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS = $8E82;
-  GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS = $8E83;
-  GL_MAX_TESS_PATCH_COMPONENTS = $8E84;
-  GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS = $8E85;
-  GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS = $8E86;
-  GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS = $8E89;
-  GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS = $8E8A;
-  GL_MAX_TESS_CONTROL_INPUT_COMPONENTS = $886C;
-  GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS = $886D;
-  GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS = $8E1E;
-  GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS = $8E1F;
-  GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER = $84F0;
-  GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER = $84F1;
-  GL_TESS_EVALUATION_SHADER = $8E87;
-  GL_TESS_CONTROL_SHADER = $8E88;
-
-  // GL_ARB_texture_buffer_object_rgb32
-  { reuse GL_RGB32F }
-  { reuse GL_RGB32UI }
-  { reuse GL_RGB32I }
-
-  // GL_ARB_transform_feedback2
-  GL_TRANSFORM_FEEDBACK = $8E22;
-  GL_TRANSFORM_FEEDBACK_PAUSED = $8E23;
-  GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED = GL_TRANSFORM_FEEDBACK_PAUSED;
-  GL_TRANSFORM_FEEDBACK_ACTIVE = $8E24;
-  GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE = GL_TRANSFORM_FEEDBACK_ACTIVE;
-  GL_TRANSFORM_FEEDBACK_BINDING = $8E25;
-
-  // GL_ARB_transform_feedback_overflow_query
-  GL_TRANSFORM_FEEDBACK_OVERFLOW_ARB = $82EC;
-  GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB = $82ED;
-
-  // GL_ARB_transform_feedback3
-  GL_MAX_TRANSFORM_FEEDBACK_BUFFERS = $8E70;
-  GL_MAX_VERTEX_STREAMS = $8E71;
-
-  // GL_ARB_ES2_compatibility
-  GL_FIXED = $140C;
-  GL_IMPLEMENTATION_COLOR_READ_TYPE = $8B9A;
-  GL_IMPLEMENTATION_COLOR_READ_FORMAT = $8B9B;
-  GL_LOW_FLOAT = $8DF0;
-  GL_MEDIUM_FLOAT = $8DF1;
-  GL_HIGH_FLOAT = $8DF2;
-  GL_LOW_INT = $8DF3;
-  GL_MEDIUM_INT = $8DF4;
-  GL_HIGH_INT = $8DF5;
-  GL_SHADER_COMPILER = $8DFA;
-  GL_NUM_SHADER_BINARY_FORMATS = $8DF9;
-  GL_MAX_VERTEX_UNIFORM_VECTORS = $8DFB;
-  GL_MAX_VARYING_VECTORS = $8DFC;
-  GL_MAX_FRAGMENT_UNIFORM_VECTORS = $8DFD;
-  GL_RGB565 = $8D62;
-
-  // GL_ARB_ES3_2_compatibility
-  GL_PRIMITIVE_BOUNDING_BOX_ARB = $092BE;
-  GL_MULTISAMPLE_LINE_WIDTH_RANGE_ARB = $09381;
-  GL_MULTISAMPLE_LINE_WIDTH_GRANULARITY_ARB = $09382;
-
-  // GL_ARB_get_program_binary
-  GL_PROGRAM_BINARY_RETRIEVABLE_HINT = $8257;
-  GL_PROGRAM_BINARY_LENGTH = $8741;
-  GL_NUM_PROGRAM_BINARY_FORMATS = $87FE;
-  GL_PROGRAM_BINARY_FORMATS = $87FF;
-
-  // GL_ARB_separate_shader_objects
-  GL_VERTEX_SHADER_BIT = $00000001;
-  GL_FRAGMENT_SHADER_BIT = $00000002;
-  GL_GEOMETRY_SHADER_BIT = $00000004;
-  GL_TESS_CONTROL_SHADER_BIT = $00000008;
-  GL_TESS_EVALUATION_SHADER_BIT = $00000010;
-  GL_ALL_SHADER_BITS = $FFFFFFFF;
-  GL_PROGRAM_SEPARABLE = $8258;
-  GL_ACTIVE_PROGRAM = $8259;
-  GL_PROGRAM_PIPELINE_BINDING = $825A;
-
-  // GL_ARB_vertex_attrib_64bit
-  { reuse GL_RGB32I }
-  { reuse GL_DOUBLE_VEC2 }
-  { reuse GL_DOUBLE_VEC3 }
-  { reuse GL_DOUBLE_VEC4 }
-  { reuse GL_DOUBLE_MAT2 }
-  { reuse GL_DOUBLE_MAT3 }
-  { reuse GL_DOUBLE_MAT4 }
-  { reuse GL_DOUBLE_MAT2x3 }
-  { reuse GL_DOUBLE_MAT2x4 }
-  { reuse GL_DOUBLE_MAT3x2 }
-  { reuse GL_DOUBLE_MAT3x4 }
-  { reuse GL_DOUBLE_MAT4x2 }
-  { reuse GL_DOUBLE_MAT4x3 }
-
-  // GL_ARB_viewport_array
-  { reuse GL_SCISSOR_BOX }
-  { reuse GL_VIEWPORT }
-  { reuse GL_DEPTH_RANGE }
-  { reuse GL_SCISSOR_TEST }
-  GL_MAX_VIEWPORTS = $825B;
-  GL_VIEWPORT_SUBPIXEL_BITS = $825C;
-  GL_VIEWPORT_BOUNDS_RANGE = $825D;
-  GL_LAYER_PROVOKING_VERTEX = $825E;
-  GL_VIEWPORT_INDEX_PROVOKING_VERTEX = $825F;
-  GL_UNDEFINED_VERTEX = $8260;
-  { reuse GL_FIRST_VERTEX_CONVENTION }
-  { reuse GL_LAST_VERTEX_CONVENTION }
-  { reuse GL_PROVOKING_VERTEX }
-
-  // GL_ARB_cl_event
-  GL_SYNC_CL_EVENT_ARB = $8240;
-  GL_SYNC_CL_EVENT_COMPLETE_ARB = $8241;
-
-  // GL_ARB_debug_output
-  GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB = $8242;
-  GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB = $8243;
-  GL_DEBUG_CALLBACK_FUNCTION_ARB = $8244;
-  GL_DEBUG_CALLBACK_USER_PARAM_ARB = $8245;
-  GL_DEBUG_SOURCE_API_ARB = $8246;
-  GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB = $8247;
-  GL_DEBUG_SOURCE_SHADER_COMPILER_ARB = $8248;
-  GL_DEBUG_SOURCE_THIRD_PARTY_ARB = $8249;
-  GL_DEBUG_SOURCE_APPLICATION_ARB = $824A;
-  GL_DEBUG_SOURCE_OTHER_ARB = $824B;
-  GL_DEBUG_TYPE_ERROR_ARB = $824C;
-  GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB = $824D;
-  GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB = $824E;
-  GL_DEBUG_TYPE_PORTABILITY_ARB = $824F;
-  GL_DEBUG_TYPE_PERFORMANCE_ARB = $8250;
-  GL_DEBUG_TYPE_OTHER_ARB = $8251;
-  GL_MAX_DEBUG_MESSAGE_LENGTH_ARB = $9143;
-  GL_MAX_DEBUG_LOGGED_MESSAGES_ARB = $9144;
-  GL_DEBUG_LOGGED_MESSAGES_ARB = $9145;
-  GL_DEBUG_SEVERITY_HIGH_ARB = $9146;
-  GL_DEBUG_SEVERITY_MEDIUM_ARB = $9147;
-  GL_DEBUG_SEVERITY_LOW_ARB = $9148;
-
-  // GL_ARB_robustness
-  { reuse GL_NO_ERROR }
-  GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB = $00000004;
-  GL_LOSE_CONTEXT_ON_RESET_ARB = $8252;
-  GL_GUILTY_CONTEXT_RESET_ARB = $8253;
-  GL_INNOCENT_CONTEXT_RESET_ARB = $8254;
-  GL_UNKNOWN_CONTEXT_RESET_ARB = $8255;
-  GL_RESET_NOTIFICATION_STRATEGY_ARB = $8256;
-  GL_NO_RESET_NOTIFICATION_ARB = $8261;
-
-  //  GL_ARB_compressed_texture_pixel_storage
-  GL_UNPACK_COMPRESSED_BLOCK_WIDTH  = $09127;
-  GL_UNPACK_COMPRESSED_BLOCK_HEIGHT = $09128;
-  GL_UNPACK_COMPRESSED_BLOCK_DEPTH  = $09129;
-  GL_UNPACK_COMPRESSED_BLOCK_SIZE   = $0912A;
-  GL_PACK_COMPRESSED_BLOCK_WIDTH    = $0912B;
-  GL_PACK_COMPRESSED_BLOCK_HEIGHT   = $0912C;
-  GL_PACK_COMPRESSED_BLOCK_DEPTH    = $0912D;
-  GL_PACK_COMPRESSED_BLOCK_SIZE     = $0912E;
-
-  // GL_ARB_internalformat_query
-  GL_NUM_SAMPLE_COUNTS              = $09380;
-
-  // GL_ARB_map_buffer_alignment
-  GL_MIN_MAP_BUFFER_ALIGNMENT       = $090BC;
-
-  // GL_ARB_shader_atomic_counters
-  GL_ATOMIC_COUNTER_BUFFER          = $92C0;
-  GL_ATOMIC_COUNTER_BUFFER_BINDING  = $92C1;
-  GL_ATOMIC_COUNTER_BUFFER_START    = $92C2;
-  GL_ATOMIC_COUNTER_BUFFER_SIZE     = $92C3;
-  GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE = $92C4;
-  GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS = $92C5;
-  GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES = $92C6;
-  GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER = $92C7;
-  GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER = $92C8;
-  GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER = $92C9;
-  GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER = $92CA;
-  GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER = $92CB;
-  GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS = $92CC;
-  GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS = $92CD;
-  GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS = $92CE;
-  GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS = $92CF;
-  GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS = $92D0;
-  GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS = $92D1;
-  GL_MAX_VERTEX_ATOMIC_COUNTERS     = $92D2;
-  GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS = $92D3;
-  GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS = $92D4;
-  GL_MAX_GEOMETRY_ATOMIC_COUNTERS   = $92D5;
-  GL_MAX_FRAGMENT_ATOMIC_COUNTERS   = $92D6;
-  GL_MAX_COMBINED_ATOMIC_COUNTERS   = $92D7;
-  GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE = $92D8;
-  GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS = $92DC;
-  GL_ACTIVE_ATOMIC_COUNTER_BUFFERS  = $92D9;
-  GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX = $92DA;
-  GL_UNSIGNED_INT_ATOMIC_COUNTER    = $92DB;
-
-  // GL_ARB_shader_image_load_store
-  GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT = $00000001;
-  GL_ELEMENT_ARRAY_BARRIER_BIT      = $00000002;
-  GL_UNIFORM_BARRIER_BIT            = $00000004;
-  GL_TEXTURE_FETCH_BARRIER_BIT      = $00000008;
-  GL_SHADER_IMAGE_ACCESS_BARRIER_BIT = $00000020;
-  GL_COMMAND_BARRIER_BIT            = $00000040;
-  GL_PIXEL_BUFFER_BARRIER_BIT       = $00000080;
-  GL_TEXTURE_UPDATE_BARRIER_BIT     = $00000100;
-  GL_BUFFER_UPDATE_BARRIER_BIT      = $00000200;
-  GL_FRAMEBUFFER_BARRIER_BIT        = $00000400;
-  GL_TRANSFORM_FEEDBACK_BARRIER_BIT = $00000800;
-  GL_ATOMIC_COUNTER_BARRIER_BIT     = $00001000;
-  GL_ALL_BARRIER_BITS               = $FFFFFFFF;
-  GL_MAX_IMAGE_UNITS                = $8F38;
-  GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS = $8F39;
-  GL_IMAGE_BINDING_NAME             = $8F3A;
-  GL_IMAGE_BINDING_LEVEL            = $8F3B;
-  GL_IMAGE_BINDING_LAYERED          = $8F3C;
-  GL_IMAGE_BINDING_LAYER            = $8F3D;
-  GL_IMAGE_BINDING_ACCESS           = $8F3E;
-  GL_IMAGE_1D                       = $904C;
-  GL_IMAGE_2D                       = $904D;
-  GL_IMAGE_3D                       = $904E;
-  GL_IMAGE_2D_RECT                  = $904F;
-  GL_IMAGE_CUBE                     = $9050;
-  GL_IMAGE_BUFFER                   = $9051;
-  GL_IMAGE_1D_ARRAY                 = $9052;
-  GL_IMAGE_2D_ARRAY                 = $9053;
-  GL_IMAGE_CUBE_MAP_ARRAY           = $9054;
-  GL_IMAGE_2D_MULTISAMPLE           = $9055;
-  GL_IMAGE_2D_MULTISAMPLE_ARRAY     = $9056;
-  GL_INT_IMAGE_1D                   = $9057;
-  GL_INT_IMAGE_2D                   = $9058;
-  GL_INT_IMAGE_3D                   = $9059;
-  GL_INT_IMAGE_2D_RECT              = $905A;
-  GL_INT_IMAGE_CUBE                 = $905B;
-  GL_INT_IMAGE_BUFFER               = $905C;
-  GL_INT_IMAGE_1D_ARRAY             = $905D;
-  GL_INT_IMAGE_2D_ARRAY             = $905E;
-  GL_INT_IMAGE_CUBE_MAP_ARRAY       = $905F;
-  GL_INT_IMAGE_2D_MULTISAMPLE       = $9060;
-  GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY = $9061;
-  GL_UNSIGNED_INT_IMAGE_1D          = $9062;
-  GL_UNSIGNED_INT_IMAGE_2D          = $9063;
-  GL_UNSIGNED_INT_IMAGE_3D          = $9064;
-  GL_UNSIGNED_INT_IMAGE_2D_RECT     = $9065;
-  GL_UNSIGNED_INT_IMAGE_CUBE        = $9066;
-  GL_UNSIGNED_INT_IMAGE_BUFFER      = $9067;
-  GL_UNSIGNED_INT_IMAGE_1D_ARRAY    = $9068;
-  GL_UNSIGNED_INT_IMAGE_2D_ARRAY    = $9069;
-  GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY = $906A;
-  GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE = $906B;
-  GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY = $906C;
-  GL_MAX_IMAGE_SAMPLES              = $906D;
-  GL_IMAGE_BINDING_FORMAT           = $906E;
-  GL_IMAGE_FORMAT_COMPATIBILITY_TYPE = $90C7;
-  GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE = $90C8;
-  GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS = $90C9;
-  GL_MAX_VERTEX_IMAGE_UNIFORMS      = $90CA;
-  GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS = $90CB;
-  GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS = $90CC;
-  GL_MAX_GEOMETRY_IMAGE_UNIFORMS    = $90CD;
-  GL_MAX_FRAGMENT_IMAGE_UNIFORMS    = $90CE;
-  GL_MAX_COMBINED_IMAGE_UNIFORMS    = $90CF;
-
-  // GL_ARB_texture_storage
-  GL_TEXTURE_IMMUTABLE_FORMAT       = $912F;
-
-  // 4.3
-  // GL_KHR_texture_compression_astc_hdr
-  GL_COMPRESSED_RGBA_ASTC_4x4_KHR = $93B0;
-  GL_COMPRESSED_RGBA_ASTC_5x4_KHR = $93B1;
-  GL_COMPRESSED_RGBA_ASTC_5x5_KHR = $93B2;
-  GL_COMPRESSED_RGBA_ASTC_6x5_KHR = $93B3;
-  GL_COMPRESSED_RGBA_ASTC_6x6_KHR = $93B4;
-  GL_COMPRESSED_RGBA_ASTC_8x5_KHR = $93B5;
-  GL_COMPRESSED_RGBA_ASTC_8x6_KHR = $93B6;
-  GL_COMPRESSED_RGBA_ASTC_8x8_KHR = $93B7;
-  GL_COMPRESSED_RGBA_ASTC_105_KHR = $93B8;
-  GL_COMPRESSED_RGBA_ASTC_106_KHR = $93B9;
-  GL_COMPRESSED_RGBA_ASTC_108_KHR = $93BA;
-  GL_COMPRESSED_RGBA_ASTC_110_KHR = $93BB;
-  GL_COMPRESSED_RGBA_ASTC_12x10_KHR = $93BC;
-  GL_COMPRESSED_RGBA_ASTC_12x12_KHR = $93BD;
-  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR = $93D0;
-  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR = $93D1;
-  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR = $93D2;
-  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR = $93D3;
-  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR = $93D4;
-  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR = $93D5;
-  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR = $93D6;
-  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR = $93D7;
-  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR = $93D8;
-  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR = $93D9;
-  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR = $93DA;
-  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR = $93DB;
-  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR = $93DC;
-  GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR = $93DD;
-  // (4.3) GL_KHR_debug
-  GL_DEBUG_OUTPUT_SYNCHRONOUS       = $8242;
-  GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH = $8243;
-  GL_DEBUG_CALLBACK_FUNCTION        = $8244;
-  GL_DEBUG_CALLBACK_USER_PARAM      = $8245;
-  GL_DEBUG_SOURCE_API               = $8246;
-  GL_DEBUG_SOURCE_WINDOW_SYSTEM     = $8247;
-  GL_DEBUG_SOURCE_SHADER_COMPILER   = $8248;
-  GL_DEBUG_SOURCE_THIRD_PARTY       = $8249;
-  GL_DEBUG_SOURCE_APPLICATION       = $824A;
-  GL_DEBUG_SOURCE_OTHER             = $824B;
-  GL_DEBUG_TYPE_ERROR               = $824C;
-  GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR = $824D;
-  GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR  = $824E;
-  GL_DEBUG_TYPE_PORTABILITY         = $824F;
-  GL_DEBUG_TYPE_PERFORMANCE         = $8250;
-  GL_DEBUG_TYPE_OTHER               = $8251;
-  GL_DEBUG_TYPE_MARKER              = $8268;
-  GL_DEBUG_TYPE_PUSH_GROUP          = $8269;
-  GL_DEBUG_TYPE_POP_GROUP           = $826A;
-  GL_DEBUG_SEVERITY_NOTIFICATION    = $826B;
-  GL_MAX_DEBUG_GROUP_STACK_DEPTH    = $826C;
-  GL_DEBUG_GROUP_STACK_DEPTH        = $826D;
-  GL_BUFFER                         = $82E0;
-  GL_SHADER                         = $82E1;
-  GL_PROGRAM                        = $82E2;
-  GL_QUERY                          = $82E3;
-  GL_PROGRAM_PIPELINE               = $82E4;
-  GL_SAMPLER                        = $82E6;
-  GL_DISPLAY_LIST                   = $82E7;
-  GL_MAX_LABEL_LENGTH               = $82E8;
-  GL_MAX_DEBUG_MESSAGE_LENGTH       = $9143;
-  GL_MAX_DEBUG_LOGGED_MESSAGES      = $9144;
-  GL_DEBUG_LOGGED_MESSAGES          = $9145;
-  GL_DEBUG_SEVERITY_HIGH            = $9146;
-  GL_DEBUG_SEVERITY_MEDIUM          = $9147;
-  GL_DEBUG_SEVERITY_LOW             = $9148;
-  GL_DEBUG_OUTPUT                   = $92E0;
-  GL_CONTEXT_FLAG_DEBUG_BIT         = $00000002;
-  GL_COMPUTE_SHADER                 = $91B9;
-  GL_MAX_COMPUTE_UNIFORM_BLOCKS     = $91BB;
-  GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS = $91BC;
-  GL_MAX_COMPUTE_IMAGE_UNIFORMS     = $91BD;
-  GL_MAX_COMPUTE_SHARED_MEMORY_SIZE = $8262;
-  GL_MAX_COMPUTE_UNIFORM_COMPONENTS = $8263;
-  GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS = $8264;
-  GL_MAX_COMPUTE_ATOMIC_COUNTERS    = $8265;
-  GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS = $8266;
-  GL_MAX_COMPUTE_LOCAL_INVOCATIONS  = $90EB;
-  GL_MAX_COMPUTE_WORK_GROUP_COUNT   = $91BE;
-  GL_MAX_COMPUTE_WORK_GROUP_SIZE    = $91BF;
-  GL_COMPUTE_LOCAL_WORK_SIZE        = $8267;
-  GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER = $90EC;
-  GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER = $90ED;
-  GL_DISPATCH_INDIRECT_BUFFER       = $90EE;
-  GL_DISPATCH_INDIRECT_BUFFER_BINDING = $90EF;
-  GL_COMPUTE_SHADER_BIT             = $00000020;
-  GL_COMPRESSED_RGB8_ETC2           = $9274;
-  GL_COMPRESSED_SRGB8_ETC2          = $9275;
-  GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 = $9276;
-  GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 = $9277;
-  GL_COMPRESSED_RGBA8_ETC2_EAC      = $9278;
-  GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC = $9279;
-  GL_COMPRESSED_R11_EAC             = $9270;
-  GL_COMPRESSED_SIGNED_R11_EAC      = $9271;
-  GL_COMPRESSED_RG11_EAC            = $9272;
-  GL_COMPRESSED_SIGNED_RG11_EAC     = $9273;
-  GL_PRIMITIVE_RESTART_FIXED_INDEX  = $8D69;
-  GL_ANY_SAMPLES_PASSED_CONSERVATIVE = $8D6A;
-  GL_MAX_ELEMENT_INDEX              = $8D6B;
-      GL_MAX_UNIFORM_LOCATIONS          = $826E;
-  GL_FRAMEBUFFER_DEFAULT_WIDTH      = $9310;
-  GL_FRAMEBUFFER_DEFAULT_HEIGHT     = $9311;
-  GL_FRAMEBUFFER_DEFAULT_LAYERS     = $9312;
-  GL_FRAMEBUFFER_DEFAULT_SAMPLES    = $9313;
-  GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS = $9314;
-  GL_MAX_FRAMEBUFFER_WIDTH          = $9315;
-  GL_MAX_FRAMEBUFFER_HEIGHT         = $9316;
-  GL_MAX_FRAMEBUFFER_LAYERS         = $9317;
-  GL_MAX_FRAMEBUFFER_SAMPLES        = $9318;
-        GL_INTERNALFORMAT_SUPPORTED       = $826F;
-  GL_INTERNALFORMAT_PREFERRED       = $8270;
-  GL_INTERNALFORMAT_RED_SIZE        = $8271;
-  GL_INTERNALFORMAT_GREEN_SIZE      = $8272;
-  GL_INTERNALFORMAT_BLUE_SIZE       = $8273;
-  GL_INTERNALFORMAT_ALPHA_SIZE      = $8274;
-  GL_INTERNALFORMAT_DEPTH_SIZE      = $8275;
-  GL_INTERNALFORMAT_STENCIL_SIZE    = $8276;
-  GL_INTERNALFORMAT_SHARED_SIZE     = $8277;
-  GL_INTERNALFORMAT_RED_TYPE        = $8278;
-  GL_INTERNALFORMAT_GREEN_TYPE      = $8279;
-  GL_INTERNALFORMAT_BLUE_TYPE       = $827A;
-  GL_INTERNALFORMAT_ALPHA_TYPE      = $827B;
-  GL_INTERNALFORMAT_DEPTH_TYPE      = $827C;
-  GL_INTERNALFORMAT_STENCIL_TYPE    = $827D;
-  GL_MAX_WIDTH                      = $827E;
-  GL_MAX_HEIGHT                     = $827F;
-  GL_MAX_DEPTH                      = $8280;
-  GL_MAX_LAYERS                     = $8281;
-  GL_MAX_COMBINED_DIMENSIONS        = $8282;
-  GL_COLOR_COMPONENTS               = $8283;
-  GL_DEPTH_COMPONENTS               = $8284;
-  GL_STENCIL_COMPONENTS             = $8285;
-  GL_COLOR_RENDERABLE               = $8286;
-  GL_DEPTH_RENDERABLE               = $8287;
-  GL_STENCIL_RENDERABLE             = $8288;
-  GL_FRAMEBUFFER_RENDERABLE         = $8289;
-  GL_FRAMEBUFFER_RENDERABLE_LAYERED = $828A;
-  GL_FRAMEBUFFER_BLEND              = $828B;
-  GL_READ_PIXELS                    = $828C;
-  GL_READ_PIXELS_FORMAT             = $828D;
-  GL_READ_PIXELS_TYPE               = $828E;
-  GL_TEXTURE_IMAGE_FORMAT           = $828F;
-  GL_TEXTURE_IMAGE_TYPE             = $8290;
-  GL_GET_TEXTURE_IMAGE_FORMAT       = $8291;
-  GL_GET_TEXTURE_IMAGE_TYPE         = $8292;
-  GL_MIPMAP                         = $8293;
-  GL_MANUAL_GENERATE_MIPMAP         = $8294;
-  GL_AUTO_GENERATE_MIPMAP           = $8295;
-  GL_COLOR_ENCODING                 = $8296;
-  GL_SRGB_READ                      = $8297;
-  GL_SRGB_WRITE                     = $8298;
-  GL_SRGB_DECODE_ARB                = $8299;
-  GL_FILTER                         = $829A;
-  GL_VERTEX_TEXTURE                 = $829B;
-  GL_TESS_CONTROL_TEXTURE           = $829C;
-  GL_TESS_EVALUATION_TEXTURE        = $829D;
-  GL_GEOMETRY_TEXTURE               = $829E;
-  GL_FRAGMENT_TEXTURE               = $829F;
-  GL_COMPUTE_TEXTURE                = $82A0;
-  GL_TEXTURE_SHADOW                 = $82A1;
-  GL_TEXTURE_GATHER                 = $82A2;
-  GL_TEXTURE_GATHER_SHADOW          = $82A3;
-  GL_SHADER_IMAGE_LOAD              = $82A4;
-  GL_SHADER_IMAGE_STORE             = $82A5;
-  GL_SHADER_IMAGE_ATOMIC            = $82A6;
-  GL_IMAGE_TEXEL_SIZE               = $82A7;
-  GL_IMAGE_COMPATIBILITY_CLASS      = $82A8;
-  GL_IMAGE_PIXEL_FORMAT             = $82A9;
-  GL_IMAGE_PIXEL_TYPE               = $82AA;
-  GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST = $82AC;
-  GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST = $82AD;
-  GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE = $82AE;
-  GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE = $82AF;
-  GL_TEXTURE_COMPRESSED_BLOCK_WIDTH = $82B1;
-  GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT = $82B2;
-  GL_TEXTURE_COMPRESSED_BLOCK_SIZE  = $82B3;
-  GL_CLEAR_BUFFER                   = $82B4;
-  GL_TEXTURE_VIEW                   = $82B5;
-  GL_VIEW_COMPATIBILITY_CLASS       = $82B6;
-  GL_FULL_SUPPORT                   = $82B7;
-  GL_CAVEAT_SUPPORT                 = $82B8;
-  GL_IMAGE_CLASS_4_X_32             = $82B9;
-  GL_IMAGE_CLASS_2_X_32             = $82BA;
-  GL_IMAGE_CLASS_1_X_32             = $82BB;
-  GL_IMAGE_CLASS_4_X_16             = $82BC;
-  GL_IMAGE_CLASS_2_X_16             = $82BD;
-  GL_IMAGE_CLASS_1_X_16             = $82BE;
-  GL_IMAGE_CLASS_4_X_8              = $82BF;
-  GL_IMAGE_CLASS_2_X_8              = $82C0;
-  GL_IMAGE_CLASS_1_X_8              = $82C1;
-  GL_IMAGE_CLASS_11_11_10           = $82C2;
-  GL_IMAGE_CLASS_10_10_10_2         = $82C3;
-  GL_VIEW_CLASS_128_BITS            = $82C4;
-  GL_VIEW_CLASS_96_BITS             = $82C5;
-  GL_VIEW_CLASS_64_BITS             = $82C6;
-  GL_VIEW_CLASS_48_BITS             = $82C7;
-  GL_VIEW_CLASS_32_BITS             = $82C8;
-  GL_VIEW_CLASS_24_BITS             = $82C9;
-  GL_VIEW_CLASS_16_BITS             = $82CA;
-  GL_VIEW_CLASS_8_BITS              = $82CB;
-  GL_VIEW_CLASS_S3TC_DXT1_RGB       = $82CC;
-  GL_VIEW_CLASS_S3TC_DXT1_RGBA      = $82CD;
-  GL_VIEW_CLASS_S3TC_DXT3_RGBA      = $82CE;
-  GL_VIEW_CLASS_S3TC_DXT5_RGBA      = $82CF;
-  GL_VIEW_CLASS_RGTC1_RED           = $82D0;
-  GL_VIEW_CLASS_RGTC2_RG            = $82D1;
-  GL_VIEW_CLASS_BPTC_UNORM          = $82D2;
-  GL_VIEW_CLASS_BPTC_FLOAT          = $82D3;
-  GL_UNIFORM                        = $92E1;
-  GL_UNIFORM_BLOCK                  = $92E2;
-  GL_PROGRAM_INPUT                  = $92E3;
-  GL_PROGRAM_OUTPUT                 = $92E4;
-  GL_BUFFER_VARIABLE                = $92E5;
-  GL_SHADER_STORAGE_BLOCK           = $92E6;
-  GL_VERTEX_SUBROUTINE              = $92E8;
-  GL_TESS_CONTROL_SUBROUTINE        = $92E9;
-  GL_TESS_EVALUATION_SUBROUTINE     = $92EA;
-  GL_GEOMETRY_SUBROUTINE            = $92EB;
-  GL_FRAGMENT_SUBROUTINE            = $92EC;
-  GL_COMPUTE_SUBROUTINE             = $92ED;
-  GL_VERTEX_SUBROUTINE_UNIFORM      = $92EE;
-  GL_TESS_CONTROL_SUBROUTINE_UNIFORM = $92EF;
-  GL_TESS_EVALUATION_SUBROUTINE_UNIFORM = $92F0;
-  GL_GEOMETRY_SUBROUTINE_UNIFORM    = $92F1;
-  GL_FRAGMENT_SUBROUTINE_UNIFORM    = $92F2;
-  GL_COMPUTE_SUBROUTINE_UNIFORM     = $92F3;
-  GL_TRANSFORM_FEEDBACK_VARYING     = $92F4;
-  GL_ACTIVE_RESOURCES               = $92F5;
-  GL_MAX_NAME_LENGTH                = $92F6;
-  GL_MAX_NUM_ACTIVE_VARIABLES       = $92F7;
-  GL_MAX_NUM_COMPATIBLE_SUBROUTINES = $92F8;
-  GL_NAME_LENGTH                    = $92F9;
-  GL_TYPE                           = $92FA;
-  GL_ARRAY_SIZE                     = $92FB;
-  GL_OFFSET                         = $92FC;
-  GL_BLOCK_INDEX                    = $92FD;
-  GL_ARRAY_STRIDE                   = $92FE;
-  GL_MATRIX_STRIDE                  = $92FF;
-  GL_IS_ROW_MAJOR                   = $9300;
-  GL_ATOMIC_COUNTER_BUFFER_INDEX    = $9301;
-  GL_BUFFER_BINDING                 = $9302;
-  GL_BUFFER_DATA_SIZE               = $9303;
-  GL_NUM_ACTIVE_VARIABLES           = $9304;
-  GL_ACTIVE_VARIABLES               = $9305;
-  GL_REFERENCED_BY_VERTEX_SHADER    = $9306;
-  GL_REFERENCED_BY_TESS_CONTROL_SHADER = $9307;
-  GL_REFERENCED_BY_TESS_EVALUATION_SHADER = $9308;
-  GL_REFERENCED_BY_GEOMETRY_SHADER  = $9309;
-  GL_REFERENCED_BY_FRAGMENT_SHADER  = $930A;
-  GL_REFERENCED_BY_COMPUTE_SHADER   = $930B;
-  GL_TOP_LEVEL_ARRAY_SIZE           = $930C;
-  GL_TOP_LEVEL_ARRAY_STRIDE         = $930D;
-  GL_LOCATION                       = $930E;
-  GL_LOCATION_INDEX                 = $930F;
-  GL_IS_PER_PATCH                   = $92E7;
-  GL_SHADER_STORAGE_BUFFER          = $90D2;
-  GL_SHADER_STORAGE_BUFFER_BINDING  = $90D3;
-  GL_SHADER_STORAGE_BUFFER_START    = $90D4;
-  GL_SHADER_STORAGE_BUFFER_SIZE     = $90D5;
-  GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS = $90D6;
-  GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS = $90D7;
-  GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS = $90D8;
-  GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS = $90D9;
-  GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS = $90DA;
-  GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS = $90DB;
-  GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS = $90DC;
-  GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS = $90DD;
-  GL_MAX_SHADER_STORAGE_BLOCK_SIZE  = $90DE;
-  GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT = $90DF;
-  GL_SHADER_STORAGE_BARRIER_BIT     = $2000;
-  GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES = GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS;
-  GL_DEPTH_STENCIL_TEXTURE_MODE     = $90EA;
-
-  GL_TEXTURE_BUFFER_OFFSET          = $919D;
-  GL_TEXTURE_BUFFER_SIZE            = $919E;
-  GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT = $919F;
-  GL_TEXTURE_VIEW_MIN_LEVEL         = $82DB;
-  GL_TEXTURE_VIEW_NUM_LEVELS        = $82DC;
-  GL_TEXTURE_VIEW_MIN_LAYER         = $82DD;
-  GL_TEXTURE_VIEW_NUM_LAYERS        = $82DE;
-  GL_TEXTURE_IMMUTABLE_LEVELS       = $82DF;
-  GL_VERTEX_ATTRIB_BINDING          = $82D4;
-  GL_VERTEX_ATTRIB_RELATIVE_OFFSET  = $82D5;
-  GL_VERTEX_BINDING_DIVISOR         = $82D6;
-  GL_VERTEX_BINDING_OFFSET          = $82D7;
-  GL_VERTEX_BINDING_STRIDE          = $82D8;
-  GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET = $82D9;
-  GL_MAX_VERTEX_ATTRIB_BINDINGS     = $82DA;
-
-  // GL 4.4
-  GL_MAX_VERTEX_ATTRIB_STRIDE         = $82E5;
-  GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED = $8221;
-  GL_TEXTURE_BUFFER_BINDING = $8C2A;
-  GL_MAP_PERSISTENT_BIT               = $0040;
-  GL_MAP_COHERENT_BIT                 = $0080;
-  GL_DYNAMIC_STORAGE_BIT              = $0100;
-  GL_CLIENT_STORAGE_BIT               = $0200;
-  GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT = $00004000;
-  GL_BUFFER_IMMUTABLE_STORAGE       	= $821F;
-  GL_BUFFER_STORAGE_FLAGS           	= $8220;
-  GL_CLEAR_TEXTURE                  	= $9365;
-  GL_LOCATION_COMPONENT             	= $934A;
-  GL_TRANSFORM_FEEDBACK_BUFFER_INDEX 	= $934B;
-  GL_TRANSFORM_FEEDBACK_BUFFER_STRIDE = $934C;
-  GL_QUERY_BUFFER                   	= $9192;
-  GL_QUERY_BUFFER_BARRIER_BIT       	= $00008000;
-  GL_QUERY_BUFFER_BINDING           	= $9193;
-  GL_QUERY_RESULT_NO_WAIT           	= $9194;
-  GL_MIRROR_CLAMP_TO_EDGE           	= $8743;
-
-  // GL 4.5
-  GL_CONTEXT_LOST                   = $0507;
-  GL_NEGATIVE_ONE_TO_ONE            = $935E;
-  GL_ZERO_TO_ONE                    = $935F;
-  GL_CLIP_ORIGIN                    = $935C;
-  GL_CLIP_DEPTH_MODE                = $935D;
-  GL_QUERY_WAIT_INVERTED            = $8E17;
-  GL_QUERY_NO_WAIT_INVERTED         = $8E18;
-  GL_QUERY_BY_REGION_WAIT_INVERTED  = $8E19;
-  GL_QUERY_BY_REGION_NO_WAIT_INVERTED = $8E1A;
-  GL_MAX_CULL_DISTANCES             = $82F9;
-  GL_MAX_COMBINED_CLIP_AND_CULL_DISTANCES = $82FA;
-  GL_TEXTURE_TARGET                 = $1006;
-  GL_QUERY_TARGET                   = $82EA;
-  GL_TEXTURE_BINDING                = $82EB;
-  GL_GUILTY_CONTEXT_RESET           = $8253;
-  GL_INNOCENT_CONTEXT_RESET         = $8254;
-  GL_UNKNOWN_CONTEXT_RESET          = $8255;
-  GL_RESET_NOTIFICATION_STRATEGY    = $8256;
-  GL_LOSE_CONTEXT_ON_RESET          = $8252;
-  GL_NO_RESET_NOTIFICATION          = $8261;
-  GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT = $00000004;
-  GL_CONTEXT_RELEASE_BEHAVIOR       = $82FB;
-  GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH = $82FC;
-
-  // 4.6
-  GL_SHADER_BINARY_FORMAT_SPIR_V = $9551;
-  GL_SPIR_V_BINARY = $9552;
-  GL_PARAMETER_BUFFER = $80EE;
-  GL_PARAMETER_BUFFER_BINDING = $80EF;
-  GL_CONTEXT_FLAG_NO_ERROR_BIT = $00000008;
-  GL_VERTICES_SUBMITTED = $82EE;
-  GL_PRIMITIVES_SUBMITTED = $82EF;
-  GL_VERTEX_SHADER_INVOCATIONS = $82F0;
-  GL_TESS_CONTROL_SHADER_PATCHES = $82F1;
-  GL_TESS_EVALUATION_SHADER_INVOCATIONS = $82F2;
-  GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED = $82F3;
-  GL_FRAGMENT_SHADER_INVOCATIONS = $82F4;
-  GL_COMPUTE_SHADER_INVOCATIONS = $82F5;
-  GL_CLIPPING_INPUT_PRIMITIVES = $82F6;
-  GL_CLIPPING_OUTPUT_PRIMITIVES = $82F7;
-  GL_POLYGON_OFFSET_CLAMP = $8E1B;
-  GL_SPIR_V_EXTENSIONS = $9553;
-  GL_NUM_SPIR_V_EXTENSIONS = $9554;
-  GL_TEXTURE_MAX_ANISOTROPY = $84FE;
-  GL_MAX_TEXTURE_MAX_ANISOTROPY = $84FF;
-  GL_TRANSFORM_FEEDBACK_OVERFLOW = $82EC;
-  GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW = $82ED;
-
-  // GL_ATI_draw_buffers
-  GL_MAX_DRAW_BUFFERS_ATI = $8824;
-  GL_DRAW_BUFFER0_ATI = $8825;
-  GL_DRAW_BUFFER1_ATI = $8826;
-  GL_DRAW_BUFFER2_ATI = $8827;
-  GL_DRAW_BUFFER3_ATI = $8828;
-  GL_DRAW_BUFFER4_ATI = $8829;
-  GL_DRAW_BUFFER5_ATI = $882A;
-  GL_DRAW_BUFFER6_ATI = $882B;
-  GL_DRAW_BUFFER7_ATI = $882C;
-  GL_DRAW_BUFFER8_ATI = $882D;
-  GL_DRAW_BUFFER9_ATI = $882E;
-  GL_DRAW_BUFFER10_ATI = $882F;
-  GL_DRAW_BUFFER11_ATI = $8830;
-  GL_DRAW_BUFFER12_ATI = $8831;
-  GL_DRAW_BUFFER13_ATI = $8832;
-  GL_DRAW_BUFFER14_ATI = $8833;
-  GL_DRAW_BUFFER15_ATI = $8834;
-
-  // GL_ATI_element_array
-  GL_ELEMENT_ARRAY_ATI = $8768;
-  GL_ELEMENT_ARRAY_TYPE_ATI = $8769;
-  GL_ELEMENT_ARRAY_POINTER_ATI = $876A;
-
-  // GL_ATI_envmap_bumpmap
-  GL_BUMP_ROT_MATRIX_ATI = $8775;
-  GL_BUMP_ROT_MATRIX_SIZE_ATI = $8776;
-  GL_BUMP_NUM_TEX_UNITS_ATI = $8777;
-  GL_BUMP_TEX_UNITS_ATI = $8778;
-  GL_DUDV_ATI = $8779;
-  GL_DU8DV8_ATI = $877A;
-  GL_BUMP_ENVMAP_ATI = $877B;
-  GL_BUMP_TARGET_ATI = $877C;
-
-  // GL_ATI_fragment_shader
-  GL_FRAGMENT_SHADER_ATI = $8920;
-  GL_REG_0_ATI = $8921;
-  GL_REG_1_ATI = $8922;
-  GL_REG_2_ATI = $8923;
-  GL_REG_3_ATI = $8924;
-  GL_REG_4_ATI = $8925;
-  GL_REG_5_ATI = $8926;
-  GL_REG_6_ATI = $8927;
-  GL_REG_7_ATI = $8928;
-  GL_REG_8_ATI = $8929;
-  GL_REG_9_ATI = $892A;
-  GL_REG_10_ATI = $892B;
-  GL_REG_11_ATI = $892C;
-  GL_REG_12_ATI = $892D;
-  GL_REG_13_ATI = $892E;
-  GL_REG_14_ATI = $892F;
-  GL_REG_15_ATI = $8930;
-  GL_REG_16_ATI = $8931;
-  GL_REG_17_ATI = $8932;
-  GL_REG_18_ATI = $8933;
-  GL_REG_19_ATI = $8934;
-  GL_REG_20_ATI = $8935;
-  GL_REG_21_ATI = $8936;
-  GL_REG_22_ATI = $8937;
-  GL_REG_23_ATI = $8938;
-  GL_REG_24_ATI = $8939;
-  GL_REG_25_ATI = $893A;
-  GL_REG_26_ATI = $893B;
-  GL_REG_27_ATI = $893C;
-  GL_REG_28_ATI = $893D;
-  GL_REG_29_ATI = $893E;
-  GL_REG_30_ATI = $893F;
-  GL_REG_31_ATI = $8940;
-  GL_CON_0_ATI = $8941;
-  GL_CON_1_ATI = $8942;
-  GL_CON_2_ATI = $8943;
-  GL_CON_3_ATI = $8944;
-  GL_CON_4_ATI = $8945;
-  GL_CON_5_ATI = $8946;
-  GL_CON_6_ATI = $8947;
-  GL_CON_7_ATI = $8948;
-  GL_CON_8_ATI = $8949;
-  GL_CON_9_ATI = $894A;
-  GL_CON_10_ATI = $894B;
-  GL_CON_11_ATI = $894C;
-  GL_CON_12_ATI = $894D;
-  GL_CON_13_ATI = $894E;
-  GL_CON_14_ATI = $894F;
-  GL_CON_15_ATI = $8950;
-  GL_CON_16_ATI = $8951;
-  GL_CON_17_ATI = $8952;
-  GL_CON_18_ATI = $8953;
-  GL_CON_19_ATI = $8954;
-  GL_CON_20_ATI = $8955;
-  GL_CON_21_ATI = $8956;
-  GL_CON_22_ATI = $8957;
-  GL_CON_23_ATI = $8958;
-  GL_CON_24_ATI = $8959;
-  GL_CON_25_ATI = $895A;
-  GL_CON_26_ATI = $895B;
-  GL_CON_27_ATI = $895C;
-  GL_CON_28_ATI = $895D;
-  GL_CON_29_ATI = $895E;
-  GL_CON_30_ATI = $895F;
-  GL_CON_31_ATI = $8960;
-  GL_MOV_ATI = $8961;
-  GL_ADD_ATI = $8963;
-  GL_MUL_ATI = $8964;
-  GL_SUB_ATI = $8965;
-  GL_DOT3_ATI = $8966;
-  GL_DOT4_ATI = $8967;
-  GL_MAD_ATI = $8968;
-  GL_LERP_ATI = $8969;
-  GL_CND_ATI = $896A;
-  GL_CND0_ATI = $896B;
-  GL_DOT2_ADD_ATI = $896C;
-  GL_SECONDARY_INTERPOLATOR_ATI = $896D;
-  GL_NUM_FRAGMENT_REGISTERS_ATI = $896E;
-  GL_NUM_FRAGMENT_CONSTANTS_ATI = $896F;
-  GL_NUM_PASSES_ATI = $8970;
-  GL_NUM_INSTRUCTIONS_PER_PASS_ATI = $8971;
-  GL_NUM_INSTRUCTIONS_TOTAL_ATI = $8972;
-  GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI = $8973;
-  GL_NUM_LOOPBACK_COMPONENTS_ATI = $8974;
-  GL_COLOR_ALPHA_PAIRING_ATI = $8975;
-  GL_SWIZZLE_STR_ATI = $8976;
-  GL_SWIZZLE_STQ_ATI = $8977;
-  GL_SWIZZLE_STR_DR_ATI = $8978;
-  GL_SWIZZLE_STQ_DQ_ATI = $8979;
-  GL_SWIZZLE_STRQ_ATI = $897A;
-  GL_SWIZZLE_STRQ_DQ_ATI = $897B;
-  GL_RED_BIT_ATI = $00000001;
-  GL_GREEN_BIT_ATI = $00000002;
-  GL_BLUE_BIT_ATI = $00000004;
-  GL_2X_BIT_ATI = $00000001;
-  GL_4X_BIT_ATI = $00000002;
-  GL_8X_BIT_ATI = $00000004;
-  GL_HALF_BIT_ATI = $00000008;
-  GL_QUARTER_BIT_ATI = $00000010;
-  GL_EIGHTH_BIT_ATI = $00000020;
-  GL_SATURATE_BIT_ATI = $00000040;
-  GL_COMP_BIT_ATI = $00000002;
-  GL_NEGATE_BIT_ATI = $00000004;
-  GL_BIAS_BIT_ATI = $00000008;
-
-  // GL_ATI_pn_triangles
-  GL_PN_TRIANGLES_ATI = $87F0;
-  GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI = $87F1;
-  GL_PN_TRIANGLES_POINT_MODE_ATI = $87F2;
-  GL_PN_TRIANGLES_NORMAL_MODE_ATI = $87F3;
-  GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI = $87F4;
-  GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI = $87F5;
-  GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI = $87F6;
-  GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI = $87F7;
-  GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI = $87F8;
-
-  // GL_ATI_separate_stencil
-  GL_STENCIL_BACK_FUNC_ATI = $8800;
-  GL_STENCIL_BACK_FAIL_ATI = $8801;
-  GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI = $8802;
-  GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI = $8803;
-
-  // GL_ATI_text_fragment_shader
-  GL_TEXT_FRAGMENT_SHADER_ATI = $8200;
-
-  // GL_ATI_texture_env_combine3
-  GL_MODULATE_ADD_ATI = $8744;
-  GL_MODULATE_SIGNED_ADD_ATI = $8745;
-  GL_MODULATE_SUBTRACT_ATI = $8746;
-
-  // GL_ATI_texture_float
-  GL_RGBA_FLOAT32_ATI = $8814;
-  GL_RGB_FLOAT32_ATI = $8815;
-  GL_ALPHA_FLOAT32_ATI = $8816;
-  GL_INTENSITY_FLOAT32_ATI = $8817;
-  GL_LUMINANCE_FLOAT32_ATI = $8818;
-  GL_LUMINANCE_ALPHA_FLOAT32_ATI = $8819;
-  GL_RGBA_FLOAT16_ATI = $881A;
-  GL_RGB_FLOAT16_ATI = $881B;
-  GL_ALPHA_FLOAT16_ATI = $881C;
-  GL_INTENSITY_FLOAT16_ATI = $881D;
-  GL_LUMINANCE_FLOAT16_ATI = $881E;
-  GL_LUMINANCE_ALPHA_FLOAT16_ATI = $881F;
-
-  // GL_ATI_texture_mirror_once
-  GL_MIRROR_CLAMP_ATI = $8742;
-  GL_MIRROR_CLAMP_TO_EDGE_ATI = $8743;
-
-  // GL_ATI_vertex_array_object
-  GL_STATIC_ATI = $8760;
-  GL_DYNAMIC_ATI = $8761;
-  GL_PRESERVE_ATI = $8762;
-  GL_DISCARD_ATI = $8763;
-  GL_OBJECT_BUFFER_SIZE_ATI = $8764;
-  GL_OBJECT_BUFFER_USAGE_ATI = $8765;
-  GL_ARRAY_OBJECT_BUFFER_ATI = $8766;
-  GL_ARRAY_OBJECT_OFFSET_ATI = $8767;
-
-  // GL_ATI_vertex_streams
-  GL_MAX_VERTEX_STREAMS_ATI = $876B;
-  GL_VERTEX_STREAM0_ATI = $876C;
-  GL_VERTEX_STREAM1_ATI = $876D;
-  GL_VERTEX_STREAM2_ATI = $876E;
-  GL_VERTEX_STREAM3_ATI = $876F;
-  GL_VERTEX_STREAM4_ATI = $8770;
-  GL_VERTEX_STREAM5_ATI = $8771;
-  GL_VERTEX_STREAM6_ATI = $8772;
-  GL_VERTEX_STREAM7_ATI = $8773;
-  GL_VERTEX_SOURCE_ATI = $8774;
-
-  // GL_ATI_meminfo
-  GL_VBO_FREE_MEMORY_ATI = $87FB;
-  GL_TEXTURE_FREE_MEMORY_ATI = $87FC;
-  GL_RENDERBUFFER_FREE_MEMORY_ATI = $87FD;
-
-  // GL_AMD_performance_monitor
-  GL_COUNTER_TYPE_AMD = $8BC0;
-  GL_COUNTER_RANGE_AMD = $8BC1;
-  GL_UNSIGNED_INT64_AMD = $8BC2;
-  GL_PERCENTAGE_AMD = $8BC3;
-  GL_PERFMON_RESULT_AVAILABLE_AMD = $8BC4;
-  GL_PERFMON_RESULT_SIZE_AMD = $8BC5;
-  GL_PERFMON_RESULT_AMD = $8BC6;
-
-  // GL_AMD_vertex_shader_tesselator
-  GL_SAMPLER_BUFFER_AMD = $9001;
-  GL_INT_SAMPLER_BUFFER_AMD = $9002;
-  GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD = $9003;
-  GL_TESSELLATION_MODE_AMD = $9004;
-  GL_TESSELLATION_FACTOR_AMD = $9005;
-  GL_DISCRETE_AMD = $9006;
-  GL_CONTINUOUS_AMD = $9007;
-
-  // GL_AMD_seamless_cubemap_per_texture
-  { reuse GL_TEXTURE_CUBE_MAP_SEAMLESS }
-
-  // GL_AMD_name_gen_delete
-  GL_DATA_BUFFER_AMD = $9151;
-  GL_PERFORMANCE_MONITOR_AMD = $9152;
-  GL_QUERY_OBJECT_AMD = $9153;
-  GL_VERTEX_ARRAY_OBJECT_AMD = $9154;
-  GL_SAMPLER_OBJECT_AMD = $9155;
-
-  // GL_AMD_debug_output
-  GL_MAX_DEBUG_LOGGED_MESSAGES_AMD = $9144;
-  GL_DEBUG_LOGGED_MESSAGES_AMD = $9145;
-  GL_DEBUG_SEVERITY_HIGH_AMD = $9146;
-  GL_DEBUG_SEVERITY_MEDIUM_AMD = $9147;
-  GL_DEBUG_SEVERITY_LOW_AMD = $9148;
-  GL_DEBUG_CATEGORY_API_ERROR_AMD = $9149;
-  GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD = $914A;
-  GL_DEBUG_CATEGORY_DEPRECATION_AMD = $914B;
-  GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD = $914C;
-  GL_DEBUG_CATEGORY_PERFORMANCE_AMD = $914D;
-  GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD = $914E;
-  GL_DEBUG_CATEGORY_APPLICATION_AMD = $914F;
-  GL_DEBUG_CATEGORY_OTHER_AMD = $9150;
-
-  // GL_AMD_depth_clamp_separate
-  GL_DEPTH_CLAMP_NEAR_AMD = $901E;
-  GL_DEPTH_CLAMP_FAR_AMD = $901F;
-
-  // GL_EXT_422_pixels
-  GL_422_EXT = $80CC;
-  GL_422_REV_EXT = $80CD;
-  GL_422_AVERAGE_EXT = $80CE;
-  GL_422_REV_AVERAGE_EXT = $80CF;
-
-  // GL_EXT_abgr
-  GL_ABGR_EXT = $8000;
-
-  // GL_EXT_bgra
-  GL_BGR_EXT = $80E0;
-  GL_BGRA_EXT = $80E1;
-
-  // GL_EXT_blend_color
-  GL_CONSTANT_COLOR_EXT = $8001;
-  GL_ONE_MINUS_CONSTANT_COLOR_EXT = $8002;
-  GL_CONSTANT_ALPHA_EXT = $8003;
-  GL_ONE_MINUS_CONSTANT_ALPHA_EXT = $8004;
-  GL_BLEND_COLOR_EXT = $8005;
-
-  // GL_EXT_blend_func_separate
-  GL_BLEND_DST_RGB_EXT = $80C8;
-  GL_BLEND_SRC_RGB_EXT = $80C9;
-  GL_BLEND_DST_ALPHA_EXT = $80CA;
-  GL_BLEND_SRC_ALPHA_EXT = $80CB;
-
-  // GL_EXT_blend_minmax
-  GL_FUNC_ADD_EXT = $8006;
-  GL_MIN_EXT = $8007;
-  GL_MAX_EXT = $8008;
-  GL_BLEND_EQUATION_EXT = $8009;
-
-  // GL_EXT_blend_subtract
-  GL_FUNC_SUBTRACT_EXT = $800A;
-  GL_FUNC_REVERSE_SUBTRACT_EXT = $800B;
-
-  // GL_EXT_clip_volume_hint
-  GL_CLIP_VOLUME_CLIPPING_HINT_EXT = $80F0;
-
-  // GL_EXT_cmyka
-  GL_CMYK_EXT = $800C;
-  GL_CMYKA_EXT = $800D;
-  GL_PACK_CMYK_HINT_EXT = $800E;
-  GL_UNPACK_CMYK_HINT_EXT = $800F;
-
-  // GL_EXT_compiled_vertex_array
-  GL_ARRAY_ELEMENT_LOCK_FIRST_EXT = $81A8;
-  GL_ARRAY_ELEMENT_LOCK_COUNT_EXT = $81A9;
-
-  // GL_EXT_convolution
-  GL_CONVOLUTION_1D_EXT = $8010;
-  GL_CONVOLUTION_2D_EXT = $8011;
-  GL_SEPARABLE_2D_EXT = $8012;
-  GL_CONVOLUTION_BORDER_MODE_EXT = $8013;
-  GL_CONVOLUTION_FILTER_SCALE_EXT = $8014;
-  GL_CONVOLUTION_FILTER_BIAS_EXT = $8015;
-  GL_REDUCE_EXT = $8016;
-  GL_CONVOLUTION_FORMAT_EXT = $8017;
-  GL_CONVOLUTION_WIDTH_EXT = $8018;
-  GL_CONVOLUTION_HEIGHT_EXT = $8019;
-  GL_MAX_CONVOLUTION_WIDTH_EXT = $801A;
-  GL_MAX_CONVOLUTION_HEIGHT_EXT = $801B;
-  GL_POST_CONVOLUTION_RED_SCALE_EXT = $801C;
-  GL_POST_CONVOLUTION_GREEN_SCALE_EXT = $801D;
-  GL_POST_CONVOLUTION_BLUE_SCALE_EXT = $801E;
-  GL_POST_CONVOLUTION_ALPHA_SCALE_EXT = $801F;
-  GL_POST_CONVOLUTION_RED_BIAS_EXT = $8020;
-  GL_POST_CONVOLUTION_GREEN_BIAS_EXT = $8021;
-  GL_POST_CONVOLUTION_BLUE_BIAS_EXT = $8022;
-  GL_POST_CONVOLUTION_ALPHA_BIAS_EXT = $8023;
-
-  // GL_EXT_coordinate_frame
-  GL_TANGENT_ARRAY_EXT = $8439;
-  GL_BINORMAL_ARRAY_EXT = $843A;
-  GL_CURRENT_TANGENT_EXT = $843B;
-  GL_CURRENT_BINORMAL_EXT = $843C;
-  GL_TANGENT_ARRAY_TYPE_EXT = $843E;
-  GL_TANGENT_ARRAY_STRIDE_EXT = $843F;
-  GL_BINORMAL_ARRAY_TYPE_EXT = $8440;
-  GL_BINORMAL_ARRAY_STRIDE_EXT = $8441;
-  GL_TANGENT_ARRAY_POINTER_EXT = $8442;
-  GL_BINORMAL_ARRAY_POINTER_EXT = $8443;
-  GL_MAP1_TANGENT_EXT = $8444;
-  GL_MAP2_TANGENT_EXT = $8445;
-  GL_MAP1_BINORMAL_EXT = $8446;
-  GL_MAP2_BINORMAL_EXT = $8447;
-
-  // GL_EXT_cull_vertex
-  GL_CULL_VERTEX_EXT = $81AA;
-  GL_CULL_VERTEX_EYE_POSITION_EXT = $81AB;
-  GL_CULL_VERTEX_OBJECT_POSITION_EXT = $81AC;
-
-  // GL_EXT_draw_range_elements
-  GL_MAX_ELEMENTS_VERTICES_EXT = $80E8;
-  GL_MAX_ELEMENTS_INDICES_EXT = $80E9;
-
-  // GL_EXT_fog_coord
-  GL_FOG_COORDINATE_SOURCE_EXT = $8450;
-  GL_FOG_COORDINATE_EXT = $8451;
-  GL_FRAGMENT_DEPTH_EXT = $8452;
-  GL_CURRENT_FOG_COORDINATE_EXT = $8453;
-  GL_FOG_COORDINATE_ARRAY_TYPE_EXT = $8454;
-  GL_FOG_COORDINATE_ARRAY_STRIDE_EXT = $8455;
-  GL_FOG_COORDINATE_ARRAY_POINTER_EXT = $8456;
-  GL_FOG_COORDINATE_ARRAY_EXT = $8457;
-
-  // GL_EXT_framebuffer_object
-  GL_FRAMEBUFFER_EXT = $8D40;
-  GL_RENDERBUFFER_EXT = $8D41;
-  GL_STENCIL_INDEX_EXT = $8D45;
-  GL_STENCIL_INDEX1_EXT = $8D46;
-  GL_STENCIL_INDEX4_EXT = $8D47;
-  GL_STENCIL_INDEX8_EXT = $8D48;
-  GL_STENCIL_INDEX16_EXT = $8D49;
-  GL_RENDERBUFFER_WIDTH_EXT = $8D42;
-  GL_RENDERBUFFER_HEIGHT_EXT = $8D43;
-  GL_RENDERBUFFER_INTERNAL_FORMAT_EXT = $8D44;
-  GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT = $8CD0;
-  GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT = $8CD1;
-  GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT = $8CD2;
-  GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT = $8CD3;
-  GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT = $8CD4;
-  GL_COLOR_ATTACHMENT0_EXT = $8CE0;
-  GL_COLOR_ATTACHMENT1_EXT = $8CE1;
-  GL_COLOR_ATTACHMENT2_EXT = $8CE2;
-  GL_COLOR_ATTACHMENT3_EXT = $8CE3;
-  GL_COLOR_ATTACHMENT4_EXT = $8CE4;
-  GL_COLOR_ATTACHMENT5_EXT = $8CE5;
-  GL_COLOR_ATTACHMENT6_EXT = $8CE6;
-  GL_COLOR_ATTACHMENT7_EXT = $8CE7;
-  GL_COLOR_ATTACHMENT8_EXT = $8CE8;
-  GL_COLOR_ATTACHMENT9_EXT = $8CE9;
-  GL_COLOR_ATTACHMENT10_EXT = $8CEA;
-  GL_COLOR_ATTACHMENT11_EXT = $8CEB;
-  GL_COLOR_ATTACHMENT12_EXT = $8CEC;
-  GL_COLOR_ATTACHMENT13_EXT = $8CED;
-  GL_COLOR_ATTACHMENT14_EXT = $8CEE;
-  GL_COLOR_ATTACHMENT15_EXT = $8CEF;
-  GL_DEPTH_ATTACHMENT_EXT = $8D00;
-  GL_STENCIL_ATTACHMENT_EXT = $8D20;
-  GL_FRAMEBUFFER_COMPLETE_EXT = $8CD5;
-  GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT = $8CD6;
-  GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT = $8CD7;
-  GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT = $8CD8;
-  GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT = $8CD9;
-  GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT = $8CDA;
-  GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT = $8CDB;
-  GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT = $8CDC;
-  GL_FRAMEBUFFER_UNSUPPORTED_EXT = $8CDD;
-  GL_FRAMEBUFFER_STATUS_ERROR_EXT = $8CDE;
-  GL_FRAMEBUFFER_BINDING_EXT = $8CA6;
-  GL_RENDERBUFFER_BINDING_EXT = $8CA7;
-  GL_MAX_COLOR_ATTACHMENTS_EXT = $8CDF;
-  GL_MAX_RENDERBUFFER_SIZE_EXT = $84E8;
-  GL_INVALID_FRAMEBUFFER_OPERATION_EXT = $0506;
-
-  // GL_EXT_histogram
-  GL_HISTOGRAM_EXT = $8024;
-  GL_PROXY_HISTOGRAM_EXT = $8025;
-  GL_HISTOGRAM_WIDTH_EXT = $8026;
-  GL_HISTOGRAM_FORMAT_EXT = $8027;
-  GL_HISTOGRAM_RED_SIZE_EXT = $8028;
-  GL_HISTOGRAM_GREEN_SIZE_EXT = $8029;
-  GL_HISTOGRAM_BLUE_SIZE_EXT = $802A;
-  GL_HISTOGRAM_ALPHA_SIZE_EXT = $802B;
-  GL_HISTOGRAM_LUMINANCE_SIZE_EXT = $802C;
-  GL_HISTOGRAM_SINK_EXT = $802D;
-  GL_MINMAX_EXT = $802E;
-  GL_MINMAX_FORMAT_EXT = $802F;
-  GL_MINMAX_SINK_EXT = $8030;
-  GL_TABLE_TOO_LARGE_EXT = $8031;
-
-  // GL_EXT_index_array_formats
-  GL_IUI_V2F_EXT = $81AD;
-  GL_IUI_V3F_EXT = $81AE;
-  GL_IUI_N3F_V2F_EXT = $81AF;
-  GL_IUI_N3F_V3F_EXT = $81B0;
-  GL_T2F_IUI_V2F_EXT = $81B1;
-  GL_T2F_IUI_V3F_EXT = $81B2;
-  GL_T2F_IUI_N3F_V2F_EXT = $81B3;
-  GL_T2F_IUI_N3F_V3F_EXT = $81B4;
-
-  // GL_EXT_index_func
-  GL_INDEX_TEST_EXT = $81B5;
-  GL_INDEX_TEST_FUNC_EXT = $81B6;
-  GL_INDEX_TEST_REF_EXT = $81B7;
-
-  // GL_EXT_index_material
-  GL_INDEX_MATERIAL_EXT = $81B8;
-  GL_INDEX_MATERIAL_PARAMETER_EXT = $81B9;
-  GL_INDEX_MATERIAL_FACE_EXT = $81BA;
-
-  // GL_EXT_light_texture
-  GL_FRAGMENT_MATERIAL_EXT = $8349;
-  GL_FRAGMENT_NORMAL_EXT = $834A;
-  GL_FRAGMENT_COLOR_EXT = $834C;
-  GL_ATTENUATION_EXT = $834D;
-  GL_SHADOW_ATTENUATION_EXT = $834E;
-  GL_TEXTURE_APPLICATION_MODE_EXT = $834F;
-  GL_TEXTURE_LIGHT_EXT = $8350;
-  GL_TEXTURE_MATERIAL_FACE_EXT = $8351;
-  GL_TEXTURE_MATERIAL_PARAMETER_EXT = $8352;
-
-  // GL_EXT_multisample
-  GL_MULTISAMPLE_EXT = $809D;
-  GL_SAMPLE_ALPHA_TO_MASK_EXT = $809E;
-  GL_SAMPLE_ALPHA_TO_ONE_EXT = $809F;
-  GL_SAMPLE_MASK_EXT = $80A0;
-  GL_1PASS_EXT = $80A1;
-  GL_2PASS_0_EXT = $80A2;
-  GL_2PASS_1_EXT = $80A3;
-  GL_4PASS_0_EXT = $80A4;
-  GL_4PASS_1_EXT = $80A5;
-  GL_4PASS_2_EXT = $80A6;
-  GL_4PASS_3_EXT = $80A7;
-  GL_SAMPLE_BUFFERS_EXT = $80A8;
-  GL_SAMPLES_EXT = $80A9;
-  GL_SAMPLE_MASK_VALUE_EXT = $80AA;
-  GL_SAMPLE_MASK_INVERT_EXT = $80AB;
-  GL_SAMPLE_PATTERN_EXT = $80AC;
-  GL_MULTISAMPLE_BIT_EXT = $20000000;
-
-  // GL_EXT_packed_pixels
-  GL_UNSIGNED_BYTE_3_3_2_EXT = $8032;
-  GL_UNSIGNED_SHORT_4_4_4_4_EXT = $8033;
-  GL_UNSIGNED_SHORT_5_5_5_1_EXT = $8034;
-  GL_UNSIGNED_INT_8_8_8_8_EXT = $8035;
-  GL_UNSIGNED_INT_10_10_10_2_EXT = $8036;
-
-  // GL_EXT_paletted_texture
-  GL_COLOR_INDEX1_EXT = $80E2;
-  GL_COLOR_INDEX2_EXT = $80E3;
-  GL_COLOR_INDEX4_EXT = $80E4;
-  GL_COLOR_INDEX8_EXT = $80E5;
-  GL_COLOR_INDEX12_EXT = $80E6;
-  GL_COLOR_INDEX16_EXT = $80E7;
-  GL_TEXTURE_INDEX_SIZE_EXT = $80ED;
-
-  // GL_EXT_pixel_transform
-  GL_PIXEL_TRANSFORM_2D_EXT = $8330;
-  GL_PIXEL_MAG_FILTER_EXT = $8331;
-  GL_PIXEL_MIN_FILTER_EXT = $8332;
-  GL_PIXEL_CUBIC_WEIGHT_EXT = $8333;
-  GL_CUBIC_EXT = $8334;
-  GL_AVERAGE_EXT = $8335;
-  GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT = $8336;
-  GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT = $8337;
-  GL_PIXEL_TRANSFORM_2D_MATRIX_EXT = $8338;
-
-  // GL_EXT_point_parameters
-  GL_POINT_SIZE_MIN_EXT = $8126;
-  GL_POINT_SIZE_MAX_EXT = $8127;
-  GL_POINT_FADE_THRESHOLD_SIZE_EXT = $8128;
-  GL_DISTANCE_ATTENUATION_EXT = $8129;
-
-  // GL_EXT_polygon_offset
-  GL_POLYGON_OFFSET_EXT = $8037;
-  GL_POLYGON_OFFSET_FACTOR_EXT = $8038;
-  GL_POLYGON_OFFSET_BIAS_EXT = $8039;
-
-  // GL_EXT_rescale_normal
-  GL_RESCALE_NORMAL_EXT = $803A;
-
-  // GL_EXT_secondary_color
-  GL_COLOR_SUM_EXT = $8458;
-  GL_CURRENT_SECONDARY_COLOR_EXT = $8459;
-  GL_SECONDARY_COLOR_ARRAY_SIZE_EXT = $845A;
-  GL_SECONDARY_COLOR_ARRAY_TYPE_EXT = $845B;
-  GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT = $845C;
-  GL_SECONDARY_COLOR_ARRAY_POINTER_EXT = $845D;
-  GL_SECONDARY_COLOR_ARRAY_EXT = $845E;
-
-  // GL_EXT_separate_specular_color
-  GL_LIGHT_MODEL_COLOR_CONTROL_EXT = $81F8;
-  GL_SINGLE_COLOR_EXT = $81F9;
-  GL_SEPARATE_SPECULAR_COLOR_EXT = $81FA;
-
-  // GL_EXT_shared_texture_palette
-  GL_SHARED_TEXTURE_PALETTE_EXT = $81FB;
-
-  // GL_EXT_stencil_two_side
-  GL_STENCIL_TEST_TWO_SIDE_EXT = $8910;
-  GL_ACTIVE_STENCIL_FACE_EXT = $8911;
-
-  // GL_EXT_stencil_wrap
-  GL_INCR_WRAP_EXT = $8507;
-  GL_DECR_WRAP_EXT = $8508;
-
-  // GL_EXT_texture
-  GL_ALPHA4_EXT = $803B;
-  GL_ALPHA8_EXT = $803C;
-  GL_ALPHA12_EXT = $803D;
-  GL_ALPHA16_EXT = $803E;
-  GL_LUMINANCE4_EXT = $803F;
-  GL_LUMINANCE8_EXT = $8040;
-  GL_LUMINANCE12_EXT = $8041;
-  GL_LUMINANCE16_EXT = $8042;
-  GL_LUMINANCE4_ALPHA4_EXT = $8043;
-  GL_LUMINANCE6_ALPHA2_EXT = $8044;
-  GL_LUMINANCE8_ALPHA8_EXT = $8045;
-  GL_LUMINANCE12_ALPHA4_EXT = $8046;
-  GL_LUMINANCE12_ALPHA12_EXT = $8047;
-  GL_LUMINANCE16_ALPHA16_EXT = $8048;
-  GL_INTENSITY_EXT = $8049;
-  GL_INTENSITY4_EXT = $804A;
-  GL_INTENSITY8_EXT = $804B;
-  GL_INTENSITY12_EXT = $804C;
-  GL_INTENSITY16_EXT = $804D;
-  GL_RGB2_EXT = $804E;
-  GL_RGB4_EXT = $804F;
-  GL_RGB5_EXT = $8050;
-  GL_RGB8_EXT = $8051;
-  GL_RGB10_EXT = $8052;
-  GL_RGB12_EXT = $8053;
-  GL_RGB16_EXT = $8054;
-  GL_RGBA2_EXT = $8055;
-  GL_RGBA4_EXT = $8056;
-  GL_RGB5_A1_EXT = $8057;
-  GL_RGBA8_EXT = $8058;
-  GL_RGB10_A2_EXT = $8059;
-  GL_RGBA12_EXT = $805A;
-  GL_RGBA16_EXT = $805B;
-  GL_TEXTURE_RED_SIZE_EXT = $805C;
-  GL_TEXTURE_GREEN_SIZE_EXT = $805D;
-  GL_TEXTURE_BLUE_SIZE_EXT = $805E;
-  GL_TEXTURE_ALPHA_SIZE_EXT = $805F;
-  GL_TEXTURE_LUMINANCE_SIZE_EXT = $8060;
-  GL_TEXTURE_INTENSITY_SIZE_EXT = $8061;
-  GL_REPLACE_EXT = $8062;
-  GL_PROXY_TEXTURE_1D_EXT = $8063;
-  GL_PROXY_TEXTURE_2D_EXT = $8064;
-  GL_TEXTURE_TOO_LARGE_EXT = $8065;
-
-  // GL_EXT_texture3D
-  GL_PACK_SKIP_IMAGES_EXT = $806B;
-  GL_PACK_IMAGE_HEIGHT_EXT = $806C;
-  GL_UNPACK_SKIP_IMAGES_EXT = $806D;
-  GL_UNPACK_IMAGE_HEIGHT_EXT = $806E;
-  GL_TEXTURE_3D_EXT = $806F;
-  GL_PROXY_TEXTURE_3D_EXT = $8070;
-  GL_TEXTURE_DEPTH_EXT = $8071;
-  GL_TEXTURE_WRAP_R_EXT = $8072;
-  GL_MAX_3D_TEXTURE_SIZE_EXT = $8073;
-
-  // GL_EXT_texture_compression_s3tc
-  GL_COMPRESSED_RGB_S3TC_DXT1_EXT = $83F0;
-  GL_COMPRESSED_RGBA_S3TC_DXT1_EXT = $83F1;
-  GL_COMPRESSED_RGBA_S3TC_DXT3_EXT = $83F2;
-  GL_COMPRESSED_RGBA_S3TC_DXT5_EXT = $83F3;
-
-  // GL_EXT_texture_cube_map
-  GL_NORMAL_MAP_EXT = $8511;
-  GL_REFLECTION_MAP_EXT = $8512;
-  GL_TEXTURE_CUBE_MAP_EXT = $8513;
-  GL_TEXTURE_BINDING_CUBE_MAP_EXT = $8514;
-  GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT = $8515;
-  GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT = $8516;
-  GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT = $8517;
-  GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT = $8518;
-  GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT = $8519;
-  GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT = $851A;
-  GL_PROXY_TEXTURE_CUBE_MAP_EXT = $851B;
-  GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT = $851C;
-
-  // GL_EXT_texture_edge_clamp
-  GL_CLAMP_TO_EDGE_EXT = $812F;
-
-  // GL_EXT_texture_env_combine
-  GL_COMBINE_EXT = $8570;
-  GL_COMBINE_RGB_EXT = $8571;
-  GL_COMBINE_ALPHA_EXT = $8572;
-  GL_RGB_SCALE_EXT = $8573;
-  GL_ADD_SIGNED_EXT = $8574;
-  GL_INTERPOLATE_EXT = $8575;
-  GL_CONSTANT_EXT = $8576;
-  GL_PRIMARY_COLOR_EXT = $8577;
-  GL_PREVIOUS_EXT = $8578;
-  GL_SOURCE0_RGB_EXT = $8580;
-  GL_SOURCE1_RGB_EXT = $8581;
-  GL_SOURCE2_RGB_EXT = $8582;
-  GL_SOURCE0_ALPHA_EXT = $8588;
-  GL_SOURCE1_ALPHA_EXT = $8589;
-  GL_SOURCE2_ALPHA_EXT = $858A;
-  GL_OPERAND0_RGB_EXT = $8590;
-  GL_OPERAND1_RGB_EXT = $8591;
-  GL_OPERAND2_RGB_EXT = $8592;
-  GL_OPERAND0_ALPHA_EXT = $8598;
-  GL_OPERAND1_ALPHA_EXT = $8599;
-  GL_OPERAND2_ALPHA_EXT = $859A;
-
-  // GL_EXT_texture_env_dot3
-  GL_DOT3_RGB_EXT = $8740;
-  GL_DOT3_RGBA_EXT = $8741;
-
-  // GL_EXT_texture_filter_anisotropic
-  GL_TEXTURE_MAX_ANISOTROPY_EXT = $84FE;
-  GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT = $84FF;
-
-  // GL_EXT_texture_lod_bias
-  GL_MAX_TEXTURE_LOD_BIAS_EXT = $84FD;
-  GL_TEXTURE_FILTER_CONTROL_EXT = $8500;
-  GL_TEXTURE_LOD_BIAS_EXT = $8501;
-
-  // GL_EXT_texture_object
-  GL_TEXTURE_PRIORITY_EXT = $8066;
-  GL_TEXTURE_RESIDENT_EXT = $8067;
-  GL_TEXTURE_1D_BINDING_EXT = $8068;
-  GL_TEXTURE_2D_BINDING_EXT = $8069;
-  GL_TEXTURE_3D_BINDING_EXT = $806A;
-
-  // GL_EXT_texture_perturb_normal
-  GL_PERTURB_EXT = $85AE;
-  GL_TEXTURE_NORMAL_EXT = $85AF;
-
-  // GL_EXT_texture_rectangle
-  GL_TEXTURE_RECTANGLE_EXT = $84F5;
-  GL_TEXTURE_BINDING_RECTANGLE_EXT = $84F6;
-  GL_PROXY_TEXTURE_RECTANGLE_EXT = $84F7;
-  GL_MAX_RECTANGLE_TEXTURE_SIZE_EXT = $84F8;
-
-  // GL_EXT_vertex_array
-  GL_VERTEX_ARRAY_EXT = $8074;
-  GL_NORMAL_ARRAY_EXT = $8075;
-  GL_COLOR_ARRAY_EXT = $8076;
-  GL_INDEX_ARRAY_EXT = $8077;
-  GL_TEXTURE_COORD_ARRAY_EXT = $8078;
-  GL_EDGE_FLAG_ARRAY_EXT = $8079;
-  GL_VERTEX_ARRAY_SIZE_EXT = $807A;
-  GL_VERTEX_ARRAY_TYPE_EXT = $807B;
-  GL_VERTEX_ARRAY_STRIDE_EXT = $807C;
-  GL_VERTEX_ARRAY_COUNT_EXT = $807D;
-  GL_NORMAL_ARRAY_TYPE_EXT = $807E;
-  GL_NORMAL_ARRAY_STRIDE_EXT = $807F;
-  GL_NORMAL_ARRAY_COUNT_EXT = $8080;
-  GL_COLOR_ARRAY_SIZE_EXT = $8081;
-  GL_COLOR_ARRAY_TYPE_EXT = $8082;
-  GL_COLOR_ARRAY_STRIDE_EXT = $8083;
-  GL_COLOR_ARRAY_COUNT_EXT = $8084;
-  GL_INDEX_ARRAY_TYPE_EXT = $8085;
-  GL_INDEX_ARRAY_STRIDE_EXT = $8086;
-  GL_INDEX_ARRAY_COUNT_EXT = $8087;
-  GL_TEXTURE_COORD_ARRAY_SIZE_EXT = $8088;
-  GL_TEXTURE_COORD_ARRAY_TYPE_EXT = $8089;
-  GL_TEXTURE_COORD_ARRAY_STRIDE_EXT = $808A;
-  GL_TEXTURE_COORD_ARRAY_COUNT_EXT = $808B;
-  GL_EDGE_FLAG_ARRAY_STRIDE_EXT = $808C;
-  GL_EDGE_FLAG_ARRAY_COUNT_EXT = $808D;
-  GL_VERTEX_ARRAY_POINTER_EXT = $808E;
-  GL_NORMAL_ARRAY_POINTER_EXT = $808F;
-  GL_COLOR_ARRAY_POINTER_EXT = $8090;
-  GL_INDEX_ARRAY_POINTER_EXT = $8091;
-  GL_TEXTURE_COORD_ARRAY_POINTER_EXT = $8092;
-  GL_EDGE_FLAG_ARRAY_POINTER_EXT = $8093;
-
-  // GL_EXT_vertex_shader
-  GL_VERTEX_SHADER_EXT = $8780;
-  GL_VERTEX_SHADER_BINDING_EXT = $8781;
-  GL_OP_INDEX_EXT = $8782;
-  GL_OP_NEGATE_EXT = $8783;
-  GL_OP_DOT3_EXT = $8784;
-  GL_OP_DOT4_EXT = $8785;
-  GL_OP_MUL_EXT = $8786;
-  GL_OP_ADD_EXT = $8787;
-  GL_OP_MADD_EXT = $8788;
-  GL_OP_FRAC_EXT = $8789;
-  GL_OP_MAX_EXT = $878A;
-  GL_OP_MIN_EXT = $878B;
-  GL_OP_SET_GE_EXT = $878C;
-  GL_OP_SET_LT_EXT = $878D;
-  GL_OP_CLAMP_EXT = $878E;
-  GL_OP_FLOOR_EXT = $878F;
-  GL_OP_ROUND_EXT = $8790;
-  GL_OP_EXP_BASE_2_EXT = $8791;
-  GL_OP_LOG_BASE_2_EXT = $8792;
-  GL_OP_POWER_EXT = $8793;
-  GL_OP_RECIP_EXT = $8794;
-  GL_OP_RECIP_SQRT_EXT = $8795;
-  GL_OP_SUB_EXT = $8796;
-  GL_OP_CROSS_PRODUCT_EXT = $8797;
-  GL_OP_MULTIPLY_MATRIX_EXT = $8798;
-  GL_OP_MOV_EXT = $8799;
-  GL_OUTPUT_VERTEX_EXT = $879A;
-  GL_OUTPUT_COLOR0_EXT = $879B;
-  GL_OUTPUT_COLOR1_EXT = $879C;
-  GL_OUTPUT_TEXTURE_COORD0_EXT = $879D;
-  GL_OUTPUT_TEXTURE_COORD1_EXT = $879E;
-  GL_OUTPUT_TEXTURE_COORD2_EXT = $879F;
-  GL_OUTPUT_TEXTURE_COORD3_EXT = $87A0;
-  GL_OUTPUT_TEXTURE_COORD4_EXT = $87A1;
-  GL_OUTPUT_TEXTURE_COORD5_EXT = $87A2;
-  GL_OUTPUT_TEXTURE_COORD6_EXT = $87A3;
-  GL_OUTPUT_TEXTURE_COORD7_EXT = $87A4;
-  GL_OUTPUT_TEXTURE_COORD8_EXT = $87A5;
-  GL_OUTPUT_TEXTURE_COORD9_EXT = $87A6;
-  GL_OUTPUT_TEXTURE_COORD10_EXT = $87A7;
-  GL_OUTPUT_TEXTURE_COORD11_EXT = $87A8;
-  GL_OUTPUT_TEXTURE_COORD12_EXT = $87A9;
-  GL_OUTPUT_TEXTURE_COORD13_EXT = $87AA;
-  GL_OUTPUT_TEXTURE_COORD14_EXT = $87AB;
-  GL_OUTPUT_TEXTURE_COORD15_EXT = $87AC;
-  GL_OUTPUT_TEXTURE_COORD16_EXT = $87AD;
-  GL_OUTPUT_TEXTURE_COORD17_EXT = $87AE;
-  GL_OUTPUT_TEXTURE_COORD18_EXT = $87AF;
-  GL_OUTPUT_TEXTURE_COORD19_EXT = $87B0;
-  GL_OUTPUT_TEXTURE_COORD20_EXT = $87B1;
-  GL_OUTPUT_TEXTURE_COORD21_EXT = $87B2;
-  GL_OUTPUT_TEXTURE_COORD22_EXT = $87B3;
-  GL_OUTPUT_TEXTURE_COORD23_EXT = $87B4;
-  GL_OUTPUT_TEXTURE_COORD24_EXT = $87B5;
-  GL_OUTPUT_TEXTURE_COORD25_EXT = $87B6;
-  GL_OUTPUT_TEXTURE_COORD26_EXT = $87B7;
-  GL_OUTPUT_TEXTURE_COORD27_EXT = $87B8;
-  GL_OUTPUT_TEXTURE_COORD28_EXT = $87B9;
-  GL_OUTPUT_TEXTURE_COORD29_EXT = $87BA;
-  GL_OUTPUT_TEXTURE_COORD30_EXT = $87BB;
-  GL_OUTPUT_TEXTURE_COORD31_EXT = $87BC;
-  GL_OUTPUT_FOG_EXT = $87BD;
-  GL_SCALAR_EXT = $87BE;
-  GL_VECTOR_EXT = $87BF;
-  GL_MATRIX_EXT = $87C0;
-  GL_VARIANT_EXT = $87C1;
-  GL_INVARIANT_EXT = $87C2;
-  GL_LOCAL_CONSTANT_EXT = $87C3;
-  GL_LOCAL_EXT = $87C4;
-  GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT = $87C5;
-  GL_MAX_VERTEX_SHADER_VARIANTS_EXT = $87C6;
-  GL_MAX_VERTEX_SHADER_INVARIANTS_EXT = $87C7;
-  GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT = $87C8;
-  GL_MAX_VERTEX_SHADER_LOCALS_EXT = $87C9;
-  GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT = $87CA;
-  GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT = $87CB;
-  GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT = $87CC;
-  GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT = $87CD;
-  GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT = $87CE;
-  GL_VERTEX_SHADER_INSTRUCTIONS_EXT = $87CF;
-  GL_VERTEX_SHADER_VARIANTS_EXT = $87D0;
-  GL_VERTEX_SHADER_INVARIANTS_EXT = $87D1;
-  GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT = $87D2;
-  GL_VERTEX_SHADER_LOCALS_EXT = $87D3;
-  GL_VERTEX_SHADER_OPTIMIZED_EXT = $87D4;
-  GL_X_EXT = $87D5;
-  GL_Y_EXT = $87D6;
-  GL_Z_EXT = $87D7;
-  GL_W_EXT = $87D8;
-  GL_NEGATIVE_X_EXT = $87D9;
-  GL_NEGATIVE_Y_EXT = $87DA;
-  GL_NEGATIVE_Z_EXT = $87DB;
-  GL_NEGATIVE_W_EXT = $87DC;
-  GL_ZERO_EXT = $87DD;
-  GL_ONE_EXT = $87DE;
-  GL_NEGATIVE_ONE_EXT = $87DF;
-  GL_NORMALIZED_RANGE_EXT = $87E0;
-  GL_FULL_RANGE_EXT = $87E1;
-  GL_CURRENT_VERTEX_EXT = $87E2;
-  GL_MVP_MATRIX_EXT = $87E3;
-  GL_VARIANT_VALUE_EXT = $87E4;
-  GL_VARIANT_DATATYPE_EXT = $87E5;
-  GL_VARIANT_ARRAY_STRIDE_EXT = $87E6;
-  GL_VARIANT_ARRAY_TYPE_EXT = $87E7;
-  GL_VARIANT_ARRAY_EXT = $87E8;
-  GL_VARIANT_ARRAY_POINTER_EXT = $87E9;
-  GL_INVARIANT_VALUE_EXT = $87EA;
-  GL_INVARIANT_DATATYPE_EXT = $87EB;
-  GL_LOCAL_CONSTANT_VALUE_EXT = $87EC;
-  GL_LOCAL_CONSTANT_DATATYPE_EXT = $87ED;
-
-  // GL_EXT_vertex_weighting
-  GL_MODELVIEW0_STACK_DEPTH_EXT = $0BA3;
-  GL_MODELVIEW1_STACK_DEPTH_EXT = $8502;
-  GL_MODELVIEW0_MATRIX_EXT = $0BA6;
-  GL_MODELVIEW1_MATRIX_EXT = $8506;
-  GL_VERTEX_WEIGHTING_EXT = $8509;
-  GL_MODELVIEW0_EXT = $1700;
-  GL_MODELVIEW1_EXT = $850A;
-  GL_CURRENT_VERTEX_WEIGHT_EXT = $850B;
-  GL_VERTEX_WEIGHT_ARRAY_EXT = $850C;
-  GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT = $850D;
-  GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT = $850E;
-  GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT = $850F;
-  GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT = $8510;
-
-  // GL_EXT_depth_bounds_test
-  GL_DEPTH_BOUNDS_TEST_EXT = $8890;
-  GL_DEPTH_BOUNDS_EXT = $8891;
-
-  // GL_EXT_texture_mirror_clamp
-  GL_MIRROR_CLAMP_EXT = $8742;
-  GL_MIRROR_CLAMP_TO_EDGE_EXT = $8743;
-  GL_MIRROR_CLAMP_TO_BORDER_EXT = $8912;
-
-  // GL_EXT_blend_equation_separate
-  GL_BLEND_EQUATION_RGB_EXT = $8009;
-  GL_BLEND_EQUATION_ALPHA_EXT = $883D;
-
-  // GL_EXT_pixel_buffer_object
-  GL_PIXEL_PACK_BUFFER_EXT = $88EB;
-  GL_PIXEL_UNPACK_BUFFER_EXT = $88EC;
-  GL_PIXEL_PACK_BUFFER_BINDING_EXT = $88ED;
-  GL_PIXEL_UNPACK_BUFFER_BINDING_EXT = $88EF;
-
-  // GL_EXT_stencil_clear_tag
-  GL_STENCIL_TAG_BITS_EXT = $88F2;
-  GL_STENCIL_CLEAR_TAG_VALUE_EXT = $88F3;
-
-  // GL_EXT_packed_depth_stencil
-  GL_DEPTH_STENCIL_EXT = $84F9;
-  GL_UNSIGNED_INT_24_8_EXT = $84FA;
-  GL_DEPTH24_STENCIL8_EXT = $88F0;
-  GL_TEXTURE_STENCIL_SIZE_EXT = $88F1;
-
-  // GL_EXT_texture_sRGB
-  GL_SRGB_EXT = $8C40;
-  GL_SRGB8_EXT = $8C41;
-  GL_SRGB_ALPHA_EXT = $8C42;
-  GL_SRGB8_ALPHA8_EXT = $8C43;
-  GL_SLUMINANCE_ALPHA_EXT = $8C44;
-  GL_SLUMINANCE8_ALPHA8_EXT = $8C45;
-  GL_SLUMINANCE_EXT = $8C46;
-  GL_SLUMINANCE8_EXT = $8C47;
-  GL_COMPRESSED_SRGB_EXT = $8C48;
-  GL_COMPRESSED_SRGB_ALPHA_EXT = $8C49;
-  GL_COMPRESSED_SLUMINANCE_EXT = $8C4A;
-  GL_COMPRESSED_SLUMINANCE_ALPHA_EXT = $8C4B;
-  GL_COMPRESSED_SRGB_S3TC_DXT1_EXT = $8C4C;
-  GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT = $8C4D;
-  GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT = $8C4E;
-  GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT = $8C4F;
-
-  // GL_EXT_framebuffer_blit
-  GL_READ_FRAMEBUFFER_EXT = $8CA8;
-  GL_DRAW_FRAMEBUFFER_EXT = $8CA9;
-  GL_READ_FRAMEBUFFER_BINDING_EXT = GL_FRAMEBUFFER_BINDING_EXT;
-  GL_DRAW_FRAMEBUFFER_BINDING_EXT = $8CAA;
-
-  // GL_EXT_framebuffer_multisample
-  GL_RENDERBUFFER_SAMPLES_EXT = $8CAB;
-  GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT = $8D56;
-  GL_MAX_SAMPLES_EXT = $8D57;
-
-  // GL_EXT_timer_query
-  GL_TIME_ELAPSED_EXT = $88BF;
-
-  // GL_EXT_bindable_uniform
-  GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT = $8DE2;
-  GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT = $8DE3;
-  GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT = $8DE4;
-  GL_MAX_BINDABLE_UNIFORM_SIZE_EXT = $8DED;
-  GL_UNIFORM_BUFFER_EXT = $8DEE;
-  GL_UNIFORM_BUFFER_BINDING_EXT = $8DEF;
-
-  // GL_EXT_framebuffer_sRGB
-  GLX_FRAMEBUFFER_SRGB_CAPABLE_EXT = $20B2;
-  WGL_FRAMEBUFFER_SRGB_CAPABLE_EXT = $20A9;
-  GL_FRAMEBUFFER_SRGB_EXT = $8DB9;
-  GL_FRAMEBUFFER_SRGB_CAPABLE_EXT = $8DBA;
-
-  // GL_EXT_geometry_shader4
-  GL_GEOMETRY_SHADER_EXT = $8DD9;
-  GL_GEOMETRY_VERTICES_OUT_EXT = $8DDA;
-  GL_GEOMETRY_INPUT_TYPE_EXT = $8DDB;
-  GL_GEOMETRY_OUTPUT_TYPE_EXT = $8DDC;
-  GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT = $8C29;
-  GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT = $8DDD;
-  GL_MAX_VERTEX_VARYING_COMPONENTS_EXT = $8DDE;
-  GL_MAX_VARYING_COMPONENTS_EXT = $8B4B;
-  GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT = $8DDF;
-  GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT = $8DE0;
-  GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT = $8DE1;
-  GL_LINES_ADJACENCY_EXT = $A;
-  GL_LINE_STRIP_ADJACENCY_EXT = $B;
-  GL_TRIANGLES_ADJACENCY_EXT = $C;
-  GL_TRIANGLE_STRIP_ADJACENCY_EXT = $D;
-  GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT = $8DA8;
-  GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT = $8DA9;
-  GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT = $8DA7;
-  GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT = $8CD4;
-  GL_PROGRAM_POINT_SIZE_EXT = $8642;
-
-  // GL_EXT_gpu_shader4
-  GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT = $88FD;
-  GL_SAMPLER_1D_ARRAY_EXT = $8DC0;
-  GL_SAMPLER_2D_ARRAY_EXT = $8DC1;
-  GL_SAMPLER_BUFFER_EXT = $8DC2;
-  GL_SAMPLER_1D_ARRAY_SHADOW_EXT = $8DC3;
-  GL_SAMPLER_2D_ARRAY_SHADOW_EXT = $8DC4;
-  GL_SAMPLER_CUBE_SHADOW_EXT = $8DC5;
-  GL_UNSIGNED_INT_VEC2_EXT = $8DC6;
-  GL_UNSIGNED_INT_VEC3_EXT = $8DC7;
-  GL_UNSIGNED_INT_VEC4_EXT = $8DC8;
-  GL_INT_SAMPLER_1D_EXT = $8DC9;
-  GL_INT_SAMPLER_2D_EXT = $8DCA;
-  GL_INT_SAMPLER_3D_EXT = $8DCB;
-  GL_INT_SAMPLER_CUBE_EXT = $8DCC;
-  GL_INT_SAMPLER_2D_RECT_EXT = $8DCD;
-  GL_INT_SAMPLER_1D_ARRAY_EXT = $8DCE;
-  GL_INT_SAMPLER_2D_ARRAY_EXT = $8DCF;
-  GL_INT_SAMPLER_BUFFER_EXT = $8DD0;
-  GL_UNSIGNED_INT_SAMPLER_1D_EXT = $8DD1;
-  GL_UNSIGNED_INT_SAMPLER_2D_EXT = $8DD2;
-  GL_UNSIGNED_INT_SAMPLER_3D_EXT = $8DD3;
-  GL_UNSIGNED_INT_SAMPLER_CUBE_EXT = $8DD4;
-  GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT = $8DD5;
-  GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT = $8DD6;
-  GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT = $8DD7;
-  GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT = $8DD8;
-  GL_MIN_PROGRAM_TEXEL_OFFSET_EXT = $8904;
-  GL_MAX_PROGRAM_TEXEL_OFFSET_EXT = $8905;
-
-  // GL_EXT_packed_float
-  GL_R11F_G11F_B10F_EXT = $8C3A;
-  GL_UNSIGNED_INT_10F_11F_11F_REV_EXT = $8C3B;
-  RGBA_SIGNED_COMPONENTS_EXT = $8C3C;
-  WGL_TYPE_RGBA_UNSIGNED_FLOAT_EXT = $20A8;
-  GLX_RGBA_UNSIGNED_FLOAT_TYPE_EXT = $20B1;
-  GLX_RGBA_UNSIGNED_FLOAT_BIT_EXT = $00000008;
-
-  // GL_EXT_texture_array
-  GL_TEXTURE_1D_ARRAY_EXT = $8C18;
-  GL_TEXTURE_2D_ARRAY_EXT = $8C1A;
-  GL_PROXY_TEXTURE_2D_ARRAY_EXT = $8C1B;
-  GL_PROXY_TEXTURE_1D_ARRAY_EXT = $8C19;
-  GL_TEXTURE_BINDING_1D_ARRAY_EXT = $8C1C;
-  GL_TEXTURE_BINDING_2D_ARRAY_EXT = $8C1D;
-  GL_MAX_ARRAY_TEXTURE_LAYERS_EXT = $88FF;
-  GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT = $884E;
-
-  // GL_EXT_texture_buffer_object
-  GL_TEXTURE_BUFFER_EXT = $8C2A;
-  GL_MAX_TEXTURE_BUFFER_SIZE_EXT = $8C2B;
-  GL_TEXTURE_BINDING_BUFFER_EXT = $8C2C;
-  GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT = $8C2D;
-  GL_TEXTURE_BUFFER_FORMAT_EXT = $8C2E;
-
-  // GL_EXT_texture_compression_latc
-  GL_COMPRESSED_LUMINANCE_LATC1_EXT = $8C70;
-  GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT = $8C71;
-  GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT = $8C72;
-  GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT = $8C73;
-
-  // GL_EXT_texture_compression_rgtc
-  GL_COMPRESSED_RED_RGTC1_EXT = $8DBB;
-  GL_COMPRESSED_SIGNED_RED_RGTC1_EXT = $8DBC;
-  GL_COMPRESSED_RED_GREEN_RGTC2_EXT = $8DBD;
-  GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT = $8DBE;
-
-  // GL_EXT_texture_integer
-  GL_RGBA_INTEGER_MODE_EXT = $8D9E;
-  GL_RGBA32UI_EXT = $8D70;
-  GL_RGB32UI_EXT = $8D71;
-  GL_ALPHA32UI_EXT = $8D72;
-  GL_INTENSITY32UI_EXT = $8D73;
-  GL_LUMINANCE32UI_EXT = $8D74;
-  GL_LUMINANCE_ALPHA32UI_EXT = $8D75;
-  GL_RGBA16UI_EXT = $8D76;
-  GL_RGB16UI_EXT = $8D77;
-  GL_ALPHA16UI_EXT = $8D78;
-  GL_INTENSITY16UI_EXT = $8D79;
-  GL_LUMINANCE16UI_EXT = $8D7A;
-  GL_LUMINANCE_ALPHA16UI_EXT = $8D7B;
-  GL_RGBA8UI_EXT = $8D7C;
-  GL_RGB8UI_EXT = $8D7D;
-  GL_ALPHA8UI_EXT = $8D7E;
-  GL_INTENSITY8UI_EXT = $8D7F;
-  GL_LUMINANCE8UI_EXT = $8D80;
-  GL_LUMINANCE_ALPHA8UI_EXT = $8D81;
-  GL_RGBA32I_EXT = $8D82;
-  GL_RGB32I_EXT = $8D83;
-  GL_ALPHA32I_EXT = $8D84;
-  GL_INTENSITY32I_EXT = $8D85;
-  GL_LUMINANCE32I_EXT = $8D86;
-  GL_LUMINANCE_ALPHA32I_EXT = $8D87;
-  GL_RGBA16I_EXT = $8D88;
-  GL_RGB16I_EXT = $8D89;
-  GL_ALPHA16I_EXT = $8D8A;
-  GL_INTENSITY16I_EXT = $8D8B;
-  GL_LUMINANCE16I_EXT = $8D8C;
-  GL_LUMINANCE_ALPHA16I_EXT = $8D8D;
-  GL_RGBA8I_EXT = $8D8E;
-  GL_RGB8I_EXT = $8D8F;
-  GL_ALPHA8I_EXT = $8D90;
-  GL_INTENSITY8I_EXT = $8D91;
-  GL_LUMINANCE8I_EXT = $8D92;
-  GL_LUMINANCE_ALPHA8I_EXT = $8D93;
-  GL_RED_INTEGER_EXT = $8D94;
-  GL_GREEN_INTEGER_EXT = $8D95;
-  GL_BLUE_INTEGER_EXT = $8D96;
-  GL_ALPHA_INTEGER_EXT = $8D97;
-  GL_RGB_INTEGER_EXT = $8D98;
-  GL_RGBA_INTEGER_EXT = $8D99;
-  GL_BGR_INTEGER_EXT = $8D9A;
-  GL_BGRA_INTEGER_EXT = $8D9B;
-  GL_LUMINANCE_INTEGER_EXT = $8D9C;
-  GL_LUMINANCE_ALPHA_INTEGER_EXT = $8D9D;
-
-  // GL_EXT_texture_shared_exponent
-  GL_RGB9_E5_EXT = $8C3D;
-  GL_UNSIGNED_INT_5_9_9_9_REV_EXT = $8C3E;
-  GL_TEXTURE_SHARED_SIZE_EXT = $8C3F;
-
-  // GL_EXT_transform_feedback
-  GL_TRANSFORM_FEEDBACK_BUFFER_EXT = $8C8E;
-  GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT = $8C84;
-  GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT = $8C85;
-  GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT = $8C8F;
-  GL_INTERLEAVED_ATTRIBS_EXT = $8C8C;
-  GL_SEPARATE_ATTRIBS_EXT = $8C8D;
-  GL_PRIMITIVES_GENERATED_EXT = $8C87;
-  GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT = $8C88;
-  GL_RASTERIZER_DISCARD_EXT = $8C89;
-  GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT = $8C8A;
-  GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT = $8C8B;
-  GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT = $8C80;
-  GL_TRANSFORM_FEEDBACK_VARYINGS_EXT = $8C83;
-  GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT = $8C7F;
-  GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT = $8C76;
-
-  // GL_EXT_direct_state_access
-  GL_PROGRAM_MATRIX_EXT = $8E2D;
-  GL_TRANSPOSE_PROGRAM_MATRIX_EXT = $8E2E;
-  GL_PROGRAM_MATRIX_STACK_DEPTH_EXT = $8E2F;
-
-  // GL_EXT_texture_swizzle
-  GL_TEXTURE_SWIZZLE_R_EXT = $8E42;
-  GL_TEXTURE_SWIZZLE_G_EXT = $8E43;
-  GL_TEXTURE_SWIZZLE_B_EXT = $8E44;
-  GL_TEXTURE_SWIZZLE_A_EXT = $8E45;
-  GL_TEXTURE_SWIZZLE_RGBA_EXT = $8E46;
-
-  // GL_EXT_provoking_vertex
-  GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT = $8E4C;
-  GL_FIRST_VERTEX_CONVENTION_EXT = $8E4D;
-  GL_LAST_VERTEX_CONVENTION_EXT = $8E4E;
-  GL_PROVOKING_VERTEX_EXT = $8E4F;
-
-  // GL_EXT_texture_snorm
-  GL_ALPHA_SNORM = $9010;
-  GL_LUMINANCE_SNORM = $9011;
-  GL_LUMINANCE_ALPHA_SNORM = $9012;
-  GL_INTENSITY_SNORM = $9013;
-  GL_ALPHA8_SNORM = $9014;
-  GL_LUMINANCE8_SNORM = $9015;
-  GL_LUMINANCE8_ALPHA8_SNORM = $9016;
-  GL_INTENSITY8_SNORM = $9017;
-  GL_ALPHA16_SNORM = $9018;
-  GL_LUMINANCE16_SNORM = $9019;
-  GL_LUMINANCE16_ALPHA16_SNORM = $901A;
-  GL_INTENSITY16_SNORM = $901B;
-  { reuse GL_RED_SNORM }
-  { reuse GL_RG_SNORM }
-  { reuse GL_RGB_SNORM }
-  { reuse GL_RGBA_SNORM }
-  { reuse GL_R8_SNORM }
-  { reuse GL_RG8_SNORM }
-  { reuse GL_RGB8_SNORM }
-  { reuse GL_RGBA8_SNORM }
-  { reuse GL_R16_SNORM }
-  { reuse GL_RG16_SNORM }
-  { reuse GL_RGB16_SNORM }
-  { reuse GL_RGBA16_SNORM }
-  { reuse GL_SIGNED_NORMALIZED }
-
-  // GL_EXT_separate_shader_objects
-  GL_ACTIVE_PROGRAM_EXT = $8B8D;
-
-  // GL_EXT_shader_image_load_store
-  GL_MAX_IMAGE_UNITS_EXT = $8F38;
-  GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT = $8F39;
-  GL_IMAGE_BINDING_NAME_EXT = $8F3A;
-  GL_IMAGE_BINDING_LEVEL_EXT = $8F3B;
-  GL_IMAGE_BINDING_LAYERED_EXT = $8F3C;
-  GL_IMAGE_BINDING_LAYER_EXT = $8F3D;
-  GL_IMAGE_BINDING_ACCESS_EXT = $8F3E;
-  GL_IMAGE_1D_EXT = $904C;
-  GL_IMAGE_2D_EXT = $904D;
-  GL_IMAGE_3D_EXT = $904E;
-  GL_IMAGE_2D_RECT_EXT = $904F;
-  GL_IMAGE_CUBE_EXT = $9050;
-  GL_IMAGE_BUFFER_EXT = $9051;
-  GL_IMAGE_1D_ARRAY_EXT = $9052;
-  GL_IMAGE_2D_ARRAY_EXT = $9053;
-  GL_IMAGE_CUBE_MAP_ARRAY_EXT = $9054;
-  GL_IMAGE_2D_MULTISAMPLE_EXT = $9055;
-  GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT = $9056;
-  GL_INT_IMAGE_1D_EXT = $9057;
-  GL_INT_IMAGE_2D_EXT = $9058;
-  GL_INT_IMAGE_3D_EXT = $9059;
-  GL_INT_IMAGE_2D_RECT_EXT = $905A;
-  GL_INT_IMAGE_CUBE_EXT = $905B;
-  GL_INT_IMAGE_BUFFER_EXT = $905C;
-  GL_INT_IMAGE_1D_ARRAY_EXT = $905D;
-  GL_INT_IMAGE_2D_ARRAY_EXT = $905E;
-  GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT = $905F;
-  GL_INT_IMAGE_2D_MULTISAMPLE_EXT = $9060;
-  GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT = $9061;
-  GL_UNSIGNED_INT_IMAGE_1D_EXT = $9062;
-  GL_UNSIGNED_INT_IMAGE_2D_EXT = $9063;
-  GL_UNSIGNED_INT_IMAGE_3D_EXT = $9064;
-  GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT = $9065;
-  GL_UNSIGNED_INT_IMAGE_CUBE_EXT = $9066;
-  GL_UNSIGNED_INT_IMAGE_BUFFER_EXT = $9067;
-  GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT = $9068;
-  GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT = $9069;
-  GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT = $906A;
-  GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT = $906B;
-  GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT = $906C;
-  GL_MAX_IMAGE_SAMPLES_EXT = $906D;
-  GL_IMAGE_BINDING_FORMAT_EXT = $906E;
-  GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT = $00000001;
-  GL_ELEMENT_ARRAY_BARRIER_BIT_EXT = $00000002;
-  GL_UNIFORM_BARRIER_BIT_EXT = $00000004;
-  GL_TEXTURE_FETCH_BARRIER_BIT_EXT = $00000008;
-  GL_SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT = $00000020;
-  GL_COMMAND_BARRIER_BIT_EXT = $00000040;
-  GL_PIXEL_BUFFER_BARRIER_BIT_EXT = $00000080;
-  GL_TEXTURE_UPDATE_BARRIER_BIT_EXT = $00000100;
-  GL_BUFFER_UPDATE_BARRIER_BIT_EXT = $00000200;
-  GL_FRAMEBUFFER_BARRIER_BIT_EXT = $00000400;
-  GL_TRANSFORM_FEEDBACK_BARRIER_BIT_EXT = $00000800;
-  GL_ATOMIC_COUNTER_BARRIER_BIT_EXT = $00001000;
-  GL_ALL_BARRIER_BITS_EXT = $FFFFFFFF;
-
-  // GL_EXT_vertex_attrib_64bit
-  { reuse GL_DOUBLE }
-  GL_DOUBLE_VEC2_EXT = $8FFC;
-  GL_DOUBLE_VEC3_EXT = $8FFD;
-  GL_DOUBLE_VEC4_EXT = $8FFE;
-  GL_DOUBLE_MAT2_EXT = $8F46;
-  GL_DOUBLE_MAT3_EXT = $8F47;
-  GL_DOUBLE_MAT4_EXT = $8F48;
-  GL_DOUBLE_MAT2x3_EXT = $8F49;
-  GL_DOUBLE_MAT2x4_EXT = $8F4A;
-  GL_DOUBLE_MAT3x2_EXT = $8F4B;
-  GL_DOUBLE_MAT3x4_EXT = $8F4C;
-  GL_DOUBLE_MAT4x2_EXT = $8F4D;
-  GL_DOUBLE_MAT4x3_EXT = $8F4E;
-
-  // GL_EXT_texture_sRGB_decode
-  GL_TEXTURE_SRGB_DECODE_EXT = $8A48;
-  GL_DECODE_EXT = $8A49;
-  GL_SKIP_DECODE_EXT = $8A4A;
-
-  // GL_NV_texture_multisample
-  GL_TEXTURE_COVERAGE_SAMPLES_NV    = $9045;
-  GL_TEXTURE_COLOR_SAMPLES_NV       = $9046;
-
-  // GL_AMD_blend_minmax_factor
-  GL_FACTOR_MIN_AMD                 = $901C;
-  GL_FACTOR_MAX_AMD                 = $901D;
-
-  // GL_AMD_sample_positions
-  GL_SUBSAMPLE_DISTANCE_AMD         = $883F;
-
-  // GL_EXT_x11_sync_object
-  GL_SYNC_X11_FENCE_EXT             = $90E1;
-
-  // GL_EXT_framebuffer_multisample_blit_scaled
-  GL_SCALED_RESOLVE_FASTEST_EXT     = $90BA;
-  GL_SCALED_RESOLVE_NICEST_EXT      = $90BB;
-
-  // (4.3) GL_NV_path_rendering
- 	GL_PATH_FORMAT_SVG_NV            = $9070;
- 	GL_PATH_FORMAT_PS_NV             = $9071;
- 	GL_STANDARD_FONT_NAME_NV         = $9072;
- 	GL_SYSTEM_FONT_NAME_NV           = $9073;
- 	GL_FILE_NAME_NV                  = $9074;
- 	GL_PATH_STROKE_WIDTH_NV          = $9075;
- 	GL_PATH_END_CAPS_NV              = $9076;
- 	GL_PATH_INITIAL_END_CAP_NV       = $9077;
- 	GL_PATH_TERMINAL_END_CAP_NV      = $9078;
- 	GL_PATH_JOIN_STYLE_NV            = $9079;
- 	GL_PATH_MITER_LIMIT_NV           = $907A;
- 	GL_PATH_DASH_CAPS_NV             = $907B;
- 	GL_PATH_INITIAL_DASH_CAP_NV      = $907C;
- 	GL_PATH_TERMINAL_DASH_CAP_NV     = $907D;
- 	GL_PATH_DASH_OFFSET_NV           = $907E;
- 	GL_PATH_CLIENT_LENGTH_NV         = $907F;
- 	GL_PATH_FILL_MODE_NV             = $9080;
- 	GL_PATH_FILL_MASK_NV             = $9081;
- 	GL_PATH_FILL_COVER_MODE_NV       = $9082;
- 	GL_PATH_STROKE_COVER_MODE_NV     = $9083;
- 	GL_PATH_STROKE_MASK_NV           = $9084;
- 	GL_PATH_SAMPLE_QUALITY_NV        = $9085;
- 	GL_PATH_STROKE_BOUND_NV          = $9086;
- 	GL_PATH_STROKE_OVERSAMPLE_COUNT_NV= $9087;
- 	GL_COUNT_UP_NV                   = $9088;
- 	GL_COUNT_DOWN_NV                 = $9089;
- 	GL_PATH_OBJECT_BOUNDING_BOX_NV   = $908A;
- 	GL_CONVEX_HULL_NV                = $908B;
- 	GL_MULTI_HULLS_NV                = $908C;
- 	GL_BOUNDING_BOX_NV               = $908D;
- 	GL_TRANSLATE_X_NV                = $908E;
- 	GL_TRANSLATE_Y_NV                = $908F;
- 	GL_TRANSLATE_2D_NV               = $9090;
- 	GL_TRANSLATE_3D_NV               = $9091;
- 	GL_AFFINE_2D_NV                  = $9092;
- 	GL_PROJECTIVE_2D_NV              = $9093;
- 	GL_AFFINE_3D_NV                  = $9094;
- 	GL_PROJECTIVE_3D_NV              = $9095;
- 	GL_TRANSPOSE_AFFINE_2D_NV        = $9096;
- 	GL_TRANSPOSE_PROJECTIVE_2D_NV    = $9097;
-	GL_TRANSPOSE_AFFINE_3D_NV        = $9098;
- 	GL_TRANSPOSE_PROJECTIVE_3D_NV    = $9099;
- 	GL_UTF8_NV                       = $909A;
- 	GL_UTF16_NV                      = $909B;
- 	GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV= $909C;
- 	GL_PATH_COMMAND_COUNT_NV         = $909D;
- 	GL_PATH_COORD_COUNT_NV           = $909E;
-  GL_PATH_DASH_ARRAY_COUNT_NV      = $909F;
-  GL_PATH_COMPUTED_LENGTH_NV       = $90A0;
-  GL_PATH_FILL_BOUNDING_BOX_NV     = $90A1;
-  GL_PATH_STROKE_BOUNDING_BOX_NV   = $90A2;
-  GL_SQUARE_NV                     = $90A3;
-  GL_ROUND_NV                      = $90A4;
-  GL_TRIANGULAR_NV                 = $90A5;
-  GL_BEVEL_NV                      = $90A6;
-  GL_MITER_REVERT_NV               = $90A7;
-  GL_MITER_TRUNCATE_NV             = $90A8;
-  GL_SKIP_MISSING_GLYPH_NV         = $90A9;
-  GL_USE_MISSING_GLYPH_NV          = $90AA;
-  GL_PATH_ERROR_POSITION_NV        = $90AB;
-  GL_PATH_FOG_GEN_MODE_NV          = $90AC;
-  GL_ACCUM_ADJACENT_PAIRS_NV       = $90AD;
-  GL_ADJACENT_PAIRS_NV             = $90AE;
-  GL_FIRST_TO_REST_NV              = $90AF;
-  GL_PATH_GEN_MODE_NV              = $90B0;
-  GL_PATH_GEN_COEFF_NV             = $90B1;
-  GL_PATH_GEN_COLOR_FORMAT_NV      = $90B2;
-  GL_PATH_GEN_COMPONENTS_NV        = $90B3;
-  GL_PATH_STENCIL_FUNC_NV          = $90B7;
-  GL_PATH_STENCIL_REF_NV           = $90B8;
-  GL_PATH_STENCIL_VALUE_MASK_NV    = $90B9;
-  GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV= $90BD;
-  GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV= $90BE;
-  GL_PATH_COVER_DEPTH_FUNC_NV      = $90BF;
-  GL_PATH_DASH_OFFSET_RESET_NV     = $90B4;
-  GL_MOVE_TO_RESETS_NV             = $90B5;
-  GL_MOVE_TO_CONTINUES_NV          = $90B6;
-  GL_CLOSE_PATH_NV                 = $00;
-  GL_MOVE_TO_NV                    = $02;
-  GL_RELATIVE_MOVE_TO_NV           = $03;
-  GL_LINE_TO_NV                    = $04;
-  GL_RELATIVE_LINE_TO_NV           = $05;
-  GL_HORIZONTAL_LINE_TO_NV         = $06;
-  GL_RELATIVE_HORIZONTAL_LINE_TO_NV= $07;
-  GL_VERTICAL_LINE_TO_NV           = $08;
-  GL_RELATIVE_VERTICAL_LINE_TO_NV  = $09;
-  GL_QUADRATIC_CURVE_TO_NV         = $0A;
-  GL_RELATIVE_QUADRATIC_CURVE_TO_NV= $0B;
-  GL_CUBIC_CURVE_TO_NV             = $0C;
-  GL_RELATIVE_CUBIC_CURVE_TO_NV    = $0D;
-  GL_SMOOTH_QUADRATIC_CURVE_TO_NV  = $0E;
-  GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV= $0F;
-  GL_SMOOTH_CUBIC_CURVE_TO_NV      = $10;
-  GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV= $11;
-  GL_SMALL_CCW_ARC_TO_NV           = $12;
-  GL_RELATIVE_SMALL_CCW_ARC_TO_NV  = $13;
-  GL_SMALL_CW_ARC_TO_NV            = $14;
-  GL_RELATIVE_SMALL_CW_ARC_TO_NV   = $15;
-  GL_LARGE_CCW_ARC_TO_NV           = $16;
-  GL_RELATIVE_LARGE_CCW_ARC_TO_NV  = $17;
-  GL_LARGE_CW_ARC_TO_NV            = $18;
-  GL_RELATIVE_LARGE_CW_ARC_TO_NV   = $19;
-  GL_RESTART_PATH_NV               = $F0;
-  GL_DUP_FIRST_CUBIC_CURVE_TO_NV   = $F2;
-  GL_DUP_LAST_CUBIC_CURVE_TO_NV    = $F4;
-  GL_RECT_NV                       = $F6;
-  GL_CIRCULAR_CCW_ARC_TO_NV        = $F8;
-  GL_CIRCULAR_CW_ARC_TO_NV         = $FA;
-  GL_CIRCULAR_TANGENT_ARC_TO_NV    = $FC;
-  GL_ARC_TO_NV                     = $FE;
-  GL_RELATIVE_ARC_TO_NV            = $FF;
-  GL_BOLD_BIT_NV                   = $01;
-  GL_ITALIC_BIT_NV                 = $02;
-  GL_GLYPH_WIDTH_BIT_NV            = $01;
-  GL_GLYPH_HEIGHT_BIT_NV           = $02;
-  GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV= $04;
-  GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV= $08;
-  GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV= $10;
-  GL_GLYPH_VERTICAL_BEARING_X_BIT_NV= $20;
-  GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV= $40;
-  GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV= $80;
-  GL_GLYPH_HAS_KERNING_NV          = $100;
-  GL_FONT_X_MIN_BOUNDS_NV          = $00010000;
-  GL_FONT_Y_MIN_BOUNDS_NV          = $00020000;
-  GL_FONT_X_MAX_BOUNDS_NV          = $00040000;
-  GL_FONT_Y_MAX_BOUNDS_NV          = $00080000;
-  GL_FONT_UNITS_PER_EM_NV          = $00100000;
-  GL_FONT_ASCENDER_NV              = $00200000;
-  GL_FONT_DESCENDER_NV             = $00400000;
-  GL_FONT_HEIGHT_NV                = $00800000;
-  GL_FONT_MAX_ADVANCE_WIDTH_NV     = $01000000;
-  GL_FONT_MAX_ADVANCE_HEIGHT_NV    = $02000000;
-  GL_FONT_UNDERLINE_POSITION_NV    = $04000000;
-  GL_FONT_UNDERLINE_THICKNESS_NV   = $08000000;
-  GL_FONT_HAS_KERNING_NV           = $10000000;
-
-  // (4.3) GL_AMD_pinned_memory
-  GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD= $9160;
-
-  // (4.3) GL_AMD_stencil_operation_extended
-  GL_SET_AMD                       = $874A;
-  GL_REPLACE_VALUE_AMD             = $874B;
-  GL_STENCIL_OP_VALUE_AMD          = $874C;
-  GL_STENCIL_BACK_OP_VALUE_AMD     = $874D;
-
-  // (4.3) GL_AMD_vertex_shader_viewport_index
-
-  // (4.3) GL_AMD_vertex_shader_layer
-
-  // (4.3) GL_NV_bindless_texture
-
-  // (4.3) GL_NV_shader_atomic_float
-
-  // (4.3) GL_AMD_query_buffer_object
-  GL_QUERY_BUFFER_AMD              = $9192;
-  GL_QUERY_BUFFER_BINDING_AMD      = $9193;
-  GL_QUERY_RESULT_NO_WAIT_AMD      = $9194;
-
-  // GL_FfdMaskSGIX
-  GL_TEXTURE_DEFORMATION_BIT_SGIX = $00000001;
-  GL_GEOMETRY_DEFORMATION_BIT_SGIX = $00000002;
-
-  // GL_HP_convolution_border_modes
-  GL_IGNORE_BORDER_HP = $8150;
-  GL_CONSTANT_BORDER_HP = $8151;
-  GL_REPLICATE_BORDER_HP = $8153;
-  GL_CONVOLUTION_BORDER_COLOR_HP = $8154;
-
-  // GL_HP_image_transform
-  GL_IMAGE_SCALE_X_HP = $8155;
-  GL_IMAGE_SCALE_Y_HP = $8156;
-  GL_IMAGE_TRANSLATE_X_HP = $8157;
-  GL_IMAGE_TRANSLATE_Y_HP = $8158;
-  GL_IMAGE_ROTATE_ANGLE_HP = $8159;
-  GL_IMAGE_ROTATE_ORIGIN_X_HP = $815A;
-  GL_IMAGE_ROTATE_ORIGIN_Y_HP = $815B;
-  GL_IMAGE_MAG_FILTER_HP = $815C;
-  GL_IMAGE_MIN_FILTER_HP = $815D;
-  GL_IMAGE_CUBIC_WEIGHT_HP = $815E;
-  GL_CUBIC_HP = $815F;
-  GL_AVERAGE_HP = $8160;
-  GL_IMAGE_TRANSFORM_2D_HP = $8161;
-  GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP = $8162;
-  GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP = $8163;
-
-  // GL_HP_occlusion_test
-  GL_OCCLUSION_TEST_HP = $8165;
-  GL_OCCLUSION_TEST_RESULT_HP = $8166;
-
-  // GL_HP_texture_lighting
-  GL_TEXTURE_LIGHTING_MODE_HP = $8167;
-  GL_TEXTURE_POST_SPECULAR_HP = $8168;
-  GL_TEXTURE_PRE_SPECULAR_HP = $8169;
-
-  // GL_IBM_cull_vertex
-  GL_CULL_VERTEX_IBM = 103050;
-
-  // GL_IBM_rasterpos_clip
-  GL_RASTER_POSITION_UNCLIPPED_IBM = $19262;
-
-  // GL_IBM_texture_mirrored_repeat
-  GL_MIRRORED_REPEAT_IBM = $8370;
-
-  // GL_IBM_vertex_array_lists
-  GL_VERTEX_ARRAY_LIST_IBM = 103070;
-  GL_NORMAL_ARRAY_LIST_IBM = 103071;
-  GL_COLOR_ARRAY_LIST_IBM = 103072;
-  GL_INDEX_ARRAY_LIST_IBM = 103073;
-  GL_TEXTURE_COORD_ARRAY_LIST_IBM = 103074;
-  GL_EDGE_FLAG_ARRAY_LIST_IBM = 103075;
-  GL_FOG_COORDINATE_ARRAY_LIST_IBM = 103076;
-  GL_SECONDARY_COLOR_ARRAY_LIST_IBM = 103077;
-  GL_VERTEX_ARRAY_LIST_STRIDE_IBM = 103080;
-  GL_NORMAL_ARRAY_LIST_STRIDE_IBM = 103081;
-  GL_COLOR_ARRAY_LIST_STRIDE_IBM = 103082;
-  GL_INDEX_ARRAY_LIST_STRIDE_IBM = 103083;
-  GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM = 103084;
-  GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM = 103085;
-  GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM = 103086;
-  GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM = 103087;
-
-  // GL_INGR_color_clamp
-  GL_RED_MIN_CLAMP_INGR = $8560;
-  GL_GREEN_MIN_CLAMP_INGR = $8561;
-  GL_BLUE_MIN_CLAMP_INGR = $8562;
-  GL_ALPHA_MIN_CLAMP_INGR = $8563;
-  GL_RED_MAX_CLAMP_INGR = $8564;
-  GL_GREEN_MAX_CLAMP_INGR = $8565;
-  GL_BLUE_MAX_CLAMP_INGR = $8566;
-  GL_ALPHA_MAX_CLAMP_INGR = $8567;
-
-  // GL_INGR_interlace_read
-  GL_INTERLACE_READ_INGR = $8568;
-
-  // GL_INTEL_parallel_arrays
-  GL_PARALLEL_ARRAYS_INTEL = $83F4;
-  GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL = $83F5;
-  GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL = $83F6;
-  GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL = $83F7;
-  GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL = $83F8;
-
-  // GL_NV_copy_depth_to_color
-  GL_DEPTH_STENCIL_TO_RGBA_NV = $886E;
-  GL_DEPTH_STENCIL_TO_BGRA_NV = $886F;
-
-  // GL_NV_depth_clamp
-  GL_DEPTH_CLAMP_NV = $864F;
-
-  // GL_NV_evaluators
-  GL_EVAL_2D_NV = $86C0;
-  GL_EVAL_TRIANGULAR_2D_NV = $86C1;
-  GL_MAP_TESSELLATION_NV = $86C2;
-  GL_MAP_ATTRIB_U_ORDER_NV = $86C3;
-  GL_MAP_ATTRIB_V_ORDER_NV = $86C4;
-  GL_EVAL_FRACTIONAL_TESSELLATION_NV = $86C5;
-  GL_EVAL_VERTEX_ATTRIB0_NV = $86C6;
-  GL_EVAL_VERTEX_ATTRIB1_NV = $86C7;
-  GL_EVAL_VERTEX_ATTRIB2_NV = $86C8;
-  GL_EVAL_VERTEX_ATTRIB3_NV = $86C9;
-  GL_EVAL_VERTEX_ATTRIB4_NV = $86CA;
-  GL_EVAL_VERTEX_ATTRIB5_NV = $86CB;
-  GL_EVAL_VERTEX_ATTRIB6_NV = $86CC;
-  GL_EVAL_VERTEX_ATTRIB7_NV = $86CD;
-  GL_EVAL_VERTEX_ATTRIB8_NV = $86CE;
-  GL_EVAL_VERTEX_ATTRIB9_NV = $86CF;
-  GL_EVAL_VERTEX_ATTRIB10_NV = $86D0;
-  GL_EVAL_VERTEX_ATTRIB11_NV = $86D1;
-  GL_EVAL_VERTEX_ATTRIB12_NV = $86D2;
-  GL_EVAL_VERTEX_ATTRIB13_NV = $86D3;
-  GL_EVAL_VERTEX_ATTRIB14_NV = $86D4;
-  GL_EVAL_VERTEX_ATTRIB15_NV = $86D5;
-  GL_MAX_MAP_TESSELLATION_NV = $86D6;
-  GL_MAX_RATIONAL_EVAL_ORDER_NV = $86D7;
-
-  // GL_NV_fence
-  GL_ALL_COMPLETED_NV = $84F2;
-  GL_FENCE_STATUS_NV = $84F3;
-  GL_FENCE_CONDITION_NV = $84F4;
-
-  // GL_NV_float_buffer
-  GL_FLOAT_R_NV = $8880;
-  GL_FLOAT_RG_NV = $8881;
-  GL_FLOAT_RGB_NV = $8882;
-  GL_FLOAT_RGBA_NV = $8883;
-  GL_FLOAT_R16_NV = $8884;
-  GL_FLOAT_R32_NV = $8885;
-  GL_FLOAT_RG16_NV = $8886;
-  GL_FLOAT_RG32_NV = $8887;
-  GL_FLOAT_RGB16_NV = $8888;
-  GL_FLOAT_RGB32_NV = $8889;
-  GL_FLOAT_RGBA16_NV = $888A;
-  GL_FLOAT_RGBA32_NV = $888B;
-  GL_TEXTURE_FLOAT_COMPONENTS_NV = $888C;
-  GL_FLOAT_CLEAR_COLOR_VALUE_NV = $888D;
-  GL_FLOAT_RGBA_MODE_NV = $888E;
-
-  // GL_NV_fog_distance
-  GL_FOG_DISTANCE_MODE_NV = $855A;
-  GL_EYE_RADIAL_NV = $855B;
-  GL_EYE_PLANE_ABSOLUTE_NV = $855C;
-
-  // GL_NV_fragment_program
-  GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV = $8868;
-  GL_FRAGMENT_PROGRAM_NV = $8870;
-  GL_MAX_TEXTURE_COORDS_NV = $8871;
-  GL_MAX_TEXTURE_IMAGE_UNITS_NV = $8872;
-  GL_FRAGMENT_PROGRAM_BINDING_NV = $8873;
-  GL_PROGRAM_ERROR_STRING_NV = $8874;
-
-  // GL_NV_half_float
-  GL_HALF_FLOAT_NV = $140B;
-
-  // GL_NV_light_max_exponent
-  GL_MAX_SHININESS_NV = $8504;
-  GL_MAX_SPOT_EXPONENT_NV = $8505;
-
-  // GL_NV_multisample_filter_hint
-  GL_MULTISAMPLE_FILTER_HINT_NV = $8534;
-
-  // GL_NV_occlusion_query
-  GL_PIXEL_COUNTER_BITS_NV = $8864;
-  GL_CURRENT_OCCLUSION_QUERY_ID_NV = $8865;
-  GL_PIXEL_COUNT_NV = $8866;
-  GL_PIXEL_COUNT_AVAILABLE_NV = $8867;
-
-  // GL_NV_packed_depth_stencil
-  GL_DEPTH_STENCIL_NV = $84F9;
-  GL_UNSIGNED_INT_24_8_NV = $84FA;
-
-  // GL_NV_pixel_data_range
-  GL_WRITE_PIXEL_DATA_RANGE_NV = $8878;
-  GL_READ_PIXEL_DATA_RANGE_NV = $8879;
-  GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV = $887A;
-  GL_READ_PIXEL_DATA_RANGE_LENGTH_NV = $887B;
-  GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV = $887C;
-  GL_READ_PIXEL_DATA_RANGE_POINTER_NV = $887D;
-
-  // GL_NV_point_sprite
-  GL_POINT_SPRITE_NV = $8861;
-  GL_COORD_REPLACE_NV = $8862;
-  GL_POINT_SPRITE_R_MODE_NV = $8863;
-
-  // GL_NV_primitive_restart
-  GL_PRIMITIVE_RESTART_NV = $8558;
-  GL_PRIMITIVE_RESTART_INDEX_NV = $8559;
-
-  // GL_NV_register_combiners
-  GL_REGISTER_COMBINERS_NV = $8522;
-  GL_VARIABLE_A_NV = $8523;
-  GL_VARIABLE_B_NV = $8524;
-  GL_VARIABLE_C_NV = $8525;
-  GL_VARIABLE_D_NV = $8526;
-  GL_VARIABLE_E_NV = $8527;
-  GL_VARIABLE_F_NV = $8528;
-  GL_VARIABLE_G_NV = $8529;
-  GL_CONSTANT_COLOR0_NV = $852A;
-  GL_CONSTANT_COLOR1_NV = $852B;
-  GL_PRIMARY_COLOR_NV = $852C;
-  GL_SECONDARY_COLOR_NV = $852D;
-  GL_SPARE0_NV = $852E;
-  GL_SPARE1_NV = $852F;
-  GL_DISCARD_NV = $8530;
-  GL_E_TIMES_F_NV = $8531;
-  GL_SPARE0_PLUS_SECONDARY_COLOR_NV = $8532;
-  GL_UNSIGNED_IDENTITY_NV = $8536;
-  GL_UNSIGNED_INVERT_NV = $8537;
-  GL_EXPAND_NORMAL_NV = $8538;
-  GL_EXPAND_NEGATE_NV = $8539;
-  GL_HALF_BIAS_NORMAL_NV = $853A;
-  GL_HALF_BIAS_NEGATE_NV = $853B;
-  GL_SIGNED_IDENTITY_NV = $853C;
-  GL_SIGNED_NEGATE_NV = $853D;
-  GL_SCALE_BY_TWO_NV = $853E;
-  GL_SCALE_BY_FOUR_NV = $853F;
-  GL_SCALE_BY_ONE_HALF_NV = $8540;
-  GL_BIAS_BY_NEGATIVE_ONE_HALF_NV = $8541;
-  GL_COMBINER_INPUT_NV = $8542;
-  GL_COMBINER_MAPPING_NV = $8543;
-  GL_COMBINER_COMPONENT_USAGE_NV = $8544;
-  GL_COMBINER_AB_DOT_PRODUCT_NV = $8545;
-  GL_COMBINER_CD_DOT_PRODUCT_NV = $8546;
-  GL_COMBINER_MUX_SUM_NV = $8547;
-  GL_COMBINER_SCALE_NV = $8548;
-  GL_COMBINER_BIAS_NV = $8549;
-  GL_COMBINER_AB_OUTPUT_NV = $854A;
-  GL_COMBINER_CD_OUTPUT_NV = $854B;
-  GL_COMBINER_SUM_OUTPUT_NV = $854C;
-  GL_MAX_GENERAL_COMBINERS_NV = $854D;
-  GL_NUM_GENERAL_COMBINERS_NV = $854E;
-  GL_COLOR_SUM_CLAMP_NV = $854F;
-  GL_COMBINER0_NV = $8550;
-  GL_COMBINER1_NV = $8551;
-  GL_COMBINER2_NV = $8552;
-  GL_COMBINER3_NV = $8553;
-  GL_COMBINER4_NV = $8554;
-  GL_COMBINER5_NV = $8555;
-  GL_COMBINER6_NV = $8556;
-  GL_COMBINER7_NV = $8557;
-
-  // GL_NV_register_combiners2
-  GL_PER_STAGE_CONSTANTS_NV = $8535;
-
-  // GL_NV_texgen_emboss
-  GL_EMBOSS_LIGHT_NV = $855D;
-  GL_EMBOSS_CONSTANT_NV = $855E;
-  GL_EMBOSS_MAP_NV = $855F;
-
-  // GL_NV_texgen_reflection
-  GL_NORMAL_MAP_NV = $8511;
-  GL_REFLECTION_MAP_NV = $8512;
-
-  // GL_NV_texture_env_combine4
-  GL_COMBINE4_NV = $8503;
-  GL_SOURCE3_RGB_NV = $8583;
-  GL_SOURCE3_ALPHA_NV = $858B;
-  GL_OPERAND3_RGB_NV = $8593;
-  GL_OPERAND3_ALPHA_NV = $859B;
-
-  // GL_NV_texture_expand_normal
-  GL_TEXTURE_UNSIGNED_REMAP_MODE_NV = $888F;
-
-  // GL_NV_texture_rectangle
-  GL_TEXTURE_RECTANGLE_NV = $84F5;
-  GL_TEXTURE_BINDING_RECTANGLE_NV = $84F6;
-  GL_PROXY_TEXTURE_RECTANGLE_NV = $84F7;
-  GL_MAX_RECTANGLE_TEXTURE_SIZE_NV = $84F8;
-
-  // GL_NV_texture_shader
-  GL_OFFSET_TEXTURE_RECTANGLE_NV = $864C;
-  GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV = $864D;
-  GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV = $864E;
-  GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV = $86D9;
-  GL_UNSIGNED_INT_S8_S8_8_8_NV = $86DA;
-  GL_UNSIGNED_INT_8_8_S8_S8_REV_NV = $86DB;
-  GL_DSDT_MAG_INTENSITY_NV = $86DC;
-  GL_SHADER_CONSISTENT_NV = $86DD;
-  GL_TEXTURE_SHADER_NV = $86DE;
-  GL_SHADER_OPERATION_NV = $86DF;
-  GL_CULL_MODES_NV = $86E0;
-  GL_OFFSET_TEXTURE_MATRIX_NV = $86E1;
-  GL_OFFSET_TEXTURE_SCALE_NV = $86E2;
-  GL_OFFSET_TEXTURE_BIAS_NV = $86E3;
-  GL_OFFSET_TEXTURE_2D_MATRIX_NV = GL_OFFSET_TEXTURE_MATRIX_NV;
-  GL_OFFSET_TEXTURE_2D_SCALE_NV = GL_OFFSET_TEXTURE_SCALE_NV;
-  GL_OFFSET_TEXTURE_2D_BIAS_NV = GL_OFFSET_TEXTURE_BIAS_NV;
-  GL_PREVIOUS_TEXTURE_INPUT_NV = $86E4;
-  GL_CONST_EYE_NV = $86E5;
-  GL_PASS_THROUGH_NV = $86E6;
-  GL_CULL_FRAGMENT_NV = $86E7;
-  GL_OFFSET_TEXTURE_2D_NV = $86E8;
-  GL_DEPENDENT_AR_TEXTURE_2D_NV = $86E9;
-  GL_DEPENDENT_GB_TEXTURE_2D_NV = $86EA;
-  GL_DOT_PRODUCT_NV = $86EC;
-  GL_DOT_PRODUCT_DEPTH_REPLACE_NV = $86ED;
-  GL_DOT_PRODUCT_TEXTURE_2D_NV = $86EE;
-  GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV = $86F0;
-  GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV = $86F1;
-  GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV = $86F2;
-  GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV = $86F3;
-  GL_HILO_NV = $86F4;
-  GL_DSDT_NV = $86F5;
-  GL_DSDT_MAG_NV = $86F6;
-  GL_DSDT_MAG_VIB_NV = $86F7;
-  GL_HILO16_NV = $86F8;
-  GL_SIGNED_HILO_NV = $86F9;
-  GL_SIGNED_HILO16_NV = $86FA;
-  GL_SIGNED_RGBA_NV = $86FB;
-  GL_SIGNED_RGBA8_NV = $86FC;
-  GL_SIGNED_RGB_NV = $86FE;
-  GL_SIGNED_RGB8_NV = $86FF;
-  GL_SIGNED_LUMINANCE_NV = $8701;
-  GL_SIGNED_LUMINANCE8_NV = $8702;
-  GL_SIGNED_LUMINANCE_ALPHA_NV = $8703;
-  GL_SIGNED_LUMINANCE8_ALPHA8_NV = $8704;
-  GL_SIGNED_ALPHA_NV = $8705;
-  GL_SIGNED_ALPHA8_NV = $8706;
-  GL_SIGNED_INTENSITY_NV = $8707;
-  GL_SIGNED_INTENSITY8_NV = $8708;
-  GL_DSDT8_NV = $8709;
-  GL_DSDT8_MAG8_NV = $870A;
-  GL_DSDT8_MAG8_INTENSITY8_NV = $870B;
-  GL_SIGNED_RGB_UNSIGNED_ALPHA_NV = $870C;
-  GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV = $870D;
-  GL_HI_SCALE_NV = $870E;
-  GL_LO_SCALE_NV = $870F;
-  GL_DS_SCALE_NV = $8710;
-  GL_DT_SCALE_NV = $8711;
-  GL_MAGNITUDE_SCALE_NV = $8712;
-  GL_VIBRANCE_SCALE_NV = $8713;
-  GL_HI_BIAS_NV = $8714;
-  GL_LO_BIAS_NV = $8715;
-  GL_DS_BIAS_NV = $8716;
-  GL_DT_BIAS_NV = $8717;
-  GL_MAGNITUDE_BIAS_NV = $8718;
-  GL_VIBRANCE_BIAS_NV = $8719;
-  GL_TEXTURE_BORDER_VALUES_NV = $871A;
-  GL_TEXTURE_HI_SIZE_NV = $871B;
-  GL_TEXTURE_LO_SIZE_NV = $871C;
-  GL_TEXTURE_DS_SIZE_NV = $871D;
-  GL_TEXTURE_DT_SIZE_NV = $871E;
-  GL_TEXTURE_MAG_SIZE_NV = $871F;
-
-  // GL_NV_texture_shader2
-  GL_DOT_PRODUCT_TEXTURE_3D_NV = $86EF;
-
-  // GL_NV_texture_shader3
-  GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV = $8850;
-  GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV = $8851;
-  GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV = $8852;
-  GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV = $8853;
-  GL_OFFSET_HILO_TEXTURE_2D_NV = $8854;
-  GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV = $8855;
-  GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV = $8856;
-  GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV = $8857;
-  GL_DEPENDENT_HILO_TEXTURE_2D_NV = $8858;
-  GL_DEPENDENT_RGB_TEXTURE_3D_NV = $8859;
-  GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV = $885A;
-  GL_DOT_PRODUCT_PASS_THROUGH_NV = $885B;
-  GL_DOT_PRODUCT_TEXTURE_1D_NV = $885C;
-  GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV = $885D;
-  GL_HILO8_NV = $885E;
-  GL_SIGNED_HILO8_NV = $885F;
-  GL_FORCE_BLUE_TO_ONE_NV = $8860;
-
-  // GL_NV_vertex_array_range
-  GL_VERTEX_ARRAY_RANGE_NV = $851D;
-  GL_VERTEX_ARRAY_RANGE_LENGTH_NV = $851E;
-  GL_VERTEX_ARRAY_RANGE_VALID_NV = $851F;
-  GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV = $8520;
-  GL_VERTEX_ARRAY_RANGE_POINTER_NV = $8521;
-
-  // GL_NV_vertex_array_range2
-  GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV = $8533;
-
-  // GL_NV_vertex_program
-  GL_VERTEX_PROGRAM_NV = $8620;
-  GL_VERTEX_STATE_PROGRAM_NV = $8621;
-  GL_ATTRIB_ARRAY_SIZE_NV = $8623;
-  GL_ATTRIB_ARRAY_STRIDE_NV = $8624;
-  GL_ATTRIB_ARRAY_TYPE_NV = $8625;
-  GL_CURRENT_ATTRIB_NV = $8626;
-  GL_PROGRAM_LENGTH_NV = $8627;
-  GL_PROGRAM_STRING_NV = $8628;
-  GL_MODELVIEW_PROJECTION_NV = $8629;
-  GL_IDENTITY_NV = $862A;
-  GL_INVERSE_NV = $862B;
-  GL_TRANSPOSE_NV = $862C;
-  GL_INVERSE_TRANSPOSE_NV = $862D;
-  GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV = $862E;
-  GL_MAX_TRACK_MATRICES_NV = $862F;
-  GL_MATRIX0_NV = $8630;
-  GL_MATRIX1_NV = $8631;
-  GL_MATRIX2_NV = $8632;
-  GL_MATRIX3_NV = $8633;
-  GL_MATRIX4_NV = $8634;
-  GL_MATRIX5_NV = $8635;
-  GL_MATRIX6_NV = $8636;
-  GL_MATRIX7_NV = $8637;
-  GL_CURRENT_MATRIX_STACK_DEPTH_NV = $8640;
-  GL_CURRENT_MATRIX_NV = $8641;
-  GL_VERTEX_PROGRAM_POINT_SIZE_NV = $8642;
-  GL_VERTEX_PROGRAM_TWO_SIDE_NV = $8643;
-  GL_PROGRAM_PARAMETER_NV = $8644;
-  GL_ATTRIB_ARRAY_POINTER_NV = $8645;
-  GL_PROGRAM_TARGET_NV = $8646;
-  GL_PROGRAM_RESIDENT_NV = $8647;
-  GL_TRACK_MATRIX_NV = $8648;
-  GL_TRACK_MATRIX_TRANSFORM_NV = $8649;
-  GL_VERTEX_PROGRAM_BINDING_NV = $864A;
-  GL_PROGRAM_ERROR_POSITION_NV = $864B;
-  GL_VERTEX_ATTRIB_ARRAY0_NV = $8650;
-  GL_VERTEX_ATTRIB_ARRAY1_NV = $8651;
-  GL_VERTEX_ATTRIB_ARRAY2_NV = $8652;
-  GL_VERTEX_ATTRIB_ARRAY3_NV = $8653;
-  GL_VERTEX_ATTRIB_ARRAY4_NV = $8654;
-  GL_VERTEX_ATTRIB_ARRAY5_NV = $8655;
-  GL_VERTEX_ATTRIB_ARRAY6_NV = $8656;
-  GL_VERTEX_ATTRIB_ARRAY7_NV = $8657;
-  GL_VERTEX_ATTRIB_ARRAY8_NV = $8658;
-  GL_VERTEX_ATTRIB_ARRAY9_NV = $8659;
-  GL_VERTEX_ATTRIB_ARRAY10_NV = $865A;
-  GL_VERTEX_ATTRIB_ARRAY11_NV = $865B;
-  GL_VERTEX_ATTRIB_ARRAY12_NV = $865C;
-  GL_VERTEX_ATTRIB_ARRAY13_NV = $865D;
-  GL_VERTEX_ATTRIB_ARRAY14_NV = $865E;
-  GL_VERTEX_ATTRIB_ARRAY15_NV = $865F;
-  GL_MAP1_VERTEX_ATTRIB0_4_NV = $8660;
-  GL_MAP1_VERTEX_ATTRIB1_4_NV = $8661;
-  GL_MAP1_VERTEX_ATTRIB2_4_NV = $8662;
-  GL_MAP1_VERTEX_ATTRIB3_4_NV = $8663;
-  GL_MAP1_VERTEX_ATTRIB4_4_NV = $8664;
-  GL_MAP1_VERTEX_ATTRIB5_4_NV = $8665;
-  GL_MAP1_VERTEX_ATTRIB6_4_NV = $8666;
-  GL_MAP1_VERTEX_ATTRIB7_4_NV = $8667;
-  GL_MAP1_VERTEX_ATTRIB8_4_NV = $8668;
-  GL_MAP1_VERTEX_ATTRIB9_4_NV = $8669;
-  GL_MAP1_VERTEX_ATTRIB10_4_NV = $866A;
-  GL_MAP1_VERTEX_ATTRIB11_4_NV = $866B;
-  GL_MAP1_VERTEX_ATTRIB12_4_NV = $866C;
-  GL_MAP1_VERTEX_ATTRIB13_4_NV = $866D;
-  GL_MAP1_VERTEX_ATTRIB14_4_NV = $866E;
-  GL_MAP1_VERTEX_ATTRIB15_4_NV = $866F;
-  GL_MAP2_VERTEX_ATTRIB0_4_NV = $8670;
-  GL_MAP2_VERTEX_ATTRIB1_4_NV = $8671;
-  GL_MAP2_VERTEX_ATTRIB2_4_NV = $8672;
-  GL_MAP2_VERTEX_ATTRIB3_4_NV = $8673;
-  GL_MAP2_VERTEX_ATTRIB4_4_NV = $8674;
-  GL_MAP2_VERTEX_ATTRIB5_4_NV = $8675;
-  GL_MAP2_VERTEX_ATTRIB6_4_NV = $8676;
-  GL_MAP2_VERTEX_ATTRIB7_4_NV = $8677;
-  GL_MAP2_VERTEX_ATTRIB8_4_NV = $8678;
-  GL_MAP2_VERTEX_ATTRIB9_4_NV = $8679;
-  GL_MAP2_VERTEX_ATTRIB10_4_NV = $867A;
-  GL_MAP2_VERTEX_ATTRIB11_4_NV = $867B;
-  GL_MAP2_VERTEX_ATTRIB12_4_NV = $867C;
-  GL_MAP2_VERTEX_ATTRIB13_4_NV = $867D;
-  GL_MAP2_VERTEX_ATTRIB14_4_NV = $867E;
-  GL_MAP2_VERTEX_ATTRIB15_4_NV = $867F;
-
-  // GL_NV_fragment_program2 and GL_NV_vertex_program2_option
-  GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV = $88F4;
-  GL_MAX_PROGRAM_CALL_DEPTH_NV = $88F5;
-
-  // GL_NV_fragment_program2
-  GL_MAX_PROGRAM_IF_DEPTH_NV = $88F6;
-  GL_MAX_PROGRAM_LOOP_DEPTH_NV = $88F7;
-  GL_MAX_PROGRAM_LOOP_COUNT_NV = $88F8;
-
-  // GL_NV_vertex_program3
-  MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB = $8B4C;
-
-  // GL_NV_depth_buffer_float
-  GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV = $8DAD;
-  GL_DEPTH_BUFFER_FLOAT_MODE_NV = $8DAF;
-
-  // GL_NV_framebuffer_multisample_coverage
-  GL_RENDERBUFFER_COVERAGE_SAMPLES_NV = $8CAB;
-  GL_RENDERBUFFER_COLOR_SAMPLES_NV = $8E10;
-
-  // GL_NV_geometry_program4
-  GL_GEOMETRY_PROGRAM_NV = $8C26;
-  GL_MAX_PROGRAM_OUTPUT_VERTICES_NV = $8C27;
-  GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV = $8C28;
-
-  // GL_NV_gpu_program4
-  GL_PROGRAM_ATTRIB_COMPONENTS_NV = $8906;
-  GL_PROGRAM_RESULT_COMPONENTS_NV = $8907;
-  GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV = $8908;
-  GL_MAX_PROGRAM_RESULT_COMPONENTS_NV = $8909;
-  GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV = $8DA5;
-  GL_MAX_PROGRAM_GENERIC_RESULTS_NV = $8DA6;
-
-  // GL_NV_parameter_buffer_object
-  GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV = $8DA0;
-  GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV = $8DA1;
-  GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV = $8DA2;
-  GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV = $8DA3;
-  GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV = $8DA4;
-
-  // GL_NV_transform_feedback
-  GL_TRANSFORM_FEEDBACK_BUFFER_NV = $8C8E;
-  GL_TRANSFORM_FEEDBACK_BUFFER_START_NV = $8C84;
-  GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV = $8C85;
-  GL_TRANSFORM_FEEDBACK_RECORD_NV = $8C86;
-  GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV = $8C8F;
-  GL_INTERLEAVED_ATTRIBS_NV = $8C8C;
-  GL_SEPARATE_ATTRIBS_NV = $8C8D;
-  GL_PRIMITIVES_GENERATED_NV = $8C87;
-  GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV = $8C88;
-  GL_RASTERIZER_DISCARD_NV = $8C89;
-  GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV = $8C8A;
-  GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV = $8C8B;
-  GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV = $8C80;
-  GL_TRANSFORM_FEEDBACK_ATTRIBS_NV = $8C7E;
-  GL_ACTIVE_VARYINGS_NV = $8C81;
-  GL_ACTIVE_VARYING_MAX_LENGTH_NV = $8C82;
-  GL_TRANSFORM_FEEDBACK_VARYINGS_NV = $8C83;
-  GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV = $8C7F;
-  GL_BACK_PRIMARY_COLOR_NV = $8C77;
-  GL_BACK_SECONDARY_COLOR_NV = $8C78;
-  GL_TEXTURE_COORD_NV = $8C79;
-  GL_CLIP_DISTANCE_NV = $8C7A;
-  GL_VERTEX_ID_NV = $8C7B;
-  GL_PRIMITIVE_ID_NV = $8C7C;
-  GL_GENERIC_ATTRIB_NV = $8C7D;
-  GL_LAYER_NV = $8DAA;
-  GL_NEXT_BUFFER_NV = -2;
-  GL_SKIP_COMPONENTS4_NV = -3;
-  GL_SKIP_COMPONENTS3_NV = -4;
-  GL_SKIP_COMPONENTS2_NV = -5;
-  GL_SKIP_COMPONENTS1_NV = -6;
-
-  // GL_NV_conditional_render
-  GL_QUERY_WAIT_NV = $8E13;
-  GL_QUERY_NO_WAIT_NV = $8E14;
-  GL_QUERY_BY_REGION_WAIT_NV = $8E15;
-  GL_QUERY_BY_REGION_NO_WAIT_NV = $8E16;
-
-  // GL_NV_conservative_raster
-  GL_CONSERVATIVE_RASTERIZATION_NV = $9346;
-  GL_SUBPIXEL_PRECISION_BIAS_X_BITS_NV = $9347;
-  GL_SUBPIXEL_PRECISION_BIAS_Y_BITS_NV = $9348;
-  GL_MAX_SUBPIXEL_PRECISION_BIAS_BITS_NV = $9349;
-
-  // GL_NV_conservative_raster_dilate
-  GL_CONSERVATIVE_RASTER_DILATE_NV = $9379;
-  GL_CONSERVATIVE_RASTER_DILATE_RANGE_NV = $937A;
-  GL_CONSERVATIVE_RASTER_DILATE_GRANULARITY_NV = $937B;
-
-  // GL_NV_present_video
-  GL_FRAME_NV = $8E26;
-  GL_FIELDS_NV = $8E27;
-  GL_CURRENT_TIME_NV = $8E28;
-  GL_NUM_FILL_STREAMS_NV = $8E29;
-  GL_PRESENT_TIME_NV = $8E2A;
-  GL_PRESENT_DURATION_NV = $8E2B;
-
-  // GL_NV_explicit_multisample
-  GL_SAMPLE_POSITION_NV = $8E50;
-  GL_SAMPLE_MASK_NV = $8E51;
-  GL_SAMPLE_MASK_VALUE_NV = $8E52;
-  GL_TEXTURE_BINDING_RENDERBUFFER_NV = $8E53;
-  GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV = $8E54;
-  GL_TEXTURE_RENDERBUFFER_NV = $8E55;
-  GL_SAMPLER_RENDERBUFFER_NV = $8E56;
-  GL_INT_SAMPLER_RENDERBUFFER_NV = $8E57;
-  GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV = $8E58;
-  GL_MAX_SAMPLE_MASK_WORDS_NV = $8E59;
-
-  // GL_NV_transform_feedback2
-  GL_TRANSFORM_FEEDBACK_NV = $8E22;
-  GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED_NV = $8E23;
-  GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE_NV = $8E24;
-  GL_TRANSFORM_FEEDBACK_BINDING_NV = $8E25;
-
-  // GL_NV_video_capture
-  GL_VIDEO_BUFFER_NV = $9020;
-  GL_VIDEO_BUFFER_BINDING_NV = $9021;
-  GL_FIELD_UPPER_NV = $9022;
-  GL_FIELD_LOWER_NV = $9023;
-  GL_NUM_VIDEO_CAPTURE_STREAMS_NV = $9024;
-  GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV = $9025;
-  GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV = $9026;
-  GL_LAST_VIDEO_CAPTURE_STATUS_NV = $9027;
-  GL_VIDEO_BUFFER_PITCH_NV = $9028;
-  GL_VIDEO_COLOR_CONVERSION_MATRIX_NV = $9029;
-  GL_VIDEO_COLOR_CONVERSION_MAX_NV = $902A;
-  GL_VIDEO_COLOR_CONVERSION_MIN_NV = $902B;
-  GL_VIDEO_COLOR_CONVERSION_OFFSET_NV = $902C;
-  GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV = $902D;
-  GL_PARTIAL_SUCCESS_NV = $902E;
-  GL_SUCCESS_NV = $902F;
-  GL_FAILURE_NV = $9030;
-  GL_YCBYCR8_422_NV = $9031;
-  GL_YCBAYCR8A_4224_NV = $9032;
-  GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV = $9033;
-  GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV = $9034;
-  GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV = $9035;
-  GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV = $9036;
-  GL_Z4Y12Z4CB12Z4CR12_444_NV = $9037;
-  GL_VIDEO_CAPTURE_FRAME_WIDTH_NV = $9038;
-  GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV = $9039;
-  GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV = $903A;
-  GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV = $903B;
-  GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV = $903C;
-
-  // GL_NV_shader_buffer_load
-  GL_BUFFER_GPU_ADDRESS_NV = $8F1D;
-  GL_GPU_ADDRESS_NV = $8F34;
-  GL_MAX_SHADER_BUFFER_ADDRESS_NV = $8F35;
-
-  // GL_NV_vertex_buffer_unified_memory
-  GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV = $8F1E;
-  GL_ELEMENT_ARRAY_UNIFIED_NV = $8F1F;
-  GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV = $8F20;
-  GL_VERTEX_ARRAY_ADDRESS_NV = $8F21;
-  GL_NORMAL_ARRAY_ADDRESS_NV = $8F22;
-  GL_COLOR_ARRAY_ADDRESS_NV = $8F23;
-  GL_INDEX_ARRAY_ADDRESS_NV = $8F24;
-  GL_TEXTURE_COORD_ARRAY_ADDRESS_NV = $8F25;
-  GL_EDGE_FLAG_ARRAY_ADDRESS_NV = $8F26;
-  GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV = $8F27;
-  GL_FOG_COORD_ARRAY_ADDRESS_NV = $8F28;
-  GL_ELEMENT_ARRAY_ADDRESS_NV = $8F29;
-  GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV = $8F2A;
-  GL_VERTEX_ARRAY_LENGTH_NV = $8F2B;
-  GL_NORMAL_ARRAY_LENGTH_NV = $8F2C;
-  GL_COLOR_ARRAY_LENGTH_NV = $8F2D;
-  GL_INDEX_ARRAY_LENGTH_NV = $8F2E;
-  GL_TEXTURE_COORD_ARRAY_LENGTH_NV = $8F2F;
-  GL_EDGE_FLAG_ARRAY_LENGTH_NV = $8F30;
-  GL_SECONDARY_COLOR_ARRAY_LENGTH_NV = $8F31;
-  GL_FOG_COORD_ARRAY_LENGTH_NV = $8F32;
-  GL_ELEMENT_ARRAY_LENGTH_NV = $8F33;
-  GL_DRAW_INDIRECT_UNIFIED_NV = $8F40;
-  GL_DRAW_INDIRECT_ADDRESS_NV = $8F41;
-  GL_DRAW_INDIRECT_LENGTH_NV = $8F42;
-
-  // GL_NV_gpu_program5
-  GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV = $8E5A;
-  GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV = $8E5B;
-  GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV = $8E5C;
-  GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV = $8E5D;
-  GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV = $8E5E;
-  GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV = $8E5F;
-  GL_MAX_PROGRAM_SUBROUTINE_PARAMETERS_NV = $8F44;
-  GL_MAX_PROGRAM_SUBROUTINE_NUM_NV = $8F45;
-
-  // GL_NV_gpu_shader5
-  GL_INT64_NV = $140E;
-  GL_UNSIGNED_INT64_NV = $140F;
-  GL_INT8_NV = $8FE0;
-  GL_INT8_VEC2_NV = $8FE1;
-  GL_INT8_VEC3_NV = $8FE2;
-  GL_INT8_VEC4_NV = $8FE3;
-  GL_INT16_NV = $8FE4;
-  GL_INT16_VEC2_NV = $8FE5;
-  GL_INT16_VEC3_NV = $8FE6;
-  GL_INT16_VEC4_NV = $8FE7;
-  GL_INT64_VEC2_NV = $8FE9;
-  GL_INT64_VEC3_NV = $8FEA;
-  GL_INT64_VEC4_NV = $8FEB;
-  GL_UNSIGNED_INT8_NV = $8FEC;
-  GL_UNSIGNED_INT8_VEC2_NV = $8FED;
-  GL_UNSIGNED_INT8_VEC3_NV = $8FEE;
-  GL_UNSIGNED_INT8_VEC4_NV = $8FEF;
-  GL_UNSIGNED_INT16_NV = $8FF0;
-  GL_UNSIGNED_INT16_VEC2_NV = $8FF1;
-  GL_UNSIGNED_INT16_VEC3_NV = $8FF2;
-  GL_UNSIGNED_INT16_VEC4_NV = $8FF3;
-  GL_UNSIGNED_INT64_VEC2_NV = $8FF5;
-  GL_UNSIGNED_INT64_VEC3_NV = $8FF6;
-  GL_UNSIGNED_INT64_VEC4_NV = $8FF7;
-  GL_FLOAT16_NV = $8FF8;
-  GL_FLOAT16_VEC2_NV = $8FF9;
-  GL_FLOAT16_VEC3_NV = $8FFA;
-  GL_FLOAT16_VEC4_NV = $8FFB;
-  { reuse GL_PATCHES }
-
-  // GL_NV_shader_buffer_store
-  GL_SHADER_GLOBAL_ACCESS_BARRIER_BIT_NV = $00000010;
-  { reuse GL_READ_WRITE }
-  { reuse GL_WRITE_ONLY }
-
-  // GL_NV_tessellation_program5
-  GL_MAX_PROGRAM_PATCH_ATTRIBS_NV = $86D8;
-  GL_TESS_CONTROL_PROGRAM_NV = $891E;
-  GL_TESS_EVALUATION_PROGRAM_NV = $891F;
-  GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV = $8C74;
-  GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV = $8C75;
-
-  // GL_NV_vertex_attrib_integer_64bit
-  { reuse GL_INT64_NV }
-  { reuse GL_UNSIGNED_INT64_NV }
-
-  // GL_NV_multisample_coverage
-  GL_COVERAGE_SAMPLES_NV = $80A9;
-  GL_COLOR_SAMPLES_NV = $8E20;
-
-  // GL_NV_vdpau_interop
-  GL_SURFACE_STATE_NV = $86EB;
-  GL_SURFACE_REGISTERED_NV = $86FD;
-  GL_SURFACE_MAPPED_NV = $8700;
-  GL_WRITE_DISCARD_NV = $88BE;
-
-  // GL_OML_interlace
-  GL_INTERLACE_OML = $8980;
-  GL_INTERLACE_READ_OML = $8981;
-
-  // GL_OML_resample
-  GL_PACK_RESAMPLE_OML = $8984;
-  GL_UNPACK_RESAMPLE_OML = $8985;
-  GL_RESAMPLE_REPLICATE_OML = $8986;
-  GL_RESAMPLE_ZERO_FILL_OML = $8987;
-  GL_RESAMPLE_AVERAGE_OML = $8988;
-  GL_RESAMPLE_DECIMATE_OML = $8989;
-
-  // GL_OML_subsample
-  GL_FORMAT_SUBSAMPLE_24_24_OML = $8982;
-  GL_FORMAT_SUBSAMPLE_244_244_OML = $8983;
-
-  // GL_OVR_multiview
-  GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_NUM_VIEWS_OVR = $9630;
-  GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_BASE_VIEW_INDEX_OVR = $9632;
-  GL_MAX_VIEWS_OVR = $9631;
-  GL_FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR  = $9633;
-
-  // GL_PGI_misc_hints
-  GL_PREFER_DOUBLEBUFFER_HINT_PGI = $1A1F8;
-  GL_CONSERVE_MEMORY_HINT_PGI = $1A1FD;
-  GL_RECLAIM_MEMORY_HINT_PGI = $1A1FE;
-  GL_NATIVE_GRAPHICS_HANDLE_PGI = $1A202;
-  GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI = $1A203;
-  GL_NATIVE_GRAPHICS_END_HINT_PGI = $1A204;
-  GL_ALWAYS_FAST_HINT_PGI = $1A20C;
-  GL_ALWAYS_SOFT_HINT_PGI = $1A20D;
-  GL_ALLOW_DRAW_OBJ_HINT_PGI = $1A20E;
-  GL_ALLOW_DRAW_WIN_HINT_PGI = $1A20F;
-  GL_ALLOW_DRAW_FRG_HINT_PGI = $1A210;
-  GL_ALLOW_DRAW_MEM_HINT_PGI = $1A211;
-  GL_STRICT_DEPTHFUNC_HINT_PGI = $1A216;
-  GL_STRICT_LIGHTING_HINT_PGI = $1A217;
-  GL_STRICT_SCISSOR_HINT_PGI = $1A218;
-  GL_FULL_STIPPLE_HINT_PGI = $1A219;
-  GL_CLIP_NEAR_HINT_PGI = $1A220;
-  GL_CLIP_FAR_HINT_PGI = $1A221;
-  GL_WIDE_LINE_HINT_PGI = $1A222;
-  GL_BACK_NORMALS_HINT_PGI = $1A223;
-
-  // GL_PGI_vertex_hints
-  GL_VERTEX_DATA_HINT_PGI = $1A22A;
-  GL_VERTEX_CONSISTENT_HINT_PGI = $1A22B;
-  GL_MATERIAL_SIDE_HINT_PGI = $1A22C;
-  GL_MAX_VERTEX_HINT_PGI = $1A22D;
-  GL_COLOR3_BIT_PGI = $00010000;
-  GL_COLOR4_BIT_PGI = $00020000;
-  GL_EDGEFLAG_BIT_PGI = $00040000;
-  GL_INDEX_BIT_PGI = $00080000;
-  GL_MAT_AMBIENT_BIT_PGI = $00100000;
-  GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI = $00200000;
-  GL_MAT_DIFFUSE_BIT_PGI = $00400000;
-  GL_MAT_EMISSION_BIT_PGI = $00800000;
-  GL_MAT_COLOR_INDEXES_BIT_PGI = $01000000;
-  GL_MAT_SHININESS_BIT_PGI = $02000000;
-  GL_MAT_SPECULAR_BIT_PGI = $04000000;
-  GL_NORMAL_BIT_PGI = $08000000;
-  GL_TEXCOORD1_BIT_PGI = $10000000;
-  GL_TEXCOORD2_BIT_PGI = $20000000;
-  GL_TEXCOORD3_BIT_PGI = $40000000;
-  GL_TEXCOORD4_BIT_PGI = $80000000;
-  GL_VERTEX23_BIT_PGI = $00000004;
-  GL_VERTEX4_BIT_PGI = $00000008;
-
-  // GL_REND_screen_coordinates
-  GL_SCREEN_COORDINATES_REND = $8490;
-  GL_INVERTED_SCREEN_W_REND = $8491;
-
-  // GL_S3_s3tc
-  GL_RGB_S3TC = $83A0;
-  GL_RGB4_S3TC = $83A1;
-  GL_RGBA_S3TC = $83A2;
-  GL_RGBA4_S3TC = $83A3;
-
-  // GL_SGIS_detail_texture
-  GL_DETAIL_TEXTURE_2D_SGIS = $8095;
-  GL_DETAIL_TEXTURE_2D_BINDING_SGIS = $8096;
-  GL_LINEAR_DETAIL_SGIS = $8097;
-  GL_LINEAR_DETAIL_ALPHA_SGIS = $8098;
-  GL_LINEAR_DETAIL_COLOR_SGIS = $8099;
-  GL_DETAIL_TEXTURE_LEVEL_SGIS = $809A;
-  GL_DETAIL_TEXTURE_MODE_SGIS = $809B;
-  GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS = $809C;
-
-  // GL_SGIS_fog_function
-  GL_FOG_FUNC_SGIS = $812A;
-  GL_FOG_FUNC_POINTS_SGIS = $812B;
-  GL_MAX_FOG_FUNC_POINTS_SGIS = $812C;
-
-  // GL_SGIS_generate_mipmap
-  GL_GENERATE_MIPMAP_SGIS = $8191;
-  GL_GENERATE_MIPMAP_HINT_SGIS = $8192;
-
-  // GL_SGIS_multisample
-  GL_MULTISAMPLE_SGIS = $809D;
-  GL_SAMPLE_ALPHA_TO_MASK_SGIS = $809E;
-  GL_SAMPLE_ALPHA_TO_ONE_SGIS = $809F;
-  GL_SAMPLE_MASK_SGIS = $80A0;
-  GL_1PASS_SGIS = $80A1;
-  GL_2PASS_0_SGIS = $80A2;
-  GL_2PASS_1_SGIS = $80A3;
-  GL_4PASS_0_SGIS = $80A4;
-  GL_4PASS_1_SGIS = $80A5;
-  GL_4PASS_2_SGIS = $80A6;
-  GL_4PASS_3_SGIS = $80A7;
-  GL_SAMPLE_BUFFERS_SGIS = $80A8;
-  GL_SAMPLES_SGIS = $80A9;
-  GL_SAMPLE_MASK_VALUE_SGIS = $80AA;
-  GL_SAMPLE_MASK_INVERT_SGIS = $80AB;
-  GL_SAMPLE_PATTERN_SGIS = $80AC;
-
-  // GL_SGIS_pixel_texture
-  GL_PIXEL_TEXTURE_SGIS = $8353;
-  GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS = $8354;
-  GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS = $8355;
-  GL_PIXEL_GROUP_COLOR_SGIS = $8356;
-
-  // GL_SGIS_point_line_texgen
-  GL_EYE_DISTANCE_TO_POINT_SGIS = $81F0;
-  GL_OBJECT_DISTANCE_TO_POINT_SGIS = $81F1;
-  GL_EYE_DISTANCE_TO_LINE_SGIS = $81F2;
-  GL_OBJECT_DISTANCE_TO_LINE_SGIS = $81F3;
-  GL_EYE_POINT_SGIS = $81F4;
-  GL_OBJECT_POINT_SGIS = $81F5;
-  GL_EYE_LINE_SGIS = $81F6;
-  GL_OBJECT_LINE_SGIS = $81F7;
-
-  // GL_SGIS_point_parameters
-  GL_POINT_SIZE_MIN_SGIS = $8126;
-  GL_POINT_SIZE_MAX_SGIS = $8127;
-  GL_POINT_FADE_THRESHOLD_SIZE_SGIS = $8128;
-  GL_DISTANCE_ATTENUATION_SGIS = $8129;
-
-  // GL_SGIS_sharpen_texture
-  GL_LINEAR_SHARPEN_SGIS = $80AD;
-  GL_LINEAR_SHARPEN_ALPHA_SGIS = $80AE;
-  GL_LINEAR_SHARPEN_COLOR_SGIS = $80AF;
-  GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS = $80B0;
-
-  // GL_SGIS_texture4D
-  GL_PACK_SKIP_VOLUMES_SGIS = $8130;
-  GL_PACK_IMAGE_DEPTH_SGIS = $8131;
-  GL_UNPACK_SKIP_VOLUMES_SGIS = $8132;
-  GL_UNPACK_IMAGE_DEPTH_SGIS = $8133;
-  GL_TEXTURE_4D_SGIS = $8134;
-  GL_PROXY_TEXTURE_4D_SGIS = $8135;
-  GL_TEXTURE_4DSIZE_SGIS = $8136;
-  GL_TEXTURE_WRAP_Q_SGIS = $8137;
-  GL_MAX_4D_TEXTURE_SIZE_SGIS = $8138;
-  GL_TEXTURE_4D_BINDING_SGIS = $814F;
-
-  // GL_SGIS_texture_color_mask
-  GL_TEXTURE_COLOR_WRITEMASK_SGIS = $81EF;
-
-  // GL_SGIS_texture_edge_clamp
-  GL_CLAMP_TO_EDGE_SGIS = $812F;
-
-  // GL_SGIS_texture_filter4
-  GL_FILTER4_SGIS = $8146;
-  GL_TEXTURE_FILTER4_SIZE_SGIS = $8147;
-
-  // GL_SGIS_texture_lod
-  GL_TEXTURE_MIN_LOD_SGIS = $813A;
-  GL_TEXTURE_MAX_LOD_SGIS = $813B;
-  GL_TEXTURE_BASE_LEVEL_SGIS = $813C;
-  GL_TEXTURE_MAX_LEVEL_SGIS = $813D;
-
-  // GL_SGIS_texture_select
-  GL_DUAL_ALPHA4_SGIS = $8110;
-  GL_DUAL_ALPHA8_SGIS = $8111;
-  GL_DUAL_ALPHA12_SGIS = $8112;
-  GL_DUAL_ALPHA16_SGIS = $8113;
-  GL_DUAL_LUMINANCE4_SGIS = $8114;
-  GL_DUAL_LUMINANCE8_SGIS = $8115;
-  GL_DUAL_LUMINANCE12_SGIS = $8116;
-  GL_DUAL_LUMINANCE16_SGIS = $8117;
-  GL_DUAL_INTENSITY4_SGIS = $8118;
-  GL_DUAL_INTENSITY8_SGIS = $8119;
-  GL_DUAL_INTENSITY12_SGIS = $811A;
-  GL_DUAL_INTENSITY16_SGIS = $811B;
-  GL_DUAL_LUMINANCE_ALPHA4_SGIS = $811C;
-  GL_DUAL_LUMINANCE_ALPHA8_SGIS = $811D;
-  GL_QUAD_ALPHA4_SGIS = $811E;
-  GL_QUAD_ALPHA8_SGIS = $811F;
-  GL_QUAD_LUMINANCE4_SGIS = $8120;
-  GL_QUAD_LUMINANCE8_SGIS = $8121;
-  GL_QUAD_INTENSITY4_SGIS = $8122;
-  GL_QUAD_INTENSITY8_SGIS = $8123;
-  GL_DUAL_TEXTURE_SELECT_SGIS = $8124;
-  GL_QUAD_TEXTURE_SELECT_SGIS = $8125;
-
-  // GL_SGIX_async
-  GL_ASYNC_MARKER_SGIX = $8329;
-
-  // GL_SGIX_async_histogram
-  GL_ASYNC_HISTOGRAM_SGIX = $832C;
-  GL_MAX_ASYNC_HISTOGRAM_SGIX = $832D;
-
-  // GL_SGIX_async_pixel
-  GL_ASYNC_TEX_IMAGE_SGIX = $835C;
-  GL_ASYNC_DRAW_PIXELS_SGIX = $835D;
-  GL_ASYNC_READ_PIXELS_SGIX = $835E;
-  GL_MAX_ASYNC_TEX_IMAGE_SGIX = $835F;
-  GL_MAX_ASYNC_DRAW_PIXELS_SGIX = $8360;
-  GL_MAX_ASYNC_READ_PIXELS_SGIX = $8361;
-
-  // GL_SGIX_blend_alpha_minmax
-  GL_ALPHA_MIN_SGIX = $8320;
-  GL_ALPHA_MAX_SGIX = $8321;
-
-  // GL_SGIX_calligraphic_fragment
-  GL_CALLIGRAPHIC_FRAGMENT_SGIX = $8183;
-
-  // GL_SGIX_clipmap
-  GL_LINEAR_CLIPMAP_LINEAR_SGIX = $8170;
-  GL_TEXTURE_CLIPMAP_CENTER_SGIX = $8171;
-  GL_TEXTURE_CLIPMAP_FRAME_SGIX = $8172;
-  GL_TEXTURE_CLIPMAP_OFFSET_SGIX = $8173;
-  GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX = $8174;
-  GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX = $8175;
-  GL_TEXTURE_CLIPMAP_DEPTH_SGIX = $8176;
-  GL_MAX_CLIPMAP_DEPTH_SGIX = $8177;
-  GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX = $8178;
-  GL_NEAREST_CLIPMAP_NEAREST_SGIX = $844D;
-  GL_NEAREST_CLIPMAP_LINEAR_SGIX = $844E;
-  GL_LINEAR_CLIPMAP_NEAREST_SGIX = $844F;
-
-  // GL_SGIX_convolution_accuracy
-  GL_CONVOLUTION_HINT_SGIX = $8316;
-
-  // GL_SGIX_depth_texture
-  GL_DEPTH_COMPONENT16_SGIX = $81A5;
-  GL_DEPTH_COMPONENT24_SGIX = $81A6;
-  GL_DEPTH_COMPONENT32_SGIX = $81A7;
-
-  // GL_SGIX_fog_offset
-  GL_FOG_OFFSET_SGIX = $8198;
-  GL_FOG_OFFSET_VALUE_SGIX = $8199;
-
-  // GL_SGIX_fog_scale
-  GL_FOG_SCALE_SGIX = $81FC;
-  GL_FOG_SCALE_VALUE_SGIX = $81FD;
-
-  // GL_SGIX_fragment_lighting
-  GL_FRAGMENT_LIGHTING_SGIX = $8400;
-  GL_FRAGMENT_COLOR_MATERIAL_SGIX = $8401;
-  GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX = $8402;
-  GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX = $8403;
-  GL_MAX_FRAGMENT_LIGHTS_SGIX = $8404;
-  GL_MAX_ACTIVE_LIGHTS_SGIX = $8405;
-  GL_CURRENT_RASTER_NORMAL_SGIX = $8406;
-  GL_LIGHT_ENV_MODE_SGIX = $8407;
-  GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX = $8408;
-  GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX = $8409;
-  GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX = $840A;
-  GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX = $840B;
-  GL_FRAGMENT_LIGHT0_SGIX = $840C;
-  GL_FRAGMENT_LIGHT1_SGIX = $840D;
-  GL_FRAGMENT_LIGHT2_SGIX = $840E;
-  GL_FRAGMENT_LIGHT3_SGIX = $840F;
-  GL_FRAGMENT_LIGHT4_SGIX = $8410;
-  GL_FRAGMENT_LIGHT5_SGIX = $8411;
-  GL_FRAGMENT_LIGHT6_SGIX = $8412;
-  GL_FRAGMENT_LIGHT7_SGIX = $8413;
-
-  // GL_SGIX_framezoom
-  GL_FRAMEZOOM_SGIX = $818B;
-  GL_FRAMEZOOM_FACTOR_SGIX = $818C;
-  GL_MAX_FRAMEZOOM_FACTOR_SGIX = $818D;
-
-  // GL_SGIX_impact_pixel_texture
-  GL_PIXEL_TEX_GEN_Q_CEILING_SGIX = $8184;
-  GL_PIXEL_TEX_GEN_Q_ROUND_SGIX = $8185;
-  GL_PIXEL_TEX_GEN_Q_FLOOR_SGIX = $8186;
-  GL_PIXEL_TEX_GEN_ALPHA_REPLACE_SGIX = $8187;
-  GL_PIXEL_TEX_GEN_ALPHA_NO_REPLACE_SGIX = $8188;
-  GL_PIXEL_TEX_GEN_ALPHA_LS_SGIX = $8189;
-  GL_PIXEL_TEX_GEN_ALPHA_MS_SGIX = $818A;
-
-  // GL_SGIX_instruments
-  GL_INSTRUMENT_BUFFER_POINTER_SGIX = $8180;
-  GL_INSTRUMENT_MEASUREMENTS_SGIX = $8181;
-
-  // GL_SGIX_interlace
-  GL_INTERLACE_SGIX = $8094;
-
-  // GL_SGIX_ir_instrument1
-  GL_IR_INSTRUMENT1_SGIX = $817F;
-
-  // GL_SGIX_list_priority
-  GL_LIST_PRIORITY_SGIX = $8182;
-
-  // GL_SGIX_pixel_texture
-  GL_PIXEL_TEX_GEN_SGIX = $8139;
-  GL_PIXEL_TEX_GEN_MODE_SGIX = $832B;
-
-  // GL_SGIX_pixel_tiles
-  GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX = $813E;
-  GL_PIXEL_TILE_CACHE_INCREMENT_SGIX = $813F;
-  GL_PIXEL_TILE_WIDTH_SGIX = $8140;
-  GL_PIXEL_TILE_HEIGHT_SGIX = $8141;
-  GL_PIXEL_TILE_GRID_WIDTH_SGIX = $8142;
-  GL_PIXEL_TILE_GRID_HEIGHT_SGIX = $8143;
-  GL_PIXEL_TILE_GRID_DEPTH_SGIX = $8144;
-  GL_PIXEL_TILE_CACHE_SIZE_SGIX = $8145;
-
-  // GL_SGIX_polynomial_ffd
-  GL_GEOMETRY_DEFORMATION_SGIX = $8194;
-  GL_TEXTURE_DEFORMATION_SGIX = $8195;
-  GL_DEFORMATIONS_MASK_SGIX = $8196;
-  GL_MAX_DEFORMATION_ORDER_SGIX = $8197;
-
-  // GL_SGIX_reference_plane
-  GL_REFERENCE_PLANE_SGIX = $817D;
-  GL_REFERENCE_PLANE_EQUATION_SGIX = $817E;
-
-  // GL_SGIX_resample
-  GL_PACK_RESAMPLE_SGIX = $842C;
-  GL_UNPACK_RESAMPLE_SGIX = $842D;
-  GL_RESAMPLE_REPLICATE_SGIX = $842E;
-  GL_RESAMPLE_ZERO_FILL_SGIX = $842F;
-  GL_RESAMPLE_DECIMATE_SGIX = $8430;
-
-  // GL_SGIX_scalebias_hint
-  GL_SCALEBIAS_HINT_SGIX = $8322;
-
-  // GL_SGIX_shadow
-  GL_TEXTURE_COMPARE_SGIX = $819A;
-  GL_TEXTURE_COMPARE_OPERATOR_SGIX = $819B;
-  GL_TEXTURE_LEQUAL_R_SGIX = $819C;
-  GL_TEXTURE_GEQUAL_R_SGIX = $819D;
-
-  // GL_SGIX_shadow_ambient
-  GL_SHADOW_AMBIENT_SGIX = $80BF;
-
-  // GL_SGIX_sprite
-  GL_SPRITE_SGIX = $8148;
-  GL_SPRITE_MODE_SGIX = $8149;
-  GL_SPRITE_AXIS_SGIX = $814A;
-  GL_SPRITE_TRANSLATION_SGIX = $814B;
-  GL_SPRITE_AXIAL_SGIX = $814C;
-  GL_SPRITE_OBJECT_ALIGNED_SGIX = $814D;
-  GL_SPRITE_EYE_ALIGNED_SGIX = $814E;
-
-  // GL_SGIX_subsample
-  GL_PACK_SUBSAMPLE_RATE_SGIX = $85A0;
-  GL_UNPACK_SUBSAMPLE_RATE_SGIX = $85A1;
-  GL_PIXEL_SUBSAMPLE_4444_SGIX = $85A2;
-  GL_PIXEL_SUBSAMPLE_2424_SGIX = $85A3;
-  GL_PIXEL_SUBSAMPLE_4242_SGIX = $85A4;
-
-  // GL_SGIX_texture_add_env
-  GL_TEXTURE_ENV_BIAS_SGIX = $80BE;
-
-  // GL_SGIX_texture_coordinate_clamp
-  GL_TEXTURE_MAX_CLAMP_S_SGIX = $8369;
-  GL_TEXTURE_MAX_CLAMP_T_SGIX = $836A;
-  GL_TEXTURE_MAX_CLAMP_R_SGIX = $836B;
-
-  // GL_SGIX_texture_lod_bias
-  GL_TEXTURE_LOD_BIAS_S_SGIX = $818E;
-  GL_TEXTURE_LOD_BIAS_T_SGIX = $818F;
-  GL_TEXTURE_LOD_BIAS_R_SGIX = $8190;
-
-  // GL_SGIX_texture_multi_buffer
-  GL_TEXTURE_MULTI_BUFFER_HINT_SGIX = $812E;
-
-  // GL_SGIX_texture_scale_bias
-  GL_POST_TEXTURE_FILTER_BIAS_SGIX = $8179;
-  GL_POST_TEXTURE_FILTER_SCALE_SGIX = $817A;
-  GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX = $817B;
-  GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX = $817C;
-
-  // GL_SGIX_vertex_preclip
-  GL_VERTEX_PRECLIP_SGIX = $83EE;
-  GL_VERTEX_PRECLIP_HINT_SGIX = $83EF;
-
-  // GL_SGIX_ycrcb
-  GL_YCRCB_422_SGIX = $81BB;
-  GL_YCRCB_444_SGIX = $81BC;
-
-  // GL_SGIX_ycrcba
-  GL_YCRCB_SGIX = $8318;
-  GL_YCRCBA_SGIX = $8319;
-
-  // GL_SGI_color_matrix
-  GL_COLOR_MATRIX_SGI = $80B1;
-  GL_COLOR_MATRIX_STACK_DEPTH_SGI = $80B2;
-  GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI = $80B3;
-  GL_POST_COLOR_MATRIX_RED_SCALE_SGI = $80B4;
-  GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI = $80B5;
-  GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI = $80B6;
-  GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI = $80B7;
-  GL_POST_COLOR_MATRIX_RED_BIAS_SGI = $80B8;
-  GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI = $80B9;
-  GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI = $80BA;
-  GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI = $80BB;
-
-  // GL_SGI_color_table
-  GL_COLOR_TABLE_SGI = $80D0;
-  GL_POST_CONVOLUTION_COLOR_TABLE_SGI = $80D1;
-  GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI = $80D2;
-  GL_PROXY_COLOR_TABLE_SGI = $80D3;
-  GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI = $80D4;
-  GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI = $80D5;
-  GL_COLOR_TABLE_SCALE_SGI = $80D6;
-  GL_COLOR_TABLE_BIAS_SGI = $80D7;
-  GL_COLOR_TABLE_FORMAT_SGI = $80D8;
-  GL_COLOR_TABLE_WIDTH_SGI = $80D9;
-  GL_COLOR_TABLE_RED_SIZE_SGI = $80DA;
-  GL_COLOR_TABLE_GREEN_SIZE_SGI = $80DB;
-  GL_COLOR_TABLE_BLUE_SIZE_SGI = $80DC;
-  GL_COLOR_TABLE_ALPHA_SIZE_SGI = $80DD;
-  GL_COLOR_TABLE_LUMINANCE_SIZE_SGI = $80DE;
-  GL_COLOR_TABLE_INTENSITY_SIZE_SGI = $80DF;
-
-  // GL_SGI_depth_pass_instrument
-  GL_DEPTH_PASS_INSTRUMENT_SGIX = $8310;
-  GL_DEPTH_PASS_INSTRUMENT_COUNTERS_SGIX = $8311;
-  GL_DEPTH_PASS_INSTRUMENT_MAX_SGIX = $8312;
-
-  // GL_SGI_texture_color_table
-  GL_TEXTURE_COLOR_TABLE_SGI = $80BC;
-  GL_PROXY_TEXTURE_COLOR_TABLE_SGI = $80BD;
-
-  // GL_SUNX_constant_data
-  GL_UNPACK_CONSTANT_DATA_SUNX = $81D5;
-  GL_TEXTURE_CONSTANT_DATA_SUNX = $81D6;
-
-  // GL_SUN_convolution_border_modes
-  GL_WRAP_BORDER_SUN = $81D4;
-
-  // GL_SUN_global_alpha
-  GL_GLOBAL_ALPHA_SUN = $81D9;
-  GL_GLOBAL_ALPHA_FACTOR_SUN = $81DA;
-
-  // GL_SUN_mesh_array
-  GL_QUAD_MESH_SUN = $8614;
-  GL_TRIANGLE_MESH_SUN = $8615;
-
-  // GL_SUN_slice_accum
-  GL_SLICE_ACCUM_SUN = $85CC;
-
-  // GL_SUN_triangle_list
-  GL_RESTART_SUN = $0001;
-  GL_REPLACE_MIDDLE_SUN = $0002;
-  GL_REPLACE_OLDEST_SUN = $0003;
-  GL_TRIANGLE_LIST_SUN = $81D7;
-  GL_REPLACEMENT_CODE_SUN = $81D8;
-  GL_REPLACEMENT_CODE_ARRAY_SUN = $85C0;
-  GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN = $85C1;
-  GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN = $85C2;
-  GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN = $85C3;
-  GL_R1UI_V3F_SUN = $85C4;
-  GL_R1UI_C4UB_V3F_SUN = $85C5;
-  GL_R1UI_C3F_V3F_SUN = $85C6;
-  GL_R1UI_N3F_V3F_SUN = $85C7;
-  GL_R1UI_C4F_N3F_V3F_SUN = $85C8;
-  GL_R1UI_T2F_V3F_SUN = $85C9;
-  GL_R1UI_T2F_N3F_V3F_SUN = $85CA;
-  GL_R1UI_T2F_C4F_N3F_V3F_SUN = $85CB;
-
-  // GL_WIN_phong_shading
-  GL_PHONG_WIN = $80EA;
-  GL_PHONG_HINT_WIN = $80EB;
-
-  // GL_WIN_specular_fog
-  GL_FOG_SPECULAR_TEXTURE_WIN = $80EC;
-
-  // GL_ARB_vertex_shader
-  GL_VERTEX_SHADER_ARB = $8B31;
-  GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB = $8B4A;
-  GL_MAX_VARYING_FLOATS_ARB = $8B4B;
-  GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB = $8B4C;
-  GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB = $8B4D;
-  GL_OBJECT_ACTIVE_ATTRIBUTES_ARB = $8B89;
-  GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB = $8B8A;
-
-  // GL_KHR_blend_equation_advanced
-  GL_MULTIPLY_KHR = $9294;
-  GL_SCREEN_KHR = $9295;
-  GL_OVERLAY_KHR = $9296;
-  GL_DARKEN_KHR = $9297;
-  GL_LIGHTEN_KHR = $9298;
-  GL_COLORDODGE_KHR = $9299;
-  GL_COLORBURN_KHR = $929A;
-  GL_HARDLIGHT_KHR = $929B;
-  GL_SOFTLIGHT_KHR = $929C;
-  GL_DIFFERENCE_KHR = $929E;
-  GL_EXCLUSION_KHR = $92A0;
-  GL_HSL_HUE_KHR = $92AD;
-  GL_HSL_SATURATION_KHR = $92AE;
-  GL_HSL_COLOR_KHR = $92AF;
-  GL_HSL_LUMINOSITY_KHR = $92B0;
-
-  // GL_KHR_blend_equation_advanced_coherent
-  GL_BLEND_ADVANCED_COHERENT_KHR = $9285;
-
-  // GL_KHR_robustness
-  GL_CONTEXT_ROBUST_ACCESS = $90F3;
-
-  // GL_KHR_no_error
-  GL_CONTEXT_FLAG_NO_ERROR_BIT_KHR = $00000008;
-
-  // GL_ARB_fragment_shader
-  GL_FRAGMENT_SHADER_ARB = $8B30;
-  GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB = $8B49; // 1.4
-  GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB = $8B8B; // 1.4
-
-  // GL_ARB_occlusion_query
-  GL_SAMPLES_PASSED_ARB = $8914;
-  GL_QUERY_COUNTER_BITS_ARB = $8864;
-  GL_CURRENT_QUERY_ARB = $8865;
-  GL_QUERY_RESULT_ARB = $8866;
-  GL_QUERY_RESULT_AVAILABLE_ARB = $8867;
-
-  // GL_ARB_pipeline_statistics_query
-  GL_VERTICES_SUBMITTED_ARB         = $82EE;
-  GL_PRIMITIVES_SUBMITTED_ARB       = $82EF;
-  GL_VERTEX_SHADER_INVOCATIONS_ARB  = $82F0;
-  GL_TESS_CONTROL_SHADER_PATCHES_ARB = $82F1;
-  GL_TESS_EVALUATION_SHADER_INVOCATIONS_ARB = $82F2;
-  GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED_ARB = $82F3;
-  GL_FRAGMENT_SHADER_INVOCATIONS_ARB = $82F4;
-  GL_COMPUTE_SHADER_INVOCATIONS_ARB = $82F5;
-  GL_CLIPPING_INPUT_PRIMITIVES_ARB  = $82F6;
-  GL_CLIPPING_OUTPUT_PRIMITIVES_ARB = $82F7;
-
-  // GL_ARB_point_sprite
-  GL_POINT_SPRITE_ARB = $8861;
-  GL_COORD_REPLACE_ARB = $8862;
-
-  // GL_ARB_shading_language_100
-  GL_SHADING_LANGUAGE_VERSION_ARB = $8B8C; // 1.4
-
-  // GL_ARB_shader_objects
-  GL_PROGRAM_OBJECT_ARB = $8B40;
-
-  GL_OBJECT_TYPE_ARB = $8B4E;
-  GL_OBJECT_SUBTYPE_ARB = $8B4F;
-  GL_OBJECT_DELETE_STATUS_ARB = $8B80;
-  GL_OBJECT_COMPILE_STATUS_ARB = $8B81;
-  GL_OBJECT_LINK_STATUS_ARB = $8B82;
-  GL_OBJECT_VALIDATE_STATUS_ARB = $8B83;
-  GL_OBJECT_INFO_LOG_LENGTH_ARB = $8B84;
-  GL_OBJECT_ATTACHED_OBJECTS_ARB = $8B85;
-  GL_OBJECT_ACTIVE_UNIFORMS_ARB = $8B86;
-  GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB = $8B87;
-  GL_OBJECT_SHADER_SOURCE_LENGTH_ARB = $8B88;
-
-  GL_SHADER_OBJECT_ARB = $8B48;
-
-  GL_FLOAT_VEC2_ARB = $8B50;
-  GL_FLOAT_VEC3_ARB = $8B51;
-  GL_FLOAT_VEC4_ARB = $8B52;
-  GL_INT_VEC2_ARB = $8B53;
-  GL_INT_VEC3_ARB = $8B54;
-  GL_INT_VEC4_ARB = $8B55;
-  GL_BOOL_ARB = $8B56;
-  GL_BOOL_VEC2_ARB = $8B57;
-  GL_BOOL_VEC3_ARB = $8B58;
-  GL_BOOL_VEC4_ARB = $8B59;
-  GL_FLOAT_MAT2_ARB = $8B5A;
-  GL_FLOAT_MAT3_ARB = $8B5B;
-  GL_FLOAT_MAT4_ARB = $8B5C;
-  GL_SAMPLER_1D_ARB = $8B5D;
-  GL_SAMPLER_2D_ARB = $8B5E;
-  GL_SAMPLER_3D_ARB = $8B5F;
-  GL_SAMPLER_CUBE_ARB = $8B60;
-  GL_SAMPLER_1D_SHADOW_ARB = $8B61;
-  GL_SAMPLER_2D_SHADOW_ARB = $8B62;
-  GL_SAMPLER_2D_RECT_ARB = $8B63;
-  GL_SAMPLER_2D_RECT_SHADOW_ARB = $8B64;
-
-
-implementation
-
-end.
-

+ 235 - 47
Zengl_SRC/srcGL/zgl_matrix.pas

@@ -11,75 +11,103 @@ uses
   zgl_pasOpenGL,
   zgl_pasOpenGL,
   zgl_file;
   zgl_file;
 
 
-// RU: матрица перспективы.
-// EN: perspective matrix.
-procedure Matrix4_Perspective(fovy, aspect, _near, _far: Single);
-// RU: ортографическая матрица.
-// EN: orthographic matrix.
-procedure Matrix4_Orthographic(Left, Right, Bottom, Top, _Near, _Far: Single);
+const
+  // это всё для тестов, позже надо будет переименовать названия матриц или пронумеровать их просто.
+  projectionMatrix          = 0;
+  viewMatrix                = 1;
+  viewProjectionMatrix      = 2;
+  modelMatrix               = 3;
+  modelViewProjectionMatrix = 4;
+
+type
+  // матрицы уже есть, но пока будем использовать одномерные матрицы вместо двумерных.
+  PMatrix4x4s = ^TMatrix4x4s;
+  PMatrix4x4d = ^TMatrix4x4d;
+  // Single matrix.
+  TMatrix4x4s = array [0..15] of Single;
+  // Double matrix (not used in ZenGL).
+  TMatrix4x4d = array [0..15] of Double;
+
+// RU: матрица перспективы, заполняет матрицу "zgl_MatrixS[projectionMatrix]".
+// EN: perspective matrix, fills the matrix "zgl_MatrixS[projectionMatrix]".
+procedure Matrix4x4_Perspective(fovy, aspect, _near, _far: Single);
+// RU: ортографическая матрица, заполняет матрицу "zgl_MatrixS[projectionMatrix]".
+// EN: orthographic matrix, fills the matrix "zgl_MatrixS[projectionMatrix]".
+procedure Matrix4x4_Orthographic(Left, Right, Bottom, Top, _Near, _Far: Single);
 // RU: загрузка шейдера, компиляция и проверка на успех компиляции.
 // RU: загрузка шейдера, компиляция и проверка на успех компиляции.
 // EN: loading the shader, compiling and checking for compilation success.
 // EN: loading the shader, compiling and checking for compilation success.
 function LoadAndCreateShader(name: string; shade: GLuint): Boolean;
 function LoadAndCreateShader(name: string; shade: GLuint): Boolean;
+// RU: матрица вращения.
+// EN:
+procedure Matrix4x4_Rotation(mat4x4: PMatrix4x4s; Const X, Y, Z: Single);
+// RU: матрица перемещения.
+// EN:
+procedure Matrix4x4_Translation(mat4x4: PMatrix4x4s; Const X, Y, Z: Single);
+// RU: перемножение матриц.
+// EN:
+procedure Matrix4x4Multiply4x4(A, B: PMatrix4x4s; C: PMatrix4x4s);
 
 
 var
 var
-  // RU: массив матрицы проекции.
-  // EN:
-  projMatr: array[0..15] of Single;
+  // RU: массив матриц: projectionMatrix, viewMatrix, viewProjectionMatrix,
+  //     modelMatrix, modelViewProjectionMatrix; и ещё пять не занятых.
+  // EN: matrix array: projectionMatrix, viewMatrix, viewProjectionMatrix,
+  //     modelMatrix, modelViewProjectionMatrix; and five more unoccupied.
+  zgl_MatrixS: array[0..9, 0..15] of Single;
 
 
 implementation
 implementation
 
 
-procedure Matrix4_Perspective(fovy, aspect, _near, _far: Single);
+procedure Matrix4x4_Perspective(fovy, aspect, _near, _far: Single);
 var
 var
   f: Single;
   f: Single;
 begin
 begin
   f := 1 / tan(fovy * Pi / 180);
   f := 1 / tan(fovy * Pi / 180);
-  projMatr[0] := f / aspect;
-  projMatr[1] := 0;
-  projMatr[2] := 0;
-  projMatr[3] := 0;
-
-  projMatr[4] := 0;
-  projMatr[5] := f;
-  projMatr[6] := 0;
-  projMatr[7] := 0;
-
-  projMatr[8] := 0;
-  projMatr[9] := 0;
-  projMatr[10] := (_far + _near) / (_near - _far);
-  projMatr[11] := 2 * _far * _near / (_near - _far);
-
-  projMatr[12] := 0;
-  projMatr[13] := 0;
-  projMatr[14] := - 1;
-  projMatr[15] := 0;
+  zgl_Matrixs[projectionMatrix, 0] := f / aspect;
+  zgl_Matrixs[projectionMatrix, 1] := 0;
+  zgl_Matrixs[projectionMatrix, 2] := 0;
+  zgl_Matrixs[projectionMatrix, 3] := 0;
+
+  zgl_Matrixs[projectionMatrix, 4] := 0;
+  zgl_Matrixs[projectionMatrix, 5] := f;
+  zgl_Matrixs[projectionMatrix, 6] := 0;
+  zgl_Matrixs[projectionMatrix, 7] := 0;
+
+  zgl_Matrixs[projectionMatrix, 8] := 0;
+  zgl_Matrixs[projectionMatrix, 9] := 0;
+  zgl_Matrixs[projectionMatrix, 10] := (_far + _near) / (_near - _far);
+  zgl_Matrixs[projectionMatrix, 11] := 2 * _far * _near / (_near - _far);
+
+  zgl_Matrixs[projectionMatrix, 12] := 0;
+  zgl_Matrixs[projectionMatrix, 13] := 0;
+  zgl_Matrixs[projectionMatrix, 14] := - 1;
+  zgl_Matrixs[projectionMatrix, 15] := 0;
 end;
 end;
 
 
-procedure Matrix4_Orthographic(Left, Right, Bottom, Top, _Near, _Far: Single);
+procedure Matrix4x4_Orthographic(Left, Right, Bottom, Top, _Near, _Far: Single);
 var
 var
   f: Single;
   f: Single;
 begin
 begin
   f := Right - Left;
   f := Right - Left;
-  projMatr[0] := 2 / f;
-  projMatr[1] := 0;
-  projMatr[2] := 0;
-  projMatr[3] := -(Right + Left) / f;
+  zgl_Matrixs[projectionMatrix, 0] := 2 / f;
+  zgl_Matrixs[projectionMatrix, 1] := 0;
+  zgl_Matrixs[projectionMatrix, 2] := 0;
+  zgl_Matrixs[projectionMatrix, 3] := -(Right + Left) / f;
 
 
   f := Top - Bottom;
   f := Top - Bottom;
-  projMatr[4] := 0;
-  projMatr[5] := 2 / f;
-  projMatr[6] := 0;
-  projMatr[7] := -(top + Bottom) / f;
+  zgl_Matrixs[projectionMatrix, 4] := 0;
+  zgl_Matrixs[projectionMatrix, 5] := 2 / f;
+  zgl_Matrixs[projectionMatrix, 6] := 0;
+  zgl_Matrixs[projectionMatrix, 7] := -(top + Bottom) / f;
 
 
   f := _Far - _Near;
   f := _Far - _Near;
-  projMatr[8] := 0;
-  projMatr[9] := 0;
-  projMatr[10] := - 2 / f;
-  projMatr[11] := -(_Far + _Near) / f;
-
-  projMatr[12] := 0;
-  projMatr[13] := 0;
-  projMatr[14] := 0;
-  projMatr[15] := 1;
+  zgl_Matrixs[projectionMatrix, 8] := 0;
+  zgl_Matrixs[projectionMatrix, 9] := 0;
+  zgl_Matrixs[projectionMatrix, 10] := - 2 / f;
+  zgl_Matrixs[projectionMatrix, 11] := -(_Far + _Near) / f;
+
+  zgl_Matrixs[projectionMatrix, 12] := 0;
+  zgl_Matrixs[projectionMatrix, 13] := 0;
+  zgl_Matrixs[projectionMatrix, 14] := 0;
+  zgl_Matrixs[projectionMatrix, 15] := 1;
 end;
 end;
 
 
 function LoadAndCreateShader(name: string; shade: GLuint): Boolean;
 function LoadAndCreateShader(name: string; shade: GLuint): Boolean;
@@ -129,5 +157,165 @@ begin
   Result := True;
   Result := True;
 end;
 end;
 
 
+procedure Matrix4x4_Rotation(mat4x4: PMatrix4x4s; const X, Y, Z: Single);
+Var
+  cosX, sinX, cosY, sinY, cosZ, sinZ, sinXsinY, cosXsinY: Single;
+Begin
+  cosX := Cos(X);
+  sinX := Sin(X);
+  cosY := Cos(Y);
+  sinY := Sin(Y);
+  cosZ := Cos(Z);
+  sinZ := Sin(Z);
+
+  mat4x4[0] := cosY * cosZ;
+  mat4x4[1] := cosY * sinZ;
+  mat4x4[2] := -sinY;
+
+  If mat4x4[2] = -0 Then
+    mat4x4[2] := 0;
+  mat4x4[3] := 0.0;
+
+  sinXsinY := sinX * sinY;
+  cosXsinY := cosX * sinY;
+
+  mat4x4[4] := (sinXsinY * cosZ) - (cosX * sinZ);
+  mat4x4[5] := (sinXsinY * sinZ) + (cosX * cosZ);
+  mat4x4[6] := (sinX * cosY);
+  mat4x4[7] := 0.0;
+
+  mat4x4[8] := (cosXsinY * cosZ) + (sinX * sinZ);
+  mat4x4[9] := (cosXsinY * sinZ) - (sinX * cosZ);
+  mat4x4[10] := (cosX * cosY);
+  mat4x4[11] := 0.0;
+
+  mat4x4[12] := 0.0;
+  mat4x4[13] := 0.0;
+  mat4x4[14] := 0.0;
+  mat4x4[15] := 1.0;
+end;
+
+// изменить процедуру, тут можно многое сразу заполнить нулями, как и в других матрицах. Будет только вопрос в одном, будет ли это быстрее?
+procedure Matrix4x4_Translation(mat4x4: PMatrix4x4s; Const X, Y, Z: Single);
+Begin
+  mat4x4[0] := 1.0;
+  mat4x4[1] := 0.0;
+  mat4x4[2] := 0.0;
+  mat4x4[3] := 0.0;
+  mat4x4[4] := 0.0;
+  mat4x4[5] := 1.0;
+  mat4x4[6] := 0.0;
+  mat4x4[7] := 0.0;
+  mat4x4[8] := 0.0;
+  mat4x4[9] := 0.0;
+  mat4x4[10] := 1.0;
+  mat4x4[11] := 0.0;
+  mat4x4[12] := X;
+  mat4x4[13] := Y;
+  mat4x4[14] := Z;
+  mat4x4[15] := 1.0;
+End;
+
+{/$If defined(CPUAARCH64) or defined(CPUARM)}
+procedure Matrix4x4Multiply4x4(A, B: PMatrix4x4s; C: PMatrix4x4s);
+begin
+  C[0]  := A[0] * B[0] + A[4] * B[1] + A[8]  * B[2] + A[12] * B[3];
+  C[1]  := A[1] * B[0] + A[5] * B[1] + A[9]  * B[2] + A[13] * B[3];
+  C[2]  := A[2] * B[0] + A[6] * B[1] + A[10] * B[2] + A[14] * B[3];
+  C[3]  := A[3] * B[0] + A[7] * B[1] + A[11] * B[2] + A[15] * B[3];
+
+  C[4]  := A[0] * B[4] + A[4] * B[5] + A[8]  * B[6] + A[12] * B[7];
+  C[5]  := A[1] * B[4] + A[5] * B[5] + A[9]  * B[6] + A[13] * B[7];
+  C[6]  := A[2] * B[4] + A[6] * B[5] + A[10] * B[6] + A[14] * B[7];
+  C[7]  := A[3] * B[4] + A[7] * B[5] + A[11] * B[6] + A[15] * B[7];
+
+  C[8]  := A[0] * B[8] + A[4] * B[9] + A[8]  * B[10] + A[12] * B[11];
+  C[9]  := A[1] * B[8] + A[5] * B[9] + A[9]  * B[10] + A[13] * B[11];
+  C[10] := A[2] * B[8] + A[6] * B[9] + A[10] * B[10] + A[14] * B[11];
+  C[11] := A[3] * B[8] + A[7] * B[9] + A[11] * B[10] + A[15] * B[11];
+
+  C[12] := A[0] * B[12] + A[4] * B[13] + A[8]  * B[14] + A[12] * B[15];
+  C[13] := A[1] * B[12] + A[5] * B[13] + A[9]  * B[14] + A[13] * B[15];
+  C[14] := A[2] * B[12] + A[6] * B[13] + A[10] * B[14] + A[14] * B[15];
+  C[15] := A[3] * B[12] + A[7] * B[13] + A[11] * B[14] + A[15] * B[15];
+End;
+{/$Else}
+(*    требуется переделка под процедуру, когда переделаю, тогда будем всё тестировать по полной, сейчас нужен рабочий код.
+Function Matrix4x4Multiply4x4(Const A,B:Matrix4x4):Matrix4x4;
+Asm
+  movss xmm0, dword ptr [edx]
+  movups xmm1,  [eax]
+  shufps xmm0, xmm0, 0
+  movss xmm2, dword ptr [edx+4]
+  mulps xmm0, xmm1
+  shufps xmm2, xmm2, 0
+  movups xmm3,  [eax+10h]
+  movss xmm7, dword ptr [edx+8]
+  mulps xmm2, xmm3
+  shufps xmm7, xmm7, 0
+  addps xmm0, xmm2
+  movups xmm4,  [eax+20h]
+  movss xmm2, dword ptr [edx+0Ch]
+  mulps xmm7, xmm4
+  shufps xmm2, xmm2, 0
+  addps xmm0, xmm7
+  movups xmm5,  [eax+30h]
+  movss xmm6, dword ptr [edx+10h]
+  mulps xmm2, xmm5
+  movss xmm7, dword ptr [edx+14h]
+  shufps xmm6, xmm6, 0
+  addps xmm0, xmm2
+  shufps xmm7, xmm7, 0
+  movlps qword ptr [ecx], xmm0
+  movhps qword ptr [ecx+8], xmm0
+  mulps xmm7, xmm3
+  movss xmm0, dword ptr [edx+18h]
+  mulps xmm6, xmm1
+  shufps xmm0, xmm0, 0
+  addps xmm6, xmm7
+  mulps xmm0, xmm4
+  movss xmm2, dword ptr [edx+24h]
+  addps xmm6, xmm0
+  movss xmm0, dword ptr [edx+1Ch]
+  movss xmm7, dword ptr [edx+20h]
+  shufps xmm0, xmm0, 0
+  shufps xmm7, xmm7, 0
+  mulps xmm0, xmm5
+  mulps xmm7, xmm1
+  addps xmm6, xmm0
+  shufps xmm2, xmm2, 0
+  movlps qword ptr [ecx+10h], xmm6
+  movhps qword ptr [ecx+18h], xmm6
+  mulps xmm2, xmm3
+  movss xmm6, dword ptr [edx+28h]
+  addps xmm7, xmm2
+  shufps xmm6, xmm6, 0
+  movss xmm2, dword ptr [edx+2Ch]
+  mulps xmm6, xmm4
+  shufps xmm2, xmm2, 0
+  addps xmm7, xmm6
+  mulps xmm2, xmm5
+  movss xmm0, dword ptr [edx+34h]
+  addps xmm7, xmm2
+  shufps xmm0, xmm0, 0
+  movlps qword ptr [ecx+20h], xmm7
+  movss xmm2, dword ptr [edx+30h]
+  movhps qword ptr [ecx+28h], xmm7
+  mulps xmm0, xmm3
+  shufps xmm2, xmm2, 0
+  movss xmm6, dword ptr [edx+38h]
+  mulps xmm2, xmm1
+  shufps xmm6, xmm6, 0
+  addps xmm2, xmm0
+  mulps xmm6, xmm4
+  movss xmm7, dword ptr [edx+3Ch]
+  shufps xmm7, xmm7, 0
+  addps xmm2, xmm6
+  mulps xmm7, xmm5
+  addps xmm2, xmm7
+  movups  [ecx+30h], xmm2
+End;       *)
+{/$ENDIF}
+
 end.
 end.