Browse Source

ImGui Pascal Demo Source

Coldzer0 1 year ago
parent
commit
30ff007946
7 changed files with 4950 additions and 0 deletions
  1. BIN
      demo/ImGuiDemo.ico
  2. 227 0
      demo/ImGuiDemo.lpi
  3. 364 0
      demo/ImGuiDemo.lpr
  4. 482 0
      demo/ImGuiDemo.lps
  5. 3429 0
      demo/glad_gl.pas
  6. 101 0
      demo/imgui_extra.pas
  7. 347 0
      demo/testwindow.pas

BIN
demo/ImGuiDemo.ico


+ 227 - 0
demo/ImGuiDemo.lpi

@@ -0,0 +1,227 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONFIG>
+  <ProjectOptions>
+    <Version Value="12"/>
+    <PathDelim Value="\"/>
+    <General>
+      <Flags>
+        <MainUnitHasCreateFormStatements Value="False"/>
+        <MainUnitHasTitleStatement Value="False"/>
+        <MainUnitHasScaledStatement Value="False"/>
+        <CompatibilityMode Value="True"/>
+      </Flags>
+      <SessionStorage Value="InProjectDir"/>
+      <Title Value="ImGuiDemo"/>
+      <UseAppBundle Value="False"/>
+      <ResourceType Value="res"/>
+      <UseXPManifest Value="True"/>
+      <XPManifest>
+        <DpiAware Value="Per-monitor"/>
+        <TextName Value="PasImGui.ImGui"/>
+        <TextDesc Value="Pascal ImGui Binding Demo"/>
+      </XPManifest>
+      <Icon Value="0"/>
+    </General>
+    <VersionInfo>
+      <UseVersionInfo Value="True"/>
+      <MajorVersionNr Value="1"/>
+    </VersionInfo>
+    <BuildModes Count="4">
+      <Item1 Name="Default" Default="True"/>
+      <Item2 Name="Debug_windows">
+        <CompilerOptions>
+          <Version Value="11"/>
+          <PathDelim Value="\"/>
+          <Target>
+            <Filename Value="ImGuiDemo"/>
+          </Target>
+          <SearchPaths>
+            <IncludeFiles Value="$(ProjOutDir)"/>
+            <Libraries Value="."/>
+            <OtherUnitFiles Value="..;..\src;..\impl;..\OpenGL3;..\SDL2-for-Pascal\units"/>
+            <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
+          </SearchPaths>
+          <Parsing>
+            <SyntaxOptions>
+              <IncludeAssertionCode Value="True"/>
+            </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>
+              <DebugInfoType Value="dsDwarf2Set"/>
+              <UseHeaptrc Value="True"/>
+              <UseExternalDbgSyms Value="True"/>
+            </Debugging>
+          </Linking>
+        </CompilerOptions>
+      </Item2>
+      <Item3 Name="Release_windows">
+        <CompilerOptions>
+          <Version Value="11"/>
+          <PathDelim Value="\"/>
+          <Target>
+            <Filename Value="ImGuiDemo"/>
+          </Target>
+          <SearchPaths>
+            <IncludeFiles Value="$(ProjOutDir)"/>
+            <OtherUnitFiles Value="..;..\src;..\impl;..\OpenGL3;..\SDL2-for-Pascal\units"/>
+            <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
+          </SearchPaths>
+          <CodeGeneration>
+            <SmartLinkUnit Value="True"/>
+            <Optimizations>
+              <OptimizationLevel Value="3"/>
+            </Optimizations>
+          </CodeGeneration>
+          <Linking>
+            <Debugging>
+              <GenerateDebugInfo Value="False"/>
+              <RunWithoutDebug Value="True"/>
+            </Debugging>
+            <LinkSmart Value="True"/>
+          </Linking>
+        </CompilerOptions>
+      </Item3>
+      <Item4 Name="Release_linux">
+        <CompilerOptions>
+          <Version Value="11"/>
+          <PathDelim Value="\"/>
+          <Target>
+            <Filename Value="ImGuiDemo"/>
+          </Target>
+          <SearchPaths>
+            <IncludeFiles Value="$(ProjOutDir)"/>
+            <Libraries Value="F:\FPCross\cross\lib\x86_64-linux\;."/>
+            <OtherUnitFiles Value="..;..\src;..\impl;..\OpenGL3;..\SDL2-for-Pascal\units"/>
+            <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
+          </SearchPaths>
+          <CodeGeneration>
+            <SmartLinkUnit Value="True"/>
+            <TargetCPU Value="x86_64"/>
+            <TargetOS Value="linux"/>
+            <Optimizations>
+              <OptimizationLevel Value="3"/>
+            </Optimizations>
+          </CodeGeneration>
+          <Linking>
+            <Debugging>
+              <GenerateDebugInfo Value="False"/>
+              <RunWithoutDebug Value="True"/>
+            </Debugging>
+            <LinkSmart Value="True"/>
+          </Linking>
+        </CompilerOptions>
+      </Item4>
+    </BuildModes>
+    <PublishOptions>
+      <Version Value="2"/>
+    </PublishOptions>
+    <RunParams>
+      <FormatVersion Value="2"/>
+      <Modes Count="1">
+        <Mode0 Name="default"/>
+      </Modes>
+    </RunParams>
+    <Units Count="15">
+      <Unit0>
+        <Filename Value="ImGuiDemo.lpr"/>
+        <IsPartOfProject Value="True"/>
+      </Unit0>
+      <Unit1>
+        <Filename Value="display.pas"/>
+        <IsPartOfProject Value="True"/>
+      </Unit1>
+      <Unit2>
+        <Filename Value="sdl2.pas"/>
+        <IsPartOfProject Value="True"/>
+        <UnitName Value="SDL2"/>
+      </Unit2>
+      <Unit3>
+        <Filename Value="..\fpimgui.pas"/>
+        <IsPartOfProject Value="True"/>
+      </Unit3>
+      <Unit4>
+        <Filename Value="..\examples\fpimgui_impl_sdlgl2.pas"/>
+        <IsPartOfProject Value="True"/>
+      </Unit4>
+      <Unit5>
+        <Filename Value="testwindow.pas"/>
+        <IsPartOfProject Value="True"/>
+        <UnitName Value="TestWindow"/>
+      </Unit5>
+      <Unit6>
+        <Filename Value="imgui_extra.pas"/>
+        <IsPartOfProject Value="True"/>
+      </Unit6>
+      <Unit7>
+        <Filename Value="glad_gl.pas"/>
+        <IsPartOfProject Value="True"/>
+      </Unit7>
+      <Unit8>
+        <Filename Value="..\ImGui.Types.pas"/>
+        <IsPartOfProject Value="True"/>
+      </Unit8>
+      <Unit9>
+        <Filename Value="ImGui.Enums.pas"/>
+        <IsPartOfProject Value="True"/>
+      </Unit9>
+      <Unit10>
+        <Filename Value="..\impl\PasImGui.Impl.SDL2.pas"/>
+        <IsPartOfProject Value="True"/>
+      </Unit10>
+      <Unit11>
+        <Filename Value="..\impl\PasImGui.Impl.OpenGL3.pas"/>
+        <IsPartOfProject Value="True"/>
+      </Unit11>
+      <Unit12>
+        <Filename Value="..\PasImGui.Gen.Types.pas"/>
+        <IsPartOfProject Value="True"/>
+      </Unit12>
+      <Unit13>
+        <Filename Value="..\OpenGL3\OpenGl3.Loader.pas"/>
+        <IsPartOfProject Value="True"/>
+      </Unit13>
+      <Unit14>
+        <Filename Value="..\PasImGui.SDL2.pas"/>
+        <IsPartOfProject Value="True"/>
+      </Unit14>
+    </Units>
+  </ProjectOptions>
+  <CompilerOptions>
+    <Version Value="11"/>
+    <PathDelim Value="\"/>
+    <Target>
+      <Filename Value="ImGuiDemo"/>
+    </Target>
+    <SearchPaths>
+      <IncludeFiles Value="$(ProjOutDir)"/>
+      <OtherUnitFiles Value="..;..\examples;..\impl;..\OpenGL3"/>
+      <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
+    </SearchPaths>
+  </CompilerOptions>
+  <Debugging>
+    <Exceptions Count="3">
+      <Item1>
+        <Name Value="EAbort"/>
+      </Item1>
+      <Item2>
+        <Name Value="ECodetoolError"/>
+      </Item2>
+      <Item3>
+        <Name Value="EFOpenError"/>
+      </Item3>
+    </Exceptions>
+  </Debugging>
+</CONFIG>

+ 364 - 0
demo/ImGuiDemo.lpr

@@ -0,0 +1,364 @@
+{
+  FreePascal bindings for ImGui
+
+  Copyright (C) 2023 Coldzer0 <Coldzer0 [at] protonmail.ch>
+
+  This program is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, version 3 of the License.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+}
+
+Program ImGuiDemo;
+{$IFDEF FPC}
+  {$mode objfpc}{$H+}{$J-}
+{$ENDIF}
+{$IfDef LINUX}
+  {$LinkLib C}
+  {$LinkLib m}
+  {$LinkLib SDL2}
+{$EndIf}
+{$IfOpt D-}
+  {$IfDef MSWINDOWS}
+    {$AppType GUI}
+  {$EndIf}
+{$ELSE}
+{$IfDef MSWINDOWS}
+  {$AppType console}
+{$EndIf}
+{$EndIf}
+
+Uses
+  SysUtils,
+  sdl2,
+  glad_gl,
+  PasImGui,
+  PasImGui.Apis,
+  PasImGui.Types,
+  PasImGui.Enums,
+  OpenGl3.Loader,
+  PasImGui.SDL2,
+  CImGui.Impl.OpenGL3,
+  imgui_extra,
+  TestWindow;
+
+Var
+  counter: Integer;
+  showPascalDemoWindow: Boolean = False;
+  showAnotherWindow: Boolean = False;
+  showDemoWindow: Boolean = False;
+  clearColor: ImVec4;
+  float_value : Single;
+
+Var
+  ImGuiCtx : PImGuiContext;
+  ioptr: PImGuiIO;
+  quit: Boolean;
+  window: PSDL_Window;
+  e: TSDL_Event;
+  testwin : TTestWindow;
+  backup_current_window: PSDL_Window;
+  backup_current_context: TSDL_GLContext;
+  current: TSDL_DisplayMode;
+  flags: Longword;
+  gl_context: TSDL_GLContext;
+  w, h: Integer;
+  glsl_version: PChar = '';
+
+
+
+  Procedure ShowGreetingWindows;
+  Var
+    draw_list: PImDrawList;
+    pos: ImVec2;
+  Const
+    HelloPascal: PChar = ' Hello From FreePascal ';
+  Begin
+    Begin
+      //ImGui.SetWindowPos(ImVec2.New(100, 100), ImGuiCond_FirstUseEver);
+      ImGui.SetNextWindowPosCenter(ImGuiCond_FirstUseEver);
+      if not ImGui.Begin_('Greeting') then
+      Begin
+        // Early out if the window is collapsed, as an optimization.
+        ImGui.End_;
+        exit;
+      End;
+      ImGui.Text('Hello, world %d', [counter]);
+      If ImGui.Button('Add') Then
+      Begin
+        //button was pressed, do something special!
+        Inc(counter);
+      End;
+      If ImGui.IsItemHovered(ImGuiHoveredFlags_RectOnly) Then
+      Begin
+        ImGui.SameLine();
+        ImGui.Text('button hovered');
+      End;
+
+      ImGui.SameLine();
+      pos := ImGui.GetCursorScreenPos();
+
+      draw_list := ImGui.GetWindowDrawList();
+      draw_list^.AddRectFilled(pos, ImVec2.New(pos.x + 50, pos.y + 20), $88000055);
+
+      pos := ImVec2.New(pos.x + 50 + 20, pos.y);
+      ImGui.SetCursorScreenPos(pos);
+
+      draw_list^.AddRectFilled(pos, ImVec2.New(pos.x +
+        ImGui.CalcTextSize(HelloPascal).x, pos.y + 20), $88005500);
+      ImGui.Text(HelloPascal);
+
+      If ImGui.IsWindowHovered() Then
+        ImGui.Text('window hovered')
+      Else If ImGui.IsWindowHovered(ImGuiHoveredFlags_AnyWindow) Then
+        ImGui.Text('some window hovered');
+      ImGui.End_;
+    End;
+    Pos := ImGui.GetCenterViewPort(ImGui.GetMainViewport());
+    Pos.y += 100;
+    ImGui.SetNextWindowPos(Pos,ImGuiCond_FirstUseEver, ImVec2.New(0.5, 0.5));
+    begin
+      ImGui.Begin_('Another greeting');
+      ImGui.SetWindowPos(ImVec2.New(400, 200), ImGuiCond_FirstUseEver);
+      ImGui.Text('Hello, next world %d', [counter]);
+      If ImGui.Button('Not OK!') Then
+      Begin
+        Dec(counter);
+      End;
+      ImGui.End_;
+    end;
+  End;
+
+  procedure RenderPascalCode();
+  var
+    Pos : ImVec2;
+  begin
+    //draw your scene or simple windows
+    Pos := ImGui.GetCenterViewPort(ImGui.GetMainViewport());
+    Pos.y -= 160;
+    ImGui.SetNextWindowPos(Pos,ImGuiCond_FirstUseEver, ImVec2.New(0.5, 0.5));
+    Begin
+      ImGui.Begin_('Hello From FreePascal', nil, ImGuiWindowFlags_None);
+      ImGui.Text('This is some useful text', []);
+      ImGui.Checkbox('Demo window', @showDemoWindow);
+      ImGui.Checkbox('Another Pascal window', @showAnotherWindow);
+      ImGui.Checkbox('Pascal Demo Window', @showPascalDemoWindow);
+
+      ImGui.SliderFloat('Float', @float_value, 0.0, 1.0, '%.3f', ImGuiSliderFlags_None);
+      ImGui.ColorEdit3('Background color', @clearColor, ImGuiColorEditFlags_None);
+
+      If (ImGui.Button('Button')) Then
+        counter += 1;
+
+      ImGui.SameLine(0.0, -1.0);
+      ImGui.Text('counter = %d', [counter]);
+
+      ImGui.Text('Application average %.3f ms/frame (%.1f FPS)',
+        [1000.0 / ioptr^.Framerate, ioptr^.Framerate]);
+
+      ImGui.End_();
+    End;
+
+    If showAnotherWindow Then
+    begin
+      ShowGreetingWindows;
+    end;
+
+    If showDemoWindow Then
+    begin
+      ImGui.ShowDemoWindow();
+    end;
+  end;
+
+  Function PasAllocMem(sz: size_t; {%H-}user_data: Pointer): Pointer; Cdecl;
+  Begin
+    Result := AllocMem(sz);
+  End;
+
+  Procedure PasFreeMem(ptr: Pointer; {%H-}user_data: Pointer); Cdecl;
+  Begin
+    Freemem(ptr);
+  End;
+
+Var
+  saved_FpuFlags: Cardinal;
+
+{$R *.res}
+
+Begin
+  { TODO: This is here for testing - Remove this later :V }
+  //DeleteFile('imgui.ini');
+
+  // Set the Default Alloc & Free to point to Pascal Allocators
+  igSetAllocatorFunctions(@PasAllocMem, @PasFreeMem, nil);
+
+  //prevent SDL from raising a debugger exception to name threads
+  SDL_SetHint(SDL_HINT_WINDOWS_DISABLE_THREAD_NAMING, '1');
+
+  //open new SDL window with OpenGL rendering support
+  If SDL_Init(SDL_INIT_VIDEO) < 0 Then
+  Begin
+    SDL_Log('failed to init: %s', [SDL_GetError()]);
+  End;
+
+  // Decide GL+GLSL versions
+  {$IfDef DARWIN}
+  // GL 3.2 Core + GLSL 150
+  // Always required on Mac
+  glsl_version = '#version 150';
+  SDL_GL_SetAttribute(SDL_GL_CONTEXT_FLAGS, SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG);
+  SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
+  SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
+  SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2);
+  {$ELSE}
+  // GL 3.0 + GLSL 130
+  glsl_version := '#version 130';
+  SDL_GL_SetAttribute(SDL_GL_CONTEXT_FLAGS, 0);
+  SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
+  SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
+  SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
+  {$EndIf}
+
+  SDL_SetHint(SDL_HINT_RENDER_DRIVER, 'opengl');
+  SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
+  SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8);
+  SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
+  SDL_GetCurrentDisplayMode(0, @current);
+
+  flags := SDL_WINDOW_SHOWN Or SDL_WINDOW_OPENGL Or SDL_WINDOW_RESIZABLE;
+  //flags := flags or SDL_WINDOW_FULLSCREEN_DESKTOP;
+
+  h := 768;
+  w := 1024;
+  window := SDL_CreateWindow('Hello From FreePascal', SDL_WINDOWPOS_CENTERED,
+    SDL_WINDOWPOS_CENTERED, w, h, flags);
+  If window = nil Then
+  Begin
+    SDL_Log('Failed to create window: %s', [SDL_GetError()]);
+    halt;
+  End;
+
+  gl_context := SDL_GL_CreateContext(window);
+  SDL_GL_SetSwapInterval(1); //enable VSync
+
+
+  // Loading OpenGL APIs
+  If Not ImGLInit() Then
+  Begin
+    SDL_Log('Error while Loading OpenGL3', []);
+  End;
+
+  // Show opengl version sdl uses
+  SDL_Log('opengl version: %s', [glGetString(GL_VERSION)]);
+
+  // setup imgui
+  ImGui.CreateContext(nil);
+
+  //set docking
+  ioptr := ImGui.GetIO();
+
+  // Enable Logging
+  ImGuiCtx := ImGui.GetCurrentContext();
+  ImGuiCtx^.LogEnabled := True;
+
+  // Enable Keyboard Controls
+  ioptr^.ConfigFlags := ioptr^.ConfigFlags Or ImGuiConfigFlags_NavEnableKeyboard;
+  // Enable Docking
+  ioptr^.ConfigFlags := ioptr^.ConfigFlags Or ImGuiConfigFlags_DockingEnable;
+  // Enable Multi-Viewport / Platform Windows
+  ioptr^.ConfigFlags := ioptr^.ConfigFlags Or ImGuiConfigFlags_ViewportsEnable;
+
+
+  // Init ImGui SDL2 OpenGL using Pure Pascal
+  ImGui_ImplSDL2_InitForOpenGL_Pas(window, gl_context);
+  ImGui_Impl_OpenGL3_Init(glsl_version);
+
+
+  { uncomment to set a different gui theme }
+  SetupImGuiStyle2(); // Using imgui_easy_theming
+  //Imgui.StyleColorsDark(nil);
+  //Imgui.StyleColorsLight(ImGui.GetStyle());
+
+
+  // Background Color
+  clearColor.x := 0.45;
+  clearColor.y := 0.55;
+  clearColor.z := 0.60;
+  clearColor.w := 1.00;
+
+  testwin := TTestWindow.Create;
+  counter := 0;
+  quit := False;
+  While Not quit Do
+  Begin
+    //handle input
+    While SDL_PollEvent(@e) <> 0 Do
+    Begin
+      ImGui_ImplSDL2_ProcessEvent_Pas(@e);
+      If e.type_ = SDL_QUITEV Then
+        quit := True;
+      If (e.type_ = SDL_WINDOWEVENT) And (e.window.event = SDL_WINDOWEVENT_CLOSE) And
+        (e.window.windowID = SDL_GetWindowID(window)) Then
+        quit := True;
+    End;
+
+    // start imgui frame
+    ImGui_Impl_OpenGL3_NewFrame();
+    ImGui_ImplSDL2_NewFrame_Pas();
+    ImGui.NewFrame();
+
+    // Main UI Code
+    begin
+      RenderPascalCode();
+      if showPascalDemoWindow then
+        testwin.Show(showPascalDemoWindow);
+    end;
+
+    // render
+    ImGui.Render();
+    SDL_GL_MakeCurrent(window, gl_context);
+
+
+    saved_FpuFlags := SetFpuFlags();
+    glViewport(0, 0, Trunc(ioptr^.DisplaySize.x), Trunc(ioptr^.DisplaySize.y));
+    glClearColor(clearColor.x, clearColor.y, clearColor.z, clearColor.w);
+    glClear(GL_COLOR_BUFFER_BIT);
+    ResetFpuFlags(saved_FpuFlags);
+
+    ImGui_Impl_OpenGL3_RenderDrawData(ImGui.GetDrawData());
+
+
+
+    // IMGUI_DOCK
+    If Ord(ioptr^.ConfigFlags And ImGuiConfigFlags_ViewportsEnable) <> 0 Then
+    Begin
+      backup_current_window := SDL_GL_GetCurrentWindow();
+      backup_current_context := SDL_GL_GetCurrentContext();
+      ImGui.UpdatePlatformWindows();
+      ImGui.RenderPlatformWindowsDefault(nil, nil);
+      SDL_GL_MakeCurrent(backup_current_window, backup_current_context);
+    End;
+
+    //show frame on display
+    SDL_GL_SwapWindow(window);
+    //Assert(glGetError() = GL_NO_ERROR);
+  End;
+  testwin.Free;
+
+  // clean up
+  ImGui_Impl_OpenGL3_Shutdown();
+  ImGui_ImplSDL2_Shutdown_Pas();
+  ImGui.DestroyContext(nil);
+
+  SDL_GL_DeleteContext(gl_context);
+  If window <> nil Then
+  Begin
+    SDL_DestroyWindow(window);
+    window := nil;
+  End;
+  SDL_Quit();
+End.

+ 482 - 0
demo/ImGuiDemo.lps

@@ -0,0 +1,482 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONFIG>
+  <ProjectSession>
+    <PathDelim Value="\"/>
+    <Version Value="12"/>
+    <BuildModes Active="Release_windows"/>
+    <Units Count="52">
+      <Unit0>
+        <Filename Value="ImGuiDemo.lpr"/>
+        <IsPartOfProject Value="True"/>
+        <IsVisibleTab Value="True"/>
+        <TopLine Value="38"/>
+        <CursorPos X="47" Y="46"/>
+        <UsageCount Value="200"/>
+        <Loaded Value="True"/>
+      </Unit0>
+      <Unit1>
+        <Filename Value="display.pas"/>
+        <IsPartOfProject Value="True"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="135"/>
+        <CursorPos X="10" Y="143"/>
+        <UsageCount Value="200"/>
+      </Unit1>
+      <Unit2>
+        <Filename Value="sdl2.pas"/>
+        <IsPartOfProject Value="True"/>
+        <UnitName Value="SDL2"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="9926"/>
+        <CursorPos X="30" Y="9944"/>
+        <UsageCount Value="200"/>
+      </Unit2>
+      <Unit3>
+        <Filename Value="..\fpimgui.pas"/>
+        <IsPartOfProject Value="True"/>
+        <EditorIndex Value="-1"/>
+        <CursorPos X="16" Y="6"/>
+        <UsageCount Value="200"/>
+      </Unit3>
+      <Unit4>
+        <Filename Value="..\examples\fpimgui_impl_sdlgl2.pas"/>
+        <IsPartOfProject Value="True"/>
+        <EditorIndex Value="-1"/>
+        <UsageCount Value="200"/>
+      </Unit4>
+      <Unit5>
+        <Filename Value="testwindow.pas"/>
+        <IsPartOfProject Value="True"/>
+        <UnitName Value="TestWindow"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="110"/>
+        <CursorPos X="48" Y="108"/>
+        <UsageCount Value="200"/>
+      </Unit5>
+      <Unit6>
+        <Filename Value="imgui_extra.pas"/>
+        <IsPartOfProject Value="True"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="13"/>
+        <CursorPos Y="15"/>
+        <UsageCount Value="200"/>
+      </Unit6>
+      <Unit7>
+        <Filename Value="glad_gl.pas"/>
+        <IsPartOfProject Value="True"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="1275"/>
+        <CursorPos X="3" Y="1291"/>
+        <UsageCount Value="200"/>
+      </Unit7>
+      <Unit8>
+        <Filename Value="..\ImGui.Types.pas"/>
+        <IsPartOfProject Value="True"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="518"/>
+        <CursorPos X="23" Y="535"/>
+        <UsageCount Value="200"/>
+      </Unit8>
+      <Unit9>
+        <Filename Value="ImGui.Enums.pas"/>
+        <IsPartOfProject Value="True"/>
+        <EditorIndex Value="-1"/>
+        <UsageCount Value="202"/>
+      </Unit9>
+      <Unit10>
+        <Filename Value="..\impl\PasImGui.Impl.SDL2.pas"/>
+        <IsPartOfProject Value="True"/>
+        <EditorIndex Value="-1"/>
+        <CursorPos X="27" Y="16"/>
+        <UsageCount Value="200"/>
+      </Unit10>
+      <Unit11>
+        <Filename Value="..\impl\PasImGui.Impl.OpenGL3.pas"/>
+        <IsPartOfProject Value="True"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="36"/>
+        <CursorPos X="56" Y="45"/>
+        <UsageCount Value="200"/>
+      </Unit11>
+      <Unit12>
+        <Filename Value="..\PasImGui.Gen.Types.pas"/>
+        <IsPartOfProject Value="True"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="163"/>
+        <CursorPos Y="177"/>
+        <UsageCount Value="205"/>
+      </Unit12>
+      <Unit13>
+        <Filename Value="..\OpenGL3\OpenGl3.Loader.pas"/>
+        <IsPartOfProject Value="True"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="13"/>
+        <UsageCount Value="166"/>
+      </Unit13>
+      <Unit14>
+        <Filename Value="..\PasImGui.SDL2.pas"/>
+        <IsPartOfProject Value="True"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="114"/>
+        <CursorPos X="52" Y="143"/>
+        <UsageCount Value="166"/>
+      </Unit14>
+      <Unit15>
+        <Filename Value="..\ImGui.Apis.pas"/>
+        <UnitName Value="PasImGui.Apis"/>
+        <EditorIndex Value="-1"/>
+        <CursorPos X="14" Y="6"/>
+        <UsageCount Value="3"/>
+      </Unit15>
+      <Unit16>
+        <Filename Value="..\PasImGui.Apis.pas"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="106"/>
+        <CursorPos X="31" Y="122"/>
+        <UsageCount Value="108"/>
+      </Unit16>
+      <Unit17>
+        <Filename Value="..\PasImGui.Types.pas"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="30"/>
+        <CursorPos X="24" Y="40"/>
+        <UsageCount Value="106"/>
+      </Unit17>
+      <Unit18>
+        <Filename Value="..\PasImGui.Enums.pas"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="703"/>
+        <CursorPos X="40" Y="729"/>
+        <UsageCount Value="102"/>
+      </Unit18>
+      <Unit19>
+        <Filename Value="..\PasImGui.pas"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="42"/>
+        <CursorPos X="20" Y="58"/>
+        <UsageCount Value="100"/>
+      </Unit19>
+      <Unit20>
+        <Filename Value="..\..\PasGen\PasImGui.Apis.pas"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="1423"/>
+        <CursorPos X="7" Y="1515"/>
+        <UsageCount Value="5"/>
+      </Unit20>
+      <Unit21>
+        <Filename Value="..\..\PasGen\Full.pas"/>
+        <UnitName Value="PasImGui.Types"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="709"/>
+        <CursorPos X="23" Y="722"/>
+        <UsageCount Value="5"/>
+      </Unit21>
+      <Unit22>
+        <Filename Value="..\..\PasGen\PasImGui.Enums.pas"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="1461"/>
+        <CursorPos Y="1487"/>
+        <UsageCount Value="5"/>
+      </Unit22>
+      <Unit23>
+        <Filename Value="..\..\cimgui\imgui\backends\imgui_impl_opengl3.cpp"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="387"/>
+        <CursorPos Y="405"/>
+        <UsageCount Value="3"/>
+        <DefaultSyntaxHighlighter Value="C_2B_2B"/>
+      </Unit23>
+      <Unit24>
+        <Filename Value="..\..\cimgui\imgui\backends\imgui_impl_sdl2.cpp"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="792"/>
+        <CursorPos Y="793"/>
+        <UsageCount Value="3"/>
+        <DefaultSyntaxHighlighter Value="C_2B_2B"/>
+      </Unit24>
+      <Unit25>
+        <Filename Value="..\..\cimgui\cimgui.cpp"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="617"/>
+        <CursorPos Y="630"/>
+        <UsageCount Value="0"/>
+        <DefaultSyntaxHighlighter Value="C_2B_2B"/>
+      </Unit25>
+      <Unit26>
+        <Filename Value="..\..\cimgui\imgui\imgui_widgets.cpp"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="684"/>
+        <CursorPos Y="700"/>
+        <UsageCount Value="0"/>
+        <DefaultSyntaxHighlighter Value="C_2B_2B"/>
+      </Unit26>
+      <Unit27>
+        <Filename Value="..\..\PasGen\org.pas"/>
+        <UnitName Value="fpimgui"/>
+        <EditorIndex Value="-1"/>
+        <UsageCount Value="1"/>
+      </Unit27>
+      <Unit28>
+        <Filename Value="..\..\PasGen\PasImGui.Gen.Types.pas"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="109"/>
+        <UsageCount Value="1"/>
+      </Unit28>
+      <Unit29>
+        <Filename Value="F:\FPCross\fpcsrc\rtl\win\wininc\base.inc"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="135"/>
+        <CursorPos X="6" Y="150"/>
+        <UsageCount Value="25"/>
+      </Unit29>
+      <Unit30>
+        <Filename Value="F:\FPCross\fpcsrc\rtl\inc\systemh.inc"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="517"/>
+        <CursorPos X="3" Y="530"/>
+        <UsageCount Value="9"/>
+      </Unit30>
+      <Unit31>
+        <Filename Value="F:\FPCross\fpcsrc\rtl\win\wininc\defines.inc"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="3011"/>
+        <CursorPos X="6" Y="3021"/>
+        <UsageCount Value="8"/>
+      </Unit31>
+      <Unit32>
+        <Filename Value="F:\FPCross\fpcsrc\rtl\objpas\sysutils\syspchh.inc"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="6"/>
+        <CursorPos X="10" Y="27"/>
+        <UsageCount Value="0"/>
+      </Unit32>
+      <Unit33>
+        <Filename Value="..\..\..\zydis-pascal-old\Zydis\Zydis.Enums.pas"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="34"/>
+        <CursorPos X="49" Y="47"/>
+        <UsageCount Value="3"/>
+      </Unit33>
+      <Unit34>
+        <Filename Value="F:\FPCross\fpcsrc\rtl\inc\resh.inc"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="48"/>
+        <CursorPos X="10" Y="64"/>
+        <UsageCount Value="12"/>
+      </Unit34>
+      <Unit35>
+        <Filename Value="..\SDL2-for-Pascal\units\sdlkeycode.inc"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="17"/>
+        <CursorPos X="37" Y="37"/>
+        <UsageCount Value="13"/>
+      </Unit35>
+      <Unit36>
+        <Filename Value="..\SDL2-for-Pascal\units\sdlsyswm.inc"/>
+        <EditorIndex Value="4"/>
+        <TopLine Value="224"/>
+        <CursorPos X="4" Y="240"/>
+        <UsageCount Value="16"/>
+        <Loaded Value="True"/>
+      </Unit36>
+      <Unit37>
+        <Filename Value="..\SDL2-for-Pascal\units\sdlversion.inc"/>
+        <EditorIndex Value="2"/>
+        <TopLine Value="20"/>
+        <CursorPos X="3" Y="34"/>
+        <UsageCount Value="15"/>
+        <Loaded Value="True"/>
+      </Unit37>
+      <Unit38>
+        <Filename Value="..\SDL2-for-Pascal\units\sdl2.pas"/>
+        <EditorIndex Value="3"/>
+        <TopLine Value="186"/>
+        <CursorPos X="10" Y="202"/>
+        <UsageCount Value="17"/>
+        <Loaded Value="True"/>
+      </Unit38>
+      <Unit39>
+        <Filename Value="..\SDL2-for-Pascal\units\sdlvideo.inc"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="1333"/>
+        <CursorPos X="10" Y="1348"/>
+        <UsageCount Value="10"/>
+      </Unit39>
+      <Unit40>
+        <Filename Value="..\SDL2-for-Pascal\units\sdllog.inc"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="76"/>
+        <CursorPos X="11" Y="97"/>
+        <UsageCount Value="7"/>
+      </Unit40>
+      <Unit41>
+        <Filename Value="..\SDL2-for-Pascal\units\sdlerror.inc"/>
+        <EditorIndex Value="-1"/>
+        <CursorPos X="10" Y="30"/>
+        <UsageCount Value="8"/>
+      </Unit41>
+      <Unit42>
+        <Filename Value="F:\FPCross\fpcsrc\rtl\inc\currh.inc"/>
+        <EditorIndex Value="-1"/>
+        <CursorPos X="14" Y="22"/>
+        <UsageCount Value="8"/>
+      </Unit42>
+      <Unit43>
+        <Filename Value="..\SDL2-for-Pascal\units\sdlmessagebox.inc"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="92"/>
+        <CursorPos X="10" Y="107"/>
+        <UsageCount Value="9"/>
+      </Unit43>
+      <Unit44>
+        <Filename Value="..\impl\CImGui.Impl.OpenGL3.pas"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="55"/>
+        <CursorPos X="6" Y="59"/>
+        <UsageCount Value="15"/>
+      </Unit44>
+      <Unit45>
+        <Filename Value="..\impl\PasImGui.SDL2.pas"/>
+        <EditorIndex Value="1"/>
+        <TopLine Value="133"/>
+        <UsageCount Value="12"/>
+        <Loaded Value="True"/>
+      </Unit45>
+      <Unit46>
+        <Filename Value="..\impl\CImGui.Impl.SDL2.pas"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="9"/>
+        <CursorPos Y="16"/>
+        <UsageCount Value="14"/>
+      </Unit46>
+      <Unit47>
+        <Filename Value="F:\FPCross\fpcsrc\rtl\inc\dynlibs.pas"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="17"/>
+        <CursorPos X="3" Y="30"/>
+        <UsageCount Value="13"/>
+      </Unit47>
+      <Unit48>
+        <Filename Value="F:\FPCross\fpcsrc\rtl\unix\sysdlh.inc"/>
+        <EditorIndex Value="-1"/>
+        <CursorPos X="3" Y="28"/>
+        <UsageCount Value="13"/>
+      </Unit48>
+      <Unit49>
+        <Filename Value="F:\FPCross\fpcsrc\rtl\win\sysdlh.inc"/>
+        <EditorIndex Value="-1"/>
+        <CursorPos X="3" Y="23"/>
+        <UsageCount Value="9"/>
+      </Unit49>
+      <Unit50>
+        <Filename Value="F:\FPCross\fpcsrc\rtl\objpas\math.pp"/>
+        <UnitName Value="Math"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="845"/>
+        <CursorPos X="3" Y="861"/>
+        <UsageCount Value="10"/>
+      </Unit50>
+      <Unit51>
+        <Filename Value="F:\FPCross\fpcsrc\rtl\inc\mathh.inc"/>
+        <EditorIndex Value="-1"/>
+        <TopLine Value="54"/>
+        <CursorPos X="45" Y="70"/>
+        <UsageCount Value="10"/>
+      </Unit51>
+    </Units>
+    <JumpHistory Count="22" HistoryIndex="21">
+      <Position1>
+        <Filename Value="ImGuiDemo.lpr"/>
+        <Caret Line="23" Column="15" TopLine="7"/>
+      </Position1>
+      <Position2>
+        <Filename Value="ImGuiDemo.lpr"/>
+        <Caret Line="22" Column="15" TopLine="7"/>
+      </Position2>
+      <Position3>
+        <Filename Value="ImGuiDemo.lpr"/>
+        <Caret Line="352" TopLine="330"/>
+      </Position3>
+      <Position4>
+        <Filename Value="ImGuiDemo.lpr"/>
+        <Caret Line="48" Column="7" TopLine="30"/>
+      </Position4>
+      <Position5>
+        <Filename Value="ImGuiDemo.lpr"/>
+        <Caret Line="272" Column="27" TopLine="252"/>
+      </Position5>
+      <Position6>
+        <Filename Value="ImGuiDemo.lpr"/>
+        <Caret Line="283" Column="3" TopLine="288"/>
+      </Position6>
+      <Position7>
+        <Filename Value="ImGuiDemo.lpr"/>
+        <Caret Line="310" Column="31" TopLine="289"/>
+      </Position7>
+      <Position8>
+        <Filename Value="ImGuiDemo.lpr"/>
+        <Caret Line="328" Column="33" TopLine="310"/>
+      </Position8>
+      <Position9>
+        <Filename Value="ImGuiDemo.lpr"/>
+        <Caret Line="324" Column="32" TopLine="310"/>
+      </Position9>
+      <Position10>
+        <Filename Value="ImGuiDemo.lpr"/>
+        <Caret Line="326" Column="33" TopLine="310"/>
+      </Position10>
+      <Position11>
+        <Filename Value="ImGuiDemo.lpr"/>
+        <Caret Line="325" Column="34" TopLine="310"/>
+      </Position11>
+      <Position12>
+        <Filename Value="ImGuiDemo.lpr"/>
+        <Caret Line="326" Column="35" TopLine="310"/>
+      </Position12>
+      <Position13>
+        <Filename Value="ImGuiDemo.lpr"/>
+        <Caret Line="328" Column="31" TopLine="310"/>
+      </Position13>
+      <Position14>
+        <Filename Value="ImGuiDemo.lpr"/>
+        <Caret Line="328" Column="28" TopLine="310"/>
+      </Position14>
+      <Position15>
+        <Filename Value="ImGuiDemo.lpr"/>
+        <Caret Line="328" Column="28" TopLine="310"/>
+      </Position15>
+      <Position16>
+        <Filename Value="ImGuiDemo.lpr"/>
+        <Caret Line="323" Column="25" TopLine="298"/>
+      </Position16>
+      <Position17>
+        <Filename Value="ImGuiDemo.lpr"/>
+        <Caret Line="188" Column="17" TopLine="172"/>
+      </Position17>
+      <Position18>
+        <Filename Value="ImGuiDemo.lpr"/>
+        <Caret Line="319" Column="82" TopLine="38"/>
+      </Position18>
+      <Position19>
+        <Filename Value="..\impl\PasImGui.SDL2.pas"/>
+        <Caret TopLine="133"/>
+      </Position19>
+      <Position20>
+        <Filename Value="..\SDL2-for-Pascal\units\sdlversion.inc"/>
+        <Caret Line="75" Column="10" TopLine="59"/>
+      </Position20>
+      <Position21>
+        <Filename Value="..\SDL2-for-Pascal\units\sdl2.pas"/>
+        <Caret Line="211" Column="3" TopLine="209"/>
+      </Position21>
+      <Position22>
+        <Filename Value="..\SDL2-for-Pascal\units\sdl2.pas"/>
+        <Caret Line="202" Column="10" TopLine="186"/>
+      </Position22>
+    </JumpHistory>
+    <RunParams>
+      <FormatVersion Value="2"/>
+      <Modes ActiveMode="default"/>
+    </RunParams>
+  </ProjectSession>
+</CONFIG>

+ 3429 - 0
demo/glad_gl.pas

@@ -0,0 +1,3429 @@
+{
+
+    OpenGL loader generated by glad 0.1.36 on Sat Nov  4 09:00:00 2023.
+
+    Language/Generator: Pascal
+    Specification: gl
+    APIs: gl=3.0
+    Profile: compatibility
+    Extensions:
+        
+    Loader: True
+    Local files: False
+    Omit khrplatform: False
+    Reproducible: False
+
+    Commandline:
+        --profile="compatibility" --api="gl=3.0" --generator="pascal" --spec="gl" --extensions=""
+    Online:
+        https://glad.dav1d.de/#profile=compatibility&language=pascal&specification=gl&loader=on&api=gl%3D3.0
+}
+Unit glad_gl;
+
+{$IF Defined(FPC)}{$MODE Delphi}{$ENDIF}{$H+}
+
+Interface
+
+Uses
+  SysUtils, StrUtils;
+
+Var
+  glVersionMajor, glVersionMinor: integer;
+
+  (* Types *)
+Type
+  GLVULKANPROCNV = pointer;
+  GLbitfield = uint32;
+  GLboolean = byte;
+  GLbyte = int8;
+  GLchar = char;
+  GLcharARB = byte;
+  GLclampd = double;
+  GLclampf = single;
+  GLclampx = int32;
+  GLdouble = double;
+  GLeglClientBufferEXT = pointer;
+  GLeglImageOES = pointer;
+  GLenum = uint32;
+  GLfixed = int32;
+  GLfloat = single;
+  GLhalf = uint16;
+  GLhalfARB = uint16;
+  GLhalfNV = uint16;
+  GLhandleARB = uint32;
+  GLint = int32;
+  GLint64 = int64;
+  GLint64EXT = int64;
+  GLintptr = int32;
+  GLintptrARB = int32;
+  GLshort = int16;
+  GLsizei = int32;
+  GLsizeiptr = int32;
+  GLsizeiptrARB = int32;
+  GLsync = pointer;
+  GLubyte = uint8;
+  GLuint = uint32;
+  GLuint64 = uint64;
+  GLuint64EXT = uint64;
+  GLushort = uint16;
+  GLvdpauSurfaceNV = int32;
+  GLvoid = pointer;
+  _cl_context = pointer;
+  _cl_event = pointer;
+
+  PGLVULKANPROCNV = ^pointer;
+  PGLbitfield = ^uint32;
+  PGLboolean = ^byte;
+  PGLbyte = ^int8;
+  PGLchar = ^char;
+  PGLcharARB = ^byte;
+  PGLclampd = ^double;
+  PGLclampf = ^single;
+  PGLclampx = ^int32;
+  PGLdouble = ^double;
+  PGLeglClientBufferEXT = ^pointer;
+  PGLeglImageOES = ^pointer;
+  PGLenum = ^uint32;
+  PGLfixed = ^int32;
+  PGLfloat = ^single;
+  PGLhalf = ^uint16;
+  PGLhalfARB = ^uint16;
+  PGLhalfNV = ^uint16;
+  PGLhandleARB = ^uint32;
+  PGLint = ^int32;
+  PGLint64 = ^int64;
+  PGLint64EXT = ^int64;
+  PGLintptr = ^int32;
+  PGLintptrARB = ^int32;
+  PGLshort = ^int16;
+  PGLsizei = ^int32;
+  PGLsizeiptr = ^int32;
+  PGLsizeiptrARB = ^int32;
+  PGLsync = ^pointer;
+  PGLubyte = ^uint8;
+  PGLuint = ^uint32;
+  PGLuint64 = ^uint64;
+  PGLuint64EXT = ^uint64;
+  PGLushort = ^uint16;
+  PGLvdpauSurfaceNV = ^int32;
+  PGLvoid = ^pointer;
+  P_cl_context = ^pointer;
+  P_cl_event = ^pointer;
+  PPGLchar = ^PGLchar;
+  PPGLcharARB = ^PGLcharARB;
+  PPGLboolean = ^PGLboolean;
+
+  GLdebugProc = Procedure(Source: GLenum; typ: GLenum;
+    id: GLuint; severity: GLenum; length: GLsizei; message: PGLchar;
+    userParam: pointer); Stdcall;
+  GLdebugProcArb = GLdebugProc;
+  GLdebugProcKhr = GLdebugProc;
+
+  GLdebugProcAmd = Procedure(id: GLuint; category: GLenum;
+    severity: GLenum; len: GLsizei; message: PGLchar;
+    userParam: pointer); Stdcall;
+
+
+  (* Enums *)
+Const
+  GL_FALSE = 0;
+  GL_INVALID_INDEX = uint32($FFFFFFFF);
+  GL_NONE = 0;
+  GL_NONE_OES = 0;
+  GL_NO_ERROR = 0;
+  GL_ONE = 1;
+  GL_TIMEOUT_IGNORED = uint64($FFFFFFFFFFFFFFFF);
+  GL_TIMEOUT_IGNORED_APPLE = uint64($FFFFFFFFFFFFFFFF);
+  GL_TRUE = 1;
+  GL_VERSION_ES_CL_1_0 = 1;
+  GL_VERSION_ES_CL_1_1 = 1;
+  GL_VERSION_ES_CM_1_1 = 1;
+  GL_ZERO = 0;
+
+  GL_DEPTH_BUFFER_BIT = $00000100;
+  GL_STENCIL_BUFFER_BIT = $00000400;
+  GL_COLOR_BUFFER_BIT = $00004000;
+  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;
+  GL_QUADS = $0007;
+  GL_NEVER = $0200;
+  GL_LESS = $0201;
+  GL_EQUAL = $0202;
+  GL_LEQUAL = $0203;
+  GL_GREATER = $0204;
+  GL_NOTEQUAL = $0205;
+  GL_GEQUAL = $0206;
+  GL_ALWAYS = $0207;
+  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;
+  GL_DST_COLOR = $0306;
+  GL_ONE_MINUS_DST_COLOR = $0307;
+  GL_SRC_ALPHA_SATURATE = $0308;
+  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;
+  GL_INVALID_ENUM = $0500;
+  GL_INVALID_VALUE = $0501;
+  GL_INVALID_OPERATION = $0502;
+  GL_OUT_OF_MEMORY = $0505;
+  GL_CW = $0900;
+  GL_CCW = $0901;
+  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_MODE = $0B40;
+  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_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_TEXTURE_WIDTH = $1000;
+  GL_TEXTURE_HEIGHT = $1001;
+  GL_TEXTURE_BORDER_COLOR = $1004;
+  GL_DONT_CARE = $1100;
+  GL_FASTEST = $1101;
+  GL_NICEST = $1102;
+  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_STACK_OVERFLOW = $0503;
+  GL_STACK_UNDERFLOW = $0504;
+  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;
+  GL_TEXTURE = $1702;
+  GL_COLOR = $1800;
+  GL_DEPTH = $1801;
+  GL_STENCIL = $1802;
+  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;
+  GL_POINT = $1B00;
+  GL_LINE = $1B01;
+  GL_FILL = $1B02;
+  GL_KEEP = $1E00;
+  GL_REPLACE = $1E01;
+  GL_INCR = $1E02;
+  GL_DECR = $1E03;
+  GL_VENDOR = $1F00;
+  GL_RENDERER = $1F01;
+  GL_VERSION = $1F02;
+  GL_EXTENSIONS = $1F03;
+  GL_NEAREST = $2600;
+  GL_LINEAR = $2601;
+  GL_NEAREST_MIPMAP_NEAREST = $2700;
+  GL_LINEAR_MIPMAP_NEAREST = $2701;
+  GL_NEAREST_MIPMAP_LINEAR = $2702;
+  GL_LINEAR_MIPMAP_LINEAR = $2703;
+  GL_TEXTURE_MAG_FILTER = $2800;
+  GL_TEXTURE_MIN_FILTER = $2801;
+  GL_TEXTURE_WRAP_S = $2802;
+  GL_TEXTURE_WRAP_T = $2803;
+  GL_REPEAT = $2901;
+  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 = $FFFFFFFF;
+  GL_QUAD_STRIP = $0008;
+  GL_POLYGON = $0009;
+  GL_ACCUM = $0100;
+  GL_LOAD = $0101;
+  GL_RETURN = $0102;
+  GL_MULT = $0103;
+  GL_ADD = $0104;
+  GL_AUX0 = $0409;
+  GL_AUX1 = $040A;
+  GL_AUX2 = $040B;
+  GL_AUX3 = $040C;
+  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_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_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_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_ALPHA_TEST = $0BC0;
+  GL_ALPHA_TEST_FUNC = $0BC1;
+  GL_ALPHA_TEST_REF = $0BC2;
+  GL_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_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_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_TEXTURE_COMPONENTS = $1003;
+  GL_TEXTURE_BORDER = $1005;
+  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_2_BYTES = $1407;
+  GL_3_BYTES = $1408;
+  GL_4_BYTES = $1409;
+  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_CLIP_PLANE0 = $3000;
+  GL_CLIP_PLANE1 = $3001;
+  GL_CLIP_PLANE2 = $3002;
+  GL_CLIP_PLANE3 = $3003;
+  GL_CLIP_PLANE4 = $3004;
+  GL_CLIP_PLANE5 = $3005;
+  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_COLOR_LOGIC_OP = $0BF2;
+  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;
+  GL_TEXTURE_INTERNAL_FORMAT = $1003;
+  GL_TEXTURE_RED_SIZE = $805C;
+  GL_TEXTURE_GREEN_SIZE = $805D;
+  GL_TEXTURE_BLUE_SIZE = $805E;
+  GL_TEXTURE_ALPHA_SIZE = $805F;
+  GL_DOUBLE = $140A;
+  GL_PROXY_TEXTURE_1D = $8063;
+  GL_PROXY_TEXTURE_2D = $8064;
+  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;
+  GL_CLIENT_PIXEL_STORE_BIT = $00000001;
+  GL_CLIENT_VERTEX_ARRAY_BIT = $00000002;
+  GL_CLIENT_ALL_ATTRIB_BITS = $FFFFFFFF;
+  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_FEEDBACK_BUFFER_POINTER = $0DF0;
+  GL_SELECTION_BUFFER_POINTER = $0DF3;
+  GL_CLIENT_ATTRIB_STACK_DEPTH = $0BB1;
+  GL_INDEX_LOGIC_OP = $0BF1;
+  GL_MAX_CLIENT_ATTRIB_STACK_DEPTH = $0D3B;
+  GL_FEEDBACK_BUFFER_SIZE = $0DF1;
+  GL_FEEDBACK_BUFFER_TYPE = $0DF2;
+  GL_SELECTION_BUFFER_SIZE = $0DF4;
+  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_TEXTURE_LUMINANCE_SIZE = $8060;
+  GL_TEXTURE_INTENSITY_SIZE = $8061;
+  GL_TEXTURE_PRIORITY = $8066;
+  GL_TEXTURE_RESIDENT = $8067;
+  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_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_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;
+  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;
+  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;
+  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;
+  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;
+  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;
+  GL_BLEND_COLOR = $8005;
+  GL_BLEND_EQUATION = $8009;
+  GL_CONSTANT_COLOR = $8001;
+  GL_ONE_MINUS_CONSTANT_COLOR = $8002;
+  GL_CONSTANT_ALPHA = $8003;
+  GL_ONE_MINUS_CONSTANT_ALPHA = $8004;
+  GL_FUNC_ADD = $8006;
+  GL_FUNC_REVERSE_SUBTRACT = $800B;
+  GL_FUNC_SUBTRACT = $800A;
+  GL_MIN = $8007;
+  GL_MAX = $8008;
+  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;
+  GL_SRC1_ALPHA = $8589;
+  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_SRC2_ALPHA = $858A;
+  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;
+  GL_VERTEX_PROGRAM_TWO_SIDE = $8643;
+  GL_POINT_SPRITE = $8861;
+  GL_COORD_REPLACE = $8862;
+  GL_MAX_TEXTURE_COORDS = $8871;
+  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;
+  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;
+  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_COMPRESSED_RED = $8225;
+  GL_COMPRESSED_RG = $8226;
+  GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT = $00000001;
+  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;
+  GL_DEPTH_COMPONENT32F = $8CAC;
+  GL_DEPTH32F_STENCIL8 = $8CAD;
+  GL_FLOAT_32_UNSIGNED_INT_24_8_REV = $8DAD;
+  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 = $8CA6;
+  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_COLOR_ATTACHMENT16 = $8CF0;
+  GL_COLOR_ATTACHMENT17 = $8CF1;
+  GL_COLOR_ATTACHMENT18 = $8CF2;
+  GL_COLOR_ATTACHMENT19 = $8CF3;
+  GL_COLOR_ATTACHMENT20 = $8CF4;
+  GL_COLOR_ATTACHMENT21 = $8CF5;
+  GL_COLOR_ATTACHMENT22 = $8CF6;
+  GL_COLOR_ATTACHMENT23 = $8CF7;
+  GL_COLOR_ATTACHMENT24 = $8CF8;
+  GL_COLOR_ATTACHMENT25 = $8CF9;
+  GL_COLOR_ATTACHMENT26 = $8CFA;
+  GL_COLOR_ATTACHMENT27 = $8CFB;
+  GL_COLOR_ATTACHMENT28 = $8CFC;
+  GL_COLOR_ATTACHMENT29 = $8CFD;
+  GL_COLOR_ATTACHMENT30 = $8CFE;
+  GL_COLOR_ATTACHMENT31 = $8CFF;
+  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;
+  GL_INDEX = $8222;
+  GL_TEXTURE_LUMINANCE_TYPE = $8C14;
+  GL_TEXTURE_INTENSITY_TYPE = $8C15;
+  GL_FRAMEBUFFER_SRGB = $8DB9;
+  GL_HALF_FLOAT = $140B;
+  GL_MAP_READ_BIT = $0001;
+  GL_MAP_WRITE_BIT = $0002;
+  GL_MAP_INVALIDATE_RANGE_BIT = $0004;
+  GL_MAP_INVALIDATE_BUFFER_BIT = $0008;
+  GL_MAP_FLUSH_EXPLICIT_BIT = $0010;
+  GL_MAP_UNSYNCHRONIZED_BIT = $0020;
+  GL_COMPRESSED_RED_RGTC1 = $8DBB;
+  GL_COMPRESSED_SIGNED_RED_RGTC1 = $8DBC;
+  GL_COMPRESSED_RG_RGTC2 = $8DBD;
+  GL_COMPRESSED_SIGNED_RG_RGTC2 = $8DBE;
+  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_VERTEX_ARRAY_BINDING = $85B5;
+  GL_CLAMP_VERTEX_COLOR = $891A;
+  GL_CLAMP_FRAGMENT_COLOR = $891B;
+  GL_ALPHA_INTEGER = $8D97;
+
+  (* Functions *)
+Var
+  GLAD_GL_VERSION_1_0: boolean;
+  GLAD_GL_VERSION_1_1: boolean;
+  GLAD_GL_VERSION_1_2: boolean;
+  GLAD_GL_VERSION_1_3: boolean;
+  GLAD_GL_VERSION_1_4: boolean;
+  GLAD_GL_VERSION_1_5: boolean;
+  GLAD_GL_VERSION_2_0: boolean;
+  GLAD_GL_VERSION_2_1: boolean;
+  GLAD_GL_VERSION_3_0: boolean;
+
+Var
+  glCullFace: Procedure(mode: GLenum);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glFrontFace: Procedure(mode: GLenum);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glHint: Procedure(target: GLenum; mode: GLenum);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glLineWidth: Procedure(Width: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glPointSize: Procedure(size: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glPolygonMode: Procedure(face: GLenum; mode: GLenum);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glScissor: Procedure(x: GLint; y: GLint; Width: GLsizei; Height: GLsizei);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexParameterf: Procedure(target: GLenum; pname: GLenum; param: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexParameterfv: Procedure(target: GLenum; pname: GLenum; params: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexParameteri: Procedure(target: GLenum; pname: GLenum; param: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexParameteriv: Procedure(target: GLenum; pname: GLenum; params: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexImage1D: Procedure(target: GLenum; level: GLint; internalformat: GLint;
+  Width: GLsizei; border: GLint; format: GLenum; type_: GLenum; pixels: Pointer);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexImage2D: Procedure(target: GLenum; level: GLint; internalformat: GLint;
+  Width: GLsizei; Height: GLsizei; border: GLint; format: GLenum;
+  type_: GLenum; pixels: Pointer);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glDrawBuffer: Procedure(buf: GLenum);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glClear: Procedure(mask: GLbitfield);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glClearColor: Procedure(red: GLfloat; green: GLfloat; blue: GLfloat; alpha: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glClearStencil: Procedure(s: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glClearDepth: Procedure(depth: GLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glStencilMask: Procedure(mask: GLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glColorMask: Procedure(red: GLboolean; green: GLboolean; blue: GLboolean;
+  alpha: GLboolean); {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;
+  {$ELSE}cdecl;{$ENDIF}
+  glDepthMask: Procedure(flag: GLboolean);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glDisable: Procedure(cap: GLenum);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glEnable: Procedure(cap: GLenum);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glFinish: Procedure(); {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;
+  {$ELSE}cdecl;{$ENDIF}
+  glFlush: Procedure(); {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;
+  {$ELSE}cdecl;{$ENDIF}
+  glBlendFunc: Procedure(sfactor: GLenum; dfactor: GLenum);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glLogicOp: Procedure(opcode: GLenum);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glStencilFunc: Procedure(func: GLenum; ref: GLint; mask: GLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glStencilOp: Procedure(fail: GLenum; zfail: GLenum; zpass: GLenum);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glDepthFunc: Procedure(func: GLenum);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glPixelStoref: Procedure(pname: GLenum; param: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glPixelStorei: Procedure(pname: GLenum; param: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glReadBuffer: Procedure(src: GLenum);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glReadPixels: Procedure(x: GLint; y: GLint; Width: GLsizei;
+  Height: GLsizei; format: GLenum; type_: GLenum; pixels: Pointer);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetBooleanv: Procedure(pname: GLenum; Data: PGLboolean);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetDoublev: Procedure(pname: GLenum; Data: PGLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetError: Function(): GLenum;
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetFloatv: Procedure(pname: GLenum; Data: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetIntegerv: Procedure(pname: GLenum; Data: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetString: Function(Name: GLenum): PGLubyte;
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetTexImage: Procedure(target: GLenum; level: GLint; format: GLenum;
+  type_: GLenum; pixels: Pointer);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetTexParameterfv: Procedure(target: GLenum; pname: GLenum; params: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetTexParameteriv: Procedure(target: GLenum; pname: GLenum; params: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetTexLevelParameterfv: Procedure(target: GLenum; level: GLint;
+  pname: GLenum; params: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetTexLevelParameteriv: Procedure(target: GLenum; level: GLint;
+  pname: GLenum; params: PGLint); {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;
+  {$ELSE}cdecl;{$ENDIF}
+  glIsEnabled: Function(cap: GLenum): GLboolean;
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glDepthRange: Procedure(n: GLdouble; f: GLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glViewport: Procedure(x: GLint; y: GLint; Width: GLsizei; Height: GLsizei);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glNewList: Procedure(list: GLuint; mode: GLenum);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glEndList: Procedure(); {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;
+  {$ELSE}cdecl;{$ENDIF}
+  glCallList: Procedure(list: GLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glCallLists: Procedure(n: GLsizei; type_: GLenum; lists: Pointer);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glDeleteLists: Procedure(list: GLuint; range: GLsizei);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGenLists: Function(range: GLsizei): GLuint;
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glListBase: Procedure(base: GLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glBegin: Procedure(mode: GLenum);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glBitmap: Procedure(Width: GLsizei; Height: GLsizei; xorig: GLfloat;
+  yorig: GLfloat; xmove: GLfloat; ymove: GLfloat; bitmap: PGLubyte);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glColor3b: Procedure(red: GLbyte; green: GLbyte; blue: GLbyte);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glColor3bv: Procedure(v: PGLbyte);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glColor3d: Procedure(red: GLdouble; green: GLdouble; blue: GLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glColor3dv: Procedure(v: PGLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glColor3f: Procedure(red: GLfloat; green: GLfloat; blue: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glColor3fv: Procedure(v: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glColor3i: Procedure(red: GLint; green: GLint; blue: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glColor3iv: Procedure(v: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glColor3s: Procedure(red: GLshort; green: GLshort; blue: GLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glColor3sv: Procedure(v: PGLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glColor3ub: Procedure(red: GLubyte; green: GLubyte; blue: GLubyte);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glColor3ubv: Procedure(v: PGLubyte);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glColor3ui: Procedure(red: GLuint; green: GLuint; blue: GLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glColor3uiv: Procedure(v: PGLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glColor3us: Procedure(red: GLushort; green: GLushort; blue: GLushort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glColor3usv: Procedure(v: PGLushort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glColor4b: Procedure(red: GLbyte; green: GLbyte; blue: GLbyte; alpha: GLbyte);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glColor4bv: Procedure(v: PGLbyte);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glColor4d: Procedure(red: GLdouble; green: GLdouble; blue: GLdouble; alpha: GLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glColor4dv: Procedure(v: PGLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glColor4f: Procedure(red: GLfloat; green: GLfloat; blue: GLfloat; alpha: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glColor4fv: Procedure(v: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glColor4i: Procedure(red: GLint; green: GLint; blue: GLint; alpha: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glColor4iv: Procedure(v: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glColor4s: Procedure(red: GLshort; green: GLshort; blue: GLshort; alpha: GLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glColor4sv: Procedure(v: PGLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glColor4ub: Procedure(red: GLubyte; green: GLubyte; blue: GLubyte; alpha: GLubyte);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glColor4ubv: Procedure(v: PGLubyte);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glColor4ui: Procedure(red: GLuint; green: GLuint; blue: GLuint; alpha: GLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glColor4uiv: Procedure(v: PGLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glColor4us: Procedure(red: GLushort; green: GLushort; blue: GLushort;
+  alpha: GLushort); {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;
+  {$ELSE}cdecl;{$ENDIF}
+  glColor4usv: Procedure(v: PGLushort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glEdgeFlag: Procedure(flag: GLboolean);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glEdgeFlagv: Procedure(flag: PGLboolean);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glEnd: Procedure(); {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;
+  {$ELSE}cdecl;{$ENDIF}
+  glIndexd: Procedure(c: GLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glIndexdv: Procedure(c: PGLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glIndexf: Procedure(c: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glIndexfv: Procedure(c: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glIndexi: Procedure(c: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glIndexiv: Procedure(c: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glIndexs: Procedure(c: GLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glIndexsv: Procedure(c: PGLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glNormal3b: Procedure(nx: GLbyte; ny: GLbyte; nz: GLbyte);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glNormal3bv: Procedure(v: PGLbyte);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glNormal3d: Procedure(nx: GLdouble; ny: GLdouble; nz: GLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glNormal3dv: Procedure(v: PGLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glNormal3f: Procedure(nx: GLfloat; ny: GLfloat; nz: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glNormal3fv: Procedure(v: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glNormal3i: Procedure(nx: GLint; ny: GLint; nz: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glNormal3iv: Procedure(v: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glNormal3s: Procedure(nx: GLshort; ny: GLshort; nz: GLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glNormal3sv: Procedure(v: PGLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glRasterPos2d: Procedure(x: GLdouble; y: GLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glRasterPos2dv: Procedure(v: PGLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glRasterPos2f: Procedure(x: GLfloat; y: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glRasterPos2fv: Procedure(v: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glRasterPos2i: Procedure(x: GLint; y: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glRasterPos2iv: Procedure(v: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glRasterPos2s: Procedure(x: GLshort; y: GLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glRasterPos2sv: Procedure(v: PGLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glRasterPos3d: Procedure(x: GLdouble; y: GLdouble; z: GLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glRasterPos3dv: Procedure(v: PGLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glRasterPos3f: Procedure(x: GLfloat; y: GLfloat; z: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glRasterPos3fv: Procedure(v: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glRasterPos3i: Procedure(x: GLint; y: GLint; z: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glRasterPos3iv: Procedure(v: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glRasterPos3s: Procedure(x: GLshort; y: GLshort; z: GLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glRasterPos3sv: Procedure(v: PGLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glRasterPos4d: Procedure(x: GLdouble; y: GLdouble; z: GLdouble; w: GLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glRasterPos4dv: Procedure(v: PGLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glRasterPos4f: Procedure(x: GLfloat; y: GLfloat; z: GLfloat; w: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glRasterPos4fv: Procedure(v: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glRasterPos4i: Procedure(x: GLint; y: GLint; z: GLint; w: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glRasterPos4iv: Procedure(v: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glRasterPos4s: Procedure(x: GLshort; y: GLshort; z: GLshort; w: GLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glRasterPos4sv: Procedure(v: PGLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glRectd: Procedure(x1: GLdouble; y1: GLdouble; x2: GLdouble; y2: GLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glRectdv: Procedure(v1: PGLdouble; v2: PGLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glRectf: Procedure(x1: GLfloat; y1: GLfloat; x2: GLfloat; y2: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glRectfv: Procedure(v1: PGLfloat; v2: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glRecti: Procedure(x1: GLint; y1: GLint; x2: GLint; y2: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glRectiv: Procedure(v1: PGLint; v2: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glRects: Procedure(x1: GLshort; y1: GLshort; x2: GLshort; y2: GLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glRectsv: Procedure(v1: PGLshort; v2: PGLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexCoord1d: Procedure(s: GLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexCoord1dv: Procedure(v: PGLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexCoord1f: Procedure(s: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexCoord1fv: Procedure(v: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexCoord1i: Procedure(s: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexCoord1iv: Procedure(v: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexCoord1s: Procedure(s: GLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexCoord1sv: Procedure(v: PGLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexCoord2d: Procedure(s: GLdouble; t: GLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexCoord2dv: Procedure(v: PGLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexCoord2f: Procedure(s: GLfloat; t: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexCoord2fv: Procedure(v: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexCoord2i: Procedure(s: GLint; t: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexCoord2iv: Procedure(v: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexCoord2s: Procedure(s: GLshort; t: GLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexCoord2sv: Procedure(v: PGLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexCoord3d: Procedure(s: GLdouble; t: GLdouble; r: GLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexCoord3dv: Procedure(v: PGLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexCoord3f: Procedure(s: GLfloat; t: GLfloat; r: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexCoord3fv: Procedure(v: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexCoord3i: Procedure(s: GLint; t: GLint; r: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexCoord3iv: Procedure(v: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexCoord3s: Procedure(s: GLshort; t: GLshort; r: GLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexCoord3sv: Procedure(v: PGLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexCoord4d: Procedure(s: GLdouble; t: GLdouble; r: GLdouble; q: GLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexCoord4dv: Procedure(v: PGLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexCoord4f: Procedure(s: GLfloat; t: GLfloat; r: GLfloat; q: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexCoord4fv: Procedure(v: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexCoord4i: Procedure(s: GLint; t: GLint; r: GLint; q: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexCoord4iv: Procedure(v: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexCoord4s: Procedure(s: GLshort; t: GLshort; r: GLshort; q: GLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexCoord4sv: Procedure(v: PGLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertex2d: Procedure(x: GLdouble; y: GLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertex2dv: Procedure(v: PGLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertex2f: Procedure(x: GLfloat; y: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertex2fv: Procedure(v: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertex2i: Procedure(x: GLint; y: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertex2iv: Procedure(v: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertex2s: Procedure(x: GLshort; y: GLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertex2sv: Procedure(v: PGLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertex3d: Procedure(x: GLdouble; y: GLdouble; z: GLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertex3dv: Procedure(v: PGLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertex3f: Procedure(x: GLfloat; y: GLfloat; z: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertex3fv: Procedure(v: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertex3i: Procedure(x: GLint; y: GLint; z: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertex3iv: Procedure(v: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertex3s: Procedure(x: GLshort; y: GLshort; z: GLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertex3sv: Procedure(v: PGLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertex4d: Procedure(x: GLdouble; y: GLdouble; z: GLdouble; w: GLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertex4dv: Procedure(v: PGLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertex4f: Procedure(x: GLfloat; y: GLfloat; z: GLfloat; w: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertex4fv: Procedure(v: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertex4i: Procedure(x: GLint; y: GLint; z: GLint; w: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertex4iv: Procedure(v: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertex4s: Procedure(x: GLshort; y: GLshort; z: GLshort; w: GLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertex4sv: Procedure(v: PGLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glClipPlane: Procedure(plane: GLenum; equation: PGLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glColorMaterial: Procedure(face: GLenum; mode: GLenum);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glFogf: Procedure(pname: GLenum; param: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glFogfv: Procedure(pname: GLenum; params: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glFogi: Procedure(pname: GLenum; param: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glFogiv: Procedure(pname: GLenum; params: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glLightf: Procedure(light: GLenum; pname: GLenum; param: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glLightfv: Procedure(light: GLenum; pname: GLenum; params: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glLighti: Procedure(light: GLenum; pname: GLenum; param: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glLightiv: Procedure(light: GLenum; pname: GLenum; params: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glLightModelf: Procedure(pname: GLenum; param: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glLightModelfv: Procedure(pname: GLenum; params: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glLightModeli: Procedure(pname: GLenum; param: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glLightModeliv: Procedure(pname: GLenum; params: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glLineStipple: Procedure(factor: GLint; pattern: GLushort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMaterialf: Procedure(face: GLenum; pname: GLenum; param: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMaterialfv: Procedure(face: GLenum; pname: GLenum; params: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMateriali: Procedure(face: GLenum; pname: GLenum; param: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMaterialiv: Procedure(face: GLenum; pname: GLenum; params: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glPolygonStipple: Procedure(mask: PGLubyte);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glShadeModel: Procedure(mode: GLenum);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexEnvf: Procedure(target: GLenum; pname: GLenum; param: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexEnvfv: Procedure(target: GLenum; pname: GLenum; params: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexEnvi: Procedure(target: GLenum; pname: GLenum; param: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexEnviv: Procedure(target: GLenum; pname: GLenum; params: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexGend: Procedure(coord: GLenum; pname: GLenum; param: GLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexGendv: Procedure(coord: GLenum; pname: GLenum; params: PGLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexGenf: Procedure(coord: GLenum; pname: GLenum; param: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexGenfv: Procedure(coord: GLenum; pname: GLenum; params: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexGeni: Procedure(coord: GLenum; pname: GLenum; param: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexGeniv: Procedure(coord: GLenum; pname: GLenum; params: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glFeedbackBuffer: Procedure(size: GLsizei; type_: GLenum; buffer: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glSelectBuffer: Procedure(size: GLsizei; buffer: PGLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glRenderMode: Function(mode: GLenum): GLint;
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glInitNames: Procedure(); {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;
+  {$ELSE}cdecl;{$ENDIF}
+  glLoadName: Procedure(Name: GLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glPassThrough: Procedure(token: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glPopName: Procedure(); {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;
+  {$ELSE}cdecl;{$ENDIF}
+  glPushName: Procedure(Name: GLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glClearAccum: Procedure(red: GLfloat; green: GLfloat; blue: GLfloat; alpha: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glClearIndex: Procedure(c: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glIndexMask: Procedure(mask: GLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glAccum: Procedure(op: GLenum; Value: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glPopAttrib: Procedure(); {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;
+  {$ELSE}cdecl;{$ENDIF}
+  glPushAttrib: Procedure(mask: GLbitfield);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMap1d: Procedure(target: GLenum; u1: GLdouble; u2: GLdouble;
+  stride: GLint; order: GLint; points: PGLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMap1f: Procedure(target: GLenum; u1: GLfloat; u2: GLfloat;
+  stride: GLint; order: GLint; points: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMap2d: Procedure(target: GLenum; u1: GLdouble; u2: GLdouble;
+  ustride: GLint; uorder: GLint; v1: GLdouble; v2: GLdouble; vstride: GLint;
+  vorder: GLint; points: PGLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMap2f: Procedure(target: GLenum; u1: GLfloat; u2: GLfloat;
+  ustride: GLint; uorder: GLint; v1: GLfloat; v2: GLfloat; vstride: GLint;
+  vorder: GLint; points: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMapGrid1d: Procedure(un: GLint; u1: GLdouble; u2: GLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMapGrid1f: Procedure(un: GLint; u1: GLfloat; u2: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMapGrid2d: Procedure(un: GLint; u1: GLdouble; u2: GLdouble;
+  vn: GLint; v1: GLdouble; v2: GLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMapGrid2f: Procedure(un: GLint; u1: GLfloat; u2: GLfloat; vn: GLint;
+  v1: GLfloat; v2: GLfloat); {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;
+  {$ELSE}cdecl;{$ENDIF}
+  glEvalCoord1d: Procedure(u: GLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glEvalCoord1dv: Procedure(u: PGLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glEvalCoord1f: Procedure(u: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glEvalCoord1fv: Procedure(u: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glEvalCoord2d: Procedure(u: GLdouble; v: GLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glEvalCoord2dv: Procedure(u: PGLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glEvalCoord2f: Procedure(u: GLfloat; v: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glEvalCoord2fv: Procedure(u: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glEvalMesh1: Procedure(mode: GLenum; i1: GLint; i2: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glEvalPoint1: Procedure(i: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glEvalMesh2: Procedure(mode: GLenum; i1: GLint; i2: GLint; j1: GLint; j2: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glEvalPoint2: Procedure(i: GLint; j: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glAlphaFunc: Procedure(func: GLenum; ref: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glPixelZoom: Procedure(xfactor: GLfloat; yfactor: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glPixelTransferf: Procedure(pname: GLenum; param: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glPixelTransferi: Procedure(pname: GLenum; param: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glPixelMapfv: Procedure(map: GLenum; mapsize: GLsizei; values: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glPixelMapuiv: Procedure(map: GLenum; mapsize: GLsizei; values: PGLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glPixelMapusv: Procedure(map: GLenum; mapsize: GLsizei; values: PGLushort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glCopyPixels: Procedure(x: GLint; y: GLint; Width: GLsizei;
+  Height: GLsizei; type_: GLenum);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glDrawPixels: Procedure(Width: GLsizei; Height: GLsizei; format: GLenum;
+  type_: GLenum; pixels: Pointer);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetClipPlane: Procedure(plane: GLenum; equation: PGLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetLightfv: Procedure(light: GLenum; pname: GLenum; params: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetLightiv: Procedure(light: GLenum; pname: GLenum; params: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetMapdv: Procedure(target: GLenum; query: GLenum; v: PGLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetMapfv: Procedure(target: GLenum; query: GLenum; v: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetMapiv: Procedure(target: GLenum; query: GLenum; v: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetMaterialfv: Procedure(face: GLenum; pname: GLenum; params: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetMaterialiv: Procedure(face: GLenum; pname: GLenum; params: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetPixelMapfv: Procedure(map: GLenum; values: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetPixelMapuiv: Procedure(map: GLenum; values: PGLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetPixelMapusv: Procedure(map: GLenum; values: PGLushort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetPolygonStipple: Procedure(mask: PGLubyte);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetTexEnvfv: Procedure(target: GLenum; pname: GLenum; params: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetTexEnviv: Procedure(target: GLenum; pname: GLenum; params: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetTexGendv: Procedure(coord: GLenum; pname: GLenum; params: PGLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetTexGenfv: Procedure(coord: GLenum; pname: GLenum; params: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetTexGeniv: Procedure(coord: GLenum; pname: GLenum; params: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glIsList: Function(list: GLuint): GLboolean;
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glFrustum: Procedure(left: GLdouble; right: GLdouble; bottom: GLdouble;
+  top: GLdouble; zNear: GLdouble; zFar: GLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glLoadIdentity: Procedure(); {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;
+  {$ELSE}cdecl;{$ENDIF}
+  glLoadMatrixf: Procedure(m: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glLoadMatrixd: Procedure(m: PGLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMatrixMode: Procedure(mode: GLenum);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMultMatrixf: Procedure(m: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMultMatrixd: Procedure(m: PGLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glOrtho: Procedure(left: GLdouble; right: GLdouble; bottom: GLdouble;
+  top: GLdouble; zNear: GLdouble; zFar: GLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glPopMatrix: Procedure(); {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;
+  {$ELSE}cdecl;{$ENDIF}
+  glPushMatrix: Procedure(); {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;
+  {$ELSE}cdecl;{$ENDIF}
+  glRotated: Procedure(angle: GLdouble; x: GLdouble; y: GLdouble; z: GLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glRotatef: Procedure(angle: GLfloat; x: GLfloat; y: GLfloat; z: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glScaled: Procedure(x: GLdouble; y: GLdouble; z: GLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glScalef: Procedure(x: GLfloat; y: GLfloat; z: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTranslated: Procedure(x: GLdouble; y: GLdouble; z: GLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTranslatef: Procedure(x: GLfloat; y: GLfloat; z: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glDrawArrays: Procedure(mode: GLenum; First: GLint; Count: GLsizei);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glDrawElements: Procedure(mode: GLenum; Count: GLsizei; type_: GLenum;
+  indices: Pointer); {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;
+  {$ELSE}cdecl;{$ENDIF}
+  glGetPointerv: Procedure(pname: GLenum; params: PPointer);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glPolygonOffset: Procedure(factor: GLfloat; units: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glCopyTexImage1D: Procedure(target: GLenum; level: GLint;
+  internalformat: GLenum; x: GLint; y: GLint; Width: GLsizei; border: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glCopyTexImage2D: Procedure(target: GLenum; level: GLint;
+  internalformat: GLenum; x: GLint; y: GLint; Width: GLsizei; Height: GLsizei;
+  border: GLint); {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;
+  {$ELSE}cdecl;{$ENDIF}
+  glCopyTexSubImage1D: Procedure(target: GLenum; level: GLint;
+  xoffset: GLint; x: GLint; y: GLint; Width: GLsizei);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glCopyTexSubImage2D: Procedure(target: GLenum; level: GLint;
+  xoffset: GLint; yoffset: GLint; x: GLint; y: GLint; Width: GLsizei; Height: GLsizei);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexSubImage1D: Procedure(target: GLenum; level: GLint; xoffset: GLint;
+  Width: GLsizei; format: GLenum; type_: GLenum; pixels: Pointer);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexSubImage2D: Procedure(target: GLenum; level: GLint; xoffset: GLint;
+  yoffset: GLint; Width: GLsizei; Height: GLsizei; format: GLenum;
+  type_: GLenum; pixels: Pointer);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glBindTexture: Procedure(target: GLenum; texture: GLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glDeleteTextures: Procedure(n: GLsizei; textures: PGLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGenTextures: Procedure(n: GLsizei; textures: PGLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glIsTexture: Function(texture: GLuint): GLboolean;
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glArrayElement: Procedure(i: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glColorPointer: Procedure(size: GLint; type_: GLenum; stride: GLsizei;
+  pointer: Pointer); {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;
+  {$ELSE}cdecl;{$ENDIF}
+  glDisableClientState: Procedure(array_: GLenum);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glEdgeFlagPointer: Procedure(stride: GLsizei; pointer: Pointer);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glEnableClientState: Procedure(array_: GLenum);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glIndexPointer: Procedure(type_: GLenum; stride: GLsizei; pointer: Pointer);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glInterleavedArrays: Procedure(format: GLenum; stride: GLsizei; pointer: Pointer);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glNormalPointer: Procedure(type_: GLenum; stride: GLsizei; pointer: Pointer);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexCoordPointer: Procedure(size: GLint; type_: GLenum; stride: GLsizei;
+  pointer: Pointer); {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;
+  {$ELSE}cdecl;{$ENDIF}
+  glVertexPointer: Procedure(size: GLint; type_: GLenum; stride: GLsizei;
+  pointer: Pointer); {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;
+  {$ELSE}cdecl;{$ENDIF}
+  glAreTexturesResident: Function(n: GLsizei; textures: PGLuint;
+  residences: PGLboolean): GLboolean;
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glPrioritizeTextures: Procedure(n: GLsizei; textures: PGLuint; priorities: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glIndexub: Procedure(c: GLubyte);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glIndexubv: Procedure(c: PGLubyte);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glPopClientAttrib: Procedure();
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glPushClientAttrib: Procedure(mask: GLbitfield);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glDrawRangeElements: Procedure(mode: GLenum; start: GLuint;
+  end_: GLuint; Count: GLsizei; type_: GLenum; indices: Pointer);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexImage3D: Procedure(target: GLenum; level: GLint; internalformat: GLint;
+  Width: GLsizei; Height: GLsizei; depth: GLsizei; border: GLint;
+  format: GLenum; type_: GLenum; pixels: Pointer);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexSubImage3D: Procedure(target: GLenum; level: GLint; xoffset: GLint;
+  yoffset: GLint; zoffset: GLint; Width: GLsizei; Height: GLsizei;
+  depth: GLsizei; format: GLenum; type_: GLenum; pixels: Pointer);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glCopyTexSubImage3D: Procedure(target: GLenum; level: GLint;
+  xoffset: GLint; yoffset: GLint; zoffset: GLint; x: GLint; y: GLint;
+  Width: GLsizei; Height: GLsizei);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glActiveTexture: Procedure(texture: GLenum);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glSampleCoverage: Procedure(Value: GLfloat; invert: GLboolean);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glCompressedTexImage3D: Procedure(target: GLenum; level: GLint;
+  internalformat: GLenum; Width: GLsizei; Height: GLsizei; depth: GLsizei;
+  border: GLint; imageSize: GLsizei; Data: Pointer);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glCompressedTexImage2D: Procedure(target: GLenum; level: GLint;
+  internalformat: GLenum; Width: GLsizei; Height: GLsizei; border: GLint;
+  imageSize: GLsizei; Data: Pointer);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glCompressedTexImage1D: Procedure(target: GLenum; level: GLint;
+  internalformat: GLenum; Width: GLsizei; border: GLint; imageSize: GLsizei;
+  Data: Pointer); {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;
+  {$ELSE}cdecl;{$ENDIF}
+  glCompressedTexSubImage3D: Procedure(target: GLenum; level: GLint;
+  xoffset: GLint; yoffset: GLint; zoffset: GLint; Width: GLsizei;
+  Height: GLsizei; depth: GLsizei; format: GLenum; imageSize: GLsizei; Data: Pointer);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glCompressedTexSubImage2D: Procedure(target: GLenum; level: GLint;
+  xoffset: GLint; yoffset: GLint; Width: GLsizei; Height: GLsizei;
+  format: GLenum; imageSize: GLsizei; Data: Pointer);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glCompressedTexSubImage1D: Procedure(target: GLenum; level: GLint;
+  xoffset: GLint; Width: GLsizei; format: GLenum; imageSize: GLsizei; Data: Pointer);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetCompressedTexImage: Procedure(target: GLenum; level: GLint; img: Pointer);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glClientActiveTexture: Procedure(texture: GLenum);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMultiTexCoord1d: Procedure(target: GLenum; s: GLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMultiTexCoord1dv: Procedure(target: GLenum; v: PGLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMultiTexCoord1f: Procedure(target: GLenum; s: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMultiTexCoord1fv: Procedure(target: GLenum; v: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMultiTexCoord1i: Procedure(target: GLenum; s: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMultiTexCoord1iv: Procedure(target: GLenum; v: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMultiTexCoord1s: Procedure(target: GLenum; s: GLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMultiTexCoord1sv: Procedure(target: GLenum; v: PGLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMultiTexCoord2d: Procedure(target: GLenum; s: GLdouble; t: GLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMultiTexCoord2dv: Procedure(target: GLenum; v: PGLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMultiTexCoord2f: Procedure(target: GLenum; s: GLfloat; t: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMultiTexCoord2fv: Procedure(target: GLenum; v: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMultiTexCoord2i: Procedure(target: GLenum; s: GLint; t: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMultiTexCoord2iv: Procedure(target: GLenum; v: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMultiTexCoord2s: Procedure(target: GLenum; s: GLshort; t: GLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMultiTexCoord2sv: Procedure(target: GLenum; v: PGLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMultiTexCoord3d: Procedure(target: GLenum; s: GLdouble; t: GLdouble; r: GLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMultiTexCoord3dv: Procedure(target: GLenum; v: PGLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMultiTexCoord3f: Procedure(target: GLenum; s: GLfloat; t: GLfloat; r: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMultiTexCoord3fv: Procedure(target: GLenum; v: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMultiTexCoord3i: Procedure(target: GLenum; s: GLint; t: GLint; r: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMultiTexCoord3iv: Procedure(target: GLenum; v: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMultiTexCoord3s: Procedure(target: GLenum; s: GLshort; t: GLshort; r: GLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMultiTexCoord3sv: Procedure(target: GLenum; v: PGLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMultiTexCoord4d: Procedure(target: GLenum; s: GLdouble; t: GLdouble;
+  r: GLdouble; q: GLdouble); {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;
+  {$ELSE}cdecl;{$ENDIF}
+  glMultiTexCoord4dv: Procedure(target: GLenum; v: PGLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMultiTexCoord4f: Procedure(target: GLenum; s: GLfloat; t: GLfloat;
+  r: GLfloat; q: GLfloat); {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;
+  {$ELSE}cdecl;{$ENDIF}
+  glMultiTexCoord4fv: Procedure(target: GLenum; v: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMultiTexCoord4i: Procedure(target: GLenum; s: GLint; t: GLint; r: GLint; q: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMultiTexCoord4iv: Procedure(target: GLenum; v: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMultiTexCoord4s: Procedure(target: GLenum; s: GLshort; t: GLshort;
+  r: GLshort; q: GLshort); {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;
+  {$ELSE}cdecl;{$ENDIF}
+  glMultiTexCoord4sv: Procedure(target: GLenum; v: PGLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glLoadTransposeMatrixf: Procedure(m: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glLoadTransposeMatrixd: Procedure(m: PGLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMultTransposeMatrixf: Procedure(m: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMultTransposeMatrixd: Procedure(m: PGLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glBlendFuncSeparate: Procedure(sfactorRGB: GLenum; dfactorRGB: GLenum;
+  sfactorAlpha: GLenum; dfactorAlpha: GLenum);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMultiDrawArrays: Procedure(mode: GLenum; First: PGLint; Count: PGLsizei;
+  drawcount: GLsizei); {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;
+  {$ELSE}cdecl;{$ENDIF}
+  glMultiDrawElements: Procedure(mode: GLenum; Count: PGLsizei;
+  type_: GLenum; indices: PPointer; drawcount: GLsizei);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glPointParameterf: Procedure(pname: GLenum; param: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glPointParameterfv: Procedure(pname: GLenum; params: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glPointParameteri: Procedure(pname: GLenum; param: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glPointParameteriv: Procedure(pname: GLenum; params: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glFogCoordf: Procedure(coord: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glFogCoordfv: Procedure(coord: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glFogCoordd: Procedure(coord: GLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glFogCoorddv: Procedure(coord: PGLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glFogCoordPointer: Procedure(type_: GLenum; stride: GLsizei; pointer: Pointer);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glSecondaryColor3b: Procedure(red: GLbyte; green: GLbyte; blue: GLbyte);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glSecondaryColor3bv: Procedure(v: PGLbyte);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glSecondaryColor3d: Procedure(red: GLdouble; green: GLdouble; blue: GLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glSecondaryColor3dv: Procedure(v: PGLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glSecondaryColor3f: Procedure(red: GLfloat; green: GLfloat; blue: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glSecondaryColor3fv: Procedure(v: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glSecondaryColor3i: Procedure(red: GLint; green: GLint; blue: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glSecondaryColor3iv: Procedure(v: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glSecondaryColor3s: Procedure(red: GLshort; green: GLshort; blue: GLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glSecondaryColor3sv: Procedure(v: PGLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glSecondaryColor3ub: Procedure(red: GLubyte; green: GLubyte; blue: GLubyte);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glSecondaryColor3ubv: Procedure(v: PGLubyte);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glSecondaryColor3ui: Procedure(red: GLuint; green: GLuint; blue: GLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glSecondaryColor3uiv: Procedure(v: PGLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glSecondaryColor3us: Procedure(red: GLushort; green: GLushort; blue: GLushort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glSecondaryColor3usv: Procedure(v: PGLushort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glSecondaryColorPointer: Procedure(size: GLint; type_: GLenum;
+  stride: GLsizei; pointer: Pointer);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glWindowPos2d: Procedure(x: GLdouble; y: GLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glWindowPos2dv: Procedure(v: PGLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glWindowPos2f: Procedure(x: GLfloat; y: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glWindowPos2fv: Procedure(v: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glWindowPos2i: Procedure(x: GLint; y: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glWindowPos2iv: Procedure(v: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glWindowPos2s: Procedure(x: GLshort; y: GLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glWindowPos2sv: Procedure(v: PGLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glWindowPos3d: Procedure(x: GLdouble; y: GLdouble; z: GLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glWindowPos3dv: Procedure(v: PGLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glWindowPos3f: Procedure(x: GLfloat; y: GLfloat; z: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glWindowPos3fv: Procedure(v: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glWindowPos3i: Procedure(x: GLint; y: GLint; z: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glWindowPos3iv: Procedure(v: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glWindowPos3s: Procedure(x: GLshort; y: GLshort; z: GLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glWindowPos3sv: Procedure(v: PGLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glBlendColor: Procedure(red: GLfloat; green: GLfloat; blue: GLfloat; alpha: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glBlendEquation: Procedure(mode: GLenum);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGenQueries: Procedure(n: GLsizei; ids: PGLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glDeleteQueries: Procedure(n: GLsizei; ids: PGLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glIsQuery: Function(id: GLuint): GLboolean;
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glBeginQuery: Procedure(target: GLenum; id: GLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glEndQuery: Procedure(target: GLenum);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetQueryiv: Procedure(target: GLenum; pname: GLenum; params: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetQueryObjectiv: Procedure(id: GLuint; pname: GLenum; params: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetQueryObjectuiv: Procedure(id: GLuint; pname: GLenum; params: PGLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glBindBuffer: Procedure(target: GLenum; buffer: GLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glDeleteBuffers: Procedure(n: GLsizei; buffers: PGLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGenBuffers: Procedure(n: GLsizei; buffers: PGLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glIsBuffer: Function(buffer: GLuint): GLboolean;
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glBufferData: Procedure(target: GLenum; size: GLsizeiptr; Data: Pointer;
+  usage: GLenum); {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;
+  {$ELSE}cdecl;{$ENDIF}
+  glBufferSubData: Procedure(target: GLenum; offset: GLintptr;
+  size: GLsizeiptr; Data: Pointer);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetBufferSubData: Procedure(target: GLenum; offset: GLintptr;
+  size: GLsizeiptr; Data: Pointer);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMapBuffer: Function(target: GLenum; access: GLenum): Pointer;
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glUnmapBuffer: Function(target: GLenum): GLboolean;
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetBufferParameteriv: Procedure(target: GLenum; pname: GLenum; params: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetBufferPointerv: Procedure(target: GLenum; pname: GLenum; params: PPointer);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glBlendEquationSeparate: Procedure(modeRGB: GLenum; modeAlpha: GLenum);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glDrawBuffers: Procedure(n: GLsizei; bufs: PGLenum);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glStencilOpSeparate: Procedure(face: GLenum; sfail: GLenum;
+  dpfail: GLenum; dppass: GLenum);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glStencilFuncSeparate: Procedure(face: GLenum; func: GLenum; ref: GLint;
+  mask: GLuint); {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glStencilMaskSeparate: Procedure(face: GLenum; mask: GLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glAttachShader: Procedure(program_: GLuint; shader: GLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glBindAttribLocation: Procedure(program_: GLuint; index: GLuint; Name: PGLchar);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glCompileShader: Procedure(shader: GLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glCreateProgram: Function(): GLuint;
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glCreateShader: Function(type_: GLenum): GLuint;
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glDeleteProgram: Procedure(program_: GLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glDeleteShader: Procedure(shader: GLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glDetachShader: Procedure(program_: GLuint; shader: GLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glDisableVertexAttribArray: Procedure(index: GLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glEnableVertexAttribArray: Procedure(index: GLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetActiveAttrib: Procedure(program_: GLuint; index: GLuint;
+  bufSize: GLsizei; length: PGLsizei; size: PGLint; type_: PGLenum; Name: PGLchar);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetActiveUniform: Procedure(program_: GLuint; index: GLuint;
+  bufSize: GLsizei; length: PGLsizei; size: PGLint; type_: PGLenum; Name: PGLchar);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetAttachedShaders: Procedure(program_: GLuint; maxCount: GLsizei;
+  Count: PGLsizei; shaders: PGLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetAttribLocation: Function(program_: GLuint; Name: PGLchar): GLint;
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetProgramiv: Procedure(program_: GLuint; pname: GLenum; params: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetProgramInfoLog: Procedure(program_: GLuint; bufSize: GLsizei;
+  length: PGLsizei; infoLog: PGLchar);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetShaderiv: Procedure(shader: GLuint; pname: GLenum; params: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetShaderInfoLog: Procedure(shader: GLuint; bufSize: GLsizei;
+  length: PGLsizei; infoLog: PGLchar);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetShaderSource: Procedure(shader: GLuint; bufSize: GLsizei;
+  length: PGLsizei; Source: PGLchar);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetUniformLocation: Function(program_: GLuint; Name: PGLchar): GLint;
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetUniformfv: Procedure(program_: GLuint; location: GLint; params: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetUniformiv: Procedure(program_: GLuint; location: GLint; params: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetVertexAttribdv: Procedure(index: GLuint; pname: GLenum; params: PGLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetVertexAttribfv: Procedure(index: GLuint; pname: GLenum; params: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetVertexAttribiv: Procedure(index: GLuint; pname: GLenum; params: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetVertexAttribPointerv: Procedure(index: GLuint; pname: GLenum; pointer: PPointer);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glIsProgram: Function(program_: GLuint): GLboolean;
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glIsShader: Function(shader: GLuint): GLboolean;
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glLinkProgram: Procedure(program_: GLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glShaderSource: Procedure(shader: GLuint; Count: GLsizei;
+  string_: PPGLchar; length: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glUseProgram: Procedure(program_: GLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glUniform1f: Procedure(location: GLint; v0: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glUniform2f: Procedure(location: GLint; v0: GLfloat; v1: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glUniform3f: Procedure(location: GLint; v0: GLfloat; v1: GLfloat; v2: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glUniform4f: Procedure(location: GLint; v0: GLfloat; v1: GLfloat;
+  v2: GLfloat; v3: GLfloat); {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;
+  {$ELSE}cdecl;{$ENDIF}
+  glUniform1i: Procedure(location: GLint; v0: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glUniform2i: Procedure(location: GLint; v0: GLint; v1: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glUniform3i: Procedure(location: GLint; v0: GLint; v1: GLint; v2: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glUniform4i: Procedure(location: GLint; v0: GLint; v1: GLint; v2: GLint; v3: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glUniform1fv: Procedure(location: GLint; Count: GLsizei; Value: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glUniform2fv: Procedure(location: GLint; Count: GLsizei; Value: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glUniform3fv: Procedure(location: GLint; Count: GLsizei; Value: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glUniform4fv: Procedure(location: GLint; Count: GLsizei; Value: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glUniform1iv: Procedure(location: GLint; Count: GLsizei; Value: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glUniform2iv: Procedure(location: GLint; Count: GLsizei; Value: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glUniform3iv: Procedure(location: GLint; Count: GLsizei; Value: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glUniform4iv: Procedure(location: GLint; Count: GLsizei; Value: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glUniformMatrix2fv: Procedure(location: GLint; Count: GLsizei;
+  transpose: GLboolean; Value: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glUniformMatrix3fv: Procedure(location: GLint; Count: GLsizei;
+  transpose: GLboolean; Value: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glUniformMatrix4fv: Procedure(location: GLint; Count: GLsizei;
+  transpose: GLboolean; Value: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glValidateProgram: Procedure(program_: GLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttrib1d: Procedure(index: GLuint; x: GLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttrib1dv: Procedure(index: GLuint; v: PGLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttrib1f: Procedure(index: GLuint; x: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttrib1fv: Procedure(index: GLuint; v: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttrib1s: Procedure(index: GLuint; x: GLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttrib1sv: Procedure(index: GLuint; v: PGLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttrib2d: Procedure(index: GLuint; x: GLdouble; y: GLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttrib2dv: Procedure(index: GLuint; v: PGLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttrib2f: Procedure(index: GLuint; x: GLfloat; y: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttrib2fv: Procedure(index: GLuint; v: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttrib2s: Procedure(index: GLuint; x: GLshort; y: GLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttrib2sv: Procedure(index: GLuint; v: PGLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttrib3d: Procedure(index: GLuint; x: GLdouble; y: GLdouble; z: GLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttrib3dv: Procedure(index: GLuint; v: PGLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttrib3f: Procedure(index: GLuint; x: GLfloat; y: GLfloat; z: GLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttrib3fv: Procedure(index: GLuint; v: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttrib3s: Procedure(index: GLuint; x: GLshort; y: GLshort; z: GLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttrib3sv: Procedure(index: GLuint; v: PGLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttrib4Nbv: Procedure(index: GLuint; v: PGLbyte);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttrib4Niv: Procedure(index: GLuint; v: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttrib4Nsv: Procedure(index: GLuint; v: PGLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttrib4Nub: Procedure(index: GLuint; x: GLubyte; y: GLubyte;
+  z: GLubyte; w: GLubyte); {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;
+  {$ELSE}cdecl;{$ENDIF}
+  glVertexAttrib4Nubv: Procedure(index: GLuint; v: PGLubyte);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttrib4Nuiv: Procedure(index: GLuint; v: PGLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttrib4Nusv: Procedure(index: GLuint; v: PGLushort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttrib4bv: Procedure(index: GLuint; v: PGLbyte);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttrib4d: Procedure(index: GLuint; x: GLdouble; y: GLdouble;
+  z: GLdouble; w: GLdouble); {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;
+  {$ELSE}cdecl;{$ENDIF}
+  glVertexAttrib4dv: Procedure(index: GLuint; v: PGLdouble);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttrib4f: Procedure(index: GLuint; x: GLfloat; y: GLfloat;
+  z: GLfloat; w: GLfloat); {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;
+  {$ELSE}cdecl;{$ENDIF}
+  glVertexAttrib4fv: Procedure(index: GLuint; v: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttrib4iv: Procedure(index: GLuint; v: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttrib4s: Procedure(index: GLuint; x: GLshort; y: GLshort;
+  z: GLshort; w: GLshort); {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;
+  {$ELSE}cdecl;{$ENDIF}
+  glVertexAttrib4sv: Procedure(index: GLuint; v: PGLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttrib4ubv: Procedure(index: GLuint; v: PGLubyte);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttrib4uiv: Procedure(index: GLuint; v: PGLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttrib4usv: Procedure(index: GLuint; v: PGLushort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttribPointer: Procedure(index: GLuint; size: GLint;
+  type_: GLenum; normalized: GLboolean; stride: GLsizei; pointer: Pointer);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glUniformMatrix2x3fv: Procedure(location: GLint; Count: GLsizei;
+  transpose: GLboolean; Value: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glUniformMatrix3x2fv: Procedure(location: GLint; Count: GLsizei;
+  transpose: GLboolean; Value: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glUniformMatrix2x4fv: Procedure(location: GLint; Count: GLsizei;
+  transpose: GLboolean; Value: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glUniformMatrix4x2fv: Procedure(location: GLint; Count: GLsizei;
+  transpose: GLboolean; Value: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glUniformMatrix3x4fv: Procedure(location: GLint; Count: GLsizei;
+  transpose: GLboolean; Value: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glUniformMatrix4x3fv: Procedure(location: GLint; Count: GLsizei;
+  transpose: GLboolean; Value: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glColorMaski: Procedure(index: GLuint; r: GLboolean; g: GLboolean;
+  b: GLboolean; a: GLboolean); {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;
+  {$ELSE}cdecl;{$ENDIF}
+  glGetBooleani_v: Procedure(target: GLenum; index: GLuint; Data: PGLboolean);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetIntegeri_v: Procedure(target: GLenum; index: GLuint; Data: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glEnablei: Procedure(target: GLenum; index: GLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glDisablei: Procedure(target: GLenum; index: GLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glIsEnabledi: Function(target: GLenum; index: GLuint): GLboolean;
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glBeginTransformFeedback: Procedure(primitiveMode: GLenum);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glEndTransformFeedback: Procedure();
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glBindBufferRange: Procedure(target: GLenum; index: GLuint;
+  buffer: GLuint; offset: GLintptr; size: GLsizeiptr);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glBindBufferBase: Procedure(target: GLenum; index: GLuint; buffer: GLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTransformFeedbackVaryings: Procedure(program_: GLuint; Count: GLsizei;
+  varyings: PPGLchar; bufferMode: GLenum);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetTransformFeedbackVarying: Procedure(program_: GLuint;
+  index: GLuint; bufSize: GLsizei; length: PGLsizei; size: PGLsizei;
+  type_: PGLenum; Name: PGLchar); {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;
+  {$ELSE}cdecl;{$ENDIF}
+  glClampColor: Procedure(target: GLenum; clamp: GLenum);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glBeginConditionalRender: Procedure(id: GLuint; mode: GLenum);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glEndConditionalRender: Procedure();
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttribIPointer: Procedure(index: GLuint; size: GLint;
+  type_: GLenum; stride: GLsizei; pointer: Pointer);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetVertexAttribIiv: Procedure(index: GLuint; pname: GLenum; params: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetVertexAttribIuiv: Procedure(index: GLuint; pname: GLenum; params: PGLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttribI1i: Procedure(index: GLuint; x: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttribI2i: Procedure(index: GLuint; x: GLint; y: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttribI3i: Procedure(index: GLuint; x: GLint; y: GLint; z: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttribI4i: Procedure(index: GLuint; x: GLint; y: GLint; z: GLint; w: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttribI1ui: Procedure(index: GLuint; x: GLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttribI2ui: Procedure(index: GLuint; x: GLuint; y: GLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttribI3ui: Procedure(index: GLuint; x: GLuint; y: GLuint; z: GLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttribI4ui: Procedure(index: GLuint; x: GLuint; y: GLuint;
+  z: GLuint; w: GLuint); {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;
+  {$ELSE}cdecl;{$ENDIF}
+  glVertexAttribI1iv: Procedure(index: GLuint; v: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttribI2iv: Procedure(index: GLuint; v: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttribI3iv: Procedure(index: GLuint; v: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttribI4iv: Procedure(index: GLuint; v: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttribI1uiv: Procedure(index: GLuint; v: PGLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttribI2uiv: Procedure(index: GLuint; v: PGLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttribI3uiv: Procedure(index: GLuint; v: PGLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttribI4uiv: Procedure(index: GLuint; v: PGLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttribI4bv: Procedure(index: GLuint; v: PGLbyte);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttribI4sv: Procedure(index: GLuint; v: PGLshort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttribI4ubv: Procedure(index: GLuint; v: PGLubyte);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glVertexAttribI4usv: Procedure(index: GLuint; v: PGLushort);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetUniformuiv: Procedure(program_: GLuint; location: GLint; params: PGLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glBindFragDataLocation: Procedure(program_: GLuint; color: GLuint; Name: PGLchar);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetFragDataLocation: Function(program_: GLuint; Name: PGLchar): GLint;
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glUniform1ui: Procedure(location: GLint; v0: GLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glUniform2ui: Procedure(location: GLint; v0: GLuint; v1: GLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glUniform3ui: Procedure(location: GLint; v0: GLuint; v1: GLuint; v2: GLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glUniform4ui: Procedure(location: GLint; v0: GLuint; v1: GLuint;
+  v2: GLuint; v3: GLuint); {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;
+  {$ELSE}cdecl;{$ENDIF}
+  glUniform1uiv: Procedure(location: GLint; Count: GLsizei; Value: PGLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glUniform2uiv: Procedure(location: GLint; Count: GLsizei; Value: PGLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glUniform3uiv: Procedure(location: GLint; Count: GLsizei; Value: PGLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glUniform4uiv: Procedure(location: GLint; Count: GLsizei; Value: PGLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexParameterIiv: Procedure(target: GLenum; pname: GLenum; params: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glTexParameterIuiv: Procedure(target: GLenum; pname: GLenum; params: PGLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetTexParameterIiv: Procedure(target: GLenum; pname: GLenum; params: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetTexParameterIuiv: Procedure(target: GLenum; pname: GLenum; params: PGLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glClearBufferiv: Procedure(buffer: GLenum; drawbuffer: GLint; Value: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glClearBufferuiv: Procedure(buffer: GLenum; drawbuffer: GLint; Value: PGLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glClearBufferfv: Procedure(buffer: GLenum; drawbuffer: GLint; Value: PGLfloat);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glClearBufferfi: Procedure(buffer: GLenum; drawbuffer: GLint;
+  depth: GLfloat; stencil: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetStringi: Function(Name: GLenum; index: GLuint): PGLubyte;
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glIsRenderbuffer: Function(renderbuffer: GLuint): GLboolean;
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glBindRenderbuffer: Procedure(target: GLenum; renderbuffer: GLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glDeleteRenderbuffers: Procedure(n: GLsizei; renderbuffers: PGLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGenRenderbuffers: Procedure(n: GLsizei; renderbuffers: PGLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glRenderbufferStorage: Procedure(target: GLenum; internalformat: GLenum;
+  Width: GLsizei; Height: GLsizei);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetRenderbufferParameteriv: Procedure(target: GLenum; pname: GLenum;
+  params: PGLint); {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;
+  {$ELSE}cdecl;{$ENDIF}
+  glIsFramebuffer: Function(framebuffer: GLuint): GLboolean;
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glBindFramebuffer: Procedure(target: GLenum; framebuffer: GLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glDeleteFramebuffers: Procedure(n: GLsizei; framebuffers: PGLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGenFramebuffers: Procedure(n: GLsizei; framebuffers: PGLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glCheckFramebufferStatus: Function(target: GLenum): GLenum;
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glFramebufferTexture1D: Procedure(target: GLenum; attachment: GLenum;
+  textarget: GLenum; texture: GLuint; level: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glFramebufferTexture2D: Procedure(target: GLenum; attachment: GLenum;
+  textarget: GLenum; texture: GLuint; level: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glFramebufferTexture3D: Procedure(target: GLenum; attachment: GLenum;
+  textarget: GLenum; texture: GLuint; level: GLint; zoffset: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glFramebufferRenderbuffer: Procedure(target: GLenum; attachment: GLenum;
+  renderbuffertarget: GLenum; renderbuffer: GLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGetFramebufferAttachmentParameteriv: Procedure(target: GLenum;
+  attachment: GLenum; pname: GLenum; params: PGLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGenerateMipmap: Procedure(target: GLenum);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glBlitFramebuffer: Procedure(srcX0: GLint; srcY0: GLint; srcX1: GLint;
+  srcY1: GLint; dstX0: GLint; dstY0: GLint; dstX1: GLint; dstY1: GLint;
+  mask: GLbitfield; filter: GLenum);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glRenderbufferStorageMultisample: Procedure(target: GLenum;
+  samples: GLsizei; internalformat: GLenum; Width: GLsizei; Height: GLsizei);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glFramebufferTextureLayer: Procedure(target: GLenum; attachment: GLenum;
+  texture: GLuint; level: GLint; layer: GLint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glMapBufferRange: Function(target: GLenum; offset: GLintptr;
+  length: GLsizeiptr; access: GLbitfield): Pointer;
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glFlushMappedBufferRange: Procedure(target: GLenum; offset: GLintptr;
+  length: GLsizeiptr); {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;
+  {$ELSE}cdecl;{$ENDIF}
+  glBindVertexArray: Procedure(array_: GLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glDeleteVertexArrays: Procedure(n: GLsizei; arrays: PGLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glGenVertexArrays: Procedure(n: GLsizei; arrays: PGLuint);
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+  glIsVertexArray: Function(array_: GLuint): GLboolean;
+  {$IF Defined(Windows) or Defined(MSWindows)} Stdcall;{$ELSE}cdecl;{$ENDIF}
+
+
+Type
+  TLoadProc = Function(proc: PAnsiChar): Pointer;
+
+Function gladLoadGL(load: TLoadProc): boolean;
+
+
+Implementation
+
+{$DEFINE HAS_GL_NUM_EXTENSIONS}Function hasExt(Const extname: string): Boolean;
+Var
+  extensions: PChar;
+  loc, terminator: PChar;
+  {$IFDEF HAS_GL_NUM_EXTENSIONS}
+  num_extensions, i: integer;
+  ext: PChar;
+  {$ENDIF}
+Begin
+  Result := False;
+  {$IFDEF HAS_GL_NUM_EXTENSIONS}
+  If glVersionMajor >= 3 Then
+  Begin
+    glGetIntegerv(GL_NUM_EXTENSIONS, @num_extensions);
+    For i := 0 To num_extensions - 1 Do
+    Begin
+      ext := PChar(glGetStringi(GL_EXTENSIONS, i));
+      If strcomp(ext, PChar(extname)) = 0 Then
+        exit(True);
+    End;
+    exit;
+  End;
+  {$ENDIF}
+  extensions := PChar(glGetString(GL_EXTENSIONS));
+  While True Do
+  Begin
+    loc := strpos(extensions, PChar(extname));
+    If loc = nil Then
+      exit;
+    terminator := loc + length(extname);
+    If (loc = extensions) Or (loc[-1] = ' ') Then
+      If (terminator[0] = ' ') Or (terminator[0] = #0) Then
+        exit(True);
+    extensions := terminator;
+  End;
+End;
+
+Procedure load_GL_VERSION_1_0(load: TLoadProc);
+Begin
+  If Not GLAD_GL_VERSION_1_0 Then exit;
+  glCullFace := load('glCullFace');
+  glFrontFace := load('glFrontFace');
+  glHint := load('glHint');
+  glLineWidth := load('glLineWidth');
+  glPointSize := load('glPointSize');
+  glPolygonMode := load('glPolygonMode');
+  glScissor := load('glScissor');
+  glTexParameterf := load('glTexParameterf');
+  glTexParameterfv := load('glTexParameterfv');
+  glTexParameteri := load('glTexParameteri');
+  glTexParameteriv := load('glTexParameteriv');
+  glTexImage1D := load('glTexImage1D');
+  glTexImage2D := load('glTexImage2D');
+  glDrawBuffer := load('glDrawBuffer');
+  glClear := load('glClear');
+  glClearColor := load('glClearColor');
+  glClearStencil := load('glClearStencil');
+  glClearDepth := load('glClearDepth');
+  glStencilMask := load('glStencilMask');
+  glColorMask := load('glColorMask');
+  glDepthMask := load('glDepthMask');
+  glDisable := load('glDisable');
+  glEnable := load('glEnable');
+  glFinish := load('glFinish');
+  glFlush := load('glFlush');
+  glBlendFunc := load('glBlendFunc');
+  glLogicOp := load('glLogicOp');
+  glStencilFunc := load('glStencilFunc');
+  glStencilOp := load('glStencilOp');
+  glDepthFunc := load('glDepthFunc');
+  glPixelStoref := load('glPixelStoref');
+  glPixelStorei := load('glPixelStorei');
+  glReadBuffer := load('glReadBuffer');
+  glReadPixels := load('glReadPixels');
+  glGetBooleanv := load('glGetBooleanv');
+  glGetDoublev := load('glGetDoublev');
+  glGetError := load('glGetError');
+  glGetFloatv := load('glGetFloatv');
+  glGetIntegerv := load('glGetIntegerv');
+  glGetString := load('glGetString');
+  glGetTexImage := load('glGetTexImage');
+  glGetTexParameterfv := load('glGetTexParameterfv');
+  glGetTexParameteriv := load('glGetTexParameteriv');
+  glGetTexLevelParameterfv := load('glGetTexLevelParameterfv');
+  glGetTexLevelParameteriv := load('glGetTexLevelParameteriv');
+  glIsEnabled := load('glIsEnabled');
+  glDepthRange := load('glDepthRange');
+  glViewport := load('glViewport');
+  glNewList := load('glNewList');
+  glEndList := load('glEndList');
+  glCallList := load('glCallList');
+  glCallLists := load('glCallLists');
+  glDeleteLists := load('glDeleteLists');
+  glGenLists := load('glGenLists');
+  glListBase := load('glListBase');
+  glBegin := load('glBegin');
+  glBitmap := load('glBitmap');
+  glColor3b := load('glColor3b');
+  glColor3bv := load('glColor3bv');
+  glColor3d := load('glColor3d');
+  glColor3dv := load('glColor3dv');
+  glColor3f := load('glColor3f');
+  glColor3fv := load('glColor3fv');
+  glColor3i := load('glColor3i');
+  glColor3iv := load('glColor3iv');
+  glColor3s := load('glColor3s');
+  glColor3sv := load('glColor3sv');
+  glColor3ub := load('glColor3ub');
+  glColor3ubv := load('glColor3ubv');
+  glColor3ui := load('glColor3ui');
+  glColor3uiv := load('glColor3uiv');
+  glColor3us := load('glColor3us');
+  glColor3usv := load('glColor3usv');
+  glColor4b := load('glColor4b');
+  glColor4bv := load('glColor4bv');
+  glColor4d := load('glColor4d');
+  glColor4dv := load('glColor4dv');
+  glColor4f := load('glColor4f');
+  glColor4fv := load('glColor4fv');
+  glColor4i := load('glColor4i');
+  glColor4iv := load('glColor4iv');
+  glColor4s := load('glColor4s');
+  glColor4sv := load('glColor4sv');
+  glColor4ub := load('glColor4ub');
+  glColor4ubv := load('glColor4ubv');
+  glColor4ui := load('glColor4ui');
+  glColor4uiv := load('glColor4uiv');
+  glColor4us := load('glColor4us');
+  glColor4usv := load('glColor4usv');
+  glEdgeFlag := load('glEdgeFlag');
+  glEdgeFlagv := load('glEdgeFlagv');
+  glEnd := load('glEnd');
+  glIndexd := load('glIndexd');
+  glIndexdv := load('glIndexdv');
+  glIndexf := load('glIndexf');
+  glIndexfv := load('glIndexfv');
+  glIndexi := load('glIndexi');
+  glIndexiv := load('glIndexiv');
+  glIndexs := load('glIndexs');
+  glIndexsv := load('glIndexsv');
+  glNormal3b := load('glNormal3b');
+  glNormal3bv := load('glNormal3bv');
+  glNormal3d := load('glNormal3d');
+  glNormal3dv := load('glNormal3dv');
+  glNormal3f := load('glNormal3f');
+  glNormal3fv := load('glNormal3fv');
+  glNormal3i := load('glNormal3i');
+  glNormal3iv := load('glNormal3iv');
+  glNormal3s := load('glNormal3s');
+  glNormal3sv := load('glNormal3sv');
+  glRasterPos2d := load('glRasterPos2d');
+  glRasterPos2dv := load('glRasterPos2dv');
+  glRasterPos2f := load('glRasterPos2f');
+  glRasterPos2fv := load('glRasterPos2fv');
+  glRasterPos2i := load('glRasterPos2i');
+  glRasterPos2iv := load('glRasterPos2iv');
+  glRasterPos2s := load('glRasterPos2s');
+  glRasterPos2sv := load('glRasterPos2sv');
+  glRasterPos3d := load('glRasterPos3d');
+  glRasterPos3dv := load('glRasterPos3dv');
+  glRasterPos3f := load('glRasterPos3f');
+  glRasterPos3fv := load('glRasterPos3fv');
+  glRasterPos3i := load('glRasterPos3i');
+  glRasterPos3iv := load('glRasterPos3iv');
+  glRasterPos3s := load('glRasterPos3s');
+  glRasterPos3sv := load('glRasterPos3sv');
+  glRasterPos4d := load('glRasterPos4d');
+  glRasterPos4dv := load('glRasterPos4dv');
+  glRasterPos4f := load('glRasterPos4f');
+  glRasterPos4fv := load('glRasterPos4fv');
+  glRasterPos4i := load('glRasterPos4i');
+  glRasterPos4iv := load('glRasterPos4iv');
+  glRasterPos4s := load('glRasterPos4s');
+  glRasterPos4sv := load('glRasterPos4sv');
+  glRectd := load('glRectd');
+  glRectdv := load('glRectdv');
+  glRectf := load('glRectf');
+  glRectfv := load('glRectfv');
+  glRecti := load('glRecti');
+  glRectiv := load('glRectiv');
+  glRects := load('glRects');
+  glRectsv := load('glRectsv');
+  glTexCoord1d := load('glTexCoord1d');
+  glTexCoord1dv := load('glTexCoord1dv');
+  glTexCoord1f := load('glTexCoord1f');
+  glTexCoord1fv := load('glTexCoord1fv');
+  glTexCoord1i := load('glTexCoord1i');
+  glTexCoord1iv := load('glTexCoord1iv');
+  glTexCoord1s := load('glTexCoord1s');
+  glTexCoord1sv := load('glTexCoord1sv');
+  glTexCoord2d := load('glTexCoord2d');
+  glTexCoord2dv := load('glTexCoord2dv');
+  glTexCoord2f := load('glTexCoord2f');
+  glTexCoord2fv := load('glTexCoord2fv');
+  glTexCoord2i := load('glTexCoord2i');
+  glTexCoord2iv := load('glTexCoord2iv');
+  glTexCoord2s := load('glTexCoord2s');
+  glTexCoord2sv := load('glTexCoord2sv');
+  glTexCoord3d := load('glTexCoord3d');
+  glTexCoord3dv := load('glTexCoord3dv');
+  glTexCoord3f := load('glTexCoord3f');
+  glTexCoord3fv := load('glTexCoord3fv');
+  glTexCoord3i := load('glTexCoord3i');
+  glTexCoord3iv := load('glTexCoord3iv');
+  glTexCoord3s := load('glTexCoord3s');
+  glTexCoord3sv := load('glTexCoord3sv');
+  glTexCoord4d := load('glTexCoord4d');
+  glTexCoord4dv := load('glTexCoord4dv');
+  glTexCoord4f := load('glTexCoord4f');
+  glTexCoord4fv := load('glTexCoord4fv');
+  glTexCoord4i := load('glTexCoord4i');
+  glTexCoord4iv := load('glTexCoord4iv');
+  glTexCoord4s := load('glTexCoord4s');
+  glTexCoord4sv := load('glTexCoord4sv');
+  glVertex2d := load('glVertex2d');
+  glVertex2dv := load('glVertex2dv');
+  glVertex2f := load('glVertex2f');
+  glVertex2fv := load('glVertex2fv');
+  glVertex2i := load('glVertex2i');
+  glVertex2iv := load('glVertex2iv');
+  glVertex2s := load('glVertex2s');
+  glVertex2sv := load('glVertex2sv');
+  glVertex3d := load('glVertex3d');
+  glVertex3dv := load('glVertex3dv');
+  glVertex3f := load('glVertex3f');
+  glVertex3fv := load('glVertex3fv');
+  glVertex3i := load('glVertex3i');
+  glVertex3iv := load('glVertex3iv');
+  glVertex3s := load('glVertex3s');
+  glVertex3sv := load('glVertex3sv');
+  glVertex4d := load('glVertex4d');
+  glVertex4dv := load('glVertex4dv');
+  glVertex4f := load('glVertex4f');
+  glVertex4fv := load('glVertex4fv');
+  glVertex4i := load('glVertex4i');
+  glVertex4iv := load('glVertex4iv');
+  glVertex4s := load('glVertex4s');
+  glVertex4sv := load('glVertex4sv');
+  glClipPlane := load('glClipPlane');
+  glColorMaterial := load('glColorMaterial');
+  glFogf := load('glFogf');
+  glFogfv := load('glFogfv');
+  glFogi := load('glFogi');
+  glFogiv := load('glFogiv');
+  glLightf := load('glLightf');
+  glLightfv := load('glLightfv');
+  glLighti := load('glLighti');
+  glLightiv := load('glLightiv');
+  glLightModelf := load('glLightModelf');
+  glLightModelfv := load('glLightModelfv');
+  glLightModeli := load('glLightModeli');
+  glLightModeliv := load('glLightModeliv');
+  glLineStipple := load('glLineStipple');
+  glMaterialf := load('glMaterialf');
+  glMaterialfv := load('glMaterialfv');
+  glMateriali := load('glMateriali');
+  glMaterialiv := load('glMaterialiv');
+  glPolygonStipple := load('glPolygonStipple');
+  glShadeModel := load('glShadeModel');
+  glTexEnvf := load('glTexEnvf');
+  glTexEnvfv := load('glTexEnvfv');
+  glTexEnvi := load('glTexEnvi');
+  glTexEnviv := load('glTexEnviv');
+  glTexGend := load('glTexGend');
+  glTexGendv := load('glTexGendv');
+  glTexGenf := load('glTexGenf');
+  glTexGenfv := load('glTexGenfv');
+  glTexGeni := load('glTexGeni');
+  glTexGeniv := load('glTexGeniv');
+  glFeedbackBuffer := load('glFeedbackBuffer');
+  glSelectBuffer := load('glSelectBuffer');
+  glRenderMode := load('glRenderMode');
+  glInitNames := load('glInitNames');
+  glLoadName := load('glLoadName');
+  glPassThrough := load('glPassThrough');
+  glPopName := load('glPopName');
+  glPushName := load('glPushName');
+  glClearAccum := load('glClearAccum');
+  glClearIndex := load('glClearIndex');
+  glIndexMask := load('glIndexMask');
+  glAccum := load('glAccum');
+  glPopAttrib := load('glPopAttrib');
+  glPushAttrib := load('glPushAttrib');
+  glMap1d := load('glMap1d');
+  glMap1f := load('glMap1f');
+  glMap2d := load('glMap2d');
+  glMap2f := load('glMap2f');
+  glMapGrid1d := load('glMapGrid1d');
+  glMapGrid1f := load('glMapGrid1f');
+  glMapGrid2d := load('glMapGrid2d');
+  glMapGrid2f := load('glMapGrid2f');
+  glEvalCoord1d := load('glEvalCoord1d');
+  glEvalCoord1dv := load('glEvalCoord1dv');
+  glEvalCoord1f := load('glEvalCoord1f');
+  glEvalCoord1fv := load('glEvalCoord1fv');
+  glEvalCoord2d := load('glEvalCoord2d');
+  glEvalCoord2dv := load('glEvalCoord2dv');
+  glEvalCoord2f := load('glEvalCoord2f');
+  glEvalCoord2fv := load('glEvalCoord2fv');
+  glEvalMesh1 := load('glEvalMesh1');
+  glEvalPoint1 := load('glEvalPoint1');
+  glEvalMesh2 := load('glEvalMesh2');
+  glEvalPoint2 := load('glEvalPoint2');
+  glAlphaFunc := load('glAlphaFunc');
+  glPixelZoom := load('glPixelZoom');
+  glPixelTransferf := load('glPixelTransferf');
+  glPixelTransferi := load('glPixelTransferi');
+  glPixelMapfv := load('glPixelMapfv');
+  glPixelMapuiv := load('glPixelMapuiv');
+  glPixelMapusv := load('glPixelMapusv');
+  glCopyPixels := load('glCopyPixels');
+  glDrawPixels := load('glDrawPixels');
+  glGetClipPlane := load('glGetClipPlane');
+  glGetLightfv := load('glGetLightfv');
+  glGetLightiv := load('glGetLightiv');
+  glGetMapdv := load('glGetMapdv');
+  glGetMapfv := load('glGetMapfv');
+  glGetMapiv := load('glGetMapiv');
+  glGetMaterialfv := load('glGetMaterialfv');
+  glGetMaterialiv := load('glGetMaterialiv');
+  glGetPixelMapfv := load('glGetPixelMapfv');
+  glGetPixelMapuiv := load('glGetPixelMapuiv');
+  glGetPixelMapusv := load('glGetPixelMapusv');
+  glGetPolygonStipple := load('glGetPolygonStipple');
+  glGetTexEnvfv := load('glGetTexEnvfv');
+  glGetTexEnviv := load('glGetTexEnviv');
+  glGetTexGendv := load('glGetTexGendv');
+  glGetTexGenfv := load('glGetTexGenfv');
+  glGetTexGeniv := load('glGetTexGeniv');
+  glIsList := load('glIsList');
+  glFrustum := load('glFrustum');
+  glLoadIdentity := load('glLoadIdentity');
+  glLoadMatrixf := load('glLoadMatrixf');
+  glLoadMatrixd := load('glLoadMatrixd');
+  glMatrixMode := load('glMatrixMode');
+  glMultMatrixf := load('glMultMatrixf');
+  glMultMatrixd := load('glMultMatrixd');
+  glOrtho := load('glOrtho');
+  glPopMatrix := load('glPopMatrix');
+  glPushMatrix := load('glPushMatrix');
+  glRotated := load('glRotated');
+  glRotatef := load('glRotatef');
+  glScaled := load('glScaled');
+  glScalef := load('glScalef');
+  glTranslated := load('glTranslated');
+  glTranslatef := load('glTranslatef');
+End;
+
+Procedure load_GL_VERSION_1_1(load: TLoadProc);
+Begin
+  If Not GLAD_GL_VERSION_1_1 Then exit;
+  glDrawArrays := load('glDrawArrays');
+  glDrawElements := load('glDrawElements');
+  glGetPointerv := load('glGetPointerv');
+  glPolygonOffset := load('glPolygonOffset');
+  glCopyTexImage1D := load('glCopyTexImage1D');
+  glCopyTexImage2D := load('glCopyTexImage2D');
+  glCopyTexSubImage1D := load('glCopyTexSubImage1D');
+  glCopyTexSubImage2D := load('glCopyTexSubImage2D');
+  glTexSubImage1D := load('glTexSubImage1D');
+  glTexSubImage2D := load('glTexSubImage2D');
+  glBindTexture := load('glBindTexture');
+  glDeleteTextures := load('glDeleteTextures');
+  glGenTextures := load('glGenTextures');
+  glIsTexture := load('glIsTexture');
+  glArrayElement := load('glArrayElement');
+  glColorPointer := load('glColorPointer');
+  glDisableClientState := load('glDisableClientState');
+  glEdgeFlagPointer := load('glEdgeFlagPointer');
+  glEnableClientState := load('glEnableClientState');
+  glIndexPointer := load('glIndexPointer');
+  glInterleavedArrays := load('glInterleavedArrays');
+  glNormalPointer := load('glNormalPointer');
+  glTexCoordPointer := load('glTexCoordPointer');
+  glVertexPointer := load('glVertexPointer');
+  glAreTexturesResident := load('glAreTexturesResident');
+  glPrioritizeTextures := load('glPrioritizeTextures');
+  glIndexub := load('glIndexub');
+  glIndexubv := load('glIndexubv');
+  glPopClientAttrib := load('glPopClientAttrib');
+  glPushClientAttrib := load('glPushClientAttrib');
+End;
+
+Procedure load_GL_VERSION_1_2(load: TLoadProc);
+Begin
+  If Not GLAD_GL_VERSION_1_2 Then exit;
+  glDrawRangeElements := load('glDrawRangeElements');
+  glTexImage3D := load('glTexImage3D');
+  glTexSubImage3D := load('glTexSubImage3D');
+  glCopyTexSubImage3D := load('glCopyTexSubImage3D');
+End;
+
+Procedure load_GL_VERSION_1_3(load: TLoadProc);
+Begin
+  If Not GLAD_GL_VERSION_1_3 Then exit;
+  glActiveTexture := load('glActiveTexture');
+  glSampleCoverage := load('glSampleCoverage');
+  glCompressedTexImage3D := load('glCompressedTexImage3D');
+  glCompressedTexImage2D := load('glCompressedTexImage2D');
+  glCompressedTexImage1D := load('glCompressedTexImage1D');
+  glCompressedTexSubImage3D := load('glCompressedTexSubImage3D');
+  glCompressedTexSubImage2D := load('glCompressedTexSubImage2D');
+  glCompressedTexSubImage1D := load('glCompressedTexSubImage1D');
+  glGetCompressedTexImage := load('glGetCompressedTexImage');
+  glClientActiveTexture := load('glClientActiveTexture');
+  glMultiTexCoord1d := load('glMultiTexCoord1d');
+  glMultiTexCoord1dv := load('glMultiTexCoord1dv');
+  glMultiTexCoord1f := load('glMultiTexCoord1f');
+  glMultiTexCoord1fv := load('glMultiTexCoord1fv');
+  glMultiTexCoord1i := load('glMultiTexCoord1i');
+  glMultiTexCoord1iv := load('glMultiTexCoord1iv');
+  glMultiTexCoord1s := load('glMultiTexCoord1s');
+  glMultiTexCoord1sv := load('glMultiTexCoord1sv');
+  glMultiTexCoord2d := load('glMultiTexCoord2d');
+  glMultiTexCoord2dv := load('glMultiTexCoord2dv');
+  glMultiTexCoord2f := load('glMultiTexCoord2f');
+  glMultiTexCoord2fv := load('glMultiTexCoord2fv');
+  glMultiTexCoord2i := load('glMultiTexCoord2i');
+  glMultiTexCoord2iv := load('glMultiTexCoord2iv');
+  glMultiTexCoord2s := load('glMultiTexCoord2s');
+  glMultiTexCoord2sv := load('glMultiTexCoord2sv');
+  glMultiTexCoord3d := load('glMultiTexCoord3d');
+  glMultiTexCoord3dv := load('glMultiTexCoord3dv');
+  glMultiTexCoord3f := load('glMultiTexCoord3f');
+  glMultiTexCoord3fv := load('glMultiTexCoord3fv');
+  glMultiTexCoord3i := load('glMultiTexCoord3i');
+  glMultiTexCoord3iv := load('glMultiTexCoord3iv');
+  glMultiTexCoord3s := load('glMultiTexCoord3s');
+  glMultiTexCoord3sv := load('glMultiTexCoord3sv');
+  glMultiTexCoord4d := load('glMultiTexCoord4d');
+  glMultiTexCoord4dv := load('glMultiTexCoord4dv');
+  glMultiTexCoord4f := load('glMultiTexCoord4f');
+  glMultiTexCoord4fv := load('glMultiTexCoord4fv');
+  glMultiTexCoord4i := load('glMultiTexCoord4i');
+  glMultiTexCoord4iv := load('glMultiTexCoord4iv');
+  glMultiTexCoord4s := load('glMultiTexCoord4s');
+  glMultiTexCoord4sv := load('glMultiTexCoord4sv');
+  glLoadTransposeMatrixf := load('glLoadTransposeMatrixf');
+  glLoadTransposeMatrixd := load('glLoadTransposeMatrixd');
+  glMultTransposeMatrixf := load('glMultTransposeMatrixf');
+  glMultTransposeMatrixd := load('glMultTransposeMatrixd');
+End;
+
+Procedure load_GL_VERSION_1_4(load: TLoadProc);
+Begin
+  If Not GLAD_GL_VERSION_1_4 Then exit;
+  glBlendFuncSeparate := load('glBlendFuncSeparate');
+  glMultiDrawArrays := load('glMultiDrawArrays');
+  glMultiDrawElements := load('glMultiDrawElements');
+  glPointParameterf := load('glPointParameterf');
+  glPointParameterfv := load('glPointParameterfv');
+  glPointParameteri := load('glPointParameteri');
+  glPointParameteriv := load('glPointParameteriv');
+  glFogCoordf := load('glFogCoordf');
+  glFogCoordfv := load('glFogCoordfv');
+  glFogCoordd := load('glFogCoordd');
+  glFogCoorddv := load('glFogCoorddv');
+  glFogCoordPointer := load('glFogCoordPointer');
+  glSecondaryColor3b := load('glSecondaryColor3b');
+  glSecondaryColor3bv := load('glSecondaryColor3bv');
+  glSecondaryColor3d := load('glSecondaryColor3d');
+  glSecondaryColor3dv := load('glSecondaryColor3dv');
+  glSecondaryColor3f := load('glSecondaryColor3f');
+  glSecondaryColor3fv := load('glSecondaryColor3fv');
+  glSecondaryColor3i := load('glSecondaryColor3i');
+  glSecondaryColor3iv := load('glSecondaryColor3iv');
+  glSecondaryColor3s := load('glSecondaryColor3s');
+  glSecondaryColor3sv := load('glSecondaryColor3sv');
+  glSecondaryColor3ub := load('glSecondaryColor3ub');
+  glSecondaryColor3ubv := load('glSecondaryColor3ubv');
+  glSecondaryColor3ui := load('glSecondaryColor3ui');
+  glSecondaryColor3uiv := load('glSecondaryColor3uiv');
+  glSecondaryColor3us := load('glSecondaryColor3us');
+  glSecondaryColor3usv := load('glSecondaryColor3usv');
+  glSecondaryColorPointer := load('glSecondaryColorPointer');
+  glWindowPos2d := load('glWindowPos2d');
+  glWindowPos2dv := load('glWindowPos2dv');
+  glWindowPos2f := load('glWindowPos2f');
+  glWindowPos2fv := load('glWindowPos2fv');
+  glWindowPos2i := load('glWindowPos2i');
+  glWindowPos2iv := load('glWindowPos2iv');
+  glWindowPos2s := load('glWindowPos2s');
+  glWindowPos2sv := load('glWindowPos2sv');
+  glWindowPos3d := load('glWindowPos3d');
+  glWindowPos3dv := load('glWindowPos3dv');
+  glWindowPos3f := load('glWindowPos3f');
+  glWindowPos3fv := load('glWindowPos3fv');
+  glWindowPos3i := load('glWindowPos3i');
+  glWindowPos3iv := load('glWindowPos3iv');
+  glWindowPos3s := load('glWindowPos3s');
+  glWindowPos3sv := load('glWindowPos3sv');
+  glBlendColor := load('glBlendColor');
+  glBlendEquation := load('glBlendEquation');
+End;
+
+Procedure load_GL_VERSION_1_5(load: TLoadProc);
+Begin
+  If Not GLAD_GL_VERSION_1_5 Then exit;
+  glGenQueries := load('glGenQueries');
+  glDeleteQueries := load('glDeleteQueries');
+  glIsQuery := load('glIsQuery');
+  glBeginQuery := load('glBeginQuery');
+  glEndQuery := load('glEndQuery');
+  glGetQueryiv := load('glGetQueryiv');
+  glGetQueryObjectiv := load('glGetQueryObjectiv');
+  glGetQueryObjectuiv := load('glGetQueryObjectuiv');
+  glBindBuffer := load('glBindBuffer');
+  glDeleteBuffers := load('glDeleteBuffers');
+  glGenBuffers := load('glGenBuffers');
+  glIsBuffer := load('glIsBuffer');
+  glBufferData := load('glBufferData');
+  glBufferSubData := load('glBufferSubData');
+  glGetBufferSubData := load('glGetBufferSubData');
+  glMapBuffer := load('glMapBuffer');
+  glUnmapBuffer := load('glUnmapBuffer');
+  glGetBufferParameteriv := load('glGetBufferParameteriv');
+  glGetBufferPointerv := load('glGetBufferPointerv');
+End;
+
+Procedure load_GL_VERSION_2_0(load: TLoadProc);
+Begin
+  If Not GLAD_GL_VERSION_2_0 Then exit;
+  glBlendEquationSeparate := load('glBlendEquationSeparate');
+  glDrawBuffers := load('glDrawBuffers');
+  glStencilOpSeparate := load('glStencilOpSeparate');
+  glStencilFuncSeparate := load('glStencilFuncSeparate');
+  glStencilMaskSeparate := load('glStencilMaskSeparate');
+  glAttachShader := load('glAttachShader');
+  glBindAttribLocation := load('glBindAttribLocation');
+  glCompileShader := load('glCompileShader');
+  glCreateProgram := load('glCreateProgram');
+  glCreateShader := load('glCreateShader');
+  glDeleteProgram := load('glDeleteProgram');
+  glDeleteShader := load('glDeleteShader');
+  glDetachShader := load('glDetachShader');
+  glDisableVertexAttribArray := load('glDisableVertexAttribArray');
+  glEnableVertexAttribArray := load('glEnableVertexAttribArray');
+  glGetActiveAttrib := load('glGetActiveAttrib');
+  glGetActiveUniform := load('glGetActiveUniform');
+  glGetAttachedShaders := load('glGetAttachedShaders');
+  glGetAttribLocation := load('glGetAttribLocation');
+  glGetProgramiv := load('glGetProgramiv');
+  glGetProgramInfoLog := load('glGetProgramInfoLog');
+  glGetShaderiv := load('glGetShaderiv');
+  glGetShaderInfoLog := load('glGetShaderInfoLog');
+  glGetShaderSource := load('glGetShaderSource');
+  glGetUniformLocation := load('glGetUniformLocation');
+  glGetUniformfv := load('glGetUniformfv');
+  glGetUniformiv := load('glGetUniformiv');
+  glGetVertexAttribdv := load('glGetVertexAttribdv');
+  glGetVertexAttribfv := load('glGetVertexAttribfv');
+  glGetVertexAttribiv := load('glGetVertexAttribiv');
+  glGetVertexAttribPointerv := load('glGetVertexAttribPointerv');
+  glIsProgram := load('glIsProgram');
+  glIsShader := load('glIsShader');
+  glLinkProgram := load('glLinkProgram');
+  glShaderSource := load('glShaderSource');
+  glUseProgram := load('glUseProgram');
+  glUniform1f := load('glUniform1f');
+  glUniform2f := load('glUniform2f');
+  glUniform3f := load('glUniform3f');
+  glUniform4f := load('glUniform4f');
+  glUniform1i := load('glUniform1i');
+  glUniform2i := load('glUniform2i');
+  glUniform3i := load('glUniform3i');
+  glUniform4i := load('glUniform4i');
+  glUniform1fv := load('glUniform1fv');
+  glUniform2fv := load('glUniform2fv');
+  glUniform3fv := load('glUniform3fv');
+  glUniform4fv := load('glUniform4fv');
+  glUniform1iv := load('glUniform1iv');
+  glUniform2iv := load('glUniform2iv');
+  glUniform3iv := load('glUniform3iv');
+  glUniform4iv := load('glUniform4iv');
+  glUniformMatrix2fv := load('glUniformMatrix2fv');
+  glUniformMatrix3fv := load('glUniformMatrix3fv');
+  glUniformMatrix4fv := load('glUniformMatrix4fv');
+  glValidateProgram := load('glValidateProgram');
+  glVertexAttrib1d := load('glVertexAttrib1d');
+  glVertexAttrib1dv := load('glVertexAttrib1dv');
+  glVertexAttrib1f := load('glVertexAttrib1f');
+  glVertexAttrib1fv := load('glVertexAttrib1fv');
+  glVertexAttrib1s := load('glVertexAttrib1s');
+  glVertexAttrib1sv := load('glVertexAttrib1sv');
+  glVertexAttrib2d := load('glVertexAttrib2d');
+  glVertexAttrib2dv := load('glVertexAttrib2dv');
+  glVertexAttrib2f := load('glVertexAttrib2f');
+  glVertexAttrib2fv := load('glVertexAttrib2fv');
+  glVertexAttrib2s := load('glVertexAttrib2s');
+  glVertexAttrib2sv := load('glVertexAttrib2sv');
+  glVertexAttrib3d := load('glVertexAttrib3d');
+  glVertexAttrib3dv := load('glVertexAttrib3dv');
+  glVertexAttrib3f := load('glVertexAttrib3f');
+  glVertexAttrib3fv := load('glVertexAttrib3fv');
+  glVertexAttrib3s := load('glVertexAttrib3s');
+  glVertexAttrib3sv := load('glVertexAttrib3sv');
+  glVertexAttrib4Nbv := load('glVertexAttrib4Nbv');
+  glVertexAttrib4Niv := load('glVertexAttrib4Niv');
+  glVertexAttrib4Nsv := load('glVertexAttrib4Nsv');
+  glVertexAttrib4Nub := load('glVertexAttrib4Nub');
+  glVertexAttrib4Nubv := load('glVertexAttrib4Nubv');
+  glVertexAttrib4Nuiv := load('glVertexAttrib4Nuiv');
+  glVertexAttrib4Nusv := load('glVertexAttrib4Nusv');
+  glVertexAttrib4bv := load('glVertexAttrib4bv');
+  glVertexAttrib4d := load('glVertexAttrib4d');
+  glVertexAttrib4dv := load('glVertexAttrib4dv');
+  glVertexAttrib4f := load('glVertexAttrib4f');
+  glVertexAttrib4fv := load('glVertexAttrib4fv');
+  glVertexAttrib4iv := load('glVertexAttrib4iv');
+  glVertexAttrib4s := load('glVertexAttrib4s');
+  glVertexAttrib4sv := load('glVertexAttrib4sv');
+  glVertexAttrib4ubv := load('glVertexAttrib4ubv');
+  glVertexAttrib4uiv := load('glVertexAttrib4uiv');
+  glVertexAttrib4usv := load('glVertexAttrib4usv');
+  glVertexAttribPointer := load('glVertexAttribPointer');
+End;
+
+Procedure load_GL_VERSION_2_1(load: TLoadProc);
+Begin
+  If Not GLAD_GL_VERSION_2_1 Then exit;
+  glUniformMatrix2x3fv := load('glUniformMatrix2x3fv');
+  glUniformMatrix3x2fv := load('glUniformMatrix3x2fv');
+  glUniformMatrix2x4fv := load('glUniformMatrix2x4fv');
+  glUniformMatrix4x2fv := load('glUniformMatrix4x2fv');
+  glUniformMatrix3x4fv := load('glUniformMatrix3x4fv');
+  glUniformMatrix4x3fv := load('glUniformMatrix4x3fv');
+End;
+
+Procedure load_GL_VERSION_3_0(load: TLoadProc);
+Begin
+  If Not GLAD_GL_VERSION_3_0 Then exit;
+  glColorMaski := load('glColorMaski');
+  glGetBooleani_v := load('glGetBooleani_v');
+  glGetIntegeri_v := load('glGetIntegeri_v');
+  glEnablei := load('glEnablei');
+  glDisablei := load('glDisablei');
+  glIsEnabledi := load('glIsEnabledi');
+  glBeginTransformFeedback := load('glBeginTransformFeedback');
+  glEndTransformFeedback := load('glEndTransformFeedback');
+  glBindBufferRange := load('glBindBufferRange');
+  glBindBufferBase := load('glBindBufferBase');
+  glTransformFeedbackVaryings := load('glTransformFeedbackVaryings');
+  glGetTransformFeedbackVarying := load('glGetTransformFeedbackVarying');
+  glClampColor := load('glClampColor');
+  glBeginConditionalRender := load('glBeginConditionalRender');
+  glEndConditionalRender := load('glEndConditionalRender');
+  glVertexAttribIPointer := load('glVertexAttribIPointer');
+  glGetVertexAttribIiv := load('glGetVertexAttribIiv');
+  glGetVertexAttribIuiv := load('glGetVertexAttribIuiv');
+  glVertexAttribI1i := load('glVertexAttribI1i');
+  glVertexAttribI2i := load('glVertexAttribI2i');
+  glVertexAttribI3i := load('glVertexAttribI3i');
+  glVertexAttribI4i := load('glVertexAttribI4i');
+  glVertexAttribI1ui := load('glVertexAttribI1ui');
+  glVertexAttribI2ui := load('glVertexAttribI2ui');
+  glVertexAttribI3ui := load('glVertexAttribI3ui');
+  glVertexAttribI4ui := load('glVertexAttribI4ui');
+  glVertexAttribI1iv := load('glVertexAttribI1iv');
+  glVertexAttribI2iv := load('glVertexAttribI2iv');
+  glVertexAttribI3iv := load('glVertexAttribI3iv');
+  glVertexAttribI4iv := load('glVertexAttribI4iv');
+  glVertexAttribI1uiv := load('glVertexAttribI1uiv');
+  glVertexAttribI2uiv := load('glVertexAttribI2uiv');
+  glVertexAttribI3uiv := load('glVertexAttribI3uiv');
+  glVertexAttribI4uiv := load('glVertexAttribI4uiv');
+  glVertexAttribI4bv := load('glVertexAttribI4bv');
+  glVertexAttribI4sv := load('glVertexAttribI4sv');
+  glVertexAttribI4ubv := load('glVertexAttribI4ubv');
+  glVertexAttribI4usv := load('glVertexAttribI4usv');
+  glGetUniformuiv := load('glGetUniformuiv');
+  glBindFragDataLocation := load('glBindFragDataLocation');
+  glGetFragDataLocation := load('glGetFragDataLocation');
+  glUniform1ui := load('glUniform1ui');
+  glUniform2ui := load('glUniform2ui');
+  glUniform3ui := load('glUniform3ui');
+  glUniform4ui := load('glUniform4ui');
+  glUniform1uiv := load('glUniform1uiv');
+  glUniform2uiv := load('glUniform2uiv');
+  glUniform3uiv := load('glUniform3uiv');
+  glUniform4uiv := load('glUniform4uiv');
+  glTexParameterIiv := load('glTexParameterIiv');
+  glTexParameterIuiv := load('glTexParameterIuiv');
+  glGetTexParameterIiv := load('glGetTexParameterIiv');
+  glGetTexParameterIuiv := load('glGetTexParameterIuiv');
+  glClearBufferiv := load('glClearBufferiv');
+  glClearBufferuiv := load('glClearBufferuiv');
+  glClearBufferfv := load('glClearBufferfv');
+  glClearBufferfi := load('glClearBufferfi');
+  glGetStringi := load('glGetStringi');
+  glIsRenderbuffer := load('glIsRenderbuffer');
+  glBindRenderbuffer := load('glBindRenderbuffer');
+  glDeleteRenderbuffers := load('glDeleteRenderbuffers');
+  glGenRenderbuffers := load('glGenRenderbuffers');
+  glRenderbufferStorage := load('glRenderbufferStorage');
+  glGetRenderbufferParameteriv := load('glGetRenderbufferParameteriv');
+  glIsFramebuffer := load('glIsFramebuffer');
+  glBindFramebuffer := load('glBindFramebuffer');
+  glDeleteFramebuffers := load('glDeleteFramebuffers');
+  glGenFramebuffers := load('glGenFramebuffers');
+  glCheckFramebufferStatus := load('glCheckFramebufferStatus');
+  glFramebufferTexture1D := load('glFramebufferTexture1D');
+  glFramebufferTexture2D := load('glFramebufferTexture2D');
+  glFramebufferTexture3D := load('glFramebufferTexture3D');
+  glFramebufferRenderbuffer := load('glFramebufferRenderbuffer');
+  glGetFramebufferAttachmentParameteriv := load('glGetFramebufferAttachmentParameteriv');
+  glGenerateMipmap := load('glGenerateMipmap');
+  glBlitFramebuffer := load('glBlitFramebuffer');
+  glRenderbufferStorageMultisample := load('glRenderbufferStorageMultisample');
+  glFramebufferTextureLayer := load('glFramebufferTextureLayer');
+  glMapBufferRange := load('glMapBufferRange');
+  glFlushMappedBufferRange := load('glFlushMappedBufferRange');
+  glBindVertexArray := load('glBindVertexArray');
+  glDeleteVertexArrays := load('glDeleteVertexArrays');
+  glGenVertexArrays := load('glGenVertexArrays');
+  glIsVertexArray := load('glIsVertexArray');
+End;
+
+Procedure findExtensionsGL();
+Begin
+End;
+
+Procedure findCoreGL(glVersion: string);
+{ Thank you @elmindreda
+  https://github.com/elmindreda/greg/blob/master/templates/greg.c.in//L176
+  https://github.com/glfw/glfw/blob/master/src/context.c//L36 }
+Const
+  prefixes: Array[0..2] Of string = ('OpenGL ES-CM ', 'OpenGL ES-CL ', 'OpenGL ES ');
+Var
+  version, p: string;
+  major, minor: integer;
+Begin
+  version := glVersion;
+  For p In prefixes Do
+    If LeftStr(version, length(p)) = p Then
+    Begin
+      version := StringReplace(version, p, '', [rfReplaceAll]);
+      break;
+    End;
+
+  major := Ord(version[1]) - Ord('0');
+  minor := Ord(version[3]) - Ord('0');
+
+  glVersionMajor := major;
+  glVersionMinor := minor;
+
+  GLAD_GL_VERSION_1_0 := ((major = 1) And (minor >= 0)) Or (major > 1);
+  GLAD_GL_VERSION_1_1 := ((major = 1) And (minor >= 1)) Or (major > 1);
+  GLAD_GL_VERSION_1_2 := ((major = 1) And (minor >= 2)) Or (major > 1);
+  GLAD_GL_VERSION_1_3 := ((major = 1) And (minor >= 3)) Or (major > 1);
+  GLAD_GL_VERSION_1_4 := ((major = 1) And (minor >= 4)) Or (major > 1);
+  GLAD_GL_VERSION_1_5 := ((major = 1) And (minor >= 5)) Or (major > 1);
+  GLAD_GL_VERSION_2_0 := ((major = 2) And (minor >= 0)) Or (major > 2);
+  GLAD_GL_VERSION_2_1 := ((major = 2) And (minor >= 1)) Or (major > 2);
+  GLAD_GL_VERSION_3_0 := ((major = 3) And (minor >= 0)) Or (major > 3);
+End;
+
+Function gladLoadGL(load: TLoadProc): boolean;
+Var
+  glVersion: PAnsiChar;
+Begin
+  glGetString := load('glGetString');
+  If Not Assigned(glGetString) Then exit(False);
+  glVersion := PAnsiChar(glGetString(GL_VERSION));
+  If glVersion = nil Then exit(False);
+
+  findCoreGL(glVersion);
+  load_GL_VERSION_1_0(load);
+  load_GL_VERSION_1_1(load);
+  load_GL_VERSION_1_2(load);
+  load_GL_VERSION_1_3(load);
+  load_GL_VERSION_1_4(load);
+  load_GL_VERSION_1_5(load);
+  load_GL_VERSION_2_0(load);
+  load_GL_VERSION_2_1(load);
+  load_GL_VERSION_3_0(load);
+
+  findExtensionsGL();
+
+  Result := (glVersionMajor <> 0) Or (glVersionMinor <> 0);
+End;
+
+End.

+ 101 - 0
demo/imgui_extra.pas

@@ -0,0 +1,101 @@
+{
+  FreePascal bindings for ImGui
+
+  Copyright (C) 2023 Coldzer0 <Coldzer0 [at] protonmail.ch>
+
+  This program is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, version 3 of the License.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+}
+{
+  code from https://github.com/dpethes/imgui-pas
+  Additional imgui related code that may come in handy, mostly code samples from various sources
+}
+unit imgui_extra;
+
+{$IFDEF FPC}
+  {$mode objfpc}{$H+}{$J-}
+{$ENDIF}
+
+interface
+
+uses
+  PasImGui.Enums,
+  PasImGui.Types,
+  PasImGui;
+
+{
+  code from procedural's GpuLib - https://github.com/procedural/gpulib/
+  referenced in https://github.com/ocornut/imgui/issues/707
+}
+procedure imgui_easy_theming(color_for_text, color_for_head, color_for_area, color_for_body, color_for_pops: ImVec3);
+procedure SetupImGuiStyle2();
+
+implementation
+
+procedure imgui_easy_theming(color_for_text, color_for_head, color_for_area, color_for_body, color_for_pops: ImVec3);
+var
+  style: PImGuiStyle;
+begin
+  style := ImGui.GetStyle();
+  style^.Colors[Ord(ImGuiCol_Text)] := ImVec4.New( color_for_text.x, color_for_text.y, color_for_text.z, 1.00 );
+  style^.Colors[Ord(ImGuiCol_TextDisabled)] := ImVec4.New( color_for_text.x, color_for_text.y, color_for_text.z, 0.58 );
+  style^.Colors[Ord(ImGuiCol_WindowBg)] := ImVec4.New( color_for_body.x, color_for_body.y, color_for_body.z, 0.95 );
+  style^.Colors[Ord(ImGuiCol_ChildBg)] := ImVec4.New( color_for_area.x, color_for_area.y, color_for_area.z, 0.58 );
+  style^.Colors[Ord(ImGuiCol_Border)] := ImVec4.New( color_for_body.x, color_for_body.y, color_for_body.z, 0.00 );
+  style^.Colors[Ord(ImGuiCol_BorderShadow)] := ImVec4.New( color_for_body.x, color_for_body.y, color_for_body.z, 0.00 );
+  style^.Colors[Ord(ImGuiCol_FrameBg)] := ImVec4.New( color_for_area.x, color_for_area.y, color_for_area.z, 1.00 );
+  style^.Colors[Ord(ImGuiCol_FrameBgHovered)] := ImVec4.New( color_for_head.x, color_for_head.y, color_for_head.z, 0.78 );
+  style^.Colors[Ord(ImGuiCol_FrameBgActive)] := ImVec4.New( color_for_head.x, color_for_head.y, color_for_head.z, 1.00 );
+  style^.Colors[Ord(ImGuiCol_TitleBg)] := ImVec4.New( color_for_area.x, color_for_area.y, color_for_area.z, 1.00 );
+  style^.Colors[Ord(ImGuiCol_TitleBgCollapsed)] := ImVec4.New( color_for_area.x, color_for_area.y, color_for_area.z, 0.75 );
+  style^.Colors[Ord(ImGuiCol_TitleBgActive)] := ImVec4.New( color_for_head.x, color_for_head.y, color_for_head.z, 1.00 );
+  style^.Colors[Ord(ImGuiCol_MenuBarBg)] := ImVec4.New( color_for_area.x, color_for_area.y, color_for_area.z, 0.47 );
+  style^.Colors[Ord(ImGuiCol_ScrollbarBg)] := ImVec4.New( color_for_area.x, color_for_area.y, color_for_area.z, 1.00 );
+  style^.Colors[Ord(ImGuiCol_ScrollbarGrab)] := ImVec4.New( color_for_head.x, color_for_head.y, color_for_head.z, 0.21 );
+  style^.Colors[Ord(ImGuiCol_ScrollbarGrabHovered)] := ImVec4.New( color_for_head.x, color_for_head.y, color_for_head.z, 0.78 );
+  style^.Colors[Ord(ImGuiCol_ScrollbarGrabActive)] := ImVec4.New( color_for_head.x, color_for_head.y, color_for_head.z, 1.00 );
+  style^.Colors[Ord(ImGuiCol_CheckMark)] := ImVec4.New( color_for_head.x, color_for_head.y, color_for_head.z, 0.80 );
+  style^.Colors[Ord(ImGuiCol_SliderGrab)] := ImVec4.New( color_for_head.x, color_for_head.y, color_for_head.z, 0.50 );
+  style^.Colors[Ord(ImGuiCol_SliderGrabActive)] := ImVec4.New( color_for_head.x, color_for_head.y, color_for_head.z, 1.00 );
+  style^.Colors[Ord(ImGuiCol_Button)] := ImVec4.New( color_for_head.x, color_for_head.y, color_for_head.z, 0.50 );
+  style^.Colors[Ord(ImGuiCol_ButtonHovered)] := ImVec4.New( color_for_head.x, color_for_head.y, color_for_head.z, 0.86 );
+  style^.Colors[Ord(ImGuiCol_ButtonActive)] := ImVec4.New( color_for_head.x, color_for_head.y, color_for_head.z, 1.00 );
+  style^.Colors[Ord(ImGuiCol_Header)] := ImVec4.New( color_for_head.x, color_for_head.y, color_for_head.z, 0.76 );
+  style^.Colors[Ord(ImGuiCol_HeaderHovered)] := ImVec4.New( color_for_head.x, color_for_head.y, color_for_head.z, 0.86 );
+  style^.Colors[Ord(ImGuiCol_HeaderActive)] := ImVec4.New( color_for_head.x, color_for_head.y, color_for_head.z, 1.00 );
+  style^.Colors[Ord(ImGuiCol_Separator)] := ImVec4.New( color_for_head.x, color_for_head.y, color_for_head.z, 0.32 );
+  style^.Colors[Ord(ImGuiCol_SeparatorHovered)] := ImVec4.New( color_for_head.x, color_for_head.y, color_for_head.z, 0.78 );
+  style^.Colors[Ord(ImGuiCol_SeparatorActive)] := ImVec4.New( color_for_head.x, color_for_head.y, color_for_head.z, 1.00 );
+  style^.Colors[Ord(ImGuiCol_ResizeGrip)] := ImVec4.New( color_for_head.x, color_for_head.y, color_for_head.z, 0.15 );
+  style^.Colors[Ord(ImGuiCol_ResizeGripHovered)] := ImVec4.New( color_for_head.x, color_for_head.y, color_for_head.z, 0.78 );
+  style^.Colors[Ord(ImGuiCol_ResizeGripActive)] := ImVec4.New( color_for_head.x, color_for_head.y, color_for_head.z, 1.00 );
+  style^.Colors[Ord(ImGuiCol_PlotLines)] := ImVec4.New( color_for_text.x, color_for_text.y, color_for_text.z, 0.63 );
+  style^.Colors[Ord(ImGuiCol_PlotLinesHovered)] := ImVec4.New( color_for_head.x, color_for_head.y, color_for_head.z, 1.00 );
+  style^.Colors[Ord(ImGuiCol_PlotHistogram)] := ImVec4.New( color_for_text.x, color_for_text.y, color_for_text.z, 0.63 );
+  style^.Colors[Ord(ImGuiCol_PlotHistogramHovered)] := ImVec4.New( color_for_head.x, color_for_head.y, color_for_head.z, 1.00 );
+  style^.Colors[Ord(ImGuiCol_TextSelectedBg)] := ImVec4.New( color_for_head.x, color_for_head.y, color_for_head.z, 0.43 );
+  style^.Colors[Ord(ImGuiCol_PopupBg)] := ImVec4.New( color_for_pops.x, color_for_pops.y, color_for_pops.z, 0.92 );
+  style^.Colors[Ord(ImGuiCol_ModalWindowDimBg)] := ImVec4.New( color_for_area.x, color_for_area.y, color_for_area.z, 0.73 );
+end;
+
+
+procedure SetupImGuiStyle2();
+var
+  color_for_text, color_for_head, color_for_area, color_for_body, color_for_pops: ImVec3;
+begin
+  color_for_text := ImVec3.New(236.0 / 255.0, 240.0 / 255.0, 241.0 / 255.0);
+  color_for_head := ImVec3.New(41.0 / 255.0, 128.0 / 255.0, 185.0 / 255.0);
+  color_for_area := ImVec3.New(57.0 / 255.0, 79.0 / 255.0, 105.0 / 255.0);
+  color_for_body := ImVec3.New(44.0 / 255.0, 62.0 / 255.0, 80.0 / 255.0);
+  color_for_pops := ImVec3.New(33.0 / 255.0, 46.0 / 255.0, 60.0 / 255.0);
+  imgui_easy_theming(color_for_text, color_for_head, color_for_area, color_for_body, color_for_pops);
+end;
+
+end.
+

+ 347 - 0
demo/testwindow.pas

@@ -0,0 +1,347 @@
+{
+  FreePascal bindings for ImGui
+
+  Copyright (C) 2023 Coldzer0 <Coldzer0 [at] protonmail.ch>
+
+  This program is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, version 3 of the License.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+}
+
+{
+  Code From https://github.com/dpethes/imgui-pas - Updated by Coldzer0
+
+  Partial translation of imgui demo / ShowTestWindow
+  While you're probably better off with the original version as it's way more extensive,
+  this is good as
+    * a test case for the bindings or
+    * a quick guide if something isn't translated in a straightforward way
+}
+Unit TestWindow;
+{$mode objfpc}{$H+}
+
+Interface
+
+Uses
+  Classes,
+  SysUtils,
+  PasImGui,
+  PasImGui.Enums,
+  PasImGui.Types;
+
+Type
+
+  { TTestWindow }
+  TTestWindow = Class
+  Private
+    show_app_main_menu_bar: boolean;
+    show_app_console: boolean;
+    show_app_log: boolean;
+    show_app_layout: boolean;
+    show_app_property_editor: boolean;
+    show_app_long_text: boolean;
+    show_app_auto_resize: boolean;
+    show_app_constrained_resize: boolean;
+    show_app_fixed_overlay: boolean;
+    show_app_manipulating_window_title: boolean;
+    show_app_custom_rendering: boolean;
+    show_app_style_editor: boolean;
+
+    show_app_metrics: boolean;
+    show_app_about: boolean;
+
+    no_titlebar: boolean;
+    no_resize: boolean;
+    no_move: boolean;
+    no_scrollbar: boolean;
+    no_collapse: boolean;
+    no_menu: boolean;
+
+    Procedure Trees;
+  Public
+    Constructor Create;
+    Procedure Show(Var p_open: boolean);
+  End;
+
+Implementation
+
+Procedure ShowHelpMarker(Const desc: string);
+Begin
+  ImGui.TextDisabled('(?)');
+  If (ImGui.IsItemHovered()) Then
+  Begin
+    ImGui.BeginTooltip();
+    ImGui.PushTextWrapPos(450.0);
+    ImGui.TextUnformatted(desc);
+    ImGui.PopTextWrapPos();
+    ImGui.EndTooltip();
+  End;
+End;
+
+{ TTestWindow }
+
+Procedure TTestWindow.Trees;
+Const  //static vars
+  align_label_with_current_x_position: boolean = False;
+  selection_mask: integer = 1 << 2;
+  // Dumb representation of what may be user-side selection state. You may carry selection state inside or outside your objects in whatever format you see fit.
+Var
+  node_open: Boolean;
+  node_clicked: Integer;
+  i: Integer;
+  node_flags: ImGuiTreeNodeFlags;
+Begin
+  If (ImGui.TreeNode('Basic trees')) Then
+  Begin
+    For i := 0 To 4 Do
+      If (ImGui.TreeNode(PImGuiID(i), 'Child %d', [i])) Then
+      Begin
+        ImGui.Text('blah blah');
+        ImGui.SameLine();
+        If (ImGui.SmallButton('print')) Then
+        begin
+          ImGui.LogText('Child ' + i.ToString + ' pressed');
+          Imgui.LogFinish;
+        end;
+        ImGui.TreePop();
+      End;
+    ImGui.TreePop();
+  End;
+
+  If (ImGui.TreeNode('Advanced, with Selectable nodes')) Then
+  Begin
+    ShowHelpMarker('This is a more standard looking tree with selectable nodes.' +
+      LineEnding +
+      'Click to select, CTRL+Click to toggle, click on arrows or double-click to open.');
+    ImGui.Checkbox('Align label with current X position)',
+      @align_label_with_current_x_position);
+    ImGui.Text('Hello!');
+    If (align_label_with_current_x_position) Then
+      ImGui.Unindent(ImGui.GetTreeNodeToLabelSpacing());
+    node_clicked := -1;
+    // Temporary storage of what node we have clicked to process selection at the end of the loop. May be a pointer to your own node type, etc.
+    ImGui.PushStyleVar(ImGuiStyleVar_IndentSpacing, ImGui.GetFontSize() * 3);
+    // Increase spacing to differentiate leaves from expanded contents.
+    For i := 0 To 5 Do
+    Begin
+      // Disable the default open on single-click behavior and pass in Selected flag according to our selection state.
+      //ImGuiTreeNodeFlags node_flags := ImGuiTreeNodeFlags_OpenOnArrow | ImGuiTreeNodeFlags_OpenOnDoubleClick | ((selection_mask & (1 << i)) ? ImGuiTreeNodeFlags_Selected : 0);
+      node_flags := ImGuiTreeNodeFlags_OpenOnArrow Or
+        ImGuiTreeNodeFlags_OpenOnDoubleClick;
+      If (selection_mask And (1 << i)) > 0 Then
+        node_flags := node_flags Or ImGuiTreeNodeFlags_Selected;
+      If (i < 3) Then
+      Begin
+        // Node
+        node_open := ImGui.TreeNodeEx(PImGuiID(i), node_flags,
+          'Selectable Node %d', [i]);
+        If (ImGui.IsItemClicked()) Then
+          node_clicked := i;
+        If (node_open) Then
+        Begin
+          ImGui.Text('Blah blah' + LineEnding + 'Blah Blah');
+          ImGui.TreePop();
+        End;
+      End
+      Else
+      Begin
+        // Leaf: The only reason we have a TreeNode at all is to allow selection of the leaf. Otherwise we can use BulletText() or TreeAdvanceToLabelPos()+Text().
+        node_flags := node_flags Or ImGuiTreeNodeFlags_Leaf Or
+          ImGuiTreeNodeFlags_NoTreePushOnOpen;
+        ImGui.TreeNodeEx(PImGuiID(i), node_flags, 'Selectable Leaf %d', [i]);
+        If (ImGui.IsItemClicked()) Then
+          node_clicked := i;
+      End;
+    End;
+    If (node_clicked <> -1) Then
+    Begin
+      // Update selection state. Process outside of tree loop to avoid visual inconsistencies during the clicking-frame.
+      If (ImGui.GetIO()^.KeyCtrl) Then
+        selection_mask :=
+          selection_mask Xor (1 << node_clicked)          // CTRL+click to toggle
+      Else
+        //if (!(selection_mask & (1 << node_clicked))) // Depending on selection behavior you want, this commented bit preserve selection when clicking on item that is part of the selection
+        selection_mask := (1 << node_clicked);           // Click to single-select
+    End;
+    ImGui.PopStyleVar();
+    If (align_label_with_current_x_position) Then
+      ImGui.Indent(ImGui.GetTreeNodeToLabelSpacing());
+    ImGui.TreePop();
+  End;
+  ImGui.TreePop();
+End;
+
+Constructor TTestWindow.Create;
+Begin
+  show_app_main_menu_bar := False;
+  show_app_console := False;
+  show_app_log := False;
+  show_app_layout := False;
+  show_app_property_editor := False;
+  show_app_long_text := False;
+  show_app_auto_resize := False;
+  show_app_constrained_resize := False;
+  show_app_fixed_overlay := False;
+  show_app_manipulating_window_title := False;
+  show_app_custom_rendering := False;
+  show_app_style_editor := False;
+
+  show_app_metrics := False;
+  show_app_about := False;
+
+  no_titlebar := False;
+  no_resize := False;
+  no_move := False;
+  no_scrollbar := False;
+  no_collapse := False;
+  no_menu := False;
+End;
+
+Procedure TTestWindow.Show(Var p_open: boolean);
+Var
+  io: PImGuiIO;
+  window_flags: ImGuiWindowFlags = ImGuiWindowFlags_None;
+  draw_list: PImDrawList;
+  value_raw, value_with_lock_threshold, mouse_delta: ImVec2;
+Begin
+  // Demonstrate the various window flags. Typically you would just use the default.
+  If (no_titlebar) Then window_flags := window_flags Or ImGuiWindowFlags_NoTitleBar;
+  If (no_resize) Then window_flags := window_flags Or ImGuiWindowFlags_NoResize;
+  If (no_move) Then window_flags := window_flags Or ImGuiWindowFlags_NoMove;
+  If (no_scrollbar) Then window_flags := window_flags Or ImGuiWindowFlags_NoScrollbar;
+  If (no_collapse) Then window_flags := window_flags Or ImGuiWindowFlags_NoCollapse;
+  If (Not no_menu) Then window_flags := window_flags Or ImGuiWindowFlags_MenuBar;
+  ImGui.SetNextWindowSize(ImVec2.New(550, 680), ImGuiCond_FirstUseEver);
+  If Not ImGui.Begin_('ImGui Demo (FreePascal version)', @p_open, window_flags) Then
+  Begin
+    // Early out if the window is collapsed, as an optimization.
+    ImGui.End_;
+    exit;
+  End;
+
+  //ImGui::PushItemWidth(ImGui::GetWindowWidth() * 0.65f);    // 2/3 of the space for widget and 1/3 for labels
+  ImGui.PushItemWidth(ImGui.GetWindowWidth() * 0.65);
+  // Right align, keep 140 pixels for labels
+
+  ImGui.Text('Dear ImGui says hello.');
+
+  // Menu
+  If (ImGui.BeginMenuBar()) Then
+  Begin
+    If (ImGui.BeginMenu('Menu')) Then
+    Begin
+      ImGui.MenuItem('Open');
+      ImGui.MenuItem('Close');
+      ImGui.EndMenu();
+    End;
+    If (ImGui.BeginMenu('Examples')) Then
+    Begin
+      ImGui.MenuItem('Main menu bar', nil, @show_app_main_menu_bar);
+      ImGui.MenuItem('Console', nil, @show_app_console);
+      ImGui.MenuItem('Log', nil, @show_app_log);
+      ImGui.MenuItem('Simple layout', nil, @show_app_layout);
+      ImGui.MenuItem('Property editor', nil, @show_app_property_editor);
+      ImGui.MenuItem('Long text display', nil, @show_app_long_text);
+      ImGui.MenuItem('Auto-resizing window', nil, @show_app_auto_resize);
+      ImGui.MenuItem('Constrained-resizing window', nil,
+        @show_app_constrained_resize);
+      ImGui.MenuItem('Simple overlay', nil, @show_app_fixed_overlay);
+      ImGui.MenuItem('Manipulating window title', nil,
+        @show_app_manipulating_window_title);
+      ImGui.MenuItem('Custom rendering', nil, @show_app_custom_rendering);
+      ImGui.EndMenu();
+    End;
+    If (ImGui.BeginMenu('Help')) Then
+    Begin
+      ImGui.MenuItem('Metrics', nil, @show_app_metrics);
+      ImGui.MenuItem('Style Editor', nil, @show_app_style_editor);
+      ImGui.MenuItem('About ImGui', nil, @show_app_about);
+      ImGui.EndMenu();
+    End;
+    ImGui.EndMenuBar();
+  End;
+
+  ImGui.Spacing();
+  If ImGui.CollapsingHeader('Help') Then
+  Begin
+    ImGui.TextWrapped(
+      'This window is being created by the ShowTestWindow() function. Please refer to the code for programming reference.'
+      +
+      LineEnding + LineEnding + 'User Guide:');
+    ImGui.ShowUserGuide();
+  End;
+
+  If ImGui.CollapsingHeader('Window options') Then
+  Begin
+    ImGui.Checkbox('No titlebar', @no_titlebar);
+    ImGui.SameLine(150);
+    ImGui.Checkbox('No resize', @no_resize);
+    ImGui.Checkbox('No move', @no_move);
+    ImGui.SameLine(150);
+    ImGui.Checkbox('No scrollbar', @no_scrollbar);
+    ImGui.SameLine(300);
+    ImGui.Checkbox('No collapse', @no_collapse);
+    ImGui.Checkbox('No menu', @no_menu);
+
+    If ImGui.TreeNode('Style') Then
+    Begin
+      ImGui.ShowStyleEditor(Imgui.GetStyle());
+      //this is useful to have, but doesn't need to be translated as an example
+      ImGui.TreePop();
+    End;
+
+    If ImGui.TreeNode('Logging') Then
+    Begin
+      ImGui.TextWrapped(
+        'The logging API redirects all text output so you can easily capture the content of a window or a block. Tree nodes can be automatically expanded. You can also call ImGui.LogText() to output directly to the log without a visual output.');
+      ImGui.LogButtons();
+      ImGui.TreePop();
+    End;
+  End;
+
+  If ImGui.CollapsingHeader('Widgets') Then
+  Begin
+    If ImGui.TreeNode('Trees') Then
+      Trees;
+  End;
+
+  If ImGui.CollapsingHeader('Keyboard, Mouse & Focus') Then
+  Begin
+    If ImGui.TreeNode('Dragging') Then
+    Begin
+      ImGui.TextWrapped(
+        'You can use ImGui::GetMouseDragDelta(0) to query for the dragged amount on any widget.');
+      ImGui.Button('Drag Me');
+      If ImGui.IsItemActive() Then
+      Begin
+        io := ImGui.GetIO();
+        // Draw a line between the button and the mouse cursor
+        draw_list := ImGui.GetWindowDrawList();
+        draw_list^.PushClipRectFullScreen;
+        draw_list^.AddLine(io^.MouseClickedPos[0], io^.MousePos,
+          ImGui.GetColorU32Vec(ImGui.GetStyle()^.Colors[Ord(ImGuiCol_Button)]),
+          4.0);
+        draw_list^.PopClipRect;
+
+        value_raw := ImGui.GetMouseDragDelta(ImGuiMouseButton_Left, 0.0);
+        value_with_lock_threshold := ImGui.GetMouseDragDelta(ImGuiMouseButton_Left);
+        mouse_delta := ImGui.GetIO()^.MouseDelta;
+        ImGui.SameLine();
+        ImGui.Text(
+          'Raw (%.1f, %.1f), WithLockThresold (%.1f, %.1f), MouseDelta (%.1f, %.1f)',
+          [value_raw.x, value_raw.y, value_with_lock_threshold.x,
+          value_with_lock_threshold.y, mouse_delta.x, mouse_delta.y]);
+      End;
+      ImGui.TreePop();
+    End;
+  End;
+
+  ImGui.End_;
+End;
+
+End.