Răsfoiți Sursa

Merge remote-tracking branch 'refs/remotes/raysan5/develop' into develop

Joshua Reisenauer 9 ani în urmă
părinte
comite
ae6adb173b
43 a modificat fișierele cu 9586 adăugiri și 1596 ștergeri
  1. BIN
      examples/oculus_glfw_sample/LibOVRRT32_1.dll
  2. 6 6
      examples/oculus_glfw_sample/OculusSDK/LibOVR/Include/Extras/OVR_CAPI_Util.h
  3. 2 2
      examples/oculus_glfw_sample/OculusSDK/LibOVR/Include/Extras/OVR_Math.h
  4. 20 7
      examples/oculus_glfw_sample/OculusSDK/LibOVR/Include/OVR_CAPI.h
  5. 26 2
      examples/oculus_glfw_sample/OculusSDK/LibOVR/Include/OVR_CAPI_D3D.h
  6. 23 5
      examples/oculus_glfw_sample/OculusSDK/LibOVR/Include/OVR_ErrorCode.h
  7. 1 1
      examples/oculus_glfw_sample/OculusSDK/LibOVR/Include/OVR_Version.h
  8. 0 9
      examples/oculus_glfw_sample/glad.c
  9. 7678 0
      examples/oculus_glfw_sample/glad.h
  10. 492 237
      examples/oculus_glfw_sample/oculus_glfw_sample.c
  11. 0 498
      examples/oculus_glfw_sample/oculus_glfw_sample.old.c
  12. 0 0
      examples/oculus_glfw_sample/raylib_OculusRiftCV1_test01.png
  13. BIN
      examples/oculus_glfw_sample/raylib_OculusRiftCV1_test02.png
  14. BIN
      examples/oculus_glfw_sample/raylib_OculusRiftCV1_test03.png
  15. 309 35
      examples/oculus_glfw_sample/raylib_rlgl_standalone.c
  16. 19 1
      examples/oculus_glfw_sample/raymath.h
  17. 483 441
      examples/oculus_glfw_sample/rlgl.c
  18. 90 64
      examples/oculus_glfw_sample/rlgl.h
  19. 2 2
      examples/resources/shaders/glsl330/grayscale.fs
  20. 8 7
      examples/resources/shaders/standard.fs
  21. 7 5
      examples/shaders_custom_uniform.c
  22. 7 5
      examples/shaders_postprocessing.c
  23. 9 9
      examples/shaders_shapes_textures.c
  24. 2 2
      examples/shaders_standard_lighting.c
  25. 13 11
      examples/textures_particles_trail_blending.c
  26. 7 6
      src/Makefile
  27. 8 8
      src/audio.c
  28. 1 1
      src/camera.c
  29. 9 9
      src/core.c
  30. 5 5
      src/gestures.c
  31. 11 12
      src/models.c
  32. 2 2
      src/physac.c
  33. 101 16
      src/raygui.c
  34. 35 2
      src/raygui.h
  35. 52 53
      src/raylib.h
  36. 1 1
      src/raymath.h
  37. 44 30
      src/rlgl.c
  38. 63 58
      src/rlgl.h
  39. 1 1
      src/shapes.c
  40. 6 6
      src/text.c
  41. 36 30
      src/textures.c
  42. 5 5
      src/utils.c
  43. 2 2
      src/utils.h

BIN
examples/oculus_glfw_sample/LibOVRRT32_1.dll


+ 6 - 6
examples/oculus_glfw_sample/OculusSDK/LibOVR/Include/Extras/OVR_CAPI_Util.h

@@ -137,14 +137,14 @@ OVR_PUBLIC_FUNCTION(ovrMatrix4f) ovrMatrix4f_OrthoSubProjection(ovrMatrix4f proj
 /// Computes offset eye poses based on headPose returned by ovrTrackingState.
 /// Computes offset eye poses based on headPose returned by ovrTrackingState.
 ///
 ///
 /// \param[in] headPose Indicates the HMD position and orientation to use for the calculation.
 /// \param[in] headPose Indicates the HMD position and orientation to use for the calculation.
-/// \param[in] HmdToEyeOffset Can be ovrEyeRenderDesc.HmdToEyeOffset returned from 
+/// \param[in] hmdToEyeOffset Can be ovrEyeRenderDesc.HmdToEyeOffset returned from
 ///            ovr_GetRenderDesc. For monoscopic rendering, use a vector that is the average 
 ///            ovr_GetRenderDesc. For monoscopic rendering, use a vector that is the average 
 ///            of the two vectors for both eyes.
 ///            of the two vectors for both eyes.
 /// \param[out] outEyePoses If outEyePoses are used for rendering, they should be passed to 
 /// \param[out] outEyePoses If outEyePoses are used for rendering, they should be passed to 
 ///             ovr_SubmitFrame in ovrLayerEyeFov::RenderPose or ovrLayerEyeFovDepth::RenderPose.
 ///             ovr_SubmitFrame in ovrLayerEyeFov::RenderPose or ovrLayerEyeFovDepth::RenderPose.
 ///
 ///
 OVR_PUBLIC_FUNCTION(void) ovr_CalcEyePoses(ovrPosef headPose,
 OVR_PUBLIC_FUNCTION(void) ovr_CalcEyePoses(ovrPosef headPose,
-                                           const ovrVector3f HmdToEyeOffset[2],
+                                           const ovrVector3f hmdToEyeOffset[2],
                                            ovrPosef outEyePoses[2]);
                                            ovrPosef outEyePoses[2]);
 
 
 
 
@@ -158,17 +158,17 @@ OVR_PUBLIC_FUNCTION(void) ovr_CalcEyePoses(ovrPosef headPose,
 /// \param[in]  hmd Specifies an ovrSession previously returned by ovr_Create.
 /// \param[in]  hmd Specifies an ovrSession previously returned by ovr_Create.
 /// \param[in]  frameIndex Specifies the targeted frame index, or 0 to refer to one frame after 
 /// \param[in]  frameIndex Specifies the targeted frame index, or 0 to refer to one frame after 
 ///             the last time ovr_SubmitFrame was called.
 ///             the last time ovr_SubmitFrame was called.
-/// \param[in]  HmdToEyeOffset Can be ovrEyeRenderDesc.HmdToEyeOffset returned from 
-///             ovr_GetRenderDesc. For monoscopic rendering, use a vector that is the average 
-///             of the two vectors for both eyes.
 /// \param[in]  latencyMarker Specifies that this call is the point in time where
 /// \param[in]  latencyMarker Specifies that this call is the point in time where
 ///             the "App-to-Mid-Photon" latency timer starts from. If a given ovrLayer
 ///             the "App-to-Mid-Photon" latency timer starts from. If a given ovrLayer
 ///             provides "SensorSampleTimestamp", that will override the value stored here.
 ///             provides "SensorSampleTimestamp", that will override the value stored here.
+/// \param[in]  hmdToEyeOffset Can be ovrEyeRenderDesc.HmdToEyeOffset returned from
+///             ovr_GetRenderDesc. For monoscopic rendering, use a vector that is the average
+///             of the two vectors for both eyes.
 /// \param[out] outEyePoses The predicted eye poses.
 /// \param[out] outEyePoses The predicted eye poses.
 /// \param[out] outSensorSampleTime The time when this function was called. May be NULL, in which case it is ignored.
 /// \param[out] outSensorSampleTime The time when this function was called. May be NULL, in which case it is ignored.
 ///
 ///
 OVR_PUBLIC_FUNCTION(void) ovr_GetEyePoses(ovrSession session, long long frameIndex, ovrBool latencyMarker,
 OVR_PUBLIC_FUNCTION(void) ovr_GetEyePoses(ovrSession session, long long frameIndex, ovrBool latencyMarker,
-                                             const ovrVector3f HmdToEyeOffset[2],
+                                             const ovrVector3f hmdToEyeOffset[2],
                                              ovrPosef outEyePoses[2],
                                              ovrPosef outEyePoses[2],
                                              double* outSensorSampleTime);
                                              double* outSensorSampleTime);
 
 

+ 2 - 2
examples/oculus_glfw_sample/OculusSDK/LibOVR/Include/Extras/OVR_Math.h

@@ -1,7 +1,7 @@
 /********************************************************************************//**
 /********************************************************************************//**
 \file      OVR_Math.h
 \file      OVR_Math.h
 \brief     Implementation of 3D primitives such as vectors, matrices.
 \brief     Implementation of 3D primitives such as vectors, matrices.
-\copyright Copyright 2015 Oculus VR, LLC All Rights reserved.
+\copyright Copyright 2014-2016 Oculus VR, LLC All Rights reserved.
 *************************************************************************************/
 *************************************************************************************/
 
 
 #ifndef OVR_Math_h
 #ifndef OVR_Math_h
@@ -1754,7 +1754,7 @@ public:
         : Rotation(s.Rotation), Translation(s.Translation)
         : Rotation(s.Rotation), Translation(s.Translation)
     {
     {
         // Ensure normalized rotation if converting from float to double
         // Ensure normalized rotation if converting from float to double
-        if (sizeof(T) > sizeof(Math<T>::OtherFloatType))
+        if (sizeof(T) > sizeof(typename Math<T>::OtherFloatType))
             Rotation.Normalize();
             Rotation.Normalize();
     }
     }
 
 

+ 20 - 7
examples/oculus_glfw_sample/OculusSDK/LibOVR/Include/OVR_CAPI.h

@@ -1,7 +1,7 @@
 /********************************************************************************//**
 /********************************************************************************//**
 \file      OVR_CAPI.h
 \file      OVR_CAPI.h
 \brief     C Interface to the Oculus PC SDK tracking and rendering library.
 \brief     C Interface to the Oculus PC SDK tracking and rendering library.
-\copyright Copyright 2014-2016 Oculus VR, LLC All Rights reserved.
+\copyright Copyright 2014 Oculus VR, LLC All Rights reserved.
 ************************************************************************************/
 ************************************************************************************/
 
 
 #ifndef OVR_CAPI_h  //   We don't use version numbers within this name, as all versioned variations of this file are currently mutually exclusive.
 #ifndef OVR_CAPI_h  //   We don't use version numbers within this name, as all versioned variations of this file are currently mutually exclusive.
@@ -687,6 +687,11 @@ typedef enum ovrTextureMiscFlags_
     /// call. This flag requires that RenderTarget binding also be specified.
     /// call. This flag requires that RenderTarget binding also be specified.
     ovrTextureMisc_AllowGenerateMips = 0x0002,
     ovrTextureMisc_AllowGenerateMips = 0x0002,
 
 
+    /// Texture swap chain contains protected content, and requires
+    /// HDCP connection in order to display to HMD. Also prevents
+    /// mirroring or other redirection of any frame containing this contents
+    ovrTextureMisc_ProtectedContent = 0x0004,
+
     ovrTextureMisc_EnumSize = 0x7fffffff  ///< \internal Force type int32_t.
     ovrTextureMisc_EnumSize = 0x7fffffff  ///< \internal Force type int32_t.
 } ovrTextureFlags;
 } ovrTextureFlags;
 
 
@@ -695,7 +700,7 @@ typedef enum ovrTextureMiscFlags_
 /// \see ovr_CreateTextureSwapChainDX
 /// \see ovr_CreateTextureSwapChainDX
 /// \see ovr_CreateTextureSwapChainGL
 /// \see ovr_CreateTextureSwapChainGL
 ///
 ///
-typedef struct
+typedef struct ovrTextureSwapChainDesc_
 {
 {
     ovrTextureType      Type;
     ovrTextureType      Type;
     ovrTextureFormat    Format;
     ovrTextureFormat    Format;
@@ -705,7 +710,7 @@ typedef struct
     int                 MipLevels;
     int                 MipLevels;
     int                 SampleCount;    ///< Current only supported on depth textures
     int                 SampleCount;    ///< Current only supported on depth textures
     ovrBool             StaticImage;    ///< Not buffered in a chain. For images that don't change
     ovrBool             StaticImage;    ///< Not buffered in a chain. For images that don't change
-    unsigned int        MiscFlags;      ///< ovrTextureMiscFlags
+    unsigned int        MiscFlags;      ///< ovrTextureFlags
     unsigned int        BindFlags;      ///< ovrTextureBindFlags. Not used for GL.
     unsigned int        BindFlags;      ///< ovrTextureBindFlags. Not used for GL.
 } ovrTextureSwapChainDesc;
 } ovrTextureSwapChainDesc;
 
 
@@ -714,12 +719,12 @@ typedef struct
 /// \see ovr_CreateMirrorTextureDX
 /// \see ovr_CreateMirrorTextureDX
 /// \see ovr_CreateMirrorTextureGL
 /// \see ovr_CreateMirrorTextureGL
 ///
 ///
-typedef struct
+typedef struct ovrMirrorTextureDesc_
 {
 {
     ovrTextureFormat    Format;
     ovrTextureFormat    Format;
     int                 Width;
     int                 Width;
     int                 Height;
     int                 Height;
-    unsigned int        MiscFlags;      ///< ovrTextureMiscFlags
+    unsigned int        MiscFlags;      ///< ovrTextureFlags
 } ovrMirrorTextureDesc;
 } ovrMirrorTextureDesc;
 
 
 typedef struct ovrTextureSwapChainData* ovrTextureSwapChain;
 typedef struct ovrTextureSwapChainData* ovrTextureSwapChain;
@@ -987,8 +992,8 @@ extern "C" {
 /// Initializes LibOVR
 /// Initializes LibOVR
 ///
 ///
 /// Initialize LibOVR for application usage. This includes finding and loading the LibOVRRT
 /// Initialize LibOVR for application usage. This includes finding and loading the LibOVRRT
-/// shared library. No LibOVR API functions, other than ovr_GetLastErrorInfo, can be called
-/// unless ovr_Initialize succeeds. A successful call to ovr_Initialize must be eventually
+/// shared library. No LibOVR API functions, other than ovr_GetLastErrorInfo and ovr_Detect, can
+/// be called unless ovr_Initialize succeeds. A successful call to ovr_Initialize must be eventually
 /// followed by a call to ovr_Shutdown. ovr_Initialize calls are idempotent.
 /// followed by a call to ovr_Shutdown. ovr_Initialize calls are idempotent.
 /// Calling ovr_Initialize twice does not require two matching calls to ovr_Shutdown.
 /// Calling ovr_Initialize twice does not require two matching calls to ovr_Shutdown.
 /// If already initialized, the return value is ovr_Success.
 /// If already initialized, the return value is ovr_Success.
@@ -1696,6 +1701,14 @@ OVR_PUBLIC_FUNCTION(void) ovr_DestroyMirrorTexture(ovrSession session, ovrMirror
 /// \param[in] pixelsPerDisplayPixel Specifies the ratio of the number of render target pixels
 /// \param[in] pixelsPerDisplayPixel Specifies the ratio of the number of render target pixels
 ///            to display pixels at the center of distortion. 1.0 is the default value. Lower
 ///            to display pixels at the center of distortion. 1.0 is the default value. Lower
 ///            values can improve performance, higher values give improved quality.
 ///            values can improve performance, higher values give improved quality.
+///
+/// <b>Example code</b>
+///     \code{.cpp}
+///         ovrHmdDesc hmdDesc = ovr_GetHmdDesc(session);
+///         ovrSizei eyeSizeLeft  = ovr_GetFovTextureSize(session, ovrEye_Left,  hmdDesc.DefaultEyeFov[ovrEye_Left],  1.0f);
+///         ovrSizei eyeSizeRight = ovr_GetFovTextureSize(session, ovrEye_Right, hmdDesc.DefaultEyeFov[ovrEye_Right], 1.0f);
+///     \endcode
+///
 /// \return Returns the texture width and height size.
 /// \return Returns the texture width and height size.
 ///
 ///
 OVR_PUBLIC_FUNCTION(ovrSizei) ovr_GetFovTextureSize(ovrSession session, ovrEyeType eye, ovrFovPort fov,
 OVR_PUBLIC_FUNCTION(ovrSizei) ovr_GetFovTextureSize(ovrSession session, ovrEyeType eye, ovrFovPort fov,

+ 26 - 2
examples/oculus_glfw_sample/OculusSDK/LibOVR/Include/OVR_CAPI_D3D.h

@@ -67,8 +67,8 @@ OVR_PUBLIC_FUNCTION(ovrResult) ovr_CreateTextureSwapChainDX(ovrSession session,
 ///
 ///
 /// <b>Example code</b>
 /// <b>Example code</b>
 ///     \code{.cpp}
 ///     \code{.cpp}
-///         ovr_GetTextureSwapChainBuffer(session, chain, 0, IID_ID3D11Texture2D, &d3d11Texture);
-///         ovr_GetTextureSwapChainBuffer(session, chain, 1, IID_PPV_ARGS(&dxgiResource));
+///         ovr_GetTextureSwapChainBufferDX(session, chain, 0, IID_ID3D11Texture2D, &d3d11Texture);
+///         ovr_GetTextureSwapChainBufferDX(session, chain, 1, IID_PPV_ARGS(&dxgiResource));
 ///     \endcode
 ///     \endcode
 ///
 ///
 OVR_PUBLIC_FUNCTION(ovrResult) ovr_GetTextureSwapChainBufferDX(ovrSession session,
 OVR_PUBLIC_FUNCTION(ovrResult) ovr_GetTextureSwapChainBufferDX(ovrSession session,
@@ -102,6 +102,21 @@ OVR_PUBLIC_FUNCTION(ovrResult) ovr_GetTextureSwapChainBufferDX(ovrSession sessio
 /// compositor continues to treat is as sRGB. Failure to do so will cause the compositor to apply unexpected gamma conversions leading to 
 /// compositor continues to treat is as sRGB. Failure to do so will cause the compositor to apply unexpected gamma conversions leading to 
 /// gamma-curve artifacts.
 /// gamma-curve artifacts.
 ///
 ///
+///
+/// <b>Example code</b>
+///     \code{.cpp}
+///         ovrMirrorTexture     mirrorTexture = nullptr;
+///         ovrMirrorTextureDesc mirrorDesc = {};
+///         mirrorDesc.Format = OVR_FORMAT_R8G8B8A8_UNORM_SRGB;
+///         mirrorDesc.Width  = mirrorWindowWidth;
+///         mirrorDesc.Height = mirrorWindowHeight;
+///         ovrResult result = ovr_CreateMirrorTextureDX(session, d3d11Device, &mirrorDesc, &mirrorTexture);
+///         [...]
+///         // Destroy the texture when done with it.
+///         ovr_DestroyMirrorTexture(session, mirrorTexture);
+///         mirrorTexture = nullptr;
+///     \endcode
+///
 /// \see ovr_GetMirrorTextureBufferDX
 /// \see ovr_GetMirrorTextureBufferDX
 /// \see ovr_DestroyMirrorTexture
 /// \see ovr_DestroyMirrorTexture
 ///
 ///
@@ -120,6 +135,15 @@ OVR_PUBLIC_FUNCTION(ovrResult) ovr_CreateMirrorTextureDX(ovrSession session,
 /// \return Returns an ovrResult indicating success or failure. In the case of failure, use 
 /// \return Returns an ovrResult indicating success or failure. In the case of failure, use 
 ///         ovr_GetLastErrorInfo to get more information.
 ///         ovr_GetLastErrorInfo to get more information.
 ///
 ///
+/// <b>Example code</b>
+///     \code{.cpp}
+///         ID3D11Texture2D* d3d11Texture = nullptr;
+///         ovr_GetMirrorTextureBufferDX(session, mirrorTexture, IID_PPV_ARGS(&d3d11Texture));
+///         d3d11DeviceContext->CopyResource(d3d11TextureBackBuffer, d3d11Texture);
+///         d3d11Texture->Release();
+///         dxgiSwapChain->Present(0, 0);
+///     \endcode
+///
 OVR_PUBLIC_FUNCTION(ovrResult) ovr_GetMirrorTextureBufferDX(ovrSession session,
 OVR_PUBLIC_FUNCTION(ovrResult) ovr_GetMirrorTextureBufferDX(ovrSession session,
                                                             ovrMirrorTexture mirrorTexture,
                                                             ovrMirrorTexture mirrorTexture,
                                                             IID iid,
                                                             IID iid,

+ 23 - 5
examples/oculus_glfw_sample/OculusSDK/LibOVR/Include/OVR_ErrorCode.h

@@ -91,6 +91,7 @@ typedef enum ovrErrorType_
     ovrError_InvalidHeadsetOrientation  = -1011,   ///< The headset was in an invalid orientation for the requested operation (e.g. vertically oriented during ovr_RecenterPose).
     ovrError_InvalidHeadsetOrientation  = -1011,   ///< The headset was in an invalid orientation for the requested operation (e.g. vertically oriented during ovr_RecenterPose).
     ovrError_ClientSkippedDestroy       = -1012,   ///< The client failed to call ovr_Destroy on an active session before calling ovr_Shutdown. Or the client crashed.
     ovrError_ClientSkippedDestroy       = -1012,   ///< The client failed to call ovr_Destroy on an active session before calling ovr_Shutdown. Or the client crashed.
     ovrError_ClientSkippedShutdown      = -1013,   ///< The client failed to call ovr_Shutdown or the client crashed.
     ovrError_ClientSkippedShutdown      = -1013,   ///< The client failed to call ovr_Shutdown or the client crashed.
+    ovrError_ServiceDeadlockDetected    = -1014,   ///< The service watchdog discovered a deadlock.
 
 
     /* Audio error range, reserved for Audio errors. */
     /* Audio error range, reserved for Audio errors. */
     ovrError_AudioReservedBegin         = -2000,   ///< First Audio error.
     ovrError_AudioReservedBegin         = -2000,   ///< First Audio error.
@@ -140,25 +141,42 @@ typedef enum ovrErrorType_
     ovrError_NordicEnabledNoSync        = -4015,   ///< The nordic indicates that sync is enabled but it is not sending sync pulses
     ovrError_NordicEnabledNoSync        = -4015,   ///< The nordic indicates that sync is enabled but it is not sending sync pulses
     ovrError_NordicSyncNoFrames         = -4016,   ///< It looks like we're getting a sync signal, but no camera frames have been received
     ovrError_NordicSyncNoFrames         = -4016,   ///< It looks like we're getting a sync signal, but no camera frames have been received
     ovrError_CatastrophicFailure        = -4017,   ///< A catastrophic failure has occurred.  We will attempt to recover by resetting the device
     ovrError_CatastrophicFailure        = -4017,   ///< A catastrophic failure has occurred.  We will attempt to recover by resetting the device
+    ovrError_CatastrophicTimeout        = -4018,   ///< The catastrophic recovery has timed out.
+    ovrError_RepeatCatastrophicFail     = -4019,   ///< Catastrophic failure has repeated too many times.
+    ovrError_USBOpenDeviceFailure       = -4020,   ///< Could not open handle for Rift device (likely already in use by another process).
+    ovrError_HMDGeneralFailure          = -4021,   ///< Unexpected HMD issues that don't fit a specific bucket.
 
 
     ovrError_HMDFirmwareMismatch        = -4100,   ///< The HMD Firmware is out of date and is unacceptable.
     ovrError_HMDFirmwareMismatch        = -4100,   ///< The HMD Firmware is out of date and is unacceptable.
     ovrError_TrackerFirmwareMismatch    = -4101,   ///< The sensor Firmware is out of date and is unacceptable.
     ovrError_TrackerFirmwareMismatch    = -4101,   ///< The sensor Firmware is out of date and is unacceptable.
     ovrError_BootloaderDeviceDetected   = -4102,   ///< A bootloader HMD is detected by the service.
     ovrError_BootloaderDeviceDetected   = -4102,   ///< A bootloader HMD is detected by the service.
     ovrError_TrackerCalibrationError    = -4103,   ///< The sensor calibration is missing or incorrect.
     ovrError_TrackerCalibrationError    = -4103,   ///< The sensor calibration is missing or incorrect.
     ovrError_ControllerFirmwareMismatch = -4104,   ///< The controller firmware is out of date and is unacceptable.
     ovrError_ControllerFirmwareMismatch = -4104,   ///< The controller firmware is out of date and is unacceptable.
+    ovrError_DevManDeviceDetected       = -4105,   ///< A DeviceManagement mode HMD is detected by the service.
+    ovrError_RebootedBootloaderDevice   = -4106,   ///< Had to reboot bootloader device, which succeeded.
+    ovrError_FailedRebootBootloaderDev  = -4107,   ///< Had to reboot bootloader device, which failed.  Device is stuck in bootloader mode.
 
 
     ovrError_IMUTooManyLostSamples      = -4200,   ///< Too many lost IMU samples.
     ovrError_IMUTooManyLostSamples      = -4200,   ///< Too many lost IMU samples.
     ovrError_IMURateError               = -4201,   ///< IMU rate is outside of the expected range.
     ovrError_IMURateError               = -4201,   ///< IMU rate is outside of the expected range.
     ovrError_FeatureReportFailure       = -4202,   ///< A feature report has failed.
     ovrError_FeatureReportFailure       = -4202,   ///< A feature report has failed.
+    ovrError_HMDWirelessTimeout         = -4203,   ///< HMD wireless interface never returned from busy state.
+
+    ovrError_BootloaderAssertLog        = -4300,   ///< HMD Bootloader Assert Log was not empty.
+    ovrError_AppAssertLog               = -4301,   ///< HMD App Assert Log was not empty.
 
 
     /* Synchronization errors */
     /* Synchronization errors */
-    ovrError_Incomplete                 = -5000,   ///<Requested async work not yet complete.
-    ovrError_Abandoned                  = -5001,   ///<Requested async work was abandoned and result is incomplete.
+    ovrError_Incomplete                 = -5000,   ///< Requested async work not yet complete.
+    ovrError_Abandoned                  = -5001,   ///< Requested async work was abandoned and result is incomplete.
 
 
     /* Rendering errors */
     /* Rendering errors */
-    ovrError_DisplayLost                = -6000,   ///<In the event of a system-wide graphics reset or cable unplug this is returned to the app.
-    ovrError_TextureSwapChainFull       = -6001,   ///<ovr_CommitTextureSwapChain was called too many times on a texture swapchain without calling submit to use the chain.
-    ovrError_TextureSwapChainInvalid    = -6002,   ///<The ovrTextureSwapChain is in an incomplete or inconsistent state. Ensure ovr_CommitTextureSwapChain was called at least once first.
+    ovrError_DisplayLost                = -6000,   ///< In the event of a system-wide graphics reset or cable unplug this is returned to the app.
+    ovrError_TextureSwapChainFull       = -6001,   ///< ovr_CommitTextureSwapChain was called too many times on a texture swapchain without calling submit to use the chain.
+    ovrError_TextureSwapChainInvalid    = -6002,   ///< The ovrTextureSwapChain is in an incomplete or inconsistent state. Ensure ovr_CommitTextureSwapChain was called at least once first.
+    ovrError_GraphicsDeviceReset        = -6003,   ///< Graphics device has been reset (TDR, etc...)
+    ovrError_DisplayRemoved             = -6004,   ///< HMD removed from the display adapter
+    ovrError_ContentProtectionNotAvailable = -6005,///<Content protection is not available for the display
+    ovrError_ApplicationInvisible       = -6006,   ///< Application declared itself as an invisible type and is not allowed to submit frames.
+    ovrError_Disallowed                 = -6007,   ///< The given request is disallowed under the current conditions.
+    ovrError_DisplayPluggedIncorrectly  = -6008,   ///< Display portion of HMD is plugged into an incompatible port (ex: IGP)
 
 
     /* Fatal errors */
     /* Fatal errors */
     ovrError_RuntimeException           = -7000,   ///< A runtime exception occurred. The application is required to shutdown LibOVR and re-initialize it before this error state will be cleared.
     ovrError_RuntimeException           = -7000,   ///< A runtime exception occurred. The application is required to shutdown LibOVR and re-initialize it before this error state will be cleared.

+ 1 - 1
examples/oculus_glfw_sample/OculusSDK/LibOVR/Include/OVR_Version.h

@@ -19,7 +19,7 @@
 // Master version numbers
 // Master version numbers
 #define OVR_PRODUCT_VERSION 1  // Product version doesn't participate in semantic versioning.
 #define OVR_PRODUCT_VERSION 1  // Product version doesn't participate in semantic versioning.
 #define OVR_MAJOR_VERSION   1  // If you change these values then you need to also make sure to change LibOVR/Projects/Windows/LibOVR.props in parallel.
 #define OVR_MAJOR_VERSION   1  // If you change these values then you need to also make sure to change LibOVR/Projects/Windows/LibOVR.props in parallel.
-#define OVR_MINOR_VERSION   3  // 
+#define OVR_MINOR_VERSION   4  // 
 #define OVR_PATCH_VERSION   0
 #define OVR_PATCH_VERSION   0
 #define OVR_BUILD_NUMBER    0
 #define OVR_BUILD_NUMBER    0
 
 

Fișier diff suprimat deoarece este prea mare
+ 0 - 9
examples/oculus_glfw_sample/glad.c


+ 7678 - 0
examples/oculus_glfw_sample/glad.h

@@ -16,6 +16,10 @@
         Too many extensions
         Too many extensions
 */
 */
 
 
+//////////////////////////////////////////////////////////////////////////////
+//
+//       INCLUDE SECTION
+//
 
 
 #ifndef __glad_h_
 #ifndef __glad_h_
 #define __glad_h_
 #define __glad_h_
@@ -14239,3 +14243,7677 @@ GLAPI int GLAD_GL_KHR_context_flush_control;
 #endif
 #endif
 
 
 #endif
 #endif
+
+//////////////////////////////////////////////////////////////////////////////
+//
+//     IMPLEMENTATION SECTION
+//
+
+#ifdef GLAD_IMPLEMENTATION
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+struct gladGLversionStruct GLVersion;
+
+#if defined(GL_ES_VERSION_3_0) || defined(GL_VERSION_3_0)
+#define _GLAD_IS_SOME_NEW_VERSION 1
+#endif
+
+static int max_loaded_major;
+static int max_loaded_minor;
+
+static const char *exts = NULL;
+static int num_exts_i = 0;
+static const char **exts_i = NULL;
+
+static int get_exts(void) {
+#ifdef _GLAD_IS_SOME_NEW_VERSION
+    if(max_loaded_major < 3) {
+#endif
+        exts = (const char *)glGetString(GL_EXTENSIONS);
+#ifdef _GLAD_IS_SOME_NEW_VERSION
+    } else {
+        int index;
+
+        num_exts_i = 0;
+        glGetIntegerv(GL_NUM_EXTENSIONS, &num_exts_i);
+        if (num_exts_i > 0) {
+            exts_i = (const char **)realloc((void *)exts_i, num_exts_i * sizeof *exts_i);
+        }
+
+        if (exts_i == NULL) {
+            return 0;
+        }
+
+        for(index = 0; index < num_exts_i; index++) {
+            exts_i[index] = (const char*)glGetStringi(GL_EXTENSIONS, index);
+        }
+    }
+#endif
+    return 1;
+}
+
+static void free_exts(void) {
+    if (exts_i != NULL) {
+        free(exts_i);
+        exts_i = NULL;
+    }
+}
+
+static int has_ext(const char *ext) {
+#ifdef _GLAD_IS_SOME_NEW_VERSION
+    if(max_loaded_major < 3) {
+#endif
+        const char *extensions;
+        const char *loc;
+        const char *terminator;
+        extensions = exts;
+        if(extensions == NULL || ext == NULL) {
+            return 0;
+        }
+
+        while(1) {
+            loc = strstr(extensions, ext);
+            if(loc == NULL) {
+                return 0;
+            }
+
+            terminator = loc + strlen(ext);
+            if((loc == extensions || *(loc - 1) == ' ') &&
+                (*terminator == ' ' || *terminator == '\0')) {
+                return 1;
+            }
+            extensions = terminator;
+        }
+#ifdef _GLAD_IS_SOME_NEW_VERSION
+    } else {
+        int index;
+
+        for(index = 0; index < num_exts_i; index++) {
+            const char *e = exts_i[index];
+
+            if(strcmp(e, ext) == 0) {
+                return 1;
+            }
+        }
+    }
+#endif
+
+    return 0;
+}
+int GLAD_GL_VERSION_1_0;
+int GLAD_GL_VERSION_1_1;
+int GLAD_GL_VERSION_1_2;
+int GLAD_GL_VERSION_1_3;
+int GLAD_GL_VERSION_1_4;
+int GLAD_GL_VERSION_1_5;
+int GLAD_GL_VERSION_2_0;
+int GLAD_GL_VERSION_2_1;
+int GLAD_GL_VERSION_3_0;
+int GLAD_GL_VERSION_3_1;
+int GLAD_GL_VERSION_3_2;
+int GLAD_GL_VERSION_3_3;
+PFNGLCOPYTEXIMAGE1DPROC glad_glCopyTexImage1D;
+PFNGLVERTEXATTRIBI3UIPROC glad_glVertexAttribI3ui;
+PFNGLSTENCILMASKSEPARATEPROC glad_glStencilMaskSeparate;
+PFNGLFRAMEBUFFERRENDERBUFFERPROC glad_glFramebufferRenderbuffer;
+PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glad_glCompressedTexSubImage3D;
+PFNGLTEXCOORDP3UIVPROC glad_glTexCoordP3uiv;
+PFNGLVERTEXATTRIB1SVPROC glad_glVertexAttrib1sv;
+PFNGLBINDSAMPLERPROC glad_glBindSampler;
+PFNGLLINEWIDTHPROC glad_glLineWidth;
+PFNGLCOLORP3UIVPROC glad_glColorP3uiv;
+PFNGLGETINTEGERI_VPROC glad_glGetIntegeri_v;
+PFNGLCOMPILESHADERPROC glad_glCompileShader;
+PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glad_glGetTransformFeedbackVarying;
+PFNGLVERTEXATTRIBIPOINTERPROC glad_glVertexAttribIPointer;
+PFNGLMULTITEXCOORDP3UIPROC glad_glMultiTexCoordP3ui;
+PFNGLVERTEXP4UIPROC glad_glVertexP4ui;
+PFNGLENABLEIPROC glad_glEnablei;
+PFNGLVERTEXATTRIBP4UIPROC glad_glVertexAttribP4ui;
+PFNGLCREATESHADERPROC glad_glCreateShader;
+PFNGLISBUFFERPROC glad_glIsBuffer;
+PFNGLGETMULTISAMPLEFVPROC glad_glGetMultisamplefv;
+PFNGLGENRENDERBUFFERSPROC glad_glGenRenderbuffers;
+PFNGLCOPYTEXSUBIMAGE2DPROC glad_glCopyTexSubImage2D;
+PFNGLCOMPRESSEDTEXIMAGE2DPROC glad_glCompressedTexImage2D;
+PFNGLVERTEXATTRIB1FPROC glad_glVertexAttrib1f;
+PFNGLBLENDFUNCSEPARATEPROC glad_glBlendFuncSeparate;
+PFNGLHINTPROC glad_glHint;
+PFNGLVERTEXATTRIB1SPROC glad_glVertexAttrib1s;
+PFNGLSAMPLEMASKIPROC glad_glSampleMaski;
+PFNGLVERTEXP2UIPROC glad_glVertexP2ui;
+PFNGLUNIFORMMATRIX3X2FVPROC glad_glUniformMatrix3x2fv;
+PFNGLPOINTSIZEPROC glad_glPointSize;
+PFNGLVERTEXATTRIB2DVPROC glad_glVertexAttrib2dv;
+PFNGLDELETEPROGRAMPROC glad_glDeleteProgram;
+PFNGLVERTEXATTRIB4NUIVPROC glad_glVertexAttrib4Nuiv;
+PFNGLRENDERBUFFERSTORAGEPROC glad_glRenderbufferStorage;
+PFNGLWAITSYNCPROC glad_glWaitSync;
+PFNGLUNIFORMMATRIX4X3FVPROC glad_glUniformMatrix4x3fv;
+PFNGLUNIFORM3IPROC glad_glUniform3i;
+PFNGLCLEARBUFFERFVPROC glad_glClearBufferfv;
+PFNGLUNIFORM3FPROC glad_glUniform3f;
+PFNGLVERTEXATTRIB4UBVPROC glad_glVertexAttrib4ubv;
+PFNGLGETBUFFERPARAMETERIVPROC glad_glGetBufferParameteriv;
+PFNGLTEXCOORDP2UIPROC glad_glTexCoordP2ui;
+PFNGLCOLORMASKIPROC glad_glColorMaski;
+PFNGLCLEARBUFFERFIPROC glad_glClearBufferfi;
+PFNGLGENVERTEXARRAYSPROC glad_glGenVertexArrays;
+PFNGLMULTITEXCOORDP2UIPROC glad_glMultiTexCoordP2ui;
+PFNGLGETSAMPLERPARAMETERIIVPROC glad_glGetSamplerParameterIiv;
+PFNGLGETFRAGDATAINDEXPROC glad_glGetFragDataIndex;
+PFNGLGETVERTEXATTRIBDVPROC glad_glGetVertexAttribdv;
+PFNGLUNIFORMMATRIX3X4FVPROC glad_glUniformMatrix3x4fv;
+PFNGLMULTITEXCOORDP4UIPROC glad_glMultiTexCoordP4ui;
+PFNGLDELETEFRAMEBUFFERSPROC glad_glDeleteFramebuffers;
+PFNGLDRAWARRAYSPROC glad_glDrawArrays;
+PFNGLUNIFORM1UIPROC glad_glUniform1ui;
+PFNGLVERTEXATTRIBI2IPROC glad_glVertexAttribI2i;
+PFNGLTEXCOORDP3UIPROC glad_glTexCoordP3ui;
+PFNGLVERTEXATTRIB3DPROC glad_glVertexAttrib3d;
+PFNGLCLEARPROC glad_glClear;
+PFNGLGETACTIVEUNIFORMNAMEPROC glad_glGetActiveUniformName;
+PFNGLISENABLEDPROC glad_glIsEnabled;
+PFNGLSTENCILOPPROC glad_glStencilOp;
+PFNGLFRAMEBUFFERTEXTURE2DPROC glad_glFramebufferTexture2D;
+PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetFramebufferAttachmentParameteriv;
+PFNGLVERTEXATTRIB4NUBPROC glad_glVertexAttrib4Nub;
+PFNGLGETFRAGDATALOCATIONPROC glad_glGetFragDataLocation;
+PFNGLTEXIMAGE1DPROC glad_glTexImage1D;
+PFNGLTEXPARAMETERIVPROC glad_glTexParameteriv;
+PFNGLGETTEXIMAGEPROC glad_glGetTexImage;
+PFNGLGETQUERYOBJECTI64VPROC glad_glGetQueryObjecti64v;
+PFNGLGENFRAMEBUFFERSPROC glad_glGenFramebuffers;
+PFNGLGETATTACHEDSHADERSPROC glad_glGetAttachedShaders;
+PFNGLISRENDERBUFFERPROC glad_glIsRenderbuffer;
+PFNGLDELETEVERTEXARRAYSPROC glad_glDeleteVertexArrays;
+PFNGLISVERTEXARRAYPROC glad_glIsVertexArray;
+PFNGLDISABLEVERTEXATTRIBARRAYPROC glad_glDisableVertexAttribArray;
+PFNGLGETQUERYIVPROC glad_glGetQueryiv;
+PFNGLGETSAMPLERPARAMETERFVPROC glad_glGetSamplerParameterfv;
+PFNGLGETUNIFORMINDICESPROC glad_glGetUniformIndices;
+PFNGLISSHADERPROC glad_glIsShader;
+PFNGLVERTEXATTRIBI4UBVPROC glad_glVertexAttribI4ubv;
+PFNGLPOINTPARAMETERIVPROC glad_glPointParameteriv;
+PFNGLENABLEPROC glad_glEnable;
+PFNGLGETACTIVEUNIFORMSIVPROC glad_glGetActiveUniformsiv;
+PFNGLGETATTRIBLOCATIONPROC glad_glGetAttribLocation;
+PFNGLVERTEXATTRIB4DVPROC glad_glVertexAttrib4dv;
+PFNGLMULTITEXCOORDP3UIVPROC glad_glMultiTexCoordP3uiv;
+PFNGLVERTEXATTRIBP3UIPROC glad_glVertexAttribP3ui;
+PFNGLGETUNIFORMFVPROC glad_glGetUniformfv;
+PFNGLGETUNIFORMUIVPROC glad_glGetUniformuiv;
+PFNGLGETVERTEXATTRIBIIVPROC glad_glGetVertexAttribIiv;
+PFNGLDRAWBUFFERPROC glad_glDrawBuffer;
+PFNGLCLEARBUFFERUIVPROC glad_glClearBufferuiv;
+PFNGLDRAWELEMENTSINSTANCEDPROC glad_glDrawElementsInstanced;
+PFNGLFLUSHPROC glad_glFlush;
+PFNGLGETRENDERBUFFERPARAMETERIVPROC glad_glGetRenderbufferParameteriv;
+PFNGLGETVERTEXATTRIBPOINTERVPROC glad_glGetVertexAttribPointerv;
+PFNGLFENCESYNCPROC glad_glFenceSync;
+PFNGLCOLORP3UIPROC glad_glColorP3ui;
+PFNGLVERTEXATTRIB3SVPROC glad_glVertexAttrib3sv;
+PFNGLBEGINCONDITIONALRENDERPROC glad_glBeginConditionalRender;
+PFNGLGETTEXLEVELPARAMETERIVPROC glad_glGetTexLevelParameteriv;
+PFNGLMULTITEXCOORDP4UIVPROC glad_glMultiTexCoordP4uiv;
+PFNGLSTENCILFUNCSEPARATEPROC glad_glStencilFuncSeparate;
+PFNGLGENSAMPLERSPROC glad_glGenSamplers;
+PFNGLCLAMPCOLORPROC glad_glClampColor;
+PFNGLUNIFORM4IVPROC glad_glUniform4iv;
+PFNGLCLEARSTENCILPROC glad_glClearStencil;
+PFNGLTEXCOORDP1UIVPROC glad_glTexCoordP1uiv;
+PFNGLGENTEXTURESPROC glad_glGenTextures;
+PFNGLGETTEXPARAMETERIUIVPROC glad_glGetTexParameterIuiv;
+PFNGLVERTEXATTRIB4NBVPROC glad_glVertexAttrib4Nbv;
+PFNGLISSYNCPROC glad_glIsSync;
+PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glad_glGetActiveUniformBlockName;
+PFNGLUNIFORM2IPROC glad_glUniform2i;
+PFNGLUNIFORM2FPROC glad_glUniform2f;
+PFNGLTEXCOORDP4UIPROC glad_glTexCoordP4ui;
+PFNGLGETPROGRAMIVPROC glad_glGetProgramiv;
+PFNGLVERTEXATTRIBPOINTERPROC glad_glVertexAttribPointer;
+PFNGLFRAMEBUFFERTEXTURELAYERPROC glad_glFramebufferTextureLayer;
+PFNGLFLUSHMAPPEDBUFFERRANGEPROC glad_glFlushMappedBufferRange;
+PFNGLGENQUERIESPROC glad_glGenQueries;
+PFNGLVERTEXATTRIBP1UIPROC glad_glVertexAttribP1ui;
+PFNGLTEXSUBIMAGE3DPROC glad_glTexSubImage3D;
+PFNGLGETINTEGER64I_VPROC glad_glGetInteger64i_v;
+PFNGLDELETESAMPLERSPROC glad_glDeleteSamplers;
+PFNGLCOPYTEXIMAGE2DPROC glad_glCopyTexImage2D;
+PFNGLBLITFRAMEBUFFERPROC glad_glBlitFramebuffer;
+PFNGLISENABLEDIPROC glad_glIsEnabledi;
+PFNGLSECONDARYCOLORP3UIPROC glad_glSecondaryColorP3ui;
+PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glad_glBindFragDataLocationIndexed;
+PFNGLUNIFORM2IVPROC glad_glUniform2iv;
+PFNGLVERTEXATTRIB1FVPROC glad_glVertexAttrib1fv;
+PFNGLUNIFORM4UIVPROC glad_glUniform4uiv;
+PFNGLFRAMEBUFFERTEXTURE1DPROC glad_glFramebufferTexture1D;
+PFNGLGETSHADERIVPROC glad_glGetShaderiv;
+PFNGLBINDFRAGDATALOCATIONPROC glad_glBindFragDataLocation;
+PFNGLPOLYGONOFFSETPROC glad_glPolygonOffset;
+PFNGLGETDOUBLEVPROC glad_glGetDoublev;
+PFNGLVERTEXATTRIB1DPROC glad_glVertexAttrib1d;
+PFNGLGETUNIFORMIVPROC glad_glGetUniformiv;
+PFNGLMULTITEXCOORDP1UIVPROC glad_glMultiTexCoordP1uiv;
+PFNGLUNIFORM3FVPROC glad_glUniform3fv;
+PFNGLDEPTHRANGEPROC glad_glDepthRange;
+PFNGLMAPBUFFERPROC glad_glMapBuffer;
+PFNGLCOMPRESSEDTEXIMAGE3DPROC glad_glCompressedTexImage3D;
+PFNGLDELETESYNCPROC glad_glDeleteSync;
+PFNGLCOPYTEXSUBIMAGE3DPROC glad_glCopyTexSubImage3D;
+PFNGLGETVERTEXATTRIBIVPROC glad_glGetVertexAttribiv;
+PFNGLMULTIDRAWELEMENTSPROC glad_glMultiDrawElements;
+PFNGLVERTEXATTRIB3FVPROC glad_glVertexAttrib3fv;
+PFNGLUNIFORM3IVPROC glad_glUniform3iv;
+PFNGLPOLYGONMODEPROC glad_glPolygonMode;
+PFNGLDRAWBUFFERSPROC glad_glDrawBuffers;
+PFNGLGETACTIVEUNIFORMBLOCKIVPROC glad_glGetActiveUniformBlockiv;
+PFNGLUSEPROGRAMPROC glad_glUseProgram;
+PFNGLGETPROGRAMINFOLOGPROC glad_glGetProgramInfoLog;
+PFNGLBINDVERTEXARRAYPROC glad_glBindVertexArray;
+PFNGLDELETEBUFFERSPROC glad_glDeleteBuffers;
+PFNGLSAMPLERPARAMETERIIVPROC glad_glSamplerParameterIiv;
+PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glad_glMultiDrawElementsBaseVertex;
+PFNGLUNIFORM2UIVPROC glad_glUniform2uiv;
+PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glad_glCompressedTexSubImage1D;
+PFNGLFINISHPROC glad_glFinish;
+PFNGLDELETESHADERPROC glad_glDeleteShader;
+PFNGLVERTEXATTRIB4NSVPROC glad_glVertexAttrib4Nsv;
+PFNGLVIEWPORTPROC glad_glViewport;
+PFNGLUNIFORM1UIVPROC glad_glUniform1uiv;
+PFNGLTRANSFORMFEEDBACKVARYINGSPROC glad_glTransformFeedbackVaryings;
+PFNGLUNIFORM2UIPROC glad_glUniform2ui;
+PFNGLVERTEXATTRIBI3IPROC glad_glVertexAttribI3i;
+PFNGLCLEARDEPTHPROC glad_glClearDepth;
+PFNGLVERTEXATTRIBI4USVPROC glad_glVertexAttribI4usv;
+PFNGLTEXPARAMETERFPROC glad_glTexParameterf;
+PFNGLTEXPARAMETERIPROC glad_glTexParameteri;
+PFNGLGETSHADERSOURCEPROC glad_glGetShaderSource;
+PFNGLTEXBUFFERPROC glad_glTexBuffer;
+PFNGLPIXELSTOREIPROC glad_glPixelStorei;
+PFNGLVALIDATEPROGRAMPROC glad_glValidateProgram;
+PFNGLPIXELSTOREFPROC glad_glPixelStoref;
+PFNGLGETBOOLEANI_VPROC glad_glGetBooleani_v;
+PFNGLMULTITEXCOORDP2UIVPROC glad_glMultiTexCoordP2uiv;
+PFNGLVERTEXATTRIBP1UIVPROC glad_glVertexAttribP1uiv;
+PFNGLLINKPROGRAMPROC glad_glLinkProgram;
+PFNGLBINDTEXTUREPROC glad_glBindTexture;
+PFNGLGETSTRINGPROC glad_glGetString;
+PFNGLVERTEXATTRIBP2UIVPROC glad_glVertexAttribP2uiv;
+PFNGLDETACHSHADERPROC glad_glDetachShader;
+PFNGLENDQUERYPROC glad_glEndQuery;
+PFNGLNORMALP3UIPROC glad_glNormalP3ui;
+PFNGLVERTEXATTRIBI2UIPROC glad_glVertexAttribI2ui;
+PFNGLDELETETEXTURESPROC glad_glDeleteTextures;
+PFNGLSTENCILOPSEPARATEPROC glad_glStencilOpSeparate;
+PFNGLDELETEQUERIESPROC glad_glDeleteQueries;
+PFNGLNORMALP3UIVPROC glad_glNormalP3uiv;
+PFNGLVERTEXATTRIB4FPROC glad_glVertexAttrib4f;
+PFNGLVERTEXATTRIB4DPROC glad_glVertexAttrib4d;
+PFNGLGETTEXPARAMETERIVPROC glad_glGetTexParameteriv;
+PFNGLVERTEXATTRIB4SPROC glad_glVertexAttrib4s;
+PFNGLDRAWELEMENTSBASEVERTEXPROC glad_glDrawElementsBaseVertex;
+PFNGLSAMPLECOVERAGEPROC glad_glSampleCoverage;
+PFNGLSAMPLERPARAMETERIPROC glad_glSamplerParameteri;
+PFNGLSAMPLERPARAMETERFPROC glad_glSamplerParameterf;
+PFNGLUNIFORM1FPROC glad_glUniform1f;
+PFNGLGETVERTEXATTRIBFVPROC glad_glGetVertexAttribfv;
+PFNGLGETCOMPRESSEDTEXIMAGEPROC glad_glGetCompressedTexImage;
+PFNGLUNIFORM1IPROC glad_glUniform1i;
+PFNGLGETACTIVEATTRIBPROC glad_glGetActiveAttrib;
+PFNGLTEXSUBIMAGE2DPROC glad_glTexSubImage2D;
+PFNGLDISABLEPROC glad_glDisable;
+PFNGLLOGICOPPROC glad_glLogicOp;
+PFNGLUNIFORM4UIPROC glad_glUniform4ui;
+PFNGLBINDFRAMEBUFFERPROC glad_glBindFramebuffer;
+PFNGLCULLFACEPROC glad_glCullFace;
+PFNGLGETSTRINGIPROC glad_glGetStringi;
+PFNGLATTACHSHADERPROC glad_glAttachShader;
+PFNGLQUERYCOUNTERPROC glad_glQueryCounter;
+PFNGLPROVOKINGVERTEXPROC glad_glProvokingVertex;
+PFNGLDRAWELEMENTSPROC glad_glDrawElements;
+PFNGLVERTEXATTRIBI4SVPROC glad_glVertexAttribI4sv;
+PFNGLUNIFORM1IVPROC glad_glUniform1iv;
+PFNGLGETQUERYOBJECTIVPROC glad_glGetQueryObjectiv;
+PFNGLREADBUFFERPROC glad_glReadBuffer;
+PFNGLTEXPARAMETERIUIVPROC glad_glTexParameterIuiv;
+PFNGLDRAWARRAYSINSTANCEDPROC glad_glDrawArraysInstanced;
+PFNGLGENERATEMIPMAPPROC glad_glGenerateMipmap;
+PFNGLSAMPLERPARAMETERIVPROC glad_glSamplerParameteriv;
+PFNGLVERTEXATTRIB3FPROC glad_glVertexAttrib3f;
+PFNGLVERTEXATTRIB4UIVPROC glad_glVertexAttrib4uiv;
+PFNGLPOINTPARAMETERIPROC glad_glPointParameteri;
+PFNGLBLENDCOLORPROC glad_glBlendColor;
+PFNGLSAMPLERPARAMETERIUIVPROC glad_glSamplerParameterIuiv;
+PFNGLUNMAPBUFFERPROC glad_glUnmapBuffer;
+PFNGLPOINTPARAMETERFPROC glad_glPointParameterf;
+PFNGLVERTEXATTRIB3SPROC glad_glVertexAttrib3s;
+PFNGLBINDRENDERBUFFERPROC glad_glBindRenderbuffer;
+PFNGLVERTEXATTRIBP4UIVPROC glad_glVertexAttribP4uiv;
+PFNGLISPROGRAMPROC glad_glIsProgram;
+PFNGLVERTEXATTRIB4BVPROC glad_glVertexAttrib4bv;
+PFNGLVERTEXATTRIB4FVPROC glad_glVertexAttrib4fv;
+PFNGLUNIFORM4IPROC glad_glUniform4i;
+PFNGLACTIVETEXTUREPROC glad_glActiveTexture;
+PFNGLENABLEVERTEXATTRIBARRAYPROC glad_glEnableVertexAttribArray;
+PFNGLREADPIXELSPROC glad_glReadPixels;
+PFNGLVERTEXATTRIBI3IVPROC glad_glVertexAttribI3iv;
+PFNGLUNIFORM4FPROC glad_glUniform4f;
+PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glRenderbufferStorageMultisample;
+PFNGLUNIFORMMATRIX3FVPROC glad_glUniformMatrix3fv;
+PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glad_glDrawElementsInstancedBaseVertex;
+PFNGLSTENCILFUNCPROC glad_glStencilFunc;
+PFNGLUNIFORMBLOCKBINDINGPROC glad_glUniformBlockBinding;
+PFNGLCOLORP4UIPROC glad_glColorP4ui;
+PFNGLVERTEXATTRIBI4IVPROC glad_glVertexAttribI4iv;
+PFNGLGETSHADERINFOLOGPROC glad_glGetShaderInfoLog;
+PFNGLVERTEXATTRIBI4IPROC glad_glVertexAttribI4i;
+PFNGLGETBUFFERSUBDATAPROC glad_glGetBufferSubData;
+PFNGLBLENDEQUATIONSEPARATEPROC glad_glBlendEquationSeparate;
+PFNGLVERTEXATTRIBI1UIPROC glad_glVertexAttribI1ui;
+PFNGLGENBUFFERSPROC glad_glGenBuffers;
+PFNGLVERTEXATTRIB2SVPROC glad_glVertexAttrib2sv;
+PFNGLBLENDFUNCPROC glad_glBlendFunc;
+PFNGLCREATEPROGRAMPROC glad_glCreateProgram;
+PFNGLTEXIMAGE3DPROC glad_glTexImage3D;
+PFNGLISFRAMEBUFFERPROC glad_glIsFramebuffer;
+PFNGLPRIMITIVERESTARTINDEXPROC glad_glPrimitiveRestartIndex;
+PFNGLGETINTEGER64VPROC glad_glGetInteger64v;
+PFNGLSCISSORPROC glad_glScissor;
+PFNGLTEXCOORDP4UIVPROC glad_glTexCoordP4uiv;
+PFNGLGETBOOLEANVPROC glad_glGetBooleanv;
+PFNGLVERTEXP2UIVPROC glad_glVertexP2uiv;
+PFNGLUNIFORM3UIVPROC glad_glUniform3uiv;
+PFNGLCLEARCOLORPROC glad_glClearColor;
+PFNGLVERTEXATTRIB4NIVPROC glad_glVertexAttrib4Niv;
+PFNGLCLEARBUFFERIVPROC glad_glClearBufferiv;
+PFNGLGETBUFFERPARAMETERI64VPROC glad_glGetBufferParameteri64v;
+PFNGLCOLORP4UIVPROC glad_glColorP4uiv;
+PFNGLVERTEXATTRIBI2UIVPROC glad_glVertexAttribI2uiv;
+PFNGLUNIFORM3UIPROC glad_glUniform3ui;
+PFNGLVERTEXATTRIBI4UIVPROC glad_glVertexAttribI4uiv;
+PFNGLPOINTPARAMETERFVPROC glad_glPointParameterfv;
+PFNGLUNIFORM2FVPROC glad_glUniform2fv;
+PFNGLGETSAMPLERPARAMETERIUIVPROC glad_glGetSamplerParameterIuiv;
+PFNGLBINDBUFFERRANGEPROC glad_glBindBufferRange;
+PFNGLUNIFORMMATRIX2X3FVPROC glad_glUniformMatrix2x3fv;
+PFNGLGETVERTEXATTRIBIUIVPROC glad_glGetVertexAttribIuiv;
+PFNGLVERTEXATTRIB4NUSVPROC glad_glVertexAttrib4Nusv;
+PFNGLDEPTHFUNCPROC glad_glDepthFunc;
+PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glad_glCompressedTexSubImage2D;
+PFNGLVERTEXATTRIBI4BVPROC glad_glVertexAttribI4bv;
+PFNGLGETTEXPARAMETERFVPROC glad_glGetTexParameterfv;
+PFNGLMULTITEXCOORDP1UIPROC glad_glMultiTexCoordP1ui;
+PFNGLCLIENTWAITSYNCPROC glad_glClientWaitSync;
+PFNGLVERTEXATTRIBI4UIPROC glad_glVertexAttribI4ui;
+PFNGLCOLORMASKPROC glad_glColorMask;
+PFNGLTEXPARAMETERIIVPROC glad_glTexParameterIiv;
+PFNGLBLENDEQUATIONPROC glad_glBlendEquation;
+PFNGLGETUNIFORMLOCATIONPROC glad_glGetUniformLocation;
+PFNGLENDTRANSFORMFEEDBACKPROC glad_glEndTransformFeedback;
+PFNGLVERTEXATTRIB4USVPROC glad_glVertexAttrib4usv;
+PFNGLUNIFORM4FVPROC glad_glUniform4fv;
+PFNGLBEGINTRANSFORMFEEDBACKPROC glad_glBeginTransformFeedback;
+PFNGLVERTEXATTRIBI1IVPROC glad_glVertexAttribI1iv;
+PFNGLISSAMPLERPROC glad_glIsSampler;
+PFNGLVERTEXP3UIPROC glad_glVertexP3ui;
+PFNGLVERTEXATTRIBDIVISORPROC glad_glVertexAttribDivisor;
+PFNGLCOMPRESSEDTEXIMAGE1DPROC glad_glCompressedTexImage1D;
+PFNGLCOPYTEXSUBIMAGE1DPROC glad_glCopyTexSubImage1D;
+PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glad_glDrawRangeElementsBaseVertex;
+PFNGLCHECKFRAMEBUFFERSTATUSPROC glad_glCheckFramebufferStatus;
+PFNGLENDCONDITIONALRENDERPROC glad_glEndConditionalRender;
+PFNGLVERTEXP3UIVPROC glad_glVertexP3uiv;
+PFNGLBINDATTRIBLOCATIONPROC glad_glBindAttribLocation;
+PFNGLUNIFORMMATRIX4X2FVPROC glad_glUniformMatrix4x2fv;
+PFNGLVERTEXATTRIB1DVPROC glad_glVertexAttrib1dv;
+PFNGLDRAWRANGEELEMENTSPROC glad_glDrawRangeElements;
+PFNGLGETQUERYOBJECTUIVPROC glad_glGetQueryObjectuiv;
+PFNGLBINDBUFFERBASEPROC glad_glBindBufferBase;
+PFNGLBUFFERSUBDATAPROC glad_glBufferSubData;
+PFNGLVERTEXATTRIB4IVPROC glad_glVertexAttrib4iv;
+PFNGLMAPBUFFERRANGEPROC glad_glMapBufferRange;
+PFNGLFRAMEBUFFERTEXTUREPROC glad_glFramebufferTexture;
+PFNGLMULTIDRAWARRAYSPROC glad_glMultiDrawArrays;
+PFNGLVERTEXP4UIVPROC glad_glVertexP4uiv;
+PFNGLVERTEXATTRIBI2IVPROC glad_glVertexAttribI2iv;
+PFNGLDISABLEIPROC glad_glDisablei;
+PFNGLSHADERSOURCEPROC glad_glShaderSource;
+PFNGLDELETERENDERBUFFERSPROC glad_glDeleteRenderbuffers;
+PFNGLVERTEXATTRIBI3UIVPROC glad_glVertexAttribI3uiv;
+PFNGLGETSYNCIVPROC glad_glGetSynciv;
+PFNGLTEXCOORDP2UIVPROC glad_glTexCoordP2uiv;
+PFNGLBEGINQUERYPROC glad_glBeginQuery;
+PFNGLUNIFORMMATRIX4FVPROC glad_glUniformMatrix4fv;
+PFNGLBINDBUFFERPROC glad_glBindBuffer;
+PFNGLUNIFORMMATRIX2FVPROC glad_glUniformMatrix2fv;
+PFNGLUNIFORMMATRIX2X4FVPROC glad_glUniformMatrix2x4fv;
+PFNGLBUFFERDATAPROC glad_glBufferData;
+PFNGLGETTEXPARAMETERIIVPROC glad_glGetTexParameterIiv;
+PFNGLTEXCOORDP1UIPROC glad_glTexCoordP1ui;
+PFNGLGETERRORPROC glad_glGetError;
+PFNGLVERTEXATTRIBP2UIPROC glad_glVertexAttribP2ui;
+PFNGLGETFLOATVPROC glad_glGetFloatv;
+PFNGLTEXSUBIMAGE1DPROC glad_glTexSubImage1D;
+PFNGLVERTEXATTRIB2FVPROC glad_glVertexAttrib2fv;
+PFNGLGETTEXLEVELPARAMETERFVPROC glad_glGetTexLevelParameterfv;
+PFNGLVERTEXATTRIBI1IPROC glad_glVertexAttribI1i;
+PFNGLVERTEXATTRIBP3UIVPROC glad_glVertexAttribP3uiv;
+PFNGLSECONDARYCOLORP3UIVPROC glad_glSecondaryColorP3uiv;
+PFNGLGETINTEGERVPROC glad_glGetIntegerv;
+PFNGLGETBUFFERPOINTERVPROC glad_glGetBufferPointerv;
+PFNGLFRAMEBUFFERTEXTURE3DPROC glad_glFramebufferTexture3D;
+PFNGLISQUERYPROC glad_glIsQuery;
+PFNGLVERTEXATTRIB4SVPROC glad_glVertexAttrib4sv;
+PFNGLTEXIMAGE2DPROC glad_glTexImage2D;
+PFNGLSTENCILMASKPROC glad_glStencilMask;
+PFNGLSAMPLERPARAMETERFVPROC glad_glSamplerParameterfv;
+PFNGLISTEXTUREPROC glad_glIsTexture;
+PFNGLUNIFORM1FVPROC glad_glUniform1fv;
+PFNGLVERTEXATTRIB4NUBVPROC glad_glVertexAttrib4Nubv;
+PFNGLTEXPARAMETERFVPROC glad_glTexParameterfv;
+PFNGLGETSAMPLERPARAMETERIVPROC glad_glGetSamplerParameteriv;
+PFNGLCOPYBUFFERSUBDATAPROC glad_glCopyBufferSubData;
+PFNGLVERTEXATTRIBI1UIVPROC glad_glVertexAttribI1uiv;
+PFNGLVERTEXATTRIB2DPROC glad_glVertexAttrib2d;
+PFNGLVERTEXATTRIB2FPROC glad_glVertexAttrib2f;
+PFNGLVERTEXATTRIB3DVPROC glad_glVertexAttrib3dv;
+PFNGLGETQUERYOBJECTUI64VPROC glad_glGetQueryObjectui64v;
+PFNGLDEPTHMASKPROC glad_glDepthMask;
+PFNGLVERTEXATTRIB2SPROC glad_glVertexAttrib2s;
+PFNGLTEXIMAGE3DMULTISAMPLEPROC glad_glTexImage3DMultisample;
+PFNGLGETUNIFORMBLOCKINDEXPROC glad_glGetUniformBlockIndex;
+PFNGLTEXIMAGE2DMULTISAMPLEPROC glad_glTexImage2DMultisample;
+PFNGLGETACTIVEUNIFORMPROC glad_glGetActiveUniform;
+PFNGLFRONTFACEPROC glad_glFrontFace;
+int GLAD_GL_SGIX_pixel_tiles;
+int GLAD_GL_NV_point_sprite;
+int GLAD_GL_APPLE_element_array;
+int GLAD_GL_AMD_multi_draw_indirect;
+int GLAD_GL_EXT_blend_subtract;
+int GLAD_GL_SGIX_tag_sample_buffer;
+int GLAD_GL_IBM_texture_mirrored_repeat;
+int GLAD_GL_APPLE_transform_hint;
+int GLAD_GL_ATI_separate_stencil;
+int GLAD_GL_NV_shader_atomic_int64;
+int GLAD_GL_NV_vertex_program2_option;
+int GLAD_GL_EXT_texture_buffer_object;
+int GLAD_GL_ARB_vertex_blend;
+int GLAD_GL_OVR_multiview;
+int GLAD_GL_ARB_program_interface_query;
+int GLAD_GL_EXT_misc_attribute;
+int GLAD_GL_NV_multisample_coverage;
+int GLAD_GL_ARB_shading_language_packing;
+int GLAD_GL_EXT_texture_cube_map;
+int GLAD_GL_NV_viewport_array2;
+int GLAD_GL_KHR_robustness;
+int GLAD_GL_EXT_index_func;
+int GLAD_GL_OES_compressed_paletted_texture;
+int GLAD_GL_NV_depth_clamp;
+int GLAD_GL_NV_shader_buffer_load;
+int GLAD_GL_EXT_color_subtable;
+int GLAD_GL_SUNX_constant_data;
+int GLAD_GL_EXT_multi_draw_arrays;
+int GLAD_GL_ARB_shader_atomic_counters;
+int GLAD_GL_ARB_arrays_of_arrays;
+int GLAD_GL_NV_conditional_render;
+int GLAD_GL_EXT_texture_env_combine;
+int GLAD_GL_AMD_depth_clamp_separate;
+int GLAD_GL_SGIX_async_histogram;
+int GLAD_GL_MESA_resize_buffers;
+int GLAD_GL_ARB_sample_shading;
+int GLAD_GL_NV_texture_env_combine4;
+int GLAD_GL_ARB_texture_view;
+int GLAD_GL_ARB_texture_env_combine;
+int GLAD_GL_ARB_map_buffer_range;
+int GLAD_GL_EXT_convolution;
+int GLAD_GL_NV_compute_program5;
+int GLAD_GL_EXT_paletted_texture;
+int GLAD_GL_ARB_texture_buffer_object;
+int GLAD_GL_SUN_triangle_list;
+int GLAD_GL_SGIX_resample;
+int GLAD_GL_SGIX_flush_raster;
+int GLAD_GL_EXT_light_texture;
+int GLAD_GL_ARB_point_sprite;
+int GLAD_GL_ARB_sparse_texture2;
+int GLAD_GL_ARB_half_float_pixel;
+int GLAD_GL_NV_tessellation_program5;
+int GLAD_GL_REND_screen_coordinates;
+int GLAD_GL_HP_image_transform;
+int GLAD_GL_EXT_packed_float;
+int GLAD_GL_ATI_vertex_attrib_array_object;
+int GLAD_GL_SGIX_vertex_preclip;
+int GLAD_GL_SGIX_texture_scale_bias;
+int GLAD_GL_AMD_draw_buffers_blend;
+int GLAD_GL_APPLE_texture_range;
+int GLAD_GL_SGIX_framezoom;
+int GLAD_GL_NV_texture_barrier;
+int GLAD_GL_ARB_texture_query_levels;
+int GLAD_GL_EXT_blend_logic_op;
+int GLAD_GL_EXT_texture_swizzle;
+int GLAD_GL_ARB_texture_rg;
+int GLAD_GL_ARB_vertex_type_2_10_10_10_rev;
+int GLAD_GL_ARB_fragment_shader;
+int GLAD_GL_3DFX_tbuffer;
+int GLAD_GL_SGIX_ycrcb;
+int GLAD_GL_IBM_cull_vertex;
+int GLAD_GL_EXT_separate_shader_objects;
+int GLAD_GL_NV_texture_multisample;
+int GLAD_GL_ARB_shader_objects;
+int GLAD_GL_ARB_framebuffer_object;
+int GLAD_GL_ATI_envmap_bumpmap;
+int GLAD_GL_ARB_robust_buffer_access_behavior;
+int GLAD_GL_ARB_shader_stencil_export;
+int GLAD_GL_AMD_sample_positions;
+int GLAD_GL_ARB_enhanced_layouts;
+int GLAD_GL_ARB_texture_rectangle;
+int GLAD_GL_SGI_texture_color_table;
+int GLAD_GL_ATI_map_object_buffer;
+int GLAD_GL_ARB_robustness;
+int GLAD_GL_NV_pixel_data_range;
+int GLAD_GL_EXT_framebuffer_blit;
+int GLAD_GL_ARB_gpu_shader_fp64;
+int GLAD_GL_NV_command_list;
+int GLAD_GL_ARB_window_pos;
+int GLAD_GL_ARB_robustness_isolation;
+int GLAD_GL_GREMEDY_string_marker;
+int GLAD_GL_ARB_texture_compression_bptc;
+int GLAD_GL_EXT_subtexture;
+int GLAD_GL_EXT_pixel_transform_color_table;
+int GLAD_GL_EXT_texture_compression_rgtc;
+int GLAD_GL_ARB_shadow;
+int GLAD_GL_SGIX_depth_pass_instrument;
+int GLAD_GL_NVX_conditional_render;
+int GLAD_GL_NV_evaluators;
+int GLAD_GL_SGIS_texture_filter4;
+int GLAD_GL_AMD_performance_monitor;
+int GLAD_GL_NV_geometry_shader4;
+int GLAD_GL_EXT_stencil_clear_tag;
+int GLAD_GL_NV_vertex_program1_1;
+int GLAD_GL_NV_present_video;
+int GLAD_GL_ARB_texture_compression_rgtc;
+int GLAD_GL_ARB_texture_filter_minmax;
+int GLAD_GL_HP_convolution_border_modes;
+int GLAD_GL_EXT_gpu_program_parameters;
+int GLAD_GL_SGIX_list_priority;
+int GLAD_GL_ARB_stencil_texturing;
+int GLAD_GL_ARB_shader_clock;
+int GLAD_GL_NV_shader_atomic_fp16_vector;
+int GLAD_GL_SGIX_fog_offset;
+int GLAD_GL_ARB_draw_elements_base_vertex;
+int GLAD_GL_INGR_interlace_read;
+int GLAD_GL_NV_transform_feedback;
+int GLAD_GL_EXT_post_depth_coverage;
+int GLAD_GL_ARB_debug_output;
+int GLAD_GL_AMD_stencil_operation_extended;
+int GLAD_GL_ARB_compatibility;
+int GLAD_GL_ARB_instanced_arrays;
+int GLAD_GL_ARB_get_texture_sub_image;
+int GLAD_GL_NV_vertex_array_range2;
+int GLAD_GL_ARB_texture_stencil8;
+int GLAD_GL_AMD_sparse_texture;
+int GLAD_GL_ARB_clip_control;
+int GLAD_GL_NV_fragment_coverage_to_color;
+int GLAD_GL_NV_fence;
+int GLAD_GL_ARB_texture_buffer_range;
+int GLAD_GL_SUN_mesh_array;
+int GLAD_GL_ARB_vertex_attrib_binding;
+int GLAD_GL_EXT_texture_compression_s3tc;
+int GLAD_GL_ARB_cl_event;
+int GLAD_GL_ARB_derivative_control;
+int GLAD_GL_NV_packed_depth_stencil;
+int GLAD_GL_OES_single_precision;
+int GLAD_GL_NV_primitive_restart;
+int GLAD_GL_ARB_fragment_shader_interlock;
+int GLAD_GL_EXT_texture_object;
+int GLAD_GL_AMD_name_gen_delete;
+int GLAD_GL_NV_texture_compression_vtc;
+int GLAD_GL_NV_sample_mask_override_coverage;
+int GLAD_GL_NV_texture_shader3;
+int GLAD_GL_NV_texture_shader2;
+int GLAD_GL_EXT_texture;
+int GLAD_GL_ARB_buffer_storage;
+int GLAD_GL_AMD_shader_atomic_counter_ops;
+int GLAD_GL_APPLE_vertex_program_evaluators;
+int GLAD_GL_ARB_multi_bind;
+int GLAD_GL_ARB_explicit_uniform_location;
+int GLAD_GL_ARB_depth_buffer_float;
+int GLAD_GL_NV_path_rendering_shared_edge;
+int GLAD_GL_SGIX_shadow_ambient;
+int GLAD_GL_ARB_texture_cube_map;
+int GLAD_GL_AMD_vertex_shader_viewport_index;
+int GLAD_GL_EXT_shader_integer_mix;
+int GLAD_GL_NV_vertex_buffer_unified_memory;
+int GLAD_GL_EXT_fog_coord;
+int GLAD_GL_EXT_texture_env_dot3;
+int GLAD_GL_ATI_texture_env_combine3;
+int GLAD_GL_ARB_map_buffer_alignment;
+int GLAD_GL_NV_blend_equation_advanced;
+int GLAD_GL_SGIS_sharpen_texture;
+int GLAD_GL_KHR_robust_buffer_access_behavior;
+int GLAD_GL_ARB_pipeline_statistics_query;
+int GLAD_GL_ARB_vertex_program;
+int GLAD_GL_ARB_texture_rgb10_a2ui;
+int GLAD_GL_OML_interlace;
+int GLAD_GL_ATI_pixel_format_float;
+int GLAD_GL_ARB_vertex_buffer_object;
+int GLAD_GL_EXT_shadow_funcs;
+int GLAD_GL_ATI_text_fragment_shader;
+int GLAD_GL_NV_vertex_array_range;
+int GLAD_GL_SGIX_fragment_lighting;
+int GLAD_GL_NV_texture_expand_normal;
+int GLAD_GL_NV_framebuffer_multisample_coverage;
+int GLAD_GL_ARB_framebuffer_no_attachments;
+int GLAD_GL_EXT_timer_query;
+int GLAD_GL_EXT_vertex_array_bgra;
+int GLAD_GL_NV_bindless_texture;
+int GLAD_GL_KHR_debug;
+int GLAD_GL_SGIS_texture_border_clamp;
+int GLAD_GL_OML_subsample;
+int GLAD_GL_SGIX_clipmap;
+int GLAD_GL_EXT_geometry_shader4;
+int GLAD_GL_ARB_shader_texture_image_samples;
+int GLAD_GL_MESA_ycbcr_texture;
+int GLAD_GL_MESAX_texture_stack;
+int GLAD_GL_AMD_seamless_cubemap_per_texture;
+int GLAD_GL_EXT_bindable_uniform;
+int GLAD_GL_KHR_texture_compression_astc_hdr;
+int GLAD_GL_ARB_shader_ballot;
+int GLAD_GL_KHR_blend_equation_advanced;
+int GLAD_GL_ARB_fragment_program_shadow;
+int GLAD_GL_ATI_element_array;
+int GLAD_GL_ARB_sparse_texture_clamp;
+int GLAD_GL_AMD_texture_texture4;
+int GLAD_GL_SGIX_reference_plane;
+int GLAD_GL_EXT_stencil_two_side;
+int GLAD_GL_ARB_transform_feedback_overflow_query;
+int GLAD_GL_SGIX_texture_lod_bias;
+int GLAD_GL_KHR_no_error;
+int GLAD_GL_NV_explicit_multisample;
+int GLAD_GL_IBM_static_data;
+int GLAD_GL_EXT_clip_volume_hint;
+int GLAD_GL_EXT_texture_perturb_normal;
+int GLAD_GL_NV_fragment_program2;
+int GLAD_GL_NV_fragment_program4;
+int GLAD_GL_EXT_point_parameters;
+int GLAD_GL_PGI_misc_hints;
+int GLAD_GL_SGIX_subsample;
+int GLAD_GL_AMD_shader_stencil_export;
+int GLAD_GL_ARB_shader_texture_lod;
+int GLAD_GL_ARB_vertex_shader;
+int GLAD_GL_ARB_depth_clamp;
+int GLAD_GL_SGIS_texture_select;
+int GLAD_GL_NV_texture_shader;
+int GLAD_GL_ARB_tessellation_shader;
+int GLAD_GL_EXT_draw_buffers2;
+int GLAD_GL_ARB_vertex_attrib_64bit;
+int GLAD_GL_EXT_texture_filter_minmax;
+int GLAD_GL_ARB_texture_gather;
+int GLAD_GL_AMD_interleaved_elements;
+int GLAD_GL_ARB_fragment_program;
+int GLAD_GL_OML_resample;
+int GLAD_GL_APPLE_ycbcr_422;
+int GLAD_GL_SGIX_texture_add_env;
+int GLAD_GL_ARB_shadow_ambient;
+int GLAD_GL_ARB_texture_storage;
+int GLAD_GL_EXT_pixel_buffer_object;
+int GLAD_GL_NV_vertex_program;
+int GLAD_GL_SGIS_pixel_texture;
+int GLAD_GL_SGIS_generate_mipmap;
+int GLAD_GL_SGIX_instruments;
+int GLAD_GL_ARB_fragment_layer_viewport;
+int GLAD_GL_ARB_shader_storage_buffer_object;
+int GLAD_GL_EXT_sparse_texture2;
+int GLAD_GL_EXT_blend_minmax;
+int GLAD_GL_MESA_pack_invert;
+int GLAD_GL_ARB_base_instance;
+int GLAD_GL_SUN_global_alpha;
+int GLAD_GL_PGI_vertex_hints;
+int GLAD_GL_AMD_transform_feedback4;
+int GLAD_GL_ARB_ES3_1_compatibility;
+int GLAD_GL_EXT_texture_integer;
+int GLAD_GL_ARB_texture_multisample;
+int GLAD_GL_AMD_gpu_shader_int64;
+int GLAD_GL_S3_s3tc;
+int GLAD_GL_ARB_query_buffer_object;
+int GLAD_GL_AMD_vertex_shader_tessellator;
+int GLAD_GL_ARB_invalidate_subdata;
+int GLAD_GL_ARB_draw_indirect;
+int GLAD_GL_ARB_transform_feedback2;
+int GLAD_GL_EXT_index_material;
+int GLAD_GL_NV_blend_equation_advanced_coherent;
+int GLAD_GL_ARB_texture_non_power_of_two;
+int GLAD_GL_KHR_texture_compression_astc_sliced_3d;
+int GLAD_GL_ATI_draw_buffers;
+int GLAD_GL_EXT_cmyka;
+int GLAD_GL_SGIX_pixel_texture;
+int GLAD_GL_APPLE_specular_vector;
+int GLAD_GL_ARB_seamless_cubemap_per_texture;
+int GLAD_GL_ARB_conservative_depth;
+int GLAD_GL_SGIX_interlace;
+int GLAD_GL_NV_parameter_buffer_object;
+int GLAD_GL_AMD_shader_trinary_minmax;
+int GLAD_GL_EXT_texture_lod_bias;
+int GLAD_GL_EXT_rescale_normal;
+int GLAD_GL_ARB_pixel_buffer_object;
+int GLAD_GL_ARB_uniform_buffer_object;
+int GLAD_GL_ARB_vertex_type_10f_11f_11f_rev;
+int GLAD_GL_ARB_texture_swizzle;
+int GLAD_GL_ARB_texture_compression;
+int GLAD_GL_SGIX_async_pixel;
+int GLAD_GL_NV_fragment_program_option;
+int GLAD_GL_ARB_explicit_attrib_location;
+int GLAD_GL_EXT_blend_color;
+int GLAD_GL_NV_shader_thread_group;
+int GLAD_GL_EXT_stencil_wrap;
+int GLAD_GL_EXT_index_array_formats;
+int GLAD_GL_OVR_multiview2;
+int GLAD_GL_EXT_histogram;
+int GLAD_GL_EXT_polygon_offset;
+int GLAD_GL_SGIS_point_parameters;
+int GLAD_GL_EXT_direct_state_access;
+int GLAD_GL_ARB_shader_group_vote;
+int GLAD_GL_NV_texture_rectangle;
+int GLAD_GL_ARB_copy_image;
+int GLAD_GL_NV_shader_thread_shuffle;
+int GLAD_GL_ARB_shader_precision;
+int GLAD_GL_EXT_vertex_shader;
+int GLAD_GL_EXT_blend_func_separate;
+int GLAD_GL_APPLE_fence;
+int GLAD_GL_OES_byte_coordinates;
+int GLAD_GL_ARB_transpose_matrix;
+int GLAD_GL_ARB_provoking_vertex;
+int GLAD_GL_NV_uniform_buffer_unified_memory;
+int GLAD_GL_NV_fragment_shader_interlock;
+int GLAD_GL_EXT_vertex_array;
+int GLAD_GL_ARB_half_float_vertex;
+int GLAD_GL_EXT_blend_equation_separate;
+int GLAD_GL_NV_framebuffer_mixed_samples;
+int GLAD_GL_ARB_multi_draw_indirect;
+int GLAD_GL_EXT_raster_multisample;
+int GLAD_GL_NV_copy_image;
+int GLAD_GL_NV_geometry_shader_passthrough;
+int GLAD_GL_INTEL_framebuffer_CMAA;
+int GLAD_GL_SGIX_convolution_accuracy;
+int GLAD_GL_ARB_transform_feedback3;
+int GLAD_GL_SGIX_ycrcba;
+int GLAD_GL_EXT_debug_marker;
+int GLAD_GL_EXT_bgra;
+int GLAD_GL_INTEL_parallel_arrays;
+int GLAD_GL_EXT_pixel_transform;
+int GLAD_GL_NV_vertex_attrib_integer_64bit;
+int GLAD_GL_ATI_fragment_shader;
+int GLAD_GL_ARB_vertex_array_object;
+int GLAD_GL_ATI_pn_triangles;
+int GLAD_GL_EXT_texture_env_add;
+int GLAD_GL_EXT_packed_depth_stencil;
+int GLAD_GL_EXT_texture_mirror_clamp;
+int GLAD_GL_NV_multisample_filter_hint;
+int GLAD_GL_INTEL_performance_query;
+int GLAD_GL_ARB_transform_feedback_instanced;
+int GLAD_GL_SGIX_async;
+int GLAD_GL_EXT_texture_compression_latc;
+int GLAD_GL_NV_shader_atomic_float;
+int GLAD_GL_ARB_shading_language_100;
+int GLAD_GL_APPLE_float_pixels;
+int GLAD_GL_ARB_texture_mirror_clamp_to_edge;
+int GLAD_GL_NV_vertex_program2;
+int GLAD_GL_NV_bindless_multi_draw_indirect_count;
+int GLAD_GL_ARB_depth_texture;
+int GLAD_GL_ARB_ES2_compatibility;
+int GLAD_GL_ARB_indirect_parameters;
+int GLAD_GL_NV_half_float;
+int GLAD_GL_ARB_ES3_2_compatibility;
+int GLAD_GL_ATI_texture_mirror_once;
+int GLAD_GL_IBM_rasterpos_clip;
+int GLAD_GL_SGIX_shadow;
+int GLAD_GL_EXT_polygon_offset_clamp;
+int GLAD_GL_NV_deep_texture3D;
+int GLAD_GL_ARB_shader_draw_parameters;
+int GLAD_GL_SGIX_calligraphic_fragment;
+int GLAD_GL_ARB_shader_bit_encoding;
+int GLAD_GL_EXT_compiled_vertex_array;
+int GLAD_GL_NV_depth_buffer_float;
+int GLAD_GL_APPLE_flush_buffer_range;
+int GLAD_GL_ARB_imaging;
+int GLAD_GL_ARB_draw_buffers_blend;
+int GLAD_GL_AMD_gcn_shader;
+int GLAD_GL_AMD_blend_minmax_factor;
+int GLAD_GL_EXT_texture_sRGB_decode;
+int GLAD_GL_ARB_shading_language_420pack;
+int GLAD_GL_ARB_shader_viewport_layer_array;
+int GLAD_GL_ATI_meminfo;
+int GLAD_GL_EXT_abgr;
+int GLAD_GL_AMD_pinned_memory;
+int GLAD_GL_EXT_texture_snorm;
+int GLAD_GL_SGIX_texture_coordinate_clamp;
+int GLAD_GL_ARB_clear_buffer_object;
+int GLAD_GL_ARB_multisample;
+int GLAD_GL_EXT_debug_label;
+int GLAD_GL_NV_light_max_exponent;
+int GLAD_GL_NV_internalformat_sample_query;
+int GLAD_GL_INTEL_map_texture;
+int GLAD_GL_ARB_texture_env_crossbar;
+int GLAD_GL_EXT_422_pixels;
+int GLAD_GL_ARB_compute_shader;
+int GLAD_GL_NV_texgen_emboss;
+int GLAD_GL_ARB_blend_func_extended;
+int GLAD_GL_IBM_vertex_array_lists;
+int GLAD_GL_ARB_color_buffer_float;
+int GLAD_GL_ARB_bindless_texture;
+int GLAD_GL_SGIX_depth_texture;
+int GLAD_GL_ARB_internalformat_query;
+int GLAD_GL_ARB_shader_atomic_counter_ops;
+int GLAD_GL_ARB_texture_mirrored_repeat;
+int GLAD_GL_EXT_shader_image_load_store;
+int GLAD_GL_EXT_copy_texture;
+int GLAD_GL_NV_register_combiners2;
+int GLAD_GL_SGIX_ycrcb_subsample;
+int GLAD_GL_ARB_copy_buffer;
+int GLAD_GL_NV_draw_texture;
+int GLAD_GL_EXT_texture_shared_exponent;
+int GLAD_GL_EXT_draw_instanced;
+int GLAD_GL_NV_copy_depth_to_color;
+int GLAD_GL_ARB_viewport_array;
+int GLAD_GL_ARB_separate_shader_objects;
+int GLAD_GL_EXT_multisample;
+int GLAD_GL_EXT_depth_bounds_test;
+int GLAD_GL_EXT_shared_texture_palette;
+int GLAD_GL_ARB_texture_env_add;
+int GLAD_GL_NV_video_capture;
+int GLAD_GL_ARB_sampler_objects;
+int GLAD_GL_ARB_matrix_palette;
+int GLAD_GL_SGIS_texture_color_mask;
+int GLAD_GL_EXT_packed_pixels;
+int GLAD_GL_EXT_coordinate_frame;
+int GLAD_GL_NV_transform_feedback2;
+int GLAD_GL_APPLE_aux_depth_stencil;
+int GLAD_GL_ARB_shader_subroutine;
+int GLAD_GL_EXT_framebuffer_sRGB;
+int GLAD_GL_ARB_texture_storage_multisample;
+int GLAD_GL_KHR_blend_equation_advanced_coherent;
+int GLAD_GL_EXT_vertex_attrib_64bit;
+int GLAD_GL_HP_texture_lighting;
+int GLAD_GL_NV_shader_buffer_store;
+int GLAD_GL_OES_query_matrix;
+int GLAD_GL_MESA_window_pos;
+int GLAD_GL_NV_fill_rectangle;
+int GLAD_GL_NV_shader_storage_buffer_object;
+int GLAD_GL_ARB_texture_query_lod;
+int GLAD_GL_SGIX_ir_instrument1;
+int GLAD_GL_ARB_shader_image_size;
+int GLAD_GL_NV_shader_atomic_counters;
+int GLAD_GL_APPLE_object_purgeable;
+int GLAD_GL_ARB_occlusion_query;
+int GLAD_GL_INGR_color_clamp;
+int GLAD_GL_SGI_color_table;
+int GLAD_GL_EXT_framebuffer_multisample_blit_scaled;
+int GLAD_GL_ARB_texture_cube_map_array;
+int GLAD_GL_AMD_debug_output;
+int GLAD_GL_EXT_gpu_shader4;
+int GLAD_GL_NV_geometry_program4;
+int GLAD_GL_NV_gpu_program5_mem_extended;
+int GLAD_GL_SGIX_scalebias_hint;
+int GLAD_GL_ARB_texture_border_clamp;
+int GLAD_GL_ARB_fragment_coord_conventions;
+int GLAD_GL_SGIX_polynomial_ffd;
+int GLAD_GL_EXT_provoking_vertex;
+int GLAD_GL_ARB_point_parameters;
+int GLAD_GL_ARB_shader_image_load_store;
+int GLAD_GL_ARB_conditional_render_inverted;
+int GLAD_GL_HP_occlusion_test;
+int GLAD_GL_ARB_ES3_compatibility;
+int GLAD_GL_EXT_texture_array;
+int GLAD_GL_ARB_texture_buffer_object_rgb32;
+int GLAD_GL_NV_bindless_multi_draw_indirect;
+int GLAD_GL_SGIX_texture_multi_buffer;
+int GLAD_GL_EXT_transform_feedback;
+int GLAD_GL_KHR_texture_compression_astc_ldr;
+int GLAD_GL_3DFX_multisample;
+int GLAD_GL_INTEL_fragment_shader_ordering;
+int GLAD_GL_ARB_texture_env_dot3;
+int GLAD_GL_NV_gpu_program4;
+int GLAD_GL_NV_gpu_program5;
+int GLAD_GL_NV_float_buffer;
+int GLAD_GL_SGIS_texture_edge_clamp;
+int GLAD_GL_ARB_framebuffer_sRGB;
+int GLAD_GL_SUN_slice_accum;
+int GLAD_GL_EXT_index_texture;
+int GLAD_GL_EXT_shader_image_load_formatted;
+int GLAD_GL_ARB_geometry_shader4;
+int GLAD_GL_EXT_separate_specular_color;
+int GLAD_GL_NV_fog_distance;
+int GLAD_GL_NV_conservative_raster;
+int GLAD_GL_SUN_convolution_border_modes;
+int GLAD_GL_SGIX_sprite;
+int GLAD_GL_ARB_get_program_binary;
+int GLAD_GL_ARB_timer_query;
+int GLAD_GL_AMD_occlusion_query_event;
+int GLAD_GL_SGIS_multisample;
+int GLAD_GL_EXT_framebuffer_object;
+int GLAD_GL_EXT_vertex_weighting;
+int GLAD_GL_ARB_vertex_array_bgra;
+int GLAD_GL_APPLE_vertex_array_range;
+int GLAD_GL_AMD_query_buffer_object;
+int GLAD_GL_NV_register_combiners;
+int GLAD_GL_ARB_draw_buffers;
+int GLAD_GL_ARB_clear_texture;
+int GLAD_GL_NV_fragment_program;
+int GLAD_GL_SGI_color_matrix;
+int GLAD_GL_EXT_cull_vertex;
+int GLAD_GL_EXT_texture_sRGB;
+int GLAD_GL_APPLE_row_bytes;
+int GLAD_GL_NV_texgen_reflection;
+int GLAD_GL_IBM_multimode_draw_arrays;
+int GLAD_GL_APPLE_vertex_array_object;
+int GLAD_GL_3DFX_texture_compression_FXT1;
+int GLAD_GL_GREMEDY_frame_terminator;
+int GLAD_GL_AMD_conservative_depth;
+int GLAD_GL_ARB_texture_float;
+int GLAD_GL_ARB_compressed_texture_pixel_storage;
+int GLAD_GL_SGIS_detail_texture;
+int GLAD_GL_ARB_draw_instanced;
+int GLAD_GL_OES_read_format;
+int GLAD_GL_ATI_texture_float;
+int GLAD_GL_WIN_specular_fog;
+int GLAD_GL_AMD_vertex_shader_layer;
+int GLAD_GL_ARB_shading_language_include;
+int GLAD_GL_APPLE_client_storage;
+int GLAD_GL_WIN_phong_shading;
+int GLAD_GL_INGR_blend_func_separate;
+int GLAD_GL_NV_path_rendering;
+int GLAD_GL_NV_conservative_raster_dilate;
+int GLAD_GL_ARB_texture_barrier;
+int GLAD_GL_ATI_vertex_streams;
+int GLAD_GL_ARB_post_depth_coverage;
+int GLAD_GL_NV_occlusion_query;
+int GLAD_GL_APPLE_rgb_422;
+int GLAD_GL_ARB_direct_state_access;
+int GLAD_GL_ARB_gpu_shader_int64;
+int GLAD_GL_ARB_seamless_cube_map;
+int GLAD_GL_ARB_cull_distance;
+int GLAD_GL_NV_vdpau_interop;
+int GLAD_GL_ARB_occlusion_query2;
+int GLAD_GL_ARB_internalformat_query2;
+int GLAD_GL_EXT_texture_filter_anisotropic;
+int GLAD_GL_SUN_vertex;
+int GLAD_GL_ARB_sparse_texture;
+int GLAD_GL_SGIS_texture_lod;
+int GLAD_GL_NV_vertex_program3;
+int GLAD_GL_NV_gpu_shader5;
+int GLAD_GL_NV_vertex_program4;
+int GLAD_GL_AMD_transform_feedback3_lines_triangles;
+int GLAD_GL_SGIS_fog_function;
+int GLAD_GL_EXT_x11_sync_object;
+int GLAD_GL_ARB_sync;
+int GLAD_GL_NV_sample_locations;
+int GLAD_GL_ARB_compute_variable_group_size;
+int GLAD_GL_OES_fixed_point;
+int GLAD_GL_NV_blend_square;
+int GLAD_GL_EXT_framebuffer_multisample;
+int GLAD_GL_ARB_gpu_shader5;
+int GLAD_GL_SGIS_texture4D;
+int GLAD_GL_EXT_texture3D;
+int GLAD_GL_ARB_multitexture;
+int GLAD_GL_EXT_secondary_color;
+int GLAD_GL_NV_parameter_buffer_object2;
+int GLAD_GL_ATI_vertex_array_object;
+int GLAD_GL_ARB_parallel_shader_compile;
+int GLAD_GL_NVX_gpu_memory_info;
+int GLAD_GL_SGIX_igloo_interface;
+int GLAD_GL_SGIS_point_line_texgen;
+int GLAD_GL_ARB_sample_locations;
+int GLAD_GL_ARB_sparse_buffer;
+int GLAD_GL_EXT_draw_range_elements;
+int GLAD_GL_SGIX_blend_alpha_minmax;
+int GLAD_GL_KHR_context_flush_control;
+PFNGLELEMENTPOINTERAPPLEPROC glad_glElementPointerAPPLE;
+PFNGLDRAWELEMENTARRAYAPPLEPROC glad_glDrawElementArrayAPPLE;
+PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC glad_glDrawRangeElementArrayAPPLE;
+PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC glad_glMultiDrawElementArrayAPPLE;
+PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC glad_glMultiDrawRangeElementArrayAPPLE;
+PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC glad_glMultiDrawArraysIndirectAMD;
+PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC glad_glMultiDrawElementsIndirectAMD;
+PFNGLTAGSAMPLEBUFFERSGIXPROC glad_glTagSampleBufferSGIX;
+PFNGLPOINTPARAMETERINVPROC glad_glPointParameteriNV;
+PFNGLPOINTPARAMETERIVNVPROC glad_glPointParameterivNV;
+PFNGLSTENCILOPSEPARATEATIPROC glad_glStencilOpSeparateATI;
+PFNGLSTENCILFUNCSEPARATEATIPROC glad_glStencilFuncSeparateATI;
+PFNGLTEXBUFFEREXTPROC glad_glTexBufferEXT;
+PFNGLWEIGHTBVARBPROC glad_glWeightbvARB;
+PFNGLWEIGHTSVARBPROC glad_glWeightsvARB;
+PFNGLWEIGHTIVARBPROC glad_glWeightivARB;
+PFNGLWEIGHTFVARBPROC glad_glWeightfvARB;
+PFNGLWEIGHTDVARBPROC glad_glWeightdvARB;
+PFNGLWEIGHTUBVARBPROC glad_glWeightubvARB;
+PFNGLWEIGHTUSVARBPROC glad_glWeightusvARB;
+PFNGLWEIGHTUIVARBPROC glad_glWeightuivARB;
+PFNGLWEIGHTPOINTERARBPROC glad_glWeightPointerARB;
+PFNGLVERTEXBLENDARBPROC glad_glVertexBlendARB;
+PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC glad_glFramebufferTextureMultiviewOVR;
+PFNGLGETPROGRAMINTERFACEIVPROC glad_glGetProgramInterfaceiv;
+PFNGLGETPROGRAMRESOURCEINDEXPROC glad_glGetProgramResourceIndex;
+PFNGLGETPROGRAMRESOURCENAMEPROC glad_glGetProgramResourceName;
+PFNGLGETPROGRAMRESOURCEIVPROC glad_glGetProgramResourceiv;
+PFNGLGETPROGRAMRESOURCELOCATIONPROC glad_glGetProgramResourceLocation;
+PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC glad_glGetProgramResourceLocationIndex;
+PFNGLINDEXFUNCEXTPROC glad_glIndexFuncEXT;
+PFNGLMAKEBUFFERRESIDENTNVPROC glad_glMakeBufferResidentNV;
+PFNGLMAKEBUFFERNONRESIDENTNVPROC glad_glMakeBufferNonResidentNV;
+PFNGLISBUFFERRESIDENTNVPROC glad_glIsBufferResidentNV;
+PFNGLMAKENAMEDBUFFERRESIDENTNVPROC glad_glMakeNamedBufferResidentNV;
+PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC glad_glMakeNamedBufferNonResidentNV;
+PFNGLISNAMEDBUFFERRESIDENTNVPROC glad_glIsNamedBufferResidentNV;
+PFNGLGETBUFFERPARAMETERUI64VNVPROC glad_glGetBufferParameterui64vNV;
+PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC glad_glGetNamedBufferParameterui64vNV;
+PFNGLGETINTEGERUI64VNVPROC glad_glGetIntegerui64vNV;
+PFNGLUNIFORMUI64NVPROC glad_glUniformui64NV;
+PFNGLUNIFORMUI64VNVPROC glad_glUniformui64vNV;
+PFNGLGETUNIFORMUI64VNVPROC glad_glGetUniformui64vNV;
+PFNGLPROGRAMUNIFORMUI64NVPROC glad_glProgramUniformui64NV;
+PFNGLPROGRAMUNIFORMUI64VNVPROC glad_glProgramUniformui64vNV;
+PFNGLCOLORSUBTABLEEXTPROC glad_glColorSubTableEXT;
+PFNGLCOPYCOLORSUBTABLEEXTPROC glad_glCopyColorSubTableEXT;
+PFNGLFINISHTEXTURESUNXPROC glad_glFinishTextureSUNX;
+PFNGLMULTIDRAWARRAYSEXTPROC glad_glMultiDrawArraysEXT;
+PFNGLMULTIDRAWELEMENTSEXTPROC glad_glMultiDrawElementsEXT;
+PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC glad_glGetActiveAtomicCounterBufferiv;
+PFNGLBEGINCONDITIONALRENDERNVPROC glad_glBeginConditionalRenderNV;
+PFNGLENDCONDITIONALRENDERNVPROC glad_glEndConditionalRenderNV;
+PFNGLRESIZEBUFFERSMESAPROC glad_glResizeBuffersMESA;
+PFNGLTEXTUREVIEWPROC glad_glTextureView;
+PFNGLCONVOLUTIONFILTER1DEXTPROC glad_glConvolutionFilter1DEXT;
+PFNGLCONVOLUTIONFILTER2DEXTPROC glad_glConvolutionFilter2DEXT;
+PFNGLCONVOLUTIONPARAMETERFEXTPROC glad_glConvolutionParameterfEXT;
+PFNGLCONVOLUTIONPARAMETERFVEXTPROC glad_glConvolutionParameterfvEXT;
+PFNGLCONVOLUTIONPARAMETERIEXTPROC glad_glConvolutionParameteriEXT;
+PFNGLCONVOLUTIONPARAMETERIVEXTPROC glad_glConvolutionParameterivEXT;
+PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC glad_glCopyConvolutionFilter1DEXT;
+PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC glad_glCopyConvolutionFilter2DEXT;
+PFNGLGETCONVOLUTIONFILTEREXTPROC glad_glGetConvolutionFilterEXT;
+PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC glad_glGetConvolutionParameterfvEXT;
+PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC glad_glGetConvolutionParameterivEXT;
+PFNGLGETSEPARABLEFILTEREXTPROC glad_glGetSeparableFilterEXT;
+PFNGLSEPARABLEFILTER2DEXTPROC glad_glSeparableFilter2DEXT;
+PFNGLVERTEXATTRIBL1I64NVPROC glad_glVertexAttribL1i64NV;
+PFNGLVERTEXATTRIBL2I64NVPROC glad_glVertexAttribL2i64NV;
+PFNGLVERTEXATTRIBL3I64NVPROC glad_glVertexAttribL3i64NV;
+PFNGLVERTEXATTRIBL4I64NVPROC glad_glVertexAttribL4i64NV;
+PFNGLVERTEXATTRIBL1I64VNVPROC glad_glVertexAttribL1i64vNV;
+PFNGLVERTEXATTRIBL2I64VNVPROC glad_glVertexAttribL2i64vNV;
+PFNGLVERTEXATTRIBL3I64VNVPROC glad_glVertexAttribL3i64vNV;
+PFNGLVERTEXATTRIBL4I64VNVPROC glad_glVertexAttribL4i64vNV;
+PFNGLVERTEXATTRIBL1UI64NVPROC glad_glVertexAttribL1ui64NV;
+PFNGLVERTEXATTRIBL2UI64NVPROC glad_glVertexAttribL2ui64NV;
+PFNGLVERTEXATTRIBL3UI64NVPROC glad_glVertexAttribL3ui64NV;
+PFNGLVERTEXATTRIBL4UI64NVPROC glad_glVertexAttribL4ui64NV;
+PFNGLVERTEXATTRIBL1UI64VNVPROC glad_glVertexAttribL1ui64vNV;
+PFNGLVERTEXATTRIBL2UI64VNVPROC glad_glVertexAttribL2ui64vNV;
+PFNGLVERTEXATTRIBL3UI64VNVPROC glad_glVertexAttribL3ui64vNV;
+PFNGLVERTEXATTRIBL4UI64VNVPROC glad_glVertexAttribL4ui64vNV;
+PFNGLGETVERTEXATTRIBLI64VNVPROC glad_glGetVertexAttribLi64vNV;
+PFNGLGETVERTEXATTRIBLUI64VNVPROC glad_glGetVertexAttribLui64vNV;
+PFNGLVERTEXATTRIBLFORMATNVPROC glad_glVertexAttribLFormatNV;
+PFNGLCOLORTABLEEXTPROC glad_glColorTableEXT;
+PFNGLGETCOLORTABLEEXTPROC glad_glGetColorTableEXT;
+PFNGLGETCOLORTABLEPARAMETERIVEXTPROC glad_glGetColorTableParameterivEXT;
+PFNGLGETCOLORTABLEPARAMETERFVEXTPROC glad_glGetColorTableParameterfvEXT;
+PFNGLTEXBUFFERARBPROC glad_glTexBufferARB;
+PFNGLPNTRIANGLESIATIPROC glad_glPNTrianglesiATI;
+PFNGLPNTRIANGLESFATIPROC glad_glPNTrianglesfATI;
+PFNGLFLUSHRASTERSGIXPROC glad_glFlushRasterSGIX;
+PFNGLAPPLYTEXTUREEXTPROC glad_glApplyTextureEXT;
+PFNGLTEXTURELIGHTEXTPROC glad_glTextureLightEXT;
+PFNGLTEXTUREMATERIALEXTPROC glad_glTextureMaterialEXT;
+PFNGLIMAGETRANSFORMPARAMETERIHPPROC glad_glImageTransformParameteriHP;
+PFNGLIMAGETRANSFORMPARAMETERFHPPROC glad_glImageTransformParameterfHP;
+PFNGLIMAGETRANSFORMPARAMETERIVHPPROC glad_glImageTransformParameterivHP;
+PFNGLIMAGETRANSFORMPARAMETERFVHPPROC glad_glImageTransformParameterfvHP;
+PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC glad_glGetImageTransformParameterivHP;
+PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC glad_glGetImageTransformParameterfvHP;
+PFNGLBLENDFUNCINDEXEDAMDPROC glad_glBlendFuncIndexedAMD;
+PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC glad_glBlendFuncSeparateIndexedAMD;
+PFNGLBLENDEQUATIONINDEXEDAMDPROC glad_glBlendEquationIndexedAMD;
+PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC glad_glBlendEquationSeparateIndexedAMD;
+PFNGLTEXTURERANGEAPPLEPROC glad_glTextureRangeAPPLE;
+PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC glad_glGetTexParameterPointervAPPLE;
+PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC glad_glFramebufferTextureLayerEXT;
+PFNGLTEXTUREBARRIERNVPROC glad_glTextureBarrierNV;
+PFNGLTBUFFERMASK3DFXPROC glad_glTbufferMask3DFX;
+PFNGLFRAMETERMINATORGREMEDYPROC glad_glFrameTerminatorGREMEDY;
+PFNGLUSESHADERPROGRAMEXTPROC glad_glUseShaderProgramEXT;
+PFNGLACTIVEPROGRAMEXTPROC glad_glActiveProgramEXT;
+PFNGLCREATESHADERPROGRAMEXTPROC glad_glCreateShaderProgramEXT;
+PFNGLACTIVESHADERPROGRAMEXTPROC glad_glActiveShaderProgramEXT;
+PFNGLBINDPROGRAMPIPELINEEXTPROC glad_glBindProgramPipelineEXT;
+PFNGLCREATESHADERPROGRAMVEXTPROC glad_glCreateShaderProgramvEXT;
+PFNGLDELETEPROGRAMPIPELINESEXTPROC glad_glDeleteProgramPipelinesEXT;
+PFNGLGENPROGRAMPIPELINESEXTPROC glad_glGenProgramPipelinesEXT;
+PFNGLGETPROGRAMPIPELINEINFOLOGEXTPROC glad_glGetProgramPipelineInfoLogEXT;
+PFNGLGETPROGRAMPIPELINEIVEXTPROC glad_glGetProgramPipelineivEXT;
+PFNGLISPROGRAMPIPELINEEXTPROC glad_glIsProgramPipelineEXT;
+PFNGLPROGRAMPARAMETERIEXTPROC glad_glProgramParameteriEXT;
+PFNGLPROGRAMUNIFORM1FEXTPROC glad_glProgramUniform1fEXT;
+PFNGLPROGRAMUNIFORM1FVEXTPROC glad_glProgramUniform1fvEXT;
+PFNGLPROGRAMUNIFORM1IEXTPROC glad_glProgramUniform1iEXT;
+PFNGLPROGRAMUNIFORM1IVEXTPROC glad_glProgramUniform1ivEXT;
+PFNGLPROGRAMUNIFORM2FEXTPROC glad_glProgramUniform2fEXT;
+PFNGLPROGRAMUNIFORM2FVEXTPROC glad_glProgramUniform2fvEXT;
+PFNGLPROGRAMUNIFORM2IEXTPROC glad_glProgramUniform2iEXT;
+PFNGLPROGRAMUNIFORM2IVEXTPROC glad_glProgramUniform2ivEXT;
+PFNGLPROGRAMUNIFORM3FEXTPROC glad_glProgramUniform3fEXT;
+PFNGLPROGRAMUNIFORM3FVEXTPROC glad_glProgramUniform3fvEXT;
+PFNGLPROGRAMUNIFORM3IEXTPROC glad_glProgramUniform3iEXT;
+PFNGLPROGRAMUNIFORM3IVEXTPROC glad_glProgramUniform3ivEXT;
+PFNGLPROGRAMUNIFORM4FEXTPROC glad_glProgramUniform4fEXT;
+PFNGLPROGRAMUNIFORM4FVEXTPROC glad_glProgramUniform4fvEXT;
+PFNGLPROGRAMUNIFORM4IEXTPROC glad_glProgramUniform4iEXT;
+PFNGLPROGRAMUNIFORM4IVEXTPROC glad_glProgramUniform4ivEXT;
+PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC glad_glProgramUniformMatrix2fvEXT;
+PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC glad_glProgramUniformMatrix3fvEXT;
+PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC glad_glProgramUniformMatrix4fvEXT;
+PFNGLUSEPROGRAMSTAGESEXTPROC glad_glUseProgramStagesEXT;
+PFNGLVALIDATEPROGRAMPIPELINEEXTPROC glad_glValidateProgramPipelineEXT;
+PFNGLPROGRAMUNIFORM1UIEXTPROC glad_glProgramUniform1uiEXT;
+PFNGLPROGRAMUNIFORM2UIEXTPROC glad_glProgramUniform2uiEXT;
+PFNGLPROGRAMUNIFORM3UIEXTPROC glad_glProgramUniform3uiEXT;
+PFNGLPROGRAMUNIFORM4UIEXTPROC glad_glProgramUniform4uiEXT;
+PFNGLPROGRAMUNIFORM1UIVEXTPROC glad_glProgramUniform1uivEXT;
+PFNGLPROGRAMUNIFORM2UIVEXTPROC glad_glProgramUniform2uivEXT;
+PFNGLPROGRAMUNIFORM3UIVEXTPROC glad_glProgramUniform3uivEXT;
+PFNGLPROGRAMUNIFORM4UIVEXTPROC glad_glProgramUniform4uivEXT;
+PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC glad_glProgramUniformMatrix2x3fvEXT;
+PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC glad_glProgramUniformMatrix3x2fvEXT;
+PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC glad_glProgramUniformMatrix2x4fvEXT;
+PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC glad_glProgramUniformMatrix4x2fvEXT;
+PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC glad_glProgramUniformMatrix3x4fvEXT;
+PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC glad_glProgramUniformMatrix4x3fvEXT;
+PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC glad_glTexImage2DMultisampleCoverageNV;
+PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC glad_glTexImage3DMultisampleCoverageNV;
+PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC glad_glTextureImage2DMultisampleNV;
+PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC glad_glTextureImage3DMultisampleNV;
+PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC glad_glTextureImage2DMultisampleCoverageNV;
+PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC glad_glTextureImage3DMultisampleCoverageNV;
+PFNGLDELETEOBJECTARBPROC glad_glDeleteObjectARB;
+PFNGLGETHANDLEARBPROC glad_glGetHandleARB;
+PFNGLDETACHOBJECTARBPROC glad_glDetachObjectARB;
+PFNGLCREATESHADEROBJECTARBPROC glad_glCreateShaderObjectARB;
+PFNGLSHADERSOURCEARBPROC glad_glShaderSourceARB;
+PFNGLCOMPILESHADERARBPROC glad_glCompileShaderARB;
+PFNGLCREATEPROGRAMOBJECTARBPROC glad_glCreateProgramObjectARB;
+PFNGLATTACHOBJECTARBPROC glad_glAttachObjectARB;
+PFNGLLINKPROGRAMARBPROC glad_glLinkProgramARB;
+PFNGLUSEPROGRAMOBJECTARBPROC glad_glUseProgramObjectARB;
+PFNGLVALIDATEPROGRAMARBPROC glad_glValidateProgramARB;
+PFNGLUNIFORM1FARBPROC glad_glUniform1fARB;
+PFNGLUNIFORM2FARBPROC glad_glUniform2fARB;
+PFNGLUNIFORM3FARBPROC glad_glUniform3fARB;
+PFNGLUNIFORM4FARBPROC glad_glUniform4fARB;
+PFNGLUNIFORM1IARBPROC glad_glUniform1iARB;
+PFNGLUNIFORM2IARBPROC glad_glUniform2iARB;
+PFNGLUNIFORM3IARBPROC glad_glUniform3iARB;
+PFNGLUNIFORM4IARBPROC glad_glUniform4iARB;
+PFNGLUNIFORM1FVARBPROC glad_glUniform1fvARB;
+PFNGLUNIFORM2FVARBPROC glad_glUniform2fvARB;
+PFNGLUNIFORM3FVARBPROC glad_glUniform3fvARB;
+PFNGLUNIFORM4FVARBPROC glad_glUniform4fvARB;
+PFNGLUNIFORM1IVARBPROC glad_glUniform1ivARB;
+PFNGLUNIFORM2IVARBPROC glad_glUniform2ivARB;
+PFNGLUNIFORM3IVARBPROC glad_glUniform3ivARB;
+PFNGLUNIFORM4IVARBPROC glad_glUniform4ivARB;
+PFNGLUNIFORMMATRIX2FVARBPROC glad_glUniformMatrix2fvARB;
+PFNGLUNIFORMMATRIX3FVARBPROC glad_glUniformMatrix3fvARB;
+PFNGLUNIFORMMATRIX4FVARBPROC glad_glUniformMatrix4fvARB;
+PFNGLGETOBJECTPARAMETERFVARBPROC glad_glGetObjectParameterfvARB;
+PFNGLGETOBJECTPARAMETERIVARBPROC glad_glGetObjectParameterivARB;
+PFNGLGETINFOLOGARBPROC glad_glGetInfoLogARB;
+PFNGLGETATTACHEDOBJECTSARBPROC glad_glGetAttachedObjectsARB;
+PFNGLGETUNIFORMLOCATIONARBPROC glad_glGetUniformLocationARB;
+PFNGLGETACTIVEUNIFORMARBPROC glad_glGetActiveUniformARB;
+PFNGLGETUNIFORMFVARBPROC glad_glGetUniformfvARB;
+PFNGLGETUNIFORMIVARBPROC glad_glGetUniformivARB;
+PFNGLGETSHADERSOURCEARBPROC glad_glGetShaderSourceARB;
+PFNGLTEXBUMPPARAMETERIVATIPROC glad_glTexBumpParameterivATI;
+PFNGLTEXBUMPPARAMETERFVATIPROC glad_glTexBumpParameterfvATI;
+PFNGLGETTEXBUMPPARAMETERIVATIPROC glad_glGetTexBumpParameterivATI;
+PFNGLGETTEXBUMPPARAMETERFVATIPROC glad_glGetTexBumpParameterfvATI;
+PFNGLMAPOBJECTBUFFERATIPROC glad_glMapObjectBufferATI;
+PFNGLUNMAPOBJECTBUFFERATIPROC glad_glUnmapObjectBufferATI;
+PFNGLGETGRAPHICSRESETSTATUSARBPROC glad_glGetGraphicsResetStatusARB;
+PFNGLGETNTEXIMAGEARBPROC glad_glGetnTexImageARB;
+PFNGLREADNPIXELSARBPROC glad_glReadnPixelsARB;
+PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC glad_glGetnCompressedTexImageARB;
+PFNGLGETNUNIFORMFVARBPROC glad_glGetnUniformfvARB;
+PFNGLGETNUNIFORMIVARBPROC glad_glGetnUniformivARB;
+PFNGLGETNUNIFORMUIVARBPROC glad_glGetnUniformuivARB;
+PFNGLGETNUNIFORMDVARBPROC glad_glGetnUniformdvARB;
+PFNGLGETNMAPDVARBPROC glad_glGetnMapdvARB;
+PFNGLGETNMAPFVARBPROC glad_glGetnMapfvARB;
+PFNGLGETNMAPIVARBPROC glad_glGetnMapivARB;
+PFNGLGETNPIXELMAPFVARBPROC glad_glGetnPixelMapfvARB;
+PFNGLGETNPIXELMAPUIVARBPROC glad_glGetnPixelMapuivARB;
+PFNGLGETNPIXELMAPUSVARBPROC glad_glGetnPixelMapusvARB;
+PFNGLGETNPOLYGONSTIPPLEARBPROC glad_glGetnPolygonStippleARB;
+PFNGLGETNCOLORTABLEARBPROC glad_glGetnColorTableARB;
+PFNGLGETNCONVOLUTIONFILTERARBPROC glad_glGetnConvolutionFilterARB;
+PFNGLGETNSEPARABLEFILTERARBPROC glad_glGetnSeparableFilterARB;
+PFNGLGETNHISTOGRAMARBPROC glad_glGetnHistogramARB;
+PFNGLGETNMINMAXARBPROC glad_glGetnMinmaxARB;
+PFNGLPIXELDATARANGENVPROC glad_glPixelDataRangeNV;
+PFNGLFLUSHPIXELDATARANGENVPROC glad_glFlushPixelDataRangeNV;
+PFNGLBLITFRAMEBUFFEREXTPROC glad_glBlitFramebufferEXT;
+PFNGLUNIFORM1DPROC glad_glUniform1d;
+PFNGLUNIFORM2DPROC glad_glUniform2d;
+PFNGLUNIFORM3DPROC glad_glUniform3d;
+PFNGLUNIFORM4DPROC glad_glUniform4d;
+PFNGLUNIFORM1DVPROC glad_glUniform1dv;
+PFNGLUNIFORM2DVPROC glad_glUniform2dv;
+PFNGLUNIFORM3DVPROC glad_glUniform3dv;
+PFNGLUNIFORM4DVPROC glad_glUniform4dv;
+PFNGLUNIFORMMATRIX2DVPROC glad_glUniformMatrix2dv;
+PFNGLUNIFORMMATRIX3DVPROC glad_glUniformMatrix3dv;
+PFNGLUNIFORMMATRIX4DVPROC glad_glUniformMatrix4dv;
+PFNGLUNIFORMMATRIX2X3DVPROC glad_glUniformMatrix2x3dv;
+PFNGLUNIFORMMATRIX2X4DVPROC glad_glUniformMatrix2x4dv;
+PFNGLUNIFORMMATRIX3X2DVPROC glad_glUniformMatrix3x2dv;
+PFNGLUNIFORMMATRIX3X4DVPROC glad_glUniformMatrix3x4dv;
+PFNGLUNIFORMMATRIX4X2DVPROC glad_glUniformMatrix4x2dv;
+PFNGLUNIFORMMATRIX4X3DVPROC glad_glUniformMatrix4x3dv;
+PFNGLGETUNIFORMDVPROC glad_glGetUniformdv;
+PFNGLCREATESTATESNVPROC glad_glCreateStatesNV;
+PFNGLDELETESTATESNVPROC glad_glDeleteStatesNV;
+PFNGLISSTATENVPROC glad_glIsStateNV;
+PFNGLSTATECAPTURENVPROC glad_glStateCaptureNV;
+PFNGLGETCOMMANDHEADERNVPROC glad_glGetCommandHeaderNV;
+PFNGLGETSTAGEINDEXNVPROC glad_glGetStageIndexNV;
+PFNGLDRAWCOMMANDSNVPROC glad_glDrawCommandsNV;
+PFNGLDRAWCOMMANDSADDRESSNVPROC glad_glDrawCommandsAddressNV;
+PFNGLDRAWCOMMANDSSTATESNVPROC glad_glDrawCommandsStatesNV;
+PFNGLDRAWCOMMANDSSTATESADDRESSNVPROC glad_glDrawCommandsStatesAddressNV;
+PFNGLCREATECOMMANDLISTSNVPROC glad_glCreateCommandListsNV;
+PFNGLDELETECOMMANDLISTSNVPROC glad_glDeleteCommandListsNV;
+PFNGLISCOMMANDLISTNVPROC glad_glIsCommandListNV;
+PFNGLLISTDRAWCOMMANDSSTATESCLIENTNVPROC glad_glListDrawCommandsStatesClientNV;
+PFNGLCOMMANDLISTSEGMENTSNVPROC glad_glCommandListSegmentsNV;
+PFNGLCOMPILECOMMANDLISTNVPROC glad_glCompileCommandListNV;
+PFNGLCALLCOMMANDLISTNVPROC glad_glCallCommandListNV;
+PFNGLVERTEXWEIGHTFEXTPROC glad_glVertexWeightfEXT;
+PFNGLVERTEXWEIGHTFVEXTPROC glad_glVertexWeightfvEXT;
+PFNGLVERTEXWEIGHTPOINTEREXTPROC glad_glVertexWeightPointerEXT;
+PFNGLSTRINGMARKERGREMEDYPROC glad_glStringMarkerGREMEDY;
+PFNGLTEXSUBIMAGE1DEXTPROC glad_glTexSubImage1DEXT;
+PFNGLTEXSUBIMAGE2DEXTPROC glad_glTexSubImage2DEXT;
+PFNGLPROGRAMENVPARAMETERS4FVEXTPROC glad_glProgramEnvParameters4fvEXT;
+PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC glad_glProgramLocalParameters4fvEXT;
+PFNGLMAPCONTROLPOINTSNVPROC glad_glMapControlPointsNV;
+PFNGLMAPPARAMETERIVNVPROC glad_glMapParameterivNV;
+PFNGLMAPPARAMETERFVNVPROC glad_glMapParameterfvNV;
+PFNGLGETMAPCONTROLPOINTSNVPROC glad_glGetMapControlPointsNV;
+PFNGLGETMAPPARAMETERIVNVPROC glad_glGetMapParameterivNV;
+PFNGLGETMAPPARAMETERFVNVPROC glad_glGetMapParameterfvNV;
+PFNGLGETMAPATTRIBPARAMETERIVNVPROC glad_glGetMapAttribParameterivNV;
+PFNGLGETMAPATTRIBPARAMETERFVNVPROC glad_glGetMapAttribParameterfvNV;
+PFNGLEVALMAPSNVPROC glad_glEvalMapsNV;
+PFNGLGETTEXFILTERFUNCSGISPROC glad_glGetTexFilterFuncSGIS;
+PFNGLTEXFILTERFUNCSGISPROC glad_glTexFilterFuncSGIS;
+PFNGLGETPERFMONITORGROUPSAMDPROC glad_glGetPerfMonitorGroupsAMD;
+PFNGLGETPERFMONITORCOUNTERSAMDPROC glad_glGetPerfMonitorCountersAMD;
+PFNGLGETPERFMONITORGROUPSTRINGAMDPROC glad_glGetPerfMonitorGroupStringAMD;
+PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC glad_glGetPerfMonitorCounterStringAMD;
+PFNGLGETPERFMONITORCOUNTERINFOAMDPROC glad_glGetPerfMonitorCounterInfoAMD;
+PFNGLGENPERFMONITORSAMDPROC glad_glGenPerfMonitorsAMD;
+PFNGLDELETEPERFMONITORSAMDPROC glad_glDeletePerfMonitorsAMD;
+PFNGLSELECTPERFMONITORCOUNTERSAMDPROC glad_glSelectPerfMonitorCountersAMD;
+PFNGLBEGINPERFMONITORAMDPROC glad_glBeginPerfMonitorAMD;
+PFNGLENDPERFMONITORAMDPROC glad_glEndPerfMonitorAMD;
+PFNGLGETPERFMONITORCOUNTERDATAAMDPROC glad_glGetPerfMonitorCounterDataAMD;
+PFNGLSTENCILCLEARTAGEXTPROC glad_glStencilClearTagEXT;
+PFNGLPRESENTFRAMEKEYEDNVPROC glad_glPresentFrameKeyedNV;
+PFNGLPRESENTFRAMEDUALFILLNVPROC glad_glPresentFrameDualFillNV;
+PFNGLGETVIDEOIVNVPROC glad_glGetVideoivNV;
+PFNGLGETVIDEOUIVNVPROC glad_glGetVideouivNV;
+PFNGLGETVIDEOI64VNVPROC glad_glGetVideoi64vNV;
+PFNGLGETVIDEOUI64VNVPROC glad_glGetVideoui64vNV;
+PFNGLFRAMEZOOMSGIXPROC glad_glFrameZoomSGIX;
+PFNGLBEGINTRANSFORMFEEDBACKNVPROC glad_glBeginTransformFeedbackNV;
+PFNGLENDTRANSFORMFEEDBACKNVPROC glad_glEndTransformFeedbackNV;
+PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC glad_glTransformFeedbackAttribsNV;
+PFNGLBINDBUFFERRANGENVPROC glad_glBindBufferRangeNV;
+PFNGLBINDBUFFEROFFSETNVPROC glad_glBindBufferOffsetNV;
+PFNGLBINDBUFFERBASENVPROC glad_glBindBufferBaseNV;
+PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC glad_glTransformFeedbackVaryingsNV;
+PFNGLACTIVEVARYINGNVPROC glad_glActiveVaryingNV;
+PFNGLGETVARYINGLOCATIONNVPROC glad_glGetVaryingLocationNV;
+PFNGLGETACTIVEVARYINGNVPROC glad_glGetActiveVaryingNV;
+PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC glad_glGetTransformFeedbackVaryingNV;
+PFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC glad_glTransformFeedbackStreamAttribsNV;
+PFNGLPROGRAMNAMEDPARAMETER4FNVPROC glad_glProgramNamedParameter4fNV;
+PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC glad_glProgramNamedParameter4fvNV;
+PFNGLPROGRAMNAMEDPARAMETER4DNVPROC glad_glProgramNamedParameter4dNV;
+PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC glad_glProgramNamedParameter4dvNV;
+PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC glad_glGetProgramNamedParameterfvNV;
+PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC glad_glGetProgramNamedParameterdvNV;
+PFNGLSTENCILOPVALUEAMDPROC glad_glStencilOpValueAMD;
+PFNGLVERTEXATTRIBDIVISORARBPROC glad_glVertexAttribDivisorARB;
+PFNGLPOLYGONOFFSETEXTPROC glad_glPolygonOffsetEXT;
+PFNGLGETGRAPHICSRESETSTATUSPROC glad_glGetGraphicsResetStatus;
+PFNGLREADNPIXELSPROC glad_glReadnPixels;
+PFNGLGETNUNIFORMFVPROC glad_glGetnUniformfv;
+PFNGLGETNUNIFORMIVPROC glad_glGetnUniformiv;
+PFNGLGETNUNIFORMUIVPROC glad_glGetnUniformuiv;
+PFNGLGETGRAPHICSRESETSTATUSKHRPROC glad_glGetGraphicsResetStatusKHR;
+PFNGLREADNPIXELSKHRPROC glad_glReadnPixelsKHR;
+PFNGLGETNUNIFORMFVKHRPROC glad_glGetnUniformfvKHR;
+PFNGLGETNUNIFORMIVKHRPROC glad_glGetnUniformivKHR;
+PFNGLGETNUNIFORMUIVKHRPROC glad_glGetnUniformuivKHR;
+PFNGLTEXSTORAGESPARSEAMDPROC glad_glTexStorageSparseAMD;
+PFNGLTEXTURESTORAGESPARSEAMDPROC glad_glTextureStorageSparseAMD;
+PFNGLCLIPCONTROLPROC glad_glClipControl;
+PFNGLFRAGMENTCOVERAGECOLORNVPROC glad_glFragmentCoverageColorNV;
+PFNGLDELETEFENCESNVPROC glad_glDeleteFencesNV;
+PFNGLGENFENCESNVPROC glad_glGenFencesNV;
+PFNGLISFENCENVPROC glad_glIsFenceNV;
+PFNGLTESTFENCENVPROC glad_glTestFenceNV;
+PFNGLGETFENCEIVNVPROC glad_glGetFenceivNV;
+PFNGLFINISHFENCENVPROC glad_glFinishFenceNV;
+PFNGLSETFENCENVPROC glad_glSetFenceNV;
+PFNGLTEXBUFFERRANGEPROC glad_glTexBufferRange;
+PFNGLDRAWMESHARRAYSSUNPROC glad_glDrawMeshArraysSUN;
+PFNGLBINDVERTEXBUFFERPROC glad_glBindVertexBuffer;
+PFNGLVERTEXATTRIBFORMATPROC glad_glVertexAttribFormat;
+PFNGLVERTEXATTRIBIFORMATPROC glad_glVertexAttribIFormat;
+PFNGLVERTEXATTRIBLFORMATPROC glad_glVertexAttribLFormat;
+PFNGLVERTEXATTRIBBINDINGPROC glad_glVertexAttribBinding;
+PFNGLVERTEXBINDINGDIVISORPROC glad_glVertexBindingDivisor;
+PFNGLFRAMEBUFFERPARAMETERIPROC glad_glFramebufferParameteri;
+PFNGLGETFRAMEBUFFERPARAMETERIVPROC glad_glGetFramebufferParameteriv;
+PFNGLCREATESYNCFROMCLEVENTARBPROC glad_glCreateSyncFromCLeventARB;
+PFNGLCLEARDEPTHFOESPROC glad_glClearDepthfOES;
+PFNGLCLIPPLANEFOESPROC glad_glClipPlanefOES;
+PFNGLDEPTHRANGEFOESPROC glad_glDepthRangefOES;
+PFNGLFRUSTUMFOESPROC glad_glFrustumfOES;
+PFNGLGETCLIPPLANEFOESPROC glad_glGetClipPlanefOES;
+PFNGLORTHOFOESPROC glad_glOrthofOES;
+PFNGLPRIMITIVERESTARTNVPROC glad_glPrimitiveRestartNV;
+PFNGLPRIMITIVERESTARTINDEXNVPROC glad_glPrimitiveRestartIndexNV;
+PFNGLGLOBALALPHAFACTORBSUNPROC glad_glGlobalAlphaFactorbSUN;
+PFNGLGLOBALALPHAFACTORSSUNPROC glad_glGlobalAlphaFactorsSUN;
+PFNGLGLOBALALPHAFACTORISUNPROC glad_glGlobalAlphaFactoriSUN;
+PFNGLGLOBALALPHAFACTORFSUNPROC glad_glGlobalAlphaFactorfSUN;
+PFNGLGLOBALALPHAFACTORDSUNPROC glad_glGlobalAlphaFactordSUN;
+PFNGLGLOBALALPHAFACTORUBSUNPROC glad_glGlobalAlphaFactorubSUN;
+PFNGLGLOBALALPHAFACTORUSSUNPROC glad_glGlobalAlphaFactorusSUN;
+PFNGLGLOBALALPHAFACTORUISUNPROC glad_glGlobalAlphaFactoruiSUN;
+PFNGLARETEXTURESRESIDENTEXTPROC glad_glAreTexturesResidentEXT;
+PFNGLBINDTEXTUREEXTPROC glad_glBindTextureEXT;
+PFNGLDELETETEXTURESEXTPROC glad_glDeleteTexturesEXT;
+PFNGLGENTEXTURESEXTPROC glad_glGenTexturesEXT;
+PFNGLISTEXTUREEXTPROC glad_glIsTextureEXT;
+PFNGLPRIORITIZETEXTURESEXTPROC glad_glPrioritizeTexturesEXT;
+PFNGLGENNAMESAMDPROC glad_glGenNamesAMD;
+PFNGLDELETENAMESAMDPROC glad_glDeleteNamesAMD;
+PFNGLISNAMEAMDPROC glad_glIsNameAMD;
+PFNGLBUFFERSTORAGEPROC glad_glBufferStorage;
+PFNGLENABLEVERTEXATTRIBAPPLEPROC glad_glEnableVertexAttribAPPLE;
+PFNGLDISABLEVERTEXATTRIBAPPLEPROC glad_glDisableVertexAttribAPPLE;
+PFNGLISVERTEXATTRIBENABLEDAPPLEPROC glad_glIsVertexAttribEnabledAPPLE;
+PFNGLMAPVERTEXATTRIB1DAPPLEPROC glad_glMapVertexAttrib1dAPPLE;
+PFNGLMAPVERTEXATTRIB1FAPPLEPROC glad_glMapVertexAttrib1fAPPLE;
+PFNGLMAPVERTEXATTRIB2DAPPLEPROC glad_glMapVertexAttrib2dAPPLE;
+PFNGLMAPVERTEXATTRIB2FAPPLEPROC glad_glMapVertexAttrib2fAPPLE;
+PFNGLBINDBUFFERSBASEPROC glad_glBindBuffersBase;
+PFNGLBINDBUFFERSRANGEPROC glad_glBindBuffersRange;
+PFNGLBINDTEXTURESPROC glad_glBindTextures;
+PFNGLBINDSAMPLERSPROC glad_glBindSamplers;
+PFNGLBINDIMAGETEXTURESPROC glad_glBindImageTextures;
+PFNGLBINDVERTEXBUFFERSPROC glad_glBindVertexBuffers;
+PFNGLGETLISTPARAMETERFVSGIXPROC glad_glGetListParameterfvSGIX;
+PFNGLGETLISTPARAMETERIVSGIXPROC glad_glGetListParameterivSGIX;
+PFNGLLISTPARAMETERFSGIXPROC glad_glListParameterfSGIX;
+PFNGLLISTPARAMETERFVSGIXPROC glad_glListParameterfvSGIX;
+PFNGLLISTPARAMETERISGIXPROC glad_glListParameteriSGIX;
+PFNGLLISTPARAMETERIVSGIXPROC glad_glListParameterivSGIX;
+PFNGLBUFFERADDRESSRANGENVPROC glad_glBufferAddressRangeNV;
+PFNGLVERTEXFORMATNVPROC glad_glVertexFormatNV;
+PFNGLNORMALFORMATNVPROC glad_glNormalFormatNV;
+PFNGLCOLORFORMATNVPROC glad_glColorFormatNV;
+PFNGLINDEXFORMATNVPROC glad_glIndexFormatNV;
+PFNGLTEXCOORDFORMATNVPROC glad_glTexCoordFormatNV;
+PFNGLEDGEFLAGFORMATNVPROC glad_glEdgeFlagFormatNV;
+PFNGLSECONDARYCOLORFORMATNVPROC glad_glSecondaryColorFormatNV;
+PFNGLFOGCOORDFORMATNVPROC glad_glFogCoordFormatNV;
+PFNGLVERTEXATTRIBFORMATNVPROC glad_glVertexAttribFormatNV;
+PFNGLVERTEXATTRIBIFORMATNVPROC glad_glVertexAttribIFormatNV;
+PFNGLGETINTEGERUI64I_VNVPROC glad_glGetIntegerui64i_vNV;
+PFNGLBLENDPARAMETERINVPROC glad_glBlendParameteriNV;
+PFNGLBLENDBARRIERNVPROC glad_glBlendBarrierNV;
+PFNGLSHARPENTEXFUNCSGISPROC glad_glSharpenTexFuncSGIS;
+PFNGLGETSHARPENTEXFUNCSGISPROC glad_glGetSharpenTexFuncSGIS;
+PFNGLVERTEXATTRIB1DARBPROC glad_glVertexAttrib1dARB;
+PFNGLVERTEXATTRIB1DVARBPROC glad_glVertexAttrib1dvARB;
+PFNGLVERTEXATTRIB1FARBPROC glad_glVertexAttrib1fARB;
+PFNGLVERTEXATTRIB1FVARBPROC glad_glVertexAttrib1fvARB;
+PFNGLVERTEXATTRIB1SARBPROC glad_glVertexAttrib1sARB;
+PFNGLVERTEXATTRIB1SVARBPROC glad_glVertexAttrib1svARB;
+PFNGLVERTEXATTRIB2DARBPROC glad_glVertexAttrib2dARB;
+PFNGLVERTEXATTRIB2DVARBPROC glad_glVertexAttrib2dvARB;
+PFNGLVERTEXATTRIB2FARBPROC glad_glVertexAttrib2fARB;
+PFNGLVERTEXATTRIB2FVARBPROC glad_glVertexAttrib2fvARB;
+PFNGLVERTEXATTRIB2SARBPROC glad_glVertexAttrib2sARB;
+PFNGLVERTEXATTRIB2SVARBPROC glad_glVertexAttrib2svARB;
+PFNGLVERTEXATTRIB3DARBPROC glad_glVertexAttrib3dARB;
+PFNGLVERTEXATTRIB3DVARBPROC glad_glVertexAttrib3dvARB;
+PFNGLVERTEXATTRIB3FARBPROC glad_glVertexAttrib3fARB;
+PFNGLVERTEXATTRIB3FVARBPROC glad_glVertexAttrib3fvARB;
+PFNGLVERTEXATTRIB3SARBPROC glad_glVertexAttrib3sARB;
+PFNGLVERTEXATTRIB3SVARBPROC glad_glVertexAttrib3svARB;
+PFNGLVERTEXATTRIB4NBVARBPROC glad_glVertexAttrib4NbvARB;
+PFNGLVERTEXATTRIB4NIVARBPROC glad_glVertexAttrib4NivARB;
+PFNGLVERTEXATTRIB4NSVARBPROC glad_glVertexAttrib4NsvARB;
+PFNGLVERTEXATTRIB4NUBARBPROC glad_glVertexAttrib4NubARB;
+PFNGLVERTEXATTRIB4NUBVARBPROC glad_glVertexAttrib4NubvARB;
+PFNGLVERTEXATTRIB4NUIVARBPROC glad_glVertexAttrib4NuivARB;
+PFNGLVERTEXATTRIB4NUSVARBPROC glad_glVertexAttrib4NusvARB;
+PFNGLVERTEXATTRIB4BVARBPROC glad_glVertexAttrib4bvARB;
+PFNGLVERTEXATTRIB4DARBPROC glad_glVertexAttrib4dARB;
+PFNGLVERTEXATTRIB4DVARBPROC glad_glVertexAttrib4dvARB;
+PFNGLVERTEXATTRIB4FARBPROC glad_glVertexAttrib4fARB;
+PFNGLVERTEXATTRIB4FVARBPROC glad_glVertexAttrib4fvARB;
+PFNGLVERTEXATTRIB4IVARBPROC glad_glVertexAttrib4ivARB;
+PFNGLVERTEXATTRIB4SARBPROC glad_glVertexAttrib4sARB;
+PFNGLVERTEXATTRIB4SVARBPROC glad_glVertexAttrib4svARB;
+PFNGLVERTEXATTRIB4UBVARBPROC glad_glVertexAttrib4ubvARB;
+PFNGLVERTEXATTRIB4UIVARBPROC glad_glVertexAttrib4uivARB;
+PFNGLVERTEXATTRIB4USVARBPROC glad_glVertexAttrib4usvARB;
+PFNGLVERTEXATTRIBPOINTERARBPROC glad_glVertexAttribPointerARB;
+PFNGLENABLEVERTEXATTRIBARRAYARBPROC glad_glEnableVertexAttribArrayARB;
+PFNGLDISABLEVERTEXATTRIBARRAYARBPROC glad_glDisableVertexAttribArrayARB;
+PFNGLPROGRAMSTRINGARBPROC glad_glProgramStringARB;
+PFNGLBINDPROGRAMARBPROC glad_glBindProgramARB;
+PFNGLDELETEPROGRAMSARBPROC glad_glDeleteProgramsARB;
+PFNGLGENPROGRAMSARBPROC glad_glGenProgramsARB;
+PFNGLPROGRAMENVPARAMETER4DARBPROC glad_glProgramEnvParameter4dARB;
+PFNGLPROGRAMENVPARAMETER4DVARBPROC glad_glProgramEnvParameter4dvARB;
+PFNGLPROGRAMENVPARAMETER4FARBPROC glad_glProgramEnvParameter4fARB;
+PFNGLPROGRAMENVPARAMETER4FVARBPROC glad_glProgramEnvParameter4fvARB;
+PFNGLPROGRAMLOCALPARAMETER4DARBPROC glad_glProgramLocalParameter4dARB;
+PFNGLPROGRAMLOCALPARAMETER4DVARBPROC glad_glProgramLocalParameter4dvARB;
+PFNGLPROGRAMLOCALPARAMETER4FARBPROC glad_glProgramLocalParameter4fARB;
+PFNGLPROGRAMLOCALPARAMETER4FVARBPROC glad_glProgramLocalParameter4fvARB;
+PFNGLGETPROGRAMENVPARAMETERDVARBPROC glad_glGetProgramEnvParameterdvARB;
+PFNGLGETPROGRAMENVPARAMETERFVARBPROC glad_glGetProgramEnvParameterfvARB;
+PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC glad_glGetProgramLocalParameterdvARB;
+PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC glad_glGetProgramLocalParameterfvARB;
+PFNGLGETPROGRAMIVARBPROC glad_glGetProgramivARB;
+PFNGLGETPROGRAMSTRINGARBPROC glad_glGetProgramStringARB;
+PFNGLGETVERTEXATTRIBDVARBPROC glad_glGetVertexAttribdvARB;
+PFNGLGETVERTEXATTRIBFVARBPROC glad_glGetVertexAttribfvARB;
+PFNGLGETVERTEXATTRIBIVARBPROC glad_glGetVertexAttribivARB;
+PFNGLGETVERTEXATTRIBPOINTERVARBPROC glad_glGetVertexAttribPointervARB;
+PFNGLISPROGRAMARBPROC glad_glIsProgramARB;
+PFNGLBINDBUFFERARBPROC glad_glBindBufferARB;
+PFNGLDELETEBUFFERSARBPROC glad_glDeleteBuffersARB;
+PFNGLGENBUFFERSARBPROC glad_glGenBuffersARB;
+PFNGLISBUFFERARBPROC glad_glIsBufferARB;
+PFNGLBUFFERDATAARBPROC glad_glBufferDataARB;
+PFNGLBUFFERSUBDATAARBPROC glad_glBufferSubDataARB;
+PFNGLGETBUFFERSUBDATAARBPROC glad_glGetBufferSubDataARB;
+PFNGLMAPBUFFERARBPROC glad_glMapBufferARB;
+PFNGLUNMAPBUFFERARBPROC glad_glUnmapBufferARB;
+PFNGLGETBUFFERPARAMETERIVARBPROC glad_glGetBufferParameterivARB;
+PFNGLGETBUFFERPOINTERVARBPROC glad_glGetBufferPointervARB;
+PFNGLFLUSHVERTEXARRAYRANGENVPROC glad_glFlushVertexArrayRangeNV;
+PFNGLVERTEXARRAYRANGENVPROC glad_glVertexArrayRangeNV;
+PFNGLFRAGMENTCOLORMATERIALSGIXPROC glad_glFragmentColorMaterialSGIX;
+PFNGLFRAGMENTLIGHTFSGIXPROC glad_glFragmentLightfSGIX;
+PFNGLFRAGMENTLIGHTFVSGIXPROC glad_glFragmentLightfvSGIX;
+PFNGLFRAGMENTLIGHTISGIXPROC glad_glFragmentLightiSGIX;
+PFNGLFRAGMENTLIGHTIVSGIXPROC glad_glFragmentLightivSGIX;
+PFNGLFRAGMENTLIGHTMODELFSGIXPROC glad_glFragmentLightModelfSGIX;
+PFNGLFRAGMENTLIGHTMODELFVSGIXPROC glad_glFragmentLightModelfvSGIX;
+PFNGLFRAGMENTLIGHTMODELISGIXPROC glad_glFragmentLightModeliSGIX;
+PFNGLFRAGMENTLIGHTMODELIVSGIXPROC glad_glFragmentLightModelivSGIX;
+PFNGLFRAGMENTMATERIALFSGIXPROC glad_glFragmentMaterialfSGIX;
+PFNGLFRAGMENTMATERIALFVSGIXPROC glad_glFragmentMaterialfvSGIX;
+PFNGLFRAGMENTMATERIALISGIXPROC glad_glFragmentMaterialiSGIX;
+PFNGLFRAGMENTMATERIALIVSGIXPROC glad_glFragmentMaterialivSGIX;
+PFNGLGETFRAGMENTLIGHTFVSGIXPROC glad_glGetFragmentLightfvSGIX;
+PFNGLGETFRAGMENTLIGHTIVSGIXPROC glad_glGetFragmentLightivSGIX;
+PFNGLGETFRAGMENTMATERIALFVSGIXPROC glad_glGetFragmentMaterialfvSGIX;
+PFNGLGETFRAGMENTMATERIALIVSGIXPROC glad_glGetFragmentMaterialivSGIX;
+PFNGLLIGHTENVISGIXPROC glad_glLightEnviSGIX;
+PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC glad_glRenderbufferStorageMultisampleCoverageNV;
+PFNGLGETQUERYOBJECTI64VEXTPROC glad_glGetQueryObjecti64vEXT;
+PFNGLGETQUERYOBJECTUI64VEXTPROC glad_glGetQueryObjectui64vEXT;
+PFNGLGETTEXTUREHANDLENVPROC glad_glGetTextureHandleNV;
+PFNGLGETTEXTURESAMPLERHANDLENVPROC glad_glGetTextureSamplerHandleNV;
+PFNGLMAKETEXTUREHANDLERESIDENTNVPROC glad_glMakeTextureHandleResidentNV;
+PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC glad_glMakeTextureHandleNonResidentNV;
+PFNGLGETIMAGEHANDLENVPROC glad_glGetImageHandleNV;
+PFNGLMAKEIMAGEHANDLERESIDENTNVPROC glad_glMakeImageHandleResidentNV;
+PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC glad_glMakeImageHandleNonResidentNV;
+PFNGLUNIFORMHANDLEUI64NVPROC glad_glUniformHandleui64NV;
+PFNGLUNIFORMHANDLEUI64VNVPROC glad_glUniformHandleui64vNV;
+PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC glad_glProgramUniformHandleui64NV;
+PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC glad_glProgramUniformHandleui64vNV;
+PFNGLISTEXTUREHANDLERESIDENTNVPROC glad_glIsTextureHandleResidentNV;
+PFNGLISIMAGEHANDLERESIDENTNVPROC glad_glIsImageHandleResidentNV;
+PFNGLDEBUGMESSAGECONTROLPROC glad_glDebugMessageControl;
+PFNGLDEBUGMESSAGEINSERTPROC glad_glDebugMessageInsert;
+PFNGLDEBUGMESSAGECALLBACKPROC glad_glDebugMessageCallback;
+PFNGLGETDEBUGMESSAGELOGPROC glad_glGetDebugMessageLog;
+PFNGLPUSHDEBUGGROUPPROC glad_glPushDebugGroup;
+PFNGLPOPDEBUGGROUPPROC glad_glPopDebugGroup;
+PFNGLOBJECTLABELPROC glad_glObjectLabel;
+PFNGLGETOBJECTLABELPROC glad_glGetObjectLabel;
+PFNGLOBJECTPTRLABELPROC glad_glObjectPtrLabel;
+PFNGLGETOBJECTPTRLABELPROC glad_glGetObjectPtrLabel;
+PFNGLGETPOINTERVPROC glad_glGetPointerv;
+PFNGLDEBUGMESSAGECONTROLKHRPROC glad_glDebugMessageControlKHR;
+PFNGLDEBUGMESSAGEINSERTKHRPROC glad_glDebugMessageInsertKHR;
+PFNGLDEBUGMESSAGECALLBACKKHRPROC glad_glDebugMessageCallbackKHR;
+PFNGLGETDEBUGMESSAGELOGKHRPROC glad_glGetDebugMessageLogKHR;
+PFNGLPUSHDEBUGGROUPKHRPROC glad_glPushDebugGroupKHR;
+PFNGLPOPDEBUGGROUPKHRPROC glad_glPopDebugGroupKHR;
+PFNGLOBJECTLABELKHRPROC glad_glObjectLabelKHR;
+PFNGLGETOBJECTLABELKHRPROC glad_glGetObjectLabelKHR;
+PFNGLOBJECTPTRLABELKHRPROC glad_glObjectPtrLabelKHR;
+PFNGLGETOBJECTPTRLABELKHRPROC glad_glGetObjectPtrLabelKHR;
+PFNGLGETPOINTERVKHRPROC glad_glGetPointervKHR;
+PFNGLVERTEXATTRIBARRAYOBJECTATIPROC glad_glVertexAttribArrayObjectATI;
+PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC glad_glGetVertexAttribArrayObjectfvATI;
+PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC glad_glGetVertexAttribArrayObjectivATI;
+PFNGLUNIFORMBUFFEREXTPROC glad_glUniformBufferEXT;
+PFNGLGETUNIFORMBUFFERSIZEEXTPROC glad_glGetUniformBufferSizeEXT;
+PFNGLGETUNIFORMOFFSETEXTPROC glad_glGetUniformOffsetEXT;
+PFNGLBLENDBARRIERKHRPROC glad_glBlendBarrierKHR;
+PFNGLELEMENTPOINTERATIPROC glad_glElementPointerATI;
+PFNGLDRAWELEMENTARRAYATIPROC glad_glDrawElementArrayATI;
+PFNGLDRAWRANGEELEMENTARRAYATIPROC glad_glDrawRangeElementArrayATI;
+PFNGLREFERENCEPLANESGIXPROC glad_glReferencePlaneSGIX;
+PFNGLACTIVESTENCILFACEEXTPROC glad_glActiveStencilFaceEXT;
+PFNGLGETMULTISAMPLEFVNVPROC glad_glGetMultisamplefvNV;
+PFNGLSAMPLEMASKINDEXEDNVPROC glad_glSampleMaskIndexedNV;
+PFNGLTEXRENDERBUFFERNVPROC glad_glTexRenderbufferNV;
+PFNGLFLUSHSTATICDATAIBMPROC glad_glFlushStaticDataIBM;
+PFNGLTEXTURENORMALEXTPROC glad_glTextureNormalEXT;
+PFNGLPOINTPARAMETERFEXTPROC glad_glPointParameterfEXT;
+PFNGLPOINTPARAMETERFVEXTPROC glad_glPointParameterfvEXT;
+PFNGLHINTPGIPROC glad_glHintPGI;
+PFNGLBINDATTRIBLOCATIONARBPROC glad_glBindAttribLocationARB;
+PFNGLGETACTIVEATTRIBARBPROC glad_glGetActiveAttribARB;
+PFNGLGETATTRIBLOCATIONARBPROC glad_glGetAttribLocationARB;
+PFNGLPATCHPARAMETERIPROC glad_glPatchParameteri;
+PFNGLPATCHPARAMETERFVPROC glad_glPatchParameterfv;
+PFNGLCOLORMASKINDEXEDEXTPROC glad_glColorMaskIndexedEXT;
+PFNGLGETBOOLEANINDEXEDVEXTPROC glad_glGetBooleanIndexedvEXT;
+PFNGLGETINTEGERINDEXEDVEXTPROC glad_glGetIntegerIndexedvEXT;
+PFNGLENABLEINDEXEDEXTPROC glad_glEnableIndexedEXT;
+PFNGLDISABLEINDEXEDEXTPROC glad_glDisableIndexedEXT;
+PFNGLISENABLEDINDEXEDEXTPROC glad_glIsEnabledIndexedEXT;
+PFNGLVERTEXATTRIBL1DPROC glad_glVertexAttribL1d;
+PFNGLVERTEXATTRIBL2DPROC glad_glVertexAttribL2d;
+PFNGLVERTEXATTRIBL3DPROC glad_glVertexAttribL3d;
+PFNGLVERTEXATTRIBL4DPROC glad_glVertexAttribL4d;
+PFNGLVERTEXATTRIBL1DVPROC glad_glVertexAttribL1dv;
+PFNGLVERTEXATTRIBL2DVPROC glad_glVertexAttribL2dv;
+PFNGLVERTEXATTRIBL3DVPROC glad_glVertexAttribL3dv;
+PFNGLVERTEXATTRIBL4DVPROC glad_glVertexAttribL4dv;
+PFNGLVERTEXATTRIBLPOINTERPROC glad_glVertexAttribLPointer;
+PFNGLGETVERTEXATTRIBLDVPROC glad_glGetVertexAttribLdv;
+PFNGLRASTERSAMPLESEXTPROC glad_glRasterSamplesEXT;
+PFNGLVERTEXATTRIBPARAMETERIAMDPROC glad_glVertexAttribParameteriAMD;
+PFNGLTEXSTORAGE1DPROC glad_glTexStorage1D;
+PFNGLTEXSTORAGE2DPROC glad_glTexStorage2D;
+PFNGLTEXSTORAGE3DPROC glad_glTexStorage3D;
+PFNGLCOPYIMAGESUBDATAPROC glad_glCopyImageSubData;
+PFNGLPIXELTEXGENPARAMETERISGISPROC glad_glPixelTexGenParameteriSGIS;
+PFNGLPIXELTEXGENPARAMETERIVSGISPROC glad_glPixelTexGenParameterivSGIS;
+PFNGLPIXELTEXGENPARAMETERFSGISPROC glad_glPixelTexGenParameterfSGIS;
+PFNGLPIXELTEXGENPARAMETERFVSGISPROC glad_glPixelTexGenParameterfvSGIS;
+PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC glad_glGetPixelTexGenParameterivSGIS;
+PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC glad_glGetPixelTexGenParameterfvSGIS;
+PFNGLGETINSTRUMENTSSGIXPROC glad_glGetInstrumentsSGIX;
+PFNGLINSTRUMENTSBUFFERSGIXPROC glad_glInstrumentsBufferSGIX;
+PFNGLPOLLINSTRUMENTSSGIXPROC glad_glPollInstrumentsSGIX;
+PFNGLREADINSTRUMENTSSGIXPROC glad_glReadInstrumentsSGIX;
+PFNGLSTARTINSTRUMENTSSGIXPROC glad_glStartInstrumentsSGIX;
+PFNGLSTOPINSTRUMENTSSGIXPROC glad_glStopInstrumentsSGIX;
+PFNGLSHADERSTORAGEBLOCKBINDINGPROC glad_glShaderStorageBlockBinding;
+PFNGLBLENDEQUATIONEXTPROC glad_glBlendEquationEXT;
+PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC glad_glDrawArraysInstancedBaseInstance;
+PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC glad_glDrawElementsInstancedBaseInstance;
+PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC glad_glDrawElementsInstancedBaseVertexBaseInstance;
+PFNGLMEMORYBARRIERBYREGIONPROC glad_glMemoryBarrierByRegion;
+PFNGLTEXPARAMETERIIVEXTPROC glad_glTexParameterIivEXT;
+PFNGLTEXPARAMETERIUIVEXTPROC glad_glTexParameterIuivEXT;
+PFNGLGETTEXPARAMETERIIVEXTPROC glad_glGetTexParameterIivEXT;
+PFNGLGETTEXPARAMETERIUIVEXTPROC glad_glGetTexParameterIuivEXT;
+PFNGLCLEARCOLORIIEXTPROC glad_glClearColorIiEXT;
+PFNGLCLEARCOLORIUIEXTPROC glad_glClearColorIuiEXT;
+PFNGLUNIFORM1I64NVPROC glad_glUniform1i64NV;
+PFNGLUNIFORM2I64NVPROC glad_glUniform2i64NV;
+PFNGLUNIFORM3I64NVPROC glad_glUniform3i64NV;
+PFNGLUNIFORM4I64NVPROC glad_glUniform4i64NV;
+PFNGLUNIFORM1I64VNVPROC glad_glUniform1i64vNV;
+PFNGLUNIFORM2I64VNVPROC glad_glUniform2i64vNV;
+PFNGLUNIFORM3I64VNVPROC glad_glUniform3i64vNV;
+PFNGLUNIFORM4I64VNVPROC glad_glUniform4i64vNV;
+PFNGLUNIFORM1UI64NVPROC glad_glUniform1ui64NV;
+PFNGLUNIFORM2UI64NVPROC glad_glUniform2ui64NV;
+PFNGLUNIFORM3UI64NVPROC glad_glUniform3ui64NV;
+PFNGLUNIFORM4UI64NVPROC glad_glUniform4ui64NV;
+PFNGLUNIFORM1UI64VNVPROC glad_glUniform1ui64vNV;
+PFNGLUNIFORM2UI64VNVPROC glad_glUniform2ui64vNV;
+PFNGLUNIFORM3UI64VNVPROC glad_glUniform3ui64vNV;
+PFNGLUNIFORM4UI64VNVPROC glad_glUniform4ui64vNV;
+PFNGLGETUNIFORMI64VNVPROC glad_glGetUniformi64vNV;
+PFNGLPROGRAMUNIFORM1I64NVPROC glad_glProgramUniform1i64NV;
+PFNGLPROGRAMUNIFORM2I64NVPROC glad_glProgramUniform2i64NV;
+PFNGLPROGRAMUNIFORM3I64NVPROC glad_glProgramUniform3i64NV;
+PFNGLPROGRAMUNIFORM4I64NVPROC glad_glProgramUniform4i64NV;
+PFNGLPROGRAMUNIFORM1I64VNVPROC glad_glProgramUniform1i64vNV;
+PFNGLPROGRAMUNIFORM2I64VNVPROC glad_glProgramUniform2i64vNV;
+PFNGLPROGRAMUNIFORM3I64VNVPROC glad_glProgramUniform3i64vNV;
+PFNGLPROGRAMUNIFORM4I64VNVPROC glad_glProgramUniform4i64vNV;
+PFNGLPROGRAMUNIFORM1UI64NVPROC glad_glProgramUniform1ui64NV;
+PFNGLPROGRAMUNIFORM2UI64NVPROC glad_glProgramUniform2ui64NV;
+PFNGLPROGRAMUNIFORM3UI64NVPROC glad_glProgramUniform3ui64NV;
+PFNGLPROGRAMUNIFORM4UI64NVPROC glad_glProgramUniform4ui64NV;
+PFNGLPROGRAMUNIFORM1UI64VNVPROC glad_glProgramUniform1ui64vNV;
+PFNGLPROGRAMUNIFORM2UI64VNVPROC glad_glProgramUniform2ui64vNV;
+PFNGLPROGRAMUNIFORM3UI64VNVPROC glad_glProgramUniform3ui64vNV;
+PFNGLPROGRAMUNIFORM4UI64VNVPROC glad_glProgramUniform4ui64vNV;
+PFNGLTESSELLATIONFACTORAMDPROC glad_glTessellationFactorAMD;
+PFNGLTESSELLATIONMODEAMDPROC glad_glTessellationModeAMD;
+PFNGLINVALIDATETEXSUBIMAGEPROC glad_glInvalidateTexSubImage;
+PFNGLINVALIDATETEXIMAGEPROC glad_glInvalidateTexImage;
+PFNGLINVALIDATEBUFFERSUBDATAPROC glad_glInvalidateBufferSubData;
+PFNGLINVALIDATEBUFFERDATAPROC glad_glInvalidateBufferData;
+PFNGLINVALIDATEFRAMEBUFFERPROC glad_glInvalidateFramebuffer;
+PFNGLINVALIDATESUBFRAMEBUFFERPROC glad_glInvalidateSubFramebuffer;
+PFNGLINDEXMATERIALEXTPROC glad_glIndexMaterialEXT;
+PFNGLVERTEXPOINTERVINTELPROC glad_glVertexPointervINTEL;
+PFNGLNORMALPOINTERVINTELPROC glad_glNormalPointervINTEL;
+PFNGLCOLORPOINTERVINTELPROC glad_glColorPointervINTEL;
+PFNGLTEXCOORDPOINTERVINTELPROC glad_glTexCoordPointervINTEL;
+PFNGLDRAWBUFFERSATIPROC glad_glDrawBuffersATI;
+PFNGLPIXELTEXGENSGIXPROC glad_glPixelTexGenSGIX;
+PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC glad_glProgramBufferParametersfvNV;
+PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC glad_glProgramBufferParametersIivNV;
+PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC glad_glProgramBufferParametersIuivNV;
+PFNGLCREATETRANSFORMFEEDBACKSPROC glad_glCreateTransformFeedbacks;
+PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC glad_glTransformFeedbackBufferBase;
+PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC glad_glTransformFeedbackBufferRange;
+PFNGLGETTRANSFORMFEEDBACKIVPROC glad_glGetTransformFeedbackiv;
+PFNGLGETTRANSFORMFEEDBACKI_VPROC glad_glGetTransformFeedbacki_v;
+PFNGLGETTRANSFORMFEEDBACKI64_VPROC glad_glGetTransformFeedbacki64_v;
+PFNGLCREATEBUFFERSPROC glad_glCreateBuffers;
+PFNGLNAMEDBUFFERSTORAGEPROC glad_glNamedBufferStorage;
+PFNGLNAMEDBUFFERDATAPROC glad_glNamedBufferData;
+PFNGLNAMEDBUFFERSUBDATAPROC glad_glNamedBufferSubData;
+PFNGLCOPYNAMEDBUFFERSUBDATAPROC glad_glCopyNamedBufferSubData;
+PFNGLCLEARNAMEDBUFFERDATAPROC glad_glClearNamedBufferData;
+PFNGLCLEARNAMEDBUFFERSUBDATAPROC glad_glClearNamedBufferSubData;
+PFNGLMAPNAMEDBUFFERPROC glad_glMapNamedBuffer;
+PFNGLMAPNAMEDBUFFERRANGEPROC glad_glMapNamedBufferRange;
+PFNGLUNMAPNAMEDBUFFERPROC glad_glUnmapNamedBuffer;
+PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC glad_glFlushMappedNamedBufferRange;
+PFNGLGETNAMEDBUFFERPARAMETERIVPROC glad_glGetNamedBufferParameteriv;
+PFNGLGETNAMEDBUFFERPARAMETERI64VPROC glad_glGetNamedBufferParameteri64v;
+PFNGLGETNAMEDBUFFERPOINTERVPROC glad_glGetNamedBufferPointerv;
+PFNGLGETNAMEDBUFFERSUBDATAPROC glad_glGetNamedBufferSubData;
+PFNGLCREATEFRAMEBUFFERSPROC glad_glCreateFramebuffers;
+PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC glad_glNamedFramebufferRenderbuffer;
+PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC glad_glNamedFramebufferParameteri;
+PFNGLNAMEDFRAMEBUFFERTEXTUREPROC glad_glNamedFramebufferTexture;
+PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC glad_glNamedFramebufferTextureLayer;
+PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC glad_glNamedFramebufferDrawBuffer;
+PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC glad_glNamedFramebufferDrawBuffers;
+PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC glad_glNamedFramebufferReadBuffer;
+PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC glad_glInvalidateNamedFramebufferData;
+PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC glad_glInvalidateNamedFramebufferSubData;
+PFNGLCLEARNAMEDFRAMEBUFFERIVPROC glad_glClearNamedFramebufferiv;
+PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC glad_glClearNamedFramebufferuiv;
+PFNGLCLEARNAMEDFRAMEBUFFERFVPROC glad_glClearNamedFramebufferfv;
+PFNGLCLEARNAMEDFRAMEBUFFERFIPROC glad_glClearNamedFramebufferfi;
+PFNGLBLITNAMEDFRAMEBUFFERPROC glad_glBlitNamedFramebuffer;
+PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC glad_glCheckNamedFramebufferStatus;
+PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC glad_glGetNamedFramebufferParameteriv;
+PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetNamedFramebufferAttachmentParameteriv;
+PFNGLCREATERENDERBUFFERSPROC glad_glCreateRenderbuffers;
+PFNGLNAMEDRENDERBUFFERSTORAGEPROC glad_glNamedRenderbufferStorage;
+PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glNamedRenderbufferStorageMultisample;
+PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC glad_glGetNamedRenderbufferParameteriv;
+PFNGLCREATETEXTURESPROC glad_glCreateTextures;
+PFNGLTEXTUREBUFFERPROC glad_glTextureBuffer;
+PFNGLTEXTUREBUFFERRANGEPROC glad_glTextureBufferRange;
+PFNGLTEXTURESTORAGE1DPROC glad_glTextureStorage1D;
+PFNGLTEXTURESTORAGE2DPROC glad_glTextureStorage2D;
+PFNGLTEXTURESTORAGE3DPROC glad_glTextureStorage3D;
+PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC glad_glTextureStorage2DMultisample;
+PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC glad_glTextureStorage3DMultisample;
+PFNGLTEXTURESUBIMAGE1DPROC glad_glTextureSubImage1D;
+PFNGLTEXTURESUBIMAGE2DPROC glad_glTextureSubImage2D;
+PFNGLTEXTURESUBIMAGE3DPROC glad_glTextureSubImage3D;
+PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC glad_glCompressedTextureSubImage1D;
+PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC glad_glCompressedTextureSubImage2D;
+PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC glad_glCompressedTextureSubImage3D;
+PFNGLCOPYTEXTURESUBIMAGE1DPROC glad_glCopyTextureSubImage1D;
+PFNGLCOPYTEXTURESUBIMAGE2DPROC glad_glCopyTextureSubImage2D;
+PFNGLCOPYTEXTURESUBIMAGE3DPROC glad_glCopyTextureSubImage3D;
+PFNGLTEXTUREPARAMETERFPROC glad_glTextureParameterf;
+PFNGLTEXTUREPARAMETERFVPROC glad_glTextureParameterfv;
+PFNGLTEXTUREPARAMETERIPROC glad_glTextureParameteri;
+PFNGLTEXTUREPARAMETERIIVPROC glad_glTextureParameterIiv;
+PFNGLTEXTUREPARAMETERIUIVPROC glad_glTextureParameterIuiv;
+PFNGLTEXTUREPARAMETERIVPROC glad_glTextureParameteriv;
+PFNGLGENERATETEXTUREMIPMAPPROC glad_glGenerateTextureMipmap;
+PFNGLBINDTEXTUREUNITPROC glad_glBindTextureUnit;
+PFNGLGETTEXTUREIMAGEPROC glad_glGetTextureImage;
+PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC glad_glGetCompressedTextureImage;
+PFNGLGETTEXTURELEVELPARAMETERFVPROC glad_glGetTextureLevelParameterfv;
+PFNGLGETTEXTURELEVELPARAMETERIVPROC glad_glGetTextureLevelParameteriv;
+PFNGLGETTEXTUREPARAMETERFVPROC glad_glGetTextureParameterfv;
+PFNGLGETTEXTUREPARAMETERIIVPROC glad_glGetTextureParameterIiv;
+PFNGLGETTEXTUREPARAMETERIUIVPROC glad_glGetTextureParameterIuiv;
+PFNGLGETTEXTUREPARAMETERIVPROC glad_glGetTextureParameteriv;
+PFNGLCREATEVERTEXARRAYSPROC glad_glCreateVertexArrays;
+PFNGLDISABLEVERTEXARRAYATTRIBPROC glad_glDisableVertexArrayAttrib;
+PFNGLENABLEVERTEXARRAYATTRIBPROC glad_glEnableVertexArrayAttrib;
+PFNGLVERTEXARRAYELEMENTBUFFERPROC glad_glVertexArrayElementBuffer;
+PFNGLVERTEXARRAYVERTEXBUFFERPROC glad_glVertexArrayVertexBuffer;
+PFNGLVERTEXARRAYVERTEXBUFFERSPROC glad_glVertexArrayVertexBuffers;
+PFNGLVERTEXARRAYATTRIBBINDINGPROC glad_glVertexArrayAttribBinding;
+PFNGLVERTEXARRAYATTRIBFORMATPROC glad_glVertexArrayAttribFormat;
+PFNGLVERTEXARRAYATTRIBIFORMATPROC glad_glVertexArrayAttribIFormat;
+PFNGLVERTEXARRAYATTRIBLFORMATPROC glad_glVertexArrayAttribLFormat;
+PFNGLVERTEXARRAYBINDINGDIVISORPROC glad_glVertexArrayBindingDivisor;
+PFNGLGETVERTEXARRAYIVPROC glad_glGetVertexArrayiv;
+PFNGLGETVERTEXARRAYINDEXEDIVPROC glad_glGetVertexArrayIndexediv;
+PFNGLGETVERTEXARRAYINDEXED64IVPROC glad_glGetVertexArrayIndexed64iv;
+PFNGLCREATESAMPLERSPROC glad_glCreateSamplers;
+PFNGLCREATEPROGRAMPIPELINESPROC glad_glCreateProgramPipelines;
+PFNGLCREATEQUERIESPROC glad_glCreateQueries;
+PFNGLGETQUERYBUFFEROBJECTI64VPROC glad_glGetQueryBufferObjecti64v;
+PFNGLGETQUERYBUFFEROBJECTIVPROC glad_glGetQueryBufferObjectiv;
+PFNGLGETQUERYBUFFEROBJECTUI64VPROC glad_glGetQueryBufferObjectui64v;
+PFNGLGETQUERYBUFFEROBJECTUIVPROC glad_glGetQueryBufferObjectuiv;
+PFNGLBINDTRANSFORMFEEDBACKNVPROC glad_glBindTransformFeedbackNV;
+PFNGLDELETETRANSFORMFEEDBACKSNVPROC glad_glDeleteTransformFeedbacksNV;
+PFNGLGENTRANSFORMFEEDBACKSNVPROC glad_glGenTransformFeedbacksNV;
+PFNGLISTRANSFORMFEEDBACKNVPROC glad_glIsTransformFeedbackNV;
+PFNGLPAUSETRANSFORMFEEDBACKNVPROC glad_glPauseTransformFeedbackNV;
+PFNGLRESUMETRANSFORMFEEDBACKNVPROC glad_glResumeTransformFeedbackNV;
+PFNGLDRAWTRANSFORMFEEDBACKNVPROC glad_glDrawTransformFeedbackNV;
+PFNGLBLENDCOLOREXTPROC glad_glBlendColorEXT;
+PFNGLGETHISTOGRAMEXTPROC glad_glGetHistogramEXT;
+PFNGLGETHISTOGRAMPARAMETERFVEXTPROC glad_glGetHistogramParameterfvEXT;
+PFNGLGETHISTOGRAMPARAMETERIVEXTPROC glad_glGetHistogramParameterivEXT;
+PFNGLGETMINMAXEXTPROC glad_glGetMinmaxEXT;
+PFNGLGETMINMAXPARAMETERFVEXTPROC glad_glGetMinmaxParameterfvEXT;
+PFNGLGETMINMAXPARAMETERIVEXTPROC glad_glGetMinmaxParameterivEXT;
+PFNGLHISTOGRAMEXTPROC glad_glHistogramEXT;
+PFNGLMINMAXEXTPROC glad_glMinmaxEXT;
+PFNGLRESETHISTOGRAMEXTPROC glad_glResetHistogramEXT;
+PFNGLRESETMINMAXEXTPROC glad_glResetMinmaxEXT;
+PFNGLGETTEXTURESUBIMAGEPROC glad_glGetTextureSubImage;
+PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC glad_glGetCompressedTextureSubImage;
+PFNGLPOINTPARAMETERFSGISPROC glad_glPointParameterfSGIS;
+PFNGLPOINTPARAMETERFVSGISPROC glad_glPointParameterfvSGIS;
+PFNGLMATRIXLOADFEXTPROC glad_glMatrixLoadfEXT;
+PFNGLMATRIXLOADDEXTPROC glad_glMatrixLoaddEXT;
+PFNGLMATRIXMULTFEXTPROC glad_glMatrixMultfEXT;
+PFNGLMATRIXMULTDEXTPROC glad_glMatrixMultdEXT;
+PFNGLMATRIXLOADIDENTITYEXTPROC glad_glMatrixLoadIdentityEXT;
+PFNGLMATRIXROTATEFEXTPROC glad_glMatrixRotatefEXT;
+PFNGLMATRIXROTATEDEXTPROC glad_glMatrixRotatedEXT;
+PFNGLMATRIXSCALEFEXTPROC glad_glMatrixScalefEXT;
+PFNGLMATRIXSCALEDEXTPROC glad_glMatrixScaledEXT;
+PFNGLMATRIXTRANSLATEFEXTPROC glad_glMatrixTranslatefEXT;
+PFNGLMATRIXTRANSLATEDEXTPROC glad_glMatrixTranslatedEXT;
+PFNGLMATRIXFRUSTUMEXTPROC glad_glMatrixFrustumEXT;
+PFNGLMATRIXORTHOEXTPROC glad_glMatrixOrthoEXT;
+PFNGLMATRIXPOPEXTPROC glad_glMatrixPopEXT;
+PFNGLMATRIXPUSHEXTPROC glad_glMatrixPushEXT;
+PFNGLCLIENTATTRIBDEFAULTEXTPROC glad_glClientAttribDefaultEXT;
+PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC glad_glPushClientAttribDefaultEXT;
+PFNGLTEXTUREPARAMETERFEXTPROC glad_glTextureParameterfEXT;
+PFNGLTEXTUREPARAMETERFVEXTPROC glad_glTextureParameterfvEXT;
+PFNGLTEXTUREPARAMETERIEXTPROC glad_glTextureParameteriEXT;
+PFNGLTEXTUREPARAMETERIVEXTPROC glad_glTextureParameterivEXT;
+PFNGLTEXTUREIMAGE1DEXTPROC glad_glTextureImage1DEXT;
+PFNGLTEXTUREIMAGE2DEXTPROC glad_glTextureImage2DEXT;
+PFNGLTEXTURESUBIMAGE1DEXTPROC glad_glTextureSubImage1DEXT;
+PFNGLTEXTURESUBIMAGE2DEXTPROC glad_glTextureSubImage2DEXT;
+PFNGLCOPYTEXTUREIMAGE1DEXTPROC glad_glCopyTextureImage1DEXT;
+PFNGLCOPYTEXTUREIMAGE2DEXTPROC glad_glCopyTextureImage2DEXT;
+PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC glad_glCopyTextureSubImage1DEXT;
+PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC glad_glCopyTextureSubImage2DEXT;
+PFNGLGETTEXTUREIMAGEEXTPROC glad_glGetTextureImageEXT;
+PFNGLGETTEXTUREPARAMETERFVEXTPROC glad_glGetTextureParameterfvEXT;
+PFNGLGETTEXTUREPARAMETERIVEXTPROC glad_glGetTextureParameterivEXT;
+PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC glad_glGetTextureLevelParameterfvEXT;
+PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC glad_glGetTextureLevelParameterivEXT;
+PFNGLTEXTUREIMAGE3DEXTPROC glad_glTextureImage3DEXT;
+PFNGLTEXTURESUBIMAGE3DEXTPROC glad_glTextureSubImage3DEXT;
+PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC glad_glCopyTextureSubImage3DEXT;
+PFNGLBINDMULTITEXTUREEXTPROC glad_glBindMultiTextureEXT;
+PFNGLMULTITEXCOORDPOINTEREXTPROC glad_glMultiTexCoordPointerEXT;
+PFNGLMULTITEXENVFEXTPROC glad_glMultiTexEnvfEXT;
+PFNGLMULTITEXENVFVEXTPROC glad_glMultiTexEnvfvEXT;
+PFNGLMULTITEXENVIEXTPROC glad_glMultiTexEnviEXT;
+PFNGLMULTITEXENVIVEXTPROC glad_glMultiTexEnvivEXT;
+PFNGLMULTITEXGENDEXTPROC glad_glMultiTexGendEXT;
+PFNGLMULTITEXGENDVEXTPROC glad_glMultiTexGendvEXT;
+PFNGLMULTITEXGENFEXTPROC glad_glMultiTexGenfEXT;
+PFNGLMULTITEXGENFVEXTPROC glad_glMultiTexGenfvEXT;
+PFNGLMULTITEXGENIEXTPROC glad_glMultiTexGeniEXT;
+PFNGLMULTITEXGENIVEXTPROC glad_glMultiTexGenivEXT;
+PFNGLGETMULTITEXENVFVEXTPROC glad_glGetMultiTexEnvfvEXT;
+PFNGLGETMULTITEXENVIVEXTPROC glad_glGetMultiTexEnvivEXT;
+PFNGLGETMULTITEXGENDVEXTPROC glad_glGetMultiTexGendvEXT;
+PFNGLGETMULTITEXGENFVEXTPROC glad_glGetMultiTexGenfvEXT;
+PFNGLGETMULTITEXGENIVEXTPROC glad_glGetMultiTexGenivEXT;
+PFNGLMULTITEXPARAMETERIEXTPROC glad_glMultiTexParameteriEXT;
+PFNGLMULTITEXPARAMETERIVEXTPROC glad_glMultiTexParameterivEXT;
+PFNGLMULTITEXPARAMETERFEXTPROC glad_glMultiTexParameterfEXT;
+PFNGLMULTITEXPARAMETERFVEXTPROC glad_glMultiTexParameterfvEXT;
+PFNGLMULTITEXIMAGE1DEXTPROC glad_glMultiTexImage1DEXT;
+PFNGLMULTITEXIMAGE2DEXTPROC glad_glMultiTexImage2DEXT;
+PFNGLMULTITEXSUBIMAGE1DEXTPROC glad_glMultiTexSubImage1DEXT;
+PFNGLMULTITEXSUBIMAGE2DEXTPROC glad_glMultiTexSubImage2DEXT;
+PFNGLCOPYMULTITEXIMAGE1DEXTPROC glad_glCopyMultiTexImage1DEXT;
+PFNGLCOPYMULTITEXIMAGE2DEXTPROC glad_glCopyMultiTexImage2DEXT;
+PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC glad_glCopyMultiTexSubImage1DEXT;
+PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC glad_glCopyMultiTexSubImage2DEXT;
+PFNGLGETMULTITEXIMAGEEXTPROC glad_glGetMultiTexImageEXT;
+PFNGLGETMULTITEXPARAMETERFVEXTPROC glad_glGetMultiTexParameterfvEXT;
+PFNGLGETMULTITEXPARAMETERIVEXTPROC glad_glGetMultiTexParameterivEXT;
+PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC glad_glGetMultiTexLevelParameterfvEXT;
+PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC glad_glGetMultiTexLevelParameterivEXT;
+PFNGLMULTITEXIMAGE3DEXTPROC glad_glMultiTexImage3DEXT;
+PFNGLMULTITEXSUBIMAGE3DEXTPROC glad_glMultiTexSubImage3DEXT;
+PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC glad_glCopyMultiTexSubImage3DEXT;
+PFNGLENABLECLIENTSTATEINDEXEDEXTPROC glad_glEnableClientStateIndexedEXT;
+PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC glad_glDisableClientStateIndexedEXT;
+PFNGLGETFLOATINDEXEDVEXTPROC glad_glGetFloatIndexedvEXT;
+PFNGLGETDOUBLEINDEXEDVEXTPROC glad_glGetDoubleIndexedvEXT;
+PFNGLGETPOINTERINDEXEDVEXTPROC glad_glGetPointerIndexedvEXT;
+PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC glad_glCompressedTextureImage3DEXT;
+PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC glad_glCompressedTextureImage2DEXT;
+PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC glad_glCompressedTextureImage1DEXT;
+PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC glad_glCompressedTextureSubImage3DEXT;
+PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC glad_glCompressedTextureSubImage2DEXT;
+PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC glad_glCompressedTextureSubImage1DEXT;
+PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC glad_glGetCompressedTextureImageEXT;
+PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC glad_glCompressedMultiTexImage3DEXT;
+PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC glad_glCompressedMultiTexImage2DEXT;
+PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC glad_glCompressedMultiTexImage1DEXT;
+PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC glad_glCompressedMultiTexSubImage3DEXT;
+PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC glad_glCompressedMultiTexSubImage2DEXT;
+PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC glad_glCompressedMultiTexSubImage1DEXT;
+PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC glad_glGetCompressedMultiTexImageEXT;
+PFNGLMATRIXLOADTRANSPOSEFEXTPROC glad_glMatrixLoadTransposefEXT;
+PFNGLMATRIXLOADTRANSPOSEDEXTPROC glad_glMatrixLoadTransposedEXT;
+PFNGLMATRIXMULTTRANSPOSEFEXTPROC glad_glMatrixMultTransposefEXT;
+PFNGLMATRIXMULTTRANSPOSEDEXTPROC glad_glMatrixMultTransposedEXT;
+PFNGLNAMEDBUFFERDATAEXTPROC glad_glNamedBufferDataEXT;
+PFNGLNAMEDBUFFERSUBDATAEXTPROC glad_glNamedBufferSubDataEXT;
+PFNGLMAPNAMEDBUFFEREXTPROC glad_glMapNamedBufferEXT;
+PFNGLUNMAPNAMEDBUFFEREXTPROC glad_glUnmapNamedBufferEXT;
+PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC glad_glGetNamedBufferParameterivEXT;
+PFNGLGETNAMEDBUFFERPOINTERVEXTPROC glad_glGetNamedBufferPointervEXT;
+PFNGLGETNAMEDBUFFERSUBDATAEXTPROC glad_glGetNamedBufferSubDataEXT;
+PFNGLTEXTUREBUFFEREXTPROC glad_glTextureBufferEXT;
+PFNGLMULTITEXBUFFEREXTPROC glad_glMultiTexBufferEXT;
+PFNGLTEXTUREPARAMETERIIVEXTPROC glad_glTextureParameterIivEXT;
+PFNGLTEXTUREPARAMETERIUIVEXTPROC glad_glTextureParameterIuivEXT;
+PFNGLGETTEXTUREPARAMETERIIVEXTPROC glad_glGetTextureParameterIivEXT;
+PFNGLGETTEXTUREPARAMETERIUIVEXTPROC glad_glGetTextureParameterIuivEXT;
+PFNGLMULTITEXPARAMETERIIVEXTPROC glad_glMultiTexParameterIivEXT;
+PFNGLMULTITEXPARAMETERIUIVEXTPROC glad_glMultiTexParameterIuivEXT;
+PFNGLGETMULTITEXPARAMETERIIVEXTPROC glad_glGetMultiTexParameterIivEXT;
+PFNGLGETMULTITEXPARAMETERIUIVEXTPROC glad_glGetMultiTexParameterIuivEXT;
+PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC glad_glNamedProgramLocalParameters4fvEXT;
+PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC glad_glNamedProgramLocalParameterI4iEXT;
+PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC glad_glNamedProgramLocalParameterI4ivEXT;
+PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC glad_glNamedProgramLocalParametersI4ivEXT;
+PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC glad_glNamedProgramLocalParameterI4uiEXT;
+PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC glad_glNamedProgramLocalParameterI4uivEXT;
+PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC glad_glNamedProgramLocalParametersI4uivEXT;
+PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC glad_glGetNamedProgramLocalParameterIivEXT;
+PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC glad_glGetNamedProgramLocalParameterIuivEXT;
+PFNGLENABLECLIENTSTATEIEXTPROC glad_glEnableClientStateiEXT;
+PFNGLDISABLECLIENTSTATEIEXTPROC glad_glDisableClientStateiEXT;
+PFNGLGETFLOATI_VEXTPROC glad_glGetFloati_vEXT;
+PFNGLGETDOUBLEI_VEXTPROC glad_glGetDoublei_vEXT;
+PFNGLGETPOINTERI_VEXTPROC glad_glGetPointeri_vEXT;
+PFNGLNAMEDPROGRAMSTRINGEXTPROC glad_glNamedProgramStringEXT;
+PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC glad_glNamedProgramLocalParameter4dEXT;
+PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC glad_glNamedProgramLocalParameter4dvEXT;
+PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC glad_glNamedProgramLocalParameter4fEXT;
+PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC glad_glNamedProgramLocalParameter4fvEXT;
+PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC glad_glGetNamedProgramLocalParameterdvEXT;
+PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC glad_glGetNamedProgramLocalParameterfvEXT;
+PFNGLGETNAMEDPROGRAMIVEXTPROC glad_glGetNamedProgramivEXT;
+PFNGLGETNAMEDPROGRAMSTRINGEXTPROC glad_glGetNamedProgramStringEXT;
+PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC glad_glNamedRenderbufferStorageEXT;
+PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC glad_glGetNamedRenderbufferParameterivEXT;
+PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC glad_glNamedRenderbufferStorageMultisampleEXT;
+PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC glad_glNamedRenderbufferStorageMultisampleCoverageEXT;
+PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC glad_glCheckNamedFramebufferStatusEXT;
+PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC glad_glNamedFramebufferTexture1DEXT;
+PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC glad_glNamedFramebufferTexture2DEXT;
+PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC glad_glNamedFramebufferTexture3DEXT;
+PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC glad_glNamedFramebufferRenderbufferEXT;
+PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC glad_glGetNamedFramebufferAttachmentParameterivEXT;
+PFNGLGENERATETEXTUREMIPMAPEXTPROC glad_glGenerateTextureMipmapEXT;
+PFNGLGENERATEMULTITEXMIPMAPEXTPROC glad_glGenerateMultiTexMipmapEXT;
+PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC glad_glFramebufferDrawBufferEXT;
+PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC glad_glFramebufferDrawBuffersEXT;
+PFNGLFRAMEBUFFERREADBUFFEREXTPROC glad_glFramebufferReadBufferEXT;
+PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC glad_glGetFramebufferParameterivEXT;
+PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC glad_glNamedCopyBufferSubDataEXT;
+PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC glad_glNamedFramebufferTextureEXT;
+PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC glad_glNamedFramebufferTextureLayerEXT;
+PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC glad_glNamedFramebufferTextureFaceEXT;
+PFNGLTEXTURERENDERBUFFEREXTPROC glad_glTextureRenderbufferEXT;
+PFNGLMULTITEXRENDERBUFFEREXTPROC glad_glMultiTexRenderbufferEXT;
+PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC glad_glVertexArrayVertexOffsetEXT;
+PFNGLVERTEXARRAYCOLOROFFSETEXTPROC glad_glVertexArrayColorOffsetEXT;
+PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC glad_glVertexArrayEdgeFlagOffsetEXT;
+PFNGLVERTEXARRAYINDEXOFFSETEXTPROC glad_glVertexArrayIndexOffsetEXT;
+PFNGLVERTEXARRAYNORMALOFFSETEXTPROC glad_glVertexArrayNormalOffsetEXT;
+PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC glad_glVertexArrayTexCoordOffsetEXT;
+PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC glad_glVertexArrayMultiTexCoordOffsetEXT;
+PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC glad_glVertexArrayFogCoordOffsetEXT;
+PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC glad_glVertexArraySecondaryColorOffsetEXT;
+PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC glad_glVertexArrayVertexAttribOffsetEXT;
+PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC glad_glVertexArrayVertexAttribIOffsetEXT;
+PFNGLENABLEVERTEXARRAYEXTPROC glad_glEnableVertexArrayEXT;
+PFNGLDISABLEVERTEXARRAYEXTPROC glad_glDisableVertexArrayEXT;
+PFNGLENABLEVERTEXARRAYATTRIBEXTPROC glad_glEnableVertexArrayAttribEXT;
+PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC glad_glDisableVertexArrayAttribEXT;
+PFNGLGETVERTEXARRAYINTEGERVEXTPROC glad_glGetVertexArrayIntegervEXT;
+PFNGLGETVERTEXARRAYPOINTERVEXTPROC glad_glGetVertexArrayPointervEXT;
+PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC glad_glGetVertexArrayIntegeri_vEXT;
+PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC glad_glGetVertexArrayPointeri_vEXT;
+PFNGLMAPNAMEDBUFFERRANGEEXTPROC glad_glMapNamedBufferRangeEXT;
+PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC glad_glFlushMappedNamedBufferRangeEXT;
+PFNGLNAMEDBUFFERSTORAGEEXTPROC glad_glNamedBufferStorageEXT;
+PFNGLCLEARNAMEDBUFFERDATAEXTPROC glad_glClearNamedBufferDataEXT;
+PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC glad_glClearNamedBufferSubDataEXT;
+PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC glad_glNamedFramebufferParameteriEXT;
+PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC glad_glGetNamedFramebufferParameterivEXT;
+PFNGLPROGRAMUNIFORM1DEXTPROC glad_glProgramUniform1dEXT;
+PFNGLPROGRAMUNIFORM2DEXTPROC glad_glProgramUniform2dEXT;
+PFNGLPROGRAMUNIFORM3DEXTPROC glad_glProgramUniform3dEXT;
+PFNGLPROGRAMUNIFORM4DEXTPROC glad_glProgramUniform4dEXT;
+PFNGLPROGRAMUNIFORM1DVEXTPROC glad_glProgramUniform1dvEXT;
+PFNGLPROGRAMUNIFORM2DVEXTPROC glad_glProgramUniform2dvEXT;
+PFNGLPROGRAMUNIFORM3DVEXTPROC glad_glProgramUniform3dvEXT;
+PFNGLPROGRAMUNIFORM4DVEXTPROC glad_glProgramUniform4dvEXT;
+PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC glad_glProgramUniformMatrix2dvEXT;
+PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC glad_glProgramUniformMatrix3dvEXT;
+PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC glad_glProgramUniformMatrix4dvEXT;
+PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC glad_glProgramUniformMatrix2x3dvEXT;
+PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC glad_glProgramUniformMatrix2x4dvEXT;
+PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC glad_glProgramUniformMatrix3x2dvEXT;
+PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC glad_glProgramUniformMatrix3x4dvEXT;
+PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC glad_glProgramUniformMatrix4x2dvEXT;
+PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC glad_glProgramUniformMatrix4x3dvEXT;
+PFNGLTEXTUREBUFFERRANGEEXTPROC glad_glTextureBufferRangeEXT;
+PFNGLTEXTURESTORAGE1DEXTPROC glad_glTextureStorage1DEXT;
+PFNGLTEXTURESTORAGE2DEXTPROC glad_glTextureStorage2DEXT;
+PFNGLTEXTURESTORAGE3DEXTPROC glad_glTextureStorage3DEXT;
+PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC glad_glTextureStorage2DMultisampleEXT;
+PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC glad_glTextureStorage3DMultisampleEXT;
+PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC glad_glVertexArrayBindVertexBufferEXT;
+PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC glad_glVertexArrayVertexAttribFormatEXT;
+PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC glad_glVertexArrayVertexAttribIFormatEXT;
+PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC glad_glVertexArrayVertexAttribLFormatEXT;
+PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC glad_glVertexArrayVertexAttribBindingEXT;
+PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC glad_glVertexArrayVertexBindingDivisorEXT;
+PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC glad_glVertexArrayVertexAttribLOffsetEXT;
+PFNGLTEXTUREPAGECOMMITMENTEXTPROC glad_glTexturePageCommitmentEXT;
+PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC glad_glVertexArrayVertexAttribDivisorEXT;
+PFNGLSETMULTISAMPLEFVAMDPROC glad_glSetMultisamplefvAMD;
+PFNGLAREPROGRAMSRESIDENTNVPROC glad_glAreProgramsResidentNV;
+PFNGLBINDPROGRAMNVPROC glad_glBindProgramNV;
+PFNGLDELETEPROGRAMSNVPROC glad_glDeleteProgramsNV;
+PFNGLEXECUTEPROGRAMNVPROC glad_glExecuteProgramNV;
+PFNGLGENPROGRAMSNVPROC glad_glGenProgramsNV;
+PFNGLGETPROGRAMPARAMETERDVNVPROC glad_glGetProgramParameterdvNV;
+PFNGLGETPROGRAMPARAMETERFVNVPROC glad_glGetProgramParameterfvNV;
+PFNGLGETPROGRAMIVNVPROC glad_glGetProgramivNV;
+PFNGLGETPROGRAMSTRINGNVPROC glad_glGetProgramStringNV;
+PFNGLGETTRACKMATRIXIVNVPROC glad_glGetTrackMatrixivNV;
+PFNGLGETVERTEXATTRIBDVNVPROC glad_glGetVertexAttribdvNV;
+PFNGLGETVERTEXATTRIBFVNVPROC glad_glGetVertexAttribfvNV;
+PFNGLGETVERTEXATTRIBIVNVPROC glad_glGetVertexAttribivNV;
+PFNGLGETVERTEXATTRIBPOINTERVNVPROC glad_glGetVertexAttribPointervNV;
+PFNGLISPROGRAMNVPROC glad_glIsProgramNV;
+PFNGLLOADPROGRAMNVPROC glad_glLoadProgramNV;
+PFNGLPROGRAMPARAMETER4DNVPROC glad_glProgramParameter4dNV;
+PFNGLPROGRAMPARAMETER4DVNVPROC glad_glProgramParameter4dvNV;
+PFNGLPROGRAMPARAMETER4FNVPROC glad_glProgramParameter4fNV;
+PFNGLPROGRAMPARAMETER4FVNVPROC glad_glProgramParameter4fvNV;
+PFNGLPROGRAMPARAMETERS4DVNVPROC glad_glProgramParameters4dvNV;
+PFNGLPROGRAMPARAMETERS4FVNVPROC glad_glProgramParameters4fvNV;
+PFNGLREQUESTRESIDENTPROGRAMSNVPROC glad_glRequestResidentProgramsNV;
+PFNGLTRACKMATRIXNVPROC glad_glTrackMatrixNV;
+PFNGLVERTEXATTRIBPOINTERNVPROC glad_glVertexAttribPointerNV;
+PFNGLVERTEXATTRIB1DNVPROC glad_glVertexAttrib1dNV;
+PFNGLVERTEXATTRIB1DVNVPROC glad_glVertexAttrib1dvNV;
+PFNGLVERTEXATTRIB1FNVPROC glad_glVertexAttrib1fNV;
+PFNGLVERTEXATTRIB1FVNVPROC glad_glVertexAttrib1fvNV;
+PFNGLVERTEXATTRIB1SNVPROC glad_glVertexAttrib1sNV;
+PFNGLVERTEXATTRIB1SVNVPROC glad_glVertexAttrib1svNV;
+PFNGLVERTEXATTRIB2DNVPROC glad_glVertexAttrib2dNV;
+PFNGLVERTEXATTRIB2DVNVPROC glad_glVertexAttrib2dvNV;
+PFNGLVERTEXATTRIB2FNVPROC glad_glVertexAttrib2fNV;
+PFNGLVERTEXATTRIB2FVNVPROC glad_glVertexAttrib2fvNV;
+PFNGLVERTEXATTRIB2SNVPROC glad_glVertexAttrib2sNV;
+PFNGLVERTEXATTRIB2SVNVPROC glad_glVertexAttrib2svNV;
+PFNGLVERTEXATTRIB3DNVPROC glad_glVertexAttrib3dNV;
+PFNGLVERTEXATTRIB3DVNVPROC glad_glVertexAttrib3dvNV;
+PFNGLVERTEXATTRIB3FNVPROC glad_glVertexAttrib3fNV;
+PFNGLVERTEXATTRIB3FVNVPROC glad_glVertexAttrib3fvNV;
+PFNGLVERTEXATTRIB3SNVPROC glad_glVertexAttrib3sNV;
+PFNGLVERTEXATTRIB3SVNVPROC glad_glVertexAttrib3svNV;
+PFNGLVERTEXATTRIB4DNVPROC glad_glVertexAttrib4dNV;
+PFNGLVERTEXATTRIB4DVNVPROC glad_glVertexAttrib4dvNV;
+PFNGLVERTEXATTRIB4FNVPROC glad_glVertexAttrib4fNV;
+PFNGLVERTEXATTRIB4FVNVPROC glad_glVertexAttrib4fvNV;
+PFNGLVERTEXATTRIB4SNVPROC glad_glVertexAttrib4sNV;
+PFNGLVERTEXATTRIB4SVNVPROC glad_glVertexAttrib4svNV;
+PFNGLVERTEXATTRIB4UBNVPROC glad_glVertexAttrib4ubNV;
+PFNGLVERTEXATTRIB4UBVNVPROC glad_glVertexAttrib4ubvNV;
+PFNGLVERTEXATTRIBS1DVNVPROC glad_glVertexAttribs1dvNV;
+PFNGLVERTEXATTRIBS1FVNVPROC glad_glVertexAttribs1fvNV;
+PFNGLVERTEXATTRIBS1SVNVPROC glad_glVertexAttribs1svNV;
+PFNGLVERTEXATTRIBS2DVNVPROC glad_glVertexAttribs2dvNV;
+PFNGLVERTEXATTRIBS2FVNVPROC glad_glVertexAttribs2fvNV;
+PFNGLVERTEXATTRIBS2SVNVPROC glad_glVertexAttribs2svNV;
+PFNGLVERTEXATTRIBS3DVNVPROC glad_glVertexAttribs3dvNV;
+PFNGLVERTEXATTRIBS3FVNVPROC glad_glVertexAttribs3fvNV;
+PFNGLVERTEXATTRIBS3SVNVPROC glad_glVertexAttribs3svNV;
+PFNGLVERTEXATTRIBS4DVNVPROC glad_glVertexAttribs4dvNV;
+PFNGLVERTEXATTRIBS4FVNVPROC glad_glVertexAttribs4fvNV;
+PFNGLVERTEXATTRIBS4SVNVPROC glad_glVertexAttribs4svNV;
+PFNGLVERTEXATTRIBS4UBVNVPROC glad_glVertexAttribs4ubvNV;
+PFNGLBEGINVERTEXSHADEREXTPROC glad_glBeginVertexShaderEXT;
+PFNGLENDVERTEXSHADEREXTPROC glad_glEndVertexShaderEXT;
+PFNGLBINDVERTEXSHADEREXTPROC glad_glBindVertexShaderEXT;
+PFNGLGENVERTEXSHADERSEXTPROC glad_glGenVertexShadersEXT;
+PFNGLDELETEVERTEXSHADEREXTPROC glad_glDeleteVertexShaderEXT;
+PFNGLSHADEROP1EXTPROC glad_glShaderOp1EXT;
+PFNGLSHADEROP2EXTPROC glad_glShaderOp2EXT;
+PFNGLSHADEROP3EXTPROC glad_glShaderOp3EXT;
+PFNGLSWIZZLEEXTPROC glad_glSwizzleEXT;
+PFNGLWRITEMASKEXTPROC glad_glWriteMaskEXT;
+PFNGLINSERTCOMPONENTEXTPROC glad_glInsertComponentEXT;
+PFNGLEXTRACTCOMPONENTEXTPROC glad_glExtractComponentEXT;
+PFNGLGENSYMBOLSEXTPROC glad_glGenSymbolsEXT;
+PFNGLSETINVARIANTEXTPROC glad_glSetInvariantEXT;
+PFNGLSETLOCALCONSTANTEXTPROC glad_glSetLocalConstantEXT;
+PFNGLVARIANTBVEXTPROC glad_glVariantbvEXT;
+PFNGLVARIANTSVEXTPROC glad_glVariantsvEXT;
+PFNGLVARIANTIVEXTPROC glad_glVariantivEXT;
+PFNGLVARIANTFVEXTPROC glad_glVariantfvEXT;
+PFNGLVARIANTDVEXTPROC glad_glVariantdvEXT;
+PFNGLVARIANTUBVEXTPROC glad_glVariantubvEXT;
+PFNGLVARIANTUSVEXTPROC glad_glVariantusvEXT;
+PFNGLVARIANTUIVEXTPROC glad_glVariantuivEXT;
+PFNGLVARIANTPOINTEREXTPROC glad_glVariantPointerEXT;
+PFNGLENABLEVARIANTCLIENTSTATEEXTPROC glad_glEnableVariantClientStateEXT;
+PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC glad_glDisableVariantClientStateEXT;
+PFNGLBINDLIGHTPARAMETEREXTPROC glad_glBindLightParameterEXT;
+PFNGLBINDMATERIALPARAMETEREXTPROC glad_glBindMaterialParameterEXT;
+PFNGLBINDTEXGENPARAMETEREXTPROC glad_glBindTexGenParameterEXT;
+PFNGLBINDTEXTUREUNITPARAMETEREXTPROC glad_glBindTextureUnitParameterEXT;
+PFNGLBINDPARAMETEREXTPROC glad_glBindParameterEXT;
+PFNGLISVARIANTENABLEDEXTPROC glad_glIsVariantEnabledEXT;
+PFNGLGETVARIANTBOOLEANVEXTPROC glad_glGetVariantBooleanvEXT;
+PFNGLGETVARIANTINTEGERVEXTPROC glad_glGetVariantIntegervEXT;
+PFNGLGETVARIANTFLOATVEXTPROC glad_glGetVariantFloatvEXT;
+PFNGLGETVARIANTPOINTERVEXTPROC glad_glGetVariantPointervEXT;
+PFNGLGETINVARIANTBOOLEANVEXTPROC glad_glGetInvariantBooleanvEXT;
+PFNGLGETINVARIANTINTEGERVEXTPROC glad_glGetInvariantIntegervEXT;
+PFNGLGETINVARIANTFLOATVEXTPROC glad_glGetInvariantFloatvEXT;
+PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC glad_glGetLocalConstantBooleanvEXT;
+PFNGLGETLOCALCONSTANTINTEGERVEXTPROC glad_glGetLocalConstantIntegervEXT;
+PFNGLGETLOCALCONSTANTFLOATVEXTPROC glad_glGetLocalConstantFloatvEXT;
+PFNGLBLENDFUNCSEPARATEEXTPROC glad_glBlendFuncSeparateEXT;
+PFNGLGENFENCESAPPLEPROC glad_glGenFencesAPPLE;
+PFNGLDELETEFENCESAPPLEPROC glad_glDeleteFencesAPPLE;
+PFNGLSETFENCEAPPLEPROC glad_glSetFenceAPPLE;
+PFNGLISFENCEAPPLEPROC glad_glIsFenceAPPLE;
+PFNGLTESTFENCEAPPLEPROC glad_glTestFenceAPPLE;
+PFNGLFINISHFENCEAPPLEPROC glad_glFinishFenceAPPLE;
+PFNGLTESTOBJECTAPPLEPROC glad_glTestObjectAPPLE;
+PFNGLFINISHOBJECTAPPLEPROC glad_glFinishObjectAPPLE;
+PFNGLMULTITEXCOORD1BOESPROC glad_glMultiTexCoord1bOES;
+PFNGLMULTITEXCOORD1BVOESPROC glad_glMultiTexCoord1bvOES;
+PFNGLMULTITEXCOORD2BOESPROC glad_glMultiTexCoord2bOES;
+PFNGLMULTITEXCOORD2BVOESPROC glad_glMultiTexCoord2bvOES;
+PFNGLMULTITEXCOORD3BOESPROC glad_glMultiTexCoord3bOES;
+PFNGLMULTITEXCOORD3BVOESPROC glad_glMultiTexCoord3bvOES;
+PFNGLMULTITEXCOORD4BOESPROC glad_glMultiTexCoord4bOES;
+PFNGLMULTITEXCOORD4BVOESPROC glad_glMultiTexCoord4bvOES;
+PFNGLTEXCOORD1BOESPROC glad_glTexCoord1bOES;
+PFNGLTEXCOORD1BVOESPROC glad_glTexCoord1bvOES;
+PFNGLTEXCOORD2BOESPROC glad_glTexCoord2bOES;
+PFNGLTEXCOORD2BVOESPROC glad_glTexCoord2bvOES;
+PFNGLTEXCOORD3BOESPROC glad_glTexCoord3bOES;
+PFNGLTEXCOORD3BVOESPROC glad_glTexCoord3bvOES;
+PFNGLTEXCOORD4BOESPROC glad_glTexCoord4bOES;
+PFNGLTEXCOORD4BVOESPROC glad_glTexCoord4bvOES;
+PFNGLVERTEX2BOESPROC glad_glVertex2bOES;
+PFNGLVERTEX2BVOESPROC glad_glVertex2bvOES;
+PFNGLVERTEX3BOESPROC glad_glVertex3bOES;
+PFNGLVERTEX3BVOESPROC glad_glVertex3bvOES;
+PFNGLVERTEX4BOESPROC glad_glVertex4bOES;
+PFNGLVERTEX4BVOESPROC glad_glVertex4bvOES;
+PFNGLLOADTRANSPOSEMATRIXFARBPROC glad_glLoadTransposeMatrixfARB;
+PFNGLLOADTRANSPOSEMATRIXDARBPROC glad_glLoadTransposeMatrixdARB;
+PFNGLMULTTRANSPOSEMATRIXFARBPROC glad_glMultTransposeMatrixfARB;
+PFNGLMULTTRANSPOSEMATRIXDARBPROC glad_glMultTransposeMatrixdARB;
+PFNGLFOGCOORDFEXTPROC glad_glFogCoordfEXT;
+PFNGLFOGCOORDFVEXTPROC glad_glFogCoordfvEXT;
+PFNGLFOGCOORDDEXTPROC glad_glFogCoorddEXT;
+PFNGLFOGCOORDDVEXTPROC glad_glFogCoorddvEXT;
+PFNGLFOGCOORDPOINTEREXTPROC glad_glFogCoordPointerEXT;
+PFNGLARRAYELEMENTEXTPROC glad_glArrayElementEXT;
+PFNGLCOLORPOINTEREXTPROC glad_glColorPointerEXT;
+PFNGLDRAWARRAYSEXTPROC glad_glDrawArraysEXT;
+PFNGLEDGEFLAGPOINTEREXTPROC glad_glEdgeFlagPointerEXT;
+PFNGLGETPOINTERVEXTPROC glad_glGetPointervEXT;
+PFNGLINDEXPOINTEREXTPROC glad_glIndexPointerEXT;
+PFNGLNORMALPOINTEREXTPROC glad_glNormalPointerEXT;
+PFNGLTEXCOORDPOINTEREXTPROC glad_glTexCoordPointerEXT;
+PFNGLVERTEXPOINTEREXTPROC glad_glVertexPointerEXT;
+PFNGLBLENDEQUATIONSEPARATEEXTPROC glad_glBlendEquationSeparateEXT;
+PFNGLCOVERAGEMODULATIONTABLENVPROC glad_glCoverageModulationTableNV;
+PFNGLGETCOVERAGEMODULATIONTABLENVPROC glad_glGetCoverageModulationTableNV;
+PFNGLCOVERAGEMODULATIONNVPROC glad_glCoverageModulationNV;
+PFNGLBEGINCONDITIONALRENDERNVXPROC glad_glBeginConditionalRenderNVX;
+PFNGLENDCONDITIONALRENDERNVXPROC glad_glEndConditionalRenderNVX;
+PFNGLMULTIDRAWARRAYSINDIRECTPROC glad_glMultiDrawArraysIndirect;
+PFNGLMULTIDRAWELEMENTSINDIRECTPROC glad_glMultiDrawElementsIndirect;
+PFNGLCOPYIMAGESUBDATANVPROC glad_glCopyImageSubDataNV;
+PFNGLAPPLYFRAMEBUFFERATTACHMENTCMAAINTELPROC glad_glApplyFramebufferAttachmentCMAAINTEL;
+PFNGLBINDTRANSFORMFEEDBACKPROC glad_glBindTransformFeedback;
+PFNGLDELETETRANSFORMFEEDBACKSPROC glad_glDeleteTransformFeedbacks;
+PFNGLGENTRANSFORMFEEDBACKSPROC glad_glGenTransformFeedbacks;
+PFNGLISTRANSFORMFEEDBACKPROC glad_glIsTransformFeedback;
+PFNGLPAUSETRANSFORMFEEDBACKPROC glad_glPauseTransformFeedback;
+PFNGLRESUMETRANSFORMFEEDBACKPROC glad_glResumeTransformFeedback;
+PFNGLDRAWTRANSFORMFEEDBACKPROC glad_glDrawTransformFeedback;
+PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC glad_glDrawTransformFeedbackStream;
+PFNGLBEGINQUERYINDEXEDPROC glad_glBeginQueryIndexed;
+PFNGLENDQUERYINDEXEDPROC glad_glEndQueryIndexed;
+PFNGLGETQUERYINDEXEDIVPROC glad_glGetQueryIndexediv;
+PFNGLINSERTEVENTMARKEREXTPROC glad_glInsertEventMarkerEXT;
+PFNGLPUSHGROUPMARKEREXTPROC glad_glPushGroupMarkerEXT;
+PFNGLPOPGROUPMARKEREXTPROC glad_glPopGroupMarkerEXT;
+PFNGLPIXELTRANSFORMPARAMETERIEXTPROC glad_glPixelTransformParameteriEXT;
+PFNGLPIXELTRANSFORMPARAMETERFEXTPROC glad_glPixelTransformParameterfEXT;
+PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC glad_glPixelTransformParameterivEXT;
+PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC glad_glPixelTransformParameterfvEXT;
+PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC glad_glGetPixelTransformParameterivEXT;
+PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC glad_glGetPixelTransformParameterfvEXT;
+PFNGLGENFRAGMENTSHADERSATIPROC glad_glGenFragmentShadersATI;
+PFNGLBINDFRAGMENTSHADERATIPROC glad_glBindFragmentShaderATI;
+PFNGLDELETEFRAGMENTSHADERATIPROC glad_glDeleteFragmentShaderATI;
+PFNGLBEGINFRAGMENTSHADERATIPROC glad_glBeginFragmentShaderATI;
+PFNGLENDFRAGMENTSHADERATIPROC glad_glEndFragmentShaderATI;
+PFNGLPASSTEXCOORDATIPROC glad_glPassTexCoordATI;
+PFNGLSAMPLEMAPATIPROC glad_glSampleMapATI;
+PFNGLCOLORFRAGMENTOP1ATIPROC glad_glColorFragmentOp1ATI;
+PFNGLCOLORFRAGMENTOP2ATIPROC glad_glColorFragmentOp2ATI;
+PFNGLCOLORFRAGMENTOP3ATIPROC glad_glColorFragmentOp3ATI;
+PFNGLALPHAFRAGMENTOP1ATIPROC glad_glAlphaFragmentOp1ATI;
+PFNGLALPHAFRAGMENTOP2ATIPROC glad_glAlphaFragmentOp2ATI;
+PFNGLALPHAFRAGMENTOP3ATIPROC glad_glAlphaFragmentOp3ATI;
+PFNGLSETFRAGMENTSHADERCONSTANTATIPROC glad_glSetFragmentShaderConstantATI;
+PFNGLREPLACEMENTCODEUISUNPROC glad_glReplacementCodeuiSUN;
+PFNGLREPLACEMENTCODEUSSUNPROC glad_glReplacementCodeusSUN;
+PFNGLREPLACEMENTCODEUBSUNPROC glad_glReplacementCodeubSUN;
+PFNGLREPLACEMENTCODEUIVSUNPROC glad_glReplacementCodeuivSUN;
+PFNGLREPLACEMENTCODEUSVSUNPROC glad_glReplacementCodeusvSUN;
+PFNGLREPLACEMENTCODEUBVSUNPROC glad_glReplacementCodeubvSUN;
+PFNGLREPLACEMENTCODEPOINTERSUNPROC glad_glReplacementCodePointerSUN;
+PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC glad_glDrawTransformFeedbackInstanced;
+PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC glad_glDrawTransformFeedbackStreamInstanced;
+PFNGLASYNCMARKERSGIXPROC glad_glAsyncMarkerSGIX;
+PFNGLFINISHASYNCSGIXPROC glad_glFinishAsyncSGIX;
+PFNGLPOLLASYNCSGIXPROC glad_glPollAsyncSGIX;
+PFNGLGENASYNCMARKERSSGIXPROC glad_glGenAsyncMarkersSGIX;
+PFNGLDELETEASYNCMARKERSSGIXPROC glad_glDeleteAsyncMarkersSGIX;
+PFNGLISASYNCMARKERSGIXPROC glad_glIsAsyncMarkerSGIX;
+PFNGLBEGINPERFQUERYINTELPROC glad_glBeginPerfQueryINTEL;
+PFNGLCREATEPERFQUERYINTELPROC glad_glCreatePerfQueryINTEL;
+PFNGLDELETEPERFQUERYINTELPROC glad_glDeletePerfQueryINTEL;
+PFNGLENDPERFQUERYINTELPROC glad_glEndPerfQueryINTEL;
+PFNGLGETFIRSTPERFQUERYIDINTELPROC glad_glGetFirstPerfQueryIdINTEL;
+PFNGLGETNEXTPERFQUERYIDINTELPROC glad_glGetNextPerfQueryIdINTEL;
+PFNGLGETPERFCOUNTERINFOINTELPROC glad_glGetPerfCounterInfoINTEL;
+PFNGLGETPERFQUERYDATAINTELPROC glad_glGetPerfQueryDataINTEL;
+PFNGLGETPERFQUERYIDBYNAMEINTELPROC glad_glGetPerfQueryIdByNameINTEL;
+PFNGLGETPERFQUERYINFOINTELPROC glad_glGetPerfQueryInfoINTEL;
+PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSCOUNTNVPROC glad_glMultiDrawArraysIndirectBindlessCountNV;
+PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSCOUNTNVPROC glad_glMultiDrawElementsIndirectBindlessCountNV;
+PFNGLRELEASESHADERCOMPILERPROC glad_glReleaseShaderCompiler;
+PFNGLSHADERBINARYPROC glad_glShaderBinary;
+PFNGLGETSHADERPRECISIONFORMATPROC glad_glGetShaderPrecisionFormat;
+PFNGLDEPTHRANGEFPROC glad_glDepthRangef;
+PFNGLCLEARDEPTHFPROC glad_glClearDepthf;
+PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC glad_glMultiDrawArraysIndirectCountARB;
+PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC glad_glMultiDrawElementsIndirectCountARB;
+PFNGLVERTEX2HNVPROC glad_glVertex2hNV;
+PFNGLVERTEX2HVNVPROC glad_glVertex2hvNV;
+PFNGLVERTEX3HNVPROC glad_glVertex3hNV;
+PFNGLVERTEX3HVNVPROC glad_glVertex3hvNV;
+PFNGLVERTEX4HNVPROC glad_glVertex4hNV;
+PFNGLVERTEX4HVNVPROC glad_glVertex4hvNV;
+PFNGLNORMAL3HNVPROC glad_glNormal3hNV;
+PFNGLNORMAL3HVNVPROC glad_glNormal3hvNV;
+PFNGLCOLOR3HNVPROC glad_glColor3hNV;
+PFNGLCOLOR3HVNVPROC glad_glColor3hvNV;
+PFNGLCOLOR4HNVPROC glad_glColor4hNV;
+PFNGLCOLOR4HVNVPROC glad_glColor4hvNV;
+PFNGLTEXCOORD1HNVPROC glad_glTexCoord1hNV;
+PFNGLTEXCOORD1HVNVPROC glad_glTexCoord1hvNV;
+PFNGLTEXCOORD2HNVPROC glad_glTexCoord2hNV;
+PFNGLTEXCOORD2HVNVPROC glad_glTexCoord2hvNV;
+PFNGLTEXCOORD3HNVPROC glad_glTexCoord3hNV;
+PFNGLTEXCOORD3HVNVPROC glad_glTexCoord3hvNV;
+PFNGLTEXCOORD4HNVPROC glad_glTexCoord4hNV;
+PFNGLTEXCOORD4HVNVPROC glad_glTexCoord4hvNV;
+PFNGLMULTITEXCOORD1HNVPROC glad_glMultiTexCoord1hNV;
+PFNGLMULTITEXCOORD1HVNVPROC glad_glMultiTexCoord1hvNV;
+PFNGLMULTITEXCOORD2HNVPROC glad_glMultiTexCoord2hNV;
+PFNGLMULTITEXCOORD2HVNVPROC glad_glMultiTexCoord2hvNV;
+PFNGLMULTITEXCOORD3HNVPROC glad_glMultiTexCoord3hNV;
+PFNGLMULTITEXCOORD3HVNVPROC glad_glMultiTexCoord3hvNV;
+PFNGLMULTITEXCOORD4HNVPROC glad_glMultiTexCoord4hNV;
+PFNGLMULTITEXCOORD4HVNVPROC glad_glMultiTexCoord4hvNV;
+PFNGLFOGCOORDHNVPROC glad_glFogCoordhNV;
+PFNGLFOGCOORDHVNVPROC glad_glFogCoordhvNV;
+PFNGLSECONDARYCOLOR3HNVPROC glad_glSecondaryColor3hNV;
+PFNGLSECONDARYCOLOR3HVNVPROC glad_glSecondaryColor3hvNV;
+PFNGLVERTEXWEIGHTHNVPROC glad_glVertexWeighthNV;
+PFNGLVERTEXWEIGHTHVNVPROC glad_glVertexWeighthvNV;
+PFNGLVERTEXATTRIB1HNVPROC glad_glVertexAttrib1hNV;
+PFNGLVERTEXATTRIB1HVNVPROC glad_glVertexAttrib1hvNV;
+PFNGLVERTEXATTRIB2HNVPROC glad_glVertexAttrib2hNV;
+PFNGLVERTEXATTRIB2HVNVPROC glad_glVertexAttrib2hvNV;
+PFNGLVERTEXATTRIB3HNVPROC glad_glVertexAttrib3hNV;
+PFNGLVERTEXATTRIB3HVNVPROC glad_glVertexAttrib3hvNV;
+PFNGLVERTEXATTRIB4HNVPROC glad_glVertexAttrib4hNV;
+PFNGLVERTEXATTRIB4HVNVPROC glad_glVertexAttrib4hvNV;
+PFNGLVERTEXATTRIBS1HVNVPROC glad_glVertexAttribs1hvNV;
+PFNGLVERTEXATTRIBS2HVNVPROC glad_glVertexAttribs2hvNV;
+PFNGLVERTEXATTRIBS3HVNVPROC glad_glVertexAttribs3hvNV;
+PFNGLVERTEXATTRIBS4HVNVPROC glad_glVertexAttribs4hvNV;
+PFNGLPRIMITIVEBOUNDINGBOXARBPROC glad_glPrimitiveBoundingBoxARB;
+PFNGLPOLYGONOFFSETCLAMPEXTPROC glad_glPolygonOffsetClampEXT;
+PFNGLLOCKARRAYSEXTPROC glad_glLockArraysEXT;
+PFNGLUNLOCKARRAYSEXTPROC glad_glUnlockArraysEXT;
+PFNGLDEPTHRANGEDNVPROC glad_glDepthRangedNV;
+PFNGLCLEARDEPTHDNVPROC glad_glClearDepthdNV;
+PFNGLDEPTHBOUNDSDNVPROC glad_glDepthBoundsdNV;
+PFNGLGENOCCLUSIONQUERIESNVPROC glad_glGenOcclusionQueriesNV;
+PFNGLDELETEOCCLUSIONQUERIESNVPROC glad_glDeleteOcclusionQueriesNV;
+PFNGLISOCCLUSIONQUERYNVPROC glad_glIsOcclusionQueryNV;
+PFNGLBEGINOCCLUSIONQUERYNVPROC glad_glBeginOcclusionQueryNV;
+PFNGLENDOCCLUSIONQUERYNVPROC glad_glEndOcclusionQueryNV;
+PFNGLGETOCCLUSIONQUERYIVNVPROC glad_glGetOcclusionQueryivNV;
+PFNGLGETOCCLUSIONQUERYUIVNVPROC glad_glGetOcclusionQueryuivNV;
+PFNGLBUFFERPARAMETERIAPPLEPROC glad_glBufferParameteriAPPLE;
+PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC glad_glFlushMappedBufferRangeAPPLE;
+PFNGLCOLORTABLEPROC glad_glColorTable;
+PFNGLCOLORTABLEPARAMETERFVPROC glad_glColorTableParameterfv;
+PFNGLCOLORTABLEPARAMETERIVPROC glad_glColorTableParameteriv;
+PFNGLCOPYCOLORTABLEPROC glad_glCopyColorTable;
+PFNGLGETCOLORTABLEPROC glad_glGetColorTable;
+PFNGLGETCOLORTABLEPARAMETERFVPROC glad_glGetColorTableParameterfv;
+PFNGLGETCOLORTABLEPARAMETERIVPROC glad_glGetColorTableParameteriv;
+PFNGLCOLORSUBTABLEPROC glad_glColorSubTable;
+PFNGLCOPYCOLORSUBTABLEPROC glad_glCopyColorSubTable;
+PFNGLCONVOLUTIONFILTER1DPROC glad_glConvolutionFilter1D;
+PFNGLCONVOLUTIONFILTER2DPROC glad_glConvolutionFilter2D;
+PFNGLCONVOLUTIONPARAMETERFPROC glad_glConvolutionParameterf;
+PFNGLCONVOLUTIONPARAMETERFVPROC glad_glConvolutionParameterfv;
+PFNGLCONVOLUTIONPARAMETERIPROC glad_glConvolutionParameteri;
+PFNGLCONVOLUTIONPARAMETERIVPROC glad_glConvolutionParameteriv;
+PFNGLCOPYCONVOLUTIONFILTER1DPROC glad_glCopyConvolutionFilter1D;
+PFNGLCOPYCONVOLUTIONFILTER2DPROC glad_glCopyConvolutionFilter2D;
+PFNGLGETCONVOLUTIONFILTERPROC glad_glGetConvolutionFilter;
+PFNGLGETCONVOLUTIONPARAMETERFVPROC glad_glGetConvolutionParameterfv;
+PFNGLGETCONVOLUTIONPARAMETERIVPROC glad_glGetConvolutionParameteriv;
+PFNGLGETSEPARABLEFILTERPROC glad_glGetSeparableFilter;
+PFNGLSEPARABLEFILTER2DPROC glad_glSeparableFilter2D;
+PFNGLGETHISTOGRAMPROC glad_glGetHistogram;
+PFNGLGETHISTOGRAMPARAMETERFVPROC glad_glGetHistogramParameterfv;
+PFNGLGETHISTOGRAMPARAMETERIVPROC glad_glGetHistogramParameteriv;
+PFNGLGETMINMAXPROC glad_glGetMinmax;
+PFNGLGETMINMAXPARAMETERFVPROC glad_glGetMinmaxParameterfv;
+PFNGLGETMINMAXPARAMETERIVPROC glad_glGetMinmaxParameteriv;
+PFNGLHISTOGRAMPROC glad_glHistogram;
+PFNGLMINMAXPROC glad_glMinmax;
+PFNGLRESETHISTOGRAMPROC glad_glResetHistogram;
+PFNGLRESETMINMAXPROC glad_glResetMinmax;
+PFNGLBLENDEQUATIONIARBPROC glad_glBlendEquationiARB;
+PFNGLBLENDEQUATIONSEPARATEIARBPROC glad_glBlendEquationSeparateiARB;
+PFNGLBLENDFUNCIARBPROC glad_glBlendFunciARB;
+PFNGLBLENDFUNCSEPARATEIARBPROC glad_glBlendFuncSeparateiARB;
+PFNGLCLEARBUFFERDATAPROC glad_glClearBufferData;
+PFNGLCLEARBUFFERSUBDATAPROC glad_glClearBufferSubData;
+PFNGLSAMPLECOVERAGEARBPROC glad_glSampleCoverageARB;
+PFNGLLABELOBJECTEXTPROC glad_glLabelObjectEXT;
+PFNGLGETOBJECTLABELEXTPROC glad_glGetObjectLabelEXT;
+PFNGLMINSAMPLESHADINGARBPROC glad_glMinSampleShadingARB;
+PFNGLGETINTERNALFORMATSAMPLEIVNVPROC glad_glGetInternalformatSampleivNV;
+PFNGLSYNCTEXTUREINTELPROC glad_glSyncTextureINTEL;
+PFNGLUNMAPTEXTURE2DINTELPROC glad_glUnmapTexture2DINTEL;
+PFNGLMAPTEXTURE2DINTELPROC glad_glMapTexture2DINTEL;
+PFNGLDISPATCHCOMPUTEPROC glad_glDispatchCompute;
+PFNGLDISPATCHCOMPUTEINDIRECTPROC glad_glDispatchComputeIndirect;
+PFNGLCOLORPOINTERLISTIBMPROC glad_glColorPointerListIBM;
+PFNGLSECONDARYCOLORPOINTERLISTIBMPROC glad_glSecondaryColorPointerListIBM;
+PFNGLEDGEFLAGPOINTERLISTIBMPROC glad_glEdgeFlagPointerListIBM;
+PFNGLFOGCOORDPOINTERLISTIBMPROC glad_glFogCoordPointerListIBM;
+PFNGLINDEXPOINTERLISTIBMPROC glad_glIndexPointerListIBM;
+PFNGLNORMALPOINTERLISTIBMPROC glad_glNormalPointerListIBM;
+PFNGLTEXCOORDPOINTERLISTIBMPROC glad_glTexCoordPointerListIBM;
+PFNGLVERTEXPOINTERLISTIBMPROC glad_glVertexPointerListIBM;
+PFNGLCLAMPCOLORARBPROC glad_glClampColorARB;
+PFNGLGETTEXTUREHANDLEARBPROC glad_glGetTextureHandleARB;
+PFNGLGETTEXTURESAMPLERHANDLEARBPROC glad_glGetTextureSamplerHandleARB;
+PFNGLMAKETEXTUREHANDLERESIDENTARBPROC glad_glMakeTextureHandleResidentARB;
+PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC glad_glMakeTextureHandleNonResidentARB;
+PFNGLGETIMAGEHANDLEARBPROC glad_glGetImageHandleARB;
+PFNGLMAKEIMAGEHANDLERESIDENTARBPROC glad_glMakeImageHandleResidentARB;
+PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC glad_glMakeImageHandleNonResidentARB;
+PFNGLUNIFORMHANDLEUI64ARBPROC glad_glUniformHandleui64ARB;
+PFNGLUNIFORMHANDLEUI64VARBPROC glad_glUniformHandleui64vARB;
+PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC glad_glProgramUniformHandleui64ARB;
+PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC glad_glProgramUniformHandleui64vARB;
+PFNGLISTEXTUREHANDLERESIDENTARBPROC glad_glIsTextureHandleResidentARB;
+PFNGLISIMAGEHANDLERESIDENTARBPROC glad_glIsImageHandleResidentARB;
+PFNGLVERTEXATTRIBL1UI64ARBPROC glad_glVertexAttribL1ui64ARB;
+PFNGLVERTEXATTRIBL1UI64VARBPROC glad_glVertexAttribL1ui64vARB;
+PFNGLGETVERTEXATTRIBLUI64VARBPROC glad_glGetVertexAttribLui64vARB;
+PFNGLWINDOWPOS2DARBPROC glad_glWindowPos2dARB;
+PFNGLWINDOWPOS2DVARBPROC glad_glWindowPos2dvARB;
+PFNGLWINDOWPOS2FARBPROC glad_glWindowPos2fARB;
+PFNGLWINDOWPOS2FVARBPROC glad_glWindowPos2fvARB;
+PFNGLWINDOWPOS2IARBPROC glad_glWindowPos2iARB;
+PFNGLWINDOWPOS2IVARBPROC glad_glWindowPos2ivARB;
+PFNGLWINDOWPOS2SARBPROC glad_glWindowPos2sARB;
+PFNGLWINDOWPOS2SVARBPROC glad_glWindowPos2svARB;
+PFNGLWINDOWPOS3DARBPROC glad_glWindowPos3dARB;
+PFNGLWINDOWPOS3DVARBPROC glad_glWindowPos3dvARB;
+PFNGLWINDOWPOS3FARBPROC glad_glWindowPos3fARB;
+PFNGLWINDOWPOS3FVARBPROC glad_glWindowPos3fvARB;
+PFNGLWINDOWPOS3IARBPROC glad_glWindowPos3iARB;
+PFNGLWINDOWPOS3IVARBPROC glad_glWindowPos3ivARB;
+PFNGLWINDOWPOS3SARBPROC glad_glWindowPos3sARB;
+PFNGLWINDOWPOS3SVARBPROC glad_glWindowPos3svARB;
+PFNGLGETINTERNALFORMATIVPROC glad_glGetInternalformativ;
+PFNGLBINDIMAGETEXTUREEXTPROC glad_glBindImageTextureEXT;
+PFNGLMEMORYBARRIEREXTPROC glad_glMemoryBarrierEXT;
+PFNGLCOPYTEXIMAGE1DEXTPROC glad_glCopyTexImage1DEXT;
+PFNGLCOPYTEXIMAGE2DEXTPROC glad_glCopyTexImage2DEXT;
+PFNGLCOPYTEXSUBIMAGE1DEXTPROC glad_glCopyTexSubImage1DEXT;
+PFNGLCOPYTEXSUBIMAGE2DEXTPROC glad_glCopyTexSubImage2DEXT;
+PFNGLCOPYTEXSUBIMAGE3DEXTPROC glad_glCopyTexSubImage3DEXT;
+PFNGLCOMBINERSTAGEPARAMETERFVNVPROC glad_glCombinerStageParameterfvNV;
+PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC glad_glGetCombinerStageParameterfvNV;
+PFNGLDRAWTEXTURENVPROC glad_glDrawTextureNV;
+PFNGLDRAWARRAYSINSTANCEDEXTPROC glad_glDrawArraysInstancedEXT;
+PFNGLDRAWELEMENTSINSTANCEDEXTPROC glad_glDrawElementsInstancedEXT;
+PFNGLVIEWPORTARRAYVPROC glad_glViewportArrayv;
+PFNGLVIEWPORTINDEXEDFPROC glad_glViewportIndexedf;
+PFNGLVIEWPORTINDEXEDFVPROC glad_glViewportIndexedfv;
+PFNGLSCISSORARRAYVPROC glad_glScissorArrayv;
+PFNGLSCISSORINDEXEDPROC glad_glScissorIndexed;
+PFNGLSCISSORINDEXEDVPROC glad_glScissorIndexedv;
+PFNGLDEPTHRANGEARRAYVPROC glad_glDepthRangeArrayv;
+PFNGLDEPTHRANGEINDEXEDPROC glad_glDepthRangeIndexed;
+PFNGLGETFLOATI_VPROC glad_glGetFloati_v;
+PFNGLGETDOUBLEI_VPROC glad_glGetDoublei_v;
+PFNGLUSEPROGRAMSTAGESPROC glad_glUseProgramStages;
+PFNGLACTIVESHADERPROGRAMPROC glad_glActiveShaderProgram;
+PFNGLCREATESHADERPROGRAMVPROC glad_glCreateShaderProgramv;
+PFNGLBINDPROGRAMPIPELINEPROC glad_glBindProgramPipeline;
+PFNGLDELETEPROGRAMPIPELINESPROC glad_glDeleteProgramPipelines;
+PFNGLGENPROGRAMPIPELINESPROC glad_glGenProgramPipelines;
+PFNGLISPROGRAMPIPELINEPROC glad_glIsProgramPipeline;
+PFNGLGETPROGRAMPIPELINEIVPROC glad_glGetProgramPipelineiv;
+PFNGLPROGRAMUNIFORM1IPROC glad_glProgramUniform1i;
+PFNGLPROGRAMUNIFORM1IVPROC glad_glProgramUniform1iv;
+PFNGLPROGRAMUNIFORM1FPROC glad_glProgramUniform1f;
+PFNGLPROGRAMUNIFORM1FVPROC glad_glProgramUniform1fv;
+PFNGLPROGRAMUNIFORM1DPROC glad_glProgramUniform1d;
+PFNGLPROGRAMUNIFORM1DVPROC glad_glProgramUniform1dv;
+PFNGLPROGRAMUNIFORM1UIPROC glad_glProgramUniform1ui;
+PFNGLPROGRAMUNIFORM1UIVPROC glad_glProgramUniform1uiv;
+PFNGLPROGRAMUNIFORM2IPROC glad_glProgramUniform2i;
+PFNGLPROGRAMUNIFORM2IVPROC glad_glProgramUniform2iv;
+PFNGLPROGRAMUNIFORM2FPROC glad_glProgramUniform2f;
+PFNGLPROGRAMUNIFORM2FVPROC glad_glProgramUniform2fv;
+PFNGLPROGRAMUNIFORM2DPROC glad_glProgramUniform2d;
+PFNGLPROGRAMUNIFORM2DVPROC glad_glProgramUniform2dv;
+PFNGLPROGRAMUNIFORM2UIPROC glad_glProgramUniform2ui;
+PFNGLPROGRAMUNIFORM2UIVPROC glad_glProgramUniform2uiv;
+PFNGLPROGRAMUNIFORM3IPROC glad_glProgramUniform3i;
+PFNGLPROGRAMUNIFORM3IVPROC glad_glProgramUniform3iv;
+PFNGLPROGRAMUNIFORM3FPROC glad_glProgramUniform3f;
+PFNGLPROGRAMUNIFORM3FVPROC glad_glProgramUniform3fv;
+PFNGLPROGRAMUNIFORM3DPROC glad_glProgramUniform3d;
+PFNGLPROGRAMUNIFORM3DVPROC glad_glProgramUniform3dv;
+PFNGLPROGRAMUNIFORM3UIPROC glad_glProgramUniform3ui;
+PFNGLPROGRAMUNIFORM3UIVPROC glad_glProgramUniform3uiv;
+PFNGLPROGRAMUNIFORM4IPROC glad_glProgramUniform4i;
+PFNGLPROGRAMUNIFORM4IVPROC glad_glProgramUniform4iv;
+PFNGLPROGRAMUNIFORM4FPROC glad_glProgramUniform4f;
+PFNGLPROGRAMUNIFORM4FVPROC glad_glProgramUniform4fv;
+PFNGLPROGRAMUNIFORM4DPROC glad_glProgramUniform4d;
+PFNGLPROGRAMUNIFORM4DVPROC glad_glProgramUniform4dv;
+PFNGLPROGRAMUNIFORM4UIPROC glad_glProgramUniform4ui;
+PFNGLPROGRAMUNIFORM4UIVPROC glad_glProgramUniform4uiv;
+PFNGLPROGRAMUNIFORMMATRIX2FVPROC glad_glProgramUniformMatrix2fv;
+PFNGLPROGRAMUNIFORMMATRIX3FVPROC glad_glProgramUniformMatrix3fv;
+PFNGLPROGRAMUNIFORMMATRIX4FVPROC glad_glProgramUniformMatrix4fv;
+PFNGLPROGRAMUNIFORMMATRIX2DVPROC glad_glProgramUniformMatrix2dv;
+PFNGLPROGRAMUNIFORMMATRIX3DVPROC glad_glProgramUniformMatrix3dv;
+PFNGLPROGRAMUNIFORMMATRIX4DVPROC glad_glProgramUniformMatrix4dv;
+PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC glad_glProgramUniformMatrix2x3fv;
+PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC glad_glProgramUniformMatrix3x2fv;
+PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC glad_glProgramUniformMatrix2x4fv;
+PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC glad_glProgramUniformMatrix4x2fv;
+PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC glad_glProgramUniformMatrix3x4fv;
+PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC glad_glProgramUniformMatrix4x3fv;
+PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC glad_glProgramUniformMatrix2x3dv;
+PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC glad_glProgramUniformMatrix3x2dv;
+PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC glad_glProgramUniformMatrix2x4dv;
+PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC glad_glProgramUniformMatrix4x2dv;
+PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC glad_glProgramUniformMatrix3x4dv;
+PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC glad_glProgramUniformMatrix4x3dv;
+PFNGLVALIDATEPROGRAMPIPELINEPROC glad_glValidateProgramPipeline;
+PFNGLGETPROGRAMPIPELINEINFOLOGPROC glad_glGetProgramPipelineInfoLog;
+PFNGLDEPTHBOUNDSEXTPROC glad_glDepthBoundsEXT;
+PFNGLBEGINVIDEOCAPTURENVPROC glad_glBeginVideoCaptureNV;
+PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC glad_glBindVideoCaptureStreamBufferNV;
+PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC glad_glBindVideoCaptureStreamTextureNV;
+PFNGLENDVIDEOCAPTURENVPROC glad_glEndVideoCaptureNV;
+PFNGLGETVIDEOCAPTUREIVNVPROC glad_glGetVideoCaptureivNV;
+PFNGLGETVIDEOCAPTURESTREAMIVNVPROC glad_glGetVideoCaptureStreamivNV;
+PFNGLGETVIDEOCAPTURESTREAMFVNVPROC glad_glGetVideoCaptureStreamfvNV;
+PFNGLGETVIDEOCAPTURESTREAMDVNVPROC glad_glGetVideoCaptureStreamdvNV;
+PFNGLVIDEOCAPTURENVPROC glad_glVideoCaptureNV;
+PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC glad_glVideoCaptureStreamParameterivNV;
+PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC glad_glVideoCaptureStreamParameterfvNV;
+PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC glad_glVideoCaptureStreamParameterdvNV;
+PFNGLCURRENTPALETTEMATRIXARBPROC glad_glCurrentPaletteMatrixARB;
+PFNGLMATRIXINDEXUBVARBPROC glad_glMatrixIndexubvARB;
+PFNGLMATRIXINDEXUSVARBPROC glad_glMatrixIndexusvARB;
+PFNGLMATRIXINDEXUIVARBPROC glad_glMatrixIndexuivARB;
+PFNGLMATRIXINDEXPOINTERARBPROC glad_glMatrixIndexPointerARB;
+PFNGLTEXTURECOLORMASKSGISPROC glad_glTextureColorMaskSGIS;
+PFNGLTANGENT3BEXTPROC glad_glTangent3bEXT;
+PFNGLTANGENT3BVEXTPROC glad_glTangent3bvEXT;
+PFNGLTANGENT3DEXTPROC glad_glTangent3dEXT;
+PFNGLTANGENT3DVEXTPROC glad_glTangent3dvEXT;
+PFNGLTANGENT3FEXTPROC glad_glTangent3fEXT;
+PFNGLTANGENT3FVEXTPROC glad_glTangent3fvEXT;
+PFNGLTANGENT3IEXTPROC glad_glTangent3iEXT;
+PFNGLTANGENT3IVEXTPROC glad_glTangent3ivEXT;
+PFNGLTANGENT3SEXTPROC glad_glTangent3sEXT;
+PFNGLTANGENT3SVEXTPROC glad_glTangent3svEXT;
+PFNGLBINORMAL3BEXTPROC glad_glBinormal3bEXT;
+PFNGLBINORMAL3BVEXTPROC glad_glBinormal3bvEXT;
+PFNGLBINORMAL3DEXTPROC glad_glBinormal3dEXT;
+PFNGLBINORMAL3DVEXTPROC glad_glBinormal3dvEXT;
+PFNGLBINORMAL3FEXTPROC glad_glBinormal3fEXT;
+PFNGLBINORMAL3FVEXTPROC glad_glBinormal3fvEXT;
+PFNGLBINORMAL3IEXTPROC glad_glBinormal3iEXT;
+PFNGLBINORMAL3IVEXTPROC glad_glBinormal3ivEXT;
+PFNGLBINORMAL3SEXTPROC glad_glBinormal3sEXT;
+PFNGLBINORMAL3SVEXTPROC glad_glBinormal3svEXT;
+PFNGLTANGENTPOINTEREXTPROC glad_glTangentPointerEXT;
+PFNGLBINORMALPOINTEREXTPROC glad_glBinormalPointerEXT;
+PFNGLCOMPRESSEDTEXIMAGE3DARBPROC glad_glCompressedTexImage3DARB;
+PFNGLCOMPRESSEDTEXIMAGE2DARBPROC glad_glCompressedTexImage2DARB;
+PFNGLCOMPRESSEDTEXIMAGE1DARBPROC glad_glCompressedTexImage1DARB;
+PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC glad_glCompressedTexSubImage3DARB;
+PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC glad_glCompressedTexSubImage2DARB;
+PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC glad_glCompressedTexSubImage1DARB;
+PFNGLGETCOMPRESSEDTEXIMAGEARBPROC glad_glGetCompressedTexImageARB;
+PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC glad_glGetSubroutineUniformLocation;
+PFNGLGETSUBROUTINEINDEXPROC glad_glGetSubroutineIndex;
+PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC glad_glGetActiveSubroutineUniformiv;
+PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC glad_glGetActiveSubroutineUniformName;
+PFNGLGETACTIVESUBROUTINENAMEPROC glad_glGetActiveSubroutineName;
+PFNGLUNIFORMSUBROUTINESUIVPROC glad_glUniformSubroutinesuiv;
+PFNGLGETUNIFORMSUBROUTINEUIVPROC glad_glGetUniformSubroutineuiv;
+PFNGLGETPROGRAMSTAGEIVPROC glad_glGetProgramStageiv;
+PFNGLTEXSTORAGE2DMULTISAMPLEPROC glad_glTexStorage2DMultisample;
+PFNGLTEXSTORAGE3DMULTISAMPLEPROC glad_glTexStorage3DMultisample;
+PFNGLVERTEXATTRIBL1DEXTPROC glad_glVertexAttribL1dEXT;
+PFNGLVERTEXATTRIBL2DEXTPROC glad_glVertexAttribL2dEXT;
+PFNGLVERTEXATTRIBL3DEXTPROC glad_glVertexAttribL3dEXT;
+PFNGLVERTEXATTRIBL4DEXTPROC glad_glVertexAttribL4dEXT;
+PFNGLVERTEXATTRIBL1DVEXTPROC glad_glVertexAttribL1dvEXT;
+PFNGLVERTEXATTRIBL2DVEXTPROC glad_glVertexAttribL2dvEXT;
+PFNGLVERTEXATTRIBL3DVEXTPROC glad_glVertexAttribL3dvEXT;
+PFNGLVERTEXATTRIBL4DVEXTPROC glad_glVertexAttribL4dvEXT;
+PFNGLVERTEXATTRIBLPOINTEREXTPROC glad_glVertexAttribLPointerEXT;
+PFNGLGETVERTEXATTRIBLDVEXTPROC glad_glGetVertexAttribLdvEXT;
+PFNGLQUERYMATRIXXOESPROC glad_glQueryMatrixxOES;
+PFNGLWINDOWPOS2DMESAPROC glad_glWindowPos2dMESA;
+PFNGLWINDOWPOS2DVMESAPROC glad_glWindowPos2dvMESA;
+PFNGLWINDOWPOS2FMESAPROC glad_glWindowPos2fMESA;
+PFNGLWINDOWPOS2FVMESAPROC glad_glWindowPos2fvMESA;
+PFNGLWINDOWPOS2IMESAPROC glad_glWindowPos2iMESA;
+PFNGLWINDOWPOS2IVMESAPROC glad_glWindowPos2ivMESA;
+PFNGLWINDOWPOS2SMESAPROC glad_glWindowPos2sMESA;
+PFNGLWINDOWPOS2SVMESAPROC glad_glWindowPos2svMESA;
+PFNGLWINDOWPOS3DMESAPROC glad_glWindowPos3dMESA;
+PFNGLWINDOWPOS3DVMESAPROC glad_glWindowPos3dvMESA;
+PFNGLWINDOWPOS3FMESAPROC glad_glWindowPos3fMESA;
+PFNGLWINDOWPOS3FVMESAPROC glad_glWindowPos3fvMESA;
+PFNGLWINDOWPOS3IMESAPROC glad_glWindowPos3iMESA;
+PFNGLWINDOWPOS3IVMESAPROC glad_glWindowPos3ivMESA;
+PFNGLWINDOWPOS3SMESAPROC glad_glWindowPos3sMESA;
+PFNGLWINDOWPOS3SVMESAPROC glad_glWindowPos3svMESA;
+PFNGLWINDOWPOS4DMESAPROC glad_glWindowPos4dMESA;
+PFNGLWINDOWPOS4DVMESAPROC glad_glWindowPos4dvMESA;
+PFNGLWINDOWPOS4FMESAPROC glad_glWindowPos4fMESA;
+PFNGLWINDOWPOS4FVMESAPROC glad_glWindowPos4fvMESA;
+PFNGLWINDOWPOS4IMESAPROC glad_glWindowPos4iMESA;
+PFNGLWINDOWPOS4IVMESAPROC glad_glWindowPos4ivMESA;
+PFNGLWINDOWPOS4SMESAPROC glad_glWindowPos4sMESA;
+PFNGLWINDOWPOS4SVMESAPROC glad_glWindowPos4svMESA;
+PFNGLOBJECTPURGEABLEAPPLEPROC glad_glObjectPurgeableAPPLE;
+PFNGLOBJECTUNPURGEABLEAPPLEPROC glad_glObjectUnpurgeableAPPLE;
+PFNGLGETOBJECTPARAMETERIVAPPLEPROC glad_glGetObjectParameterivAPPLE;
+PFNGLGENQUERIESARBPROC glad_glGenQueriesARB;
+PFNGLDELETEQUERIESARBPROC glad_glDeleteQueriesARB;
+PFNGLISQUERYARBPROC glad_glIsQueryARB;
+PFNGLBEGINQUERYARBPROC glad_glBeginQueryARB;
+PFNGLENDQUERYARBPROC glad_glEndQueryARB;
+PFNGLGETQUERYIVARBPROC glad_glGetQueryivARB;
+PFNGLGETQUERYOBJECTIVARBPROC glad_glGetQueryObjectivARB;
+PFNGLGETQUERYOBJECTUIVARBPROC glad_glGetQueryObjectuivARB;
+PFNGLCOLORTABLESGIPROC glad_glColorTableSGI;
+PFNGLCOLORTABLEPARAMETERFVSGIPROC glad_glColorTableParameterfvSGI;
+PFNGLCOLORTABLEPARAMETERIVSGIPROC glad_glColorTableParameterivSGI;
+PFNGLCOPYCOLORTABLESGIPROC glad_glCopyColorTableSGI;
+PFNGLGETCOLORTABLESGIPROC glad_glGetColorTableSGI;
+PFNGLGETCOLORTABLEPARAMETERFVSGIPROC glad_glGetColorTableParameterfvSGI;
+PFNGLGETCOLORTABLEPARAMETERIVSGIPROC glad_glGetColorTableParameterivSGI;
+PFNGLGETUNIFORMUIVEXTPROC glad_glGetUniformuivEXT;
+PFNGLBINDFRAGDATALOCATIONEXTPROC glad_glBindFragDataLocationEXT;
+PFNGLGETFRAGDATALOCATIONEXTPROC glad_glGetFragDataLocationEXT;
+PFNGLUNIFORM1UIEXTPROC glad_glUniform1uiEXT;
+PFNGLUNIFORM2UIEXTPROC glad_glUniform2uiEXT;
+PFNGLUNIFORM3UIEXTPROC glad_glUniform3uiEXT;
+PFNGLUNIFORM4UIEXTPROC glad_glUniform4uiEXT;
+PFNGLUNIFORM1UIVEXTPROC glad_glUniform1uivEXT;
+PFNGLUNIFORM2UIVEXTPROC glad_glUniform2uivEXT;
+PFNGLUNIFORM3UIVEXTPROC glad_glUniform3uivEXT;
+PFNGLUNIFORM4UIVEXTPROC glad_glUniform4uivEXT;
+PFNGLPROGRAMVERTEXLIMITNVPROC glad_glProgramVertexLimitNV;
+PFNGLFRAMEBUFFERTEXTUREEXTPROC glad_glFramebufferTextureEXT;
+PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC glad_glFramebufferTextureFaceEXT;
+PFNGLDEBUGMESSAGEENABLEAMDPROC glad_glDebugMessageEnableAMD;
+PFNGLDEBUGMESSAGEINSERTAMDPROC glad_glDebugMessageInsertAMD;
+PFNGLDEBUGMESSAGECALLBACKAMDPROC glad_glDebugMessageCallbackAMD;
+PFNGLGETDEBUGMESSAGELOGAMDPROC glad_glGetDebugMessageLogAMD;
+PFNGLACTIVETEXTUREARBPROC glad_glActiveTextureARB;
+PFNGLCLIENTACTIVETEXTUREARBPROC glad_glClientActiveTextureARB;
+PFNGLMULTITEXCOORD1DARBPROC glad_glMultiTexCoord1dARB;
+PFNGLMULTITEXCOORD1DVARBPROC glad_glMultiTexCoord1dvARB;
+PFNGLMULTITEXCOORD1FARBPROC glad_glMultiTexCoord1fARB;
+PFNGLMULTITEXCOORD1FVARBPROC glad_glMultiTexCoord1fvARB;
+PFNGLMULTITEXCOORD1IARBPROC glad_glMultiTexCoord1iARB;
+PFNGLMULTITEXCOORD1IVARBPROC glad_glMultiTexCoord1ivARB;
+PFNGLMULTITEXCOORD1SARBPROC glad_glMultiTexCoord1sARB;
+PFNGLMULTITEXCOORD1SVARBPROC glad_glMultiTexCoord1svARB;
+PFNGLMULTITEXCOORD2DARBPROC glad_glMultiTexCoord2dARB;
+PFNGLMULTITEXCOORD2DVARBPROC glad_glMultiTexCoord2dvARB;
+PFNGLMULTITEXCOORD2FARBPROC glad_glMultiTexCoord2fARB;
+PFNGLMULTITEXCOORD2FVARBPROC glad_glMultiTexCoord2fvARB;
+PFNGLMULTITEXCOORD2IARBPROC glad_glMultiTexCoord2iARB;
+PFNGLMULTITEXCOORD2IVARBPROC glad_glMultiTexCoord2ivARB;
+PFNGLMULTITEXCOORD2SARBPROC glad_glMultiTexCoord2sARB;
+PFNGLMULTITEXCOORD2SVARBPROC glad_glMultiTexCoord2svARB;
+PFNGLMULTITEXCOORD3DARBPROC glad_glMultiTexCoord3dARB;
+PFNGLMULTITEXCOORD3DVARBPROC glad_glMultiTexCoord3dvARB;
+PFNGLMULTITEXCOORD3FARBPROC glad_glMultiTexCoord3fARB;
+PFNGLMULTITEXCOORD3FVARBPROC glad_glMultiTexCoord3fvARB;
+PFNGLMULTITEXCOORD3IARBPROC glad_glMultiTexCoord3iARB;
+PFNGLMULTITEXCOORD3IVARBPROC glad_glMultiTexCoord3ivARB;
+PFNGLMULTITEXCOORD3SARBPROC glad_glMultiTexCoord3sARB;
+PFNGLMULTITEXCOORD3SVARBPROC glad_glMultiTexCoord3svARB;
+PFNGLMULTITEXCOORD4DARBPROC glad_glMultiTexCoord4dARB;
+PFNGLMULTITEXCOORD4DVARBPROC glad_glMultiTexCoord4dvARB;
+PFNGLMULTITEXCOORD4FARBPROC glad_glMultiTexCoord4fARB;
+PFNGLMULTITEXCOORD4FVARBPROC glad_glMultiTexCoord4fvARB;
+PFNGLMULTITEXCOORD4IARBPROC glad_glMultiTexCoord4iARB;
+PFNGLMULTITEXCOORD4IVARBPROC glad_glMultiTexCoord4ivARB;
+PFNGLMULTITEXCOORD4SARBPROC glad_glMultiTexCoord4sARB;
+PFNGLMULTITEXCOORD4SVARBPROC glad_glMultiTexCoord4svARB;
+PFNGLDEFORMATIONMAP3DSGIXPROC glad_glDeformationMap3dSGIX;
+PFNGLDEFORMATIONMAP3FSGIXPROC glad_glDeformationMap3fSGIX;
+PFNGLDEFORMSGIXPROC glad_glDeformSGIX;
+PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC glad_glLoadIdentityDeformationMapSGIX;
+PFNGLPROVOKINGVERTEXEXTPROC glad_glProvokingVertexEXT;
+PFNGLPOINTPARAMETERFARBPROC glad_glPointParameterfARB;
+PFNGLPOINTPARAMETERFVARBPROC glad_glPointParameterfvARB;
+PFNGLBINDIMAGETEXTUREPROC glad_glBindImageTexture;
+PFNGLMEMORYBARRIERPROC glad_glMemoryBarrier;
+PFNGLTEXTUREBARRIERPROC glad_glTextureBarrier;
+PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC glad_glMultiDrawArraysIndirectBindlessNV;
+PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC glad_glMultiDrawElementsIndirectBindlessNV;
+PFNGLBEGINTRANSFORMFEEDBACKEXTPROC glad_glBeginTransformFeedbackEXT;
+PFNGLENDTRANSFORMFEEDBACKEXTPROC glad_glEndTransformFeedbackEXT;
+PFNGLBINDBUFFERRANGEEXTPROC glad_glBindBufferRangeEXT;
+PFNGLBINDBUFFEROFFSETEXTPROC glad_glBindBufferOffsetEXT;
+PFNGLBINDBUFFERBASEEXTPROC glad_glBindBufferBaseEXT;
+PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC glad_glTransformFeedbackVaryingsEXT;
+PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC glad_glGetTransformFeedbackVaryingEXT;
+PFNGLPROGRAMLOCALPARAMETERI4INVPROC glad_glProgramLocalParameterI4iNV;
+PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC glad_glProgramLocalParameterI4ivNV;
+PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC glad_glProgramLocalParametersI4ivNV;
+PFNGLPROGRAMLOCALPARAMETERI4UINVPROC glad_glProgramLocalParameterI4uiNV;
+PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC glad_glProgramLocalParameterI4uivNV;
+PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC glad_glProgramLocalParametersI4uivNV;
+PFNGLPROGRAMENVPARAMETERI4INVPROC glad_glProgramEnvParameterI4iNV;
+PFNGLPROGRAMENVPARAMETERI4IVNVPROC glad_glProgramEnvParameterI4ivNV;
+PFNGLPROGRAMENVPARAMETERSI4IVNVPROC glad_glProgramEnvParametersI4ivNV;
+PFNGLPROGRAMENVPARAMETERI4UINVPROC glad_glProgramEnvParameterI4uiNV;
+PFNGLPROGRAMENVPARAMETERI4UIVNVPROC glad_glProgramEnvParameterI4uivNV;
+PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC glad_glProgramEnvParametersI4uivNV;
+PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC glad_glGetProgramLocalParameterIivNV;
+PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC glad_glGetProgramLocalParameterIuivNV;
+PFNGLGETPROGRAMENVPARAMETERIIVNVPROC glad_glGetProgramEnvParameterIivNV;
+PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC glad_glGetProgramEnvParameterIuivNV;
+PFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC glad_glProgramSubroutineParametersuivNV;
+PFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC glad_glGetProgramSubroutineParameteruivNV;
+PFNGLPROGRAMPARAMETERIARBPROC glad_glProgramParameteriARB;
+PFNGLFRAMEBUFFERTEXTUREARBPROC glad_glFramebufferTextureARB;
+PFNGLFRAMEBUFFERTEXTURELAYERARBPROC glad_glFramebufferTextureLayerARB;
+PFNGLFRAMEBUFFERTEXTUREFACEARBPROC glad_glFramebufferTextureFaceARB;
+PFNGLSUBPIXELPRECISIONBIASNVPROC glad_glSubpixelPrecisionBiasNV;
+PFNGLSPRITEPARAMETERFSGIXPROC glad_glSpriteParameterfSGIX;
+PFNGLSPRITEPARAMETERFVSGIXPROC glad_glSpriteParameterfvSGIX;
+PFNGLSPRITEPARAMETERISGIXPROC glad_glSpriteParameteriSGIX;
+PFNGLSPRITEPARAMETERIVSGIXPROC glad_glSpriteParameterivSGIX;
+PFNGLGETPROGRAMBINARYPROC glad_glGetProgramBinary;
+PFNGLPROGRAMBINARYPROC glad_glProgramBinary;
+PFNGLPROGRAMPARAMETERIPROC glad_glProgramParameteri;
+PFNGLQUERYOBJECTPARAMETERUIAMDPROC glad_glQueryObjectParameteruiAMD;
+PFNGLSAMPLEMASKSGISPROC glad_glSampleMaskSGIS;
+PFNGLSAMPLEPATTERNSGISPROC glad_glSamplePatternSGIS;
+PFNGLISRENDERBUFFEREXTPROC glad_glIsRenderbufferEXT;
+PFNGLBINDRENDERBUFFEREXTPROC glad_glBindRenderbufferEXT;
+PFNGLDELETERENDERBUFFERSEXTPROC glad_glDeleteRenderbuffersEXT;
+PFNGLGENRENDERBUFFERSEXTPROC glad_glGenRenderbuffersEXT;
+PFNGLRENDERBUFFERSTORAGEEXTPROC glad_glRenderbufferStorageEXT;
+PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC glad_glGetRenderbufferParameterivEXT;
+PFNGLISFRAMEBUFFEREXTPROC glad_glIsFramebufferEXT;
+PFNGLBINDFRAMEBUFFEREXTPROC glad_glBindFramebufferEXT;
+PFNGLDELETEFRAMEBUFFERSEXTPROC glad_glDeleteFramebuffersEXT;
+PFNGLGENFRAMEBUFFERSEXTPROC glad_glGenFramebuffersEXT;
+PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glad_glCheckFramebufferStatusEXT;
+PFNGLFRAMEBUFFERTEXTURE1DEXTPROC glad_glFramebufferTexture1DEXT;
+PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glad_glFramebufferTexture2DEXT;
+PFNGLFRAMEBUFFERTEXTURE3DEXTPROC glad_glFramebufferTexture3DEXT;
+PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC glad_glFramebufferRenderbufferEXT;
+PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC glad_glGetFramebufferAttachmentParameterivEXT;
+PFNGLGENERATEMIPMAPEXTPROC glad_glGenerateMipmapEXT;
+PFNGLVERTEXARRAYRANGEAPPLEPROC glad_glVertexArrayRangeAPPLE;
+PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC glad_glFlushVertexArrayRangeAPPLE;
+PFNGLVERTEXARRAYPARAMETERIAPPLEPROC glad_glVertexArrayParameteriAPPLE;
+PFNGLCOMBINERPARAMETERFVNVPROC glad_glCombinerParameterfvNV;
+PFNGLCOMBINERPARAMETERFNVPROC glad_glCombinerParameterfNV;
+PFNGLCOMBINERPARAMETERIVNVPROC glad_glCombinerParameterivNV;
+PFNGLCOMBINERPARAMETERINVPROC glad_glCombinerParameteriNV;
+PFNGLCOMBINERINPUTNVPROC glad_glCombinerInputNV;
+PFNGLCOMBINEROUTPUTNVPROC glad_glCombinerOutputNV;
+PFNGLFINALCOMBINERINPUTNVPROC glad_glFinalCombinerInputNV;
+PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC glad_glGetCombinerInputParameterfvNV;
+PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC glad_glGetCombinerInputParameterivNV;
+PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC glad_glGetCombinerOutputParameterfvNV;
+PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC glad_glGetCombinerOutputParameterivNV;
+PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC glad_glGetFinalCombinerInputParameterfvNV;
+PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC glad_glGetFinalCombinerInputParameterivNV;
+PFNGLDRAWBUFFERSARBPROC glad_glDrawBuffersARB;
+PFNGLCLEARTEXIMAGEPROC glad_glClearTexImage;
+PFNGLCLEARTEXSUBIMAGEPROC glad_glClearTexSubImage;
+PFNGLDEBUGMESSAGECONTROLARBPROC glad_glDebugMessageControlARB;
+PFNGLDEBUGMESSAGEINSERTARBPROC glad_glDebugMessageInsertARB;
+PFNGLDEBUGMESSAGECALLBACKARBPROC glad_glDebugMessageCallbackARB;
+PFNGLGETDEBUGMESSAGELOGARBPROC glad_glGetDebugMessageLogARB;
+PFNGLCULLPARAMETERDVEXTPROC glad_glCullParameterdvEXT;
+PFNGLCULLPARAMETERFVEXTPROC glad_glCullParameterfvEXT;
+PFNGLMULTIMODEDRAWARRAYSIBMPROC glad_glMultiModeDrawArraysIBM;
+PFNGLMULTIMODEDRAWELEMENTSIBMPROC glad_glMultiModeDrawElementsIBM;
+PFNGLBINDVERTEXARRAYAPPLEPROC glad_glBindVertexArrayAPPLE;
+PFNGLDELETEVERTEXARRAYSAPPLEPROC glad_glDeleteVertexArraysAPPLE;
+PFNGLGENVERTEXARRAYSAPPLEPROC glad_glGenVertexArraysAPPLE;
+PFNGLISVERTEXARRAYAPPLEPROC glad_glIsVertexArrayAPPLE;
+PFNGLDETAILTEXFUNCSGISPROC glad_glDetailTexFuncSGIS;
+PFNGLGETDETAILTEXFUNCSGISPROC glad_glGetDetailTexFuncSGIS;
+PFNGLDRAWARRAYSINSTANCEDARBPROC glad_glDrawArraysInstancedARB;
+PFNGLDRAWELEMENTSINSTANCEDARBPROC glad_glDrawElementsInstancedARB;
+PFNGLNAMEDSTRINGARBPROC glad_glNamedStringARB;
+PFNGLDELETENAMEDSTRINGARBPROC glad_glDeleteNamedStringARB;
+PFNGLCOMPILESHADERINCLUDEARBPROC glad_glCompileShaderIncludeARB;
+PFNGLISNAMEDSTRINGARBPROC glad_glIsNamedStringARB;
+PFNGLGETNAMEDSTRINGARBPROC glad_glGetNamedStringARB;
+PFNGLGETNAMEDSTRINGIVARBPROC glad_glGetNamedStringivARB;
+PFNGLBLENDFUNCSEPARATEINGRPROC glad_glBlendFuncSeparateINGR;
+PFNGLGENPATHSNVPROC glad_glGenPathsNV;
+PFNGLDELETEPATHSNVPROC glad_glDeletePathsNV;
+PFNGLISPATHNVPROC glad_glIsPathNV;
+PFNGLPATHCOMMANDSNVPROC glad_glPathCommandsNV;
+PFNGLPATHCOORDSNVPROC glad_glPathCoordsNV;
+PFNGLPATHSUBCOMMANDSNVPROC glad_glPathSubCommandsNV;
+PFNGLPATHSUBCOORDSNVPROC glad_glPathSubCoordsNV;
+PFNGLPATHSTRINGNVPROC glad_glPathStringNV;
+PFNGLPATHGLYPHSNVPROC glad_glPathGlyphsNV;
+PFNGLPATHGLYPHRANGENVPROC glad_glPathGlyphRangeNV;
+PFNGLWEIGHTPATHSNVPROC glad_glWeightPathsNV;
+PFNGLCOPYPATHNVPROC glad_glCopyPathNV;
+PFNGLINTERPOLATEPATHSNVPROC glad_glInterpolatePathsNV;
+PFNGLTRANSFORMPATHNVPROC glad_glTransformPathNV;
+PFNGLPATHPARAMETERIVNVPROC glad_glPathParameterivNV;
+PFNGLPATHPARAMETERINVPROC glad_glPathParameteriNV;
+PFNGLPATHPARAMETERFVNVPROC glad_glPathParameterfvNV;
+PFNGLPATHPARAMETERFNVPROC glad_glPathParameterfNV;
+PFNGLPATHDASHARRAYNVPROC glad_glPathDashArrayNV;
+PFNGLPATHSTENCILFUNCNVPROC glad_glPathStencilFuncNV;
+PFNGLPATHSTENCILDEPTHOFFSETNVPROC glad_glPathStencilDepthOffsetNV;
+PFNGLSTENCILFILLPATHNVPROC glad_glStencilFillPathNV;
+PFNGLSTENCILSTROKEPATHNVPROC glad_glStencilStrokePathNV;
+PFNGLSTENCILFILLPATHINSTANCEDNVPROC glad_glStencilFillPathInstancedNV;
+PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC glad_glStencilStrokePathInstancedNV;
+PFNGLPATHCOVERDEPTHFUNCNVPROC glad_glPathCoverDepthFuncNV;
+PFNGLCOVERFILLPATHNVPROC glad_glCoverFillPathNV;
+PFNGLCOVERSTROKEPATHNVPROC glad_glCoverStrokePathNV;
+PFNGLCOVERFILLPATHINSTANCEDNVPROC glad_glCoverFillPathInstancedNV;
+PFNGLCOVERSTROKEPATHINSTANCEDNVPROC glad_glCoverStrokePathInstancedNV;
+PFNGLGETPATHPARAMETERIVNVPROC glad_glGetPathParameterivNV;
+PFNGLGETPATHPARAMETERFVNVPROC glad_glGetPathParameterfvNV;
+PFNGLGETPATHCOMMANDSNVPROC glad_glGetPathCommandsNV;
+PFNGLGETPATHCOORDSNVPROC glad_glGetPathCoordsNV;
+PFNGLGETPATHDASHARRAYNVPROC glad_glGetPathDashArrayNV;
+PFNGLGETPATHMETRICSNVPROC glad_glGetPathMetricsNV;
+PFNGLGETPATHMETRICRANGENVPROC glad_glGetPathMetricRangeNV;
+PFNGLGETPATHSPACINGNVPROC glad_glGetPathSpacingNV;
+PFNGLISPOINTINFILLPATHNVPROC glad_glIsPointInFillPathNV;
+PFNGLISPOINTINSTROKEPATHNVPROC glad_glIsPointInStrokePathNV;
+PFNGLGETPATHLENGTHNVPROC glad_glGetPathLengthNV;
+PFNGLPOINTALONGPATHNVPROC glad_glPointAlongPathNV;
+PFNGLMATRIXLOAD3X2FNVPROC glad_glMatrixLoad3x2fNV;
+PFNGLMATRIXLOAD3X3FNVPROC glad_glMatrixLoad3x3fNV;
+PFNGLMATRIXLOADTRANSPOSE3X3FNVPROC glad_glMatrixLoadTranspose3x3fNV;
+PFNGLMATRIXMULT3X2FNVPROC glad_glMatrixMult3x2fNV;
+PFNGLMATRIXMULT3X3FNVPROC glad_glMatrixMult3x3fNV;
+PFNGLMATRIXMULTTRANSPOSE3X3FNVPROC glad_glMatrixMultTranspose3x3fNV;
+PFNGLSTENCILTHENCOVERFILLPATHNVPROC glad_glStencilThenCoverFillPathNV;
+PFNGLSTENCILTHENCOVERSTROKEPATHNVPROC glad_glStencilThenCoverStrokePathNV;
+PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDNVPROC glad_glStencilThenCoverFillPathInstancedNV;
+PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDNVPROC glad_glStencilThenCoverStrokePathInstancedNV;
+PFNGLPATHGLYPHINDEXRANGENVPROC glad_glPathGlyphIndexRangeNV;
+PFNGLPATHGLYPHINDEXARRAYNVPROC glad_glPathGlyphIndexArrayNV;
+PFNGLPATHMEMORYGLYPHINDEXARRAYNVPROC glad_glPathMemoryGlyphIndexArrayNV;
+PFNGLPROGRAMPATHFRAGMENTINPUTGENNVPROC glad_glProgramPathFragmentInputGenNV;
+PFNGLGETPROGRAMRESOURCEFVNVPROC glad_glGetProgramResourcefvNV;
+PFNGLPATHCOLORGENNVPROC glad_glPathColorGenNV;
+PFNGLPATHTEXGENNVPROC glad_glPathTexGenNV;
+PFNGLPATHFOGGENNVPROC glad_glPathFogGenNV;
+PFNGLGETPATHCOLORGENIVNVPROC glad_glGetPathColorGenivNV;
+PFNGLGETPATHCOLORGENFVNVPROC glad_glGetPathColorGenfvNV;
+PFNGLGETPATHTEXGENIVNVPROC glad_glGetPathTexGenivNV;
+PFNGLGETPATHTEXGENFVNVPROC glad_glGetPathTexGenfvNV;
+PFNGLCONSERVATIVERASTERPARAMETERFNVPROC glad_glConservativeRasterParameterfNV;
+PFNGLVERTEXSTREAM1SATIPROC glad_glVertexStream1sATI;
+PFNGLVERTEXSTREAM1SVATIPROC glad_glVertexStream1svATI;
+PFNGLVERTEXSTREAM1IATIPROC glad_glVertexStream1iATI;
+PFNGLVERTEXSTREAM1IVATIPROC glad_glVertexStream1ivATI;
+PFNGLVERTEXSTREAM1FATIPROC glad_glVertexStream1fATI;
+PFNGLVERTEXSTREAM1FVATIPROC glad_glVertexStream1fvATI;
+PFNGLVERTEXSTREAM1DATIPROC glad_glVertexStream1dATI;
+PFNGLVERTEXSTREAM1DVATIPROC glad_glVertexStream1dvATI;
+PFNGLVERTEXSTREAM2SATIPROC glad_glVertexStream2sATI;
+PFNGLVERTEXSTREAM2SVATIPROC glad_glVertexStream2svATI;
+PFNGLVERTEXSTREAM2IATIPROC glad_glVertexStream2iATI;
+PFNGLVERTEXSTREAM2IVATIPROC glad_glVertexStream2ivATI;
+PFNGLVERTEXSTREAM2FATIPROC glad_glVertexStream2fATI;
+PFNGLVERTEXSTREAM2FVATIPROC glad_glVertexStream2fvATI;
+PFNGLVERTEXSTREAM2DATIPROC glad_glVertexStream2dATI;
+PFNGLVERTEXSTREAM2DVATIPROC glad_glVertexStream2dvATI;
+PFNGLVERTEXSTREAM3SATIPROC glad_glVertexStream3sATI;
+PFNGLVERTEXSTREAM3SVATIPROC glad_glVertexStream3svATI;
+PFNGLVERTEXSTREAM3IATIPROC glad_glVertexStream3iATI;
+PFNGLVERTEXSTREAM3IVATIPROC glad_glVertexStream3ivATI;
+PFNGLVERTEXSTREAM3FATIPROC glad_glVertexStream3fATI;
+PFNGLVERTEXSTREAM3FVATIPROC glad_glVertexStream3fvATI;
+PFNGLVERTEXSTREAM3DATIPROC glad_glVertexStream3dATI;
+PFNGLVERTEXSTREAM3DVATIPROC glad_glVertexStream3dvATI;
+PFNGLVERTEXSTREAM4SATIPROC glad_glVertexStream4sATI;
+PFNGLVERTEXSTREAM4SVATIPROC glad_glVertexStream4svATI;
+PFNGLVERTEXSTREAM4IATIPROC glad_glVertexStream4iATI;
+PFNGLVERTEXSTREAM4IVATIPROC glad_glVertexStream4ivATI;
+PFNGLVERTEXSTREAM4FATIPROC glad_glVertexStream4fATI;
+PFNGLVERTEXSTREAM4FVATIPROC glad_glVertexStream4fvATI;
+PFNGLVERTEXSTREAM4DATIPROC glad_glVertexStream4dATI;
+PFNGLVERTEXSTREAM4DVATIPROC glad_glVertexStream4dvATI;
+PFNGLNORMALSTREAM3BATIPROC glad_glNormalStream3bATI;
+PFNGLNORMALSTREAM3BVATIPROC glad_glNormalStream3bvATI;
+PFNGLNORMALSTREAM3SATIPROC glad_glNormalStream3sATI;
+PFNGLNORMALSTREAM3SVATIPROC glad_glNormalStream3svATI;
+PFNGLNORMALSTREAM3IATIPROC glad_glNormalStream3iATI;
+PFNGLNORMALSTREAM3IVATIPROC glad_glNormalStream3ivATI;
+PFNGLNORMALSTREAM3FATIPROC glad_glNormalStream3fATI;
+PFNGLNORMALSTREAM3FVATIPROC glad_glNormalStream3fvATI;
+PFNGLNORMALSTREAM3DATIPROC glad_glNormalStream3dATI;
+PFNGLNORMALSTREAM3DVATIPROC glad_glNormalStream3dvATI;
+PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC glad_glClientActiveVertexStreamATI;
+PFNGLVERTEXBLENDENVIATIPROC glad_glVertexBlendEnviATI;
+PFNGLVERTEXBLENDENVFATIPROC glad_glVertexBlendEnvfATI;
+PFNGLUNIFORM1I64ARBPROC glad_glUniform1i64ARB;
+PFNGLUNIFORM2I64ARBPROC glad_glUniform2i64ARB;
+PFNGLUNIFORM3I64ARBPROC glad_glUniform3i64ARB;
+PFNGLUNIFORM4I64ARBPROC glad_glUniform4i64ARB;
+PFNGLUNIFORM1I64VARBPROC glad_glUniform1i64vARB;
+PFNGLUNIFORM2I64VARBPROC glad_glUniform2i64vARB;
+PFNGLUNIFORM3I64VARBPROC glad_glUniform3i64vARB;
+PFNGLUNIFORM4I64VARBPROC glad_glUniform4i64vARB;
+PFNGLUNIFORM1UI64ARBPROC glad_glUniform1ui64ARB;
+PFNGLUNIFORM2UI64ARBPROC glad_glUniform2ui64ARB;
+PFNGLUNIFORM3UI64ARBPROC glad_glUniform3ui64ARB;
+PFNGLUNIFORM4UI64ARBPROC glad_glUniform4ui64ARB;
+PFNGLUNIFORM1UI64VARBPROC glad_glUniform1ui64vARB;
+PFNGLUNIFORM2UI64VARBPROC glad_glUniform2ui64vARB;
+PFNGLUNIFORM3UI64VARBPROC glad_glUniform3ui64vARB;
+PFNGLUNIFORM4UI64VARBPROC glad_glUniform4ui64vARB;
+PFNGLGETUNIFORMI64VARBPROC glad_glGetUniformi64vARB;
+PFNGLGETUNIFORMUI64VARBPROC glad_glGetUniformui64vARB;
+PFNGLGETNUNIFORMI64VARBPROC glad_glGetnUniformi64vARB;
+PFNGLGETNUNIFORMUI64VARBPROC glad_glGetnUniformui64vARB;
+PFNGLPROGRAMUNIFORM1I64ARBPROC glad_glProgramUniform1i64ARB;
+PFNGLPROGRAMUNIFORM2I64ARBPROC glad_glProgramUniform2i64ARB;
+PFNGLPROGRAMUNIFORM3I64ARBPROC glad_glProgramUniform3i64ARB;
+PFNGLPROGRAMUNIFORM4I64ARBPROC glad_glProgramUniform4i64ARB;
+PFNGLPROGRAMUNIFORM1I64VARBPROC glad_glProgramUniform1i64vARB;
+PFNGLPROGRAMUNIFORM2I64VARBPROC glad_glProgramUniform2i64vARB;
+PFNGLPROGRAMUNIFORM3I64VARBPROC glad_glProgramUniform3i64vARB;
+PFNGLPROGRAMUNIFORM4I64VARBPROC glad_glProgramUniform4i64vARB;
+PFNGLPROGRAMUNIFORM1UI64ARBPROC glad_glProgramUniform1ui64ARB;
+PFNGLPROGRAMUNIFORM2UI64ARBPROC glad_glProgramUniform2ui64ARB;
+PFNGLPROGRAMUNIFORM3UI64ARBPROC glad_glProgramUniform3ui64ARB;
+PFNGLPROGRAMUNIFORM4UI64ARBPROC glad_glProgramUniform4ui64ARB;
+PFNGLPROGRAMUNIFORM1UI64VARBPROC glad_glProgramUniform1ui64vARB;
+PFNGLPROGRAMUNIFORM2UI64VARBPROC glad_glProgramUniform2ui64vARB;
+PFNGLPROGRAMUNIFORM3UI64VARBPROC glad_glProgramUniform3ui64vARB;
+PFNGLPROGRAMUNIFORM4UI64VARBPROC glad_glProgramUniform4ui64vARB;
+PFNGLVDPAUINITNVPROC glad_glVDPAUInitNV;
+PFNGLVDPAUFININVPROC glad_glVDPAUFiniNV;
+PFNGLVDPAUREGISTERVIDEOSURFACENVPROC glad_glVDPAURegisterVideoSurfaceNV;
+PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC glad_glVDPAURegisterOutputSurfaceNV;
+PFNGLVDPAUISSURFACENVPROC glad_glVDPAUIsSurfaceNV;
+PFNGLVDPAUUNREGISTERSURFACENVPROC glad_glVDPAUUnregisterSurfaceNV;
+PFNGLVDPAUGETSURFACEIVNVPROC glad_glVDPAUGetSurfaceivNV;
+PFNGLVDPAUSURFACEACCESSNVPROC glad_glVDPAUSurfaceAccessNV;
+PFNGLVDPAUMAPSURFACESNVPROC glad_glVDPAUMapSurfacesNV;
+PFNGLVDPAUUNMAPSURFACESNVPROC glad_glVDPAUUnmapSurfacesNV;
+PFNGLGETINTERNALFORMATI64VPROC glad_glGetInternalformati64v;
+PFNGLCOLOR4UBVERTEX2FSUNPROC glad_glColor4ubVertex2fSUN;
+PFNGLCOLOR4UBVERTEX2FVSUNPROC glad_glColor4ubVertex2fvSUN;
+PFNGLCOLOR4UBVERTEX3FSUNPROC glad_glColor4ubVertex3fSUN;
+PFNGLCOLOR4UBVERTEX3FVSUNPROC glad_glColor4ubVertex3fvSUN;
+PFNGLCOLOR3FVERTEX3FSUNPROC glad_glColor3fVertex3fSUN;
+PFNGLCOLOR3FVERTEX3FVSUNPROC glad_glColor3fVertex3fvSUN;
+PFNGLNORMAL3FVERTEX3FSUNPROC glad_glNormal3fVertex3fSUN;
+PFNGLNORMAL3FVERTEX3FVSUNPROC glad_glNormal3fVertex3fvSUN;
+PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC glad_glColor4fNormal3fVertex3fSUN;
+PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC glad_glColor4fNormal3fVertex3fvSUN;
+PFNGLTEXCOORD2FVERTEX3FSUNPROC glad_glTexCoord2fVertex3fSUN;
+PFNGLTEXCOORD2FVERTEX3FVSUNPROC glad_glTexCoord2fVertex3fvSUN;
+PFNGLTEXCOORD4FVERTEX4FSUNPROC glad_glTexCoord4fVertex4fSUN;
+PFNGLTEXCOORD4FVERTEX4FVSUNPROC glad_glTexCoord4fVertex4fvSUN;
+PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC glad_glTexCoord2fColor4ubVertex3fSUN;
+PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC glad_glTexCoord2fColor4ubVertex3fvSUN;
+PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC glad_glTexCoord2fColor3fVertex3fSUN;
+PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC glad_glTexCoord2fColor3fVertex3fvSUN;
+PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC glad_glTexCoord2fNormal3fVertex3fSUN;
+PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC glad_glTexCoord2fNormal3fVertex3fvSUN;
+PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC glad_glTexCoord2fColor4fNormal3fVertex3fSUN;
+PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC glad_glTexCoord2fColor4fNormal3fVertex3fvSUN;
+PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC glad_glTexCoord4fColor4fNormal3fVertex4fSUN;
+PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC glad_glTexCoord4fColor4fNormal3fVertex4fvSUN;
+PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC glad_glReplacementCodeuiVertex3fSUN;
+PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC glad_glReplacementCodeuiVertex3fvSUN;
+PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC glad_glReplacementCodeuiColor4ubVertex3fSUN;
+PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC glad_glReplacementCodeuiColor4ubVertex3fvSUN;
+PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC glad_glReplacementCodeuiColor3fVertex3fSUN;
+PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC glad_glReplacementCodeuiColor3fVertex3fvSUN;
+PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC glad_glReplacementCodeuiNormal3fVertex3fSUN;
+PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC glad_glReplacementCodeuiNormal3fVertex3fvSUN;
+PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC glad_glReplacementCodeuiColor4fNormal3fVertex3fSUN;
+PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC glad_glReplacementCodeuiColor4fNormal3fVertex3fvSUN;
+PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC glad_glReplacementCodeuiTexCoord2fVertex3fSUN;
+PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC glad_glReplacementCodeuiTexCoord2fVertex3fvSUN;
+PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC glad_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN;
+PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC glad_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN;
+PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC glad_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN;
+PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC glad_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN;
+PFNGLIGLOOINTERFACESGIXPROC glad_glIglooInterfaceSGIX;
+PFNGLDRAWARRAYSINDIRECTPROC glad_glDrawArraysIndirect;
+PFNGLDRAWELEMENTSINDIRECTPROC glad_glDrawElementsIndirect;
+PFNGLVERTEXATTRIBI1IEXTPROC glad_glVertexAttribI1iEXT;
+PFNGLVERTEXATTRIBI2IEXTPROC glad_glVertexAttribI2iEXT;
+PFNGLVERTEXATTRIBI3IEXTPROC glad_glVertexAttribI3iEXT;
+PFNGLVERTEXATTRIBI4IEXTPROC glad_glVertexAttribI4iEXT;
+PFNGLVERTEXATTRIBI1UIEXTPROC glad_glVertexAttribI1uiEXT;
+PFNGLVERTEXATTRIBI2UIEXTPROC glad_glVertexAttribI2uiEXT;
+PFNGLVERTEXATTRIBI3UIEXTPROC glad_glVertexAttribI3uiEXT;
+PFNGLVERTEXATTRIBI4UIEXTPROC glad_glVertexAttribI4uiEXT;
+PFNGLVERTEXATTRIBI1IVEXTPROC glad_glVertexAttribI1ivEXT;
+PFNGLVERTEXATTRIBI2IVEXTPROC glad_glVertexAttribI2ivEXT;
+PFNGLVERTEXATTRIBI3IVEXTPROC glad_glVertexAttribI3ivEXT;
+PFNGLVERTEXATTRIBI4IVEXTPROC glad_glVertexAttribI4ivEXT;
+PFNGLVERTEXATTRIBI1UIVEXTPROC glad_glVertexAttribI1uivEXT;
+PFNGLVERTEXATTRIBI2UIVEXTPROC glad_glVertexAttribI2uivEXT;
+PFNGLVERTEXATTRIBI3UIVEXTPROC glad_glVertexAttribI3uivEXT;
+PFNGLVERTEXATTRIBI4UIVEXTPROC glad_glVertexAttribI4uivEXT;
+PFNGLVERTEXATTRIBI4BVEXTPROC glad_glVertexAttribI4bvEXT;
+PFNGLVERTEXATTRIBI4SVEXTPROC glad_glVertexAttribI4svEXT;
+PFNGLVERTEXATTRIBI4UBVEXTPROC glad_glVertexAttribI4ubvEXT;
+PFNGLVERTEXATTRIBI4USVEXTPROC glad_glVertexAttribI4usvEXT;
+PFNGLVERTEXATTRIBIPOINTEREXTPROC glad_glVertexAttribIPointerEXT;
+PFNGLGETVERTEXATTRIBIIVEXTPROC glad_glGetVertexAttribIivEXT;
+PFNGLGETVERTEXATTRIBIUIVEXTPROC glad_glGetVertexAttribIuivEXT;
+PFNGLFOGFUNCSGISPROC glad_glFogFuncSGIS;
+PFNGLGETFOGFUNCSGISPROC glad_glGetFogFuncSGIS;
+PFNGLIMPORTSYNCEXTPROC glad_glImportSyncEXT;
+PFNGLFRAMEBUFFERSAMPLELOCATIONSFVNVPROC glad_glFramebufferSampleLocationsfvNV;
+PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVNVPROC glad_glNamedFramebufferSampleLocationsfvNV;
+PFNGLRESOLVEDEPTHVALUESNVPROC glad_glResolveDepthValuesNV;
+PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC glad_glDispatchComputeGroupSizeARB;
+PFNGLALPHAFUNCXOESPROC glad_glAlphaFuncxOES;
+PFNGLCLEARCOLORXOESPROC glad_glClearColorxOES;
+PFNGLCLEARDEPTHXOESPROC glad_glClearDepthxOES;
+PFNGLCLIPPLANEXOESPROC glad_glClipPlanexOES;
+PFNGLCOLOR4XOESPROC glad_glColor4xOES;
+PFNGLDEPTHRANGEXOESPROC glad_glDepthRangexOES;
+PFNGLFOGXOESPROC glad_glFogxOES;
+PFNGLFOGXVOESPROC glad_glFogxvOES;
+PFNGLFRUSTUMXOESPROC glad_glFrustumxOES;
+PFNGLGETCLIPPLANEXOESPROC glad_glGetClipPlanexOES;
+PFNGLGETFIXEDVOESPROC glad_glGetFixedvOES;
+PFNGLGETTEXENVXVOESPROC glad_glGetTexEnvxvOES;
+PFNGLGETTEXPARAMETERXVOESPROC glad_glGetTexParameterxvOES;
+PFNGLLIGHTMODELXOESPROC glad_glLightModelxOES;
+PFNGLLIGHTMODELXVOESPROC glad_glLightModelxvOES;
+PFNGLLIGHTXOESPROC glad_glLightxOES;
+PFNGLLIGHTXVOESPROC glad_glLightxvOES;
+PFNGLLINEWIDTHXOESPROC glad_glLineWidthxOES;
+PFNGLLOADMATRIXXOESPROC glad_glLoadMatrixxOES;
+PFNGLMATERIALXOESPROC glad_glMaterialxOES;
+PFNGLMATERIALXVOESPROC glad_glMaterialxvOES;
+PFNGLMULTMATRIXXOESPROC glad_glMultMatrixxOES;
+PFNGLMULTITEXCOORD4XOESPROC glad_glMultiTexCoord4xOES;
+PFNGLNORMAL3XOESPROC glad_glNormal3xOES;
+PFNGLORTHOXOESPROC glad_glOrthoxOES;
+PFNGLPOINTPARAMETERXVOESPROC glad_glPointParameterxvOES;
+PFNGLPOINTSIZEXOESPROC glad_glPointSizexOES;
+PFNGLPOLYGONOFFSETXOESPROC glad_glPolygonOffsetxOES;
+PFNGLROTATEXOESPROC glad_glRotatexOES;
+PFNGLSCALEXOESPROC glad_glScalexOES;
+PFNGLTEXENVXOESPROC glad_glTexEnvxOES;
+PFNGLTEXENVXVOESPROC glad_glTexEnvxvOES;
+PFNGLTEXPARAMETERXOESPROC glad_glTexParameterxOES;
+PFNGLTEXPARAMETERXVOESPROC glad_glTexParameterxvOES;
+PFNGLTRANSLATEXOESPROC glad_glTranslatexOES;
+PFNGLGETLIGHTXVOESPROC glad_glGetLightxvOES;
+PFNGLGETMATERIALXVOESPROC glad_glGetMaterialxvOES;
+PFNGLPOINTPARAMETERXOESPROC glad_glPointParameterxOES;
+PFNGLSAMPLECOVERAGEXOESPROC glad_glSampleCoveragexOES;
+PFNGLACCUMXOESPROC glad_glAccumxOES;
+PFNGLBITMAPXOESPROC glad_glBitmapxOES;
+PFNGLBLENDCOLORXOESPROC glad_glBlendColorxOES;
+PFNGLCLEARACCUMXOESPROC glad_glClearAccumxOES;
+PFNGLCOLOR3XOESPROC glad_glColor3xOES;
+PFNGLCOLOR3XVOESPROC glad_glColor3xvOES;
+PFNGLCOLOR4XVOESPROC glad_glColor4xvOES;
+PFNGLCONVOLUTIONPARAMETERXOESPROC glad_glConvolutionParameterxOES;
+PFNGLCONVOLUTIONPARAMETERXVOESPROC glad_glConvolutionParameterxvOES;
+PFNGLEVALCOORD1XOESPROC glad_glEvalCoord1xOES;
+PFNGLEVALCOORD1XVOESPROC glad_glEvalCoord1xvOES;
+PFNGLEVALCOORD2XOESPROC glad_glEvalCoord2xOES;
+PFNGLEVALCOORD2XVOESPROC glad_glEvalCoord2xvOES;
+PFNGLFEEDBACKBUFFERXOESPROC glad_glFeedbackBufferxOES;
+PFNGLGETCONVOLUTIONPARAMETERXVOESPROC glad_glGetConvolutionParameterxvOES;
+PFNGLGETHISTOGRAMPARAMETERXVOESPROC glad_glGetHistogramParameterxvOES;
+PFNGLGETLIGHTXOESPROC glad_glGetLightxOES;
+PFNGLGETMAPXVOESPROC glad_glGetMapxvOES;
+PFNGLGETMATERIALXOESPROC glad_glGetMaterialxOES;
+PFNGLGETPIXELMAPXVPROC glad_glGetPixelMapxv;
+PFNGLGETTEXGENXVOESPROC glad_glGetTexGenxvOES;
+PFNGLGETTEXLEVELPARAMETERXVOESPROC glad_glGetTexLevelParameterxvOES;
+PFNGLINDEXXOESPROC glad_glIndexxOES;
+PFNGLINDEXXVOESPROC glad_glIndexxvOES;
+PFNGLLOADTRANSPOSEMATRIXXOESPROC glad_glLoadTransposeMatrixxOES;
+PFNGLMAP1XOESPROC glad_glMap1xOES;
+PFNGLMAP2XOESPROC glad_glMap2xOES;
+PFNGLMAPGRID1XOESPROC glad_glMapGrid1xOES;
+PFNGLMAPGRID2XOESPROC glad_glMapGrid2xOES;
+PFNGLMULTTRANSPOSEMATRIXXOESPROC glad_glMultTransposeMatrixxOES;
+PFNGLMULTITEXCOORD1XOESPROC glad_glMultiTexCoord1xOES;
+PFNGLMULTITEXCOORD1XVOESPROC glad_glMultiTexCoord1xvOES;
+PFNGLMULTITEXCOORD2XOESPROC glad_glMultiTexCoord2xOES;
+PFNGLMULTITEXCOORD2XVOESPROC glad_glMultiTexCoord2xvOES;
+PFNGLMULTITEXCOORD3XOESPROC glad_glMultiTexCoord3xOES;
+PFNGLMULTITEXCOORD3XVOESPROC glad_glMultiTexCoord3xvOES;
+PFNGLMULTITEXCOORD4XVOESPROC glad_glMultiTexCoord4xvOES;
+PFNGLNORMAL3XVOESPROC glad_glNormal3xvOES;
+PFNGLPASSTHROUGHXOESPROC glad_glPassThroughxOES;
+PFNGLPIXELMAPXPROC glad_glPixelMapx;
+PFNGLPIXELSTOREXPROC glad_glPixelStorex;
+PFNGLPIXELTRANSFERXOESPROC glad_glPixelTransferxOES;
+PFNGLPIXELZOOMXOESPROC glad_glPixelZoomxOES;
+PFNGLPRIORITIZETEXTURESXOESPROC glad_glPrioritizeTexturesxOES;
+PFNGLRASTERPOS2XOESPROC glad_glRasterPos2xOES;
+PFNGLRASTERPOS2XVOESPROC glad_glRasterPos2xvOES;
+PFNGLRASTERPOS3XOESPROC glad_glRasterPos3xOES;
+PFNGLRASTERPOS3XVOESPROC glad_glRasterPos3xvOES;
+PFNGLRASTERPOS4XOESPROC glad_glRasterPos4xOES;
+PFNGLRASTERPOS4XVOESPROC glad_glRasterPos4xvOES;
+PFNGLRECTXOESPROC glad_glRectxOES;
+PFNGLRECTXVOESPROC glad_glRectxvOES;
+PFNGLTEXCOORD1XOESPROC glad_glTexCoord1xOES;
+PFNGLTEXCOORD1XVOESPROC glad_glTexCoord1xvOES;
+PFNGLTEXCOORD2XOESPROC glad_glTexCoord2xOES;
+PFNGLTEXCOORD2XVOESPROC glad_glTexCoord2xvOES;
+PFNGLTEXCOORD3XOESPROC glad_glTexCoord3xOES;
+PFNGLTEXCOORD3XVOESPROC glad_glTexCoord3xvOES;
+PFNGLTEXCOORD4XOESPROC glad_glTexCoord4xOES;
+PFNGLTEXCOORD4XVOESPROC glad_glTexCoord4xvOES;
+PFNGLTEXGENXOESPROC glad_glTexGenxOES;
+PFNGLTEXGENXVOESPROC glad_glTexGenxvOES;
+PFNGLVERTEX2XOESPROC glad_glVertex2xOES;
+PFNGLVERTEX2XVOESPROC glad_glVertex2xvOES;
+PFNGLVERTEX3XOESPROC glad_glVertex3xOES;
+PFNGLVERTEX3XVOESPROC glad_glVertex3xvOES;
+PFNGLVERTEX4XOESPROC glad_glVertex4xOES;
+PFNGLVERTEX4XVOESPROC glad_glVertex4xvOES;
+PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC glad_glRenderbufferStorageMultisampleEXT;
+PFNGLTEXIMAGE4DSGISPROC glad_glTexImage4DSGIS;
+PFNGLTEXSUBIMAGE4DSGISPROC glad_glTexSubImage4DSGIS;
+PFNGLTEXIMAGE3DEXTPROC glad_glTexImage3DEXT;
+PFNGLTEXSUBIMAGE3DEXTPROC glad_glTexSubImage3DEXT;
+PFNGLSAMPLEMASKEXTPROC glad_glSampleMaskEXT;
+PFNGLSAMPLEPATTERNEXTPROC glad_glSamplePatternEXT;
+PFNGLSECONDARYCOLOR3BEXTPROC glad_glSecondaryColor3bEXT;
+PFNGLSECONDARYCOLOR3BVEXTPROC glad_glSecondaryColor3bvEXT;
+PFNGLSECONDARYCOLOR3DEXTPROC glad_glSecondaryColor3dEXT;
+PFNGLSECONDARYCOLOR3DVEXTPROC glad_glSecondaryColor3dvEXT;
+PFNGLSECONDARYCOLOR3FEXTPROC glad_glSecondaryColor3fEXT;
+PFNGLSECONDARYCOLOR3FVEXTPROC glad_glSecondaryColor3fvEXT;
+PFNGLSECONDARYCOLOR3IEXTPROC glad_glSecondaryColor3iEXT;
+PFNGLSECONDARYCOLOR3IVEXTPROC glad_glSecondaryColor3ivEXT;
+PFNGLSECONDARYCOLOR3SEXTPROC glad_glSecondaryColor3sEXT;
+PFNGLSECONDARYCOLOR3SVEXTPROC glad_glSecondaryColor3svEXT;
+PFNGLSECONDARYCOLOR3UBEXTPROC glad_glSecondaryColor3ubEXT;
+PFNGLSECONDARYCOLOR3UBVEXTPROC glad_glSecondaryColor3ubvEXT;
+PFNGLSECONDARYCOLOR3UIEXTPROC glad_glSecondaryColor3uiEXT;
+PFNGLSECONDARYCOLOR3UIVEXTPROC glad_glSecondaryColor3uivEXT;
+PFNGLSECONDARYCOLOR3USEXTPROC glad_glSecondaryColor3usEXT;
+PFNGLSECONDARYCOLOR3USVEXTPROC glad_glSecondaryColor3usvEXT;
+PFNGLSECONDARYCOLORPOINTEREXTPROC glad_glSecondaryColorPointerEXT;
+PFNGLNEWOBJECTBUFFERATIPROC glad_glNewObjectBufferATI;
+PFNGLISOBJECTBUFFERATIPROC glad_glIsObjectBufferATI;
+PFNGLUPDATEOBJECTBUFFERATIPROC glad_glUpdateObjectBufferATI;
+PFNGLGETOBJECTBUFFERFVATIPROC glad_glGetObjectBufferfvATI;
+PFNGLGETOBJECTBUFFERIVATIPROC glad_glGetObjectBufferivATI;
+PFNGLFREEOBJECTBUFFERATIPROC glad_glFreeObjectBufferATI;
+PFNGLARRAYOBJECTATIPROC glad_glArrayObjectATI;
+PFNGLGETARRAYOBJECTFVATIPROC glad_glGetArrayObjectfvATI;
+PFNGLGETARRAYOBJECTIVATIPROC glad_glGetArrayObjectivATI;
+PFNGLVARIANTARRAYOBJECTATIPROC glad_glVariantArrayObjectATI;
+PFNGLGETVARIANTARRAYOBJECTFVATIPROC glad_glGetVariantArrayObjectfvATI;
+PFNGLGETVARIANTARRAYOBJECTIVATIPROC glad_glGetVariantArrayObjectivATI;
+PFNGLMAXSHADERCOMPILERTHREADSARBPROC glad_glMaxShaderCompilerThreadsARB;
+PFNGLTEXPAGECOMMITMENTARBPROC glad_glTexPageCommitmentARB;
+PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC glad_glFramebufferSampleLocationsfvARB;
+PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVARBPROC glad_glNamedFramebufferSampleLocationsfvARB;
+PFNGLEVALUATEDEPTHVALUESARBPROC glad_glEvaluateDepthValuesARB;
+PFNGLBUFFERPAGECOMMITMENTARBPROC glad_glBufferPageCommitmentARB;
+PFNGLNAMEDBUFFERPAGECOMMITMENTEXTPROC glad_glNamedBufferPageCommitmentEXT;
+PFNGLNAMEDBUFFERPAGECOMMITMENTARBPROC glad_glNamedBufferPageCommitmentARB;
+PFNGLDRAWRANGEELEMENTSEXTPROC glad_glDrawRangeElementsEXT;
+static void load_GL_VERSION_1_0(GLADloadproc load) {
+	if(!GLAD_GL_VERSION_1_0) return;
+	glad_glCullFace = (PFNGLCULLFACEPROC)load("glCullFace");
+	glad_glFrontFace = (PFNGLFRONTFACEPROC)load("glFrontFace");
+	glad_glHint = (PFNGLHINTPROC)load("glHint");
+	glad_glLineWidth = (PFNGLLINEWIDTHPROC)load("glLineWidth");
+	glad_glPointSize = (PFNGLPOINTSIZEPROC)load("glPointSize");
+	glad_glPolygonMode = (PFNGLPOLYGONMODEPROC)load("glPolygonMode");
+	glad_glScissor = (PFNGLSCISSORPROC)load("glScissor");
+	glad_glTexParameterf = (PFNGLTEXPARAMETERFPROC)load("glTexParameterf");
+	glad_glTexParameterfv = (PFNGLTEXPARAMETERFVPROC)load("glTexParameterfv");
+	glad_glTexParameteri = (PFNGLTEXPARAMETERIPROC)load("glTexParameteri");
+	glad_glTexParameteriv = (PFNGLTEXPARAMETERIVPROC)load("glTexParameteriv");
+	glad_glTexImage1D = (PFNGLTEXIMAGE1DPROC)load("glTexImage1D");
+	glad_glTexImage2D = (PFNGLTEXIMAGE2DPROC)load("glTexImage2D");
+	glad_glDrawBuffer = (PFNGLDRAWBUFFERPROC)load("glDrawBuffer");
+	glad_glClear = (PFNGLCLEARPROC)load("glClear");
+	glad_glClearColor = (PFNGLCLEARCOLORPROC)load("glClearColor");
+	glad_glClearStencil = (PFNGLCLEARSTENCILPROC)load("glClearStencil");
+	glad_glClearDepth = (PFNGLCLEARDEPTHPROC)load("glClearDepth");
+	glad_glStencilMask = (PFNGLSTENCILMASKPROC)load("glStencilMask");
+	glad_glColorMask = (PFNGLCOLORMASKPROC)load("glColorMask");
+	glad_glDepthMask = (PFNGLDEPTHMASKPROC)load("glDepthMask");
+	glad_glDisable = (PFNGLDISABLEPROC)load("glDisable");
+	glad_glEnable = (PFNGLENABLEPROC)load("glEnable");
+	glad_glFinish = (PFNGLFINISHPROC)load("glFinish");
+	glad_glFlush = (PFNGLFLUSHPROC)load("glFlush");
+	glad_glBlendFunc = (PFNGLBLENDFUNCPROC)load("glBlendFunc");
+	glad_glLogicOp = (PFNGLLOGICOPPROC)load("glLogicOp");
+	glad_glStencilFunc = (PFNGLSTENCILFUNCPROC)load("glStencilFunc");
+	glad_glStencilOp = (PFNGLSTENCILOPPROC)load("glStencilOp");
+	glad_glDepthFunc = (PFNGLDEPTHFUNCPROC)load("glDepthFunc");
+	glad_glPixelStoref = (PFNGLPIXELSTOREFPROC)load("glPixelStoref");
+	glad_glPixelStorei = (PFNGLPIXELSTOREIPROC)load("glPixelStorei");
+	glad_glReadBuffer = (PFNGLREADBUFFERPROC)load("glReadBuffer");
+	glad_glReadPixels = (PFNGLREADPIXELSPROC)load("glReadPixels");
+	glad_glGetBooleanv = (PFNGLGETBOOLEANVPROC)load("glGetBooleanv");
+	glad_glGetDoublev = (PFNGLGETDOUBLEVPROC)load("glGetDoublev");
+	glad_glGetError = (PFNGLGETERRORPROC)load("glGetError");
+	glad_glGetFloatv = (PFNGLGETFLOATVPROC)load("glGetFloatv");
+	glad_glGetIntegerv = (PFNGLGETINTEGERVPROC)load("glGetIntegerv");
+	glad_glGetString = (PFNGLGETSTRINGPROC)load("glGetString");
+	glad_glGetTexImage = (PFNGLGETTEXIMAGEPROC)load("glGetTexImage");
+	glad_glGetTexParameterfv = (PFNGLGETTEXPARAMETERFVPROC)load("glGetTexParameterfv");
+	glad_glGetTexParameteriv = (PFNGLGETTEXPARAMETERIVPROC)load("glGetTexParameteriv");
+	glad_glGetTexLevelParameterfv = (PFNGLGETTEXLEVELPARAMETERFVPROC)load("glGetTexLevelParameterfv");
+	glad_glGetTexLevelParameteriv = (PFNGLGETTEXLEVELPARAMETERIVPROC)load("glGetTexLevelParameteriv");
+	glad_glIsEnabled = (PFNGLISENABLEDPROC)load("glIsEnabled");
+	glad_glDepthRange = (PFNGLDEPTHRANGEPROC)load("glDepthRange");
+	glad_glViewport = (PFNGLVIEWPORTPROC)load("glViewport");
+}
+static void load_GL_VERSION_1_1(GLADloadproc load) {
+	if(!GLAD_GL_VERSION_1_1) return;
+	glad_glDrawArrays = (PFNGLDRAWARRAYSPROC)load("glDrawArrays");
+	glad_glDrawElements = (PFNGLDRAWELEMENTSPROC)load("glDrawElements");
+	glad_glPolygonOffset = (PFNGLPOLYGONOFFSETPROC)load("glPolygonOffset");
+	glad_glCopyTexImage1D = (PFNGLCOPYTEXIMAGE1DPROC)load("glCopyTexImage1D");
+	glad_glCopyTexImage2D = (PFNGLCOPYTEXIMAGE2DPROC)load("glCopyTexImage2D");
+	glad_glCopyTexSubImage1D = (PFNGLCOPYTEXSUBIMAGE1DPROC)load("glCopyTexSubImage1D");
+	glad_glCopyTexSubImage2D = (PFNGLCOPYTEXSUBIMAGE2DPROC)load("glCopyTexSubImage2D");
+	glad_glTexSubImage1D = (PFNGLTEXSUBIMAGE1DPROC)load("glTexSubImage1D");
+	glad_glTexSubImage2D = (PFNGLTEXSUBIMAGE2DPROC)load("glTexSubImage2D");
+	glad_glBindTexture = (PFNGLBINDTEXTUREPROC)load("glBindTexture");
+	glad_glDeleteTextures = (PFNGLDELETETEXTURESPROC)load("glDeleteTextures");
+	glad_glGenTextures = (PFNGLGENTEXTURESPROC)load("glGenTextures");
+	glad_glIsTexture = (PFNGLISTEXTUREPROC)load("glIsTexture");
+}
+static void load_GL_VERSION_1_2(GLADloadproc load) {
+	if(!GLAD_GL_VERSION_1_2) return;
+	glad_glDrawRangeElements = (PFNGLDRAWRANGEELEMENTSPROC)load("glDrawRangeElements");
+	glad_glTexImage3D = (PFNGLTEXIMAGE3DPROC)load("glTexImage3D");
+	glad_glTexSubImage3D = (PFNGLTEXSUBIMAGE3DPROC)load("glTexSubImage3D");
+	glad_glCopyTexSubImage3D = (PFNGLCOPYTEXSUBIMAGE3DPROC)load("glCopyTexSubImage3D");
+}
+static void load_GL_VERSION_1_3(GLADloadproc load) {
+	if(!GLAD_GL_VERSION_1_3) return;
+	glad_glActiveTexture = (PFNGLACTIVETEXTUREPROC)load("glActiveTexture");
+	glad_glSampleCoverage = (PFNGLSAMPLECOVERAGEPROC)load("glSampleCoverage");
+	glad_glCompressedTexImage3D = (PFNGLCOMPRESSEDTEXIMAGE3DPROC)load("glCompressedTexImage3D");
+	glad_glCompressedTexImage2D = (PFNGLCOMPRESSEDTEXIMAGE2DPROC)load("glCompressedTexImage2D");
+	glad_glCompressedTexImage1D = (PFNGLCOMPRESSEDTEXIMAGE1DPROC)load("glCompressedTexImage1D");
+	glad_glCompressedTexSubImage3D = (PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC)load("glCompressedTexSubImage3D");
+	glad_glCompressedTexSubImage2D = (PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC)load("glCompressedTexSubImage2D");
+	glad_glCompressedTexSubImage1D = (PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC)load("glCompressedTexSubImage1D");
+	glad_glGetCompressedTexImage = (PFNGLGETCOMPRESSEDTEXIMAGEPROC)load("glGetCompressedTexImage");
+}
+static void load_GL_VERSION_1_4(GLADloadproc load) {
+	if(!GLAD_GL_VERSION_1_4) return;
+	glad_glBlendFuncSeparate = (PFNGLBLENDFUNCSEPARATEPROC)load("glBlendFuncSeparate");
+	glad_glMultiDrawArrays = (PFNGLMULTIDRAWARRAYSPROC)load("glMultiDrawArrays");
+	glad_glMultiDrawElements = (PFNGLMULTIDRAWELEMENTSPROC)load("glMultiDrawElements");
+	glad_glPointParameterf = (PFNGLPOINTPARAMETERFPROC)load("glPointParameterf");
+	glad_glPointParameterfv = (PFNGLPOINTPARAMETERFVPROC)load("glPointParameterfv");
+	glad_glPointParameteri = (PFNGLPOINTPARAMETERIPROC)load("glPointParameteri");
+	glad_glPointParameteriv = (PFNGLPOINTPARAMETERIVPROC)load("glPointParameteriv");
+	glad_glBlendColor = (PFNGLBLENDCOLORPROC)load("glBlendColor");
+	glad_glBlendEquation = (PFNGLBLENDEQUATIONPROC)load("glBlendEquation");
+}
+static void load_GL_VERSION_1_5(GLADloadproc load) {
+	if(!GLAD_GL_VERSION_1_5) return;
+	glad_glGenQueries = (PFNGLGENQUERIESPROC)load("glGenQueries");
+	glad_glDeleteQueries = (PFNGLDELETEQUERIESPROC)load("glDeleteQueries");
+	glad_glIsQuery = (PFNGLISQUERYPROC)load("glIsQuery");
+	glad_glBeginQuery = (PFNGLBEGINQUERYPROC)load("glBeginQuery");
+	glad_glEndQuery = (PFNGLENDQUERYPROC)load("glEndQuery");
+	glad_glGetQueryiv = (PFNGLGETQUERYIVPROC)load("glGetQueryiv");
+	glad_glGetQueryObjectiv = (PFNGLGETQUERYOBJECTIVPROC)load("glGetQueryObjectiv");
+	glad_glGetQueryObjectuiv = (PFNGLGETQUERYOBJECTUIVPROC)load("glGetQueryObjectuiv");
+	glad_glBindBuffer = (PFNGLBINDBUFFERPROC)load("glBindBuffer");
+	glad_glDeleteBuffers = (PFNGLDELETEBUFFERSPROC)load("glDeleteBuffers");
+	glad_glGenBuffers = (PFNGLGENBUFFERSPROC)load("glGenBuffers");
+	glad_glIsBuffer = (PFNGLISBUFFERPROC)load("glIsBuffer");
+	glad_glBufferData = (PFNGLBUFFERDATAPROC)load("glBufferData");
+	glad_glBufferSubData = (PFNGLBUFFERSUBDATAPROC)load("glBufferSubData");
+	glad_glGetBufferSubData = (PFNGLGETBUFFERSUBDATAPROC)load("glGetBufferSubData");
+	glad_glMapBuffer = (PFNGLMAPBUFFERPROC)load("glMapBuffer");
+	glad_glUnmapBuffer = (PFNGLUNMAPBUFFERPROC)load("glUnmapBuffer");
+	glad_glGetBufferParameteriv = (PFNGLGETBUFFERPARAMETERIVPROC)load("glGetBufferParameteriv");
+	glad_glGetBufferPointerv = (PFNGLGETBUFFERPOINTERVPROC)load("glGetBufferPointerv");
+}
+static void load_GL_VERSION_2_0(GLADloadproc load) {
+	if(!GLAD_GL_VERSION_2_0) return;
+	glad_glBlendEquationSeparate = (PFNGLBLENDEQUATIONSEPARATEPROC)load("glBlendEquationSeparate");
+	glad_glDrawBuffers = (PFNGLDRAWBUFFERSPROC)load("glDrawBuffers");
+	glad_glStencilOpSeparate = (PFNGLSTENCILOPSEPARATEPROC)load("glStencilOpSeparate");
+	glad_glStencilFuncSeparate = (PFNGLSTENCILFUNCSEPARATEPROC)load("glStencilFuncSeparate");
+	glad_glStencilMaskSeparate = (PFNGLSTENCILMASKSEPARATEPROC)load("glStencilMaskSeparate");
+	glad_glAttachShader = (PFNGLATTACHSHADERPROC)load("glAttachShader");
+	glad_glBindAttribLocation = (PFNGLBINDATTRIBLOCATIONPROC)load("glBindAttribLocation");
+	glad_glCompileShader = (PFNGLCOMPILESHADERPROC)load("glCompileShader");
+	glad_glCreateProgram = (PFNGLCREATEPROGRAMPROC)load("glCreateProgram");
+	glad_glCreateShader = (PFNGLCREATESHADERPROC)load("glCreateShader");
+	glad_glDeleteProgram = (PFNGLDELETEPROGRAMPROC)load("glDeleteProgram");
+	glad_glDeleteShader = (PFNGLDELETESHADERPROC)load("glDeleteShader");
+	glad_glDetachShader = (PFNGLDETACHSHADERPROC)load("glDetachShader");
+	glad_glDisableVertexAttribArray = (PFNGLDISABLEVERTEXATTRIBARRAYPROC)load("glDisableVertexAttribArray");
+	glad_glEnableVertexAttribArray = (PFNGLENABLEVERTEXATTRIBARRAYPROC)load("glEnableVertexAttribArray");
+	glad_glGetActiveAttrib = (PFNGLGETACTIVEATTRIBPROC)load("glGetActiveAttrib");
+	glad_glGetActiveUniform = (PFNGLGETACTIVEUNIFORMPROC)load("glGetActiveUniform");
+	glad_glGetAttachedShaders = (PFNGLGETATTACHEDSHADERSPROC)load("glGetAttachedShaders");
+	glad_glGetAttribLocation = (PFNGLGETATTRIBLOCATIONPROC)load("glGetAttribLocation");
+	glad_glGetProgramiv = (PFNGLGETPROGRAMIVPROC)load("glGetProgramiv");
+	glad_glGetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC)load("glGetProgramInfoLog");
+	glad_glGetShaderiv = (PFNGLGETSHADERIVPROC)load("glGetShaderiv");
+	glad_glGetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC)load("glGetShaderInfoLog");
+	glad_glGetShaderSource = (PFNGLGETSHADERSOURCEPROC)load("glGetShaderSource");
+	glad_glGetUniformLocation = (PFNGLGETUNIFORMLOCATIONPROC)load("glGetUniformLocation");
+	glad_glGetUniformfv = (PFNGLGETUNIFORMFVPROC)load("glGetUniformfv");
+	glad_glGetUniformiv = (PFNGLGETUNIFORMIVPROC)load("glGetUniformiv");
+	glad_glGetVertexAttribdv = (PFNGLGETVERTEXATTRIBDVPROC)load("glGetVertexAttribdv");
+	glad_glGetVertexAttribfv = (PFNGLGETVERTEXATTRIBFVPROC)load("glGetVertexAttribfv");
+	glad_glGetVertexAttribiv = (PFNGLGETVERTEXATTRIBIVPROC)load("glGetVertexAttribiv");
+	glad_glGetVertexAttribPointerv = (PFNGLGETVERTEXATTRIBPOINTERVPROC)load("glGetVertexAttribPointerv");
+	glad_glIsProgram = (PFNGLISPROGRAMPROC)load("glIsProgram");
+	glad_glIsShader = (PFNGLISSHADERPROC)load("glIsShader");
+	glad_glLinkProgram = (PFNGLLINKPROGRAMPROC)load("glLinkProgram");
+	glad_glShaderSource = (PFNGLSHADERSOURCEPROC)load("glShaderSource");
+	glad_glUseProgram = (PFNGLUSEPROGRAMPROC)load("glUseProgram");
+	glad_glUniform1f = (PFNGLUNIFORM1FPROC)load("glUniform1f");
+	glad_glUniform2f = (PFNGLUNIFORM2FPROC)load("glUniform2f");
+	glad_glUniform3f = (PFNGLUNIFORM3FPROC)load("glUniform3f");
+	glad_glUniform4f = (PFNGLUNIFORM4FPROC)load("glUniform4f");
+	glad_glUniform1i = (PFNGLUNIFORM1IPROC)load("glUniform1i");
+	glad_glUniform2i = (PFNGLUNIFORM2IPROC)load("glUniform2i");
+	glad_glUniform3i = (PFNGLUNIFORM3IPROC)load("glUniform3i");
+	glad_glUniform4i = (PFNGLUNIFORM4IPROC)load("glUniform4i");
+	glad_glUniform1fv = (PFNGLUNIFORM1FVPROC)load("glUniform1fv");
+	glad_glUniform2fv = (PFNGLUNIFORM2FVPROC)load("glUniform2fv");
+	glad_glUniform3fv = (PFNGLUNIFORM3FVPROC)load("glUniform3fv");
+	glad_glUniform4fv = (PFNGLUNIFORM4FVPROC)load("glUniform4fv");
+	glad_glUniform1iv = (PFNGLUNIFORM1IVPROC)load("glUniform1iv");
+	glad_glUniform2iv = (PFNGLUNIFORM2IVPROC)load("glUniform2iv");
+	glad_glUniform3iv = (PFNGLUNIFORM3IVPROC)load("glUniform3iv");
+	glad_glUniform4iv = (PFNGLUNIFORM4IVPROC)load("glUniform4iv");
+	glad_glUniformMatrix2fv = (PFNGLUNIFORMMATRIX2FVPROC)load("glUniformMatrix2fv");
+	glad_glUniformMatrix3fv = (PFNGLUNIFORMMATRIX3FVPROC)load("glUniformMatrix3fv");
+	glad_glUniformMatrix4fv = (PFNGLUNIFORMMATRIX4FVPROC)load("glUniformMatrix4fv");
+	glad_glValidateProgram = (PFNGLVALIDATEPROGRAMPROC)load("glValidateProgram");
+	glad_glVertexAttrib1d = (PFNGLVERTEXATTRIB1DPROC)load("glVertexAttrib1d");
+	glad_glVertexAttrib1dv = (PFNGLVERTEXATTRIB1DVPROC)load("glVertexAttrib1dv");
+	glad_glVertexAttrib1f = (PFNGLVERTEXATTRIB1FPROC)load("glVertexAttrib1f");
+	glad_glVertexAttrib1fv = (PFNGLVERTEXATTRIB1FVPROC)load("glVertexAttrib1fv");
+	glad_glVertexAttrib1s = (PFNGLVERTEXATTRIB1SPROC)load("glVertexAttrib1s");
+	glad_glVertexAttrib1sv = (PFNGLVERTEXATTRIB1SVPROC)load("glVertexAttrib1sv");
+	glad_glVertexAttrib2d = (PFNGLVERTEXATTRIB2DPROC)load("glVertexAttrib2d");
+	glad_glVertexAttrib2dv = (PFNGLVERTEXATTRIB2DVPROC)load("glVertexAttrib2dv");
+	glad_glVertexAttrib2f = (PFNGLVERTEXATTRIB2FPROC)load("glVertexAttrib2f");
+	glad_glVertexAttrib2fv = (PFNGLVERTEXATTRIB2FVPROC)load("glVertexAttrib2fv");
+	glad_glVertexAttrib2s = (PFNGLVERTEXATTRIB2SPROC)load("glVertexAttrib2s");
+	glad_glVertexAttrib2sv = (PFNGLVERTEXATTRIB2SVPROC)load("glVertexAttrib2sv");
+	glad_glVertexAttrib3d = (PFNGLVERTEXATTRIB3DPROC)load("glVertexAttrib3d");
+	glad_glVertexAttrib3dv = (PFNGLVERTEXATTRIB3DVPROC)load("glVertexAttrib3dv");
+	glad_glVertexAttrib3f = (PFNGLVERTEXATTRIB3FPROC)load("glVertexAttrib3f");
+	glad_glVertexAttrib3fv = (PFNGLVERTEXATTRIB3FVPROC)load("glVertexAttrib3fv");
+	glad_glVertexAttrib3s = (PFNGLVERTEXATTRIB3SPROC)load("glVertexAttrib3s");
+	glad_glVertexAttrib3sv = (PFNGLVERTEXATTRIB3SVPROC)load("glVertexAttrib3sv");
+	glad_glVertexAttrib4Nbv = (PFNGLVERTEXATTRIB4NBVPROC)load("glVertexAttrib4Nbv");
+	glad_glVertexAttrib4Niv = (PFNGLVERTEXATTRIB4NIVPROC)load("glVertexAttrib4Niv");
+	glad_glVertexAttrib4Nsv = (PFNGLVERTEXATTRIB4NSVPROC)load("glVertexAttrib4Nsv");
+	glad_glVertexAttrib4Nub = (PFNGLVERTEXATTRIB4NUBPROC)load("glVertexAttrib4Nub");
+	glad_glVertexAttrib4Nubv = (PFNGLVERTEXATTRIB4NUBVPROC)load("glVertexAttrib4Nubv");
+	glad_glVertexAttrib4Nuiv = (PFNGLVERTEXATTRIB4NUIVPROC)load("glVertexAttrib4Nuiv");
+	glad_glVertexAttrib4Nusv = (PFNGLVERTEXATTRIB4NUSVPROC)load("glVertexAttrib4Nusv");
+	glad_glVertexAttrib4bv = (PFNGLVERTEXATTRIB4BVPROC)load("glVertexAttrib4bv");
+	glad_glVertexAttrib4d = (PFNGLVERTEXATTRIB4DPROC)load("glVertexAttrib4d");
+	glad_glVertexAttrib4dv = (PFNGLVERTEXATTRIB4DVPROC)load("glVertexAttrib4dv");
+	glad_glVertexAttrib4f = (PFNGLVERTEXATTRIB4FPROC)load("glVertexAttrib4f");
+	glad_glVertexAttrib4fv = (PFNGLVERTEXATTRIB4FVPROC)load("glVertexAttrib4fv");
+	glad_glVertexAttrib4iv = (PFNGLVERTEXATTRIB4IVPROC)load("glVertexAttrib4iv");
+	glad_glVertexAttrib4s = (PFNGLVERTEXATTRIB4SPROC)load("glVertexAttrib4s");
+	glad_glVertexAttrib4sv = (PFNGLVERTEXATTRIB4SVPROC)load("glVertexAttrib4sv");
+	glad_glVertexAttrib4ubv = (PFNGLVERTEXATTRIB4UBVPROC)load("glVertexAttrib4ubv");
+	glad_glVertexAttrib4uiv = (PFNGLVERTEXATTRIB4UIVPROC)load("glVertexAttrib4uiv");
+	glad_glVertexAttrib4usv = (PFNGLVERTEXATTRIB4USVPROC)load("glVertexAttrib4usv");
+	glad_glVertexAttribPointer = (PFNGLVERTEXATTRIBPOINTERPROC)load("glVertexAttribPointer");
+}
+static void load_GL_VERSION_2_1(GLADloadproc load) {
+	if(!GLAD_GL_VERSION_2_1) return;
+	glad_glUniformMatrix2x3fv = (PFNGLUNIFORMMATRIX2X3FVPROC)load("glUniformMatrix2x3fv");
+	glad_glUniformMatrix3x2fv = (PFNGLUNIFORMMATRIX3X2FVPROC)load("glUniformMatrix3x2fv");
+	glad_glUniformMatrix2x4fv = (PFNGLUNIFORMMATRIX2X4FVPROC)load("glUniformMatrix2x4fv");
+	glad_glUniformMatrix4x2fv = (PFNGLUNIFORMMATRIX4X2FVPROC)load("glUniformMatrix4x2fv");
+	glad_glUniformMatrix3x4fv = (PFNGLUNIFORMMATRIX3X4FVPROC)load("glUniformMatrix3x4fv");
+	glad_glUniformMatrix4x3fv = (PFNGLUNIFORMMATRIX4X3FVPROC)load("glUniformMatrix4x3fv");
+}
+static void load_GL_VERSION_3_0(GLADloadproc load) {
+	if(!GLAD_GL_VERSION_3_0) return;
+	glad_glColorMaski = (PFNGLCOLORMASKIPROC)load("glColorMaski");
+	glad_glGetBooleani_v = (PFNGLGETBOOLEANI_VPROC)load("glGetBooleani_v");
+	glad_glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC)load("glGetIntegeri_v");
+	glad_glEnablei = (PFNGLENABLEIPROC)load("glEnablei");
+	glad_glDisablei = (PFNGLDISABLEIPROC)load("glDisablei");
+	glad_glIsEnabledi = (PFNGLISENABLEDIPROC)load("glIsEnabledi");
+	glad_glBeginTransformFeedback = (PFNGLBEGINTRANSFORMFEEDBACKPROC)load("glBeginTransformFeedback");
+	glad_glEndTransformFeedback = (PFNGLENDTRANSFORMFEEDBACKPROC)load("glEndTransformFeedback");
+	glad_glBindBufferRange = (PFNGLBINDBUFFERRANGEPROC)load("glBindBufferRange");
+	glad_glBindBufferBase = (PFNGLBINDBUFFERBASEPROC)load("glBindBufferBase");
+	glad_glTransformFeedbackVaryings = (PFNGLTRANSFORMFEEDBACKVARYINGSPROC)load("glTransformFeedbackVaryings");
+	glad_glGetTransformFeedbackVarying = (PFNGLGETTRANSFORMFEEDBACKVARYINGPROC)load("glGetTransformFeedbackVarying");
+	glad_glClampColor = (PFNGLCLAMPCOLORPROC)load("glClampColor");
+	glad_glBeginConditionalRender = (PFNGLBEGINCONDITIONALRENDERPROC)load("glBeginConditionalRender");
+	glad_glEndConditionalRender = (PFNGLENDCONDITIONALRENDERPROC)load("glEndConditionalRender");
+	glad_glVertexAttribIPointer = (PFNGLVERTEXATTRIBIPOINTERPROC)load("glVertexAttribIPointer");
+	glad_glGetVertexAttribIiv = (PFNGLGETVERTEXATTRIBIIVPROC)load("glGetVertexAttribIiv");
+	glad_glGetVertexAttribIuiv = (PFNGLGETVERTEXATTRIBIUIVPROC)load("glGetVertexAttribIuiv");
+	glad_glVertexAttribI1i = (PFNGLVERTEXATTRIBI1IPROC)load("glVertexAttribI1i");
+	glad_glVertexAttribI2i = (PFNGLVERTEXATTRIBI2IPROC)load("glVertexAttribI2i");
+	glad_glVertexAttribI3i = (PFNGLVERTEXATTRIBI3IPROC)load("glVertexAttribI3i");
+	glad_glVertexAttribI4i = (PFNGLVERTEXATTRIBI4IPROC)load("glVertexAttribI4i");
+	glad_glVertexAttribI1ui = (PFNGLVERTEXATTRIBI1UIPROC)load("glVertexAttribI1ui");
+	glad_glVertexAttribI2ui = (PFNGLVERTEXATTRIBI2UIPROC)load("glVertexAttribI2ui");
+	glad_glVertexAttribI3ui = (PFNGLVERTEXATTRIBI3UIPROC)load("glVertexAttribI3ui");
+	glad_glVertexAttribI4ui = (PFNGLVERTEXATTRIBI4UIPROC)load("glVertexAttribI4ui");
+	glad_glVertexAttribI1iv = (PFNGLVERTEXATTRIBI1IVPROC)load("glVertexAttribI1iv");
+	glad_glVertexAttribI2iv = (PFNGLVERTEXATTRIBI2IVPROC)load("glVertexAttribI2iv");
+	glad_glVertexAttribI3iv = (PFNGLVERTEXATTRIBI3IVPROC)load("glVertexAttribI3iv");
+	glad_glVertexAttribI4iv = (PFNGLVERTEXATTRIBI4IVPROC)load("glVertexAttribI4iv");
+	glad_glVertexAttribI1uiv = (PFNGLVERTEXATTRIBI1UIVPROC)load("glVertexAttribI1uiv");
+	glad_glVertexAttribI2uiv = (PFNGLVERTEXATTRIBI2UIVPROC)load("glVertexAttribI2uiv");
+	glad_glVertexAttribI3uiv = (PFNGLVERTEXATTRIBI3UIVPROC)load("glVertexAttribI3uiv");
+	glad_glVertexAttribI4uiv = (PFNGLVERTEXATTRIBI4UIVPROC)load("glVertexAttribI4uiv");
+	glad_glVertexAttribI4bv = (PFNGLVERTEXATTRIBI4BVPROC)load("glVertexAttribI4bv");
+	glad_glVertexAttribI4sv = (PFNGLVERTEXATTRIBI4SVPROC)load("glVertexAttribI4sv");
+	glad_glVertexAttribI4ubv = (PFNGLVERTEXATTRIBI4UBVPROC)load("glVertexAttribI4ubv");
+	glad_glVertexAttribI4usv = (PFNGLVERTEXATTRIBI4USVPROC)load("glVertexAttribI4usv");
+	glad_glGetUniformuiv = (PFNGLGETUNIFORMUIVPROC)load("glGetUniformuiv");
+	glad_glBindFragDataLocation = (PFNGLBINDFRAGDATALOCATIONPROC)load("glBindFragDataLocation");
+	glad_glGetFragDataLocation = (PFNGLGETFRAGDATALOCATIONPROC)load("glGetFragDataLocation");
+	glad_glUniform1ui = (PFNGLUNIFORM1UIPROC)load("glUniform1ui");
+	glad_glUniform2ui = (PFNGLUNIFORM2UIPROC)load("glUniform2ui");
+	glad_glUniform3ui = (PFNGLUNIFORM3UIPROC)load("glUniform3ui");
+	glad_glUniform4ui = (PFNGLUNIFORM4UIPROC)load("glUniform4ui");
+	glad_glUniform1uiv = (PFNGLUNIFORM1UIVPROC)load("glUniform1uiv");
+	glad_glUniform2uiv = (PFNGLUNIFORM2UIVPROC)load("glUniform2uiv");
+	glad_glUniform3uiv = (PFNGLUNIFORM3UIVPROC)load("glUniform3uiv");
+	glad_glUniform4uiv = (PFNGLUNIFORM4UIVPROC)load("glUniform4uiv");
+	glad_glTexParameterIiv = (PFNGLTEXPARAMETERIIVPROC)load("glTexParameterIiv");
+	glad_glTexParameterIuiv = (PFNGLTEXPARAMETERIUIVPROC)load("glTexParameterIuiv");
+	glad_glGetTexParameterIiv = (PFNGLGETTEXPARAMETERIIVPROC)load("glGetTexParameterIiv");
+	glad_glGetTexParameterIuiv = (PFNGLGETTEXPARAMETERIUIVPROC)load("glGetTexParameterIuiv");
+	glad_glClearBufferiv = (PFNGLCLEARBUFFERIVPROC)load("glClearBufferiv");
+	glad_glClearBufferuiv = (PFNGLCLEARBUFFERUIVPROC)load("glClearBufferuiv");
+	glad_glClearBufferfv = (PFNGLCLEARBUFFERFVPROC)load("glClearBufferfv");
+	glad_glClearBufferfi = (PFNGLCLEARBUFFERFIPROC)load("glClearBufferfi");
+	glad_glGetStringi = (PFNGLGETSTRINGIPROC)load("glGetStringi");
+	glad_glIsRenderbuffer = (PFNGLISRENDERBUFFERPROC)load("glIsRenderbuffer");
+	glad_glBindRenderbuffer = (PFNGLBINDRENDERBUFFERPROC)load("glBindRenderbuffer");
+	glad_glDeleteRenderbuffers = (PFNGLDELETERENDERBUFFERSPROC)load("glDeleteRenderbuffers");
+	glad_glGenRenderbuffers = (PFNGLGENRENDERBUFFERSPROC)load("glGenRenderbuffers");
+	glad_glRenderbufferStorage = (PFNGLRENDERBUFFERSTORAGEPROC)load("glRenderbufferStorage");
+	glad_glGetRenderbufferParameteriv = (PFNGLGETRENDERBUFFERPARAMETERIVPROC)load("glGetRenderbufferParameteriv");
+	glad_glIsFramebuffer = (PFNGLISFRAMEBUFFERPROC)load("glIsFramebuffer");
+	glad_glBindFramebuffer = (PFNGLBINDFRAMEBUFFERPROC)load("glBindFramebuffer");
+	glad_glDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC)load("glDeleteFramebuffers");
+	glad_glGenFramebuffers = (PFNGLGENFRAMEBUFFERSPROC)load("glGenFramebuffers");
+	glad_glCheckFramebufferStatus = (PFNGLCHECKFRAMEBUFFERSTATUSPROC)load("glCheckFramebufferStatus");
+	glad_glFramebufferTexture1D = (PFNGLFRAMEBUFFERTEXTURE1DPROC)load("glFramebufferTexture1D");
+	glad_glFramebufferTexture2D = (PFNGLFRAMEBUFFERTEXTURE2DPROC)load("glFramebufferTexture2D");
+	glad_glFramebufferTexture3D = (PFNGLFRAMEBUFFERTEXTURE3DPROC)load("glFramebufferTexture3D");
+	glad_glFramebufferRenderbuffer = (PFNGLFRAMEBUFFERRENDERBUFFERPROC)load("glFramebufferRenderbuffer");
+	glad_glGetFramebufferAttachmentParameteriv = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)load("glGetFramebufferAttachmentParameteriv");
+	glad_glGenerateMipmap = (PFNGLGENERATEMIPMAPPROC)load("glGenerateMipmap");
+	glad_glBlitFramebuffer = (PFNGLBLITFRAMEBUFFERPROC)load("glBlitFramebuffer");
+	glad_glRenderbufferStorageMultisample = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)load("glRenderbufferStorageMultisample");
+	glad_glFramebufferTextureLayer = (PFNGLFRAMEBUFFERTEXTURELAYERPROC)load("glFramebufferTextureLayer");
+	glad_glMapBufferRange = (PFNGLMAPBUFFERRANGEPROC)load("glMapBufferRange");
+	glad_glFlushMappedBufferRange = (PFNGLFLUSHMAPPEDBUFFERRANGEPROC)load("glFlushMappedBufferRange");
+	glad_glBindVertexArray = (PFNGLBINDVERTEXARRAYPROC)load("glBindVertexArray");
+	glad_glDeleteVertexArrays = (PFNGLDELETEVERTEXARRAYSPROC)load("glDeleteVertexArrays");
+	glad_glGenVertexArrays = (PFNGLGENVERTEXARRAYSPROC)load("glGenVertexArrays");
+	glad_glIsVertexArray = (PFNGLISVERTEXARRAYPROC)load("glIsVertexArray");
+}
+static void load_GL_VERSION_3_1(GLADloadproc load) {
+	if(!GLAD_GL_VERSION_3_1) return;
+	glad_glDrawArraysInstanced = (PFNGLDRAWARRAYSINSTANCEDPROC)load("glDrawArraysInstanced");
+	glad_glDrawElementsInstanced = (PFNGLDRAWELEMENTSINSTANCEDPROC)load("glDrawElementsInstanced");
+	glad_glTexBuffer = (PFNGLTEXBUFFERPROC)load("glTexBuffer");
+	glad_glPrimitiveRestartIndex = (PFNGLPRIMITIVERESTARTINDEXPROC)load("glPrimitiveRestartIndex");
+	glad_glCopyBufferSubData = (PFNGLCOPYBUFFERSUBDATAPROC)load("glCopyBufferSubData");
+	glad_glGetUniformIndices = (PFNGLGETUNIFORMINDICESPROC)load("glGetUniformIndices");
+	glad_glGetActiveUniformsiv = (PFNGLGETACTIVEUNIFORMSIVPROC)load("glGetActiveUniformsiv");
+	glad_glGetActiveUniformName = (PFNGLGETACTIVEUNIFORMNAMEPROC)load("glGetActiveUniformName");
+	glad_glGetUniformBlockIndex = (PFNGLGETUNIFORMBLOCKINDEXPROC)load("glGetUniformBlockIndex");
+	glad_glGetActiveUniformBlockiv = (PFNGLGETACTIVEUNIFORMBLOCKIVPROC)load("glGetActiveUniformBlockiv");
+	glad_glGetActiveUniformBlockName = (PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC)load("glGetActiveUniformBlockName");
+	glad_glUniformBlockBinding = (PFNGLUNIFORMBLOCKBINDINGPROC)load("glUniformBlockBinding");
+	glad_glBindBufferRange = (PFNGLBINDBUFFERRANGEPROC)load("glBindBufferRange");
+	glad_glBindBufferBase = (PFNGLBINDBUFFERBASEPROC)load("glBindBufferBase");
+	glad_glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC)load("glGetIntegeri_v");
+}
+static void load_GL_VERSION_3_2(GLADloadproc load) {
+	if(!GLAD_GL_VERSION_3_2) return;
+	glad_glDrawElementsBaseVertex = (PFNGLDRAWELEMENTSBASEVERTEXPROC)load("glDrawElementsBaseVertex");
+	glad_glDrawRangeElementsBaseVertex = (PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC)load("glDrawRangeElementsBaseVertex");
+	glad_glDrawElementsInstancedBaseVertex = (PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC)load("glDrawElementsInstancedBaseVertex");
+	glad_glMultiDrawElementsBaseVertex = (PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC)load("glMultiDrawElementsBaseVertex");
+	glad_glProvokingVertex = (PFNGLPROVOKINGVERTEXPROC)load("glProvokingVertex");
+	glad_glFenceSync = (PFNGLFENCESYNCPROC)load("glFenceSync");
+	glad_glIsSync = (PFNGLISSYNCPROC)load("glIsSync");
+	glad_glDeleteSync = (PFNGLDELETESYNCPROC)load("glDeleteSync");
+	glad_glClientWaitSync = (PFNGLCLIENTWAITSYNCPROC)load("glClientWaitSync");
+	glad_glWaitSync = (PFNGLWAITSYNCPROC)load("glWaitSync");
+	glad_glGetInteger64v = (PFNGLGETINTEGER64VPROC)load("glGetInteger64v");
+	glad_glGetSynciv = (PFNGLGETSYNCIVPROC)load("glGetSynciv");
+	glad_glGetInteger64i_v = (PFNGLGETINTEGER64I_VPROC)load("glGetInteger64i_v");
+	glad_glGetBufferParameteri64v = (PFNGLGETBUFFERPARAMETERI64VPROC)load("glGetBufferParameteri64v");
+	glad_glFramebufferTexture = (PFNGLFRAMEBUFFERTEXTUREPROC)load("glFramebufferTexture");
+	glad_glTexImage2DMultisample = (PFNGLTEXIMAGE2DMULTISAMPLEPROC)load("glTexImage2DMultisample");
+	glad_glTexImage3DMultisample = (PFNGLTEXIMAGE3DMULTISAMPLEPROC)load("glTexImage3DMultisample");
+	glad_glGetMultisamplefv = (PFNGLGETMULTISAMPLEFVPROC)load("glGetMultisamplefv");
+	glad_glSampleMaski = (PFNGLSAMPLEMASKIPROC)load("glSampleMaski");
+}
+static void load_GL_VERSION_3_3(GLADloadproc load) {
+	if(!GLAD_GL_VERSION_3_3) return;
+	glad_glBindFragDataLocationIndexed = (PFNGLBINDFRAGDATALOCATIONINDEXEDPROC)load("glBindFragDataLocationIndexed");
+	glad_glGetFragDataIndex = (PFNGLGETFRAGDATAINDEXPROC)load("glGetFragDataIndex");
+	glad_glGenSamplers = (PFNGLGENSAMPLERSPROC)load("glGenSamplers");
+	glad_glDeleteSamplers = (PFNGLDELETESAMPLERSPROC)load("glDeleteSamplers");
+	glad_glIsSampler = (PFNGLISSAMPLERPROC)load("glIsSampler");
+	glad_glBindSampler = (PFNGLBINDSAMPLERPROC)load("glBindSampler");
+	glad_glSamplerParameteri = (PFNGLSAMPLERPARAMETERIPROC)load("glSamplerParameteri");
+	glad_glSamplerParameteriv = (PFNGLSAMPLERPARAMETERIVPROC)load("glSamplerParameteriv");
+	glad_glSamplerParameterf = (PFNGLSAMPLERPARAMETERFPROC)load("glSamplerParameterf");
+	glad_glSamplerParameterfv = (PFNGLSAMPLERPARAMETERFVPROC)load("glSamplerParameterfv");
+	glad_glSamplerParameterIiv = (PFNGLSAMPLERPARAMETERIIVPROC)load("glSamplerParameterIiv");
+	glad_glSamplerParameterIuiv = (PFNGLSAMPLERPARAMETERIUIVPROC)load("glSamplerParameterIuiv");
+	glad_glGetSamplerParameteriv = (PFNGLGETSAMPLERPARAMETERIVPROC)load("glGetSamplerParameteriv");
+	glad_glGetSamplerParameterIiv = (PFNGLGETSAMPLERPARAMETERIIVPROC)load("glGetSamplerParameterIiv");
+	glad_glGetSamplerParameterfv = (PFNGLGETSAMPLERPARAMETERFVPROC)load("glGetSamplerParameterfv");
+	glad_glGetSamplerParameterIuiv = (PFNGLGETSAMPLERPARAMETERIUIVPROC)load("glGetSamplerParameterIuiv");
+	glad_glQueryCounter = (PFNGLQUERYCOUNTERPROC)load("glQueryCounter");
+	glad_glGetQueryObjecti64v = (PFNGLGETQUERYOBJECTI64VPROC)load("glGetQueryObjecti64v");
+	glad_glGetQueryObjectui64v = (PFNGLGETQUERYOBJECTUI64VPROC)load("glGetQueryObjectui64v");
+	glad_glVertexAttribDivisor = (PFNGLVERTEXATTRIBDIVISORPROC)load("glVertexAttribDivisor");
+	glad_glVertexAttribP1ui = (PFNGLVERTEXATTRIBP1UIPROC)load("glVertexAttribP1ui");
+	glad_glVertexAttribP1uiv = (PFNGLVERTEXATTRIBP1UIVPROC)load("glVertexAttribP1uiv");
+	glad_glVertexAttribP2ui = (PFNGLVERTEXATTRIBP2UIPROC)load("glVertexAttribP2ui");
+	glad_glVertexAttribP2uiv = (PFNGLVERTEXATTRIBP2UIVPROC)load("glVertexAttribP2uiv");
+	glad_glVertexAttribP3ui = (PFNGLVERTEXATTRIBP3UIPROC)load("glVertexAttribP3ui");
+	glad_glVertexAttribP3uiv = (PFNGLVERTEXATTRIBP3UIVPROC)load("glVertexAttribP3uiv");
+	glad_glVertexAttribP4ui = (PFNGLVERTEXATTRIBP4UIPROC)load("glVertexAttribP4ui");
+	glad_glVertexAttribP4uiv = (PFNGLVERTEXATTRIBP4UIVPROC)load("glVertexAttribP4uiv");
+	glad_glVertexP2ui = (PFNGLVERTEXP2UIPROC)load("glVertexP2ui");
+	glad_glVertexP2uiv = (PFNGLVERTEXP2UIVPROC)load("glVertexP2uiv");
+	glad_glVertexP3ui = (PFNGLVERTEXP3UIPROC)load("glVertexP3ui");
+	glad_glVertexP3uiv = (PFNGLVERTEXP3UIVPROC)load("glVertexP3uiv");
+	glad_glVertexP4ui = (PFNGLVERTEXP4UIPROC)load("glVertexP4ui");
+	glad_glVertexP4uiv = (PFNGLVERTEXP4UIVPROC)load("glVertexP4uiv");
+	glad_glTexCoordP1ui = (PFNGLTEXCOORDP1UIPROC)load("glTexCoordP1ui");
+	glad_glTexCoordP1uiv = (PFNGLTEXCOORDP1UIVPROC)load("glTexCoordP1uiv");
+	glad_glTexCoordP2ui = (PFNGLTEXCOORDP2UIPROC)load("glTexCoordP2ui");
+	glad_glTexCoordP2uiv = (PFNGLTEXCOORDP2UIVPROC)load("glTexCoordP2uiv");
+	glad_glTexCoordP3ui = (PFNGLTEXCOORDP3UIPROC)load("glTexCoordP3ui");
+	glad_glTexCoordP3uiv = (PFNGLTEXCOORDP3UIVPROC)load("glTexCoordP3uiv");
+	glad_glTexCoordP4ui = (PFNGLTEXCOORDP4UIPROC)load("glTexCoordP4ui");
+	glad_glTexCoordP4uiv = (PFNGLTEXCOORDP4UIVPROC)load("glTexCoordP4uiv");
+	glad_glMultiTexCoordP1ui = (PFNGLMULTITEXCOORDP1UIPROC)load("glMultiTexCoordP1ui");
+	glad_glMultiTexCoordP1uiv = (PFNGLMULTITEXCOORDP1UIVPROC)load("glMultiTexCoordP1uiv");
+	glad_glMultiTexCoordP2ui = (PFNGLMULTITEXCOORDP2UIPROC)load("glMultiTexCoordP2ui");
+	glad_glMultiTexCoordP2uiv = (PFNGLMULTITEXCOORDP2UIVPROC)load("glMultiTexCoordP2uiv");
+	glad_glMultiTexCoordP3ui = (PFNGLMULTITEXCOORDP3UIPROC)load("glMultiTexCoordP3ui");
+	glad_glMultiTexCoordP3uiv = (PFNGLMULTITEXCOORDP3UIVPROC)load("glMultiTexCoordP3uiv");
+	glad_glMultiTexCoordP4ui = (PFNGLMULTITEXCOORDP4UIPROC)load("glMultiTexCoordP4ui");
+	glad_glMultiTexCoordP4uiv = (PFNGLMULTITEXCOORDP4UIVPROC)load("glMultiTexCoordP4uiv");
+	glad_glNormalP3ui = (PFNGLNORMALP3UIPROC)load("glNormalP3ui");
+	glad_glNormalP3uiv = (PFNGLNORMALP3UIVPROC)load("glNormalP3uiv");
+	glad_glColorP3ui = (PFNGLCOLORP3UIPROC)load("glColorP3ui");
+	glad_glColorP3uiv = (PFNGLCOLORP3UIVPROC)load("glColorP3uiv");
+	glad_glColorP4ui = (PFNGLCOLORP4UIPROC)load("glColorP4ui");
+	glad_glColorP4uiv = (PFNGLCOLORP4UIVPROC)load("glColorP4uiv");
+	glad_glSecondaryColorP3ui = (PFNGLSECONDARYCOLORP3UIPROC)load("glSecondaryColorP3ui");
+	glad_glSecondaryColorP3uiv = (PFNGLSECONDARYCOLORP3UIVPROC)load("glSecondaryColorP3uiv");
+}
+static void load_GL_APPLE_element_array(GLADloadproc load) {
+	if(!GLAD_GL_APPLE_element_array) return;
+	glad_glElementPointerAPPLE = (PFNGLELEMENTPOINTERAPPLEPROC)load("glElementPointerAPPLE");
+	glad_glDrawElementArrayAPPLE = (PFNGLDRAWELEMENTARRAYAPPLEPROC)load("glDrawElementArrayAPPLE");
+	glad_glDrawRangeElementArrayAPPLE = (PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC)load("glDrawRangeElementArrayAPPLE");
+	glad_glMultiDrawElementArrayAPPLE = (PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC)load("glMultiDrawElementArrayAPPLE");
+	glad_glMultiDrawRangeElementArrayAPPLE = (PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC)load("glMultiDrawRangeElementArrayAPPLE");
+}
+static void load_GL_AMD_multi_draw_indirect(GLADloadproc load) {
+	if(!GLAD_GL_AMD_multi_draw_indirect) return;
+	glad_glMultiDrawArraysIndirectAMD = (PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC)load("glMultiDrawArraysIndirectAMD");
+	glad_glMultiDrawElementsIndirectAMD = (PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC)load("glMultiDrawElementsIndirectAMD");
+}
+static void load_GL_SGIX_tag_sample_buffer(GLADloadproc load) {
+	if(!GLAD_GL_SGIX_tag_sample_buffer) return;
+	glad_glTagSampleBufferSGIX = (PFNGLTAGSAMPLEBUFFERSGIXPROC)load("glTagSampleBufferSGIX");
+}
+static void load_GL_NV_point_sprite(GLADloadproc load) {
+	if(!GLAD_GL_NV_point_sprite) return;
+	glad_glPointParameteriNV = (PFNGLPOINTPARAMETERINVPROC)load("glPointParameteriNV");
+	glad_glPointParameterivNV = (PFNGLPOINTPARAMETERIVNVPROC)load("glPointParameterivNV");
+}
+static void load_GL_ATI_separate_stencil(GLADloadproc load) {
+	if(!GLAD_GL_ATI_separate_stencil) return;
+	glad_glStencilOpSeparateATI = (PFNGLSTENCILOPSEPARATEATIPROC)load("glStencilOpSeparateATI");
+	glad_glStencilFuncSeparateATI = (PFNGLSTENCILFUNCSEPARATEATIPROC)load("glStencilFuncSeparateATI");
+}
+static void load_GL_EXT_texture_buffer_object(GLADloadproc load) {
+	if(!GLAD_GL_EXT_texture_buffer_object) return;
+	glad_glTexBufferEXT = (PFNGLTEXBUFFEREXTPROC)load("glTexBufferEXT");
+}
+static void load_GL_ARB_vertex_blend(GLADloadproc load) {
+	if(!GLAD_GL_ARB_vertex_blend) return;
+	glad_glWeightbvARB = (PFNGLWEIGHTBVARBPROC)load("glWeightbvARB");
+	glad_glWeightsvARB = (PFNGLWEIGHTSVARBPROC)load("glWeightsvARB");
+	glad_glWeightivARB = (PFNGLWEIGHTIVARBPROC)load("glWeightivARB");
+	glad_glWeightfvARB = (PFNGLWEIGHTFVARBPROC)load("glWeightfvARB");
+	glad_glWeightdvARB = (PFNGLWEIGHTDVARBPROC)load("glWeightdvARB");
+	glad_glWeightubvARB = (PFNGLWEIGHTUBVARBPROC)load("glWeightubvARB");
+	glad_glWeightusvARB = (PFNGLWEIGHTUSVARBPROC)load("glWeightusvARB");
+	glad_glWeightuivARB = (PFNGLWEIGHTUIVARBPROC)load("glWeightuivARB");
+	glad_glWeightPointerARB = (PFNGLWEIGHTPOINTERARBPROC)load("glWeightPointerARB");
+	glad_glVertexBlendARB = (PFNGLVERTEXBLENDARBPROC)load("glVertexBlendARB");
+}
+static void load_GL_OVR_multiview(GLADloadproc load) {
+	if(!GLAD_GL_OVR_multiview) return;
+	glad_glFramebufferTextureMultiviewOVR = (PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC)load("glFramebufferTextureMultiviewOVR");
+}
+static void load_GL_ARB_program_interface_query(GLADloadproc load) {
+	if(!GLAD_GL_ARB_program_interface_query) return;
+	glad_glGetProgramInterfaceiv = (PFNGLGETPROGRAMINTERFACEIVPROC)load("glGetProgramInterfaceiv");
+	glad_glGetProgramResourceIndex = (PFNGLGETPROGRAMRESOURCEINDEXPROC)load("glGetProgramResourceIndex");
+	glad_glGetProgramResourceName = (PFNGLGETPROGRAMRESOURCENAMEPROC)load("glGetProgramResourceName");
+	glad_glGetProgramResourceiv = (PFNGLGETPROGRAMRESOURCEIVPROC)load("glGetProgramResourceiv");
+	glad_glGetProgramResourceLocation = (PFNGLGETPROGRAMRESOURCELOCATIONPROC)load("glGetProgramResourceLocation");
+	glad_glGetProgramResourceLocationIndex = (PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC)load("glGetProgramResourceLocationIndex");
+}
+static void load_GL_EXT_index_func(GLADloadproc load) {
+	if(!GLAD_GL_EXT_index_func) return;
+	glad_glIndexFuncEXT = (PFNGLINDEXFUNCEXTPROC)load("glIndexFuncEXT");
+}
+static void load_GL_NV_shader_buffer_load(GLADloadproc load) {
+	if(!GLAD_GL_NV_shader_buffer_load) return;
+	glad_glMakeBufferResidentNV = (PFNGLMAKEBUFFERRESIDENTNVPROC)load("glMakeBufferResidentNV");
+	glad_glMakeBufferNonResidentNV = (PFNGLMAKEBUFFERNONRESIDENTNVPROC)load("glMakeBufferNonResidentNV");
+	glad_glIsBufferResidentNV = (PFNGLISBUFFERRESIDENTNVPROC)load("glIsBufferResidentNV");
+	glad_glMakeNamedBufferResidentNV = (PFNGLMAKENAMEDBUFFERRESIDENTNVPROC)load("glMakeNamedBufferResidentNV");
+	glad_glMakeNamedBufferNonResidentNV = (PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC)load("glMakeNamedBufferNonResidentNV");
+	glad_glIsNamedBufferResidentNV = (PFNGLISNAMEDBUFFERRESIDENTNVPROC)load("glIsNamedBufferResidentNV");
+	glad_glGetBufferParameterui64vNV = (PFNGLGETBUFFERPARAMETERUI64VNVPROC)load("glGetBufferParameterui64vNV");
+	glad_glGetNamedBufferParameterui64vNV = (PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC)load("glGetNamedBufferParameterui64vNV");
+	glad_glGetIntegerui64vNV = (PFNGLGETINTEGERUI64VNVPROC)load("glGetIntegerui64vNV");
+	glad_glUniformui64NV = (PFNGLUNIFORMUI64NVPROC)load("glUniformui64NV");
+	glad_glUniformui64vNV = (PFNGLUNIFORMUI64VNVPROC)load("glUniformui64vNV");
+	glad_glGetUniformui64vNV = (PFNGLGETUNIFORMUI64VNVPROC)load("glGetUniformui64vNV");
+	glad_glProgramUniformui64NV = (PFNGLPROGRAMUNIFORMUI64NVPROC)load("glProgramUniformui64NV");
+	glad_glProgramUniformui64vNV = (PFNGLPROGRAMUNIFORMUI64VNVPROC)load("glProgramUniformui64vNV");
+}
+static void load_GL_EXT_color_subtable(GLADloadproc load) {
+	if(!GLAD_GL_EXT_color_subtable) return;
+	glad_glColorSubTableEXT = (PFNGLCOLORSUBTABLEEXTPROC)load("glColorSubTableEXT");
+	glad_glCopyColorSubTableEXT = (PFNGLCOPYCOLORSUBTABLEEXTPROC)load("glCopyColorSubTableEXT");
+}
+static void load_GL_SUNX_constant_data(GLADloadproc load) {
+	if(!GLAD_GL_SUNX_constant_data) return;
+	glad_glFinishTextureSUNX = (PFNGLFINISHTEXTURESUNXPROC)load("glFinishTextureSUNX");
+}
+static void load_GL_EXT_multi_draw_arrays(GLADloadproc load) {
+	if(!GLAD_GL_EXT_multi_draw_arrays) return;
+	glad_glMultiDrawArraysEXT = (PFNGLMULTIDRAWARRAYSEXTPROC)load("glMultiDrawArraysEXT");
+	glad_glMultiDrawElementsEXT = (PFNGLMULTIDRAWELEMENTSEXTPROC)load("glMultiDrawElementsEXT");
+}
+static void load_GL_ARB_shader_atomic_counters(GLADloadproc load) {
+	if(!GLAD_GL_ARB_shader_atomic_counters) return;
+	glad_glGetActiveAtomicCounterBufferiv = (PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC)load("glGetActiveAtomicCounterBufferiv");
+}
+static void load_GL_NV_conditional_render(GLADloadproc load) {
+	if(!GLAD_GL_NV_conditional_render) return;
+	glad_glBeginConditionalRenderNV = (PFNGLBEGINCONDITIONALRENDERNVPROC)load("glBeginConditionalRenderNV");
+	glad_glEndConditionalRenderNV = (PFNGLENDCONDITIONALRENDERNVPROC)load("glEndConditionalRenderNV");
+}
+static void load_GL_MESA_resize_buffers(GLADloadproc load) {
+	if(!GLAD_GL_MESA_resize_buffers) return;
+	glad_glResizeBuffersMESA = (PFNGLRESIZEBUFFERSMESAPROC)load("glResizeBuffersMESA");
+}
+static void load_GL_ARB_texture_view(GLADloadproc load) {
+	if(!GLAD_GL_ARB_texture_view) return;
+	glad_glTextureView = (PFNGLTEXTUREVIEWPROC)load("glTextureView");
+}
+static void load_GL_ARB_map_buffer_range(GLADloadproc load) {
+	if(!GLAD_GL_ARB_map_buffer_range) return;
+	glad_glMapBufferRange = (PFNGLMAPBUFFERRANGEPROC)load("glMapBufferRange");
+	glad_glFlushMappedBufferRange = (PFNGLFLUSHMAPPEDBUFFERRANGEPROC)load("glFlushMappedBufferRange");
+}
+static void load_GL_EXT_convolution(GLADloadproc load) {
+	if(!GLAD_GL_EXT_convolution) return;
+	glad_glConvolutionFilter1DEXT = (PFNGLCONVOLUTIONFILTER1DEXTPROC)load("glConvolutionFilter1DEXT");
+	glad_glConvolutionFilter2DEXT = (PFNGLCONVOLUTIONFILTER2DEXTPROC)load("glConvolutionFilter2DEXT");
+	glad_glConvolutionParameterfEXT = (PFNGLCONVOLUTIONPARAMETERFEXTPROC)load("glConvolutionParameterfEXT");
+	glad_glConvolutionParameterfvEXT = (PFNGLCONVOLUTIONPARAMETERFVEXTPROC)load("glConvolutionParameterfvEXT");
+	glad_glConvolutionParameteriEXT = (PFNGLCONVOLUTIONPARAMETERIEXTPROC)load("glConvolutionParameteriEXT");
+	glad_glConvolutionParameterivEXT = (PFNGLCONVOLUTIONPARAMETERIVEXTPROC)load("glConvolutionParameterivEXT");
+	glad_glCopyConvolutionFilter1DEXT = (PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC)load("glCopyConvolutionFilter1DEXT");
+	glad_glCopyConvolutionFilter2DEXT = (PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC)load("glCopyConvolutionFilter2DEXT");
+	glad_glGetConvolutionFilterEXT = (PFNGLGETCONVOLUTIONFILTEREXTPROC)load("glGetConvolutionFilterEXT");
+	glad_glGetConvolutionParameterfvEXT = (PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC)load("glGetConvolutionParameterfvEXT");
+	glad_glGetConvolutionParameterivEXT = (PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC)load("glGetConvolutionParameterivEXT");
+	glad_glGetSeparableFilterEXT = (PFNGLGETSEPARABLEFILTEREXTPROC)load("glGetSeparableFilterEXT");
+	glad_glSeparableFilter2DEXT = (PFNGLSEPARABLEFILTER2DEXTPROC)load("glSeparableFilter2DEXT");
+}
+static void load_GL_NV_vertex_attrib_integer_64bit(GLADloadproc load) {
+	if(!GLAD_GL_NV_vertex_attrib_integer_64bit) return;
+	glad_glVertexAttribL1i64NV = (PFNGLVERTEXATTRIBL1I64NVPROC)load("glVertexAttribL1i64NV");
+	glad_glVertexAttribL2i64NV = (PFNGLVERTEXATTRIBL2I64NVPROC)load("glVertexAttribL2i64NV");
+	glad_glVertexAttribL3i64NV = (PFNGLVERTEXATTRIBL3I64NVPROC)load("glVertexAttribL3i64NV");
+	glad_glVertexAttribL4i64NV = (PFNGLVERTEXATTRIBL4I64NVPROC)load("glVertexAttribL4i64NV");
+	glad_glVertexAttribL1i64vNV = (PFNGLVERTEXATTRIBL1I64VNVPROC)load("glVertexAttribL1i64vNV");
+	glad_glVertexAttribL2i64vNV = (PFNGLVERTEXATTRIBL2I64VNVPROC)load("glVertexAttribL2i64vNV");
+	glad_glVertexAttribL3i64vNV = (PFNGLVERTEXATTRIBL3I64VNVPROC)load("glVertexAttribL3i64vNV");
+	glad_glVertexAttribL4i64vNV = (PFNGLVERTEXATTRIBL4I64VNVPROC)load("glVertexAttribL4i64vNV");
+	glad_glVertexAttribL1ui64NV = (PFNGLVERTEXATTRIBL1UI64NVPROC)load("glVertexAttribL1ui64NV");
+	glad_glVertexAttribL2ui64NV = (PFNGLVERTEXATTRIBL2UI64NVPROC)load("glVertexAttribL2ui64NV");
+	glad_glVertexAttribL3ui64NV = (PFNGLVERTEXATTRIBL3UI64NVPROC)load("glVertexAttribL3ui64NV");
+	glad_glVertexAttribL4ui64NV = (PFNGLVERTEXATTRIBL4UI64NVPROC)load("glVertexAttribL4ui64NV");
+	glad_glVertexAttribL1ui64vNV = (PFNGLVERTEXATTRIBL1UI64VNVPROC)load("glVertexAttribL1ui64vNV");
+	glad_glVertexAttribL2ui64vNV = (PFNGLVERTEXATTRIBL2UI64VNVPROC)load("glVertexAttribL2ui64vNV");
+	glad_glVertexAttribL3ui64vNV = (PFNGLVERTEXATTRIBL3UI64VNVPROC)load("glVertexAttribL3ui64vNV");
+	glad_glVertexAttribL4ui64vNV = (PFNGLVERTEXATTRIBL4UI64VNVPROC)load("glVertexAttribL4ui64vNV");
+	glad_glGetVertexAttribLi64vNV = (PFNGLGETVERTEXATTRIBLI64VNVPROC)load("glGetVertexAttribLi64vNV");
+	glad_glGetVertexAttribLui64vNV = (PFNGLGETVERTEXATTRIBLUI64VNVPROC)load("glGetVertexAttribLui64vNV");
+	glad_glVertexAttribLFormatNV = (PFNGLVERTEXATTRIBLFORMATNVPROC)load("glVertexAttribLFormatNV");
+}
+static void load_GL_EXT_paletted_texture(GLADloadproc load) {
+	if(!GLAD_GL_EXT_paletted_texture) return;
+	glad_glColorTableEXT = (PFNGLCOLORTABLEEXTPROC)load("glColorTableEXT");
+	glad_glGetColorTableEXT = (PFNGLGETCOLORTABLEEXTPROC)load("glGetColorTableEXT");
+	glad_glGetColorTableParameterivEXT = (PFNGLGETCOLORTABLEPARAMETERIVEXTPROC)load("glGetColorTableParameterivEXT");
+	glad_glGetColorTableParameterfvEXT = (PFNGLGETCOLORTABLEPARAMETERFVEXTPROC)load("glGetColorTableParameterfvEXT");
+}
+static void load_GL_ARB_texture_buffer_object(GLADloadproc load) {
+	if(!GLAD_GL_ARB_texture_buffer_object) return;
+	glad_glTexBufferARB = (PFNGLTEXBUFFERARBPROC)load("glTexBufferARB");
+}
+static void load_GL_ATI_pn_triangles(GLADloadproc load) {
+	if(!GLAD_GL_ATI_pn_triangles) return;
+	glad_glPNTrianglesiATI = (PFNGLPNTRIANGLESIATIPROC)load("glPNTrianglesiATI");
+	glad_glPNTrianglesfATI = (PFNGLPNTRIANGLESFATIPROC)load("glPNTrianglesfATI");
+}
+static void load_GL_SGIX_flush_raster(GLADloadproc load) {
+	if(!GLAD_GL_SGIX_flush_raster) return;
+	glad_glFlushRasterSGIX = (PFNGLFLUSHRASTERSGIXPROC)load("glFlushRasterSGIX");
+}
+static void load_GL_EXT_light_texture(GLADloadproc load) {
+	if(!GLAD_GL_EXT_light_texture) return;
+	glad_glApplyTextureEXT = (PFNGLAPPLYTEXTUREEXTPROC)load("glApplyTextureEXT");
+	glad_glTextureLightEXT = (PFNGLTEXTURELIGHTEXTPROC)load("glTextureLightEXT");
+	glad_glTextureMaterialEXT = (PFNGLTEXTUREMATERIALEXTPROC)load("glTextureMaterialEXT");
+}
+static void load_GL_HP_image_transform(GLADloadproc load) {
+	if(!GLAD_GL_HP_image_transform) return;
+	glad_glImageTransformParameteriHP = (PFNGLIMAGETRANSFORMPARAMETERIHPPROC)load("glImageTransformParameteriHP");
+	glad_glImageTransformParameterfHP = (PFNGLIMAGETRANSFORMPARAMETERFHPPROC)load("glImageTransformParameterfHP");
+	glad_glImageTransformParameterivHP = (PFNGLIMAGETRANSFORMPARAMETERIVHPPROC)load("glImageTransformParameterivHP");
+	glad_glImageTransformParameterfvHP = (PFNGLIMAGETRANSFORMPARAMETERFVHPPROC)load("glImageTransformParameterfvHP");
+	glad_glGetImageTransformParameterivHP = (PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC)load("glGetImageTransformParameterivHP");
+	glad_glGetImageTransformParameterfvHP = (PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC)load("glGetImageTransformParameterfvHP");
+}
+static void load_GL_AMD_draw_buffers_blend(GLADloadproc load) {
+	if(!GLAD_GL_AMD_draw_buffers_blend) return;
+	glad_glBlendFuncIndexedAMD = (PFNGLBLENDFUNCINDEXEDAMDPROC)load("glBlendFuncIndexedAMD");
+	glad_glBlendFuncSeparateIndexedAMD = (PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC)load("glBlendFuncSeparateIndexedAMD");
+	glad_glBlendEquationIndexedAMD = (PFNGLBLENDEQUATIONINDEXEDAMDPROC)load("glBlendEquationIndexedAMD");
+	glad_glBlendEquationSeparateIndexedAMD = (PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC)load("glBlendEquationSeparateIndexedAMD");
+}
+static void load_GL_APPLE_texture_range(GLADloadproc load) {
+	if(!GLAD_GL_APPLE_texture_range) return;
+	glad_glTextureRangeAPPLE = (PFNGLTEXTURERANGEAPPLEPROC)load("glTextureRangeAPPLE");
+	glad_glGetTexParameterPointervAPPLE = (PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC)load("glGetTexParameterPointervAPPLE");
+}
+static void load_GL_EXT_texture_array(GLADloadproc load) {
+	if(!GLAD_GL_EXT_texture_array) return;
+	glad_glFramebufferTextureLayerEXT = (PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC)load("glFramebufferTextureLayerEXT");
+}
+static void load_GL_NV_texture_barrier(GLADloadproc load) {
+	if(!GLAD_GL_NV_texture_barrier) return;
+	glad_glTextureBarrierNV = (PFNGLTEXTUREBARRIERNVPROC)load("glTextureBarrierNV");
+}
+static void load_GL_ARB_vertex_type_2_10_10_10_rev(GLADloadproc load) {
+	if(!GLAD_GL_ARB_vertex_type_2_10_10_10_rev) return;
+	glad_glVertexAttribP1ui = (PFNGLVERTEXATTRIBP1UIPROC)load("glVertexAttribP1ui");
+	glad_glVertexAttribP1uiv = (PFNGLVERTEXATTRIBP1UIVPROC)load("glVertexAttribP1uiv");
+	glad_glVertexAttribP2ui = (PFNGLVERTEXATTRIBP2UIPROC)load("glVertexAttribP2ui");
+	glad_glVertexAttribP2uiv = (PFNGLVERTEXATTRIBP2UIVPROC)load("glVertexAttribP2uiv");
+	glad_glVertexAttribP3ui = (PFNGLVERTEXATTRIBP3UIPROC)load("glVertexAttribP3ui");
+	glad_glVertexAttribP3uiv = (PFNGLVERTEXATTRIBP3UIVPROC)load("glVertexAttribP3uiv");
+	glad_glVertexAttribP4ui = (PFNGLVERTEXATTRIBP4UIPROC)load("glVertexAttribP4ui");
+	glad_glVertexAttribP4uiv = (PFNGLVERTEXATTRIBP4UIVPROC)load("glVertexAttribP4uiv");
+	glad_glVertexP2ui = (PFNGLVERTEXP2UIPROC)load("glVertexP2ui");
+	glad_glVertexP2uiv = (PFNGLVERTEXP2UIVPROC)load("glVertexP2uiv");
+	glad_glVertexP3ui = (PFNGLVERTEXP3UIPROC)load("glVertexP3ui");
+	glad_glVertexP3uiv = (PFNGLVERTEXP3UIVPROC)load("glVertexP3uiv");
+	glad_glVertexP4ui = (PFNGLVERTEXP4UIPROC)load("glVertexP4ui");
+	glad_glVertexP4uiv = (PFNGLVERTEXP4UIVPROC)load("glVertexP4uiv");
+	glad_glTexCoordP1ui = (PFNGLTEXCOORDP1UIPROC)load("glTexCoordP1ui");
+	glad_glTexCoordP1uiv = (PFNGLTEXCOORDP1UIVPROC)load("glTexCoordP1uiv");
+	glad_glTexCoordP2ui = (PFNGLTEXCOORDP2UIPROC)load("glTexCoordP2ui");
+	glad_glTexCoordP2uiv = (PFNGLTEXCOORDP2UIVPROC)load("glTexCoordP2uiv");
+	glad_glTexCoordP3ui = (PFNGLTEXCOORDP3UIPROC)load("glTexCoordP3ui");
+	glad_glTexCoordP3uiv = (PFNGLTEXCOORDP3UIVPROC)load("glTexCoordP3uiv");
+	glad_glTexCoordP4ui = (PFNGLTEXCOORDP4UIPROC)load("glTexCoordP4ui");
+	glad_glTexCoordP4uiv = (PFNGLTEXCOORDP4UIVPROC)load("glTexCoordP4uiv");
+	glad_glMultiTexCoordP1ui = (PFNGLMULTITEXCOORDP1UIPROC)load("glMultiTexCoordP1ui");
+	glad_glMultiTexCoordP1uiv = (PFNGLMULTITEXCOORDP1UIVPROC)load("glMultiTexCoordP1uiv");
+	glad_glMultiTexCoordP2ui = (PFNGLMULTITEXCOORDP2UIPROC)load("glMultiTexCoordP2ui");
+	glad_glMultiTexCoordP2uiv = (PFNGLMULTITEXCOORDP2UIVPROC)load("glMultiTexCoordP2uiv");
+	glad_glMultiTexCoordP3ui = (PFNGLMULTITEXCOORDP3UIPROC)load("glMultiTexCoordP3ui");
+	glad_glMultiTexCoordP3uiv = (PFNGLMULTITEXCOORDP3UIVPROC)load("glMultiTexCoordP3uiv");
+	glad_glMultiTexCoordP4ui = (PFNGLMULTITEXCOORDP4UIPROC)load("glMultiTexCoordP4ui");
+	glad_glMultiTexCoordP4uiv = (PFNGLMULTITEXCOORDP4UIVPROC)load("glMultiTexCoordP4uiv");
+	glad_glNormalP3ui = (PFNGLNORMALP3UIPROC)load("glNormalP3ui");
+	glad_glNormalP3uiv = (PFNGLNORMALP3UIVPROC)load("glNormalP3uiv");
+	glad_glColorP3ui = (PFNGLCOLORP3UIPROC)load("glColorP3ui");
+	glad_glColorP3uiv = (PFNGLCOLORP3UIVPROC)load("glColorP3uiv");
+	glad_glColorP4ui = (PFNGLCOLORP4UIPROC)load("glColorP4ui");
+	glad_glColorP4uiv = (PFNGLCOLORP4UIVPROC)load("glColorP4uiv");
+	glad_glSecondaryColorP3ui = (PFNGLSECONDARYCOLORP3UIPROC)load("glSecondaryColorP3ui");
+	glad_glSecondaryColorP3uiv = (PFNGLSECONDARYCOLORP3UIVPROC)load("glSecondaryColorP3uiv");
+}
+static void load_GL_3DFX_tbuffer(GLADloadproc load) {
+	if(!GLAD_GL_3DFX_tbuffer) return;
+	glad_glTbufferMask3DFX = (PFNGLTBUFFERMASK3DFXPROC)load("glTbufferMask3DFX");
+}
+static void load_GL_GREMEDY_frame_terminator(GLADloadproc load) {
+	if(!GLAD_GL_GREMEDY_frame_terminator) return;
+	glad_glFrameTerminatorGREMEDY = (PFNGLFRAMETERMINATORGREMEDYPROC)load("glFrameTerminatorGREMEDY");
+}
+static void load_GL_ARB_blend_func_extended(GLADloadproc load) {
+	if(!GLAD_GL_ARB_blend_func_extended) return;
+	glad_glBindFragDataLocationIndexed = (PFNGLBINDFRAGDATALOCATIONINDEXEDPROC)load("glBindFragDataLocationIndexed");
+	glad_glGetFragDataIndex = (PFNGLGETFRAGDATAINDEXPROC)load("glGetFragDataIndex");
+}
+static void load_GL_EXT_separate_shader_objects(GLADloadproc load) {
+	if(!GLAD_GL_EXT_separate_shader_objects) return;
+	glad_glUseShaderProgramEXT = (PFNGLUSESHADERPROGRAMEXTPROC)load("glUseShaderProgramEXT");
+	glad_glActiveProgramEXT = (PFNGLACTIVEPROGRAMEXTPROC)load("glActiveProgramEXT");
+	glad_glCreateShaderProgramEXT = (PFNGLCREATESHADERPROGRAMEXTPROC)load("glCreateShaderProgramEXT");
+	glad_glActiveShaderProgramEXT = (PFNGLACTIVESHADERPROGRAMEXTPROC)load("glActiveShaderProgramEXT");
+	glad_glBindProgramPipelineEXT = (PFNGLBINDPROGRAMPIPELINEEXTPROC)load("glBindProgramPipelineEXT");
+	glad_glCreateShaderProgramvEXT = (PFNGLCREATESHADERPROGRAMVEXTPROC)load("glCreateShaderProgramvEXT");
+	glad_glDeleteProgramPipelinesEXT = (PFNGLDELETEPROGRAMPIPELINESEXTPROC)load("glDeleteProgramPipelinesEXT");
+	glad_glGenProgramPipelinesEXT = (PFNGLGENPROGRAMPIPELINESEXTPROC)load("glGenProgramPipelinesEXT");
+	glad_glGetProgramPipelineInfoLogEXT = (PFNGLGETPROGRAMPIPELINEINFOLOGEXTPROC)load("glGetProgramPipelineInfoLogEXT");
+	glad_glGetProgramPipelineivEXT = (PFNGLGETPROGRAMPIPELINEIVEXTPROC)load("glGetProgramPipelineivEXT");
+	glad_glIsProgramPipelineEXT = (PFNGLISPROGRAMPIPELINEEXTPROC)load("glIsProgramPipelineEXT");
+	glad_glProgramParameteriEXT = (PFNGLPROGRAMPARAMETERIEXTPROC)load("glProgramParameteriEXT");
+	glad_glProgramUniform1fEXT = (PFNGLPROGRAMUNIFORM1FEXTPROC)load("glProgramUniform1fEXT");
+	glad_glProgramUniform1fvEXT = (PFNGLPROGRAMUNIFORM1FVEXTPROC)load("glProgramUniform1fvEXT");
+	glad_glProgramUniform1iEXT = (PFNGLPROGRAMUNIFORM1IEXTPROC)load("glProgramUniform1iEXT");
+	glad_glProgramUniform1ivEXT = (PFNGLPROGRAMUNIFORM1IVEXTPROC)load("glProgramUniform1ivEXT");
+	glad_glProgramUniform2fEXT = (PFNGLPROGRAMUNIFORM2FEXTPROC)load("glProgramUniform2fEXT");
+	glad_glProgramUniform2fvEXT = (PFNGLPROGRAMUNIFORM2FVEXTPROC)load("glProgramUniform2fvEXT");
+	glad_glProgramUniform2iEXT = (PFNGLPROGRAMUNIFORM2IEXTPROC)load("glProgramUniform2iEXT");
+	glad_glProgramUniform2ivEXT = (PFNGLPROGRAMUNIFORM2IVEXTPROC)load("glProgramUniform2ivEXT");
+	glad_glProgramUniform3fEXT = (PFNGLPROGRAMUNIFORM3FEXTPROC)load("glProgramUniform3fEXT");
+	glad_glProgramUniform3fvEXT = (PFNGLPROGRAMUNIFORM3FVEXTPROC)load("glProgramUniform3fvEXT");
+	glad_glProgramUniform3iEXT = (PFNGLPROGRAMUNIFORM3IEXTPROC)load("glProgramUniform3iEXT");
+	glad_glProgramUniform3ivEXT = (PFNGLPROGRAMUNIFORM3IVEXTPROC)load("glProgramUniform3ivEXT");
+	glad_glProgramUniform4fEXT = (PFNGLPROGRAMUNIFORM4FEXTPROC)load("glProgramUniform4fEXT");
+	glad_glProgramUniform4fvEXT = (PFNGLPROGRAMUNIFORM4FVEXTPROC)load("glProgramUniform4fvEXT");
+	glad_glProgramUniform4iEXT = (PFNGLPROGRAMUNIFORM4IEXTPROC)load("glProgramUniform4iEXT");
+	glad_glProgramUniform4ivEXT = (PFNGLPROGRAMUNIFORM4IVEXTPROC)load("glProgramUniform4ivEXT");
+	glad_glProgramUniformMatrix2fvEXT = (PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC)load("glProgramUniformMatrix2fvEXT");
+	glad_glProgramUniformMatrix3fvEXT = (PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC)load("glProgramUniformMatrix3fvEXT");
+	glad_glProgramUniformMatrix4fvEXT = (PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC)load("glProgramUniformMatrix4fvEXT");
+	glad_glUseProgramStagesEXT = (PFNGLUSEPROGRAMSTAGESEXTPROC)load("glUseProgramStagesEXT");
+	glad_glValidateProgramPipelineEXT = (PFNGLVALIDATEPROGRAMPIPELINEEXTPROC)load("glValidateProgramPipelineEXT");
+	glad_glProgramUniform1uiEXT = (PFNGLPROGRAMUNIFORM1UIEXTPROC)load("glProgramUniform1uiEXT");
+	glad_glProgramUniform2uiEXT = (PFNGLPROGRAMUNIFORM2UIEXTPROC)load("glProgramUniform2uiEXT");
+	glad_glProgramUniform3uiEXT = (PFNGLPROGRAMUNIFORM3UIEXTPROC)load("glProgramUniform3uiEXT");
+	glad_glProgramUniform4uiEXT = (PFNGLPROGRAMUNIFORM4UIEXTPROC)load("glProgramUniform4uiEXT");
+	glad_glProgramUniform1uivEXT = (PFNGLPROGRAMUNIFORM1UIVEXTPROC)load("glProgramUniform1uivEXT");
+	glad_glProgramUniform2uivEXT = (PFNGLPROGRAMUNIFORM2UIVEXTPROC)load("glProgramUniform2uivEXT");
+	glad_glProgramUniform3uivEXT = (PFNGLPROGRAMUNIFORM3UIVEXTPROC)load("glProgramUniform3uivEXT");
+	glad_glProgramUniform4uivEXT = (PFNGLPROGRAMUNIFORM4UIVEXTPROC)load("glProgramUniform4uivEXT");
+	glad_glProgramUniformMatrix4fvEXT = (PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC)load("glProgramUniformMatrix4fvEXT");
+	glad_glProgramUniformMatrix2x3fvEXT = (PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC)load("glProgramUniformMatrix2x3fvEXT");
+	glad_glProgramUniformMatrix3x2fvEXT = (PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC)load("glProgramUniformMatrix3x2fvEXT");
+	glad_glProgramUniformMatrix2x4fvEXT = (PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC)load("glProgramUniformMatrix2x4fvEXT");
+	glad_glProgramUniformMatrix4x2fvEXT = (PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC)load("glProgramUniformMatrix4x2fvEXT");
+	glad_glProgramUniformMatrix3x4fvEXT = (PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC)load("glProgramUniformMatrix3x4fvEXT");
+	glad_glProgramUniformMatrix4x3fvEXT = (PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC)load("glProgramUniformMatrix4x3fvEXT");
+}
+static void load_GL_NV_texture_multisample(GLADloadproc load) {
+	if(!GLAD_GL_NV_texture_multisample) return;
+	glad_glTexImage2DMultisampleCoverageNV = (PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC)load("glTexImage2DMultisampleCoverageNV");
+	glad_glTexImage3DMultisampleCoverageNV = (PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC)load("glTexImage3DMultisampleCoverageNV");
+	glad_glTextureImage2DMultisampleNV = (PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC)load("glTextureImage2DMultisampleNV");
+	glad_glTextureImage3DMultisampleNV = (PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC)load("glTextureImage3DMultisampleNV");
+	glad_glTextureImage2DMultisampleCoverageNV = (PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC)load("glTextureImage2DMultisampleCoverageNV");
+	glad_glTextureImage3DMultisampleCoverageNV = (PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC)load("glTextureImage3DMultisampleCoverageNV");
+}
+static void load_GL_ARB_shader_objects(GLADloadproc load) {
+	if(!GLAD_GL_ARB_shader_objects) return;
+	glad_glDeleteObjectARB = (PFNGLDELETEOBJECTARBPROC)load("glDeleteObjectARB");
+	glad_glGetHandleARB = (PFNGLGETHANDLEARBPROC)load("glGetHandleARB");
+	glad_glDetachObjectARB = (PFNGLDETACHOBJECTARBPROC)load("glDetachObjectARB");
+	glad_glCreateShaderObjectARB = (PFNGLCREATESHADEROBJECTARBPROC)load("glCreateShaderObjectARB");
+	glad_glShaderSourceARB = (PFNGLSHADERSOURCEARBPROC)load("glShaderSourceARB");
+	glad_glCompileShaderARB = (PFNGLCOMPILESHADERARBPROC)load("glCompileShaderARB");
+	glad_glCreateProgramObjectARB = (PFNGLCREATEPROGRAMOBJECTARBPROC)load("glCreateProgramObjectARB");
+	glad_glAttachObjectARB = (PFNGLATTACHOBJECTARBPROC)load("glAttachObjectARB");
+	glad_glLinkProgramARB = (PFNGLLINKPROGRAMARBPROC)load("glLinkProgramARB");
+	glad_glUseProgramObjectARB = (PFNGLUSEPROGRAMOBJECTARBPROC)load("glUseProgramObjectARB");
+	glad_glValidateProgramARB = (PFNGLVALIDATEPROGRAMARBPROC)load("glValidateProgramARB");
+	glad_glUniform1fARB = (PFNGLUNIFORM1FARBPROC)load("glUniform1fARB");
+	glad_glUniform2fARB = (PFNGLUNIFORM2FARBPROC)load("glUniform2fARB");
+	glad_glUniform3fARB = (PFNGLUNIFORM3FARBPROC)load("glUniform3fARB");
+	glad_glUniform4fARB = (PFNGLUNIFORM4FARBPROC)load("glUniform4fARB");
+	glad_glUniform1iARB = (PFNGLUNIFORM1IARBPROC)load("glUniform1iARB");
+	glad_glUniform2iARB = (PFNGLUNIFORM2IARBPROC)load("glUniform2iARB");
+	glad_glUniform3iARB = (PFNGLUNIFORM3IARBPROC)load("glUniform3iARB");
+	glad_glUniform4iARB = (PFNGLUNIFORM4IARBPROC)load("glUniform4iARB");
+	glad_glUniform1fvARB = (PFNGLUNIFORM1FVARBPROC)load("glUniform1fvARB");
+	glad_glUniform2fvARB = (PFNGLUNIFORM2FVARBPROC)load("glUniform2fvARB");
+	glad_glUniform3fvARB = (PFNGLUNIFORM3FVARBPROC)load("glUniform3fvARB");
+	glad_glUniform4fvARB = (PFNGLUNIFORM4FVARBPROC)load("glUniform4fvARB");
+	glad_glUniform1ivARB = (PFNGLUNIFORM1IVARBPROC)load("glUniform1ivARB");
+	glad_glUniform2ivARB = (PFNGLUNIFORM2IVARBPROC)load("glUniform2ivARB");
+	glad_glUniform3ivARB = (PFNGLUNIFORM3IVARBPROC)load("glUniform3ivARB");
+	glad_glUniform4ivARB = (PFNGLUNIFORM4IVARBPROC)load("glUniform4ivARB");
+	glad_glUniformMatrix2fvARB = (PFNGLUNIFORMMATRIX2FVARBPROC)load("glUniformMatrix2fvARB");
+	glad_glUniformMatrix3fvARB = (PFNGLUNIFORMMATRIX3FVARBPROC)load("glUniformMatrix3fvARB");
+	glad_glUniformMatrix4fvARB = (PFNGLUNIFORMMATRIX4FVARBPROC)load("glUniformMatrix4fvARB");
+	glad_glGetObjectParameterfvARB = (PFNGLGETOBJECTPARAMETERFVARBPROC)load("glGetObjectParameterfvARB");
+	glad_glGetObjectParameterivARB = (PFNGLGETOBJECTPARAMETERIVARBPROC)load("glGetObjectParameterivARB");
+	glad_glGetInfoLogARB = (PFNGLGETINFOLOGARBPROC)load("glGetInfoLogARB");
+	glad_glGetAttachedObjectsARB = (PFNGLGETATTACHEDOBJECTSARBPROC)load("glGetAttachedObjectsARB");
+	glad_glGetUniformLocationARB = (PFNGLGETUNIFORMLOCATIONARBPROC)load("glGetUniformLocationARB");
+	glad_glGetActiveUniformARB = (PFNGLGETACTIVEUNIFORMARBPROC)load("glGetActiveUniformARB");
+	glad_glGetUniformfvARB = (PFNGLGETUNIFORMFVARBPROC)load("glGetUniformfvARB");
+	glad_glGetUniformivARB = (PFNGLGETUNIFORMIVARBPROC)load("glGetUniformivARB");
+	glad_glGetShaderSourceARB = (PFNGLGETSHADERSOURCEARBPROC)load("glGetShaderSourceARB");
+}
+static void load_GL_ARB_framebuffer_object(GLADloadproc load) {
+	if(!GLAD_GL_ARB_framebuffer_object) return;
+	glad_glIsRenderbuffer = (PFNGLISRENDERBUFFERPROC)load("glIsRenderbuffer");
+	glad_glBindRenderbuffer = (PFNGLBINDRENDERBUFFERPROC)load("glBindRenderbuffer");
+	glad_glDeleteRenderbuffers = (PFNGLDELETERENDERBUFFERSPROC)load("glDeleteRenderbuffers");
+	glad_glGenRenderbuffers = (PFNGLGENRENDERBUFFERSPROC)load("glGenRenderbuffers");
+	glad_glRenderbufferStorage = (PFNGLRENDERBUFFERSTORAGEPROC)load("glRenderbufferStorage");
+	glad_glGetRenderbufferParameteriv = (PFNGLGETRENDERBUFFERPARAMETERIVPROC)load("glGetRenderbufferParameteriv");
+	glad_glIsFramebuffer = (PFNGLISFRAMEBUFFERPROC)load("glIsFramebuffer");
+	glad_glBindFramebuffer = (PFNGLBINDFRAMEBUFFERPROC)load("glBindFramebuffer");
+	glad_glDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC)load("glDeleteFramebuffers");
+	glad_glGenFramebuffers = (PFNGLGENFRAMEBUFFERSPROC)load("glGenFramebuffers");
+	glad_glCheckFramebufferStatus = (PFNGLCHECKFRAMEBUFFERSTATUSPROC)load("glCheckFramebufferStatus");
+	glad_glFramebufferTexture1D = (PFNGLFRAMEBUFFERTEXTURE1DPROC)load("glFramebufferTexture1D");
+	glad_glFramebufferTexture2D = (PFNGLFRAMEBUFFERTEXTURE2DPROC)load("glFramebufferTexture2D");
+	glad_glFramebufferTexture3D = (PFNGLFRAMEBUFFERTEXTURE3DPROC)load("glFramebufferTexture3D");
+	glad_glFramebufferRenderbuffer = (PFNGLFRAMEBUFFERRENDERBUFFERPROC)load("glFramebufferRenderbuffer");
+	glad_glGetFramebufferAttachmentParameteriv = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)load("glGetFramebufferAttachmentParameteriv");
+	glad_glGenerateMipmap = (PFNGLGENERATEMIPMAPPROC)load("glGenerateMipmap");
+	glad_glBlitFramebuffer = (PFNGLBLITFRAMEBUFFERPROC)load("glBlitFramebuffer");
+	glad_glRenderbufferStorageMultisample = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)load("glRenderbufferStorageMultisample");
+	glad_glFramebufferTextureLayer = (PFNGLFRAMEBUFFERTEXTURELAYERPROC)load("glFramebufferTextureLayer");
+}
+static void load_GL_ATI_envmap_bumpmap(GLADloadproc load) {
+	if(!GLAD_GL_ATI_envmap_bumpmap) return;
+	glad_glTexBumpParameterivATI = (PFNGLTEXBUMPPARAMETERIVATIPROC)load("glTexBumpParameterivATI");
+	glad_glTexBumpParameterfvATI = (PFNGLTEXBUMPPARAMETERFVATIPROC)load("glTexBumpParameterfvATI");
+	glad_glGetTexBumpParameterivATI = (PFNGLGETTEXBUMPPARAMETERIVATIPROC)load("glGetTexBumpParameterivATI");
+	glad_glGetTexBumpParameterfvATI = (PFNGLGETTEXBUMPPARAMETERFVATIPROC)load("glGetTexBumpParameterfvATI");
+}
+static void load_GL_ATI_map_object_buffer(GLADloadproc load) {
+	if(!GLAD_GL_ATI_map_object_buffer) return;
+	glad_glMapObjectBufferATI = (PFNGLMAPOBJECTBUFFERATIPROC)load("glMapObjectBufferATI");
+	glad_glUnmapObjectBufferATI = (PFNGLUNMAPOBJECTBUFFERATIPROC)load("glUnmapObjectBufferATI");
+}
+static void load_GL_ARB_robustness(GLADloadproc load) {
+	if(!GLAD_GL_ARB_robustness) return;
+	glad_glGetGraphicsResetStatusARB = (PFNGLGETGRAPHICSRESETSTATUSARBPROC)load("glGetGraphicsResetStatusARB");
+	glad_glGetnTexImageARB = (PFNGLGETNTEXIMAGEARBPROC)load("glGetnTexImageARB");
+	glad_glReadnPixelsARB = (PFNGLREADNPIXELSARBPROC)load("glReadnPixelsARB");
+	glad_glGetnCompressedTexImageARB = (PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC)load("glGetnCompressedTexImageARB");
+	glad_glGetnUniformfvARB = (PFNGLGETNUNIFORMFVARBPROC)load("glGetnUniformfvARB");
+	glad_glGetnUniformivARB = (PFNGLGETNUNIFORMIVARBPROC)load("glGetnUniformivARB");
+	glad_glGetnUniformuivARB = (PFNGLGETNUNIFORMUIVARBPROC)load("glGetnUniformuivARB");
+	glad_glGetnUniformdvARB = (PFNGLGETNUNIFORMDVARBPROC)load("glGetnUniformdvARB");
+	glad_glGetnMapdvARB = (PFNGLGETNMAPDVARBPROC)load("glGetnMapdvARB");
+	glad_glGetnMapfvARB = (PFNGLGETNMAPFVARBPROC)load("glGetnMapfvARB");
+	glad_glGetnMapivARB = (PFNGLGETNMAPIVARBPROC)load("glGetnMapivARB");
+	glad_glGetnPixelMapfvARB = (PFNGLGETNPIXELMAPFVARBPROC)load("glGetnPixelMapfvARB");
+	glad_glGetnPixelMapuivARB = (PFNGLGETNPIXELMAPUIVARBPROC)load("glGetnPixelMapuivARB");
+	glad_glGetnPixelMapusvARB = (PFNGLGETNPIXELMAPUSVARBPROC)load("glGetnPixelMapusvARB");
+	glad_glGetnPolygonStippleARB = (PFNGLGETNPOLYGONSTIPPLEARBPROC)load("glGetnPolygonStippleARB");
+	glad_glGetnColorTableARB = (PFNGLGETNCOLORTABLEARBPROC)load("glGetnColorTableARB");
+	glad_glGetnConvolutionFilterARB = (PFNGLGETNCONVOLUTIONFILTERARBPROC)load("glGetnConvolutionFilterARB");
+	glad_glGetnSeparableFilterARB = (PFNGLGETNSEPARABLEFILTERARBPROC)load("glGetnSeparableFilterARB");
+	glad_glGetnHistogramARB = (PFNGLGETNHISTOGRAMARBPROC)load("glGetnHistogramARB");
+	glad_glGetnMinmaxARB = (PFNGLGETNMINMAXARBPROC)load("glGetnMinmaxARB");
+}
+static void load_GL_NV_pixel_data_range(GLADloadproc load) {
+	if(!GLAD_GL_NV_pixel_data_range) return;
+	glad_glPixelDataRangeNV = (PFNGLPIXELDATARANGENVPROC)load("glPixelDataRangeNV");
+	glad_glFlushPixelDataRangeNV = (PFNGLFLUSHPIXELDATARANGENVPROC)load("glFlushPixelDataRangeNV");
+}
+static void load_GL_EXT_framebuffer_blit(GLADloadproc load) {
+	if(!GLAD_GL_EXT_framebuffer_blit) return;
+	glad_glBlitFramebufferEXT = (PFNGLBLITFRAMEBUFFEREXTPROC)load("glBlitFramebufferEXT");
+}
+static void load_GL_ARB_gpu_shader_fp64(GLADloadproc load) {
+	if(!GLAD_GL_ARB_gpu_shader_fp64) return;
+	glad_glUniform1d = (PFNGLUNIFORM1DPROC)load("glUniform1d");
+	glad_glUniform2d = (PFNGLUNIFORM2DPROC)load("glUniform2d");
+	glad_glUniform3d = (PFNGLUNIFORM3DPROC)load("glUniform3d");
+	glad_glUniform4d = (PFNGLUNIFORM4DPROC)load("glUniform4d");
+	glad_glUniform1dv = (PFNGLUNIFORM1DVPROC)load("glUniform1dv");
+	glad_glUniform2dv = (PFNGLUNIFORM2DVPROC)load("glUniform2dv");
+	glad_glUniform3dv = (PFNGLUNIFORM3DVPROC)load("glUniform3dv");
+	glad_glUniform4dv = (PFNGLUNIFORM4DVPROC)load("glUniform4dv");
+	glad_glUniformMatrix2dv = (PFNGLUNIFORMMATRIX2DVPROC)load("glUniformMatrix2dv");
+	glad_glUniformMatrix3dv = (PFNGLUNIFORMMATRIX3DVPROC)load("glUniformMatrix3dv");
+	glad_glUniformMatrix4dv = (PFNGLUNIFORMMATRIX4DVPROC)load("glUniformMatrix4dv");
+	glad_glUniformMatrix2x3dv = (PFNGLUNIFORMMATRIX2X3DVPROC)load("glUniformMatrix2x3dv");
+	glad_glUniformMatrix2x4dv = (PFNGLUNIFORMMATRIX2X4DVPROC)load("glUniformMatrix2x4dv");
+	glad_glUniformMatrix3x2dv = (PFNGLUNIFORMMATRIX3X2DVPROC)load("glUniformMatrix3x2dv");
+	glad_glUniformMatrix3x4dv = (PFNGLUNIFORMMATRIX3X4DVPROC)load("glUniformMatrix3x4dv");
+	glad_glUniformMatrix4x2dv = (PFNGLUNIFORMMATRIX4X2DVPROC)load("glUniformMatrix4x2dv");
+	glad_glUniformMatrix4x3dv = (PFNGLUNIFORMMATRIX4X3DVPROC)load("glUniformMatrix4x3dv");
+	glad_glGetUniformdv = (PFNGLGETUNIFORMDVPROC)load("glGetUniformdv");
+}
+static void load_GL_NV_command_list(GLADloadproc load) {
+	if(!GLAD_GL_NV_command_list) return;
+	glad_glCreateStatesNV = (PFNGLCREATESTATESNVPROC)load("glCreateStatesNV");
+	glad_glDeleteStatesNV = (PFNGLDELETESTATESNVPROC)load("glDeleteStatesNV");
+	glad_glIsStateNV = (PFNGLISSTATENVPROC)load("glIsStateNV");
+	glad_glStateCaptureNV = (PFNGLSTATECAPTURENVPROC)load("glStateCaptureNV");
+	glad_glGetCommandHeaderNV = (PFNGLGETCOMMANDHEADERNVPROC)load("glGetCommandHeaderNV");
+	glad_glGetStageIndexNV = (PFNGLGETSTAGEINDEXNVPROC)load("glGetStageIndexNV");
+	glad_glDrawCommandsNV = (PFNGLDRAWCOMMANDSNVPROC)load("glDrawCommandsNV");
+	glad_glDrawCommandsAddressNV = (PFNGLDRAWCOMMANDSADDRESSNVPROC)load("glDrawCommandsAddressNV");
+	glad_glDrawCommandsStatesNV = (PFNGLDRAWCOMMANDSSTATESNVPROC)load("glDrawCommandsStatesNV");
+	glad_glDrawCommandsStatesAddressNV = (PFNGLDRAWCOMMANDSSTATESADDRESSNVPROC)load("glDrawCommandsStatesAddressNV");
+	glad_glCreateCommandListsNV = (PFNGLCREATECOMMANDLISTSNVPROC)load("glCreateCommandListsNV");
+	glad_glDeleteCommandListsNV = (PFNGLDELETECOMMANDLISTSNVPROC)load("glDeleteCommandListsNV");
+	glad_glIsCommandListNV = (PFNGLISCOMMANDLISTNVPROC)load("glIsCommandListNV");
+	glad_glListDrawCommandsStatesClientNV = (PFNGLLISTDRAWCOMMANDSSTATESCLIENTNVPROC)load("glListDrawCommandsStatesClientNV");
+	glad_glCommandListSegmentsNV = (PFNGLCOMMANDLISTSEGMENTSNVPROC)load("glCommandListSegmentsNV");
+	glad_glCompileCommandListNV = (PFNGLCOMPILECOMMANDLISTNVPROC)load("glCompileCommandListNV");
+	glad_glCallCommandListNV = (PFNGLCALLCOMMANDLISTNVPROC)load("glCallCommandListNV");
+}
+static void load_GL_EXT_vertex_weighting(GLADloadproc load) {
+	if(!GLAD_GL_EXT_vertex_weighting) return;
+	glad_glVertexWeightfEXT = (PFNGLVERTEXWEIGHTFEXTPROC)load("glVertexWeightfEXT");
+	glad_glVertexWeightfvEXT = (PFNGLVERTEXWEIGHTFVEXTPROC)load("glVertexWeightfvEXT");
+	glad_glVertexWeightPointerEXT = (PFNGLVERTEXWEIGHTPOINTEREXTPROC)load("glVertexWeightPointerEXT");
+}
+static void load_GL_GREMEDY_string_marker(GLADloadproc load) {
+	if(!GLAD_GL_GREMEDY_string_marker) return;
+	glad_glStringMarkerGREMEDY = (PFNGLSTRINGMARKERGREMEDYPROC)load("glStringMarkerGREMEDY");
+}
+static void load_GL_EXT_subtexture(GLADloadproc load) {
+	if(!GLAD_GL_EXT_subtexture) return;
+	glad_glTexSubImage1DEXT = (PFNGLTEXSUBIMAGE1DEXTPROC)load("glTexSubImage1DEXT");
+	glad_glTexSubImage2DEXT = (PFNGLTEXSUBIMAGE2DEXTPROC)load("glTexSubImage2DEXT");
+}
+static void load_GL_EXT_gpu_program_parameters(GLADloadproc load) {
+	if(!GLAD_GL_EXT_gpu_program_parameters) return;
+	glad_glProgramEnvParameters4fvEXT = (PFNGLPROGRAMENVPARAMETERS4FVEXTPROC)load("glProgramEnvParameters4fvEXT");
+	glad_glProgramLocalParameters4fvEXT = (PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC)load("glProgramLocalParameters4fvEXT");
+}
+static void load_GL_NV_evaluators(GLADloadproc load) {
+	if(!GLAD_GL_NV_evaluators) return;
+	glad_glMapControlPointsNV = (PFNGLMAPCONTROLPOINTSNVPROC)load("glMapControlPointsNV");
+	glad_glMapParameterivNV = (PFNGLMAPPARAMETERIVNVPROC)load("glMapParameterivNV");
+	glad_glMapParameterfvNV = (PFNGLMAPPARAMETERFVNVPROC)load("glMapParameterfvNV");
+	glad_glGetMapControlPointsNV = (PFNGLGETMAPCONTROLPOINTSNVPROC)load("glGetMapControlPointsNV");
+	glad_glGetMapParameterivNV = (PFNGLGETMAPPARAMETERIVNVPROC)load("glGetMapParameterivNV");
+	glad_glGetMapParameterfvNV = (PFNGLGETMAPPARAMETERFVNVPROC)load("glGetMapParameterfvNV");
+	glad_glGetMapAttribParameterivNV = (PFNGLGETMAPATTRIBPARAMETERIVNVPROC)load("glGetMapAttribParameterivNV");
+	glad_glGetMapAttribParameterfvNV = (PFNGLGETMAPATTRIBPARAMETERFVNVPROC)load("glGetMapAttribParameterfvNV");
+	glad_glEvalMapsNV = (PFNGLEVALMAPSNVPROC)load("glEvalMapsNV");
+}
+static void load_GL_SGIS_texture_filter4(GLADloadproc load) {
+	if(!GLAD_GL_SGIS_texture_filter4) return;
+	glad_glGetTexFilterFuncSGIS = (PFNGLGETTEXFILTERFUNCSGISPROC)load("glGetTexFilterFuncSGIS");
+	glad_glTexFilterFuncSGIS = (PFNGLTEXFILTERFUNCSGISPROC)load("glTexFilterFuncSGIS");
+}
+static void load_GL_AMD_performance_monitor(GLADloadproc load) {
+	if(!GLAD_GL_AMD_performance_monitor) return;
+	glad_glGetPerfMonitorGroupsAMD = (PFNGLGETPERFMONITORGROUPSAMDPROC)load("glGetPerfMonitorGroupsAMD");
+	glad_glGetPerfMonitorCountersAMD = (PFNGLGETPERFMONITORCOUNTERSAMDPROC)load("glGetPerfMonitorCountersAMD");
+	glad_glGetPerfMonitorGroupStringAMD = (PFNGLGETPERFMONITORGROUPSTRINGAMDPROC)load("glGetPerfMonitorGroupStringAMD");
+	glad_glGetPerfMonitorCounterStringAMD = (PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC)load("glGetPerfMonitorCounterStringAMD");
+	glad_glGetPerfMonitorCounterInfoAMD = (PFNGLGETPERFMONITORCOUNTERINFOAMDPROC)load("glGetPerfMonitorCounterInfoAMD");
+	glad_glGenPerfMonitorsAMD = (PFNGLGENPERFMONITORSAMDPROC)load("glGenPerfMonitorsAMD");
+	glad_glDeletePerfMonitorsAMD = (PFNGLDELETEPERFMONITORSAMDPROC)load("glDeletePerfMonitorsAMD");
+	glad_glSelectPerfMonitorCountersAMD = (PFNGLSELECTPERFMONITORCOUNTERSAMDPROC)load("glSelectPerfMonitorCountersAMD");
+	glad_glBeginPerfMonitorAMD = (PFNGLBEGINPERFMONITORAMDPROC)load("glBeginPerfMonitorAMD");
+	glad_glEndPerfMonitorAMD = (PFNGLENDPERFMONITORAMDPROC)load("glEndPerfMonitorAMD");
+	glad_glGetPerfMonitorCounterDataAMD = (PFNGLGETPERFMONITORCOUNTERDATAAMDPROC)load("glGetPerfMonitorCounterDataAMD");
+}
+static void load_GL_EXT_stencil_clear_tag(GLADloadproc load) {
+	if(!GLAD_GL_EXT_stencil_clear_tag) return;
+	glad_glStencilClearTagEXT = (PFNGLSTENCILCLEARTAGEXTPROC)load("glStencilClearTagEXT");
+}
+static void load_GL_NV_present_video(GLADloadproc load) {
+	if(!GLAD_GL_NV_present_video) return;
+	glad_glPresentFrameKeyedNV = (PFNGLPRESENTFRAMEKEYEDNVPROC)load("glPresentFrameKeyedNV");
+	glad_glPresentFrameDualFillNV = (PFNGLPRESENTFRAMEDUALFILLNVPROC)load("glPresentFrameDualFillNV");
+	glad_glGetVideoivNV = (PFNGLGETVIDEOIVNVPROC)load("glGetVideoivNV");
+	glad_glGetVideouivNV = (PFNGLGETVIDEOUIVNVPROC)load("glGetVideouivNV");
+	glad_glGetVideoi64vNV = (PFNGLGETVIDEOI64VNVPROC)load("glGetVideoi64vNV");
+	glad_glGetVideoui64vNV = (PFNGLGETVIDEOUI64VNVPROC)load("glGetVideoui64vNV");
+}
+static void load_GL_SGIX_framezoom(GLADloadproc load) {
+	if(!GLAD_GL_SGIX_framezoom) return;
+	glad_glFrameZoomSGIX = (PFNGLFRAMEZOOMSGIXPROC)load("glFrameZoomSGIX");
+}
+static void load_GL_ARB_draw_elements_base_vertex(GLADloadproc load) {
+	if(!GLAD_GL_ARB_draw_elements_base_vertex) return;
+	glad_glDrawElementsBaseVertex = (PFNGLDRAWELEMENTSBASEVERTEXPROC)load("glDrawElementsBaseVertex");
+	glad_glDrawRangeElementsBaseVertex = (PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC)load("glDrawRangeElementsBaseVertex");
+	glad_glDrawElementsInstancedBaseVertex = (PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC)load("glDrawElementsInstancedBaseVertex");
+	glad_glMultiDrawElementsBaseVertex = (PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC)load("glMultiDrawElementsBaseVertex");
+}
+static void load_GL_NV_transform_feedback(GLADloadproc load) {
+	if(!GLAD_GL_NV_transform_feedback) return;
+	glad_glBeginTransformFeedbackNV = (PFNGLBEGINTRANSFORMFEEDBACKNVPROC)load("glBeginTransformFeedbackNV");
+	glad_glEndTransformFeedbackNV = (PFNGLENDTRANSFORMFEEDBACKNVPROC)load("glEndTransformFeedbackNV");
+	glad_glTransformFeedbackAttribsNV = (PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC)load("glTransformFeedbackAttribsNV");
+	glad_glBindBufferRangeNV = (PFNGLBINDBUFFERRANGENVPROC)load("glBindBufferRangeNV");
+	glad_glBindBufferOffsetNV = (PFNGLBINDBUFFEROFFSETNVPROC)load("glBindBufferOffsetNV");
+	glad_glBindBufferBaseNV = (PFNGLBINDBUFFERBASENVPROC)load("glBindBufferBaseNV");
+	glad_glTransformFeedbackVaryingsNV = (PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC)load("glTransformFeedbackVaryingsNV");
+	glad_glActiveVaryingNV = (PFNGLACTIVEVARYINGNVPROC)load("glActiveVaryingNV");
+	glad_glGetVaryingLocationNV = (PFNGLGETVARYINGLOCATIONNVPROC)load("glGetVaryingLocationNV");
+	glad_glGetActiveVaryingNV = (PFNGLGETACTIVEVARYINGNVPROC)load("glGetActiveVaryingNV");
+	glad_glGetTransformFeedbackVaryingNV = (PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC)load("glGetTransformFeedbackVaryingNV");
+	glad_glTransformFeedbackStreamAttribsNV = (PFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC)load("glTransformFeedbackStreamAttribsNV");
+}
+static void load_GL_NV_fragment_program(GLADloadproc load) {
+	if(!GLAD_GL_NV_fragment_program) return;
+	glad_glProgramNamedParameter4fNV = (PFNGLPROGRAMNAMEDPARAMETER4FNVPROC)load("glProgramNamedParameter4fNV");
+	glad_glProgramNamedParameter4fvNV = (PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC)load("glProgramNamedParameter4fvNV");
+	glad_glProgramNamedParameter4dNV = (PFNGLPROGRAMNAMEDPARAMETER4DNVPROC)load("glProgramNamedParameter4dNV");
+	glad_glProgramNamedParameter4dvNV = (PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC)load("glProgramNamedParameter4dvNV");
+	glad_glGetProgramNamedParameterfvNV = (PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC)load("glGetProgramNamedParameterfvNV");
+	glad_glGetProgramNamedParameterdvNV = (PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC)load("glGetProgramNamedParameterdvNV");
+}
+static void load_GL_AMD_stencil_operation_extended(GLADloadproc load) {
+	if(!GLAD_GL_AMD_stencil_operation_extended) return;
+	glad_glStencilOpValueAMD = (PFNGLSTENCILOPVALUEAMDPROC)load("glStencilOpValueAMD");
+}
+static void load_GL_ARB_instanced_arrays(GLADloadproc load) {
+	if(!GLAD_GL_ARB_instanced_arrays) return;
+	glad_glVertexAttribDivisorARB = (PFNGLVERTEXATTRIBDIVISORARBPROC)load("glVertexAttribDivisorARB");
+}
+static void load_GL_EXT_polygon_offset(GLADloadproc load) {
+	if(!GLAD_GL_EXT_polygon_offset) return;
+	glad_glPolygonOffsetEXT = (PFNGLPOLYGONOFFSETEXTPROC)load("glPolygonOffsetEXT");
+}
+static void load_GL_KHR_robustness(GLADloadproc load) {
+	if(!GLAD_GL_KHR_robustness) return;
+	glad_glGetGraphicsResetStatus = (PFNGLGETGRAPHICSRESETSTATUSPROC)load("glGetGraphicsResetStatus");
+	glad_glReadnPixels = (PFNGLREADNPIXELSPROC)load("glReadnPixels");
+	glad_glGetnUniformfv = (PFNGLGETNUNIFORMFVPROC)load("glGetnUniformfv");
+	glad_glGetnUniformiv = (PFNGLGETNUNIFORMIVPROC)load("glGetnUniformiv");
+	glad_glGetnUniformuiv = (PFNGLGETNUNIFORMUIVPROC)load("glGetnUniformuiv");
+	glad_glGetGraphicsResetStatusKHR = (PFNGLGETGRAPHICSRESETSTATUSKHRPROC)load("glGetGraphicsResetStatusKHR");
+	glad_glReadnPixelsKHR = (PFNGLREADNPIXELSKHRPROC)load("glReadnPixelsKHR");
+	glad_glGetnUniformfvKHR = (PFNGLGETNUNIFORMFVKHRPROC)load("glGetnUniformfvKHR");
+	glad_glGetnUniformivKHR = (PFNGLGETNUNIFORMIVKHRPROC)load("glGetnUniformivKHR");
+	glad_glGetnUniformuivKHR = (PFNGLGETNUNIFORMUIVKHRPROC)load("glGetnUniformuivKHR");
+}
+static void load_GL_AMD_sparse_texture(GLADloadproc load) {
+	if(!GLAD_GL_AMD_sparse_texture) return;
+	glad_glTexStorageSparseAMD = (PFNGLTEXSTORAGESPARSEAMDPROC)load("glTexStorageSparseAMD");
+	glad_glTextureStorageSparseAMD = (PFNGLTEXTURESTORAGESPARSEAMDPROC)load("glTextureStorageSparseAMD");
+}
+static void load_GL_ARB_clip_control(GLADloadproc load) {
+	if(!GLAD_GL_ARB_clip_control) return;
+	glad_glClipControl = (PFNGLCLIPCONTROLPROC)load("glClipControl");
+}
+static void load_GL_NV_fragment_coverage_to_color(GLADloadproc load) {
+	if(!GLAD_GL_NV_fragment_coverage_to_color) return;
+	glad_glFragmentCoverageColorNV = (PFNGLFRAGMENTCOVERAGECOLORNVPROC)load("glFragmentCoverageColorNV");
+}
+static void load_GL_NV_fence(GLADloadproc load) {
+	if(!GLAD_GL_NV_fence) return;
+	glad_glDeleteFencesNV = (PFNGLDELETEFENCESNVPROC)load("glDeleteFencesNV");
+	glad_glGenFencesNV = (PFNGLGENFENCESNVPROC)load("glGenFencesNV");
+	glad_glIsFenceNV = (PFNGLISFENCENVPROC)load("glIsFenceNV");
+	glad_glTestFenceNV = (PFNGLTESTFENCENVPROC)load("glTestFenceNV");
+	glad_glGetFenceivNV = (PFNGLGETFENCEIVNVPROC)load("glGetFenceivNV");
+	glad_glFinishFenceNV = (PFNGLFINISHFENCENVPROC)load("glFinishFenceNV");
+	glad_glSetFenceNV = (PFNGLSETFENCENVPROC)load("glSetFenceNV");
+}
+static void load_GL_ARB_texture_buffer_range(GLADloadproc load) {
+	if(!GLAD_GL_ARB_texture_buffer_range) return;
+	glad_glTexBufferRange = (PFNGLTEXBUFFERRANGEPROC)load("glTexBufferRange");
+}
+static void load_GL_SUN_mesh_array(GLADloadproc load) {
+	if(!GLAD_GL_SUN_mesh_array) return;
+	glad_glDrawMeshArraysSUN = (PFNGLDRAWMESHARRAYSSUNPROC)load("glDrawMeshArraysSUN");
+}
+static void load_GL_ARB_vertex_attrib_binding(GLADloadproc load) {
+	if(!GLAD_GL_ARB_vertex_attrib_binding) return;
+	glad_glBindVertexBuffer = (PFNGLBINDVERTEXBUFFERPROC)load("glBindVertexBuffer");
+	glad_glVertexAttribFormat = (PFNGLVERTEXATTRIBFORMATPROC)load("glVertexAttribFormat");
+	glad_glVertexAttribIFormat = (PFNGLVERTEXATTRIBIFORMATPROC)load("glVertexAttribIFormat");
+	glad_glVertexAttribLFormat = (PFNGLVERTEXATTRIBLFORMATPROC)load("glVertexAttribLFormat");
+	glad_glVertexAttribBinding = (PFNGLVERTEXATTRIBBINDINGPROC)load("glVertexAttribBinding");
+	glad_glVertexBindingDivisor = (PFNGLVERTEXBINDINGDIVISORPROC)load("glVertexBindingDivisor");
+}
+static void load_GL_ARB_framebuffer_no_attachments(GLADloadproc load) {
+	if(!GLAD_GL_ARB_framebuffer_no_attachments) return;
+	glad_glFramebufferParameteri = (PFNGLFRAMEBUFFERPARAMETERIPROC)load("glFramebufferParameteri");
+	glad_glGetFramebufferParameteriv = (PFNGLGETFRAMEBUFFERPARAMETERIVPROC)load("glGetFramebufferParameteriv");
+}
+static void load_GL_ARB_cl_event(GLADloadproc load) {
+	if(!GLAD_GL_ARB_cl_event) return;
+	glad_glCreateSyncFromCLeventARB = (PFNGLCREATESYNCFROMCLEVENTARBPROC)load("glCreateSyncFromCLeventARB");
+}
+static void load_GL_OES_single_precision(GLADloadproc load) {
+	if(!GLAD_GL_OES_single_precision) return;
+	glad_glClearDepthfOES = (PFNGLCLEARDEPTHFOESPROC)load("glClearDepthfOES");
+	glad_glClipPlanefOES = (PFNGLCLIPPLANEFOESPROC)load("glClipPlanefOES");
+	glad_glDepthRangefOES = (PFNGLDEPTHRANGEFOESPROC)load("glDepthRangefOES");
+	glad_glFrustumfOES = (PFNGLFRUSTUMFOESPROC)load("glFrustumfOES");
+	glad_glGetClipPlanefOES = (PFNGLGETCLIPPLANEFOESPROC)load("glGetClipPlanefOES");
+	glad_glOrthofOES = (PFNGLORTHOFOESPROC)load("glOrthofOES");
+}
+static void load_GL_NV_primitive_restart(GLADloadproc load) {
+	if(!GLAD_GL_NV_primitive_restart) return;
+	glad_glPrimitiveRestartNV = (PFNGLPRIMITIVERESTARTNVPROC)load("glPrimitiveRestartNV");
+	glad_glPrimitiveRestartIndexNV = (PFNGLPRIMITIVERESTARTINDEXNVPROC)load("glPrimitiveRestartIndexNV");
+}
+static void load_GL_SUN_global_alpha(GLADloadproc load) {
+	if(!GLAD_GL_SUN_global_alpha) return;
+	glad_glGlobalAlphaFactorbSUN = (PFNGLGLOBALALPHAFACTORBSUNPROC)load("glGlobalAlphaFactorbSUN");
+	glad_glGlobalAlphaFactorsSUN = (PFNGLGLOBALALPHAFACTORSSUNPROC)load("glGlobalAlphaFactorsSUN");
+	glad_glGlobalAlphaFactoriSUN = (PFNGLGLOBALALPHAFACTORISUNPROC)load("glGlobalAlphaFactoriSUN");
+	glad_glGlobalAlphaFactorfSUN = (PFNGLGLOBALALPHAFACTORFSUNPROC)load("glGlobalAlphaFactorfSUN");
+	glad_glGlobalAlphaFactordSUN = (PFNGLGLOBALALPHAFACTORDSUNPROC)load("glGlobalAlphaFactordSUN");
+	glad_glGlobalAlphaFactorubSUN = (PFNGLGLOBALALPHAFACTORUBSUNPROC)load("glGlobalAlphaFactorubSUN");
+	glad_glGlobalAlphaFactorusSUN = (PFNGLGLOBALALPHAFACTORUSSUNPROC)load("glGlobalAlphaFactorusSUN");
+	glad_glGlobalAlphaFactoruiSUN = (PFNGLGLOBALALPHAFACTORUISUNPROC)load("glGlobalAlphaFactoruiSUN");
+}
+static void load_GL_EXT_texture_object(GLADloadproc load) {
+	if(!GLAD_GL_EXT_texture_object) return;
+	glad_glAreTexturesResidentEXT = (PFNGLARETEXTURESRESIDENTEXTPROC)load("glAreTexturesResidentEXT");
+	glad_glBindTextureEXT = (PFNGLBINDTEXTUREEXTPROC)load("glBindTextureEXT");
+	glad_glDeleteTexturesEXT = (PFNGLDELETETEXTURESEXTPROC)load("glDeleteTexturesEXT");
+	glad_glGenTexturesEXT = (PFNGLGENTEXTURESEXTPROC)load("glGenTexturesEXT");
+	glad_glIsTextureEXT = (PFNGLISTEXTUREEXTPROC)load("glIsTextureEXT");
+	glad_glPrioritizeTexturesEXT = (PFNGLPRIORITIZETEXTURESEXTPROC)load("glPrioritizeTexturesEXT");
+}
+static void load_GL_AMD_name_gen_delete(GLADloadproc load) {
+	if(!GLAD_GL_AMD_name_gen_delete) return;
+	glad_glGenNamesAMD = (PFNGLGENNAMESAMDPROC)load("glGenNamesAMD");
+	glad_glDeleteNamesAMD = (PFNGLDELETENAMESAMDPROC)load("glDeleteNamesAMD");
+	glad_glIsNameAMD = (PFNGLISNAMEAMDPROC)load("glIsNameAMD");
+}
+static void load_GL_ARB_buffer_storage(GLADloadproc load) {
+	if(!GLAD_GL_ARB_buffer_storage) return;
+	glad_glBufferStorage = (PFNGLBUFFERSTORAGEPROC)load("glBufferStorage");
+}
+static void load_GL_APPLE_vertex_program_evaluators(GLADloadproc load) {
+	if(!GLAD_GL_APPLE_vertex_program_evaluators) return;
+	glad_glEnableVertexAttribAPPLE = (PFNGLENABLEVERTEXATTRIBAPPLEPROC)load("glEnableVertexAttribAPPLE");
+	glad_glDisableVertexAttribAPPLE = (PFNGLDISABLEVERTEXATTRIBAPPLEPROC)load("glDisableVertexAttribAPPLE");
+	glad_glIsVertexAttribEnabledAPPLE = (PFNGLISVERTEXATTRIBENABLEDAPPLEPROC)load("glIsVertexAttribEnabledAPPLE");
+	glad_glMapVertexAttrib1dAPPLE = (PFNGLMAPVERTEXATTRIB1DAPPLEPROC)load("glMapVertexAttrib1dAPPLE");
+	glad_glMapVertexAttrib1fAPPLE = (PFNGLMAPVERTEXATTRIB1FAPPLEPROC)load("glMapVertexAttrib1fAPPLE");
+	glad_glMapVertexAttrib2dAPPLE = (PFNGLMAPVERTEXATTRIB2DAPPLEPROC)load("glMapVertexAttrib2dAPPLE");
+	glad_glMapVertexAttrib2fAPPLE = (PFNGLMAPVERTEXATTRIB2FAPPLEPROC)load("glMapVertexAttrib2fAPPLE");
+}
+static void load_GL_ARB_multi_bind(GLADloadproc load) {
+	if(!GLAD_GL_ARB_multi_bind) return;
+	glad_glBindBuffersBase = (PFNGLBINDBUFFERSBASEPROC)load("glBindBuffersBase");
+	glad_glBindBuffersRange = (PFNGLBINDBUFFERSRANGEPROC)load("glBindBuffersRange");
+	glad_glBindTextures = (PFNGLBINDTEXTURESPROC)load("glBindTextures");
+	glad_glBindSamplers = (PFNGLBINDSAMPLERSPROC)load("glBindSamplers");
+	glad_glBindImageTextures = (PFNGLBINDIMAGETEXTURESPROC)load("glBindImageTextures");
+	glad_glBindVertexBuffers = (PFNGLBINDVERTEXBUFFERSPROC)load("glBindVertexBuffers");
+}
+static void load_GL_SGIX_list_priority(GLADloadproc load) {
+	if(!GLAD_GL_SGIX_list_priority) return;
+	glad_glGetListParameterfvSGIX = (PFNGLGETLISTPARAMETERFVSGIXPROC)load("glGetListParameterfvSGIX");
+	glad_glGetListParameterivSGIX = (PFNGLGETLISTPARAMETERIVSGIXPROC)load("glGetListParameterivSGIX");
+	glad_glListParameterfSGIX = (PFNGLLISTPARAMETERFSGIXPROC)load("glListParameterfSGIX");
+	glad_glListParameterfvSGIX = (PFNGLLISTPARAMETERFVSGIXPROC)load("glListParameterfvSGIX");
+	glad_glListParameteriSGIX = (PFNGLLISTPARAMETERISGIXPROC)load("glListParameteriSGIX");
+	glad_glListParameterivSGIX = (PFNGLLISTPARAMETERIVSGIXPROC)load("glListParameterivSGIX");
+}
+static void load_GL_NV_vertex_buffer_unified_memory(GLADloadproc load) {
+	if(!GLAD_GL_NV_vertex_buffer_unified_memory) return;
+	glad_glBufferAddressRangeNV = (PFNGLBUFFERADDRESSRANGENVPROC)load("glBufferAddressRangeNV");
+	glad_glVertexFormatNV = (PFNGLVERTEXFORMATNVPROC)load("glVertexFormatNV");
+	glad_glNormalFormatNV = (PFNGLNORMALFORMATNVPROC)load("glNormalFormatNV");
+	glad_glColorFormatNV = (PFNGLCOLORFORMATNVPROC)load("glColorFormatNV");
+	glad_glIndexFormatNV = (PFNGLINDEXFORMATNVPROC)load("glIndexFormatNV");
+	glad_glTexCoordFormatNV = (PFNGLTEXCOORDFORMATNVPROC)load("glTexCoordFormatNV");
+	glad_glEdgeFlagFormatNV = (PFNGLEDGEFLAGFORMATNVPROC)load("glEdgeFlagFormatNV");
+	glad_glSecondaryColorFormatNV = (PFNGLSECONDARYCOLORFORMATNVPROC)load("glSecondaryColorFormatNV");
+	glad_glFogCoordFormatNV = (PFNGLFOGCOORDFORMATNVPROC)load("glFogCoordFormatNV");
+	glad_glVertexAttribFormatNV = (PFNGLVERTEXATTRIBFORMATNVPROC)load("glVertexAttribFormatNV");
+	glad_glVertexAttribIFormatNV = (PFNGLVERTEXATTRIBIFORMATNVPROC)load("glVertexAttribIFormatNV");
+	glad_glGetIntegerui64i_vNV = (PFNGLGETINTEGERUI64I_VNVPROC)load("glGetIntegerui64i_vNV");
+}
+static void load_GL_NV_blend_equation_advanced(GLADloadproc load) {
+	if(!GLAD_GL_NV_blend_equation_advanced) return;
+	glad_glBlendParameteriNV = (PFNGLBLENDPARAMETERINVPROC)load("glBlendParameteriNV");
+	glad_glBlendBarrierNV = (PFNGLBLENDBARRIERNVPROC)load("glBlendBarrierNV");
+}
+static void load_GL_SGIS_sharpen_texture(GLADloadproc load) {
+	if(!GLAD_GL_SGIS_sharpen_texture) return;
+	glad_glSharpenTexFuncSGIS = (PFNGLSHARPENTEXFUNCSGISPROC)load("glSharpenTexFuncSGIS");
+	glad_glGetSharpenTexFuncSGIS = (PFNGLGETSHARPENTEXFUNCSGISPROC)load("glGetSharpenTexFuncSGIS");
+}
+static void load_GL_ARB_vertex_program(GLADloadproc load) {
+	if(!GLAD_GL_ARB_vertex_program) return;
+	glad_glVertexAttrib1dARB = (PFNGLVERTEXATTRIB1DARBPROC)load("glVertexAttrib1dARB");
+	glad_glVertexAttrib1dvARB = (PFNGLVERTEXATTRIB1DVARBPROC)load("glVertexAttrib1dvARB");
+	glad_glVertexAttrib1fARB = (PFNGLVERTEXATTRIB1FARBPROC)load("glVertexAttrib1fARB");
+	glad_glVertexAttrib1fvARB = (PFNGLVERTEXATTRIB1FVARBPROC)load("glVertexAttrib1fvARB");
+	glad_glVertexAttrib1sARB = (PFNGLVERTEXATTRIB1SARBPROC)load("glVertexAttrib1sARB");
+	glad_glVertexAttrib1svARB = (PFNGLVERTEXATTRIB1SVARBPROC)load("glVertexAttrib1svARB");
+	glad_glVertexAttrib2dARB = (PFNGLVERTEXATTRIB2DARBPROC)load("glVertexAttrib2dARB");
+	glad_glVertexAttrib2dvARB = (PFNGLVERTEXATTRIB2DVARBPROC)load("glVertexAttrib2dvARB");
+	glad_glVertexAttrib2fARB = (PFNGLVERTEXATTRIB2FARBPROC)load("glVertexAttrib2fARB");
+	glad_glVertexAttrib2fvARB = (PFNGLVERTEXATTRIB2FVARBPROC)load("glVertexAttrib2fvARB");
+	glad_glVertexAttrib2sARB = (PFNGLVERTEXATTRIB2SARBPROC)load("glVertexAttrib2sARB");
+	glad_glVertexAttrib2svARB = (PFNGLVERTEXATTRIB2SVARBPROC)load("glVertexAttrib2svARB");
+	glad_glVertexAttrib3dARB = (PFNGLVERTEXATTRIB3DARBPROC)load("glVertexAttrib3dARB");
+	glad_glVertexAttrib3dvARB = (PFNGLVERTEXATTRIB3DVARBPROC)load("glVertexAttrib3dvARB");
+	glad_glVertexAttrib3fARB = (PFNGLVERTEXATTRIB3FARBPROC)load("glVertexAttrib3fARB");
+	glad_glVertexAttrib3fvARB = (PFNGLVERTEXATTRIB3FVARBPROC)load("glVertexAttrib3fvARB");
+	glad_glVertexAttrib3sARB = (PFNGLVERTEXATTRIB3SARBPROC)load("glVertexAttrib3sARB");
+	glad_glVertexAttrib3svARB = (PFNGLVERTEXATTRIB3SVARBPROC)load("glVertexAttrib3svARB");
+	glad_glVertexAttrib4NbvARB = (PFNGLVERTEXATTRIB4NBVARBPROC)load("glVertexAttrib4NbvARB");
+	glad_glVertexAttrib4NivARB = (PFNGLVERTEXATTRIB4NIVARBPROC)load("glVertexAttrib4NivARB");
+	glad_glVertexAttrib4NsvARB = (PFNGLVERTEXATTRIB4NSVARBPROC)load("glVertexAttrib4NsvARB");
+	glad_glVertexAttrib4NubARB = (PFNGLVERTEXATTRIB4NUBARBPROC)load("glVertexAttrib4NubARB");
+	glad_glVertexAttrib4NubvARB = (PFNGLVERTEXATTRIB4NUBVARBPROC)load("glVertexAttrib4NubvARB");
+	glad_glVertexAttrib4NuivARB = (PFNGLVERTEXATTRIB4NUIVARBPROC)load("glVertexAttrib4NuivARB");
+	glad_glVertexAttrib4NusvARB = (PFNGLVERTEXATTRIB4NUSVARBPROC)load("glVertexAttrib4NusvARB");
+	glad_glVertexAttrib4bvARB = (PFNGLVERTEXATTRIB4BVARBPROC)load("glVertexAttrib4bvARB");
+	glad_glVertexAttrib4dARB = (PFNGLVERTEXATTRIB4DARBPROC)load("glVertexAttrib4dARB");
+	glad_glVertexAttrib4dvARB = (PFNGLVERTEXATTRIB4DVARBPROC)load("glVertexAttrib4dvARB");
+	glad_glVertexAttrib4fARB = (PFNGLVERTEXATTRIB4FARBPROC)load("glVertexAttrib4fARB");
+	glad_glVertexAttrib4fvARB = (PFNGLVERTEXATTRIB4FVARBPROC)load("glVertexAttrib4fvARB");
+	glad_glVertexAttrib4ivARB = (PFNGLVERTEXATTRIB4IVARBPROC)load("glVertexAttrib4ivARB");
+	glad_glVertexAttrib4sARB = (PFNGLVERTEXATTRIB4SARBPROC)load("glVertexAttrib4sARB");
+	glad_glVertexAttrib4svARB = (PFNGLVERTEXATTRIB4SVARBPROC)load("glVertexAttrib4svARB");
+	glad_glVertexAttrib4ubvARB = (PFNGLVERTEXATTRIB4UBVARBPROC)load("glVertexAttrib4ubvARB");
+	glad_glVertexAttrib4uivARB = (PFNGLVERTEXATTRIB4UIVARBPROC)load("glVertexAttrib4uivARB");
+	glad_glVertexAttrib4usvARB = (PFNGLVERTEXATTRIB4USVARBPROC)load("glVertexAttrib4usvARB");
+	glad_glVertexAttribPointerARB = (PFNGLVERTEXATTRIBPOINTERARBPROC)load("glVertexAttribPointerARB");
+	glad_glEnableVertexAttribArrayARB = (PFNGLENABLEVERTEXATTRIBARRAYARBPROC)load("glEnableVertexAttribArrayARB");
+	glad_glDisableVertexAttribArrayARB = (PFNGLDISABLEVERTEXATTRIBARRAYARBPROC)load("glDisableVertexAttribArrayARB");
+	glad_glProgramStringARB = (PFNGLPROGRAMSTRINGARBPROC)load("glProgramStringARB");
+	glad_glBindProgramARB = (PFNGLBINDPROGRAMARBPROC)load("glBindProgramARB");
+	glad_glDeleteProgramsARB = (PFNGLDELETEPROGRAMSARBPROC)load("glDeleteProgramsARB");
+	glad_glGenProgramsARB = (PFNGLGENPROGRAMSARBPROC)load("glGenProgramsARB");
+	glad_glProgramEnvParameter4dARB = (PFNGLPROGRAMENVPARAMETER4DARBPROC)load("glProgramEnvParameter4dARB");
+	glad_glProgramEnvParameter4dvARB = (PFNGLPROGRAMENVPARAMETER4DVARBPROC)load("glProgramEnvParameter4dvARB");
+	glad_glProgramEnvParameter4fARB = (PFNGLPROGRAMENVPARAMETER4FARBPROC)load("glProgramEnvParameter4fARB");
+	glad_glProgramEnvParameter4fvARB = (PFNGLPROGRAMENVPARAMETER4FVARBPROC)load("glProgramEnvParameter4fvARB");
+	glad_glProgramLocalParameter4dARB = (PFNGLPROGRAMLOCALPARAMETER4DARBPROC)load("glProgramLocalParameter4dARB");
+	glad_glProgramLocalParameter4dvARB = (PFNGLPROGRAMLOCALPARAMETER4DVARBPROC)load("glProgramLocalParameter4dvARB");
+	glad_glProgramLocalParameter4fARB = (PFNGLPROGRAMLOCALPARAMETER4FARBPROC)load("glProgramLocalParameter4fARB");
+	glad_glProgramLocalParameter4fvARB = (PFNGLPROGRAMLOCALPARAMETER4FVARBPROC)load("glProgramLocalParameter4fvARB");
+	glad_glGetProgramEnvParameterdvARB = (PFNGLGETPROGRAMENVPARAMETERDVARBPROC)load("glGetProgramEnvParameterdvARB");
+	glad_glGetProgramEnvParameterfvARB = (PFNGLGETPROGRAMENVPARAMETERFVARBPROC)load("glGetProgramEnvParameterfvARB");
+	glad_glGetProgramLocalParameterdvARB = (PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC)load("glGetProgramLocalParameterdvARB");
+	glad_glGetProgramLocalParameterfvARB = (PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC)load("glGetProgramLocalParameterfvARB");
+	glad_glGetProgramivARB = (PFNGLGETPROGRAMIVARBPROC)load("glGetProgramivARB");
+	glad_glGetProgramStringARB = (PFNGLGETPROGRAMSTRINGARBPROC)load("glGetProgramStringARB");
+	glad_glGetVertexAttribdvARB = (PFNGLGETVERTEXATTRIBDVARBPROC)load("glGetVertexAttribdvARB");
+	glad_glGetVertexAttribfvARB = (PFNGLGETVERTEXATTRIBFVARBPROC)load("glGetVertexAttribfvARB");
+	glad_glGetVertexAttribivARB = (PFNGLGETVERTEXATTRIBIVARBPROC)load("glGetVertexAttribivARB");
+	glad_glGetVertexAttribPointervARB = (PFNGLGETVERTEXATTRIBPOINTERVARBPROC)load("glGetVertexAttribPointervARB");
+	glad_glIsProgramARB = (PFNGLISPROGRAMARBPROC)load("glIsProgramARB");
+}
+static void load_GL_ARB_vertex_buffer_object(GLADloadproc load) {
+	if(!GLAD_GL_ARB_vertex_buffer_object) return;
+	glad_glBindBufferARB = (PFNGLBINDBUFFERARBPROC)load("glBindBufferARB");
+	glad_glDeleteBuffersARB = (PFNGLDELETEBUFFERSARBPROC)load("glDeleteBuffersARB");
+	glad_glGenBuffersARB = (PFNGLGENBUFFERSARBPROC)load("glGenBuffersARB");
+	glad_glIsBufferARB = (PFNGLISBUFFERARBPROC)load("glIsBufferARB");
+	glad_glBufferDataARB = (PFNGLBUFFERDATAARBPROC)load("glBufferDataARB");
+	glad_glBufferSubDataARB = (PFNGLBUFFERSUBDATAARBPROC)load("glBufferSubDataARB");
+	glad_glGetBufferSubDataARB = (PFNGLGETBUFFERSUBDATAARBPROC)load("glGetBufferSubDataARB");
+	glad_glMapBufferARB = (PFNGLMAPBUFFERARBPROC)load("glMapBufferARB");
+	glad_glUnmapBufferARB = (PFNGLUNMAPBUFFERARBPROC)load("glUnmapBufferARB");
+	glad_glGetBufferParameterivARB = (PFNGLGETBUFFERPARAMETERIVARBPROC)load("glGetBufferParameterivARB");
+	glad_glGetBufferPointervARB = (PFNGLGETBUFFERPOINTERVARBPROC)load("glGetBufferPointervARB");
+}
+static void load_GL_NV_vertex_array_range(GLADloadproc load) {
+	if(!GLAD_GL_NV_vertex_array_range) return;
+	glad_glFlushVertexArrayRangeNV = (PFNGLFLUSHVERTEXARRAYRANGENVPROC)load("glFlushVertexArrayRangeNV");
+	glad_glVertexArrayRangeNV = (PFNGLVERTEXARRAYRANGENVPROC)load("glVertexArrayRangeNV");
+}
+static void load_GL_SGIX_fragment_lighting(GLADloadproc load) {
+	if(!GLAD_GL_SGIX_fragment_lighting) return;
+	glad_glFragmentColorMaterialSGIX = (PFNGLFRAGMENTCOLORMATERIALSGIXPROC)load("glFragmentColorMaterialSGIX");
+	glad_glFragmentLightfSGIX = (PFNGLFRAGMENTLIGHTFSGIXPROC)load("glFragmentLightfSGIX");
+	glad_glFragmentLightfvSGIX = (PFNGLFRAGMENTLIGHTFVSGIXPROC)load("glFragmentLightfvSGIX");
+	glad_glFragmentLightiSGIX = (PFNGLFRAGMENTLIGHTISGIXPROC)load("glFragmentLightiSGIX");
+	glad_glFragmentLightivSGIX = (PFNGLFRAGMENTLIGHTIVSGIXPROC)load("glFragmentLightivSGIX");
+	glad_glFragmentLightModelfSGIX = (PFNGLFRAGMENTLIGHTMODELFSGIXPROC)load("glFragmentLightModelfSGIX");
+	glad_glFragmentLightModelfvSGIX = (PFNGLFRAGMENTLIGHTMODELFVSGIXPROC)load("glFragmentLightModelfvSGIX");
+	glad_glFragmentLightModeliSGIX = (PFNGLFRAGMENTLIGHTMODELISGIXPROC)load("glFragmentLightModeliSGIX");
+	glad_glFragmentLightModelivSGIX = (PFNGLFRAGMENTLIGHTMODELIVSGIXPROC)load("glFragmentLightModelivSGIX");
+	glad_glFragmentMaterialfSGIX = (PFNGLFRAGMENTMATERIALFSGIXPROC)load("glFragmentMaterialfSGIX");
+	glad_glFragmentMaterialfvSGIX = (PFNGLFRAGMENTMATERIALFVSGIXPROC)load("glFragmentMaterialfvSGIX");
+	glad_glFragmentMaterialiSGIX = (PFNGLFRAGMENTMATERIALISGIXPROC)load("glFragmentMaterialiSGIX");
+	glad_glFragmentMaterialivSGIX = (PFNGLFRAGMENTMATERIALIVSGIXPROC)load("glFragmentMaterialivSGIX");
+	glad_glGetFragmentLightfvSGIX = (PFNGLGETFRAGMENTLIGHTFVSGIXPROC)load("glGetFragmentLightfvSGIX");
+	glad_glGetFragmentLightivSGIX = (PFNGLGETFRAGMENTLIGHTIVSGIXPROC)load("glGetFragmentLightivSGIX");
+	glad_glGetFragmentMaterialfvSGIX = (PFNGLGETFRAGMENTMATERIALFVSGIXPROC)load("glGetFragmentMaterialfvSGIX");
+	glad_glGetFragmentMaterialivSGIX = (PFNGLGETFRAGMENTMATERIALIVSGIXPROC)load("glGetFragmentMaterialivSGIX");
+	glad_glLightEnviSGIX = (PFNGLLIGHTENVISGIXPROC)load("glLightEnviSGIX");
+}
+static void load_GL_NV_framebuffer_multisample_coverage(GLADloadproc load) {
+	if(!GLAD_GL_NV_framebuffer_multisample_coverage) return;
+	glad_glRenderbufferStorageMultisampleCoverageNV = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC)load("glRenderbufferStorageMultisampleCoverageNV");
+}
+static void load_GL_EXT_timer_query(GLADloadproc load) {
+	if(!GLAD_GL_EXT_timer_query) return;
+	glad_glGetQueryObjecti64vEXT = (PFNGLGETQUERYOBJECTI64VEXTPROC)load("glGetQueryObjecti64vEXT");
+	glad_glGetQueryObjectui64vEXT = (PFNGLGETQUERYOBJECTUI64VEXTPROC)load("glGetQueryObjectui64vEXT");
+}
+static void load_GL_NV_bindless_texture(GLADloadproc load) {
+	if(!GLAD_GL_NV_bindless_texture) return;
+	glad_glGetTextureHandleNV = (PFNGLGETTEXTUREHANDLENVPROC)load("glGetTextureHandleNV");
+	glad_glGetTextureSamplerHandleNV = (PFNGLGETTEXTURESAMPLERHANDLENVPROC)load("glGetTextureSamplerHandleNV");
+	glad_glMakeTextureHandleResidentNV = (PFNGLMAKETEXTUREHANDLERESIDENTNVPROC)load("glMakeTextureHandleResidentNV");
+	glad_glMakeTextureHandleNonResidentNV = (PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC)load("glMakeTextureHandleNonResidentNV");
+	glad_glGetImageHandleNV = (PFNGLGETIMAGEHANDLENVPROC)load("glGetImageHandleNV");
+	glad_glMakeImageHandleResidentNV = (PFNGLMAKEIMAGEHANDLERESIDENTNVPROC)load("glMakeImageHandleResidentNV");
+	glad_glMakeImageHandleNonResidentNV = (PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC)load("glMakeImageHandleNonResidentNV");
+	glad_glUniformHandleui64NV = (PFNGLUNIFORMHANDLEUI64NVPROC)load("glUniformHandleui64NV");
+	glad_glUniformHandleui64vNV = (PFNGLUNIFORMHANDLEUI64VNVPROC)load("glUniformHandleui64vNV");
+	glad_glProgramUniformHandleui64NV = (PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC)load("glProgramUniformHandleui64NV");
+	glad_glProgramUniformHandleui64vNV = (PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC)load("glProgramUniformHandleui64vNV");
+	glad_glIsTextureHandleResidentNV = (PFNGLISTEXTUREHANDLERESIDENTNVPROC)load("glIsTextureHandleResidentNV");
+	glad_glIsImageHandleResidentNV = (PFNGLISIMAGEHANDLERESIDENTNVPROC)load("glIsImageHandleResidentNV");
+}
+static void load_GL_KHR_debug(GLADloadproc load) {
+	if(!GLAD_GL_KHR_debug) return;
+	glad_glDebugMessageControl = (PFNGLDEBUGMESSAGECONTROLPROC)load("glDebugMessageControl");
+	glad_glDebugMessageInsert = (PFNGLDEBUGMESSAGEINSERTPROC)load("glDebugMessageInsert");
+	glad_glDebugMessageCallback = (PFNGLDEBUGMESSAGECALLBACKPROC)load("glDebugMessageCallback");
+	glad_glGetDebugMessageLog = (PFNGLGETDEBUGMESSAGELOGPROC)load("glGetDebugMessageLog");
+	glad_glPushDebugGroup = (PFNGLPUSHDEBUGGROUPPROC)load("glPushDebugGroup");
+	glad_glPopDebugGroup = (PFNGLPOPDEBUGGROUPPROC)load("glPopDebugGroup");
+	glad_glObjectLabel = (PFNGLOBJECTLABELPROC)load("glObjectLabel");
+	glad_glGetObjectLabel = (PFNGLGETOBJECTLABELPROC)load("glGetObjectLabel");
+	glad_glObjectPtrLabel = (PFNGLOBJECTPTRLABELPROC)load("glObjectPtrLabel");
+	glad_glGetObjectPtrLabel = (PFNGLGETOBJECTPTRLABELPROC)load("glGetObjectPtrLabel");
+	glad_glGetPointerv = (PFNGLGETPOINTERVPROC)load("glGetPointerv");
+	glad_glDebugMessageControlKHR = (PFNGLDEBUGMESSAGECONTROLKHRPROC)load("glDebugMessageControlKHR");
+	glad_glDebugMessageInsertKHR = (PFNGLDEBUGMESSAGEINSERTKHRPROC)load("glDebugMessageInsertKHR");
+	glad_glDebugMessageCallbackKHR = (PFNGLDEBUGMESSAGECALLBACKKHRPROC)load("glDebugMessageCallbackKHR");
+	glad_glGetDebugMessageLogKHR = (PFNGLGETDEBUGMESSAGELOGKHRPROC)load("glGetDebugMessageLogKHR");
+	glad_glPushDebugGroupKHR = (PFNGLPUSHDEBUGGROUPKHRPROC)load("glPushDebugGroupKHR");
+	glad_glPopDebugGroupKHR = (PFNGLPOPDEBUGGROUPKHRPROC)load("glPopDebugGroupKHR");
+	glad_glObjectLabelKHR = (PFNGLOBJECTLABELKHRPROC)load("glObjectLabelKHR");
+	glad_glGetObjectLabelKHR = (PFNGLGETOBJECTLABELKHRPROC)load("glGetObjectLabelKHR");
+	glad_glObjectPtrLabelKHR = (PFNGLOBJECTPTRLABELKHRPROC)load("glObjectPtrLabelKHR");
+	glad_glGetObjectPtrLabelKHR = (PFNGLGETOBJECTPTRLABELKHRPROC)load("glGetObjectPtrLabelKHR");
+	glad_glGetPointervKHR = (PFNGLGETPOINTERVKHRPROC)load("glGetPointervKHR");
+}
+static void load_GL_ATI_vertex_attrib_array_object(GLADloadproc load) {
+	if(!GLAD_GL_ATI_vertex_attrib_array_object) return;
+	glad_glVertexAttribArrayObjectATI = (PFNGLVERTEXATTRIBARRAYOBJECTATIPROC)load("glVertexAttribArrayObjectATI");
+	glad_glGetVertexAttribArrayObjectfvATI = (PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC)load("glGetVertexAttribArrayObjectfvATI");
+	glad_glGetVertexAttribArrayObjectivATI = (PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC)load("glGetVertexAttribArrayObjectivATI");
+}
+static void load_GL_EXT_geometry_shader4(GLADloadproc load) {
+	if(!GLAD_GL_EXT_geometry_shader4) return;
+	glad_glProgramParameteriEXT = (PFNGLPROGRAMPARAMETERIEXTPROC)load("glProgramParameteriEXT");
+}
+static void load_GL_EXT_bindable_uniform(GLADloadproc load) {
+	if(!GLAD_GL_EXT_bindable_uniform) return;
+	glad_glUniformBufferEXT = (PFNGLUNIFORMBUFFEREXTPROC)load("glUniformBufferEXT");
+	glad_glGetUniformBufferSizeEXT = (PFNGLGETUNIFORMBUFFERSIZEEXTPROC)load("glGetUniformBufferSizeEXT");
+	glad_glGetUniformOffsetEXT = (PFNGLGETUNIFORMOFFSETEXTPROC)load("glGetUniformOffsetEXT");
+}
+static void load_GL_KHR_blend_equation_advanced(GLADloadproc load) {
+	if(!GLAD_GL_KHR_blend_equation_advanced) return;
+	glad_glBlendBarrierKHR = (PFNGLBLENDBARRIERKHRPROC)load("glBlendBarrierKHR");
+}
+static void load_GL_ATI_element_array(GLADloadproc load) {
+	if(!GLAD_GL_ATI_element_array) return;
+	glad_glElementPointerATI = (PFNGLELEMENTPOINTERATIPROC)load("glElementPointerATI");
+	glad_glDrawElementArrayATI = (PFNGLDRAWELEMENTARRAYATIPROC)load("glDrawElementArrayATI");
+	glad_glDrawRangeElementArrayATI = (PFNGLDRAWRANGEELEMENTARRAYATIPROC)load("glDrawRangeElementArrayATI");
+}
+static void load_GL_SGIX_reference_plane(GLADloadproc load) {
+	if(!GLAD_GL_SGIX_reference_plane) return;
+	glad_glReferencePlaneSGIX = (PFNGLREFERENCEPLANESGIXPROC)load("glReferencePlaneSGIX");
+}
+static void load_GL_EXT_stencil_two_side(GLADloadproc load) {
+	if(!GLAD_GL_EXT_stencil_two_side) return;
+	glad_glActiveStencilFaceEXT = (PFNGLACTIVESTENCILFACEEXTPROC)load("glActiveStencilFaceEXT");
+}
+static void load_GL_NV_explicit_multisample(GLADloadproc load) {
+	if(!GLAD_GL_NV_explicit_multisample) return;
+	glad_glGetMultisamplefvNV = (PFNGLGETMULTISAMPLEFVNVPROC)load("glGetMultisamplefvNV");
+	glad_glSampleMaskIndexedNV = (PFNGLSAMPLEMASKINDEXEDNVPROC)load("glSampleMaskIndexedNV");
+	glad_glTexRenderbufferNV = (PFNGLTEXRENDERBUFFERNVPROC)load("glTexRenderbufferNV");
+}
+static void load_GL_IBM_static_data(GLADloadproc load) {
+	if(!GLAD_GL_IBM_static_data) return;
+	glad_glFlushStaticDataIBM = (PFNGLFLUSHSTATICDATAIBMPROC)load("glFlushStaticDataIBM");
+}
+static void load_GL_EXT_texture_perturb_normal(GLADloadproc load) {
+	if(!GLAD_GL_EXT_texture_perturb_normal) return;
+	glad_glTextureNormalEXT = (PFNGLTEXTURENORMALEXTPROC)load("glTextureNormalEXT");
+}
+static void load_GL_EXT_point_parameters(GLADloadproc load) {
+	if(!GLAD_GL_EXT_point_parameters) return;
+	glad_glPointParameterfEXT = (PFNGLPOINTPARAMETERFEXTPROC)load("glPointParameterfEXT");
+	glad_glPointParameterfvEXT = (PFNGLPOINTPARAMETERFVEXTPROC)load("glPointParameterfvEXT");
+}
+static void load_GL_PGI_misc_hints(GLADloadproc load) {
+	if(!GLAD_GL_PGI_misc_hints) return;
+	glad_glHintPGI = (PFNGLHINTPGIPROC)load("glHintPGI");
+}
+static void load_GL_ARB_vertex_shader(GLADloadproc load) {
+	if(!GLAD_GL_ARB_vertex_shader) return;
+	glad_glVertexAttrib1fARB = (PFNGLVERTEXATTRIB1FARBPROC)load("glVertexAttrib1fARB");
+	glad_glVertexAttrib1sARB = (PFNGLVERTEXATTRIB1SARBPROC)load("glVertexAttrib1sARB");
+	glad_glVertexAttrib1dARB = (PFNGLVERTEXATTRIB1DARBPROC)load("glVertexAttrib1dARB");
+	glad_glVertexAttrib2fARB = (PFNGLVERTEXATTRIB2FARBPROC)load("glVertexAttrib2fARB");
+	glad_glVertexAttrib2sARB = (PFNGLVERTEXATTRIB2SARBPROC)load("glVertexAttrib2sARB");
+	glad_glVertexAttrib2dARB = (PFNGLVERTEXATTRIB2DARBPROC)load("glVertexAttrib2dARB");
+	glad_glVertexAttrib3fARB = (PFNGLVERTEXATTRIB3FARBPROC)load("glVertexAttrib3fARB");
+	glad_glVertexAttrib3sARB = (PFNGLVERTEXATTRIB3SARBPROC)load("glVertexAttrib3sARB");
+	glad_glVertexAttrib3dARB = (PFNGLVERTEXATTRIB3DARBPROC)load("glVertexAttrib3dARB");
+	glad_glVertexAttrib4fARB = (PFNGLVERTEXATTRIB4FARBPROC)load("glVertexAttrib4fARB");
+	glad_glVertexAttrib4sARB = (PFNGLVERTEXATTRIB4SARBPROC)load("glVertexAttrib4sARB");
+	glad_glVertexAttrib4dARB = (PFNGLVERTEXATTRIB4DARBPROC)load("glVertexAttrib4dARB");
+	glad_glVertexAttrib4NubARB = (PFNGLVERTEXATTRIB4NUBARBPROC)load("glVertexAttrib4NubARB");
+	glad_glVertexAttrib1fvARB = (PFNGLVERTEXATTRIB1FVARBPROC)load("glVertexAttrib1fvARB");
+	glad_glVertexAttrib1svARB = (PFNGLVERTEXATTRIB1SVARBPROC)load("glVertexAttrib1svARB");
+	glad_glVertexAttrib1dvARB = (PFNGLVERTEXATTRIB1DVARBPROC)load("glVertexAttrib1dvARB");
+	glad_glVertexAttrib2fvARB = (PFNGLVERTEXATTRIB2FVARBPROC)load("glVertexAttrib2fvARB");
+	glad_glVertexAttrib2svARB = (PFNGLVERTEXATTRIB2SVARBPROC)load("glVertexAttrib2svARB");
+	glad_glVertexAttrib2dvARB = (PFNGLVERTEXATTRIB2DVARBPROC)load("glVertexAttrib2dvARB");
+	glad_glVertexAttrib3fvARB = (PFNGLVERTEXATTRIB3FVARBPROC)load("glVertexAttrib3fvARB");
+	glad_glVertexAttrib3svARB = (PFNGLVERTEXATTRIB3SVARBPROC)load("glVertexAttrib3svARB");
+	glad_glVertexAttrib3dvARB = (PFNGLVERTEXATTRIB3DVARBPROC)load("glVertexAttrib3dvARB");
+	glad_glVertexAttrib4fvARB = (PFNGLVERTEXATTRIB4FVARBPROC)load("glVertexAttrib4fvARB");
+	glad_glVertexAttrib4svARB = (PFNGLVERTEXATTRIB4SVARBPROC)load("glVertexAttrib4svARB");
+	glad_glVertexAttrib4dvARB = (PFNGLVERTEXATTRIB4DVARBPROC)load("glVertexAttrib4dvARB");
+	glad_glVertexAttrib4ivARB = (PFNGLVERTEXATTRIB4IVARBPROC)load("glVertexAttrib4ivARB");
+	glad_glVertexAttrib4bvARB = (PFNGLVERTEXATTRIB4BVARBPROC)load("glVertexAttrib4bvARB");
+	glad_glVertexAttrib4ubvARB = (PFNGLVERTEXATTRIB4UBVARBPROC)load("glVertexAttrib4ubvARB");
+	glad_glVertexAttrib4usvARB = (PFNGLVERTEXATTRIB4USVARBPROC)load("glVertexAttrib4usvARB");
+	glad_glVertexAttrib4uivARB = (PFNGLVERTEXATTRIB4UIVARBPROC)load("glVertexAttrib4uivARB");
+	glad_glVertexAttrib4NbvARB = (PFNGLVERTEXATTRIB4NBVARBPROC)load("glVertexAttrib4NbvARB");
+	glad_glVertexAttrib4NsvARB = (PFNGLVERTEXATTRIB4NSVARBPROC)load("glVertexAttrib4NsvARB");
+	glad_glVertexAttrib4NivARB = (PFNGLVERTEXATTRIB4NIVARBPROC)load("glVertexAttrib4NivARB");
+	glad_glVertexAttrib4NubvARB = (PFNGLVERTEXATTRIB4NUBVARBPROC)load("glVertexAttrib4NubvARB");
+	glad_glVertexAttrib4NusvARB = (PFNGLVERTEXATTRIB4NUSVARBPROC)load("glVertexAttrib4NusvARB");
+	glad_glVertexAttrib4NuivARB = (PFNGLVERTEXATTRIB4NUIVARBPROC)load("glVertexAttrib4NuivARB");
+	glad_glVertexAttribPointerARB = (PFNGLVERTEXATTRIBPOINTERARBPROC)load("glVertexAttribPointerARB");
+	glad_glEnableVertexAttribArrayARB = (PFNGLENABLEVERTEXATTRIBARRAYARBPROC)load("glEnableVertexAttribArrayARB");
+	glad_glDisableVertexAttribArrayARB = (PFNGLDISABLEVERTEXATTRIBARRAYARBPROC)load("glDisableVertexAttribArrayARB");
+	glad_glBindAttribLocationARB = (PFNGLBINDATTRIBLOCATIONARBPROC)load("glBindAttribLocationARB");
+	glad_glGetActiveAttribARB = (PFNGLGETACTIVEATTRIBARBPROC)load("glGetActiveAttribARB");
+	glad_glGetAttribLocationARB = (PFNGLGETATTRIBLOCATIONARBPROC)load("glGetAttribLocationARB");
+	glad_glGetVertexAttribdvARB = (PFNGLGETVERTEXATTRIBDVARBPROC)load("glGetVertexAttribdvARB");
+	glad_glGetVertexAttribfvARB = (PFNGLGETVERTEXATTRIBFVARBPROC)load("glGetVertexAttribfvARB");
+	glad_glGetVertexAttribivARB = (PFNGLGETVERTEXATTRIBIVARBPROC)load("glGetVertexAttribivARB");
+	glad_glGetVertexAttribPointervARB = (PFNGLGETVERTEXATTRIBPOINTERVARBPROC)load("glGetVertexAttribPointervARB");
+}
+static void load_GL_ARB_tessellation_shader(GLADloadproc load) {
+	if(!GLAD_GL_ARB_tessellation_shader) return;
+	glad_glPatchParameteri = (PFNGLPATCHPARAMETERIPROC)load("glPatchParameteri");
+	glad_glPatchParameterfv = (PFNGLPATCHPARAMETERFVPROC)load("glPatchParameterfv");
+}
+static void load_GL_EXT_draw_buffers2(GLADloadproc load) {
+	if(!GLAD_GL_EXT_draw_buffers2) return;
+	glad_glColorMaskIndexedEXT = (PFNGLCOLORMASKINDEXEDEXTPROC)load("glColorMaskIndexedEXT");
+	glad_glGetBooleanIndexedvEXT = (PFNGLGETBOOLEANINDEXEDVEXTPROC)load("glGetBooleanIndexedvEXT");
+	glad_glGetIntegerIndexedvEXT = (PFNGLGETINTEGERINDEXEDVEXTPROC)load("glGetIntegerIndexedvEXT");
+	glad_glEnableIndexedEXT = (PFNGLENABLEINDEXEDEXTPROC)load("glEnableIndexedEXT");
+	glad_glDisableIndexedEXT = (PFNGLDISABLEINDEXEDEXTPROC)load("glDisableIndexedEXT");
+	glad_glIsEnabledIndexedEXT = (PFNGLISENABLEDINDEXEDEXTPROC)load("glIsEnabledIndexedEXT");
+}
+static void load_GL_ARB_vertex_attrib_64bit(GLADloadproc load) {
+	if(!GLAD_GL_ARB_vertex_attrib_64bit) return;
+	glad_glVertexAttribL1d = (PFNGLVERTEXATTRIBL1DPROC)load("glVertexAttribL1d");
+	glad_glVertexAttribL2d = (PFNGLVERTEXATTRIBL2DPROC)load("glVertexAttribL2d");
+	glad_glVertexAttribL3d = (PFNGLVERTEXATTRIBL3DPROC)load("glVertexAttribL3d");
+	glad_glVertexAttribL4d = (PFNGLVERTEXATTRIBL4DPROC)load("glVertexAttribL4d");
+	glad_glVertexAttribL1dv = (PFNGLVERTEXATTRIBL1DVPROC)load("glVertexAttribL1dv");
+	glad_glVertexAttribL2dv = (PFNGLVERTEXATTRIBL2DVPROC)load("glVertexAttribL2dv");
+	glad_glVertexAttribL3dv = (PFNGLVERTEXATTRIBL3DVPROC)load("glVertexAttribL3dv");
+	glad_glVertexAttribL4dv = (PFNGLVERTEXATTRIBL4DVPROC)load("glVertexAttribL4dv");
+	glad_glVertexAttribLPointer = (PFNGLVERTEXATTRIBLPOINTERPROC)load("glVertexAttribLPointer");
+	glad_glGetVertexAttribLdv = (PFNGLGETVERTEXATTRIBLDVPROC)load("glGetVertexAttribLdv");
+}
+static void load_GL_EXT_texture_filter_minmax(GLADloadproc load) {
+	if(!GLAD_GL_EXT_texture_filter_minmax) return;
+	glad_glRasterSamplesEXT = (PFNGLRASTERSAMPLESEXTPROC)load("glRasterSamplesEXT");
+}
+static void load_GL_AMD_interleaved_elements(GLADloadproc load) {
+	if(!GLAD_GL_AMD_interleaved_elements) return;
+	glad_glVertexAttribParameteriAMD = (PFNGLVERTEXATTRIBPARAMETERIAMDPROC)load("glVertexAttribParameteriAMD");
+}
+static void load_GL_ARB_fragment_program(GLADloadproc load) {
+	if(!GLAD_GL_ARB_fragment_program) return;
+	glad_glProgramStringARB = (PFNGLPROGRAMSTRINGARBPROC)load("glProgramStringARB");
+	glad_glBindProgramARB = (PFNGLBINDPROGRAMARBPROC)load("glBindProgramARB");
+	glad_glDeleteProgramsARB = (PFNGLDELETEPROGRAMSARBPROC)load("glDeleteProgramsARB");
+	glad_glGenProgramsARB = (PFNGLGENPROGRAMSARBPROC)load("glGenProgramsARB");
+	glad_glProgramEnvParameter4dARB = (PFNGLPROGRAMENVPARAMETER4DARBPROC)load("glProgramEnvParameter4dARB");
+	glad_glProgramEnvParameter4dvARB = (PFNGLPROGRAMENVPARAMETER4DVARBPROC)load("glProgramEnvParameter4dvARB");
+	glad_glProgramEnvParameter4fARB = (PFNGLPROGRAMENVPARAMETER4FARBPROC)load("glProgramEnvParameter4fARB");
+	glad_glProgramEnvParameter4fvARB = (PFNGLPROGRAMENVPARAMETER4FVARBPROC)load("glProgramEnvParameter4fvARB");
+	glad_glProgramLocalParameter4dARB = (PFNGLPROGRAMLOCALPARAMETER4DARBPROC)load("glProgramLocalParameter4dARB");
+	glad_glProgramLocalParameter4dvARB = (PFNGLPROGRAMLOCALPARAMETER4DVARBPROC)load("glProgramLocalParameter4dvARB");
+	glad_glProgramLocalParameter4fARB = (PFNGLPROGRAMLOCALPARAMETER4FARBPROC)load("glProgramLocalParameter4fARB");
+	glad_glProgramLocalParameter4fvARB = (PFNGLPROGRAMLOCALPARAMETER4FVARBPROC)load("glProgramLocalParameter4fvARB");
+	glad_glGetProgramEnvParameterdvARB = (PFNGLGETPROGRAMENVPARAMETERDVARBPROC)load("glGetProgramEnvParameterdvARB");
+	glad_glGetProgramEnvParameterfvARB = (PFNGLGETPROGRAMENVPARAMETERFVARBPROC)load("glGetProgramEnvParameterfvARB");
+	glad_glGetProgramLocalParameterdvARB = (PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC)load("glGetProgramLocalParameterdvARB");
+	glad_glGetProgramLocalParameterfvARB = (PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC)load("glGetProgramLocalParameterfvARB");
+	glad_glGetProgramivARB = (PFNGLGETPROGRAMIVARBPROC)load("glGetProgramivARB");
+	glad_glGetProgramStringARB = (PFNGLGETPROGRAMSTRINGARBPROC)load("glGetProgramStringARB");
+	glad_glIsProgramARB = (PFNGLISPROGRAMARBPROC)load("glIsProgramARB");
+}
+static void load_GL_ARB_texture_storage(GLADloadproc load) {
+	if(!GLAD_GL_ARB_texture_storage) return;
+	glad_glTexStorage1D = (PFNGLTEXSTORAGE1DPROC)load("glTexStorage1D");
+	glad_glTexStorage2D = (PFNGLTEXSTORAGE2DPROC)load("glTexStorage2D");
+	glad_glTexStorage3D = (PFNGLTEXSTORAGE3DPROC)load("glTexStorage3D");
+}
+static void load_GL_ARB_copy_image(GLADloadproc load) {
+	if(!GLAD_GL_ARB_copy_image) return;
+	glad_glCopyImageSubData = (PFNGLCOPYIMAGESUBDATAPROC)load("glCopyImageSubData");
+}
+static void load_GL_SGIS_pixel_texture(GLADloadproc load) {
+	if(!GLAD_GL_SGIS_pixel_texture) return;
+	glad_glPixelTexGenParameteriSGIS = (PFNGLPIXELTEXGENPARAMETERISGISPROC)load("glPixelTexGenParameteriSGIS");
+	glad_glPixelTexGenParameterivSGIS = (PFNGLPIXELTEXGENPARAMETERIVSGISPROC)load("glPixelTexGenParameterivSGIS");
+	glad_glPixelTexGenParameterfSGIS = (PFNGLPIXELTEXGENPARAMETERFSGISPROC)load("glPixelTexGenParameterfSGIS");
+	glad_glPixelTexGenParameterfvSGIS = (PFNGLPIXELTEXGENPARAMETERFVSGISPROC)load("glPixelTexGenParameterfvSGIS");
+	glad_glGetPixelTexGenParameterivSGIS = (PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC)load("glGetPixelTexGenParameterivSGIS");
+	glad_glGetPixelTexGenParameterfvSGIS = (PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC)load("glGetPixelTexGenParameterfvSGIS");
+}
+static void load_GL_SGIX_instruments(GLADloadproc load) {
+	if(!GLAD_GL_SGIX_instruments) return;
+	glad_glGetInstrumentsSGIX = (PFNGLGETINSTRUMENTSSGIXPROC)load("glGetInstrumentsSGIX");
+	glad_glInstrumentsBufferSGIX = (PFNGLINSTRUMENTSBUFFERSGIXPROC)load("glInstrumentsBufferSGIX");
+	glad_glPollInstrumentsSGIX = (PFNGLPOLLINSTRUMENTSSGIXPROC)load("glPollInstrumentsSGIX");
+	glad_glReadInstrumentsSGIX = (PFNGLREADINSTRUMENTSSGIXPROC)load("glReadInstrumentsSGIX");
+	glad_glStartInstrumentsSGIX = (PFNGLSTARTINSTRUMENTSSGIXPROC)load("glStartInstrumentsSGIX");
+	glad_glStopInstrumentsSGIX = (PFNGLSTOPINSTRUMENTSSGIXPROC)load("glStopInstrumentsSGIX");
+}
+static void load_GL_ARB_shader_storage_buffer_object(GLADloadproc load) {
+	if(!GLAD_GL_ARB_shader_storage_buffer_object) return;
+	glad_glShaderStorageBlockBinding = (PFNGLSHADERSTORAGEBLOCKBINDINGPROC)load("glShaderStorageBlockBinding");
+}
+static void load_GL_EXT_blend_minmax(GLADloadproc load) {
+	if(!GLAD_GL_EXT_blend_minmax) return;
+	glad_glBlendEquationEXT = (PFNGLBLENDEQUATIONEXTPROC)load("glBlendEquationEXT");
+}
+static void load_GL_ARB_base_instance(GLADloadproc load) {
+	if(!GLAD_GL_ARB_base_instance) return;
+	glad_glDrawArraysInstancedBaseInstance = (PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC)load("glDrawArraysInstancedBaseInstance");
+	glad_glDrawElementsInstancedBaseInstance = (PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC)load("glDrawElementsInstancedBaseInstance");
+	glad_glDrawElementsInstancedBaseVertexBaseInstance = (PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC)load("glDrawElementsInstancedBaseVertexBaseInstance");
+}
+static void load_GL_ARB_ES3_1_compatibility(GLADloadproc load) {
+	if(!GLAD_GL_ARB_ES3_1_compatibility) return;
+	glad_glMemoryBarrierByRegion = (PFNGLMEMORYBARRIERBYREGIONPROC)load("glMemoryBarrierByRegion");
+}
+static void load_GL_EXT_texture_integer(GLADloadproc load) {
+	if(!GLAD_GL_EXT_texture_integer) return;
+	glad_glTexParameterIivEXT = (PFNGLTEXPARAMETERIIVEXTPROC)load("glTexParameterIivEXT");
+	glad_glTexParameterIuivEXT = (PFNGLTEXPARAMETERIUIVEXTPROC)load("glTexParameterIuivEXT");
+	glad_glGetTexParameterIivEXT = (PFNGLGETTEXPARAMETERIIVEXTPROC)load("glGetTexParameterIivEXT");
+	glad_glGetTexParameterIuivEXT = (PFNGLGETTEXPARAMETERIUIVEXTPROC)load("glGetTexParameterIuivEXT");
+	glad_glClearColorIiEXT = (PFNGLCLEARCOLORIIEXTPROC)load("glClearColorIiEXT");
+	glad_glClearColorIuiEXT = (PFNGLCLEARCOLORIUIEXTPROC)load("glClearColorIuiEXT");
+}
+static void load_GL_ARB_texture_multisample(GLADloadproc load) {
+	if(!GLAD_GL_ARB_texture_multisample) return;
+	glad_glTexImage2DMultisample = (PFNGLTEXIMAGE2DMULTISAMPLEPROC)load("glTexImage2DMultisample");
+	glad_glTexImage3DMultisample = (PFNGLTEXIMAGE3DMULTISAMPLEPROC)load("glTexImage3DMultisample");
+	glad_glGetMultisamplefv = (PFNGLGETMULTISAMPLEFVPROC)load("glGetMultisamplefv");
+	glad_glSampleMaski = (PFNGLSAMPLEMASKIPROC)load("glSampleMaski");
+}
+static void load_GL_AMD_gpu_shader_int64(GLADloadproc load) {
+	if(!GLAD_GL_AMD_gpu_shader_int64) return;
+	glad_glUniform1i64NV = (PFNGLUNIFORM1I64NVPROC)load("glUniform1i64NV");
+	glad_glUniform2i64NV = (PFNGLUNIFORM2I64NVPROC)load("glUniform2i64NV");
+	glad_glUniform3i64NV = (PFNGLUNIFORM3I64NVPROC)load("glUniform3i64NV");
+	glad_glUniform4i64NV = (PFNGLUNIFORM4I64NVPROC)load("glUniform4i64NV");
+	glad_glUniform1i64vNV = (PFNGLUNIFORM1I64VNVPROC)load("glUniform1i64vNV");
+	glad_glUniform2i64vNV = (PFNGLUNIFORM2I64VNVPROC)load("glUniform2i64vNV");
+	glad_glUniform3i64vNV = (PFNGLUNIFORM3I64VNVPROC)load("glUniform3i64vNV");
+	glad_glUniform4i64vNV = (PFNGLUNIFORM4I64VNVPROC)load("glUniform4i64vNV");
+	glad_glUniform1ui64NV = (PFNGLUNIFORM1UI64NVPROC)load("glUniform1ui64NV");
+	glad_glUniform2ui64NV = (PFNGLUNIFORM2UI64NVPROC)load("glUniform2ui64NV");
+	glad_glUniform3ui64NV = (PFNGLUNIFORM3UI64NVPROC)load("glUniform3ui64NV");
+	glad_glUniform4ui64NV = (PFNGLUNIFORM4UI64NVPROC)load("glUniform4ui64NV");
+	glad_glUniform1ui64vNV = (PFNGLUNIFORM1UI64VNVPROC)load("glUniform1ui64vNV");
+	glad_glUniform2ui64vNV = (PFNGLUNIFORM2UI64VNVPROC)load("glUniform2ui64vNV");
+	glad_glUniform3ui64vNV = (PFNGLUNIFORM3UI64VNVPROC)load("glUniform3ui64vNV");
+	glad_glUniform4ui64vNV = (PFNGLUNIFORM4UI64VNVPROC)load("glUniform4ui64vNV");
+	glad_glGetUniformi64vNV = (PFNGLGETUNIFORMI64VNVPROC)load("glGetUniformi64vNV");
+	glad_glGetUniformui64vNV = (PFNGLGETUNIFORMUI64VNVPROC)load("glGetUniformui64vNV");
+	glad_glProgramUniform1i64NV = (PFNGLPROGRAMUNIFORM1I64NVPROC)load("glProgramUniform1i64NV");
+	glad_glProgramUniform2i64NV = (PFNGLPROGRAMUNIFORM2I64NVPROC)load("glProgramUniform2i64NV");
+	glad_glProgramUniform3i64NV = (PFNGLPROGRAMUNIFORM3I64NVPROC)load("glProgramUniform3i64NV");
+	glad_glProgramUniform4i64NV = (PFNGLPROGRAMUNIFORM4I64NVPROC)load("glProgramUniform4i64NV");
+	glad_glProgramUniform1i64vNV = (PFNGLPROGRAMUNIFORM1I64VNVPROC)load("glProgramUniform1i64vNV");
+	glad_glProgramUniform2i64vNV = (PFNGLPROGRAMUNIFORM2I64VNVPROC)load("glProgramUniform2i64vNV");
+	glad_glProgramUniform3i64vNV = (PFNGLPROGRAMUNIFORM3I64VNVPROC)load("glProgramUniform3i64vNV");
+	glad_glProgramUniform4i64vNV = (PFNGLPROGRAMUNIFORM4I64VNVPROC)load("glProgramUniform4i64vNV");
+	glad_glProgramUniform1ui64NV = (PFNGLPROGRAMUNIFORM1UI64NVPROC)load("glProgramUniform1ui64NV");
+	glad_glProgramUniform2ui64NV = (PFNGLPROGRAMUNIFORM2UI64NVPROC)load("glProgramUniform2ui64NV");
+	glad_glProgramUniform3ui64NV = (PFNGLPROGRAMUNIFORM3UI64NVPROC)load("glProgramUniform3ui64NV");
+	glad_glProgramUniform4ui64NV = (PFNGLPROGRAMUNIFORM4UI64NVPROC)load("glProgramUniform4ui64NV");
+	glad_glProgramUniform1ui64vNV = (PFNGLPROGRAMUNIFORM1UI64VNVPROC)load("glProgramUniform1ui64vNV");
+	glad_glProgramUniform2ui64vNV = (PFNGLPROGRAMUNIFORM2UI64VNVPROC)load("glProgramUniform2ui64vNV");
+	glad_glProgramUniform3ui64vNV = (PFNGLPROGRAMUNIFORM3UI64VNVPROC)load("glProgramUniform3ui64vNV");
+	glad_glProgramUniform4ui64vNV = (PFNGLPROGRAMUNIFORM4UI64VNVPROC)load("glProgramUniform4ui64vNV");
+}
+static void load_GL_AMD_vertex_shader_tessellator(GLADloadproc load) {
+	if(!GLAD_GL_AMD_vertex_shader_tessellator) return;
+	glad_glTessellationFactorAMD = (PFNGLTESSELLATIONFACTORAMDPROC)load("glTessellationFactorAMD");
+	glad_glTessellationModeAMD = (PFNGLTESSELLATIONMODEAMDPROC)load("glTessellationModeAMD");
+}
+static void load_GL_ARB_invalidate_subdata(GLADloadproc load) {
+	if(!GLAD_GL_ARB_invalidate_subdata) return;
+	glad_glInvalidateTexSubImage = (PFNGLINVALIDATETEXSUBIMAGEPROC)load("glInvalidateTexSubImage");
+	glad_glInvalidateTexImage = (PFNGLINVALIDATETEXIMAGEPROC)load("glInvalidateTexImage");
+	glad_glInvalidateBufferSubData = (PFNGLINVALIDATEBUFFERSUBDATAPROC)load("glInvalidateBufferSubData");
+	glad_glInvalidateBufferData = (PFNGLINVALIDATEBUFFERDATAPROC)load("glInvalidateBufferData");
+	glad_glInvalidateFramebuffer = (PFNGLINVALIDATEFRAMEBUFFERPROC)load("glInvalidateFramebuffer");
+	glad_glInvalidateSubFramebuffer = (PFNGLINVALIDATESUBFRAMEBUFFERPROC)load("glInvalidateSubFramebuffer");
+}
+static void load_GL_EXT_index_material(GLADloadproc load) {
+	if(!GLAD_GL_EXT_index_material) return;
+	glad_glIndexMaterialEXT = (PFNGLINDEXMATERIALEXTPROC)load("glIndexMaterialEXT");
+}
+static void load_GL_INTEL_parallel_arrays(GLADloadproc load) {
+	if(!GLAD_GL_INTEL_parallel_arrays) return;
+	glad_glVertexPointervINTEL = (PFNGLVERTEXPOINTERVINTELPROC)load("glVertexPointervINTEL");
+	glad_glNormalPointervINTEL = (PFNGLNORMALPOINTERVINTELPROC)load("glNormalPointervINTEL");
+	glad_glColorPointervINTEL = (PFNGLCOLORPOINTERVINTELPROC)load("glColorPointervINTEL");
+	glad_glTexCoordPointervINTEL = (PFNGLTEXCOORDPOINTERVINTELPROC)load("glTexCoordPointervINTEL");
+}
+static void load_GL_ATI_draw_buffers(GLADloadproc load) {
+	if(!GLAD_GL_ATI_draw_buffers) return;
+	glad_glDrawBuffersATI = (PFNGLDRAWBUFFERSATIPROC)load("glDrawBuffersATI");
+}
+static void load_GL_SGIX_pixel_texture(GLADloadproc load) {
+	if(!GLAD_GL_SGIX_pixel_texture) return;
+	glad_glPixelTexGenSGIX = (PFNGLPIXELTEXGENSGIXPROC)load("glPixelTexGenSGIX");
+}
+static void load_GL_ARB_timer_query(GLADloadproc load) {
+	if(!GLAD_GL_ARB_timer_query) return;
+	glad_glQueryCounter = (PFNGLQUERYCOUNTERPROC)load("glQueryCounter");
+	glad_glGetQueryObjecti64v = (PFNGLGETQUERYOBJECTI64VPROC)load("glGetQueryObjecti64v");
+	glad_glGetQueryObjectui64v = (PFNGLGETQUERYOBJECTUI64VPROC)load("glGetQueryObjectui64v");
+}
+static void load_GL_NV_parameter_buffer_object(GLADloadproc load) {
+	if(!GLAD_GL_NV_parameter_buffer_object) return;
+	glad_glProgramBufferParametersfvNV = (PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC)load("glProgramBufferParametersfvNV");
+	glad_glProgramBufferParametersIivNV = (PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC)load("glProgramBufferParametersIivNV");
+	glad_glProgramBufferParametersIuivNV = (PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC)load("glProgramBufferParametersIuivNV");
+}
+static void load_GL_ARB_direct_state_access(GLADloadproc load) {
+	if(!GLAD_GL_ARB_direct_state_access) return;
+	glad_glCreateTransformFeedbacks = (PFNGLCREATETRANSFORMFEEDBACKSPROC)load("glCreateTransformFeedbacks");
+	glad_glTransformFeedbackBufferBase = (PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC)load("glTransformFeedbackBufferBase");
+	glad_glTransformFeedbackBufferRange = (PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC)load("glTransformFeedbackBufferRange");
+	glad_glGetTransformFeedbackiv = (PFNGLGETTRANSFORMFEEDBACKIVPROC)load("glGetTransformFeedbackiv");
+	glad_glGetTransformFeedbacki_v = (PFNGLGETTRANSFORMFEEDBACKI_VPROC)load("glGetTransformFeedbacki_v");
+	glad_glGetTransformFeedbacki64_v = (PFNGLGETTRANSFORMFEEDBACKI64_VPROC)load("glGetTransformFeedbacki64_v");
+	glad_glCreateBuffers = (PFNGLCREATEBUFFERSPROC)load("glCreateBuffers");
+	glad_glNamedBufferStorage = (PFNGLNAMEDBUFFERSTORAGEPROC)load("glNamedBufferStorage");
+	glad_glNamedBufferData = (PFNGLNAMEDBUFFERDATAPROC)load("glNamedBufferData");
+	glad_glNamedBufferSubData = (PFNGLNAMEDBUFFERSUBDATAPROC)load("glNamedBufferSubData");
+	glad_glCopyNamedBufferSubData = (PFNGLCOPYNAMEDBUFFERSUBDATAPROC)load("glCopyNamedBufferSubData");
+	glad_glClearNamedBufferData = (PFNGLCLEARNAMEDBUFFERDATAPROC)load("glClearNamedBufferData");
+	glad_glClearNamedBufferSubData = (PFNGLCLEARNAMEDBUFFERSUBDATAPROC)load("glClearNamedBufferSubData");
+	glad_glMapNamedBuffer = (PFNGLMAPNAMEDBUFFERPROC)load("glMapNamedBuffer");
+	glad_glMapNamedBufferRange = (PFNGLMAPNAMEDBUFFERRANGEPROC)load("glMapNamedBufferRange");
+	glad_glUnmapNamedBuffer = (PFNGLUNMAPNAMEDBUFFERPROC)load("glUnmapNamedBuffer");
+	glad_glFlushMappedNamedBufferRange = (PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC)load("glFlushMappedNamedBufferRange");
+	glad_glGetNamedBufferParameteriv = (PFNGLGETNAMEDBUFFERPARAMETERIVPROC)load("glGetNamedBufferParameteriv");
+	glad_glGetNamedBufferParameteri64v = (PFNGLGETNAMEDBUFFERPARAMETERI64VPROC)load("glGetNamedBufferParameteri64v");
+	glad_glGetNamedBufferPointerv = (PFNGLGETNAMEDBUFFERPOINTERVPROC)load("glGetNamedBufferPointerv");
+	glad_glGetNamedBufferSubData = (PFNGLGETNAMEDBUFFERSUBDATAPROC)load("glGetNamedBufferSubData");
+	glad_glCreateFramebuffers = (PFNGLCREATEFRAMEBUFFERSPROC)load("glCreateFramebuffers");
+	glad_glNamedFramebufferRenderbuffer = (PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC)load("glNamedFramebufferRenderbuffer");
+	glad_glNamedFramebufferParameteri = (PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC)load("glNamedFramebufferParameteri");
+	glad_glNamedFramebufferTexture = (PFNGLNAMEDFRAMEBUFFERTEXTUREPROC)load("glNamedFramebufferTexture");
+	glad_glNamedFramebufferTextureLayer = (PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC)load("glNamedFramebufferTextureLayer");
+	glad_glNamedFramebufferDrawBuffer = (PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC)load("glNamedFramebufferDrawBuffer");
+	glad_glNamedFramebufferDrawBuffers = (PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC)load("glNamedFramebufferDrawBuffers");
+	glad_glNamedFramebufferReadBuffer = (PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC)load("glNamedFramebufferReadBuffer");
+	glad_glInvalidateNamedFramebufferData = (PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC)load("glInvalidateNamedFramebufferData");
+	glad_glInvalidateNamedFramebufferSubData = (PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC)load("glInvalidateNamedFramebufferSubData");
+	glad_glClearNamedFramebufferiv = (PFNGLCLEARNAMEDFRAMEBUFFERIVPROC)load("glClearNamedFramebufferiv");
+	glad_glClearNamedFramebufferuiv = (PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC)load("glClearNamedFramebufferuiv");
+	glad_glClearNamedFramebufferfv = (PFNGLCLEARNAMEDFRAMEBUFFERFVPROC)load("glClearNamedFramebufferfv");
+	glad_glClearNamedFramebufferfi = (PFNGLCLEARNAMEDFRAMEBUFFERFIPROC)load("glClearNamedFramebufferfi");
+	glad_glBlitNamedFramebuffer = (PFNGLBLITNAMEDFRAMEBUFFERPROC)load("glBlitNamedFramebuffer");
+	glad_glCheckNamedFramebufferStatus = (PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC)load("glCheckNamedFramebufferStatus");
+	glad_glGetNamedFramebufferParameteriv = (PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC)load("glGetNamedFramebufferParameteriv");
+	glad_glGetNamedFramebufferAttachmentParameteriv = (PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC)load("glGetNamedFramebufferAttachmentParameteriv");
+	glad_glCreateRenderbuffers = (PFNGLCREATERENDERBUFFERSPROC)load("glCreateRenderbuffers");
+	glad_glNamedRenderbufferStorage = (PFNGLNAMEDRENDERBUFFERSTORAGEPROC)load("glNamedRenderbufferStorage");
+	glad_glNamedRenderbufferStorageMultisample = (PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC)load("glNamedRenderbufferStorageMultisample");
+	glad_glGetNamedRenderbufferParameteriv = (PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC)load("glGetNamedRenderbufferParameteriv");
+	glad_glCreateTextures = (PFNGLCREATETEXTURESPROC)load("glCreateTextures");
+	glad_glTextureBuffer = (PFNGLTEXTUREBUFFERPROC)load("glTextureBuffer");
+	glad_glTextureBufferRange = (PFNGLTEXTUREBUFFERRANGEPROC)load("glTextureBufferRange");
+	glad_glTextureStorage1D = (PFNGLTEXTURESTORAGE1DPROC)load("glTextureStorage1D");
+	glad_glTextureStorage2D = (PFNGLTEXTURESTORAGE2DPROC)load("glTextureStorage2D");
+	glad_glTextureStorage3D = (PFNGLTEXTURESTORAGE3DPROC)load("glTextureStorage3D");
+	glad_glTextureStorage2DMultisample = (PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC)load("glTextureStorage2DMultisample");
+	glad_glTextureStorage3DMultisample = (PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC)load("glTextureStorage3DMultisample");
+	glad_glTextureSubImage1D = (PFNGLTEXTURESUBIMAGE1DPROC)load("glTextureSubImage1D");
+	glad_glTextureSubImage2D = (PFNGLTEXTURESUBIMAGE2DPROC)load("glTextureSubImage2D");
+	glad_glTextureSubImage3D = (PFNGLTEXTURESUBIMAGE3DPROC)load("glTextureSubImage3D");
+	glad_glCompressedTextureSubImage1D = (PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC)load("glCompressedTextureSubImage1D");
+	glad_glCompressedTextureSubImage2D = (PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC)load("glCompressedTextureSubImage2D");
+	glad_glCompressedTextureSubImage3D = (PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC)load("glCompressedTextureSubImage3D");
+	glad_glCopyTextureSubImage1D = (PFNGLCOPYTEXTURESUBIMAGE1DPROC)load("glCopyTextureSubImage1D");
+	glad_glCopyTextureSubImage2D = (PFNGLCOPYTEXTURESUBIMAGE2DPROC)load("glCopyTextureSubImage2D");
+	glad_glCopyTextureSubImage3D = (PFNGLCOPYTEXTURESUBIMAGE3DPROC)load("glCopyTextureSubImage3D");
+	glad_glTextureParameterf = (PFNGLTEXTUREPARAMETERFPROC)load("glTextureParameterf");
+	glad_glTextureParameterfv = (PFNGLTEXTUREPARAMETERFVPROC)load("glTextureParameterfv");
+	glad_glTextureParameteri = (PFNGLTEXTUREPARAMETERIPROC)load("glTextureParameteri");
+	glad_glTextureParameterIiv = (PFNGLTEXTUREPARAMETERIIVPROC)load("glTextureParameterIiv");
+	glad_glTextureParameterIuiv = (PFNGLTEXTUREPARAMETERIUIVPROC)load("glTextureParameterIuiv");
+	glad_glTextureParameteriv = (PFNGLTEXTUREPARAMETERIVPROC)load("glTextureParameteriv");
+	glad_glGenerateTextureMipmap = (PFNGLGENERATETEXTUREMIPMAPPROC)load("glGenerateTextureMipmap");
+	glad_glBindTextureUnit = (PFNGLBINDTEXTUREUNITPROC)load("glBindTextureUnit");
+	glad_glGetTextureImage = (PFNGLGETTEXTUREIMAGEPROC)load("glGetTextureImage");
+	glad_glGetCompressedTextureImage = (PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC)load("glGetCompressedTextureImage");
+	glad_glGetTextureLevelParameterfv = (PFNGLGETTEXTURELEVELPARAMETERFVPROC)load("glGetTextureLevelParameterfv");
+	glad_glGetTextureLevelParameteriv = (PFNGLGETTEXTURELEVELPARAMETERIVPROC)load("glGetTextureLevelParameteriv");
+	glad_glGetTextureParameterfv = (PFNGLGETTEXTUREPARAMETERFVPROC)load("glGetTextureParameterfv");
+	glad_glGetTextureParameterIiv = (PFNGLGETTEXTUREPARAMETERIIVPROC)load("glGetTextureParameterIiv");
+	glad_glGetTextureParameterIuiv = (PFNGLGETTEXTUREPARAMETERIUIVPROC)load("glGetTextureParameterIuiv");
+	glad_glGetTextureParameteriv = (PFNGLGETTEXTUREPARAMETERIVPROC)load("glGetTextureParameteriv");
+	glad_glCreateVertexArrays = (PFNGLCREATEVERTEXARRAYSPROC)load("glCreateVertexArrays");
+	glad_glDisableVertexArrayAttrib = (PFNGLDISABLEVERTEXARRAYATTRIBPROC)load("glDisableVertexArrayAttrib");
+	glad_glEnableVertexArrayAttrib = (PFNGLENABLEVERTEXARRAYATTRIBPROC)load("glEnableVertexArrayAttrib");
+	glad_glVertexArrayElementBuffer = (PFNGLVERTEXARRAYELEMENTBUFFERPROC)load("glVertexArrayElementBuffer");
+	glad_glVertexArrayVertexBuffer = (PFNGLVERTEXARRAYVERTEXBUFFERPROC)load("glVertexArrayVertexBuffer");
+	glad_glVertexArrayVertexBuffers = (PFNGLVERTEXARRAYVERTEXBUFFERSPROC)load("glVertexArrayVertexBuffers");
+	glad_glVertexArrayAttribBinding = (PFNGLVERTEXARRAYATTRIBBINDINGPROC)load("glVertexArrayAttribBinding");
+	glad_glVertexArrayAttribFormat = (PFNGLVERTEXARRAYATTRIBFORMATPROC)load("glVertexArrayAttribFormat");
+	glad_glVertexArrayAttribIFormat = (PFNGLVERTEXARRAYATTRIBIFORMATPROC)load("glVertexArrayAttribIFormat");
+	glad_glVertexArrayAttribLFormat = (PFNGLVERTEXARRAYATTRIBLFORMATPROC)load("glVertexArrayAttribLFormat");
+	glad_glVertexArrayBindingDivisor = (PFNGLVERTEXARRAYBINDINGDIVISORPROC)load("glVertexArrayBindingDivisor");
+	glad_glGetVertexArrayiv = (PFNGLGETVERTEXARRAYIVPROC)load("glGetVertexArrayiv");
+	glad_glGetVertexArrayIndexediv = (PFNGLGETVERTEXARRAYINDEXEDIVPROC)load("glGetVertexArrayIndexediv");
+	glad_glGetVertexArrayIndexed64iv = (PFNGLGETVERTEXARRAYINDEXED64IVPROC)load("glGetVertexArrayIndexed64iv");
+	glad_glCreateSamplers = (PFNGLCREATESAMPLERSPROC)load("glCreateSamplers");
+	glad_glCreateProgramPipelines = (PFNGLCREATEPROGRAMPIPELINESPROC)load("glCreateProgramPipelines");
+	glad_glCreateQueries = (PFNGLCREATEQUERIESPROC)load("glCreateQueries");
+	glad_glGetQueryBufferObjecti64v = (PFNGLGETQUERYBUFFEROBJECTI64VPROC)load("glGetQueryBufferObjecti64v");
+	glad_glGetQueryBufferObjectiv = (PFNGLGETQUERYBUFFEROBJECTIVPROC)load("glGetQueryBufferObjectiv");
+	glad_glGetQueryBufferObjectui64v = (PFNGLGETQUERYBUFFEROBJECTUI64VPROC)load("glGetQueryBufferObjectui64v");
+	glad_glGetQueryBufferObjectuiv = (PFNGLGETQUERYBUFFEROBJECTUIVPROC)load("glGetQueryBufferObjectuiv");
+}
+static void load_GL_ARB_uniform_buffer_object(GLADloadproc load) {
+	if(!GLAD_GL_ARB_uniform_buffer_object) return;
+	glad_glGetUniformIndices = (PFNGLGETUNIFORMINDICESPROC)load("glGetUniformIndices");
+	glad_glGetActiveUniformsiv = (PFNGLGETACTIVEUNIFORMSIVPROC)load("glGetActiveUniformsiv");
+	glad_glGetActiveUniformName = (PFNGLGETACTIVEUNIFORMNAMEPROC)load("glGetActiveUniformName");
+	glad_glGetUniformBlockIndex = (PFNGLGETUNIFORMBLOCKINDEXPROC)load("glGetUniformBlockIndex");
+	glad_glGetActiveUniformBlockiv = (PFNGLGETACTIVEUNIFORMBLOCKIVPROC)load("glGetActiveUniformBlockiv");
+	glad_glGetActiveUniformBlockName = (PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC)load("glGetActiveUniformBlockName");
+	glad_glUniformBlockBinding = (PFNGLUNIFORMBLOCKBINDINGPROC)load("glUniformBlockBinding");
+	glad_glBindBufferRange = (PFNGLBINDBUFFERRANGEPROC)load("glBindBufferRange");
+	glad_glBindBufferBase = (PFNGLBINDBUFFERBASEPROC)load("glBindBufferBase");
+	glad_glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC)load("glGetIntegeri_v");
+}
+static void load_GL_NV_transform_feedback2(GLADloadproc load) {
+	if(!GLAD_GL_NV_transform_feedback2) return;
+	glad_glBindTransformFeedbackNV = (PFNGLBINDTRANSFORMFEEDBACKNVPROC)load("glBindTransformFeedbackNV");
+	glad_glDeleteTransformFeedbacksNV = (PFNGLDELETETRANSFORMFEEDBACKSNVPROC)load("glDeleteTransformFeedbacksNV");
+	glad_glGenTransformFeedbacksNV = (PFNGLGENTRANSFORMFEEDBACKSNVPROC)load("glGenTransformFeedbacksNV");
+	glad_glIsTransformFeedbackNV = (PFNGLISTRANSFORMFEEDBACKNVPROC)load("glIsTransformFeedbackNV");
+	glad_glPauseTransformFeedbackNV = (PFNGLPAUSETRANSFORMFEEDBACKNVPROC)load("glPauseTransformFeedbackNV");
+	glad_glResumeTransformFeedbackNV = (PFNGLRESUMETRANSFORMFEEDBACKNVPROC)load("glResumeTransformFeedbackNV");
+	glad_glDrawTransformFeedbackNV = (PFNGLDRAWTRANSFORMFEEDBACKNVPROC)load("glDrawTransformFeedbackNV");
+}
+static void load_GL_EXT_blend_color(GLADloadproc load) {
+	if(!GLAD_GL_EXT_blend_color) return;
+	glad_glBlendColorEXT = (PFNGLBLENDCOLOREXTPROC)load("glBlendColorEXT");
+}
+static void load_GL_EXT_histogram(GLADloadproc load) {
+	if(!GLAD_GL_EXT_histogram) return;
+	glad_glGetHistogramEXT = (PFNGLGETHISTOGRAMEXTPROC)load("glGetHistogramEXT");
+	glad_glGetHistogramParameterfvEXT = (PFNGLGETHISTOGRAMPARAMETERFVEXTPROC)load("glGetHistogramParameterfvEXT");
+	glad_glGetHistogramParameterivEXT = (PFNGLGETHISTOGRAMPARAMETERIVEXTPROC)load("glGetHistogramParameterivEXT");
+	glad_glGetMinmaxEXT = (PFNGLGETMINMAXEXTPROC)load("glGetMinmaxEXT");
+	glad_glGetMinmaxParameterfvEXT = (PFNGLGETMINMAXPARAMETERFVEXTPROC)load("glGetMinmaxParameterfvEXT");
+	glad_glGetMinmaxParameterivEXT = (PFNGLGETMINMAXPARAMETERIVEXTPROC)load("glGetMinmaxParameterivEXT");
+	glad_glHistogramEXT = (PFNGLHISTOGRAMEXTPROC)load("glHistogramEXT");
+	glad_glMinmaxEXT = (PFNGLMINMAXEXTPROC)load("glMinmaxEXT");
+	glad_glResetHistogramEXT = (PFNGLRESETHISTOGRAMEXTPROC)load("glResetHistogramEXT");
+	glad_glResetMinmaxEXT = (PFNGLRESETMINMAXEXTPROC)load("glResetMinmaxEXT");
+}
+static void load_GL_ARB_get_texture_sub_image(GLADloadproc load) {
+	if(!GLAD_GL_ARB_get_texture_sub_image) return;
+	glad_glGetTextureSubImage = (PFNGLGETTEXTURESUBIMAGEPROC)load("glGetTextureSubImage");
+	glad_glGetCompressedTextureSubImage = (PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC)load("glGetCompressedTextureSubImage");
+}
+static void load_GL_SGIS_point_parameters(GLADloadproc load) {
+	if(!GLAD_GL_SGIS_point_parameters) return;
+	glad_glPointParameterfSGIS = (PFNGLPOINTPARAMETERFSGISPROC)load("glPointParameterfSGIS");
+	glad_glPointParameterfvSGIS = (PFNGLPOINTPARAMETERFVSGISPROC)load("glPointParameterfvSGIS");
+}
+static void load_GL_EXT_direct_state_access(GLADloadproc load) {
+	if(!GLAD_GL_EXT_direct_state_access) return;
+	glad_glMatrixLoadfEXT = (PFNGLMATRIXLOADFEXTPROC)load("glMatrixLoadfEXT");
+	glad_glMatrixLoaddEXT = (PFNGLMATRIXLOADDEXTPROC)load("glMatrixLoaddEXT");
+	glad_glMatrixMultfEXT = (PFNGLMATRIXMULTFEXTPROC)load("glMatrixMultfEXT");
+	glad_glMatrixMultdEXT = (PFNGLMATRIXMULTDEXTPROC)load("glMatrixMultdEXT");
+	glad_glMatrixLoadIdentityEXT = (PFNGLMATRIXLOADIDENTITYEXTPROC)load("glMatrixLoadIdentityEXT");
+	glad_glMatrixRotatefEXT = (PFNGLMATRIXROTATEFEXTPROC)load("glMatrixRotatefEXT");
+	glad_glMatrixRotatedEXT = (PFNGLMATRIXROTATEDEXTPROC)load("glMatrixRotatedEXT");
+	glad_glMatrixScalefEXT = (PFNGLMATRIXSCALEFEXTPROC)load("glMatrixScalefEXT");
+	glad_glMatrixScaledEXT = (PFNGLMATRIXSCALEDEXTPROC)load("glMatrixScaledEXT");
+	glad_glMatrixTranslatefEXT = (PFNGLMATRIXTRANSLATEFEXTPROC)load("glMatrixTranslatefEXT");
+	glad_glMatrixTranslatedEXT = (PFNGLMATRIXTRANSLATEDEXTPROC)load("glMatrixTranslatedEXT");
+	glad_glMatrixFrustumEXT = (PFNGLMATRIXFRUSTUMEXTPROC)load("glMatrixFrustumEXT");
+	glad_glMatrixOrthoEXT = (PFNGLMATRIXORTHOEXTPROC)load("glMatrixOrthoEXT");
+	glad_glMatrixPopEXT = (PFNGLMATRIXPOPEXTPROC)load("glMatrixPopEXT");
+	glad_glMatrixPushEXT = (PFNGLMATRIXPUSHEXTPROC)load("glMatrixPushEXT");
+	glad_glClientAttribDefaultEXT = (PFNGLCLIENTATTRIBDEFAULTEXTPROC)load("glClientAttribDefaultEXT");
+	glad_glPushClientAttribDefaultEXT = (PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC)load("glPushClientAttribDefaultEXT");
+	glad_glTextureParameterfEXT = (PFNGLTEXTUREPARAMETERFEXTPROC)load("glTextureParameterfEXT");
+	glad_glTextureParameterfvEXT = (PFNGLTEXTUREPARAMETERFVEXTPROC)load("glTextureParameterfvEXT");
+	glad_glTextureParameteriEXT = (PFNGLTEXTUREPARAMETERIEXTPROC)load("glTextureParameteriEXT");
+	glad_glTextureParameterivEXT = (PFNGLTEXTUREPARAMETERIVEXTPROC)load("glTextureParameterivEXT");
+	glad_glTextureImage1DEXT = (PFNGLTEXTUREIMAGE1DEXTPROC)load("glTextureImage1DEXT");
+	glad_glTextureImage2DEXT = (PFNGLTEXTUREIMAGE2DEXTPROC)load("glTextureImage2DEXT");
+	glad_glTextureSubImage1DEXT = (PFNGLTEXTURESUBIMAGE1DEXTPROC)load("glTextureSubImage1DEXT");
+	glad_glTextureSubImage2DEXT = (PFNGLTEXTURESUBIMAGE2DEXTPROC)load("glTextureSubImage2DEXT");
+	glad_glCopyTextureImage1DEXT = (PFNGLCOPYTEXTUREIMAGE1DEXTPROC)load("glCopyTextureImage1DEXT");
+	glad_glCopyTextureImage2DEXT = (PFNGLCOPYTEXTUREIMAGE2DEXTPROC)load("glCopyTextureImage2DEXT");
+	glad_glCopyTextureSubImage1DEXT = (PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC)load("glCopyTextureSubImage1DEXT");
+	glad_glCopyTextureSubImage2DEXT = (PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC)load("glCopyTextureSubImage2DEXT");
+	glad_glGetTextureImageEXT = (PFNGLGETTEXTUREIMAGEEXTPROC)load("glGetTextureImageEXT");
+	glad_glGetTextureParameterfvEXT = (PFNGLGETTEXTUREPARAMETERFVEXTPROC)load("glGetTextureParameterfvEXT");
+	glad_glGetTextureParameterivEXT = (PFNGLGETTEXTUREPARAMETERIVEXTPROC)load("glGetTextureParameterivEXT");
+	glad_glGetTextureLevelParameterfvEXT = (PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC)load("glGetTextureLevelParameterfvEXT");
+	glad_glGetTextureLevelParameterivEXT = (PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC)load("glGetTextureLevelParameterivEXT");
+	glad_glTextureImage3DEXT = (PFNGLTEXTUREIMAGE3DEXTPROC)load("glTextureImage3DEXT");
+	glad_glTextureSubImage3DEXT = (PFNGLTEXTURESUBIMAGE3DEXTPROC)load("glTextureSubImage3DEXT");
+	glad_glCopyTextureSubImage3DEXT = (PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC)load("glCopyTextureSubImage3DEXT");
+	glad_glBindMultiTextureEXT = (PFNGLBINDMULTITEXTUREEXTPROC)load("glBindMultiTextureEXT");
+	glad_glMultiTexCoordPointerEXT = (PFNGLMULTITEXCOORDPOINTEREXTPROC)load("glMultiTexCoordPointerEXT");
+	glad_glMultiTexEnvfEXT = (PFNGLMULTITEXENVFEXTPROC)load("glMultiTexEnvfEXT");
+	glad_glMultiTexEnvfvEXT = (PFNGLMULTITEXENVFVEXTPROC)load("glMultiTexEnvfvEXT");
+	glad_glMultiTexEnviEXT = (PFNGLMULTITEXENVIEXTPROC)load("glMultiTexEnviEXT");
+	glad_glMultiTexEnvivEXT = (PFNGLMULTITEXENVIVEXTPROC)load("glMultiTexEnvivEXT");
+	glad_glMultiTexGendEXT = (PFNGLMULTITEXGENDEXTPROC)load("glMultiTexGendEXT");
+	glad_glMultiTexGendvEXT = (PFNGLMULTITEXGENDVEXTPROC)load("glMultiTexGendvEXT");
+	glad_glMultiTexGenfEXT = (PFNGLMULTITEXGENFEXTPROC)load("glMultiTexGenfEXT");
+	glad_glMultiTexGenfvEXT = (PFNGLMULTITEXGENFVEXTPROC)load("glMultiTexGenfvEXT");
+	glad_glMultiTexGeniEXT = (PFNGLMULTITEXGENIEXTPROC)load("glMultiTexGeniEXT");
+	glad_glMultiTexGenivEXT = (PFNGLMULTITEXGENIVEXTPROC)load("glMultiTexGenivEXT");
+	glad_glGetMultiTexEnvfvEXT = (PFNGLGETMULTITEXENVFVEXTPROC)load("glGetMultiTexEnvfvEXT");
+	glad_glGetMultiTexEnvivEXT = (PFNGLGETMULTITEXENVIVEXTPROC)load("glGetMultiTexEnvivEXT");
+	glad_glGetMultiTexGendvEXT = (PFNGLGETMULTITEXGENDVEXTPROC)load("glGetMultiTexGendvEXT");
+	glad_glGetMultiTexGenfvEXT = (PFNGLGETMULTITEXGENFVEXTPROC)load("glGetMultiTexGenfvEXT");
+	glad_glGetMultiTexGenivEXT = (PFNGLGETMULTITEXGENIVEXTPROC)load("glGetMultiTexGenivEXT");
+	glad_glMultiTexParameteriEXT = (PFNGLMULTITEXPARAMETERIEXTPROC)load("glMultiTexParameteriEXT");
+	glad_glMultiTexParameterivEXT = (PFNGLMULTITEXPARAMETERIVEXTPROC)load("glMultiTexParameterivEXT");
+	glad_glMultiTexParameterfEXT = (PFNGLMULTITEXPARAMETERFEXTPROC)load("glMultiTexParameterfEXT");
+	glad_glMultiTexParameterfvEXT = (PFNGLMULTITEXPARAMETERFVEXTPROC)load("glMultiTexParameterfvEXT");
+	glad_glMultiTexImage1DEXT = (PFNGLMULTITEXIMAGE1DEXTPROC)load("glMultiTexImage1DEXT");
+	glad_glMultiTexImage2DEXT = (PFNGLMULTITEXIMAGE2DEXTPROC)load("glMultiTexImage2DEXT");
+	glad_glMultiTexSubImage1DEXT = (PFNGLMULTITEXSUBIMAGE1DEXTPROC)load("glMultiTexSubImage1DEXT");
+	glad_glMultiTexSubImage2DEXT = (PFNGLMULTITEXSUBIMAGE2DEXTPROC)load("glMultiTexSubImage2DEXT");
+	glad_glCopyMultiTexImage1DEXT = (PFNGLCOPYMULTITEXIMAGE1DEXTPROC)load("glCopyMultiTexImage1DEXT");
+	glad_glCopyMultiTexImage2DEXT = (PFNGLCOPYMULTITEXIMAGE2DEXTPROC)load("glCopyMultiTexImage2DEXT");
+	glad_glCopyMultiTexSubImage1DEXT = (PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC)load("glCopyMultiTexSubImage1DEXT");
+	glad_glCopyMultiTexSubImage2DEXT = (PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC)load("glCopyMultiTexSubImage2DEXT");
+	glad_glGetMultiTexImageEXT = (PFNGLGETMULTITEXIMAGEEXTPROC)load("glGetMultiTexImageEXT");
+	glad_glGetMultiTexParameterfvEXT = (PFNGLGETMULTITEXPARAMETERFVEXTPROC)load("glGetMultiTexParameterfvEXT");
+	glad_glGetMultiTexParameterivEXT = (PFNGLGETMULTITEXPARAMETERIVEXTPROC)load("glGetMultiTexParameterivEXT");
+	glad_glGetMultiTexLevelParameterfvEXT = (PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC)load("glGetMultiTexLevelParameterfvEXT");
+	glad_glGetMultiTexLevelParameterivEXT = (PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC)load("glGetMultiTexLevelParameterivEXT");
+	glad_glMultiTexImage3DEXT = (PFNGLMULTITEXIMAGE3DEXTPROC)load("glMultiTexImage3DEXT");
+	glad_glMultiTexSubImage3DEXT = (PFNGLMULTITEXSUBIMAGE3DEXTPROC)load("glMultiTexSubImage3DEXT");
+	glad_glCopyMultiTexSubImage3DEXT = (PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC)load("glCopyMultiTexSubImage3DEXT");
+	glad_glEnableClientStateIndexedEXT = (PFNGLENABLECLIENTSTATEINDEXEDEXTPROC)load("glEnableClientStateIndexedEXT");
+	glad_glDisableClientStateIndexedEXT = (PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC)load("glDisableClientStateIndexedEXT");
+	glad_glGetFloatIndexedvEXT = (PFNGLGETFLOATINDEXEDVEXTPROC)load("glGetFloatIndexedvEXT");
+	glad_glGetDoubleIndexedvEXT = (PFNGLGETDOUBLEINDEXEDVEXTPROC)load("glGetDoubleIndexedvEXT");
+	glad_glGetPointerIndexedvEXT = (PFNGLGETPOINTERINDEXEDVEXTPROC)load("glGetPointerIndexedvEXT");
+	glad_glEnableIndexedEXT = (PFNGLENABLEINDEXEDEXTPROC)load("glEnableIndexedEXT");
+	glad_glDisableIndexedEXT = (PFNGLDISABLEINDEXEDEXTPROC)load("glDisableIndexedEXT");
+	glad_glIsEnabledIndexedEXT = (PFNGLISENABLEDINDEXEDEXTPROC)load("glIsEnabledIndexedEXT");
+	glad_glGetIntegerIndexedvEXT = (PFNGLGETINTEGERINDEXEDVEXTPROC)load("glGetIntegerIndexedvEXT");
+	glad_glGetBooleanIndexedvEXT = (PFNGLGETBOOLEANINDEXEDVEXTPROC)load("glGetBooleanIndexedvEXT");
+	glad_glCompressedTextureImage3DEXT = (PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC)load("glCompressedTextureImage3DEXT");
+	glad_glCompressedTextureImage2DEXT = (PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC)load("glCompressedTextureImage2DEXT");
+	glad_glCompressedTextureImage1DEXT = (PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC)load("glCompressedTextureImage1DEXT");
+	glad_glCompressedTextureSubImage3DEXT = (PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC)load("glCompressedTextureSubImage3DEXT");
+	glad_glCompressedTextureSubImage2DEXT = (PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC)load("glCompressedTextureSubImage2DEXT");
+	glad_glCompressedTextureSubImage1DEXT = (PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC)load("glCompressedTextureSubImage1DEXT");
+	glad_glGetCompressedTextureImageEXT = (PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC)load("glGetCompressedTextureImageEXT");
+	glad_glCompressedMultiTexImage3DEXT = (PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC)load("glCompressedMultiTexImage3DEXT");
+	glad_glCompressedMultiTexImage2DEXT = (PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC)load("glCompressedMultiTexImage2DEXT");
+	glad_glCompressedMultiTexImage1DEXT = (PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC)load("glCompressedMultiTexImage1DEXT");
+	glad_glCompressedMultiTexSubImage3DEXT = (PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC)load("glCompressedMultiTexSubImage3DEXT");
+	glad_glCompressedMultiTexSubImage2DEXT = (PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC)load("glCompressedMultiTexSubImage2DEXT");
+	glad_glCompressedMultiTexSubImage1DEXT = (PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC)load("glCompressedMultiTexSubImage1DEXT");
+	glad_glGetCompressedMultiTexImageEXT = (PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC)load("glGetCompressedMultiTexImageEXT");
+	glad_glMatrixLoadTransposefEXT = (PFNGLMATRIXLOADTRANSPOSEFEXTPROC)load("glMatrixLoadTransposefEXT");
+	glad_glMatrixLoadTransposedEXT = (PFNGLMATRIXLOADTRANSPOSEDEXTPROC)load("glMatrixLoadTransposedEXT");
+	glad_glMatrixMultTransposefEXT = (PFNGLMATRIXMULTTRANSPOSEFEXTPROC)load("glMatrixMultTransposefEXT");
+	glad_glMatrixMultTransposedEXT = (PFNGLMATRIXMULTTRANSPOSEDEXTPROC)load("glMatrixMultTransposedEXT");
+	glad_glNamedBufferDataEXT = (PFNGLNAMEDBUFFERDATAEXTPROC)load("glNamedBufferDataEXT");
+	glad_glNamedBufferSubDataEXT = (PFNGLNAMEDBUFFERSUBDATAEXTPROC)load("glNamedBufferSubDataEXT");
+	glad_glMapNamedBufferEXT = (PFNGLMAPNAMEDBUFFEREXTPROC)load("glMapNamedBufferEXT");
+	glad_glUnmapNamedBufferEXT = (PFNGLUNMAPNAMEDBUFFEREXTPROC)load("glUnmapNamedBufferEXT");
+	glad_glGetNamedBufferParameterivEXT = (PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC)load("glGetNamedBufferParameterivEXT");
+	glad_glGetNamedBufferPointervEXT = (PFNGLGETNAMEDBUFFERPOINTERVEXTPROC)load("glGetNamedBufferPointervEXT");
+	glad_glGetNamedBufferSubDataEXT = (PFNGLGETNAMEDBUFFERSUBDATAEXTPROC)load("glGetNamedBufferSubDataEXT");
+	glad_glProgramUniform1fEXT = (PFNGLPROGRAMUNIFORM1FEXTPROC)load("glProgramUniform1fEXT");
+	glad_glProgramUniform2fEXT = (PFNGLPROGRAMUNIFORM2FEXTPROC)load("glProgramUniform2fEXT");
+	glad_glProgramUniform3fEXT = (PFNGLPROGRAMUNIFORM3FEXTPROC)load("glProgramUniform3fEXT");
+	glad_glProgramUniform4fEXT = (PFNGLPROGRAMUNIFORM4FEXTPROC)load("glProgramUniform4fEXT");
+	glad_glProgramUniform1iEXT = (PFNGLPROGRAMUNIFORM1IEXTPROC)load("glProgramUniform1iEXT");
+	glad_glProgramUniform2iEXT = (PFNGLPROGRAMUNIFORM2IEXTPROC)load("glProgramUniform2iEXT");
+	glad_glProgramUniform3iEXT = (PFNGLPROGRAMUNIFORM3IEXTPROC)load("glProgramUniform3iEXT");
+	glad_glProgramUniform4iEXT = (PFNGLPROGRAMUNIFORM4IEXTPROC)load("glProgramUniform4iEXT");
+	glad_glProgramUniform1fvEXT = (PFNGLPROGRAMUNIFORM1FVEXTPROC)load("glProgramUniform1fvEXT");
+	glad_glProgramUniform2fvEXT = (PFNGLPROGRAMUNIFORM2FVEXTPROC)load("glProgramUniform2fvEXT");
+	glad_glProgramUniform3fvEXT = (PFNGLPROGRAMUNIFORM3FVEXTPROC)load("glProgramUniform3fvEXT");
+	glad_glProgramUniform4fvEXT = (PFNGLPROGRAMUNIFORM4FVEXTPROC)load("glProgramUniform4fvEXT");
+	glad_glProgramUniform1ivEXT = (PFNGLPROGRAMUNIFORM1IVEXTPROC)load("glProgramUniform1ivEXT");
+	glad_glProgramUniform2ivEXT = (PFNGLPROGRAMUNIFORM2IVEXTPROC)load("glProgramUniform2ivEXT");
+	glad_glProgramUniform3ivEXT = (PFNGLPROGRAMUNIFORM3IVEXTPROC)load("glProgramUniform3ivEXT");
+	glad_glProgramUniform4ivEXT = (PFNGLPROGRAMUNIFORM4IVEXTPROC)load("glProgramUniform4ivEXT");
+	glad_glProgramUniformMatrix2fvEXT = (PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC)load("glProgramUniformMatrix2fvEXT");
+	glad_glProgramUniformMatrix3fvEXT = (PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC)load("glProgramUniformMatrix3fvEXT");
+	glad_glProgramUniformMatrix4fvEXT = (PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC)load("glProgramUniformMatrix4fvEXT");
+	glad_glProgramUniformMatrix2x3fvEXT = (PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC)load("glProgramUniformMatrix2x3fvEXT");
+	glad_glProgramUniformMatrix3x2fvEXT = (PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC)load("glProgramUniformMatrix3x2fvEXT");
+	glad_glProgramUniformMatrix2x4fvEXT = (PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC)load("glProgramUniformMatrix2x4fvEXT");
+	glad_glProgramUniformMatrix4x2fvEXT = (PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC)load("glProgramUniformMatrix4x2fvEXT");
+	glad_glProgramUniformMatrix3x4fvEXT = (PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC)load("glProgramUniformMatrix3x4fvEXT");
+	glad_glProgramUniformMatrix4x3fvEXT = (PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC)load("glProgramUniformMatrix4x3fvEXT");
+	glad_glTextureBufferEXT = (PFNGLTEXTUREBUFFEREXTPROC)load("glTextureBufferEXT");
+	glad_glMultiTexBufferEXT = (PFNGLMULTITEXBUFFEREXTPROC)load("glMultiTexBufferEXT");
+	glad_glTextureParameterIivEXT = (PFNGLTEXTUREPARAMETERIIVEXTPROC)load("glTextureParameterIivEXT");
+	glad_glTextureParameterIuivEXT = (PFNGLTEXTUREPARAMETERIUIVEXTPROC)load("glTextureParameterIuivEXT");
+	glad_glGetTextureParameterIivEXT = (PFNGLGETTEXTUREPARAMETERIIVEXTPROC)load("glGetTextureParameterIivEXT");
+	glad_glGetTextureParameterIuivEXT = (PFNGLGETTEXTUREPARAMETERIUIVEXTPROC)load("glGetTextureParameterIuivEXT");
+	glad_glMultiTexParameterIivEXT = (PFNGLMULTITEXPARAMETERIIVEXTPROC)load("glMultiTexParameterIivEXT");
+	glad_glMultiTexParameterIuivEXT = (PFNGLMULTITEXPARAMETERIUIVEXTPROC)load("glMultiTexParameterIuivEXT");
+	glad_glGetMultiTexParameterIivEXT = (PFNGLGETMULTITEXPARAMETERIIVEXTPROC)load("glGetMultiTexParameterIivEXT");
+	glad_glGetMultiTexParameterIuivEXT = (PFNGLGETMULTITEXPARAMETERIUIVEXTPROC)load("glGetMultiTexParameterIuivEXT");
+	glad_glProgramUniform1uiEXT = (PFNGLPROGRAMUNIFORM1UIEXTPROC)load("glProgramUniform1uiEXT");
+	glad_glProgramUniform2uiEXT = (PFNGLPROGRAMUNIFORM2UIEXTPROC)load("glProgramUniform2uiEXT");
+	glad_glProgramUniform3uiEXT = (PFNGLPROGRAMUNIFORM3UIEXTPROC)load("glProgramUniform3uiEXT");
+	glad_glProgramUniform4uiEXT = (PFNGLPROGRAMUNIFORM4UIEXTPROC)load("glProgramUniform4uiEXT");
+	glad_glProgramUniform1uivEXT = (PFNGLPROGRAMUNIFORM1UIVEXTPROC)load("glProgramUniform1uivEXT");
+	glad_glProgramUniform2uivEXT = (PFNGLPROGRAMUNIFORM2UIVEXTPROC)load("glProgramUniform2uivEXT");
+	glad_glProgramUniform3uivEXT = (PFNGLPROGRAMUNIFORM3UIVEXTPROC)load("glProgramUniform3uivEXT");
+	glad_glProgramUniform4uivEXT = (PFNGLPROGRAMUNIFORM4UIVEXTPROC)load("glProgramUniform4uivEXT");
+	glad_glNamedProgramLocalParameters4fvEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC)load("glNamedProgramLocalParameters4fvEXT");
+	glad_glNamedProgramLocalParameterI4iEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC)load("glNamedProgramLocalParameterI4iEXT");
+	glad_glNamedProgramLocalParameterI4ivEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC)load("glNamedProgramLocalParameterI4ivEXT");
+	glad_glNamedProgramLocalParametersI4ivEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC)load("glNamedProgramLocalParametersI4ivEXT");
+	glad_glNamedProgramLocalParameterI4uiEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC)load("glNamedProgramLocalParameterI4uiEXT");
+	glad_glNamedProgramLocalParameterI4uivEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC)load("glNamedProgramLocalParameterI4uivEXT");
+	glad_glNamedProgramLocalParametersI4uivEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC)load("glNamedProgramLocalParametersI4uivEXT");
+	glad_glGetNamedProgramLocalParameterIivEXT = (PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC)load("glGetNamedProgramLocalParameterIivEXT");
+	glad_glGetNamedProgramLocalParameterIuivEXT = (PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC)load("glGetNamedProgramLocalParameterIuivEXT");
+	glad_glEnableClientStateiEXT = (PFNGLENABLECLIENTSTATEIEXTPROC)load("glEnableClientStateiEXT");
+	glad_glDisableClientStateiEXT = (PFNGLDISABLECLIENTSTATEIEXTPROC)load("glDisableClientStateiEXT");
+	glad_glGetFloati_vEXT = (PFNGLGETFLOATI_VEXTPROC)load("glGetFloati_vEXT");
+	glad_glGetDoublei_vEXT = (PFNGLGETDOUBLEI_VEXTPROC)load("glGetDoublei_vEXT");
+	glad_glGetPointeri_vEXT = (PFNGLGETPOINTERI_VEXTPROC)load("glGetPointeri_vEXT");
+	glad_glNamedProgramStringEXT = (PFNGLNAMEDPROGRAMSTRINGEXTPROC)load("glNamedProgramStringEXT");
+	glad_glNamedProgramLocalParameter4dEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC)load("glNamedProgramLocalParameter4dEXT");
+	glad_glNamedProgramLocalParameter4dvEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC)load("glNamedProgramLocalParameter4dvEXT");
+	glad_glNamedProgramLocalParameter4fEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC)load("glNamedProgramLocalParameter4fEXT");
+	glad_glNamedProgramLocalParameter4fvEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC)load("glNamedProgramLocalParameter4fvEXT");
+	glad_glGetNamedProgramLocalParameterdvEXT = (PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC)load("glGetNamedProgramLocalParameterdvEXT");
+	glad_glGetNamedProgramLocalParameterfvEXT = (PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC)load("glGetNamedProgramLocalParameterfvEXT");
+	glad_glGetNamedProgramivEXT = (PFNGLGETNAMEDPROGRAMIVEXTPROC)load("glGetNamedProgramivEXT");
+	glad_glGetNamedProgramStringEXT = (PFNGLGETNAMEDPROGRAMSTRINGEXTPROC)load("glGetNamedProgramStringEXT");
+	glad_glNamedRenderbufferStorageEXT = (PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC)load("glNamedRenderbufferStorageEXT");
+	glad_glGetNamedRenderbufferParameterivEXT = (PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC)load("glGetNamedRenderbufferParameterivEXT");
+	glad_glNamedRenderbufferStorageMultisampleEXT = (PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC)load("glNamedRenderbufferStorageMultisampleEXT");
+	glad_glNamedRenderbufferStorageMultisampleCoverageEXT = (PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC)load("glNamedRenderbufferStorageMultisampleCoverageEXT");
+	glad_glCheckNamedFramebufferStatusEXT = (PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC)load("glCheckNamedFramebufferStatusEXT");
+	glad_glNamedFramebufferTexture1DEXT = (PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC)load("glNamedFramebufferTexture1DEXT");
+	glad_glNamedFramebufferTexture2DEXT = (PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC)load("glNamedFramebufferTexture2DEXT");
+	glad_glNamedFramebufferTexture3DEXT = (PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC)load("glNamedFramebufferTexture3DEXT");
+	glad_glNamedFramebufferRenderbufferEXT = (PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC)load("glNamedFramebufferRenderbufferEXT");
+	glad_glGetNamedFramebufferAttachmentParameterivEXT = (PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC)load("glGetNamedFramebufferAttachmentParameterivEXT");
+	glad_glGenerateTextureMipmapEXT = (PFNGLGENERATETEXTUREMIPMAPEXTPROC)load("glGenerateTextureMipmapEXT");
+	glad_glGenerateMultiTexMipmapEXT = (PFNGLGENERATEMULTITEXMIPMAPEXTPROC)load("glGenerateMultiTexMipmapEXT");
+	glad_glFramebufferDrawBufferEXT = (PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC)load("glFramebufferDrawBufferEXT");
+	glad_glFramebufferDrawBuffersEXT = (PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC)load("glFramebufferDrawBuffersEXT");
+	glad_glFramebufferReadBufferEXT = (PFNGLFRAMEBUFFERREADBUFFEREXTPROC)load("glFramebufferReadBufferEXT");
+	glad_glGetFramebufferParameterivEXT = (PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC)load("glGetFramebufferParameterivEXT");
+	glad_glNamedCopyBufferSubDataEXT = (PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC)load("glNamedCopyBufferSubDataEXT");
+	glad_glNamedFramebufferTextureEXT = (PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC)load("glNamedFramebufferTextureEXT");
+	glad_glNamedFramebufferTextureLayerEXT = (PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC)load("glNamedFramebufferTextureLayerEXT");
+	glad_glNamedFramebufferTextureFaceEXT = (PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC)load("glNamedFramebufferTextureFaceEXT");
+	glad_glTextureRenderbufferEXT = (PFNGLTEXTURERENDERBUFFEREXTPROC)load("glTextureRenderbufferEXT");
+	glad_glMultiTexRenderbufferEXT = (PFNGLMULTITEXRENDERBUFFEREXTPROC)load("glMultiTexRenderbufferEXT");
+	glad_glVertexArrayVertexOffsetEXT = (PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC)load("glVertexArrayVertexOffsetEXT");
+	glad_glVertexArrayColorOffsetEXT = (PFNGLVERTEXARRAYCOLOROFFSETEXTPROC)load("glVertexArrayColorOffsetEXT");
+	glad_glVertexArrayEdgeFlagOffsetEXT = (PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC)load("glVertexArrayEdgeFlagOffsetEXT");
+	glad_glVertexArrayIndexOffsetEXT = (PFNGLVERTEXARRAYINDEXOFFSETEXTPROC)load("glVertexArrayIndexOffsetEXT");
+	glad_glVertexArrayNormalOffsetEXT = (PFNGLVERTEXARRAYNORMALOFFSETEXTPROC)load("glVertexArrayNormalOffsetEXT");
+	glad_glVertexArrayTexCoordOffsetEXT = (PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC)load("glVertexArrayTexCoordOffsetEXT");
+	glad_glVertexArrayMultiTexCoordOffsetEXT = (PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC)load("glVertexArrayMultiTexCoordOffsetEXT");
+	glad_glVertexArrayFogCoordOffsetEXT = (PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC)load("glVertexArrayFogCoordOffsetEXT");
+	glad_glVertexArraySecondaryColorOffsetEXT = (PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC)load("glVertexArraySecondaryColorOffsetEXT");
+	glad_glVertexArrayVertexAttribOffsetEXT = (PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC)load("glVertexArrayVertexAttribOffsetEXT");
+	glad_glVertexArrayVertexAttribIOffsetEXT = (PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC)load("glVertexArrayVertexAttribIOffsetEXT");
+	glad_glEnableVertexArrayEXT = (PFNGLENABLEVERTEXARRAYEXTPROC)load("glEnableVertexArrayEXT");
+	glad_glDisableVertexArrayEXT = (PFNGLDISABLEVERTEXARRAYEXTPROC)load("glDisableVertexArrayEXT");
+	glad_glEnableVertexArrayAttribEXT = (PFNGLENABLEVERTEXARRAYATTRIBEXTPROC)load("glEnableVertexArrayAttribEXT");
+	glad_glDisableVertexArrayAttribEXT = (PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC)load("glDisableVertexArrayAttribEXT");
+	glad_glGetVertexArrayIntegervEXT = (PFNGLGETVERTEXARRAYINTEGERVEXTPROC)load("glGetVertexArrayIntegervEXT");
+	glad_glGetVertexArrayPointervEXT = (PFNGLGETVERTEXARRAYPOINTERVEXTPROC)load("glGetVertexArrayPointervEXT");
+	glad_glGetVertexArrayIntegeri_vEXT = (PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC)load("glGetVertexArrayIntegeri_vEXT");
+	glad_glGetVertexArrayPointeri_vEXT = (PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC)load("glGetVertexArrayPointeri_vEXT");
+	glad_glMapNamedBufferRangeEXT = (PFNGLMAPNAMEDBUFFERRANGEEXTPROC)load("glMapNamedBufferRangeEXT");
+	glad_glFlushMappedNamedBufferRangeEXT = (PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC)load("glFlushMappedNamedBufferRangeEXT");
+	glad_glNamedBufferStorageEXT = (PFNGLNAMEDBUFFERSTORAGEEXTPROC)load("glNamedBufferStorageEXT");
+	glad_glClearNamedBufferDataEXT = (PFNGLCLEARNAMEDBUFFERDATAEXTPROC)load("glClearNamedBufferDataEXT");
+	glad_glClearNamedBufferSubDataEXT = (PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC)load("glClearNamedBufferSubDataEXT");
+	glad_glNamedFramebufferParameteriEXT = (PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC)load("glNamedFramebufferParameteriEXT");
+	glad_glGetNamedFramebufferParameterivEXT = (PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC)load("glGetNamedFramebufferParameterivEXT");
+	glad_glProgramUniform1dEXT = (PFNGLPROGRAMUNIFORM1DEXTPROC)load("glProgramUniform1dEXT");
+	glad_glProgramUniform2dEXT = (PFNGLPROGRAMUNIFORM2DEXTPROC)load("glProgramUniform2dEXT");
+	glad_glProgramUniform3dEXT = (PFNGLPROGRAMUNIFORM3DEXTPROC)load("glProgramUniform3dEXT");
+	glad_glProgramUniform4dEXT = (PFNGLPROGRAMUNIFORM4DEXTPROC)load("glProgramUniform4dEXT");
+	glad_glProgramUniform1dvEXT = (PFNGLPROGRAMUNIFORM1DVEXTPROC)load("glProgramUniform1dvEXT");
+	glad_glProgramUniform2dvEXT = (PFNGLPROGRAMUNIFORM2DVEXTPROC)load("glProgramUniform2dvEXT");
+	glad_glProgramUniform3dvEXT = (PFNGLPROGRAMUNIFORM3DVEXTPROC)load("glProgramUniform3dvEXT");
+	glad_glProgramUniform4dvEXT = (PFNGLPROGRAMUNIFORM4DVEXTPROC)load("glProgramUniform4dvEXT");
+	glad_glProgramUniformMatrix2dvEXT = (PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC)load("glProgramUniformMatrix2dvEXT");
+	glad_glProgramUniformMatrix3dvEXT = (PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC)load("glProgramUniformMatrix3dvEXT");
+	glad_glProgramUniformMatrix4dvEXT = (PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC)load("glProgramUniformMatrix4dvEXT");
+	glad_glProgramUniformMatrix2x3dvEXT = (PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC)load("glProgramUniformMatrix2x3dvEXT");
+	glad_glProgramUniformMatrix2x4dvEXT = (PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC)load("glProgramUniformMatrix2x4dvEXT");
+	glad_glProgramUniformMatrix3x2dvEXT = (PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC)load("glProgramUniformMatrix3x2dvEXT");
+	glad_glProgramUniformMatrix3x4dvEXT = (PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC)load("glProgramUniformMatrix3x4dvEXT");
+	glad_glProgramUniformMatrix4x2dvEXT = (PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC)load("glProgramUniformMatrix4x2dvEXT");
+	glad_glProgramUniformMatrix4x3dvEXT = (PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC)load("glProgramUniformMatrix4x3dvEXT");
+	glad_glTextureBufferRangeEXT = (PFNGLTEXTUREBUFFERRANGEEXTPROC)load("glTextureBufferRangeEXT");
+	glad_glTextureStorage1DEXT = (PFNGLTEXTURESTORAGE1DEXTPROC)load("glTextureStorage1DEXT");
+	glad_glTextureStorage2DEXT = (PFNGLTEXTURESTORAGE2DEXTPROC)load("glTextureStorage2DEXT");
+	glad_glTextureStorage3DEXT = (PFNGLTEXTURESTORAGE3DEXTPROC)load("glTextureStorage3DEXT");
+	glad_glTextureStorage2DMultisampleEXT = (PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC)load("glTextureStorage2DMultisampleEXT");
+	glad_glTextureStorage3DMultisampleEXT = (PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC)load("glTextureStorage3DMultisampleEXT");
+	glad_glVertexArrayBindVertexBufferEXT = (PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC)load("glVertexArrayBindVertexBufferEXT");
+	glad_glVertexArrayVertexAttribFormatEXT = (PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC)load("glVertexArrayVertexAttribFormatEXT");
+	glad_glVertexArrayVertexAttribIFormatEXT = (PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC)load("glVertexArrayVertexAttribIFormatEXT");
+	glad_glVertexArrayVertexAttribLFormatEXT = (PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC)load("glVertexArrayVertexAttribLFormatEXT");
+	glad_glVertexArrayVertexAttribBindingEXT = (PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC)load("glVertexArrayVertexAttribBindingEXT");
+	glad_glVertexArrayVertexBindingDivisorEXT = (PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC)load("glVertexArrayVertexBindingDivisorEXT");
+	glad_glVertexArrayVertexAttribLOffsetEXT = (PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC)load("glVertexArrayVertexAttribLOffsetEXT");
+	glad_glTexturePageCommitmentEXT = (PFNGLTEXTUREPAGECOMMITMENTEXTPROC)load("glTexturePageCommitmentEXT");
+	glad_glVertexArrayVertexAttribDivisorEXT = (PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC)load("glVertexArrayVertexAttribDivisorEXT");
+}
+static void load_GL_AMD_sample_positions(GLADloadproc load) {
+	if(!GLAD_GL_AMD_sample_positions) return;
+	glad_glSetMultisamplefvAMD = (PFNGLSETMULTISAMPLEFVAMDPROC)load("glSetMultisamplefvAMD");
+}
+static void load_GL_NV_vertex_program(GLADloadproc load) {
+	if(!GLAD_GL_NV_vertex_program) return;
+	glad_glAreProgramsResidentNV = (PFNGLAREPROGRAMSRESIDENTNVPROC)load("glAreProgramsResidentNV");
+	glad_glBindProgramNV = (PFNGLBINDPROGRAMNVPROC)load("glBindProgramNV");
+	glad_glDeleteProgramsNV = (PFNGLDELETEPROGRAMSNVPROC)load("glDeleteProgramsNV");
+	glad_glExecuteProgramNV = (PFNGLEXECUTEPROGRAMNVPROC)load("glExecuteProgramNV");
+	glad_glGenProgramsNV = (PFNGLGENPROGRAMSNVPROC)load("glGenProgramsNV");
+	glad_glGetProgramParameterdvNV = (PFNGLGETPROGRAMPARAMETERDVNVPROC)load("glGetProgramParameterdvNV");
+	glad_glGetProgramParameterfvNV = (PFNGLGETPROGRAMPARAMETERFVNVPROC)load("glGetProgramParameterfvNV");
+	glad_glGetProgramivNV = (PFNGLGETPROGRAMIVNVPROC)load("glGetProgramivNV");
+	glad_glGetProgramStringNV = (PFNGLGETPROGRAMSTRINGNVPROC)load("glGetProgramStringNV");
+	glad_glGetTrackMatrixivNV = (PFNGLGETTRACKMATRIXIVNVPROC)load("glGetTrackMatrixivNV");
+	glad_glGetVertexAttribdvNV = (PFNGLGETVERTEXATTRIBDVNVPROC)load("glGetVertexAttribdvNV");
+	glad_glGetVertexAttribfvNV = (PFNGLGETVERTEXATTRIBFVNVPROC)load("glGetVertexAttribfvNV");
+	glad_glGetVertexAttribivNV = (PFNGLGETVERTEXATTRIBIVNVPROC)load("glGetVertexAttribivNV");
+	glad_glGetVertexAttribPointervNV = (PFNGLGETVERTEXATTRIBPOINTERVNVPROC)load("glGetVertexAttribPointervNV");
+	glad_glIsProgramNV = (PFNGLISPROGRAMNVPROC)load("glIsProgramNV");
+	glad_glLoadProgramNV = (PFNGLLOADPROGRAMNVPROC)load("glLoadProgramNV");
+	glad_glProgramParameter4dNV = (PFNGLPROGRAMPARAMETER4DNVPROC)load("glProgramParameter4dNV");
+	glad_glProgramParameter4dvNV = (PFNGLPROGRAMPARAMETER4DVNVPROC)load("glProgramParameter4dvNV");
+	glad_glProgramParameter4fNV = (PFNGLPROGRAMPARAMETER4FNVPROC)load("glProgramParameter4fNV");
+	glad_glProgramParameter4fvNV = (PFNGLPROGRAMPARAMETER4FVNVPROC)load("glProgramParameter4fvNV");
+	glad_glProgramParameters4dvNV = (PFNGLPROGRAMPARAMETERS4DVNVPROC)load("glProgramParameters4dvNV");
+	glad_glProgramParameters4fvNV = (PFNGLPROGRAMPARAMETERS4FVNVPROC)load("glProgramParameters4fvNV");
+	glad_glRequestResidentProgramsNV = (PFNGLREQUESTRESIDENTPROGRAMSNVPROC)load("glRequestResidentProgramsNV");
+	glad_glTrackMatrixNV = (PFNGLTRACKMATRIXNVPROC)load("glTrackMatrixNV");
+	glad_glVertexAttribPointerNV = (PFNGLVERTEXATTRIBPOINTERNVPROC)load("glVertexAttribPointerNV");
+	glad_glVertexAttrib1dNV = (PFNGLVERTEXATTRIB1DNVPROC)load("glVertexAttrib1dNV");
+	glad_glVertexAttrib1dvNV = (PFNGLVERTEXATTRIB1DVNVPROC)load("glVertexAttrib1dvNV");
+	glad_glVertexAttrib1fNV = (PFNGLVERTEXATTRIB1FNVPROC)load("glVertexAttrib1fNV");
+	glad_glVertexAttrib1fvNV = (PFNGLVERTEXATTRIB1FVNVPROC)load("glVertexAttrib1fvNV");
+	glad_glVertexAttrib1sNV = (PFNGLVERTEXATTRIB1SNVPROC)load("glVertexAttrib1sNV");
+	glad_glVertexAttrib1svNV = (PFNGLVERTEXATTRIB1SVNVPROC)load("glVertexAttrib1svNV");
+	glad_glVertexAttrib2dNV = (PFNGLVERTEXATTRIB2DNVPROC)load("glVertexAttrib2dNV");
+	glad_glVertexAttrib2dvNV = (PFNGLVERTEXATTRIB2DVNVPROC)load("glVertexAttrib2dvNV");
+	glad_glVertexAttrib2fNV = (PFNGLVERTEXATTRIB2FNVPROC)load("glVertexAttrib2fNV");
+	glad_glVertexAttrib2fvNV = (PFNGLVERTEXATTRIB2FVNVPROC)load("glVertexAttrib2fvNV");
+	glad_glVertexAttrib2sNV = (PFNGLVERTEXATTRIB2SNVPROC)load("glVertexAttrib2sNV");
+	glad_glVertexAttrib2svNV = (PFNGLVERTEXATTRIB2SVNVPROC)load("glVertexAttrib2svNV");
+	glad_glVertexAttrib3dNV = (PFNGLVERTEXATTRIB3DNVPROC)load("glVertexAttrib3dNV");
+	glad_glVertexAttrib3dvNV = (PFNGLVERTEXATTRIB3DVNVPROC)load("glVertexAttrib3dvNV");
+	glad_glVertexAttrib3fNV = (PFNGLVERTEXATTRIB3FNVPROC)load("glVertexAttrib3fNV");
+	glad_glVertexAttrib3fvNV = (PFNGLVERTEXATTRIB3FVNVPROC)load("glVertexAttrib3fvNV");
+	glad_glVertexAttrib3sNV = (PFNGLVERTEXATTRIB3SNVPROC)load("glVertexAttrib3sNV");
+	glad_glVertexAttrib3svNV = (PFNGLVERTEXATTRIB3SVNVPROC)load("glVertexAttrib3svNV");
+	glad_glVertexAttrib4dNV = (PFNGLVERTEXATTRIB4DNVPROC)load("glVertexAttrib4dNV");
+	glad_glVertexAttrib4dvNV = (PFNGLVERTEXATTRIB4DVNVPROC)load("glVertexAttrib4dvNV");
+	glad_glVertexAttrib4fNV = (PFNGLVERTEXATTRIB4FNVPROC)load("glVertexAttrib4fNV");
+	glad_glVertexAttrib4fvNV = (PFNGLVERTEXATTRIB4FVNVPROC)load("glVertexAttrib4fvNV");
+	glad_glVertexAttrib4sNV = (PFNGLVERTEXATTRIB4SNVPROC)load("glVertexAttrib4sNV");
+	glad_glVertexAttrib4svNV = (PFNGLVERTEXATTRIB4SVNVPROC)load("glVertexAttrib4svNV");
+	glad_glVertexAttrib4ubNV = (PFNGLVERTEXATTRIB4UBNVPROC)load("glVertexAttrib4ubNV");
+	glad_glVertexAttrib4ubvNV = (PFNGLVERTEXATTRIB4UBVNVPROC)load("glVertexAttrib4ubvNV");
+	glad_glVertexAttribs1dvNV = (PFNGLVERTEXATTRIBS1DVNVPROC)load("glVertexAttribs1dvNV");
+	glad_glVertexAttribs1fvNV = (PFNGLVERTEXATTRIBS1FVNVPROC)load("glVertexAttribs1fvNV");
+	glad_glVertexAttribs1svNV = (PFNGLVERTEXATTRIBS1SVNVPROC)load("glVertexAttribs1svNV");
+	glad_glVertexAttribs2dvNV = (PFNGLVERTEXATTRIBS2DVNVPROC)load("glVertexAttribs2dvNV");
+	glad_glVertexAttribs2fvNV = (PFNGLVERTEXATTRIBS2FVNVPROC)load("glVertexAttribs2fvNV");
+	glad_glVertexAttribs2svNV = (PFNGLVERTEXATTRIBS2SVNVPROC)load("glVertexAttribs2svNV");
+	glad_glVertexAttribs3dvNV = (PFNGLVERTEXATTRIBS3DVNVPROC)load("glVertexAttribs3dvNV");
+	glad_glVertexAttribs3fvNV = (PFNGLVERTEXATTRIBS3FVNVPROC)load("glVertexAttribs3fvNV");
+	glad_glVertexAttribs3svNV = (PFNGLVERTEXATTRIBS3SVNVPROC)load("glVertexAttribs3svNV");
+	glad_glVertexAttribs4dvNV = (PFNGLVERTEXATTRIBS4DVNVPROC)load("glVertexAttribs4dvNV");
+	glad_glVertexAttribs4fvNV = (PFNGLVERTEXATTRIBS4FVNVPROC)load("glVertexAttribs4fvNV");
+	glad_glVertexAttribs4svNV = (PFNGLVERTEXATTRIBS4SVNVPROC)load("glVertexAttribs4svNV");
+	glad_glVertexAttribs4ubvNV = (PFNGLVERTEXATTRIBS4UBVNVPROC)load("glVertexAttribs4ubvNV");
+}
+static void load_GL_EXT_vertex_shader(GLADloadproc load) {
+	if(!GLAD_GL_EXT_vertex_shader) return;
+	glad_glBeginVertexShaderEXT = (PFNGLBEGINVERTEXSHADEREXTPROC)load("glBeginVertexShaderEXT");
+	glad_glEndVertexShaderEXT = (PFNGLENDVERTEXSHADEREXTPROC)load("glEndVertexShaderEXT");
+	glad_glBindVertexShaderEXT = (PFNGLBINDVERTEXSHADEREXTPROC)load("glBindVertexShaderEXT");
+	glad_glGenVertexShadersEXT = (PFNGLGENVERTEXSHADERSEXTPROC)load("glGenVertexShadersEXT");
+	glad_glDeleteVertexShaderEXT = (PFNGLDELETEVERTEXSHADEREXTPROC)load("glDeleteVertexShaderEXT");
+	glad_glShaderOp1EXT = (PFNGLSHADEROP1EXTPROC)load("glShaderOp1EXT");
+	glad_glShaderOp2EXT = (PFNGLSHADEROP2EXTPROC)load("glShaderOp2EXT");
+	glad_glShaderOp3EXT = (PFNGLSHADEROP3EXTPROC)load("glShaderOp3EXT");
+	glad_glSwizzleEXT = (PFNGLSWIZZLEEXTPROC)load("glSwizzleEXT");
+	glad_glWriteMaskEXT = (PFNGLWRITEMASKEXTPROC)load("glWriteMaskEXT");
+	glad_glInsertComponentEXT = (PFNGLINSERTCOMPONENTEXTPROC)load("glInsertComponentEXT");
+	glad_glExtractComponentEXT = (PFNGLEXTRACTCOMPONENTEXTPROC)load("glExtractComponentEXT");
+	glad_glGenSymbolsEXT = (PFNGLGENSYMBOLSEXTPROC)load("glGenSymbolsEXT");
+	glad_glSetInvariantEXT = (PFNGLSETINVARIANTEXTPROC)load("glSetInvariantEXT");
+	glad_glSetLocalConstantEXT = (PFNGLSETLOCALCONSTANTEXTPROC)load("glSetLocalConstantEXT");
+	glad_glVariantbvEXT = (PFNGLVARIANTBVEXTPROC)load("glVariantbvEXT");
+	glad_glVariantsvEXT = (PFNGLVARIANTSVEXTPROC)load("glVariantsvEXT");
+	glad_glVariantivEXT = (PFNGLVARIANTIVEXTPROC)load("glVariantivEXT");
+	glad_glVariantfvEXT = (PFNGLVARIANTFVEXTPROC)load("glVariantfvEXT");
+	glad_glVariantdvEXT = (PFNGLVARIANTDVEXTPROC)load("glVariantdvEXT");
+	glad_glVariantubvEXT = (PFNGLVARIANTUBVEXTPROC)load("glVariantubvEXT");
+	glad_glVariantusvEXT = (PFNGLVARIANTUSVEXTPROC)load("glVariantusvEXT");
+	glad_glVariantuivEXT = (PFNGLVARIANTUIVEXTPROC)load("glVariantuivEXT");
+	glad_glVariantPointerEXT = (PFNGLVARIANTPOINTEREXTPROC)load("glVariantPointerEXT");
+	glad_glEnableVariantClientStateEXT = (PFNGLENABLEVARIANTCLIENTSTATEEXTPROC)load("glEnableVariantClientStateEXT");
+	glad_glDisableVariantClientStateEXT = (PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC)load("glDisableVariantClientStateEXT");
+	glad_glBindLightParameterEXT = (PFNGLBINDLIGHTPARAMETEREXTPROC)load("glBindLightParameterEXT");
+	glad_glBindMaterialParameterEXT = (PFNGLBINDMATERIALPARAMETEREXTPROC)load("glBindMaterialParameterEXT");
+	glad_glBindTexGenParameterEXT = (PFNGLBINDTEXGENPARAMETEREXTPROC)load("glBindTexGenParameterEXT");
+	glad_glBindTextureUnitParameterEXT = (PFNGLBINDTEXTUREUNITPARAMETEREXTPROC)load("glBindTextureUnitParameterEXT");
+	glad_glBindParameterEXT = (PFNGLBINDPARAMETEREXTPROC)load("glBindParameterEXT");
+	glad_glIsVariantEnabledEXT = (PFNGLISVARIANTENABLEDEXTPROC)load("glIsVariantEnabledEXT");
+	glad_glGetVariantBooleanvEXT = (PFNGLGETVARIANTBOOLEANVEXTPROC)load("glGetVariantBooleanvEXT");
+	glad_glGetVariantIntegervEXT = (PFNGLGETVARIANTINTEGERVEXTPROC)load("glGetVariantIntegervEXT");
+	glad_glGetVariantFloatvEXT = (PFNGLGETVARIANTFLOATVEXTPROC)load("glGetVariantFloatvEXT");
+	glad_glGetVariantPointervEXT = (PFNGLGETVARIANTPOINTERVEXTPROC)load("glGetVariantPointervEXT");
+	glad_glGetInvariantBooleanvEXT = (PFNGLGETINVARIANTBOOLEANVEXTPROC)load("glGetInvariantBooleanvEXT");
+	glad_glGetInvariantIntegervEXT = (PFNGLGETINVARIANTINTEGERVEXTPROC)load("glGetInvariantIntegervEXT");
+	glad_glGetInvariantFloatvEXT = (PFNGLGETINVARIANTFLOATVEXTPROC)load("glGetInvariantFloatvEXT");
+	glad_glGetLocalConstantBooleanvEXT = (PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC)load("glGetLocalConstantBooleanvEXT");
+	glad_glGetLocalConstantIntegervEXT = (PFNGLGETLOCALCONSTANTINTEGERVEXTPROC)load("glGetLocalConstantIntegervEXT");
+	glad_glGetLocalConstantFloatvEXT = (PFNGLGETLOCALCONSTANTFLOATVEXTPROC)load("glGetLocalConstantFloatvEXT");
+}
+static void load_GL_EXT_blend_func_separate(GLADloadproc load) {
+	if(!GLAD_GL_EXT_blend_func_separate) return;
+	glad_glBlendFuncSeparateEXT = (PFNGLBLENDFUNCSEPARATEEXTPROC)load("glBlendFuncSeparateEXT");
+}
+static void load_GL_APPLE_fence(GLADloadproc load) {
+	if(!GLAD_GL_APPLE_fence) return;
+	glad_glGenFencesAPPLE = (PFNGLGENFENCESAPPLEPROC)load("glGenFencesAPPLE");
+	glad_glDeleteFencesAPPLE = (PFNGLDELETEFENCESAPPLEPROC)load("glDeleteFencesAPPLE");
+	glad_glSetFenceAPPLE = (PFNGLSETFENCEAPPLEPROC)load("glSetFenceAPPLE");
+	glad_glIsFenceAPPLE = (PFNGLISFENCEAPPLEPROC)load("glIsFenceAPPLE");
+	glad_glTestFenceAPPLE = (PFNGLTESTFENCEAPPLEPROC)load("glTestFenceAPPLE");
+	glad_glFinishFenceAPPLE = (PFNGLFINISHFENCEAPPLEPROC)load("glFinishFenceAPPLE");
+	glad_glTestObjectAPPLE = (PFNGLTESTOBJECTAPPLEPROC)load("glTestObjectAPPLE");
+	glad_glFinishObjectAPPLE = (PFNGLFINISHOBJECTAPPLEPROC)load("glFinishObjectAPPLE");
+}
+static void load_GL_OES_byte_coordinates(GLADloadproc load) {
+	if(!GLAD_GL_OES_byte_coordinates) return;
+	glad_glMultiTexCoord1bOES = (PFNGLMULTITEXCOORD1BOESPROC)load("glMultiTexCoord1bOES");
+	glad_glMultiTexCoord1bvOES = (PFNGLMULTITEXCOORD1BVOESPROC)load("glMultiTexCoord1bvOES");
+	glad_glMultiTexCoord2bOES = (PFNGLMULTITEXCOORD2BOESPROC)load("glMultiTexCoord2bOES");
+	glad_glMultiTexCoord2bvOES = (PFNGLMULTITEXCOORD2BVOESPROC)load("glMultiTexCoord2bvOES");
+	glad_glMultiTexCoord3bOES = (PFNGLMULTITEXCOORD3BOESPROC)load("glMultiTexCoord3bOES");
+	glad_glMultiTexCoord3bvOES = (PFNGLMULTITEXCOORD3BVOESPROC)load("glMultiTexCoord3bvOES");
+	glad_glMultiTexCoord4bOES = (PFNGLMULTITEXCOORD4BOESPROC)load("glMultiTexCoord4bOES");
+	glad_glMultiTexCoord4bvOES = (PFNGLMULTITEXCOORD4BVOESPROC)load("glMultiTexCoord4bvOES");
+	glad_glTexCoord1bOES = (PFNGLTEXCOORD1BOESPROC)load("glTexCoord1bOES");
+	glad_glTexCoord1bvOES = (PFNGLTEXCOORD1BVOESPROC)load("glTexCoord1bvOES");
+	glad_glTexCoord2bOES = (PFNGLTEXCOORD2BOESPROC)load("glTexCoord2bOES");
+	glad_glTexCoord2bvOES = (PFNGLTEXCOORD2BVOESPROC)load("glTexCoord2bvOES");
+	glad_glTexCoord3bOES = (PFNGLTEXCOORD3BOESPROC)load("glTexCoord3bOES");
+	glad_glTexCoord3bvOES = (PFNGLTEXCOORD3BVOESPROC)load("glTexCoord3bvOES");
+	glad_glTexCoord4bOES = (PFNGLTEXCOORD4BOESPROC)load("glTexCoord4bOES");
+	glad_glTexCoord4bvOES = (PFNGLTEXCOORD4BVOESPROC)load("glTexCoord4bvOES");
+	glad_glVertex2bOES = (PFNGLVERTEX2BOESPROC)load("glVertex2bOES");
+	glad_glVertex2bvOES = (PFNGLVERTEX2BVOESPROC)load("glVertex2bvOES");
+	glad_glVertex3bOES = (PFNGLVERTEX3BOESPROC)load("glVertex3bOES");
+	glad_glVertex3bvOES = (PFNGLVERTEX3BVOESPROC)load("glVertex3bvOES");
+	glad_glVertex4bOES = (PFNGLVERTEX4BOESPROC)load("glVertex4bOES");
+	glad_glVertex4bvOES = (PFNGLVERTEX4BVOESPROC)load("glVertex4bvOES");
+}
+static void load_GL_ARB_transpose_matrix(GLADloadproc load) {
+	if(!GLAD_GL_ARB_transpose_matrix) return;
+	glad_glLoadTransposeMatrixfARB = (PFNGLLOADTRANSPOSEMATRIXFARBPROC)load("glLoadTransposeMatrixfARB");
+	glad_glLoadTransposeMatrixdARB = (PFNGLLOADTRANSPOSEMATRIXDARBPROC)load("glLoadTransposeMatrixdARB");
+	glad_glMultTransposeMatrixfARB = (PFNGLMULTTRANSPOSEMATRIXFARBPROC)load("glMultTransposeMatrixfARB");
+	glad_glMultTransposeMatrixdARB = (PFNGLMULTTRANSPOSEMATRIXDARBPROC)load("glMultTransposeMatrixdARB");
+}
+static void load_GL_ARB_provoking_vertex(GLADloadproc load) {
+	if(!GLAD_GL_ARB_provoking_vertex) return;
+	glad_glProvokingVertex = (PFNGLPROVOKINGVERTEXPROC)load("glProvokingVertex");
+}
+static void load_GL_EXT_fog_coord(GLADloadproc load) {
+	if(!GLAD_GL_EXT_fog_coord) return;
+	glad_glFogCoordfEXT = (PFNGLFOGCOORDFEXTPROC)load("glFogCoordfEXT");
+	glad_glFogCoordfvEXT = (PFNGLFOGCOORDFVEXTPROC)load("glFogCoordfvEXT");
+	glad_glFogCoorddEXT = (PFNGLFOGCOORDDEXTPROC)load("glFogCoorddEXT");
+	glad_glFogCoorddvEXT = (PFNGLFOGCOORDDVEXTPROC)load("glFogCoorddvEXT");
+	glad_glFogCoordPointerEXT = (PFNGLFOGCOORDPOINTEREXTPROC)load("glFogCoordPointerEXT");
+}
+static void load_GL_EXT_vertex_array(GLADloadproc load) {
+	if(!GLAD_GL_EXT_vertex_array) return;
+	glad_glArrayElementEXT = (PFNGLARRAYELEMENTEXTPROC)load("glArrayElementEXT");
+	glad_glColorPointerEXT = (PFNGLCOLORPOINTEREXTPROC)load("glColorPointerEXT");
+	glad_glDrawArraysEXT = (PFNGLDRAWARRAYSEXTPROC)load("glDrawArraysEXT");
+	glad_glEdgeFlagPointerEXT = (PFNGLEDGEFLAGPOINTEREXTPROC)load("glEdgeFlagPointerEXT");
+	glad_glGetPointervEXT = (PFNGLGETPOINTERVEXTPROC)load("glGetPointervEXT");
+	glad_glIndexPointerEXT = (PFNGLINDEXPOINTEREXTPROC)load("glIndexPointerEXT");
+	glad_glNormalPointerEXT = (PFNGLNORMALPOINTEREXTPROC)load("glNormalPointerEXT");
+	glad_glTexCoordPointerEXT = (PFNGLTEXCOORDPOINTEREXTPROC)load("glTexCoordPointerEXT");
+	glad_glVertexPointerEXT = (PFNGLVERTEXPOINTEREXTPROC)load("glVertexPointerEXT");
+}
+static void load_GL_EXT_blend_equation_separate(GLADloadproc load) {
+	if(!GLAD_GL_EXT_blend_equation_separate) return;
+	glad_glBlendEquationSeparateEXT = (PFNGLBLENDEQUATIONSEPARATEEXTPROC)load("glBlendEquationSeparateEXT");
+}
+static void load_GL_NV_framebuffer_mixed_samples(GLADloadproc load) {
+	if(!GLAD_GL_NV_framebuffer_mixed_samples) return;
+	glad_glRasterSamplesEXT = (PFNGLRASTERSAMPLESEXTPROC)load("glRasterSamplesEXT");
+	glad_glCoverageModulationTableNV = (PFNGLCOVERAGEMODULATIONTABLENVPROC)load("glCoverageModulationTableNV");
+	glad_glGetCoverageModulationTableNV = (PFNGLGETCOVERAGEMODULATIONTABLENVPROC)load("glGetCoverageModulationTableNV");
+	glad_glCoverageModulationNV = (PFNGLCOVERAGEMODULATIONNVPROC)load("glCoverageModulationNV");
+}
+static void load_GL_NVX_conditional_render(GLADloadproc load) {
+	if(!GLAD_GL_NVX_conditional_render) return;
+	glad_glBeginConditionalRenderNVX = (PFNGLBEGINCONDITIONALRENDERNVXPROC)load("glBeginConditionalRenderNVX");
+	glad_glEndConditionalRenderNVX = (PFNGLENDCONDITIONALRENDERNVXPROC)load("glEndConditionalRenderNVX");
+}
+static void load_GL_ARB_multi_draw_indirect(GLADloadproc load) {
+	if(!GLAD_GL_ARB_multi_draw_indirect) return;
+	glad_glMultiDrawArraysIndirect = (PFNGLMULTIDRAWARRAYSINDIRECTPROC)load("glMultiDrawArraysIndirect");
+	glad_glMultiDrawElementsIndirect = (PFNGLMULTIDRAWELEMENTSINDIRECTPROC)load("glMultiDrawElementsIndirect");
+}
+static void load_GL_EXT_raster_multisample(GLADloadproc load) {
+	if(!GLAD_GL_EXT_raster_multisample) return;
+	glad_glRasterSamplesEXT = (PFNGLRASTERSAMPLESEXTPROC)load("glRasterSamplesEXT");
+}
+static void load_GL_NV_copy_image(GLADloadproc load) {
+	if(!GLAD_GL_NV_copy_image) return;
+	glad_glCopyImageSubDataNV = (PFNGLCOPYIMAGESUBDATANVPROC)load("glCopyImageSubDataNV");
+}
+static void load_GL_INTEL_framebuffer_CMAA(GLADloadproc load) {
+	if(!GLAD_GL_INTEL_framebuffer_CMAA) return;
+	glad_glApplyFramebufferAttachmentCMAAINTEL = (PFNGLAPPLYFRAMEBUFFERATTACHMENTCMAAINTELPROC)load("glApplyFramebufferAttachmentCMAAINTEL");
+}
+static void load_GL_ARB_transform_feedback2(GLADloadproc load) {
+	if(!GLAD_GL_ARB_transform_feedback2) return;
+	glad_glBindTransformFeedback = (PFNGLBINDTRANSFORMFEEDBACKPROC)load("glBindTransformFeedback");
+	glad_glDeleteTransformFeedbacks = (PFNGLDELETETRANSFORMFEEDBACKSPROC)load("glDeleteTransformFeedbacks");
+	glad_glGenTransformFeedbacks = (PFNGLGENTRANSFORMFEEDBACKSPROC)load("glGenTransformFeedbacks");
+	glad_glIsTransformFeedback = (PFNGLISTRANSFORMFEEDBACKPROC)load("glIsTransformFeedback");
+	glad_glPauseTransformFeedback = (PFNGLPAUSETRANSFORMFEEDBACKPROC)load("glPauseTransformFeedback");
+	glad_glResumeTransformFeedback = (PFNGLRESUMETRANSFORMFEEDBACKPROC)load("glResumeTransformFeedback");
+	glad_glDrawTransformFeedback = (PFNGLDRAWTRANSFORMFEEDBACKPROC)load("glDrawTransformFeedback");
+}
+static void load_GL_ARB_transform_feedback3(GLADloadproc load) {
+	if(!GLAD_GL_ARB_transform_feedback3) return;
+	glad_glDrawTransformFeedbackStream = (PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC)load("glDrawTransformFeedbackStream");
+	glad_glBeginQueryIndexed = (PFNGLBEGINQUERYINDEXEDPROC)load("glBeginQueryIndexed");
+	glad_glEndQueryIndexed = (PFNGLENDQUERYINDEXEDPROC)load("glEndQueryIndexed");
+	glad_glGetQueryIndexediv = (PFNGLGETQUERYINDEXEDIVPROC)load("glGetQueryIndexediv");
+}
+static void load_GL_EXT_debug_marker(GLADloadproc load) {
+	if(!GLAD_GL_EXT_debug_marker) return;
+	glad_glInsertEventMarkerEXT = (PFNGLINSERTEVENTMARKEREXTPROC)load("glInsertEventMarkerEXT");
+	glad_glPushGroupMarkerEXT = (PFNGLPUSHGROUPMARKEREXTPROC)load("glPushGroupMarkerEXT");
+	glad_glPopGroupMarkerEXT = (PFNGLPOPGROUPMARKEREXTPROC)load("glPopGroupMarkerEXT");
+}
+static void load_GL_EXT_pixel_transform(GLADloadproc load) {
+	if(!GLAD_GL_EXT_pixel_transform) return;
+	glad_glPixelTransformParameteriEXT = (PFNGLPIXELTRANSFORMPARAMETERIEXTPROC)load("glPixelTransformParameteriEXT");
+	glad_glPixelTransformParameterfEXT = (PFNGLPIXELTRANSFORMPARAMETERFEXTPROC)load("glPixelTransformParameterfEXT");
+	glad_glPixelTransformParameterivEXT = (PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC)load("glPixelTransformParameterivEXT");
+	glad_glPixelTransformParameterfvEXT = (PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC)load("glPixelTransformParameterfvEXT");
+	glad_glGetPixelTransformParameterivEXT = (PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC)load("glGetPixelTransformParameterivEXT");
+	glad_glGetPixelTransformParameterfvEXT = (PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC)load("glGetPixelTransformParameterfvEXT");
+}
+static void load_GL_ATI_fragment_shader(GLADloadproc load) {
+	if(!GLAD_GL_ATI_fragment_shader) return;
+	glad_glGenFragmentShadersATI = (PFNGLGENFRAGMENTSHADERSATIPROC)load("glGenFragmentShadersATI");
+	glad_glBindFragmentShaderATI = (PFNGLBINDFRAGMENTSHADERATIPROC)load("glBindFragmentShaderATI");
+	glad_glDeleteFragmentShaderATI = (PFNGLDELETEFRAGMENTSHADERATIPROC)load("glDeleteFragmentShaderATI");
+	glad_glBeginFragmentShaderATI = (PFNGLBEGINFRAGMENTSHADERATIPROC)load("glBeginFragmentShaderATI");
+	glad_glEndFragmentShaderATI = (PFNGLENDFRAGMENTSHADERATIPROC)load("glEndFragmentShaderATI");
+	glad_glPassTexCoordATI = (PFNGLPASSTEXCOORDATIPROC)load("glPassTexCoordATI");
+	glad_glSampleMapATI = (PFNGLSAMPLEMAPATIPROC)load("glSampleMapATI");
+	glad_glColorFragmentOp1ATI = (PFNGLCOLORFRAGMENTOP1ATIPROC)load("glColorFragmentOp1ATI");
+	glad_glColorFragmentOp2ATI = (PFNGLCOLORFRAGMENTOP2ATIPROC)load("glColorFragmentOp2ATI");
+	glad_glColorFragmentOp3ATI = (PFNGLCOLORFRAGMENTOP3ATIPROC)load("glColorFragmentOp3ATI");
+	glad_glAlphaFragmentOp1ATI = (PFNGLALPHAFRAGMENTOP1ATIPROC)load("glAlphaFragmentOp1ATI");
+	glad_glAlphaFragmentOp2ATI = (PFNGLALPHAFRAGMENTOP2ATIPROC)load("glAlphaFragmentOp2ATI");
+	glad_glAlphaFragmentOp3ATI = (PFNGLALPHAFRAGMENTOP3ATIPROC)load("glAlphaFragmentOp3ATI");
+	glad_glSetFragmentShaderConstantATI = (PFNGLSETFRAGMENTSHADERCONSTANTATIPROC)load("glSetFragmentShaderConstantATI");
+}
+static void load_GL_ARB_vertex_array_object(GLADloadproc load) {
+	if(!GLAD_GL_ARB_vertex_array_object) return;
+	glad_glBindVertexArray = (PFNGLBINDVERTEXARRAYPROC)load("glBindVertexArray");
+	glad_glDeleteVertexArrays = (PFNGLDELETEVERTEXARRAYSPROC)load("glDeleteVertexArrays");
+	glad_glGenVertexArrays = (PFNGLGENVERTEXARRAYSPROC)load("glGenVertexArrays");
+	glad_glIsVertexArray = (PFNGLISVERTEXARRAYPROC)load("glIsVertexArray");
+}
+static void load_GL_SUN_triangle_list(GLADloadproc load) {
+	if(!GLAD_GL_SUN_triangle_list) return;
+	glad_glReplacementCodeuiSUN = (PFNGLREPLACEMENTCODEUISUNPROC)load("glReplacementCodeuiSUN");
+	glad_glReplacementCodeusSUN = (PFNGLREPLACEMENTCODEUSSUNPROC)load("glReplacementCodeusSUN");
+	glad_glReplacementCodeubSUN = (PFNGLREPLACEMENTCODEUBSUNPROC)load("glReplacementCodeubSUN");
+	glad_glReplacementCodeuivSUN = (PFNGLREPLACEMENTCODEUIVSUNPROC)load("glReplacementCodeuivSUN");
+	glad_glReplacementCodeusvSUN = (PFNGLREPLACEMENTCODEUSVSUNPROC)load("glReplacementCodeusvSUN");
+	glad_glReplacementCodeubvSUN = (PFNGLREPLACEMENTCODEUBVSUNPROC)load("glReplacementCodeubvSUN");
+	glad_glReplacementCodePointerSUN = (PFNGLREPLACEMENTCODEPOINTERSUNPROC)load("glReplacementCodePointerSUN");
+}
+static void load_GL_ARB_transform_feedback_instanced(GLADloadproc load) {
+	if(!GLAD_GL_ARB_transform_feedback_instanced) return;
+	glad_glDrawTransformFeedbackInstanced = (PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC)load("glDrawTransformFeedbackInstanced");
+	glad_glDrawTransformFeedbackStreamInstanced = (PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC)load("glDrawTransformFeedbackStreamInstanced");
+}
+static void load_GL_SGIX_async(GLADloadproc load) {
+	if(!GLAD_GL_SGIX_async) return;
+	glad_glAsyncMarkerSGIX = (PFNGLASYNCMARKERSGIXPROC)load("glAsyncMarkerSGIX");
+	glad_glFinishAsyncSGIX = (PFNGLFINISHASYNCSGIXPROC)load("glFinishAsyncSGIX");
+	glad_glPollAsyncSGIX = (PFNGLPOLLASYNCSGIXPROC)load("glPollAsyncSGIX");
+	glad_glGenAsyncMarkersSGIX = (PFNGLGENASYNCMARKERSSGIXPROC)load("glGenAsyncMarkersSGIX");
+	glad_glDeleteAsyncMarkersSGIX = (PFNGLDELETEASYNCMARKERSSGIXPROC)load("glDeleteAsyncMarkersSGIX");
+	glad_glIsAsyncMarkerSGIX = (PFNGLISASYNCMARKERSGIXPROC)load("glIsAsyncMarkerSGIX");
+}
+static void load_GL_INTEL_performance_query(GLADloadproc load) {
+	if(!GLAD_GL_INTEL_performance_query) return;
+	glad_glBeginPerfQueryINTEL = (PFNGLBEGINPERFQUERYINTELPROC)load("glBeginPerfQueryINTEL");
+	glad_glCreatePerfQueryINTEL = (PFNGLCREATEPERFQUERYINTELPROC)load("glCreatePerfQueryINTEL");
+	glad_glDeletePerfQueryINTEL = (PFNGLDELETEPERFQUERYINTELPROC)load("glDeletePerfQueryINTEL");
+	glad_glEndPerfQueryINTEL = (PFNGLENDPERFQUERYINTELPROC)load("glEndPerfQueryINTEL");
+	glad_glGetFirstPerfQueryIdINTEL = (PFNGLGETFIRSTPERFQUERYIDINTELPROC)load("glGetFirstPerfQueryIdINTEL");
+	glad_glGetNextPerfQueryIdINTEL = (PFNGLGETNEXTPERFQUERYIDINTELPROC)load("glGetNextPerfQueryIdINTEL");
+	glad_glGetPerfCounterInfoINTEL = (PFNGLGETPERFCOUNTERINFOINTELPROC)load("glGetPerfCounterInfoINTEL");
+	glad_glGetPerfQueryDataINTEL = (PFNGLGETPERFQUERYDATAINTELPROC)load("glGetPerfQueryDataINTEL");
+	glad_glGetPerfQueryIdByNameINTEL = (PFNGLGETPERFQUERYIDBYNAMEINTELPROC)load("glGetPerfQueryIdByNameINTEL");
+	glad_glGetPerfQueryInfoINTEL = (PFNGLGETPERFQUERYINFOINTELPROC)load("glGetPerfQueryInfoINTEL");
+}
+static void load_GL_NV_gpu_shader5(GLADloadproc load) {
+	if(!GLAD_GL_NV_gpu_shader5) return;
+	glad_glUniform1i64NV = (PFNGLUNIFORM1I64NVPROC)load("glUniform1i64NV");
+	glad_glUniform2i64NV = (PFNGLUNIFORM2I64NVPROC)load("glUniform2i64NV");
+	glad_glUniform3i64NV = (PFNGLUNIFORM3I64NVPROC)load("glUniform3i64NV");
+	glad_glUniform4i64NV = (PFNGLUNIFORM4I64NVPROC)load("glUniform4i64NV");
+	glad_glUniform1i64vNV = (PFNGLUNIFORM1I64VNVPROC)load("glUniform1i64vNV");
+	glad_glUniform2i64vNV = (PFNGLUNIFORM2I64VNVPROC)load("glUniform2i64vNV");
+	glad_glUniform3i64vNV = (PFNGLUNIFORM3I64VNVPROC)load("glUniform3i64vNV");
+	glad_glUniform4i64vNV = (PFNGLUNIFORM4I64VNVPROC)load("glUniform4i64vNV");
+	glad_glUniform1ui64NV = (PFNGLUNIFORM1UI64NVPROC)load("glUniform1ui64NV");
+	glad_glUniform2ui64NV = (PFNGLUNIFORM2UI64NVPROC)load("glUniform2ui64NV");
+	glad_glUniform3ui64NV = (PFNGLUNIFORM3UI64NVPROC)load("glUniform3ui64NV");
+	glad_glUniform4ui64NV = (PFNGLUNIFORM4UI64NVPROC)load("glUniform4ui64NV");
+	glad_glUniform1ui64vNV = (PFNGLUNIFORM1UI64VNVPROC)load("glUniform1ui64vNV");
+	glad_glUniform2ui64vNV = (PFNGLUNIFORM2UI64VNVPROC)load("glUniform2ui64vNV");
+	glad_glUniform3ui64vNV = (PFNGLUNIFORM3UI64VNVPROC)load("glUniform3ui64vNV");
+	glad_glUniform4ui64vNV = (PFNGLUNIFORM4UI64VNVPROC)load("glUniform4ui64vNV");
+	glad_glGetUniformi64vNV = (PFNGLGETUNIFORMI64VNVPROC)load("glGetUniformi64vNV");
+	glad_glProgramUniform1i64NV = (PFNGLPROGRAMUNIFORM1I64NVPROC)load("glProgramUniform1i64NV");
+	glad_glProgramUniform2i64NV = (PFNGLPROGRAMUNIFORM2I64NVPROC)load("glProgramUniform2i64NV");
+	glad_glProgramUniform3i64NV = (PFNGLPROGRAMUNIFORM3I64NVPROC)load("glProgramUniform3i64NV");
+	glad_glProgramUniform4i64NV = (PFNGLPROGRAMUNIFORM4I64NVPROC)load("glProgramUniform4i64NV");
+	glad_glProgramUniform1i64vNV = (PFNGLPROGRAMUNIFORM1I64VNVPROC)load("glProgramUniform1i64vNV");
+	glad_glProgramUniform2i64vNV = (PFNGLPROGRAMUNIFORM2I64VNVPROC)load("glProgramUniform2i64vNV");
+	glad_glProgramUniform3i64vNV = (PFNGLPROGRAMUNIFORM3I64VNVPROC)load("glProgramUniform3i64vNV");
+	glad_glProgramUniform4i64vNV = (PFNGLPROGRAMUNIFORM4I64VNVPROC)load("glProgramUniform4i64vNV");
+	glad_glProgramUniform1ui64NV = (PFNGLPROGRAMUNIFORM1UI64NVPROC)load("glProgramUniform1ui64NV");
+	glad_glProgramUniform2ui64NV = (PFNGLPROGRAMUNIFORM2UI64NVPROC)load("glProgramUniform2ui64NV");
+	glad_glProgramUniform3ui64NV = (PFNGLPROGRAMUNIFORM3UI64NVPROC)load("glProgramUniform3ui64NV");
+	glad_glProgramUniform4ui64NV = (PFNGLPROGRAMUNIFORM4UI64NVPROC)load("glProgramUniform4ui64NV");
+	glad_glProgramUniform1ui64vNV = (PFNGLPROGRAMUNIFORM1UI64VNVPROC)load("glProgramUniform1ui64vNV");
+	glad_glProgramUniform2ui64vNV = (PFNGLPROGRAMUNIFORM2UI64VNVPROC)load("glProgramUniform2ui64vNV");
+	glad_glProgramUniform3ui64vNV = (PFNGLPROGRAMUNIFORM3UI64VNVPROC)load("glProgramUniform3ui64vNV");
+	glad_glProgramUniform4ui64vNV = (PFNGLPROGRAMUNIFORM4UI64VNVPROC)load("glProgramUniform4ui64vNV");
+}
+static void load_GL_NV_bindless_multi_draw_indirect_count(GLADloadproc load) {
+	if(!GLAD_GL_NV_bindless_multi_draw_indirect_count) return;
+	glad_glMultiDrawArraysIndirectBindlessCountNV = (PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSCOUNTNVPROC)load("glMultiDrawArraysIndirectBindlessCountNV");
+	glad_glMultiDrawElementsIndirectBindlessCountNV = (PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSCOUNTNVPROC)load("glMultiDrawElementsIndirectBindlessCountNV");
+}
+static void load_GL_ARB_ES2_compatibility(GLADloadproc load) {
+	if(!GLAD_GL_ARB_ES2_compatibility) return;
+	glad_glReleaseShaderCompiler = (PFNGLRELEASESHADERCOMPILERPROC)load("glReleaseShaderCompiler");
+	glad_glShaderBinary = (PFNGLSHADERBINARYPROC)load("glShaderBinary");
+	glad_glGetShaderPrecisionFormat = (PFNGLGETSHADERPRECISIONFORMATPROC)load("glGetShaderPrecisionFormat");
+	glad_glDepthRangef = (PFNGLDEPTHRANGEFPROC)load("glDepthRangef");
+	glad_glClearDepthf = (PFNGLCLEARDEPTHFPROC)load("glClearDepthf");
+}
+static void load_GL_ARB_indirect_parameters(GLADloadproc load) {
+	if(!GLAD_GL_ARB_indirect_parameters) return;
+	glad_glMultiDrawArraysIndirectCountARB = (PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC)load("glMultiDrawArraysIndirectCountARB");
+	glad_glMultiDrawElementsIndirectCountARB = (PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC)load("glMultiDrawElementsIndirectCountARB");
+}
+static void load_GL_NV_half_float(GLADloadproc load) {
+	if(!GLAD_GL_NV_half_float) return;
+	glad_glVertex2hNV = (PFNGLVERTEX2HNVPROC)load("glVertex2hNV");
+	glad_glVertex2hvNV = (PFNGLVERTEX2HVNVPROC)load("glVertex2hvNV");
+	glad_glVertex3hNV = (PFNGLVERTEX3HNVPROC)load("glVertex3hNV");
+	glad_glVertex3hvNV = (PFNGLVERTEX3HVNVPROC)load("glVertex3hvNV");
+	glad_glVertex4hNV = (PFNGLVERTEX4HNVPROC)load("glVertex4hNV");
+	glad_glVertex4hvNV = (PFNGLVERTEX4HVNVPROC)load("glVertex4hvNV");
+	glad_glNormal3hNV = (PFNGLNORMAL3HNVPROC)load("glNormal3hNV");
+	glad_glNormal3hvNV = (PFNGLNORMAL3HVNVPROC)load("glNormal3hvNV");
+	glad_glColor3hNV = (PFNGLCOLOR3HNVPROC)load("glColor3hNV");
+	glad_glColor3hvNV = (PFNGLCOLOR3HVNVPROC)load("glColor3hvNV");
+	glad_glColor4hNV = (PFNGLCOLOR4HNVPROC)load("glColor4hNV");
+	glad_glColor4hvNV = (PFNGLCOLOR4HVNVPROC)load("glColor4hvNV");
+	glad_glTexCoord1hNV = (PFNGLTEXCOORD1HNVPROC)load("glTexCoord1hNV");
+	glad_glTexCoord1hvNV = (PFNGLTEXCOORD1HVNVPROC)load("glTexCoord1hvNV");
+	glad_glTexCoord2hNV = (PFNGLTEXCOORD2HNVPROC)load("glTexCoord2hNV");
+	glad_glTexCoord2hvNV = (PFNGLTEXCOORD2HVNVPROC)load("glTexCoord2hvNV");
+	glad_glTexCoord3hNV = (PFNGLTEXCOORD3HNVPROC)load("glTexCoord3hNV");
+	glad_glTexCoord3hvNV = (PFNGLTEXCOORD3HVNVPROC)load("glTexCoord3hvNV");
+	glad_glTexCoord4hNV = (PFNGLTEXCOORD4HNVPROC)load("glTexCoord4hNV");
+	glad_glTexCoord4hvNV = (PFNGLTEXCOORD4HVNVPROC)load("glTexCoord4hvNV");
+	glad_glMultiTexCoord1hNV = (PFNGLMULTITEXCOORD1HNVPROC)load("glMultiTexCoord1hNV");
+	glad_glMultiTexCoord1hvNV = (PFNGLMULTITEXCOORD1HVNVPROC)load("glMultiTexCoord1hvNV");
+	glad_glMultiTexCoord2hNV = (PFNGLMULTITEXCOORD2HNVPROC)load("glMultiTexCoord2hNV");
+	glad_glMultiTexCoord2hvNV = (PFNGLMULTITEXCOORD2HVNVPROC)load("glMultiTexCoord2hvNV");
+	glad_glMultiTexCoord3hNV = (PFNGLMULTITEXCOORD3HNVPROC)load("glMultiTexCoord3hNV");
+	glad_glMultiTexCoord3hvNV = (PFNGLMULTITEXCOORD3HVNVPROC)load("glMultiTexCoord3hvNV");
+	glad_glMultiTexCoord4hNV = (PFNGLMULTITEXCOORD4HNVPROC)load("glMultiTexCoord4hNV");
+	glad_glMultiTexCoord4hvNV = (PFNGLMULTITEXCOORD4HVNVPROC)load("glMultiTexCoord4hvNV");
+	glad_glFogCoordhNV = (PFNGLFOGCOORDHNVPROC)load("glFogCoordhNV");
+	glad_glFogCoordhvNV = (PFNGLFOGCOORDHVNVPROC)load("glFogCoordhvNV");
+	glad_glSecondaryColor3hNV = (PFNGLSECONDARYCOLOR3HNVPROC)load("glSecondaryColor3hNV");
+	glad_glSecondaryColor3hvNV = (PFNGLSECONDARYCOLOR3HVNVPROC)load("glSecondaryColor3hvNV");
+	glad_glVertexWeighthNV = (PFNGLVERTEXWEIGHTHNVPROC)load("glVertexWeighthNV");
+	glad_glVertexWeighthvNV = (PFNGLVERTEXWEIGHTHVNVPROC)load("glVertexWeighthvNV");
+	glad_glVertexAttrib1hNV = (PFNGLVERTEXATTRIB1HNVPROC)load("glVertexAttrib1hNV");
+	glad_glVertexAttrib1hvNV = (PFNGLVERTEXATTRIB1HVNVPROC)load("glVertexAttrib1hvNV");
+	glad_glVertexAttrib2hNV = (PFNGLVERTEXATTRIB2HNVPROC)load("glVertexAttrib2hNV");
+	glad_glVertexAttrib2hvNV = (PFNGLVERTEXATTRIB2HVNVPROC)load("glVertexAttrib2hvNV");
+	glad_glVertexAttrib3hNV = (PFNGLVERTEXATTRIB3HNVPROC)load("glVertexAttrib3hNV");
+	glad_glVertexAttrib3hvNV = (PFNGLVERTEXATTRIB3HVNVPROC)load("glVertexAttrib3hvNV");
+	glad_glVertexAttrib4hNV = (PFNGLVERTEXATTRIB4HNVPROC)load("glVertexAttrib4hNV");
+	glad_glVertexAttrib4hvNV = (PFNGLVERTEXATTRIB4HVNVPROC)load("glVertexAttrib4hvNV");
+	glad_glVertexAttribs1hvNV = (PFNGLVERTEXATTRIBS1HVNVPROC)load("glVertexAttribs1hvNV");
+	glad_glVertexAttribs2hvNV = (PFNGLVERTEXATTRIBS2HVNVPROC)load("glVertexAttribs2hvNV");
+	glad_glVertexAttribs3hvNV = (PFNGLVERTEXATTRIBS3HVNVPROC)load("glVertexAttribs3hvNV");
+	glad_glVertexAttribs4hvNV = (PFNGLVERTEXATTRIBS4HVNVPROC)load("glVertexAttribs4hvNV");
+}
+static void load_GL_ARB_ES3_2_compatibility(GLADloadproc load) {
+	if(!GLAD_GL_ARB_ES3_2_compatibility) return;
+	glad_glPrimitiveBoundingBoxARB = (PFNGLPRIMITIVEBOUNDINGBOXARBPROC)load("glPrimitiveBoundingBoxARB");
+}
+static void load_GL_EXT_polygon_offset_clamp(GLADloadproc load) {
+	if(!GLAD_GL_EXT_polygon_offset_clamp) return;
+	glad_glPolygonOffsetClampEXT = (PFNGLPOLYGONOFFSETCLAMPEXTPROC)load("glPolygonOffsetClampEXT");
+}
+static void load_GL_EXT_compiled_vertex_array(GLADloadproc load) {
+	if(!GLAD_GL_EXT_compiled_vertex_array) return;
+	glad_glLockArraysEXT = (PFNGLLOCKARRAYSEXTPROC)load("glLockArraysEXT");
+	glad_glUnlockArraysEXT = (PFNGLUNLOCKARRAYSEXTPROC)load("glUnlockArraysEXT");
+}
+static void load_GL_NV_depth_buffer_float(GLADloadproc load) {
+	if(!GLAD_GL_NV_depth_buffer_float) return;
+	glad_glDepthRangedNV = (PFNGLDEPTHRANGEDNVPROC)load("glDepthRangedNV");
+	glad_glClearDepthdNV = (PFNGLCLEARDEPTHDNVPROC)load("glClearDepthdNV");
+	glad_glDepthBoundsdNV = (PFNGLDEPTHBOUNDSDNVPROC)load("glDepthBoundsdNV");
+}
+static void load_GL_NV_occlusion_query(GLADloadproc load) {
+	if(!GLAD_GL_NV_occlusion_query) return;
+	glad_glGenOcclusionQueriesNV = (PFNGLGENOCCLUSIONQUERIESNVPROC)load("glGenOcclusionQueriesNV");
+	glad_glDeleteOcclusionQueriesNV = (PFNGLDELETEOCCLUSIONQUERIESNVPROC)load("glDeleteOcclusionQueriesNV");
+	glad_glIsOcclusionQueryNV = (PFNGLISOCCLUSIONQUERYNVPROC)load("glIsOcclusionQueryNV");
+	glad_glBeginOcclusionQueryNV = (PFNGLBEGINOCCLUSIONQUERYNVPROC)load("glBeginOcclusionQueryNV");
+	glad_glEndOcclusionQueryNV = (PFNGLENDOCCLUSIONQUERYNVPROC)load("glEndOcclusionQueryNV");
+	glad_glGetOcclusionQueryivNV = (PFNGLGETOCCLUSIONQUERYIVNVPROC)load("glGetOcclusionQueryivNV");
+	glad_glGetOcclusionQueryuivNV = (PFNGLGETOCCLUSIONQUERYUIVNVPROC)load("glGetOcclusionQueryuivNV");
+}
+static void load_GL_APPLE_flush_buffer_range(GLADloadproc load) {
+	if(!GLAD_GL_APPLE_flush_buffer_range) return;
+	glad_glBufferParameteriAPPLE = (PFNGLBUFFERPARAMETERIAPPLEPROC)load("glBufferParameteriAPPLE");
+	glad_glFlushMappedBufferRangeAPPLE = (PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC)load("glFlushMappedBufferRangeAPPLE");
+}
+static void load_GL_ARB_imaging(GLADloadproc load) {
+	if(!GLAD_GL_ARB_imaging) return;
+	glad_glBlendColor = (PFNGLBLENDCOLORPROC)load("glBlendColor");
+	glad_glBlendEquation = (PFNGLBLENDEQUATIONPROC)load("glBlendEquation");
+	glad_glColorTable = (PFNGLCOLORTABLEPROC)load("glColorTable");
+	glad_glColorTableParameterfv = (PFNGLCOLORTABLEPARAMETERFVPROC)load("glColorTableParameterfv");
+	glad_glColorTableParameteriv = (PFNGLCOLORTABLEPARAMETERIVPROC)load("glColorTableParameteriv");
+	glad_glCopyColorTable = (PFNGLCOPYCOLORTABLEPROC)load("glCopyColorTable");
+	glad_glGetColorTable = (PFNGLGETCOLORTABLEPROC)load("glGetColorTable");
+	glad_glGetColorTableParameterfv = (PFNGLGETCOLORTABLEPARAMETERFVPROC)load("glGetColorTableParameterfv");
+	glad_glGetColorTableParameteriv = (PFNGLGETCOLORTABLEPARAMETERIVPROC)load("glGetColorTableParameteriv");
+	glad_glColorSubTable = (PFNGLCOLORSUBTABLEPROC)load("glColorSubTable");
+	glad_glCopyColorSubTable = (PFNGLCOPYCOLORSUBTABLEPROC)load("glCopyColorSubTable");
+	glad_glConvolutionFilter1D = (PFNGLCONVOLUTIONFILTER1DPROC)load("glConvolutionFilter1D");
+	glad_glConvolutionFilter2D = (PFNGLCONVOLUTIONFILTER2DPROC)load("glConvolutionFilter2D");
+	glad_glConvolutionParameterf = (PFNGLCONVOLUTIONPARAMETERFPROC)load("glConvolutionParameterf");
+	glad_glConvolutionParameterfv = (PFNGLCONVOLUTIONPARAMETERFVPROC)load("glConvolutionParameterfv");
+	glad_glConvolutionParameteri = (PFNGLCONVOLUTIONPARAMETERIPROC)load("glConvolutionParameteri");
+	glad_glConvolutionParameteriv = (PFNGLCONVOLUTIONPARAMETERIVPROC)load("glConvolutionParameteriv");
+	glad_glCopyConvolutionFilter1D = (PFNGLCOPYCONVOLUTIONFILTER1DPROC)load("glCopyConvolutionFilter1D");
+	glad_glCopyConvolutionFilter2D = (PFNGLCOPYCONVOLUTIONFILTER2DPROC)load("glCopyConvolutionFilter2D");
+	glad_glGetConvolutionFilter = (PFNGLGETCONVOLUTIONFILTERPROC)load("glGetConvolutionFilter");
+	glad_glGetConvolutionParameterfv = (PFNGLGETCONVOLUTIONPARAMETERFVPROC)load("glGetConvolutionParameterfv");
+	glad_glGetConvolutionParameteriv = (PFNGLGETCONVOLUTIONPARAMETERIVPROC)load("glGetConvolutionParameteriv");
+	glad_glGetSeparableFilter = (PFNGLGETSEPARABLEFILTERPROC)load("glGetSeparableFilter");
+	glad_glSeparableFilter2D = (PFNGLSEPARABLEFILTER2DPROC)load("glSeparableFilter2D");
+	glad_glGetHistogram = (PFNGLGETHISTOGRAMPROC)load("glGetHistogram");
+	glad_glGetHistogramParameterfv = (PFNGLGETHISTOGRAMPARAMETERFVPROC)load("glGetHistogramParameterfv");
+	glad_glGetHistogramParameteriv = (PFNGLGETHISTOGRAMPARAMETERIVPROC)load("glGetHistogramParameteriv");
+	glad_glGetMinmax = (PFNGLGETMINMAXPROC)load("glGetMinmax");
+	glad_glGetMinmaxParameterfv = (PFNGLGETMINMAXPARAMETERFVPROC)load("glGetMinmaxParameterfv");
+	glad_glGetMinmaxParameteriv = (PFNGLGETMINMAXPARAMETERIVPROC)load("glGetMinmaxParameteriv");
+	glad_glHistogram = (PFNGLHISTOGRAMPROC)load("glHistogram");
+	glad_glMinmax = (PFNGLMINMAXPROC)load("glMinmax");
+	glad_glResetHistogram = (PFNGLRESETHISTOGRAMPROC)load("glResetHistogram");
+	glad_glResetMinmax = (PFNGLRESETMINMAXPROC)load("glResetMinmax");
+}
+static void load_GL_ARB_draw_buffers_blend(GLADloadproc load) {
+	if(!GLAD_GL_ARB_draw_buffers_blend) return;
+	glad_glBlendEquationiARB = (PFNGLBLENDEQUATIONIARBPROC)load("glBlendEquationiARB");
+	glad_glBlendEquationSeparateiARB = (PFNGLBLENDEQUATIONSEPARATEIARBPROC)load("glBlendEquationSeparateiARB");
+	glad_glBlendFunciARB = (PFNGLBLENDFUNCIARBPROC)load("glBlendFunciARB");
+	glad_glBlendFuncSeparateiARB = (PFNGLBLENDFUNCSEPARATEIARBPROC)load("glBlendFuncSeparateiARB");
+}
+static void load_GL_ARB_clear_buffer_object(GLADloadproc load) {
+	if(!GLAD_GL_ARB_clear_buffer_object) return;
+	glad_glClearBufferData = (PFNGLCLEARBUFFERDATAPROC)load("glClearBufferData");
+	glad_glClearBufferSubData = (PFNGLCLEARBUFFERSUBDATAPROC)load("glClearBufferSubData");
+}
+static void load_GL_ARB_multisample(GLADloadproc load) {
+	if(!GLAD_GL_ARB_multisample) return;
+	glad_glSampleCoverageARB = (PFNGLSAMPLECOVERAGEARBPROC)load("glSampleCoverageARB");
+}
+static void load_GL_EXT_debug_label(GLADloadproc load) {
+	if(!GLAD_GL_EXT_debug_label) return;
+	glad_glLabelObjectEXT = (PFNGLLABELOBJECTEXTPROC)load("glLabelObjectEXT");
+	glad_glGetObjectLabelEXT = (PFNGLGETOBJECTLABELEXTPROC)load("glGetObjectLabelEXT");
+}
+static void load_GL_ARB_sample_shading(GLADloadproc load) {
+	if(!GLAD_GL_ARB_sample_shading) return;
+	glad_glMinSampleShadingARB = (PFNGLMINSAMPLESHADINGARBPROC)load("glMinSampleShadingARB");
+}
+static void load_GL_NV_internalformat_sample_query(GLADloadproc load) {
+	if(!GLAD_GL_NV_internalformat_sample_query) return;
+	glad_glGetInternalformatSampleivNV = (PFNGLGETINTERNALFORMATSAMPLEIVNVPROC)load("glGetInternalformatSampleivNV");
+}
+static void load_GL_INTEL_map_texture(GLADloadproc load) {
+	if(!GLAD_GL_INTEL_map_texture) return;
+	glad_glSyncTextureINTEL = (PFNGLSYNCTEXTUREINTELPROC)load("glSyncTextureINTEL");
+	glad_glUnmapTexture2DINTEL = (PFNGLUNMAPTEXTURE2DINTELPROC)load("glUnmapTexture2DINTEL");
+	glad_glMapTexture2DINTEL = (PFNGLMAPTEXTURE2DINTELPROC)load("glMapTexture2DINTEL");
+}
+static void load_GL_ARB_compute_shader(GLADloadproc load) {
+	if(!GLAD_GL_ARB_compute_shader) return;
+	glad_glDispatchCompute = (PFNGLDISPATCHCOMPUTEPROC)load("glDispatchCompute");
+	glad_glDispatchComputeIndirect = (PFNGLDISPATCHCOMPUTEINDIRECTPROC)load("glDispatchComputeIndirect");
+}
+static void load_GL_IBM_vertex_array_lists(GLADloadproc load) {
+	if(!GLAD_GL_IBM_vertex_array_lists) return;
+	glad_glColorPointerListIBM = (PFNGLCOLORPOINTERLISTIBMPROC)load("glColorPointerListIBM");
+	glad_glSecondaryColorPointerListIBM = (PFNGLSECONDARYCOLORPOINTERLISTIBMPROC)load("glSecondaryColorPointerListIBM");
+	glad_glEdgeFlagPointerListIBM = (PFNGLEDGEFLAGPOINTERLISTIBMPROC)load("glEdgeFlagPointerListIBM");
+	glad_glFogCoordPointerListIBM = (PFNGLFOGCOORDPOINTERLISTIBMPROC)load("glFogCoordPointerListIBM");
+	glad_glIndexPointerListIBM = (PFNGLINDEXPOINTERLISTIBMPROC)load("glIndexPointerListIBM");
+	glad_glNormalPointerListIBM = (PFNGLNORMALPOINTERLISTIBMPROC)load("glNormalPointerListIBM");
+	glad_glTexCoordPointerListIBM = (PFNGLTEXCOORDPOINTERLISTIBMPROC)load("glTexCoordPointerListIBM");
+	glad_glVertexPointerListIBM = (PFNGLVERTEXPOINTERLISTIBMPROC)load("glVertexPointerListIBM");
+}
+static void load_GL_ARB_color_buffer_float(GLADloadproc load) {
+	if(!GLAD_GL_ARB_color_buffer_float) return;
+	glad_glClampColorARB = (PFNGLCLAMPCOLORARBPROC)load("glClampColorARB");
+}
+static void load_GL_ARB_bindless_texture(GLADloadproc load) {
+	if(!GLAD_GL_ARB_bindless_texture) return;
+	glad_glGetTextureHandleARB = (PFNGLGETTEXTUREHANDLEARBPROC)load("glGetTextureHandleARB");
+	glad_glGetTextureSamplerHandleARB = (PFNGLGETTEXTURESAMPLERHANDLEARBPROC)load("glGetTextureSamplerHandleARB");
+	glad_glMakeTextureHandleResidentARB = (PFNGLMAKETEXTUREHANDLERESIDENTARBPROC)load("glMakeTextureHandleResidentARB");
+	glad_glMakeTextureHandleNonResidentARB = (PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC)load("glMakeTextureHandleNonResidentARB");
+	glad_glGetImageHandleARB = (PFNGLGETIMAGEHANDLEARBPROC)load("glGetImageHandleARB");
+	glad_glMakeImageHandleResidentARB = (PFNGLMAKEIMAGEHANDLERESIDENTARBPROC)load("glMakeImageHandleResidentARB");
+	glad_glMakeImageHandleNonResidentARB = (PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC)load("glMakeImageHandleNonResidentARB");
+	glad_glUniformHandleui64ARB = (PFNGLUNIFORMHANDLEUI64ARBPROC)load("glUniformHandleui64ARB");
+	glad_glUniformHandleui64vARB = (PFNGLUNIFORMHANDLEUI64VARBPROC)load("glUniformHandleui64vARB");
+	glad_glProgramUniformHandleui64ARB = (PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC)load("glProgramUniformHandleui64ARB");
+	glad_glProgramUniformHandleui64vARB = (PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC)load("glProgramUniformHandleui64vARB");
+	glad_glIsTextureHandleResidentARB = (PFNGLISTEXTUREHANDLERESIDENTARBPROC)load("glIsTextureHandleResidentARB");
+	glad_glIsImageHandleResidentARB = (PFNGLISIMAGEHANDLERESIDENTARBPROC)load("glIsImageHandleResidentARB");
+	glad_glVertexAttribL1ui64ARB = (PFNGLVERTEXATTRIBL1UI64ARBPROC)load("glVertexAttribL1ui64ARB");
+	glad_glVertexAttribL1ui64vARB = (PFNGLVERTEXATTRIBL1UI64VARBPROC)load("glVertexAttribL1ui64vARB");
+	glad_glGetVertexAttribLui64vARB = (PFNGLGETVERTEXATTRIBLUI64VARBPROC)load("glGetVertexAttribLui64vARB");
+}
+static void load_GL_ARB_window_pos(GLADloadproc load) {
+	if(!GLAD_GL_ARB_window_pos) return;
+	glad_glWindowPos2dARB = (PFNGLWINDOWPOS2DARBPROC)load("glWindowPos2dARB");
+	glad_glWindowPos2dvARB = (PFNGLWINDOWPOS2DVARBPROC)load("glWindowPos2dvARB");
+	glad_glWindowPos2fARB = (PFNGLWINDOWPOS2FARBPROC)load("glWindowPos2fARB");
+	glad_glWindowPos2fvARB = (PFNGLWINDOWPOS2FVARBPROC)load("glWindowPos2fvARB");
+	glad_glWindowPos2iARB = (PFNGLWINDOWPOS2IARBPROC)load("glWindowPos2iARB");
+	glad_glWindowPos2ivARB = (PFNGLWINDOWPOS2IVARBPROC)load("glWindowPos2ivARB");
+	glad_glWindowPos2sARB = (PFNGLWINDOWPOS2SARBPROC)load("glWindowPos2sARB");
+	glad_glWindowPos2svARB = (PFNGLWINDOWPOS2SVARBPROC)load("glWindowPos2svARB");
+	glad_glWindowPos3dARB = (PFNGLWINDOWPOS3DARBPROC)load("glWindowPos3dARB");
+	glad_glWindowPos3dvARB = (PFNGLWINDOWPOS3DVARBPROC)load("glWindowPos3dvARB");
+	glad_glWindowPos3fARB = (PFNGLWINDOWPOS3FARBPROC)load("glWindowPos3fARB");
+	glad_glWindowPos3fvARB = (PFNGLWINDOWPOS3FVARBPROC)load("glWindowPos3fvARB");
+	glad_glWindowPos3iARB = (PFNGLWINDOWPOS3IARBPROC)load("glWindowPos3iARB");
+	glad_glWindowPos3ivARB = (PFNGLWINDOWPOS3IVARBPROC)load("glWindowPos3ivARB");
+	glad_glWindowPos3sARB = (PFNGLWINDOWPOS3SARBPROC)load("glWindowPos3sARB");
+	glad_glWindowPos3svARB = (PFNGLWINDOWPOS3SVARBPROC)load("glWindowPos3svARB");
+}
+static void load_GL_ARB_internalformat_query(GLADloadproc load) {
+	if(!GLAD_GL_ARB_internalformat_query) return;
+	glad_glGetInternalformativ = (PFNGLGETINTERNALFORMATIVPROC)load("glGetInternalformativ");
+}
+static void load_GL_EXT_shader_image_load_store(GLADloadproc load) {
+	if(!GLAD_GL_EXT_shader_image_load_store) return;
+	glad_glBindImageTextureEXT = (PFNGLBINDIMAGETEXTUREEXTPROC)load("glBindImageTextureEXT");
+	glad_glMemoryBarrierEXT = (PFNGLMEMORYBARRIEREXTPROC)load("glMemoryBarrierEXT");
+}
+static void load_GL_EXT_copy_texture(GLADloadproc load) {
+	if(!GLAD_GL_EXT_copy_texture) return;
+	glad_glCopyTexImage1DEXT = (PFNGLCOPYTEXIMAGE1DEXTPROC)load("glCopyTexImage1DEXT");
+	glad_glCopyTexImage2DEXT = (PFNGLCOPYTEXIMAGE2DEXTPROC)load("glCopyTexImage2DEXT");
+	glad_glCopyTexSubImage1DEXT = (PFNGLCOPYTEXSUBIMAGE1DEXTPROC)load("glCopyTexSubImage1DEXT");
+	glad_glCopyTexSubImage2DEXT = (PFNGLCOPYTEXSUBIMAGE2DEXTPROC)load("glCopyTexSubImage2DEXT");
+	glad_glCopyTexSubImage3DEXT = (PFNGLCOPYTEXSUBIMAGE3DEXTPROC)load("glCopyTexSubImage3DEXT");
+}
+static void load_GL_NV_register_combiners2(GLADloadproc load) {
+	if(!GLAD_GL_NV_register_combiners2) return;
+	glad_glCombinerStageParameterfvNV = (PFNGLCOMBINERSTAGEPARAMETERFVNVPROC)load("glCombinerStageParameterfvNV");
+	glad_glGetCombinerStageParameterfvNV = (PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC)load("glGetCombinerStageParameterfvNV");
+}
+static void load_GL_NV_draw_texture(GLADloadproc load) {
+	if(!GLAD_GL_NV_draw_texture) return;
+	glad_glDrawTextureNV = (PFNGLDRAWTEXTURENVPROC)load("glDrawTextureNV");
+}
+static void load_GL_EXT_draw_instanced(GLADloadproc load) {
+	if(!GLAD_GL_EXT_draw_instanced) return;
+	glad_glDrawArraysInstancedEXT = (PFNGLDRAWARRAYSINSTANCEDEXTPROC)load("glDrawArraysInstancedEXT");
+	glad_glDrawElementsInstancedEXT = (PFNGLDRAWELEMENTSINSTANCEDEXTPROC)load("glDrawElementsInstancedEXT");
+}
+static void load_GL_ARB_viewport_array(GLADloadproc load) {
+	if(!GLAD_GL_ARB_viewport_array) return;
+	glad_glViewportArrayv = (PFNGLVIEWPORTARRAYVPROC)load("glViewportArrayv");
+	glad_glViewportIndexedf = (PFNGLVIEWPORTINDEXEDFPROC)load("glViewportIndexedf");
+	glad_glViewportIndexedfv = (PFNGLVIEWPORTINDEXEDFVPROC)load("glViewportIndexedfv");
+	glad_glScissorArrayv = (PFNGLSCISSORARRAYVPROC)load("glScissorArrayv");
+	glad_glScissorIndexed = (PFNGLSCISSORINDEXEDPROC)load("glScissorIndexed");
+	glad_glScissorIndexedv = (PFNGLSCISSORINDEXEDVPROC)load("glScissorIndexedv");
+	glad_glDepthRangeArrayv = (PFNGLDEPTHRANGEARRAYVPROC)load("glDepthRangeArrayv");
+	glad_glDepthRangeIndexed = (PFNGLDEPTHRANGEINDEXEDPROC)load("glDepthRangeIndexed");
+	glad_glGetFloati_v = (PFNGLGETFLOATI_VPROC)load("glGetFloati_v");
+	glad_glGetDoublei_v = (PFNGLGETDOUBLEI_VPROC)load("glGetDoublei_v");
+}
+static void load_GL_ARB_separate_shader_objects(GLADloadproc load) {
+	if(!GLAD_GL_ARB_separate_shader_objects) return;
+	glad_glUseProgramStages = (PFNGLUSEPROGRAMSTAGESPROC)load("glUseProgramStages");
+	glad_glActiveShaderProgram = (PFNGLACTIVESHADERPROGRAMPROC)load("glActiveShaderProgram");
+	glad_glCreateShaderProgramv = (PFNGLCREATESHADERPROGRAMVPROC)load("glCreateShaderProgramv");
+	glad_glBindProgramPipeline = (PFNGLBINDPROGRAMPIPELINEPROC)load("glBindProgramPipeline");
+	glad_glDeleteProgramPipelines = (PFNGLDELETEPROGRAMPIPELINESPROC)load("glDeleteProgramPipelines");
+	glad_glGenProgramPipelines = (PFNGLGENPROGRAMPIPELINESPROC)load("glGenProgramPipelines");
+	glad_glIsProgramPipeline = (PFNGLISPROGRAMPIPELINEPROC)load("glIsProgramPipeline");
+	glad_glGetProgramPipelineiv = (PFNGLGETPROGRAMPIPELINEIVPROC)load("glGetProgramPipelineiv");
+	glad_glProgramUniform1i = (PFNGLPROGRAMUNIFORM1IPROC)load("glProgramUniform1i");
+	glad_glProgramUniform1iv = (PFNGLPROGRAMUNIFORM1IVPROC)load("glProgramUniform1iv");
+	glad_glProgramUniform1f = (PFNGLPROGRAMUNIFORM1FPROC)load("glProgramUniform1f");
+	glad_glProgramUniform1fv = (PFNGLPROGRAMUNIFORM1FVPROC)load("glProgramUniform1fv");
+	glad_glProgramUniform1d = (PFNGLPROGRAMUNIFORM1DPROC)load("glProgramUniform1d");
+	glad_glProgramUniform1dv = (PFNGLPROGRAMUNIFORM1DVPROC)load("glProgramUniform1dv");
+	glad_glProgramUniform1ui = (PFNGLPROGRAMUNIFORM1UIPROC)load("glProgramUniform1ui");
+	glad_glProgramUniform1uiv = (PFNGLPROGRAMUNIFORM1UIVPROC)load("glProgramUniform1uiv");
+	glad_glProgramUniform2i = (PFNGLPROGRAMUNIFORM2IPROC)load("glProgramUniform2i");
+	glad_glProgramUniform2iv = (PFNGLPROGRAMUNIFORM2IVPROC)load("glProgramUniform2iv");
+	glad_glProgramUniform2f = (PFNGLPROGRAMUNIFORM2FPROC)load("glProgramUniform2f");
+	glad_glProgramUniform2fv = (PFNGLPROGRAMUNIFORM2FVPROC)load("glProgramUniform2fv");
+	glad_glProgramUniform2d = (PFNGLPROGRAMUNIFORM2DPROC)load("glProgramUniform2d");
+	glad_glProgramUniform2dv = (PFNGLPROGRAMUNIFORM2DVPROC)load("glProgramUniform2dv");
+	glad_glProgramUniform2ui = (PFNGLPROGRAMUNIFORM2UIPROC)load("glProgramUniform2ui");
+	glad_glProgramUniform2uiv = (PFNGLPROGRAMUNIFORM2UIVPROC)load("glProgramUniform2uiv");
+	glad_glProgramUniform3i = (PFNGLPROGRAMUNIFORM3IPROC)load("glProgramUniform3i");
+	glad_glProgramUniform3iv = (PFNGLPROGRAMUNIFORM3IVPROC)load("glProgramUniform3iv");
+	glad_glProgramUniform3f = (PFNGLPROGRAMUNIFORM3FPROC)load("glProgramUniform3f");
+	glad_glProgramUniform3fv = (PFNGLPROGRAMUNIFORM3FVPROC)load("glProgramUniform3fv");
+	glad_glProgramUniform3d = (PFNGLPROGRAMUNIFORM3DPROC)load("glProgramUniform3d");
+	glad_glProgramUniform3dv = (PFNGLPROGRAMUNIFORM3DVPROC)load("glProgramUniform3dv");
+	glad_glProgramUniform3ui = (PFNGLPROGRAMUNIFORM3UIPROC)load("glProgramUniform3ui");
+	glad_glProgramUniform3uiv = (PFNGLPROGRAMUNIFORM3UIVPROC)load("glProgramUniform3uiv");
+	glad_glProgramUniform4i = (PFNGLPROGRAMUNIFORM4IPROC)load("glProgramUniform4i");
+	glad_glProgramUniform4iv = (PFNGLPROGRAMUNIFORM4IVPROC)load("glProgramUniform4iv");
+	glad_glProgramUniform4f = (PFNGLPROGRAMUNIFORM4FPROC)load("glProgramUniform4f");
+	glad_glProgramUniform4fv = (PFNGLPROGRAMUNIFORM4FVPROC)load("glProgramUniform4fv");
+	glad_glProgramUniform4d = (PFNGLPROGRAMUNIFORM4DPROC)load("glProgramUniform4d");
+	glad_glProgramUniform4dv = (PFNGLPROGRAMUNIFORM4DVPROC)load("glProgramUniform4dv");
+	glad_glProgramUniform4ui = (PFNGLPROGRAMUNIFORM4UIPROC)load("glProgramUniform4ui");
+	glad_glProgramUniform4uiv = (PFNGLPROGRAMUNIFORM4UIVPROC)load("glProgramUniform4uiv");
+	glad_glProgramUniformMatrix2fv = (PFNGLPROGRAMUNIFORMMATRIX2FVPROC)load("glProgramUniformMatrix2fv");
+	glad_glProgramUniformMatrix3fv = (PFNGLPROGRAMUNIFORMMATRIX3FVPROC)load("glProgramUniformMatrix3fv");
+	glad_glProgramUniformMatrix4fv = (PFNGLPROGRAMUNIFORMMATRIX4FVPROC)load("glProgramUniformMatrix4fv");
+	glad_glProgramUniformMatrix2dv = (PFNGLPROGRAMUNIFORMMATRIX2DVPROC)load("glProgramUniformMatrix2dv");
+	glad_glProgramUniformMatrix3dv = (PFNGLPROGRAMUNIFORMMATRIX3DVPROC)load("glProgramUniformMatrix3dv");
+	glad_glProgramUniformMatrix4dv = (PFNGLPROGRAMUNIFORMMATRIX4DVPROC)load("glProgramUniformMatrix4dv");
+	glad_glProgramUniformMatrix2x3fv = (PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC)load("glProgramUniformMatrix2x3fv");
+	glad_glProgramUniformMatrix3x2fv = (PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC)load("glProgramUniformMatrix3x2fv");
+	glad_glProgramUniformMatrix2x4fv = (PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC)load("glProgramUniformMatrix2x4fv");
+	glad_glProgramUniformMatrix4x2fv = (PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC)load("glProgramUniformMatrix4x2fv");
+	glad_glProgramUniformMatrix3x4fv = (PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC)load("glProgramUniformMatrix3x4fv");
+	glad_glProgramUniformMatrix4x3fv = (PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC)load("glProgramUniformMatrix4x3fv");
+	glad_glProgramUniformMatrix2x3dv = (PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC)load("glProgramUniformMatrix2x3dv");
+	glad_glProgramUniformMatrix3x2dv = (PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC)load("glProgramUniformMatrix3x2dv");
+	glad_glProgramUniformMatrix2x4dv = (PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC)load("glProgramUniformMatrix2x4dv");
+	glad_glProgramUniformMatrix4x2dv = (PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC)load("glProgramUniformMatrix4x2dv");
+	glad_glProgramUniformMatrix3x4dv = (PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC)load("glProgramUniformMatrix3x4dv");
+	glad_glProgramUniformMatrix4x3dv = (PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC)load("glProgramUniformMatrix4x3dv");
+	glad_glValidateProgramPipeline = (PFNGLVALIDATEPROGRAMPIPELINEPROC)load("glValidateProgramPipeline");
+	glad_glGetProgramPipelineInfoLog = (PFNGLGETPROGRAMPIPELINEINFOLOGPROC)load("glGetProgramPipelineInfoLog");
+}
+static void load_GL_EXT_depth_bounds_test(GLADloadproc load) {
+	if(!GLAD_GL_EXT_depth_bounds_test) return;
+	glad_glDepthBoundsEXT = (PFNGLDEPTHBOUNDSEXTPROC)load("glDepthBoundsEXT");
+}
+static void load_GL_NV_video_capture(GLADloadproc load) {
+	if(!GLAD_GL_NV_video_capture) return;
+	glad_glBeginVideoCaptureNV = (PFNGLBEGINVIDEOCAPTURENVPROC)load("glBeginVideoCaptureNV");
+	glad_glBindVideoCaptureStreamBufferNV = (PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC)load("glBindVideoCaptureStreamBufferNV");
+	glad_glBindVideoCaptureStreamTextureNV = (PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC)load("glBindVideoCaptureStreamTextureNV");
+	glad_glEndVideoCaptureNV = (PFNGLENDVIDEOCAPTURENVPROC)load("glEndVideoCaptureNV");
+	glad_glGetVideoCaptureivNV = (PFNGLGETVIDEOCAPTUREIVNVPROC)load("glGetVideoCaptureivNV");
+	glad_glGetVideoCaptureStreamivNV = (PFNGLGETVIDEOCAPTURESTREAMIVNVPROC)load("glGetVideoCaptureStreamivNV");
+	glad_glGetVideoCaptureStreamfvNV = (PFNGLGETVIDEOCAPTURESTREAMFVNVPROC)load("glGetVideoCaptureStreamfvNV");
+	glad_glGetVideoCaptureStreamdvNV = (PFNGLGETVIDEOCAPTURESTREAMDVNVPROC)load("glGetVideoCaptureStreamdvNV");
+	glad_glVideoCaptureNV = (PFNGLVIDEOCAPTURENVPROC)load("glVideoCaptureNV");
+	glad_glVideoCaptureStreamParameterivNV = (PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC)load("glVideoCaptureStreamParameterivNV");
+	glad_glVideoCaptureStreamParameterfvNV = (PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC)load("glVideoCaptureStreamParameterfvNV");
+	glad_glVideoCaptureStreamParameterdvNV = (PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC)load("glVideoCaptureStreamParameterdvNV");
+}
+static void load_GL_ARB_sampler_objects(GLADloadproc load) {
+	if(!GLAD_GL_ARB_sampler_objects) return;
+	glad_glGenSamplers = (PFNGLGENSAMPLERSPROC)load("glGenSamplers");
+	glad_glDeleteSamplers = (PFNGLDELETESAMPLERSPROC)load("glDeleteSamplers");
+	glad_glIsSampler = (PFNGLISSAMPLERPROC)load("glIsSampler");
+	glad_glBindSampler = (PFNGLBINDSAMPLERPROC)load("glBindSampler");
+	glad_glSamplerParameteri = (PFNGLSAMPLERPARAMETERIPROC)load("glSamplerParameteri");
+	glad_glSamplerParameteriv = (PFNGLSAMPLERPARAMETERIVPROC)load("glSamplerParameteriv");
+	glad_glSamplerParameterf = (PFNGLSAMPLERPARAMETERFPROC)load("glSamplerParameterf");
+	glad_glSamplerParameterfv = (PFNGLSAMPLERPARAMETERFVPROC)load("glSamplerParameterfv");
+	glad_glSamplerParameterIiv = (PFNGLSAMPLERPARAMETERIIVPROC)load("glSamplerParameterIiv");
+	glad_glSamplerParameterIuiv = (PFNGLSAMPLERPARAMETERIUIVPROC)load("glSamplerParameterIuiv");
+	glad_glGetSamplerParameteriv = (PFNGLGETSAMPLERPARAMETERIVPROC)load("glGetSamplerParameteriv");
+	glad_glGetSamplerParameterIiv = (PFNGLGETSAMPLERPARAMETERIIVPROC)load("glGetSamplerParameterIiv");
+	glad_glGetSamplerParameterfv = (PFNGLGETSAMPLERPARAMETERFVPROC)load("glGetSamplerParameterfv");
+	glad_glGetSamplerParameterIuiv = (PFNGLGETSAMPLERPARAMETERIUIVPROC)load("glGetSamplerParameterIuiv");
+}
+static void load_GL_ARB_matrix_palette(GLADloadproc load) {
+	if(!GLAD_GL_ARB_matrix_palette) return;
+	glad_glCurrentPaletteMatrixARB = (PFNGLCURRENTPALETTEMATRIXARBPROC)load("glCurrentPaletteMatrixARB");
+	glad_glMatrixIndexubvARB = (PFNGLMATRIXINDEXUBVARBPROC)load("glMatrixIndexubvARB");
+	glad_glMatrixIndexusvARB = (PFNGLMATRIXINDEXUSVARBPROC)load("glMatrixIndexusvARB");
+	glad_glMatrixIndexuivARB = (PFNGLMATRIXINDEXUIVARBPROC)load("glMatrixIndexuivARB");
+	glad_glMatrixIndexPointerARB = (PFNGLMATRIXINDEXPOINTERARBPROC)load("glMatrixIndexPointerARB");
+}
+static void load_GL_SGIS_texture_color_mask(GLADloadproc load) {
+	if(!GLAD_GL_SGIS_texture_color_mask) return;
+	glad_glTextureColorMaskSGIS = (PFNGLTEXTURECOLORMASKSGISPROC)load("glTextureColorMaskSGIS");
+}
+static void load_GL_EXT_coordinate_frame(GLADloadproc load) {
+	if(!GLAD_GL_EXT_coordinate_frame) return;
+	glad_glTangent3bEXT = (PFNGLTANGENT3BEXTPROC)load("glTangent3bEXT");
+	glad_glTangent3bvEXT = (PFNGLTANGENT3BVEXTPROC)load("glTangent3bvEXT");
+	glad_glTangent3dEXT = (PFNGLTANGENT3DEXTPROC)load("glTangent3dEXT");
+	glad_glTangent3dvEXT = (PFNGLTANGENT3DVEXTPROC)load("glTangent3dvEXT");
+	glad_glTangent3fEXT = (PFNGLTANGENT3FEXTPROC)load("glTangent3fEXT");
+	glad_glTangent3fvEXT = (PFNGLTANGENT3FVEXTPROC)load("glTangent3fvEXT");
+	glad_glTangent3iEXT = (PFNGLTANGENT3IEXTPROC)load("glTangent3iEXT");
+	glad_glTangent3ivEXT = (PFNGLTANGENT3IVEXTPROC)load("glTangent3ivEXT");
+	glad_glTangent3sEXT = (PFNGLTANGENT3SEXTPROC)load("glTangent3sEXT");
+	glad_glTangent3svEXT = (PFNGLTANGENT3SVEXTPROC)load("glTangent3svEXT");
+	glad_glBinormal3bEXT = (PFNGLBINORMAL3BEXTPROC)load("glBinormal3bEXT");
+	glad_glBinormal3bvEXT = (PFNGLBINORMAL3BVEXTPROC)load("glBinormal3bvEXT");
+	glad_glBinormal3dEXT = (PFNGLBINORMAL3DEXTPROC)load("glBinormal3dEXT");
+	glad_glBinormal3dvEXT = (PFNGLBINORMAL3DVEXTPROC)load("glBinormal3dvEXT");
+	glad_glBinormal3fEXT = (PFNGLBINORMAL3FEXTPROC)load("glBinormal3fEXT");
+	glad_glBinormal3fvEXT = (PFNGLBINORMAL3FVEXTPROC)load("glBinormal3fvEXT");
+	glad_glBinormal3iEXT = (PFNGLBINORMAL3IEXTPROC)load("glBinormal3iEXT");
+	glad_glBinormal3ivEXT = (PFNGLBINORMAL3IVEXTPROC)load("glBinormal3ivEXT");
+	glad_glBinormal3sEXT = (PFNGLBINORMAL3SEXTPROC)load("glBinormal3sEXT");
+	glad_glBinormal3svEXT = (PFNGLBINORMAL3SVEXTPROC)load("glBinormal3svEXT");
+	glad_glTangentPointerEXT = (PFNGLTANGENTPOINTEREXTPROC)load("glTangentPointerEXT");
+	glad_glBinormalPointerEXT = (PFNGLBINORMALPOINTEREXTPROC)load("glBinormalPointerEXT");
+}
+static void load_GL_ARB_texture_compression(GLADloadproc load) {
+	if(!GLAD_GL_ARB_texture_compression) return;
+	glad_glCompressedTexImage3DARB = (PFNGLCOMPRESSEDTEXIMAGE3DARBPROC)load("glCompressedTexImage3DARB");
+	glad_glCompressedTexImage2DARB = (PFNGLCOMPRESSEDTEXIMAGE2DARBPROC)load("glCompressedTexImage2DARB");
+	glad_glCompressedTexImage1DARB = (PFNGLCOMPRESSEDTEXIMAGE1DARBPROC)load("glCompressedTexImage1DARB");
+	glad_glCompressedTexSubImage3DARB = (PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC)load("glCompressedTexSubImage3DARB");
+	glad_glCompressedTexSubImage2DARB = (PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC)load("glCompressedTexSubImage2DARB");
+	glad_glCompressedTexSubImage1DARB = (PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC)load("glCompressedTexSubImage1DARB");
+	glad_glGetCompressedTexImageARB = (PFNGLGETCOMPRESSEDTEXIMAGEARBPROC)load("glGetCompressedTexImageARB");
+}
+static void load_GL_ARB_shader_subroutine(GLADloadproc load) {
+	if(!GLAD_GL_ARB_shader_subroutine) return;
+	glad_glGetSubroutineUniformLocation = (PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC)load("glGetSubroutineUniformLocation");
+	glad_glGetSubroutineIndex = (PFNGLGETSUBROUTINEINDEXPROC)load("glGetSubroutineIndex");
+	glad_glGetActiveSubroutineUniformiv = (PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC)load("glGetActiveSubroutineUniformiv");
+	glad_glGetActiveSubroutineUniformName = (PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC)load("glGetActiveSubroutineUniformName");
+	glad_glGetActiveSubroutineName = (PFNGLGETACTIVESUBROUTINENAMEPROC)load("glGetActiveSubroutineName");
+	glad_glUniformSubroutinesuiv = (PFNGLUNIFORMSUBROUTINESUIVPROC)load("glUniformSubroutinesuiv");
+	glad_glGetUniformSubroutineuiv = (PFNGLGETUNIFORMSUBROUTINEUIVPROC)load("glGetUniformSubroutineuiv");
+	glad_glGetProgramStageiv = (PFNGLGETPROGRAMSTAGEIVPROC)load("glGetProgramStageiv");
+}
+static void load_GL_ARB_texture_storage_multisample(GLADloadproc load) {
+	if(!GLAD_GL_ARB_texture_storage_multisample) return;
+	glad_glTexStorage2DMultisample = (PFNGLTEXSTORAGE2DMULTISAMPLEPROC)load("glTexStorage2DMultisample");
+	glad_glTexStorage3DMultisample = (PFNGLTEXSTORAGE3DMULTISAMPLEPROC)load("glTexStorage3DMultisample");
+}
+static void load_GL_EXT_vertex_attrib_64bit(GLADloadproc load) {
+	if(!GLAD_GL_EXT_vertex_attrib_64bit) return;
+	glad_glVertexAttribL1dEXT = (PFNGLVERTEXATTRIBL1DEXTPROC)load("glVertexAttribL1dEXT");
+	glad_glVertexAttribL2dEXT = (PFNGLVERTEXATTRIBL2DEXTPROC)load("glVertexAttribL2dEXT");
+	glad_glVertexAttribL3dEXT = (PFNGLVERTEXATTRIBL3DEXTPROC)load("glVertexAttribL3dEXT");
+	glad_glVertexAttribL4dEXT = (PFNGLVERTEXATTRIBL4DEXTPROC)load("glVertexAttribL4dEXT");
+	glad_glVertexAttribL1dvEXT = (PFNGLVERTEXATTRIBL1DVEXTPROC)load("glVertexAttribL1dvEXT");
+	glad_glVertexAttribL2dvEXT = (PFNGLVERTEXATTRIBL2DVEXTPROC)load("glVertexAttribL2dvEXT");
+	glad_glVertexAttribL3dvEXT = (PFNGLVERTEXATTRIBL3DVEXTPROC)load("glVertexAttribL3dvEXT");
+	glad_glVertexAttribL4dvEXT = (PFNGLVERTEXATTRIBL4DVEXTPROC)load("glVertexAttribL4dvEXT");
+	glad_glVertexAttribLPointerEXT = (PFNGLVERTEXATTRIBLPOINTEREXTPROC)load("glVertexAttribLPointerEXT");
+	glad_glGetVertexAttribLdvEXT = (PFNGLGETVERTEXATTRIBLDVEXTPROC)load("glGetVertexAttribLdvEXT");
+}
+static void load_GL_OES_query_matrix(GLADloadproc load) {
+	if(!GLAD_GL_OES_query_matrix) return;
+	glad_glQueryMatrixxOES = (PFNGLQUERYMATRIXXOESPROC)load("glQueryMatrixxOES");
+}
+static void load_GL_MESA_window_pos(GLADloadproc load) {
+	if(!GLAD_GL_MESA_window_pos) return;
+	glad_glWindowPos2dMESA = (PFNGLWINDOWPOS2DMESAPROC)load("glWindowPos2dMESA");
+	glad_glWindowPos2dvMESA = (PFNGLWINDOWPOS2DVMESAPROC)load("glWindowPos2dvMESA");
+	glad_glWindowPos2fMESA = (PFNGLWINDOWPOS2FMESAPROC)load("glWindowPos2fMESA");
+	glad_glWindowPos2fvMESA = (PFNGLWINDOWPOS2FVMESAPROC)load("glWindowPos2fvMESA");
+	glad_glWindowPos2iMESA = (PFNGLWINDOWPOS2IMESAPROC)load("glWindowPos2iMESA");
+	glad_glWindowPos2ivMESA = (PFNGLWINDOWPOS2IVMESAPROC)load("glWindowPos2ivMESA");
+	glad_glWindowPos2sMESA = (PFNGLWINDOWPOS2SMESAPROC)load("glWindowPos2sMESA");
+	glad_glWindowPos2svMESA = (PFNGLWINDOWPOS2SVMESAPROC)load("glWindowPos2svMESA");
+	glad_glWindowPos3dMESA = (PFNGLWINDOWPOS3DMESAPROC)load("glWindowPos3dMESA");
+	glad_glWindowPos3dvMESA = (PFNGLWINDOWPOS3DVMESAPROC)load("glWindowPos3dvMESA");
+	glad_glWindowPos3fMESA = (PFNGLWINDOWPOS3FMESAPROC)load("glWindowPos3fMESA");
+	glad_glWindowPos3fvMESA = (PFNGLWINDOWPOS3FVMESAPROC)load("glWindowPos3fvMESA");
+	glad_glWindowPos3iMESA = (PFNGLWINDOWPOS3IMESAPROC)load("glWindowPos3iMESA");
+	glad_glWindowPos3ivMESA = (PFNGLWINDOWPOS3IVMESAPROC)load("glWindowPos3ivMESA");
+	glad_glWindowPos3sMESA = (PFNGLWINDOWPOS3SMESAPROC)load("glWindowPos3sMESA");
+	glad_glWindowPos3svMESA = (PFNGLWINDOWPOS3SVMESAPROC)load("glWindowPos3svMESA");
+	glad_glWindowPos4dMESA = (PFNGLWINDOWPOS4DMESAPROC)load("glWindowPos4dMESA");
+	glad_glWindowPos4dvMESA = (PFNGLWINDOWPOS4DVMESAPROC)load("glWindowPos4dvMESA");
+	glad_glWindowPos4fMESA = (PFNGLWINDOWPOS4FMESAPROC)load("glWindowPos4fMESA");
+	glad_glWindowPos4fvMESA = (PFNGLWINDOWPOS4FVMESAPROC)load("glWindowPos4fvMESA");
+	glad_glWindowPos4iMESA = (PFNGLWINDOWPOS4IMESAPROC)load("glWindowPos4iMESA");
+	glad_glWindowPos4ivMESA = (PFNGLWINDOWPOS4IVMESAPROC)load("glWindowPos4ivMESA");
+	glad_glWindowPos4sMESA = (PFNGLWINDOWPOS4SMESAPROC)load("glWindowPos4sMESA");
+	glad_glWindowPos4svMESA = (PFNGLWINDOWPOS4SVMESAPROC)load("glWindowPos4svMESA");
+}
+static void load_GL_ARB_copy_buffer(GLADloadproc load) {
+	if(!GLAD_GL_ARB_copy_buffer) return;
+	glad_glCopyBufferSubData = (PFNGLCOPYBUFFERSUBDATAPROC)load("glCopyBufferSubData");
+}
+static void load_GL_APPLE_object_purgeable(GLADloadproc load) {
+	if(!GLAD_GL_APPLE_object_purgeable) return;
+	glad_glObjectPurgeableAPPLE = (PFNGLOBJECTPURGEABLEAPPLEPROC)load("glObjectPurgeableAPPLE");
+	glad_glObjectUnpurgeableAPPLE = (PFNGLOBJECTUNPURGEABLEAPPLEPROC)load("glObjectUnpurgeableAPPLE");
+	glad_glGetObjectParameterivAPPLE = (PFNGLGETOBJECTPARAMETERIVAPPLEPROC)load("glGetObjectParameterivAPPLE");
+}
+static void load_GL_ARB_occlusion_query(GLADloadproc load) {
+	if(!GLAD_GL_ARB_occlusion_query) return;
+	glad_glGenQueriesARB = (PFNGLGENQUERIESARBPROC)load("glGenQueriesARB");
+	glad_glDeleteQueriesARB = (PFNGLDELETEQUERIESARBPROC)load("glDeleteQueriesARB");
+	glad_glIsQueryARB = (PFNGLISQUERYARBPROC)load("glIsQueryARB");
+	glad_glBeginQueryARB = (PFNGLBEGINQUERYARBPROC)load("glBeginQueryARB");
+	glad_glEndQueryARB = (PFNGLENDQUERYARBPROC)load("glEndQueryARB");
+	glad_glGetQueryivARB = (PFNGLGETQUERYIVARBPROC)load("glGetQueryivARB");
+	glad_glGetQueryObjectivARB = (PFNGLGETQUERYOBJECTIVARBPROC)load("glGetQueryObjectivARB");
+	glad_glGetQueryObjectuivARB = (PFNGLGETQUERYOBJECTUIVARBPROC)load("glGetQueryObjectuivARB");
+}
+static void load_GL_SGI_color_table(GLADloadproc load) {
+	if(!GLAD_GL_SGI_color_table) return;
+	glad_glColorTableSGI = (PFNGLCOLORTABLESGIPROC)load("glColorTableSGI");
+	glad_glColorTableParameterfvSGI = (PFNGLCOLORTABLEPARAMETERFVSGIPROC)load("glColorTableParameterfvSGI");
+	glad_glColorTableParameterivSGI = (PFNGLCOLORTABLEPARAMETERIVSGIPROC)load("glColorTableParameterivSGI");
+	glad_glCopyColorTableSGI = (PFNGLCOPYCOLORTABLESGIPROC)load("glCopyColorTableSGI");
+	glad_glGetColorTableSGI = (PFNGLGETCOLORTABLESGIPROC)load("glGetColorTableSGI");
+	glad_glGetColorTableParameterfvSGI = (PFNGLGETCOLORTABLEPARAMETERFVSGIPROC)load("glGetColorTableParameterfvSGI");
+	glad_glGetColorTableParameterivSGI = (PFNGLGETCOLORTABLEPARAMETERIVSGIPROC)load("glGetColorTableParameterivSGI");
+}
+static void load_GL_EXT_gpu_shader4(GLADloadproc load) {
+	if(!GLAD_GL_EXT_gpu_shader4) return;
+	glad_glGetUniformuivEXT = (PFNGLGETUNIFORMUIVEXTPROC)load("glGetUniformuivEXT");
+	glad_glBindFragDataLocationEXT = (PFNGLBINDFRAGDATALOCATIONEXTPROC)load("glBindFragDataLocationEXT");
+	glad_glGetFragDataLocationEXT = (PFNGLGETFRAGDATALOCATIONEXTPROC)load("glGetFragDataLocationEXT");
+	glad_glUniform1uiEXT = (PFNGLUNIFORM1UIEXTPROC)load("glUniform1uiEXT");
+	glad_glUniform2uiEXT = (PFNGLUNIFORM2UIEXTPROC)load("glUniform2uiEXT");
+	glad_glUniform3uiEXT = (PFNGLUNIFORM3UIEXTPROC)load("glUniform3uiEXT");
+	glad_glUniform4uiEXT = (PFNGLUNIFORM4UIEXTPROC)load("glUniform4uiEXT");
+	glad_glUniform1uivEXT = (PFNGLUNIFORM1UIVEXTPROC)load("glUniform1uivEXT");
+	glad_glUniform2uivEXT = (PFNGLUNIFORM2UIVEXTPROC)load("glUniform2uivEXT");
+	glad_glUniform3uivEXT = (PFNGLUNIFORM3UIVEXTPROC)load("glUniform3uivEXT");
+	glad_glUniform4uivEXT = (PFNGLUNIFORM4UIVEXTPROC)load("glUniform4uivEXT");
+}
+static void load_GL_NV_geometry_program4(GLADloadproc load) {
+	if(!GLAD_GL_NV_geometry_program4) return;
+	glad_glProgramVertexLimitNV = (PFNGLPROGRAMVERTEXLIMITNVPROC)load("glProgramVertexLimitNV");
+	glad_glFramebufferTextureEXT = (PFNGLFRAMEBUFFERTEXTUREEXTPROC)load("glFramebufferTextureEXT");
+	glad_glFramebufferTextureLayerEXT = (PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC)load("glFramebufferTextureLayerEXT");
+	glad_glFramebufferTextureFaceEXT = (PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC)load("glFramebufferTextureFaceEXT");
+}
+static void load_GL_AMD_debug_output(GLADloadproc load) {
+	if(!GLAD_GL_AMD_debug_output) return;
+	glad_glDebugMessageEnableAMD = (PFNGLDEBUGMESSAGEENABLEAMDPROC)load("glDebugMessageEnableAMD");
+	glad_glDebugMessageInsertAMD = (PFNGLDEBUGMESSAGEINSERTAMDPROC)load("glDebugMessageInsertAMD");
+	glad_glDebugMessageCallbackAMD = (PFNGLDEBUGMESSAGECALLBACKAMDPROC)load("glDebugMessageCallbackAMD");
+	glad_glGetDebugMessageLogAMD = (PFNGLGETDEBUGMESSAGELOGAMDPROC)load("glGetDebugMessageLogAMD");
+}
+static void load_GL_ARB_multitexture(GLADloadproc load) {
+	if(!GLAD_GL_ARB_multitexture) return;
+	glad_glActiveTextureARB = (PFNGLACTIVETEXTUREARBPROC)load("glActiveTextureARB");
+	glad_glClientActiveTextureARB = (PFNGLCLIENTACTIVETEXTUREARBPROC)load("glClientActiveTextureARB");
+	glad_glMultiTexCoord1dARB = (PFNGLMULTITEXCOORD1DARBPROC)load("glMultiTexCoord1dARB");
+	glad_glMultiTexCoord1dvARB = (PFNGLMULTITEXCOORD1DVARBPROC)load("glMultiTexCoord1dvARB");
+	glad_glMultiTexCoord1fARB = (PFNGLMULTITEXCOORD1FARBPROC)load("glMultiTexCoord1fARB");
+	glad_glMultiTexCoord1fvARB = (PFNGLMULTITEXCOORD1FVARBPROC)load("glMultiTexCoord1fvARB");
+	glad_glMultiTexCoord1iARB = (PFNGLMULTITEXCOORD1IARBPROC)load("glMultiTexCoord1iARB");
+	glad_glMultiTexCoord1ivARB = (PFNGLMULTITEXCOORD1IVARBPROC)load("glMultiTexCoord1ivARB");
+	glad_glMultiTexCoord1sARB = (PFNGLMULTITEXCOORD1SARBPROC)load("glMultiTexCoord1sARB");
+	glad_glMultiTexCoord1svARB = (PFNGLMULTITEXCOORD1SVARBPROC)load("glMultiTexCoord1svARB");
+	glad_glMultiTexCoord2dARB = (PFNGLMULTITEXCOORD2DARBPROC)load("glMultiTexCoord2dARB");
+	glad_glMultiTexCoord2dvARB = (PFNGLMULTITEXCOORD2DVARBPROC)load("glMultiTexCoord2dvARB");
+	glad_glMultiTexCoord2fARB = (PFNGLMULTITEXCOORD2FARBPROC)load("glMultiTexCoord2fARB");
+	glad_glMultiTexCoord2fvARB = (PFNGLMULTITEXCOORD2FVARBPROC)load("glMultiTexCoord2fvARB");
+	glad_glMultiTexCoord2iARB = (PFNGLMULTITEXCOORD2IARBPROC)load("glMultiTexCoord2iARB");
+	glad_glMultiTexCoord2ivARB = (PFNGLMULTITEXCOORD2IVARBPROC)load("glMultiTexCoord2ivARB");
+	glad_glMultiTexCoord2sARB = (PFNGLMULTITEXCOORD2SARBPROC)load("glMultiTexCoord2sARB");
+	glad_glMultiTexCoord2svARB = (PFNGLMULTITEXCOORD2SVARBPROC)load("glMultiTexCoord2svARB");
+	glad_glMultiTexCoord3dARB = (PFNGLMULTITEXCOORD3DARBPROC)load("glMultiTexCoord3dARB");
+	glad_glMultiTexCoord3dvARB = (PFNGLMULTITEXCOORD3DVARBPROC)load("glMultiTexCoord3dvARB");
+	glad_glMultiTexCoord3fARB = (PFNGLMULTITEXCOORD3FARBPROC)load("glMultiTexCoord3fARB");
+	glad_glMultiTexCoord3fvARB = (PFNGLMULTITEXCOORD3FVARBPROC)load("glMultiTexCoord3fvARB");
+	glad_glMultiTexCoord3iARB = (PFNGLMULTITEXCOORD3IARBPROC)load("glMultiTexCoord3iARB");
+	glad_glMultiTexCoord3ivARB = (PFNGLMULTITEXCOORD3IVARBPROC)load("glMultiTexCoord3ivARB");
+	glad_glMultiTexCoord3sARB = (PFNGLMULTITEXCOORD3SARBPROC)load("glMultiTexCoord3sARB");
+	glad_glMultiTexCoord3svARB = (PFNGLMULTITEXCOORD3SVARBPROC)load("glMultiTexCoord3svARB");
+	glad_glMultiTexCoord4dARB = (PFNGLMULTITEXCOORD4DARBPROC)load("glMultiTexCoord4dARB");
+	glad_glMultiTexCoord4dvARB = (PFNGLMULTITEXCOORD4DVARBPROC)load("glMultiTexCoord4dvARB");
+	glad_glMultiTexCoord4fARB = (PFNGLMULTITEXCOORD4FARBPROC)load("glMultiTexCoord4fARB");
+	glad_glMultiTexCoord4fvARB = (PFNGLMULTITEXCOORD4FVARBPROC)load("glMultiTexCoord4fvARB");
+	glad_glMultiTexCoord4iARB = (PFNGLMULTITEXCOORD4IARBPROC)load("glMultiTexCoord4iARB");
+	glad_glMultiTexCoord4ivARB = (PFNGLMULTITEXCOORD4IVARBPROC)load("glMultiTexCoord4ivARB");
+	glad_glMultiTexCoord4sARB = (PFNGLMULTITEXCOORD4SARBPROC)load("glMultiTexCoord4sARB");
+	glad_glMultiTexCoord4svARB = (PFNGLMULTITEXCOORD4SVARBPROC)load("glMultiTexCoord4svARB");
+}
+static void load_GL_SGIX_polynomial_ffd(GLADloadproc load) {
+	if(!GLAD_GL_SGIX_polynomial_ffd) return;
+	glad_glDeformationMap3dSGIX = (PFNGLDEFORMATIONMAP3DSGIXPROC)load("glDeformationMap3dSGIX");
+	glad_glDeformationMap3fSGIX = (PFNGLDEFORMATIONMAP3FSGIXPROC)load("glDeformationMap3fSGIX");
+	glad_glDeformSGIX = (PFNGLDEFORMSGIXPROC)load("glDeformSGIX");
+	glad_glLoadIdentityDeformationMapSGIX = (PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC)load("glLoadIdentityDeformationMapSGIX");
+}
+static void load_GL_EXT_provoking_vertex(GLADloadproc load) {
+	if(!GLAD_GL_EXT_provoking_vertex) return;
+	glad_glProvokingVertexEXT = (PFNGLPROVOKINGVERTEXEXTPROC)load("glProvokingVertexEXT");
+}
+static void load_GL_ARB_point_parameters(GLADloadproc load) {
+	if(!GLAD_GL_ARB_point_parameters) return;
+	glad_glPointParameterfARB = (PFNGLPOINTPARAMETERFARBPROC)load("glPointParameterfARB");
+	glad_glPointParameterfvARB = (PFNGLPOINTPARAMETERFVARBPROC)load("glPointParameterfvARB");
+}
+static void load_GL_ARB_shader_image_load_store(GLADloadproc load) {
+	if(!GLAD_GL_ARB_shader_image_load_store) return;
+	glad_glBindImageTexture = (PFNGLBINDIMAGETEXTUREPROC)load("glBindImageTexture");
+	glad_glMemoryBarrier = (PFNGLMEMORYBARRIERPROC)load("glMemoryBarrier");
+}
+static void load_GL_ARB_texture_barrier(GLADloadproc load) {
+	if(!GLAD_GL_ARB_texture_barrier) return;
+	glad_glTextureBarrier = (PFNGLTEXTUREBARRIERPROC)load("glTextureBarrier");
+}
+static void load_GL_NV_bindless_multi_draw_indirect(GLADloadproc load) {
+	if(!GLAD_GL_NV_bindless_multi_draw_indirect) return;
+	glad_glMultiDrawArraysIndirectBindlessNV = (PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC)load("glMultiDrawArraysIndirectBindlessNV");
+	glad_glMultiDrawElementsIndirectBindlessNV = (PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC)load("glMultiDrawElementsIndirectBindlessNV");
+}
+static void load_GL_EXT_transform_feedback(GLADloadproc load) {
+	if(!GLAD_GL_EXT_transform_feedback) return;
+	glad_glBeginTransformFeedbackEXT = (PFNGLBEGINTRANSFORMFEEDBACKEXTPROC)load("glBeginTransformFeedbackEXT");
+	glad_glEndTransformFeedbackEXT = (PFNGLENDTRANSFORMFEEDBACKEXTPROC)load("glEndTransformFeedbackEXT");
+	glad_glBindBufferRangeEXT = (PFNGLBINDBUFFERRANGEEXTPROC)load("glBindBufferRangeEXT");
+	glad_glBindBufferOffsetEXT = (PFNGLBINDBUFFEROFFSETEXTPROC)load("glBindBufferOffsetEXT");
+	glad_glBindBufferBaseEXT = (PFNGLBINDBUFFERBASEEXTPROC)load("glBindBufferBaseEXT");
+	glad_glTransformFeedbackVaryingsEXT = (PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC)load("glTransformFeedbackVaryingsEXT");
+	glad_glGetTransformFeedbackVaryingEXT = (PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC)load("glGetTransformFeedbackVaryingEXT");
+}
+static void load_GL_NV_gpu_program4(GLADloadproc load) {
+	if(!GLAD_GL_NV_gpu_program4) return;
+	glad_glProgramLocalParameterI4iNV = (PFNGLPROGRAMLOCALPARAMETERI4INVPROC)load("glProgramLocalParameterI4iNV");
+	glad_glProgramLocalParameterI4ivNV = (PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC)load("glProgramLocalParameterI4ivNV");
+	glad_glProgramLocalParametersI4ivNV = (PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC)load("glProgramLocalParametersI4ivNV");
+	glad_glProgramLocalParameterI4uiNV = (PFNGLPROGRAMLOCALPARAMETERI4UINVPROC)load("glProgramLocalParameterI4uiNV");
+	glad_glProgramLocalParameterI4uivNV = (PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC)load("glProgramLocalParameterI4uivNV");
+	glad_glProgramLocalParametersI4uivNV = (PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC)load("glProgramLocalParametersI4uivNV");
+	glad_glProgramEnvParameterI4iNV = (PFNGLPROGRAMENVPARAMETERI4INVPROC)load("glProgramEnvParameterI4iNV");
+	glad_glProgramEnvParameterI4ivNV = (PFNGLPROGRAMENVPARAMETERI4IVNVPROC)load("glProgramEnvParameterI4ivNV");
+	glad_glProgramEnvParametersI4ivNV = (PFNGLPROGRAMENVPARAMETERSI4IVNVPROC)load("glProgramEnvParametersI4ivNV");
+	glad_glProgramEnvParameterI4uiNV = (PFNGLPROGRAMENVPARAMETERI4UINVPROC)load("glProgramEnvParameterI4uiNV");
+	glad_glProgramEnvParameterI4uivNV = (PFNGLPROGRAMENVPARAMETERI4UIVNVPROC)load("glProgramEnvParameterI4uivNV");
+	glad_glProgramEnvParametersI4uivNV = (PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC)load("glProgramEnvParametersI4uivNV");
+	glad_glGetProgramLocalParameterIivNV = (PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC)load("glGetProgramLocalParameterIivNV");
+	glad_glGetProgramLocalParameterIuivNV = (PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC)load("glGetProgramLocalParameterIuivNV");
+	glad_glGetProgramEnvParameterIivNV = (PFNGLGETPROGRAMENVPARAMETERIIVNVPROC)load("glGetProgramEnvParameterIivNV");
+	glad_glGetProgramEnvParameterIuivNV = (PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC)load("glGetProgramEnvParameterIuivNV");
+}
+static void load_GL_NV_gpu_program5(GLADloadproc load) {
+	if(!GLAD_GL_NV_gpu_program5) return;
+	glad_glProgramSubroutineParametersuivNV = (PFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC)load("glProgramSubroutineParametersuivNV");
+	glad_glGetProgramSubroutineParameteruivNV = (PFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC)load("glGetProgramSubroutineParameteruivNV");
+}
+static void load_GL_ARB_geometry_shader4(GLADloadproc load) {
+	if(!GLAD_GL_ARB_geometry_shader4) return;
+	glad_glProgramParameteriARB = (PFNGLPROGRAMPARAMETERIARBPROC)load("glProgramParameteriARB");
+	glad_glFramebufferTextureARB = (PFNGLFRAMEBUFFERTEXTUREARBPROC)load("glFramebufferTextureARB");
+	glad_glFramebufferTextureLayerARB = (PFNGLFRAMEBUFFERTEXTURELAYERARBPROC)load("glFramebufferTextureLayerARB");
+	glad_glFramebufferTextureFaceARB = (PFNGLFRAMEBUFFERTEXTUREFACEARBPROC)load("glFramebufferTextureFaceARB");
+}
+static void load_GL_NV_conservative_raster(GLADloadproc load) {
+	if(!GLAD_GL_NV_conservative_raster) return;
+	glad_glSubpixelPrecisionBiasNV = (PFNGLSUBPIXELPRECISIONBIASNVPROC)load("glSubpixelPrecisionBiasNV");
+}
+static void load_GL_SGIX_sprite(GLADloadproc load) {
+	if(!GLAD_GL_SGIX_sprite) return;
+	glad_glSpriteParameterfSGIX = (PFNGLSPRITEPARAMETERFSGIXPROC)load("glSpriteParameterfSGIX");
+	glad_glSpriteParameterfvSGIX = (PFNGLSPRITEPARAMETERFVSGIXPROC)load("glSpriteParameterfvSGIX");
+	glad_glSpriteParameteriSGIX = (PFNGLSPRITEPARAMETERISGIXPROC)load("glSpriteParameteriSGIX");
+	glad_glSpriteParameterivSGIX = (PFNGLSPRITEPARAMETERIVSGIXPROC)load("glSpriteParameterivSGIX");
+}
+static void load_GL_ARB_get_program_binary(GLADloadproc load) {
+	if(!GLAD_GL_ARB_get_program_binary) return;
+	glad_glGetProgramBinary = (PFNGLGETPROGRAMBINARYPROC)load("glGetProgramBinary");
+	glad_glProgramBinary = (PFNGLPROGRAMBINARYPROC)load("glProgramBinary");
+	glad_glProgramParameteri = (PFNGLPROGRAMPARAMETERIPROC)load("glProgramParameteri");
+}
+static void load_GL_AMD_occlusion_query_event(GLADloadproc load) {
+	if(!GLAD_GL_AMD_occlusion_query_event) return;
+	glad_glQueryObjectParameteruiAMD = (PFNGLQUERYOBJECTPARAMETERUIAMDPROC)load("glQueryObjectParameteruiAMD");
+}
+static void load_GL_SGIS_multisample(GLADloadproc load) {
+	if(!GLAD_GL_SGIS_multisample) return;
+	glad_glSampleMaskSGIS = (PFNGLSAMPLEMASKSGISPROC)load("glSampleMaskSGIS");
+	glad_glSamplePatternSGIS = (PFNGLSAMPLEPATTERNSGISPROC)load("glSamplePatternSGIS");
+}
+static void load_GL_EXT_framebuffer_object(GLADloadproc load) {
+	if(!GLAD_GL_EXT_framebuffer_object) return;
+	glad_glIsRenderbufferEXT = (PFNGLISRENDERBUFFEREXTPROC)load("glIsRenderbufferEXT");
+	glad_glBindRenderbufferEXT = (PFNGLBINDRENDERBUFFEREXTPROC)load("glBindRenderbufferEXT");
+	glad_glDeleteRenderbuffersEXT = (PFNGLDELETERENDERBUFFERSEXTPROC)load("glDeleteRenderbuffersEXT");
+	glad_glGenRenderbuffersEXT = (PFNGLGENRENDERBUFFERSEXTPROC)load("glGenRenderbuffersEXT");
+	glad_glRenderbufferStorageEXT = (PFNGLRENDERBUFFERSTORAGEEXTPROC)load("glRenderbufferStorageEXT");
+	glad_glGetRenderbufferParameterivEXT = (PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC)load("glGetRenderbufferParameterivEXT");
+	glad_glIsFramebufferEXT = (PFNGLISFRAMEBUFFEREXTPROC)load("glIsFramebufferEXT");
+	glad_glBindFramebufferEXT = (PFNGLBINDFRAMEBUFFEREXTPROC)load("glBindFramebufferEXT");
+	glad_glDeleteFramebuffersEXT = (PFNGLDELETEFRAMEBUFFERSEXTPROC)load("glDeleteFramebuffersEXT");
+	glad_glGenFramebuffersEXT = (PFNGLGENFRAMEBUFFERSEXTPROC)load("glGenFramebuffersEXT");
+	glad_glCheckFramebufferStatusEXT = (PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC)load("glCheckFramebufferStatusEXT");
+	glad_glFramebufferTexture1DEXT = (PFNGLFRAMEBUFFERTEXTURE1DEXTPROC)load("glFramebufferTexture1DEXT");
+	glad_glFramebufferTexture2DEXT = (PFNGLFRAMEBUFFERTEXTURE2DEXTPROC)load("glFramebufferTexture2DEXT");
+	glad_glFramebufferTexture3DEXT = (PFNGLFRAMEBUFFERTEXTURE3DEXTPROC)load("glFramebufferTexture3DEXT");
+	glad_glFramebufferRenderbufferEXT = (PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC)load("glFramebufferRenderbufferEXT");
+	glad_glGetFramebufferAttachmentParameterivEXT = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC)load("glGetFramebufferAttachmentParameterivEXT");
+	glad_glGenerateMipmapEXT = (PFNGLGENERATEMIPMAPEXTPROC)load("glGenerateMipmapEXT");
+}
+static void load_GL_APPLE_vertex_array_range(GLADloadproc load) {
+	if(!GLAD_GL_APPLE_vertex_array_range) return;
+	glad_glVertexArrayRangeAPPLE = (PFNGLVERTEXARRAYRANGEAPPLEPROC)load("glVertexArrayRangeAPPLE");
+	glad_glFlushVertexArrayRangeAPPLE = (PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC)load("glFlushVertexArrayRangeAPPLE");
+	glad_glVertexArrayParameteriAPPLE = (PFNGLVERTEXARRAYPARAMETERIAPPLEPROC)load("glVertexArrayParameteriAPPLE");
+}
+static void load_GL_NV_register_combiners(GLADloadproc load) {
+	if(!GLAD_GL_NV_register_combiners) return;
+	glad_glCombinerParameterfvNV = (PFNGLCOMBINERPARAMETERFVNVPROC)load("glCombinerParameterfvNV");
+	glad_glCombinerParameterfNV = (PFNGLCOMBINERPARAMETERFNVPROC)load("glCombinerParameterfNV");
+	glad_glCombinerParameterivNV = (PFNGLCOMBINERPARAMETERIVNVPROC)load("glCombinerParameterivNV");
+	glad_glCombinerParameteriNV = (PFNGLCOMBINERPARAMETERINVPROC)load("glCombinerParameteriNV");
+	glad_glCombinerInputNV = (PFNGLCOMBINERINPUTNVPROC)load("glCombinerInputNV");
+	glad_glCombinerOutputNV = (PFNGLCOMBINEROUTPUTNVPROC)load("glCombinerOutputNV");
+	glad_glFinalCombinerInputNV = (PFNGLFINALCOMBINERINPUTNVPROC)load("glFinalCombinerInputNV");
+	glad_glGetCombinerInputParameterfvNV = (PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC)load("glGetCombinerInputParameterfvNV");
+	glad_glGetCombinerInputParameterivNV = (PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC)load("glGetCombinerInputParameterivNV");
+	glad_glGetCombinerOutputParameterfvNV = (PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC)load("glGetCombinerOutputParameterfvNV");
+	glad_glGetCombinerOutputParameterivNV = (PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC)load("glGetCombinerOutputParameterivNV");
+	glad_glGetFinalCombinerInputParameterfvNV = (PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC)load("glGetFinalCombinerInputParameterfvNV");
+	glad_glGetFinalCombinerInputParameterivNV = (PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC)load("glGetFinalCombinerInputParameterivNV");
+}
+static void load_GL_ARB_draw_buffers(GLADloadproc load) {
+	if(!GLAD_GL_ARB_draw_buffers) return;
+	glad_glDrawBuffersARB = (PFNGLDRAWBUFFERSARBPROC)load("glDrawBuffersARB");
+}
+static void load_GL_ARB_clear_texture(GLADloadproc load) {
+	if(!GLAD_GL_ARB_clear_texture) return;
+	glad_glClearTexImage = (PFNGLCLEARTEXIMAGEPROC)load("glClearTexImage");
+	glad_glClearTexSubImage = (PFNGLCLEARTEXSUBIMAGEPROC)load("glClearTexSubImage");
+}
+static void load_GL_ARB_debug_output(GLADloadproc load) {
+	if(!GLAD_GL_ARB_debug_output) return;
+	glad_glDebugMessageControlARB = (PFNGLDEBUGMESSAGECONTROLARBPROC)load("glDebugMessageControlARB");
+	glad_glDebugMessageInsertARB = (PFNGLDEBUGMESSAGEINSERTARBPROC)load("glDebugMessageInsertARB");
+	glad_glDebugMessageCallbackARB = (PFNGLDEBUGMESSAGECALLBACKARBPROC)load("glDebugMessageCallbackARB");
+	glad_glGetDebugMessageLogARB = (PFNGLGETDEBUGMESSAGELOGARBPROC)load("glGetDebugMessageLogARB");
+}
+static void load_GL_EXT_cull_vertex(GLADloadproc load) {
+	if(!GLAD_GL_EXT_cull_vertex) return;
+	glad_glCullParameterdvEXT = (PFNGLCULLPARAMETERDVEXTPROC)load("glCullParameterdvEXT");
+	glad_glCullParameterfvEXT = (PFNGLCULLPARAMETERFVEXTPROC)load("glCullParameterfvEXT");
+}
+static void load_GL_IBM_multimode_draw_arrays(GLADloadproc load) {
+	if(!GLAD_GL_IBM_multimode_draw_arrays) return;
+	glad_glMultiModeDrawArraysIBM = (PFNGLMULTIMODEDRAWARRAYSIBMPROC)load("glMultiModeDrawArraysIBM");
+	glad_glMultiModeDrawElementsIBM = (PFNGLMULTIMODEDRAWELEMENTSIBMPROC)load("glMultiModeDrawElementsIBM");
+}
+static void load_GL_APPLE_vertex_array_object(GLADloadproc load) {
+	if(!GLAD_GL_APPLE_vertex_array_object) return;
+	glad_glBindVertexArrayAPPLE = (PFNGLBINDVERTEXARRAYAPPLEPROC)load("glBindVertexArrayAPPLE");
+	glad_glDeleteVertexArraysAPPLE = (PFNGLDELETEVERTEXARRAYSAPPLEPROC)load("glDeleteVertexArraysAPPLE");
+	glad_glGenVertexArraysAPPLE = (PFNGLGENVERTEXARRAYSAPPLEPROC)load("glGenVertexArraysAPPLE");
+	glad_glIsVertexArrayAPPLE = (PFNGLISVERTEXARRAYAPPLEPROC)load("glIsVertexArrayAPPLE");
+}
+static void load_GL_SGIS_detail_texture(GLADloadproc load) {
+	if(!GLAD_GL_SGIS_detail_texture) return;
+	glad_glDetailTexFuncSGIS = (PFNGLDETAILTEXFUNCSGISPROC)load("glDetailTexFuncSGIS");
+	glad_glGetDetailTexFuncSGIS = (PFNGLGETDETAILTEXFUNCSGISPROC)load("glGetDetailTexFuncSGIS");
+}
+static void load_GL_ARB_draw_instanced(GLADloadproc load) {
+	if(!GLAD_GL_ARB_draw_instanced) return;
+	glad_glDrawArraysInstancedARB = (PFNGLDRAWARRAYSINSTANCEDARBPROC)load("glDrawArraysInstancedARB");
+	glad_glDrawElementsInstancedARB = (PFNGLDRAWELEMENTSINSTANCEDARBPROC)load("glDrawElementsInstancedARB");
+}
+static void load_GL_ARB_shading_language_include(GLADloadproc load) {
+	if(!GLAD_GL_ARB_shading_language_include) return;
+	glad_glNamedStringARB = (PFNGLNAMEDSTRINGARBPROC)load("glNamedStringARB");
+	glad_glDeleteNamedStringARB = (PFNGLDELETENAMEDSTRINGARBPROC)load("glDeleteNamedStringARB");
+	glad_glCompileShaderIncludeARB = (PFNGLCOMPILESHADERINCLUDEARBPROC)load("glCompileShaderIncludeARB");
+	glad_glIsNamedStringARB = (PFNGLISNAMEDSTRINGARBPROC)load("glIsNamedStringARB");
+	glad_glGetNamedStringARB = (PFNGLGETNAMEDSTRINGARBPROC)load("glGetNamedStringARB");
+	glad_glGetNamedStringivARB = (PFNGLGETNAMEDSTRINGIVARBPROC)load("glGetNamedStringivARB");
+}
+static void load_GL_INGR_blend_func_separate(GLADloadproc load) {
+	if(!GLAD_GL_INGR_blend_func_separate) return;
+	glad_glBlendFuncSeparateINGR = (PFNGLBLENDFUNCSEPARATEINGRPROC)load("glBlendFuncSeparateINGR");
+}
+static void load_GL_NV_path_rendering(GLADloadproc load) {
+	if(!GLAD_GL_NV_path_rendering) return;
+	glad_glGenPathsNV = (PFNGLGENPATHSNVPROC)load("glGenPathsNV");
+	glad_glDeletePathsNV = (PFNGLDELETEPATHSNVPROC)load("glDeletePathsNV");
+	glad_glIsPathNV = (PFNGLISPATHNVPROC)load("glIsPathNV");
+	glad_glPathCommandsNV = (PFNGLPATHCOMMANDSNVPROC)load("glPathCommandsNV");
+	glad_glPathCoordsNV = (PFNGLPATHCOORDSNVPROC)load("glPathCoordsNV");
+	glad_glPathSubCommandsNV = (PFNGLPATHSUBCOMMANDSNVPROC)load("glPathSubCommandsNV");
+	glad_glPathSubCoordsNV = (PFNGLPATHSUBCOORDSNVPROC)load("glPathSubCoordsNV");
+	glad_glPathStringNV = (PFNGLPATHSTRINGNVPROC)load("glPathStringNV");
+	glad_glPathGlyphsNV = (PFNGLPATHGLYPHSNVPROC)load("glPathGlyphsNV");
+	glad_glPathGlyphRangeNV = (PFNGLPATHGLYPHRANGENVPROC)load("glPathGlyphRangeNV");
+	glad_glWeightPathsNV = (PFNGLWEIGHTPATHSNVPROC)load("glWeightPathsNV");
+	glad_glCopyPathNV = (PFNGLCOPYPATHNVPROC)load("glCopyPathNV");
+	glad_glInterpolatePathsNV = (PFNGLINTERPOLATEPATHSNVPROC)load("glInterpolatePathsNV");
+	glad_glTransformPathNV = (PFNGLTRANSFORMPATHNVPROC)load("glTransformPathNV");
+	glad_glPathParameterivNV = (PFNGLPATHPARAMETERIVNVPROC)load("glPathParameterivNV");
+	glad_glPathParameteriNV = (PFNGLPATHPARAMETERINVPROC)load("glPathParameteriNV");
+	glad_glPathParameterfvNV = (PFNGLPATHPARAMETERFVNVPROC)load("glPathParameterfvNV");
+	glad_glPathParameterfNV = (PFNGLPATHPARAMETERFNVPROC)load("glPathParameterfNV");
+	glad_glPathDashArrayNV = (PFNGLPATHDASHARRAYNVPROC)load("glPathDashArrayNV");
+	glad_glPathStencilFuncNV = (PFNGLPATHSTENCILFUNCNVPROC)load("glPathStencilFuncNV");
+	glad_glPathStencilDepthOffsetNV = (PFNGLPATHSTENCILDEPTHOFFSETNVPROC)load("glPathStencilDepthOffsetNV");
+	glad_glStencilFillPathNV = (PFNGLSTENCILFILLPATHNVPROC)load("glStencilFillPathNV");
+	glad_glStencilStrokePathNV = (PFNGLSTENCILSTROKEPATHNVPROC)load("glStencilStrokePathNV");
+	glad_glStencilFillPathInstancedNV = (PFNGLSTENCILFILLPATHINSTANCEDNVPROC)load("glStencilFillPathInstancedNV");
+	glad_glStencilStrokePathInstancedNV = (PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC)load("glStencilStrokePathInstancedNV");
+	glad_glPathCoverDepthFuncNV = (PFNGLPATHCOVERDEPTHFUNCNVPROC)load("glPathCoverDepthFuncNV");
+	glad_glCoverFillPathNV = (PFNGLCOVERFILLPATHNVPROC)load("glCoverFillPathNV");
+	glad_glCoverStrokePathNV = (PFNGLCOVERSTROKEPATHNVPROC)load("glCoverStrokePathNV");
+	glad_glCoverFillPathInstancedNV = (PFNGLCOVERFILLPATHINSTANCEDNVPROC)load("glCoverFillPathInstancedNV");
+	glad_glCoverStrokePathInstancedNV = (PFNGLCOVERSTROKEPATHINSTANCEDNVPROC)load("glCoverStrokePathInstancedNV");
+	glad_glGetPathParameterivNV = (PFNGLGETPATHPARAMETERIVNVPROC)load("glGetPathParameterivNV");
+	glad_glGetPathParameterfvNV = (PFNGLGETPATHPARAMETERFVNVPROC)load("glGetPathParameterfvNV");
+	glad_glGetPathCommandsNV = (PFNGLGETPATHCOMMANDSNVPROC)load("glGetPathCommandsNV");
+	glad_glGetPathCoordsNV = (PFNGLGETPATHCOORDSNVPROC)load("glGetPathCoordsNV");
+	glad_glGetPathDashArrayNV = (PFNGLGETPATHDASHARRAYNVPROC)load("glGetPathDashArrayNV");
+	glad_glGetPathMetricsNV = (PFNGLGETPATHMETRICSNVPROC)load("glGetPathMetricsNV");
+	glad_glGetPathMetricRangeNV = (PFNGLGETPATHMETRICRANGENVPROC)load("glGetPathMetricRangeNV");
+	glad_glGetPathSpacingNV = (PFNGLGETPATHSPACINGNVPROC)load("glGetPathSpacingNV");
+	glad_glIsPointInFillPathNV = (PFNGLISPOINTINFILLPATHNVPROC)load("glIsPointInFillPathNV");
+	glad_glIsPointInStrokePathNV = (PFNGLISPOINTINSTROKEPATHNVPROC)load("glIsPointInStrokePathNV");
+	glad_glGetPathLengthNV = (PFNGLGETPATHLENGTHNVPROC)load("glGetPathLengthNV");
+	glad_glPointAlongPathNV = (PFNGLPOINTALONGPATHNVPROC)load("glPointAlongPathNV");
+	glad_glMatrixLoad3x2fNV = (PFNGLMATRIXLOAD3X2FNVPROC)load("glMatrixLoad3x2fNV");
+	glad_glMatrixLoad3x3fNV = (PFNGLMATRIXLOAD3X3FNVPROC)load("glMatrixLoad3x3fNV");
+	glad_glMatrixLoadTranspose3x3fNV = (PFNGLMATRIXLOADTRANSPOSE3X3FNVPROC)load("glMatrixLoadTranspose3x3fNV");
+	glad_glMatrixMult3x2fNV = (PFNGLMATRIXMULT3X2FNVPROC)load("glMatrixMult3x2fNV");
+	glad_glMatrixMult3x3fNV = (PFNGLMATRIXMULT3X3FNVPROC)load("glMatrixMult3x3fNV");
+	glad_glMatrixMultTranspose3x3fNV = (PFNGLMATRIXMULTTRANSPOSE3X3FNVPROC)load("glMatrixMultTranspose3x3fNV");
+	glad_glStencilThenCoverFillPathNV = (PFNGLSTENCILTHENCOVERFILLPATHNVPROC)load("glStencilThenCoverFillPathNV");
+	glad_glStencilThenCoverStrokePathNV = (PFNGLSTENCILTHENCOVERSTROKEPATHNVPROC)load("glStencilThenCoverStrokePathNV");
+	glad_glStencilThenCoverFillPathInstancedNV = (PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDNVPROC)load("glStencilThenCoverFillPathInstancedNV");
+	glad_glStencilThenCoverStrokePathInstancedNV = (PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDNVPROC)load("glStencilThenCoverStrokePathInstancedNV");
+	glad_glPathGlyphIndexRangeNV = (PFNGLPATHGLYPHINDEXRANGENVPROC)load("glPathGlyphIndexRangeNV");
+	glad_glPathGlyphIndexArrayNV = (PFNGLPATHGLYPHINDEXARRAYNVPROC)load("glPathGlyphIndexArrayNV");
+	glad_glPathMemoryGlyphIndexArrayNV = (PFNGLPATHMEMORYGLYPHINDEXARRAYNVPROC)load("glPathMemoryGlyphIndexArrayNV");
+	glad_glProgramPathFragmentInputGenNV = (PFNGLPROGRAMPATHFRAGMENTINPUTGENNVPROC)load("glProgramPathFragmentInputGenNV");
+	glad_glGetProgramResourcefvNV = (PFNGLGETPROGRAMRESOURCEFVNVPROC)load("glGetProgramResourcefvNV");
+	glad_glPathColorGenNV = (PFNGLPATHCOLORGENNVPROC)load("glPathColorGenNV");
+	glad_glPathTexGenNV = (PFNGLPATHTEXGENNVPROC)load("glPathTexGenNV");
+	glad_glPathFogGenNV = (PFNGLPATHFOGGENNVPROC)load("glPathFogGenNV");
+	glad_glGetPathColorGenivNV = (PFNGLGETPATHCOLORGENIVNVPROC)load("glGetPathColorGenivNV");
+	glad_glGetPathColorGenfvNV = (PFNGLGETPATHCOLORGENFVNVPROC)load("glGetPathColorGenfvNV");
+	glad_glGetPathTexGenivNV = (PFNGLGETPATHTEXGENIVNVPROC)load("glGetPathTexGenivNV");
+	glad_glGetPathTexGenfvNV = (PFNGLGETPATHTEXGENFVNVPROC)load("glGetPathTexGenfvNV");
+}
+static void load_GL_NV_conservative_raster_dilate(GLADloadproc load) {
+	if(!GLAD_GL_NV_conservative_raster_dilate) return;
+	glad_glConservativeRasterParameterfNV = (PFNGLCONSERVATIVERASTERPARAMETERFNVPROC)load("glConservativeRasterParameterfNV");
+}
+static void load_GL_ATI_vertex_streams(GLADloadproc load) {
+	if(!GLAD_GL_ATI_vertex_streams) return;
+	glad_glVertexStream1sATI = (PFNGLVERTEXSTREAM1SATIPROC)load("glVertexStream1sATI");
+	glad_glVertexStream1svATI = (PFNGLVERTEXSTREAM1SVATIPROC)load("glVertexStream1svATI");
+	glad_glVertexStream1iATI = (PFNGLVERTEXSTREAM1IATIPROC)load("glVertexStream1iATI");
+	glad_glVertexStream1ivATI = (PFNGLVERTEXSTREAM1IVATIPROC)load("glVertexStream1ivATI");
+	glad_glVertexStream1fATI = (PFNGLVERTEXSTREAM1FATIPROC)load("glVertexStream1fATI");
+	glad_glVertexStream1fvATI = (PFNGLVERTEXSTREAM1FVATIPROC)load("glVertexStream1fvATI");
+	glad_glVertexStream1dATI = (PFNGLVERTEXSTREAM1DATIPROC)load("glVertexStream1dATI");
+	glad_glVertexStream1dvATI = (PFNGLVERTEXSTREAM1DVATIPROC)load("glVertexStream1dvATI");
+	glad_glVertexStream2sATI = (PFNGLVERTEXSTREAM2SATIPROC)load("glVertexStream2sATI");
+	glad_glVertexStream2svATI = (PFNGLVERTEXSTREAM2SVATIPROC)load("glVertexStream2svATI");
+	glad_glVertexStream2iATI = (PFNGLVERTEXSTREAM2IATIPROC)load("glVertexStream2iATI");
+	glad_glVertexStream2ivATI = (PFNGLVERTEXSTREAM2IVATIPROC)load("glVertexStream2ivATI");
+	glad_glVertexStream2fATI = (PFNGLVERTEXSTREAM2FATIPROC)load("glVertexStream2fATI");
+	glad_glVertexStream2fvATI = (PFNGLVERTEXSTREAM2FVATIPROC)load("glVertexStream2fvATI");
+	glad_glVertexStream2dATI = (PFNGLVERTEXSTREAM2DATIPROC)load("glVertexStream2dATI");
+	glad_glVertexStream2dvATI = (PFNGLVERTEXSTREAM2DVATIPROC)load("glVertexStream2dvATI");
+	glad_glVertexStream3sATI = (PFNGLVERTEXSTREAM3SATIPROC)load("glVertexStream3sATI");
+	glad_glVertexStream3svATI = (PFNGLVERTEXSTREAM3SVATIPROC)load("glVertexStream3svATI");
+	glad_glVertexStream3iATI = (PFNGLVERTEXSTREAM3IATIPROC)load("glVertexStream3iATI");
+	glad_glVertexStream3ivATI = (PFNGLVERTEXSTREAM3IVATIPROC)load("glVertexStream3ivATI");
+	glad_glVertexStream3fATI = (PFNGLVERTEXSTREAM3FATIPROC)load("glVertexStream3fATI");
+	glad_glVertexStream3fvATI = (PFNGLVERTEXSTREAM3FVATIPROC)load("glVertexStream3fvATI");
+	glad_glVertexStream3dATI = (PFNGLVERTEXSTREAM3DATIPROC)load("glVertexStream3dATI");
+	glad_glVertexStream3dvATI = (PFNGLVERTEXSTREAM3DVATIPROC)load("glVertexStream3dvATI");
+	glad_glVertexStream4sATI = (PFNGLVERTEXSTREAM4SATIPROC)load("glVertexStream4sATI");
+	glad_glVertexStream4svATI = (PFNGLVERTEXSTREAM4SVATIPROC)load("glVertexStream4svATI");
+	glad_glVertexStream4iATI = (PFNGLVERTEXSTREAM4IATIPROC)load("glVertexStream4iATI");
+	glad_glVertexStream4ivATI = (PFNGLVERTEXSTREAM4IVATIPROC)load("glVertexStream4ivATI");
+	glad_glVertexStream4fATI = (PFNGLVERTEXSTREAM4FATIPROC)load("glVertexStream4fATI");
+	glad_glVertexStream4fvATI = (PFNGLVERTEXSTREAM4FVATIPROC)load("glVertexStream4fvATI");
+	glad_glVertexStream4dATI = (PFNGLVERTEXSTREAM4DATIPROC)load("glVertexStream4dATI");
+	glad_glVertexStream4dvATI = (PFNGLVERTEXSTREAM4DVATIPROC)load("glVertexStream4dvATI");
+	glad_glNormalStream3bATI = (PFNGLNORMALSTREAM3BATIPROC)load("glNormalStream3bATI");
+	glad_glNormalStream3bvATI = (PFNGLNORMALSTREAM3BVATIPROC)load("glNormalStream3bvATI");
+	glad_glNormalStream3sATI = (PFNGLNORMALSTREAM3SATIPROC)load("glNormalStream3sATI");
+	glad_glNormalStream3svATI = (PFNGLNORMALSTREAM3SVATIPROC)load("glNormalStream3svATI");
+	glad_glNormalStream3iATI = (PFNGLNORMALSTREAM3IATIPROC)load("glNormalStream3iATI");
+	glad_glNormalStream3ivATI = (PFNGLNORMALSTREAM3IVATIPROC)load("glNormalStream3ivATI");
+	glad_glNormalStream3fATI = (PFNGLNORMALSTREAM3FATIPROC)load("glNormalStream3fATI");
+	glad_glNormalStream3fvATI = (PFNGLNORMALSTREAM3FVATIPROC)load("glNormalStream3fvATI");
+	glad_glNormalStream3dATI = (PFNGLNORMALSTREAM3DATIPROC)load("glNormalStream3dATI");
+	glad_glNormalStream3dvATI = (PFNGLNORMALSTREAM3DVATIPROC)load("glNormalStream3dvATI");
+	glad_glClientActiveVertexStreamATI = (PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC)load("glClientActiveVertexStreamATI");
+	glad_glVertexBlendEnviATI = (PFNGLVERTEXBLENDENVIATIPROC)load("glVertexBlendEnviATI");
+	glad_glVertexBlendEnvfATI = (PFNGLVERTEXBLENDENVFATIPROC)load("glVertexBlendEnvfATI");
+}
+static void load_GL_ARB_gpu_shader_int64(GLADloadproc load) {
+	if(!GLAD_GL_ARB_gpu_shader_int64) return;
+	glad_glUniform1i64ARB = (PFNGLUNIFORM1I64ARBPROC)load("glUniform1i64ARB");
+	glad_glUniform2i64ARB = (PFNGLUNIFORM2I64ARBPROC)load("glUniform2i64ARB");
+	glad_glUniform3i64ARB = (PFNGLUNIFORM3I64ARBPROC)load("glUniform3i64ARB");
+	glad_glUniform4i64ARB = (PFNGLUNIFORM4I64ARBPROC)load("glUniform4i64ARB");
+	glad_glUniform1i64vARB = (PFNGLUNIFORM1I64VARBPROC)load("glUniform1i64vARB");
+	glad_glUniform2i64vARB = (PFNGLUNIFORM2I64VARBPROC)load("glUniform2i64vARB");
+	glad_glUniform3i64vARB = (PFNGLUNIFORM3I64VARBPROC)load("glUniform3i64vARB");
+	glad_glUniform4i64vARB = (PFNGLUNIFORM4I64VARBPROC)load("glUniform4i64vARB");
+	glad_glUniform1ui64ARB = (PFNGLUNIFORM1UI64ARBPROC)load("glUniform1ui64ARB");
+	glad_glUniform2ui64ARB = (PFNGLUNIFORM2UI64ARBPROC)load("glUniform2ui64ARB");
+	glad_glUniform3ui64ARB = (PFNGLUNIFORM3UI64ARBPROC)load("glUniform3ui64ARB");
+	glad_glUniform4ui64ARB = (PFNGLUNIFORM4UI64ARBPROC)load("glUniform4ui64ARB");
+	glad_glUniform1ui64vARB = (PFNGLUNIFORM1UI64VARBPROC)load("glUniform1ui64vARB");
+	glad_glUniform2ui64vARB = (PFNGLUNIFORM2UI64VARBPROC)load("glUniform2ui64vARB");
+	glad_glUniform3ui64vARB = (PFNGLUNIFORM3UI64VARBPROC)load("glUniform3ui64vARB");
+	glad_glUniform4ui64vARB = (PFNGLUNIFORM4UI64VARBPROC)load("glUniform4ui64vARB");
+	glad_glGetUniformi64vARB = (PFNGLGETUNIFORMI64VARBPROC)load("glGetUniformi64vARB");
+	glad_glGetUniformui64vARB = (PFNGLGETUNIFORMUI64VARBPROC)load("glGetUniformui64vARB");
+	glad_glGetnUniformi64vARB = (PFNGLGETNUNIFORMI64VARBPROC)load("glGetnUniformi64vARB");
+	glad_glGetnUniformui64vARB = (PFNGLGETNUNIFORMUI64VARBPROC)load("glGetnUniformui64vARB");
+	glad_glProgramUniform1i64ARB = (PFNGLPROGRAMUNIFORM1I64ARBPROC)load("glProgramUniform1i64ARB");
+	glad_glProgramUniform2i64ARB = (PFNGLPROGRAMUNIFORM2I64ARBPROC)load("glProgramUniform2i64ARB");
+	glad_glProgramUniform3i64ARB = (PFNGLPROGRAMUNIFORM3I64ARBPROC)load("glProgramUniform3i64ARB");
+	glad_glProgramUniform4i64ARB = (PFNGLPROGRAMUNIFORM4I64ARBPROC)load("glProgramUniform4i64ARB");
+	glad_glProgramUniform1i64vARB = (PFNGLPROGRAMUNIFORM1I64VARBPROC)load("glProgramUniform1i64vARB");
+	glad_glProgramUniform2i64vARB = (PFNGLPROGRAMUNIFORM2I64VARBPROC)load("glProgramUniform2i64vARB");
+	glad_glProgramUniform3i64vARB = (PFNGLPROGRAMUNIFORM3I64VARBPROC)load("glProgramUniform3i64vARB");
+	glad_glProgramUniform4i64vARB = (PFNGLPROGRAMUNIFORM4I64VARBPROC)load("glProgramUniform4i64vARB");
+	glad_glProgramUniform1ui64ARB = (PFNGLPROGRAMUNIFORM1UI64ARBPROC)load("glProgramUniform1ui64ARB");
+	glad_glProgramUniform2ui64ARB = (PFNGLPROGRAMUNIFORM2UI64ARBPROC)load("glProgramUniform2ui64ARB");
+	glad_glProgramUniform3ui64ARB = (PFNGLPROGRAMUNIFORM3UI64ARBPROC)load("glProgramUniform3ui64ARB");
+	glad_glProgramUniform4ui64ARB = (PFNGLPROGRAMUNIFORM4UI64ARBPROC)load("glProgramUniform4ui64ARB");
+	glad_glProgramUniform1ui64vARB = (PFNGLPROGRAMUNIFORM1UI64VARBPROC)load("glProgramUniform1ui64vARB");
+	glad_glProgramUniform2ui64vARB = (PFNGLPROGRAMUNIFORM2UI64VARBPROC)load("glProgramUniform2ui64vARB");
+	glad_glProgramUniform3ui64vARB = (PFNGLPROGRAMUNIFORM3UI64VARBPROC)load("glProgramUniform3ui64vARB");
+	glad_glProgramUniform4ui64vARB = (PFNGLPROGRAMUNIFORM4UI64VARBPROC)load("glProgramUniform4ui64vARB");
+}
+static void load_GL_NV_vdpau_interop(GLADloadproc load) {
+	if(!GLAD_GL_NV_vdpau_interop) return;
+	glad_glVDPAUInitNV = (PFNGLVDPAUINITNVPROC)load("glVDPAUInitNV");
+	glad_glVDPAUFiniNV = (PFNGLVDPAUFININVPROC)load("glVDPAUFiniNV");
+	glad_glVDPAURegisterVideoSurfaceNV = (PFNGLVDPAUREGISTERVIDEOSURFACENVPROC)load("glVDPAURegisterVideoSurfaceNV");
+	glad_glVDPAURegisterOutputSurfaceNV = (PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC)load("glVDPAURegisterOutputSurfaceNV");
+	glad_glVDPAUIsSurfaceNV = (PFNGLVDPAUISSURFACENVPROC)load("glVDPAUIsSurfaceNV");
+	glad_glVDPAUUnregisterSurfaceNV = (PFNGLVDPAUUNREGISTERSURFACENVPROC)load("glVDPAUUnregisterSurfaceNV");
+	glad_glVDPAUGetSurfaceivNV = (PFNGLVDPAUGETSURFACEIVNVPROC)load("glVDPAUGetSurfaceivNV");
+	glad_glVDPAUSurfaceAccessNV = (PFNGLVDPAUSURFACEACCESSNVPROC)load("glVDPAUSurfaceAccessNV");
+	glad_glVDPAUMapSurfacesNV = (PFNGLVDPAUMAPSURFACESNVPROC)load("glVDPAUMapSurfacesNV");
+	glad_glVDPAUUnmapSurfacesNV = (PFNGLVDPAUUNMAPSURFACESNVPROC)load("glVDPAUUnmapSurfacesNV");
+}
+static void load_GL_ARB_internalformat_query2(GLADloadproc load) {
+	if(!GLAD_GL_ARB_internalformat_query2) return;
+	glad_glGetInternalformati64v = (PFNGLGETINTERNALFORMATI64VPROC)load("glGetInternalformati64v");
+}
+static void load_GL_SUN_vertex(GLADloadproc load) {
+	if(!GLAD_GL_SUN_vertex) return;
+	glad_glColor4ubVertex2fSUN = (PFNGLCOLOR4UBVERTEX2FSUNPROC)load("glColor4ubVertex2fSUN");
+	glad_glColor4ubVertex2fvSUN = (PFNGLCOLOR4UBVERTEX2FVSUNPROC)load("glColor4ubVertex2fvSUN");
+	glad_glColor4ubVertex3fSUN = (PFNGLCOLOR4UBVERTEX3FSUNPROC)load("glColor4ubVertex3fSUN");
+	glad_glColor4ubVertex3fvSUN = (PFNGLCOLOR4UBVERTEX3FVSUNPROC)load("glColor4ubVertex3fvSUN");
+	glad_glColor3fVertex3fSUN = (PFNGLCOLOR3FVERTEX3FSUNPROC)load("glColor3fVertex3fSUN");
+	glad_glColor3fVertex3fvSUN = (PFNGLCOLOR3FVERTEX3FVSUNPROC)load("glColor3fVertex3fvSUN");
+	glad_glNormal3fVertex3fSUN = (PFNGLNORMAL3FVERTEX3FSUNPROC)load("glNormal3fVertex3fSUN");
+	glad_glNormal3fVertex3fvSUN = (PFNGLNORMAL3FVERTEX3FVSUNPROC)load("glNormal3fVertex3fvSUN");
+	glad_glColor4fNormal3fVertex3fSUN = (PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC)load("glColor4fNormal3fVertex3fSUN");
+	glad_glColor4fNormal3fVertex3fvSUN = (PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC)load("glColor4fNormal3fVertex3fvSUN");
+	glad_glTexCoord2fVertex3fSUN = (PFNGLTEXCOORD2FVERTEX3FSUNPROC)load("glTexCoord2fVertex3fSUN");
+	glad_glTexCoord2fVertex3fvSUN = (PFNGLTEXCOORD2FVERTEX3FVSUNPROC)load("glTexCoord2fVertex3fvSUN");
+	glad_glTexCoord4fVertex4fSUN = (PFNGLTEXCOORD4FVERTEX4FSUNPROC)load("glTexCoord4fVertex4fSUN");
+	glad_glTexCoord4fVertex4fvSUN = (PFNGLTEXCOORD4FVERTEX4FVSUNPROC)load("glTexCoord4fVertex4fvSUN");
+	glad_glTexCoord2fColor4ubVertex3fSUN = (PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC)load("glTexCoord2fColor4ubVertex3fSUN");
+	glad_glTexCoord2fColor4ubVertex3fvSUN = (PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC)load("glTexCoord2fColor4ubVertex3fvSUN");
+	glad_glTexCoord2fColor3fVertex3fSUN = (PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC)load("glTexCoord2fColor3fVertex3fSUN");
+	glad_glTexCoord2fColor3fVertex3fvSUN = (PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC)load("glTexCoord2fColor3fVertex3fvSUN");
+	glad_glTexCoord2fNormal3fVertex3fSUN = (PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC)load("glTexCoord2fNormal3fVertex3fSUN");
+	glad_glTexCoord2fNormal3fVertex3fvSUN = (PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC)load("glTexCoord2fNormal3fVertex3fvSUN");
+	glad_glTexCoord2fColor4fNormal3fVertex3fSUN = (PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC)load("glTexCoord2fColor4fNormal3fVertex3fSUN");
+	glad_glTexCoord2fColor4fNormal3fVertex3fvSUN = (PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC)load("glTexCoord2fColor4fNormal3fVertex3fvSUN");
+	glad_glTexCoord4fColor4fNormal3fVertex4fSUN = (PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC)load("glTexCoord4fColor4fNormal3fVertex4fSUN");
+	glad_glTexCoord4fColor4fNormal3fVertex4fvSUN = (PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC)load("glTexCoord4fColor4fNormal3fVertex4fvSUN");
+	glad_glReplacementCodeuiVertex3fSUN = (PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC)load("glReplacementCodeuiVertex3fSUN");
+	glad_glReplacementCodeuiVertex3fvSUN = (PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC)load("glReplacementCodeuiVertex3fvSUN");
+	glad_glReplacementCodeuiColor4ubVertex3fSUN = (PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC)load("glReplacementCodeuiColor4ubVertex3fSUN");
+	glad_glReplacementCodeuiColor4ubVertex3fvSUN = (PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC)load("glReplacementCodeuiColor4ubVertex3fvSUN");
+	glad_glReplacementCodeuiColor3fVertex3fSUN = (PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC)load("glReplacementCodeuiColor3fVertex3fSUN");
+	glad_glReplacementCodeuiColor3fVertex3fvSUN = (PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC)load("glReplacementCodeuiColor3fVertex3fvSUN");
+	glad_glReplacementCodeuiNormal3fVertex3fSUN = (PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC)load("glReplacementCodeuiNormal3fVertex3fSUN");
+	glad_glReplacementCodeuiNormal3fVertex3fvSUN = (PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC)load("glReplacementCodeuiNormal3fVertex3fvSUN");
+	glad_glReplacementCodeuiColor4fNormal3fVertex3fSUN = (PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC)load("glReplacementCodeuiColor4fNormal3fVertex3fSUN");
+	glad_glReplacementCodeuiColor4fNormal3fVertex3fvSUN = (PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC)load("glReplacementCodeuiColor4fNormal3fVertex3fvSUN");
+	glad_glReplacementCodeuiTexCoord2fVertex3fSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC)load("glReplacementCodeuiTexCoord2fVertex3fSUN");
+	glad_glReplacementCodeuiTexCoord2fVertex3fvSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC)load("glReplacementCodeuiTexCoord2fVertex3fvSUN");
+	glad_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC)load("glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN");
+	glad_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC)load("glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN");
+	glad_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC)load("glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN");
+	glad_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC)load("glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN");
+}
+static void load_GL_SGIX_igloo_interface(GLADloadproc load) {
+	if(!GLAD_GL_SGIX_igloo_interface) return;
+	glad_glIglooInterfaceSGIX = (PFNGLIGLOOINTERFACESGIXPROC)load("glIglooInterfaceSGIX");
+}
+static void load_GL_ARB_draw_indirect(GLADloadproc load) {
+	if(!GLAD_GL_ARB_draw_indirect) return;
+	glad_glDrawArraysIndirect = (PFNGLDRAWARRAYSINDIRECTPROC)load("glDrawArraysIndirect");
+	glad_glDrawElementsIndirect = (PFNGLDRAWELEMENTSINDIRECTPROC)load("glDrawElementsIndirect");
+}
+static void load_GL_NV_vertex_program4(GLADloadproc load) {
+	if(!GLAD_GL_NV_vertex_program4) return;
+	glad_glVertexAttribI1iEXT = (PFNGLVERTEXATTRIBI1IEXTPROC)load("glVertexAttribI1iEXT");
+	glad_glVertexAttribI2iEXT = (PFNGLVERTEXATTRIBI2IEXTPROC)load("glVertexAttribI2iEXT");
+	glad_glVertexAttribI3iEXT = (PFNGLVERTEXATTRIBI3IEXTPROC)load("glVertexAttribI3iEXT");
+	glad_glVertexAttribI4iEXT = (PFNGLVERTEXATTRIBI4IEXTPROC)load("glVertexAttribI4iEXT");
+	glad_glVertexAttribI1uiEXT = (PFNGLVERTEXATTRIBI1UIEXTPROC)load("glVertexAttribI1uiEXT");
+	glad_glVertexAttribI2uiEXT = (PFNGLVERTEXATTRIBI2UIEXTPROC)load("glVertexAttribI2uiEXT");
+	glad_glVertexAttribI3uiEXT = (PFNGLVERTEXATTRIBI3UIEXTPROC)load("glVertexAttribI3uiEXT");
+	glad_glVertexAttribI4uiEXT = (PFNGLVERTEXATTRIBI4UIEXTPROC)load("glVertexAttribI4uiEXT");
+	glad_glVertexAttribI1ivEXT = (PFNGLVERTEXATTRIBI1IVEXTPROC)load("glVertexAttribI1ivEXT");
+	glad_glVertexAttribI2ivEXT = (PFNGLVERTEXATTRIBI2IVEXTPROC)load("glVertexAttribI2ivEXT");
+	glad_glVertexAttribI3ivEXT = (PFNGLVERTEXATTRIBI3IVEXTPROC)load("glVertexAttribI3ivEXT");
+	glad_glVertexAttribI4ivEXT = (PFNGLVERTEXATTRIBI4IVEXTPROC)load("glVertexAttribI4ivEXT");
+	glad_glVertexAttribI1uivEXT = (PFNGLVERTEXATTRIBI1UIVEXTPROC)load("glVertexAttribI1uivEXT");
+	glad_glVertexAttribI2uivEXT = (PFNGLVERTEXATTRIBI2UIVEXTPROC)load("glVertexAttribI2uivEXT");
+	glad_glVertexAttribI3uivEXT = (PFNGLVERTEXATTRIBI3UIVEXTPROC)load("glVertexAttribI3uivEXT");
+	glad_glVertexAttribI4uivEXT = (PFNGLVERTEXATTRIBI4UIVEXTPROC)load("glVertexAttribI4uivEXT");
+	glad_glVertexAttribI4bvEXT = (PFNGLVERTEXATTRIBI4BVEXTPROC)load("glVertexAttribI4bvEXT");
+	glad_glVertexAttribI4svEXT = (PFNGLVERTEXATTRIBI4SVEXTPROC)load("glVertexAttribI4svEXT");
+	glad_glVertexAttribI4ubvEXT = (PFNGLVERTEXATTRIBI4UBVEXTPROC)load("glVertexAttribI4ubvEXT");
+	glad_glVertexAttribI4usvEXT = (PFNGLVERTEXATTRIBI4USVEXTPROC)load("glVertexAttribI4usvEXT");
+	glad_glVertexAttribIPointerEXT = (PFNGLVERTEXATTRIBIPOINTEREXTPROC)load("glVertexAttribIPointerEXT");
+	glad_glGetVertexAttribIivEXT = (PFNGLGETVERTEXATTRIBIIVEXTPROC)load("glGetVertexAttribIivEXT");
+	glad_glGetVertexAttribIuivEXT = (PFNGLGETVERTEXATTRIBIUIVEXTPROC)load("glGetVertexAttribIuivEXT");
+}
+static void load_GL_SGIS_fog_function(GLADloadproc load) {
+	if(!GLAD_GL_SGIS_fog_function) return;
+	glad_glFogFuncSGIS = (PFNGLFOGFUNCSGISPROC)load("glFogFuncSGIS");
+	glad_glGetFogFuncSGIS = (PFNGLGETFOGFUNCSGISPROC)load("glGetFogFuncSGIS");
+}
+static void load_GL_EXT_x11_sync_object(GLADloadproc load) {
+	if(!GLAD_GL_EXT_x11_sync_object) return;
+	glad_glImportSyncEXT = (PFNGLIMPORTSYNCEXTPROC)load("glImportSyncEXT");
+}
+static void load_GL_ARB_sync(GLADloadproc load) {
+	if(!GLAD_GL_ARB_sync) return;
+	glad_glFenceSync = (PFNGLFENCESYNCPROC)load("glFenceSync");
+	glad_glIsSync = (PFNGLISSYNCPROC)load("glIsSync");
+	glad_glDeleteSync = (PFNGLDELETESYNCPROC)load("glDeleteSync");
+	glad_glClientWaitSync = (PFNGLCLIENTWAITSYNCPROC)load("glClientWaitSync");
+	glad_glWaitSync = (PFNGLWAITSYNCPROC)load("glWaitSync");
+	glad_glGetInteger64v = (PFNGLGETINTEGER64VPROC)load("glGetInteger64v");
+	glad_glGetSynciv = (PFNGLGETSYNCIVPROC)load("glGetSynciv");
+}
+static void load_GL_NV_sample_locations(GLADloadproc load) {
+	if(!GLAD_GL_NV_sample_locations) return;
+	glad_glFramebufferSampleLocationsfvNV = (PFNGLFRAMEBUFFERSAMPLELOCATIONSFVNVPROC)load("glFramebufferSampleLocationsfvNV");
+	glad_glNamedFramebufferSampleLocationsfvNV = (PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVNVPROC)load("glNamedFramebufferSampleLocationsfvNV");
+	glad_glResolveDepthValuesNV = (PFNGLRESOLVEDEPTHVALUESNVPROC)load("glResolveDepthValuesNV");
+}
+static void load_GL_ARB_compute_variable_group_size(GLADloadproc load) {
+	if(!GLAD_GL_ARB_compute_variable_group_size) return;
+	glad_glDispatchComputeGroupSizeARB = (PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC)load("glDispatchComputeGroupSizeARB");
+}
+static void load_GL_OES_fixed_point(GLADloadproc load) {
+	if(!GLAD_GL_OES_fixed_point) return;
+	glad_glAlphaFuncxOES = (PFNGLALPHAFUNCXOESPROC)load("glAlphaFuncxOES");
+	glad_glClearColorxOES = (PFNGLCLEARCOLORXOESPROC)load("glClearColorxOES");
+	glad_glClearDepthxOES = (PFNGLCLEARDEPTHXOESPROC)load("glClearDepthxOES");
+	glad_glClipPlanexOES = (PFNGLCLIPPLANEXOESPROC)load("glClipPlanexOES");
+	glad_glColor4xOES = (PFNGLCOLOR4XOESPROC)load("glColor4xOES");
+	glad_glDepthRangexOES = (PFNGLDEPTHRANGEXOESPROC)load("glDepthRangexOES");
+	glad_glFogxOES = (PFNGLFOGXOESPROC)load("glFogxOES");
+	glad_glFogxvOES = (PFNGLFOGXVOESPROC)load("glFogxvOES");
+	glad_glFrustumxOES = (PFNGLFRUSTUMXOESPROC)load("glFrustumxOES");
+	glad_glGetClipPlanexOES = (PFNGLGETCLIPPLANEXOESPROC)load("glGetClipPlanexOES");
+	glad_glGetFixedvOES = (PFNGLGETFIXEDVOESPROC)load("glGetFixedvOES");
+	glad_glGetTexEnvxvOES = (PFNGLGETTEXENVXVOESPROC)load("glGetTexEnvxvOES");
+	glad_glGetTexParameterxvOES = (PFNGLGETTEXPARAMETERXVOESPROC)load("glGetTexParameterxvOES");
+	glad_glLightModelxOES = (PFNGLLIGHTMODELXOESPROC)load("glLightModelxOES");
+	glad_glLightModelxvOES = (PFNGLLIGHTMODELXVOESPROC)load("glLightModelxvOES");
+	glad_glLightxOES = (PFNGLLIGHTXOESPROC)load("glLightxOES");
+	glad_glLightxvOES = (PFNGLLIGHTXVOESPROC)load("glLightxvOES");
+	glad_glLineWidthxOES = (PFNGLLINEWIDTHXOESPROC)load("glLineWidthxOES");
+	glad_glLoadMatrixxOES = (PFNGLLOADMATRIXXOESPROC)load("glLoadMatrixxOES");
+	glad_glMaterialxOES = (PFNGLMATERIALXOESPROC)load("glMaterialxOES");
+	glad_glMaterialxvOES = (PFNGLMATERIALXVOESPROC)load("glMaterialxvOES");
+	glad_glMultMatrixxOES = (PFNGLMULTMATRIXXOESPROC)load("glMultMatrixxOES");
+	glad_glMultiTexCoord4xOES = (PFNGLMULTITEXCOORD4XOESPROC)load("glMultiTexCoord4xOES");
+	glad_glNormal3xOES = (PFNGLNORMAL3XOESPROC)load("glNormal3xOES");
+	glad_glOrthoxOES = (PFNGLORTHOXOESPROC)load("glOrthoxOES");
+	glad_glPointParameterxvOES = (PFNGLPOINTPARAMETERXVOESPROC)load("glPointParameterxvOES");
+	glad_glPointSizexOES = (PFNGLPOINTSIZEXOESPROC)load("glPointSizexOES");
+	glad_glPolygonOffsetxOES = (PFNGLPOLYGONOFFSETXOESPROC)load("glPolygonOffsetxOES");
+	glad_glRotatexOES = (PFNGLROTATEXOESPROC)load("glRotatexOES");
+	glad_glScalexOES = (PFNGLSCALEXOESPROC)load("glScalexOES");
+	glad_glTexEnvxOES = (PFNGLTEXENVXOESPROC)load("glTexEnvxOES");
+	glad_glTexEnvxvOES = (PFNGLTEXENVXVOESPROC)load("glTexEnvxvOES");
+	glad_glTexParameterxOES = (PFNGLTEXPARAMETERXOESPROC)load("glTexParameterxOES");
+	glad_glTexParameterxvOES = (PFNGLTEXPARAMETERXVOESPROC)load("glTexParameterxvOES");
+	glad_glTranslatexOES = (PFNGLTRANSLATEXOESPROC)load("glTranslatexOES");
+	glad_glGetLightxvOES = (PFNGLGETLIGHTXVOESPROC)load("glGetLightxvOES");
+	glad_glGetMaterialxvOES = (PFNGLGETMATERIALXVOESPROC)load("glGetMaterialxvOES");
+	glad_glPointParameterxOES = (PFNGLPOINTPARAMETERXOESPROC)load("glPointParameterxOES");
+	glad_glSampleCoveragexOES = (PFNGLSAMPLECOVERAGEXOESPROC)load("glSampleCoveragexOES");
+	glad_glAccumxOES = (PFNGLACCUMXOESPROC)load("glAccumxOES");
+	glad_glBitmapxOES = (PFNGLBITMAPXOESPROC)load("glBitmapxOES");
+	glad_glBlendColorxOES = (PFNGLBLENDCOLORXOESPROC)load("glBlendColorxOES");
+	glad_glClearAccumxOES = (PFNGLCLEARACCUMXOESPROC)load("glClearAccumxOES");
+	glad_glColor3xOES = (PFNGLCOLOR3XOESPROC)load("glColor3xOES");
+	glad_glColor3xvOES = (PFNGLCOLOR3XVOESPROC)load("glColor3xvOES");
+	glad_glColor4xvOES = (PFNGLCOLOR4XVOESPROC)load("glColor4xvOES");
+	glad_glConvolutionParameterxOES = (PFNGLCONVOLUTIONPARAMETERXOESPROC)load("glConvolutionParameterxOES");
+	glad_glConvolutionParameterxvOES = (PFNGLCONVOLUTIONPARAMETERXVOESPROC)load("glConvolutionParameterxvOES");
+	glad_glEvalCoord1xOES = (PFNGLEVALCOORD1XOESPROC)load("glEvalCoord1xOES");
+	glad_glEvalCoord1xvOES = (PFNGLEVALCOORD1XVOESPROC)load("glEvalCoord1xvOES");
+	glad_glEvalCoord2xOES = (PFNGLEVALCOORD2XOESPROC)load("glEvalCoord2xOES");
+	glad_glEvalCoord2xvOES = (PFNGLEVALCOORD2XVOESPROC)load("glEvalCoord2xvOES");
+	glad_glFeedbackBufferxOES = (PFNGLFEEDBACKBUFFERXOESPROC)load("glFeedbackBufferxOES");
+	glad_glGetConvolutionParameterxvOES = (PFNGLGETCONVOLUTIONPARAMETERXVOESPROC)load("glGetConvolutionParameterxvOES");
+	glad_glGetHistogramParameterxvOES = (PFNGLGETHISTOGRAMPARAMETERXVOESPROC)load("glGetHistogramParameterxvOES");
+	glad_glGetLightxOES = (PFNGLGETLIGHTXOESPROC)load("glGetLightxOES");
+	glad_glGetMapxvOES = (PFNGLGETMAPXVOESPROC)load("glGetMapxvOES");
+	glad_glGetMaterialxOES = (PFNGLGETMATERIALXOESPROC)load("glGetMaterialxOES");
+	glad_glGetPixelMapxv = (PFNGLGETPIXELMAPXVPROC)load("glGetPixelMapxv");
+	glad_glGetTexGenxvOES = (PFNGLGETTEXGENXVOESPROC)load("glGetTexGenxvOES");
+	glad_glGetTexLevelParameterxvOES = (PFNGLGETTEXLEVELPARAMETERXVOESPROC)load("glGetTexLevelParameterxvOES");
+	glad_glIndexxOES = (PFNGLINDEXXOESPROC)load("glIndexxOES");
+	glad_glIndexxvOES = (PFNGLINDEXXVOESPROC)load("glIndexxvOES");
+	glad_glLoadTransposeMatrixxOES = (PFNGLLOADTRANSPOSEMATRIXXOESPROC)load("glLoadTransposeMatrixxOES");
+	glad_glMap1xOES = (PFNGLMAP1XOESPROC)load("glMap1xOES");
+	glad_glMap2xOES = (PFNGLMAP2XOESPROC)load("glMap2xOES");
+	glad_glMapGrid1xOES = (PFNGLMAPGRID1XOESPROC)load("glMapGrid1xOES");
+	glad_glMapGrid2xOES = (PFNGLMAPGRID2XOESPROC)load("glMapGrid2xOES");
+	glad_glMultTransposeMatrixxOES = (PFNGLMULTTRANSPOSEMATRIXXOESPROC)load("glMultTransposeMatrixxOES");
+	glad_glMultiTexCoord1xOES = (PFNGLMULTITEXCOORD1XOESPROC)load("glMultiTexCoord1xOES");
+	glad_glMultiTexCoord1xvOES = (PFNGLMULTITEXCOORD1XVOESPROC)load("glMultiTexCoord1xvOES");
+	glad_glMultiTexCoord2xOES = (PFNGLMULTITEXCOORD2XOESPROC)load("glMultiTexCoord2xOES");
+	glad_glMultiTexCoord2xvOES = (PFNGLMULTITEXCOORD2XVOESPROC)load("glMultiTexCoord2xvOES");
+	glad_glMultiTexCoord3xOES = (PFNGLMULTITEXCOORD3XOESPROC)load("glMultiTexCoord3xOES");
+	glad_glMultiTexCoord3xvOES = (PFNGLMULTITEXCOORD3XVOESPROC)load("glMultiTexCoord3xvOES");
+	glad_glMultiTexCoord4xvOES = (PFNGLMULTITEXCOORD4XVOESPROC)load("glMultiTexCoord4xvOES");
+	glad_glNormal3xvOES = (PFNGLNORMAL3XVOESPROC)load("glNormal3xvOES");
+	glad_glPassThroughxOES = (PFNGLPASSTHROUGHXOESPROC)load("glPassThroughxOES");
+	glad_glPixelMapx = (PFNGLPIXELMAPXPROC)load("glPixelMapx");
+	glad_glPixelStorex = (PFNGLPIXELSTOREXPROC)load("glPixelStorex");
+	glad_glPixelTransferxOES = (PFNGLPIXELTRANSFERXOESPROC)load("glPixelTransferxOES");
+	glad_glPixelZoomxOES = (PFNGLPIXELZOOMXOESPROC)load("glPixelZoomxOES");
+	glad_glPrioritizeTexturesxOES = (PFNGLPRIORITIZETEXTURESXOESPROC)load("glPrioritizeTexturesxOES");
+	glad_glRasterPos2xOES = (PFNGLRASTERPOS2XOESPROC)load("glRasterPos2xOES");
+	glad_glRasterPos2xvOES = (PFNGLRASTERPOS2XVOESPROC)load("glRasterPos2xvOES");
+	glad_glRasterPos3xOES = (PFNGLRASTERPOS3XOESPROC)load("glRasterPos3xOES");
+	glad_glRasterPos3xvOES = (PFNGLRASTERPOS3XVOESPROC)load("glRasterPos3xvOES");
+	glad_glRasterPos4xOES = (PFNGLRASTERPOS4XOESPROC)load("glRasterPos4xOES");
+	glad_glRasterPos4xvOES = (PFNGLRASTERPOS4XVOESPROC)load("glRasterPos4xvOES");
+	glad_glRectxOES = (PFNGLRECTXOESPROC)load("glRectxOES");
+	glad_glRectxvOES = (PFNGLRECTXVOESPROC)load("glRectxvOES");
+	glad_glTexCoord1xOES = (PFNGLTEXCOORD1XOESPROC)load("glTexCoord1xOES");
+	glad_glTexCoord1xvOES = (PFNGLTEXCOORD1XVOESPROC)load("glTexCoord1xvOES");
+	glad_glTexCoord2xOES = (PFNGLTEXCOORD2XOESPROC)load("glTexCoord2xOES");
+	glad_glTexCoord2xvOES = (PFNGLTEXCOORD2XVOESPROC)load("glTexCoord2xvOES");
+	glad_glTexCoord3xOES = (PFNGLTEXCOORD3XOESPROC)load("glTexCoord3xOES");
+	glad_glTexCoord3xvOES = (PFNGLTEXCOORD3XVOESPROC)load("glTexCoord3xvOES");
+	glad_glTexCoord4xOES = (PFNGLTEXCOORD4XOESPROC)load("glTexCoord4xOES");
+	glad_glTexCoord4xvOES = (PFNGLTEXCOORD4XVOESPROC)load("glTexCoord4xvOES");
+	glad_glTexGenxOES = (PFNGLTEXGENXOESPROC)load("glTexGenxOES");
+	glad_glTexGenxvOES = (PFNGLTEXGENXVOESPROC)load("glTexGenxvOES");
+	glad_glVertex2xOES = (PFNGLVERTEX2XOESPROC)load("glVertex2xOES");
+	glad_glVertex2xvOES = (PFNGLVERTEX2XVOESPROC)load("glVertex2xvOES");
+	glad_glVertex3xOES = (PFNGLVERTEX3XOESPROC)load("glVertex3xOES");
+	glad_glVertex3xvOES = (PFNGLVERTEX3XVOESPROC)load("glVertex3xvOES");
+	glad_glVertex4xOES = (PFNGLVERTEX4XOESPROC)load("glVertex4xOES");
+	glad_glVertex4xvOES = (PFNGLVERTEX4XVOESPROC)load("glVertex4xvOES");
+}
+static void load_GL_EXT_framebuffer_multisample(GLADloadproc load) {
+	if(!GLAD_GL_EXT_framebuffer_multisample) return;
+	glad_glRenderbufferStorageMultisampleEXT = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC)load("glRenderbufferStorageMultisampleEXT");
+}
+static void load_GL_SGIS_texture4D(GLADloadproc load) {
+	if(!GLAD_GL_SGIS_texture4D) return;
+	glad_glTexImage4DSGIS = (PFNGLTEXIMAGE4DSGISPROC)load("glTexImage4DSGIS");
+	glad_glTexSubImage4DSGIS = (PFNGLTEXSUBIMAGE4DSGISPROC)load("glTexSubImage4DSGIS");
+}
+static void load_GL_EXT_texture3D(GLADloadproc load) {
+	if(!GLAD_GL_EXT_texture3D) return;
+	glad_glTexImage3DEXT = (PFNGLTEXIMAGE3DEXTPROC)load("glTexImage3DEXT");
+	glad_glTexSubImage3DEXT = (PFNGLTEXSUBIMAGE3DEXTPROC)load("glTexSubImage3DEXT");
+}
+static void load_GL_EXT_multisample(GLADloadproc load) {
+	if(!GLAD_GL_EXT_multisample) return;
+	glad_glSampleMaskEXT = (PFNGLSAMPLEMASKEXTPROC)load("glSampleMaskEXT");
+	glad_glSamplePatternEXT = (PFNGLSAMPLEPATTERNEXTPROC)load("glSamplePatternEXT");
+}
+static void load_GL_EXT_secondary_color(GLADloadproc load) {
+	if(!GLAD_GL_EXT_secondary_color) return;
+	glad_glSecondaryColor3bEXT = (PFNGLSECONDARYCOLOR3BEXTPROC)load("glSecondaryColor3bEXT");
+	glad_glSecondaryColor3bvEXT = (PFNGLSECONDARYCOLOR3BVEXTPROC)load("glSecondaryColor3bvEXT");
+	glad_glSecondaryColor3dEXT = (PFNGLSECONDARYCOLOR3DEXTPROC)load("glSecondaryColor3dEXT");
+	glad_glSecondaryColor3dvEXT = (PFNGLSECONDARYCOLOR3DVEXTPROC)load("glSecondaryColor3dvEXT");
+	glad_glSecondaryColor3fEXT = (PFNGLSECONDARYCOLOR3FEXTPROC)load("glSecondaryColor3fEXT");
+	glad_glSecondaryColor3fvEXT = (PFNGLSECONDARYCOLOR3FVEXTPROC)load("glSecondaryColor3fvEXT");
+	glad_glSecondaryColor3iEXT = (PFNGLSECONDARYCOLOR3IEXTPROC)load("glSecondaryColor3iEXT");
+	glad_glSecondaryColor3ivEXT = (PFNGLSECONDARYCOLOR3IVEXTPROC)load("glSecondaryColor3ivEXT");
+	glad_glSecondaryColor3sEXT = (PFNGLSECONDARYCOLOR3SEXTPROC)load("glSecondaryColor3sEXT");
+	glad_glSecondaryColor3svEXT = (PFNGLSECONDARYCOLOR3SVEXTPROC)load("glSecondaryColor3svEXT");
+	glad_glSecondaryColor3ubEXT = (PFNGLSECONDARYCOLOR3UBEXTPROC)load("glSecondaryColor3ubEXT");
+	glad_glSecondaryColor3ubvEXT = (PFNGLSECONDARYCOLOR3UBVEXTPROC)load("glSecondaryColor3ubvEXT");
+	glad_glSecondaryColor3uiEXT = (PFNGLSECONDARYCOLOR3UIEXTPROC)load("glSecondaryColor3uiEXT");
+	glad_glSecondaryColor3uivEXT = (PFNGLSECONDARYCOLOR3UIVEXTPROC)load("glSecondaryColor3uivEXT");
+	glad_glSecondaryColor3usEXT = (PFNGLSECONDARYCOLOR3USEXTPROC)load("glSecondaryColor3usEXT");
+	glad_glSecondaryColor3usvEXT = (PFNGLSECONDARYCOLOR3USVEXTPROC)load("glSecondaryColor3usvEXT");
+	glad_glSecondaryColorPointerEXT = (PFNGLSECONDARYCOLORPOINTEREXTPROC)load("glSecondaryColorPointerEXT");
+}
+static void load_GL_ATI_vertex_array_object(GLADloadproc load) {
+	if(!GLAD_GL_ATI_vertex_array_object) return;
+	glad_glNewObjectBufferATI = (PFNGLNEWOBJECTBUFFERATIPROC)load("glNewObjectBufferATI");
+	glad_glIsObjectBufferATI = (PFNGLISOBJECTBUFFERATIPROC)load("glIsObjectBufferATI");
+	glad_glUpdateObjectBufferATI = (PFNGLUPDATEOBJECTBUFFERATIPROC)load("glUpdateObjectBufferATI");
+	glad_glGetObjectBufferfvATI = (PFNGLGETOBJECTBUFFERFVATIPROC)load("glGetObjectBufferfvATI");
+	glad_glGetObjectBufferivATI = (PFNGLGETOBJECTBUFFERIVATIPROC)load("glGetObjectBufferivATI");
+	glad_glFreeObjectBufferATI = (PFNGLFREEOBJECTBUFFERATIPROC)load("glFreeObjectBufferATI");
+	glad_glArrayObjectATI = (PFNGLARRAYOBJECTATIPROC)load("glArrayObjectATI");
+	glad_glGetArrayObjectfvATI = (PFNGLGETARRAYOBJECTFVATIPROC)load("glGetArrayObjectfvATI");
+	glad_glGetArrayObjectivATI = (PFNGLGETARRAYOBJECTIVATIPROC)load("glGetArrayObjectivATI");
+	glad_glVariantArrayObjectATI = (PFNGLVARIANTARRAYOBJECTATIPROC)load("glVariantArrayObjectATI");
+	glad_glGetVariantArrayObjectfvATI = (PFNGLGETVARIANTARRAYOBJECTFVATIPROC)load("glGetVariantArrayObjectfvATI");
+	glad_glGetVariantArrayObjectivATI = (PFNGLGETVARIANTARRAYOBJECTIVATIPROC)load("glGetVariantArrayObjectivATI");
+}
+static void load_GL_ARB_parallel_shader_compile(GLADloadproc load) {
+	if(!GLAD_GL_ARB_parallel_shader_compile) return;
+	glad_glMaxShaderCompilerThreadsARB = (PFNGLMAXSHADERCOMPILERTHREADSARBPROC)load("glMaxShaderCompilerThreadsARB");
+}
+static void load_GL_ARB_sparse_texture(GLADloadproc load) {
+	if(!GLAD_GL_ARB_sparse_texture) return;
+	glad_glTexPageCommitmentARB = (PFNGLTEXPAGECOMMITMENTARBPROC)load("glTexPageCommitmentARB");
+}
+static void load_GL_ARB_sample_locations(GLADloadproc load) {
+	if(!GLAD_GL_ARB_sample_locations) return;
+	glad_glFramebufferSampleLocationsfvARB = (PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC)load("glFramebufferSampleLocationsfvARB");
+	glad_glNamedFramebufferSampleLocationsfvARB = (PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVARBPROC)load("glNamedFramebufferSampleLocationsfvARB");
+	glad_glEvaluateDepthValuesARB = (PFNGLEVALUATEDEPTHVALUESARBPROC)load("glEvaluateDepthValuesARB");
+}
+static void load_GL_ARB_sparse_buffer(GLADloadproc load) {
+	if(!GLAD_GL_ARB_sparse_buffer) return;
+	glad_glBufferPageCommitmentARB = (PFNGLBUFFERPAGECOMMITMENTARBPROC)load("glBufferPageCommitmentARB");
+	glad_glNamedBufferPageCommitmentEXT = (PFNGLNAMEDBUFFERPAGECOMMITMENTEXTPROC)load("glNamedBufferPageCommitmentEXT");
+	glad_glNamedBufferPageCommitmentARB = (PFNGLNAMEDBUFFERPAGECOMMITMENTARBPROC)load("glNamedBufferPageCommitmentARB");
+}
+static void load_GL_EXT_draw_range_elements(GLADloadproc load) {
+	if(!GLAD_GL_EXT_draw_range_elements) return;
+	glad_glDrawRangeElementsEXT = (PFNGLDRAWRANGEELEMENTSEXTPROC)load("glDrawRangeElementsEXT");
+}
+static int find_extensionsGL(void) {
+	if (!get_exts()) return 0;
+	GLAD_GL_SGIX_pixel_tiles = has_ext("GL_SGIX_pixel_tiles");
+	GLAD_GL_EXT_post_depth_coverage = has_ext("GL_EXT_post_depth_coverage");
+	GLAD_GL_APPLE_element_array = has_ext("GL_APPLE_element_array");
+	GLAD_GL_AMD_multi_draw_indirect = has_ext("GL_AMD_multi_draw_indirect");
+	GLAD_GL_EXT_blend_subtract = has_ext("GL_EXT_blend_subtract");
+	GLAD_GL_SGIX_tag_sample_buffer = has_ext("GL_SGIX_tag_sample_buffer");
+	GLAD_GL_NV_point_sprite = has_ext("GL_NV_point_sprite");
+	GLAD_GL_IBM_texture_mirrored_repeat = has_ext("GL_IBM_texture_mirrored_repeat");
+	GLAD_GL_APPLE_transform_hint = has_ext("GL_APPLE_transform_hint");
+	GLAD_GL_ATI_separate_stencil = has_ext("GL_ATI_separate_stencil");
+	GLAD_GL_NV_shader_atomic_int64 = has_ext("GL_NV_shader_atomic_int64");
+	GLAD_GL_NV_vertex_program2_option = has_ext("GL_NV_vertex_program2_option");
+	GLAD_GL_EXT_texture_buffer_object = has_ext("GL_EXT_texture_buffer_object");
+	GLAD_GL_ARB_vertex_blend = has_ext("GL_ARB_vertex_blend");
+	GLAD_GL_OVR_multiview = has_ext("GL_OVR_multiview");
+	GLAD_GL_NV_vertex_program2 = has_ext("GL_NV_vertex_program2");
+	GLAD_GL_ARB_program_interface_query = has_ext("GL_ARB_program_interface_query");
+	GLAD_GL_EXT_misc_attribute = has_ext("GL_EXT_misc_attribute");
+	GLAD_GL_NV_multisample_coverage = has_ext("GL_NV_multisample_coverage");
+	GLAD_GL_ARB_shading_language_packing = has_ext("GL_ARB_shading_language_packing");
+	GLAD_GL_EXT_texture_cube_map = has_ext("GL_EXT_texture_cube_map");
+	GLAD_GL_NV_viewport_array2 = has_ext("GL_NV_viewport_array2");
+	GLAD_GL_ARB_texture_stencil8 = has_ext("GL_ARB_texture_stencil8");
+	GLAD_GL_EXT_index_func = has_ext("GL_EXT_index_func");
+	GLAD_GL_OES_compressed_paletted_texture = has_ext("GL_OES_compressed_paletted_texture");
+	GLAD_GL_NV_depth_clamp = has_ext("GL_NV_depth_clamp");
+	GLAD_GL_NV_shader_buffer_load = has_ext("GL_NV_shader_buffer_load");
+	GLAD_GL_EXT_color_subtable = has_ext("GL_EXT_color_subtable");
+	GLAD_GL_SUNX_constant_data = has_ext("GL_SUNX_constant_data");
+	GLAD_GL_EXT_texture_compression_s3tc = has_ext("GL_EXT_texture_compression_s3tc");
+	GLAD_GL_EXT_multi_draw_arrays = has_ext("GL_EXT_multi_draw_arrays");
+	GLAD_GL_ARB_shader_atomic_counters = has_ext("GL_ARB_shader_atomic_counters");
+	GLAD_GL_ARB_arrays_of_arrays = has_ext("GL_ARB_arrays_of_arrays");
+	GLAD_GL_NV_conditional_render = has_ext("GL_NV_conditional_render");
+	GLAD_GL_EXT_texture_env_combine = has_ext("GL_EXT_texture_env_combine");
+	GLAD_GL_NV_fog_distance = has_ext("GL_NV_fog_distance");
+	GLAD_GL_SGIX_async_histogram = has_ext("GL_SGIX_async_histogram");
+	GLAD_GL_MESA_resize_buffers = has_ext("GL_MESA_resize_buffers");
+	GLAD_GL_NV_light_max_exponent = has_ext("GL_NV_light_max_exponent");
+	GLAD_GL_NV_texture_env_combine4 = has_ext("GL_NV_texture_env_combine4");
+	GLAD_GL_ARB_texture_view = has_ext("GL_ARB_texture_view");
+	GLAD_GL_ARB_texture_env_combine = has_ext("GL_ARB_texture_env_combine");
+	GLAD_GL_ARB_map_buffer_range = has_ext("GL_ARB_map_buffer_range");
+	GLAD_GL_EXT_convolution = has_ext("GL_EXT_convolution");
+	GLAD_GL_NV_compute_program5 = has_ext("GL_NV_compute_program5");
+	GLAD_GL_NV_vertex_attrib_integer_64bit = has_ext("GL_NV_vertex_attrib_integer_64bit");
+	GLAD_GL_EXT_paletted_texture = has_ext("GL_EXT_paletted_texture");
+	GLAD_GL_ARB_texture_buffer_object = has_ext("GL_ARB_texture_buffer_object");
+	GLAD_GL_ATI_pn_triangles = has_ext("GL_ATI_pn_triangles");
+	GLAD_GL_SGIX_resample = has_ext("GL_SGIX_resample");
+	GLAD_GL_SGIX_flush_raster = has_ext("GL_SGIX_flush_raster");
+	GLAD_GL_EXT_light_texture = has_ext("GL_EXT_light_texture");
+	GLAD_GL_ARB_point_sprite = has_ext("GL_ARB_point_sprite");
+	GLAD_GL_SUN_convolution_border_modes = has_ext("GL_SUN_convolution_border_modes");
+	GLAD_GL_NV_parameter_buffer_object2 = has_ext("GL_NV_parameter_buffer_object2");
+	GLAD_GL_ARB_half_float_pixel = has_ext("GL_ARB_half_float_pixel");
+	GLAD_GL_NV_tessellation_program5 = has_ext("GL_NV_tessellation_program5");
+	GLAD_GL_REND_screen_coordinates = has_ext("GL_REND_screen_coordinates");
+	GLAD_GL_HP_image_transform = has_ext("GL_HP_image_transform");
+	GLAD_GL_EXT_packed_float = has_ext("GL_EXT_packed_float");
+	GLAD_GL_OML_subsample = has_ext("GL_OML_subsample");
+	GLAD_GL_SGIX_vertex_preclip = has_ext("GL_SGIX_vertex_preclip");
+	GLAD_GL_SGIX_texture_scale_bias = has_ext("GL_SGIX_texture_scale_bias");
+	GLAD_GL_AMD_draw_buffers_blend = has_ext("GL_AMD_draw_buffers_blend");
+	GLAD_GL_APPLE_texture_range = has_ext("GL_APPLE_texture_range");
+	GLAD_GL_EXT_texture_array = has_ext("GL_EXT_texture_array");
+	GLAD_GL_NV_texture_barrier = has_ext("GL_NV_texture_barrier");
+	GLAD_GL_ARB_texture_query_levels = has_ext("GL_ARB_texture_query_levels");
+	GLAD_GL_NV_texgen_emboss = has_ext("GL_NV_texgen_emboss");
+	GLAD_GL_EXT_texture_swizzle = has_ext("GL_EXT_texture_swizzle");
+	GLAD_GL_ARB_texture_rg = has_ext("GL_ARB_texture_rg");
+	GLAD_GL_ARB_vertex_type_2_10_10_10_rev = has_ext("GL_ARB_vertex_type_2_10_10_10_rev");
+	GLAD_GL_ARB_fragment_shader = has_ext("GL_ARB_fragment_shader");
+	GLAD_GL_3DFX_tbuffer = has_ext("GL_3DFX_tbuffer");
+	GLAD_GL_GREMEDY_frame_terminator = has_ext("GL_GREMEDY_frame_terminator");
+	GLAD_GL_ARB_blend_func_extended = has_ext("GL_ARB_blend_func_extended");
+	GLAD_GL_EXT_separate_shader_objects = has_ext("GL_EXT_separate_shader_objects");
+	GLAD_GL_NV_texture_multisample = has_ext("GL_NV_texture_multisample");
+	GLAD_GL_ARB_shader_objects = has_ext("GL_ARB_shader_objects");
+	GLAD_GL_ARB_framebuffer_object = has_ext("GL_ARB_framebuffer_object");
+	GLAD_GL_ATI_envmap_bumpmap = has_ext("GL_ATI_envmap_bumpmap");
+	GLAD_GL_ARB_robust_buffer_access_behavior = has_ext("GL_ARB_robust_buffer_access_behavior");
+	GLAD_GL_ARB_shader_stencil_export = has_ext("GL_ARB_shader_stencil_export");
+	GLAD_GL_NV_texture_rectangle = has_ext("GL_NV_texture_rectangle");
+	GLAD_GL_ARB_enhanced_layouts = has_ext("GL_ARB_enhanced_layouts");
+	GLAD_GL_ARB_texture_rectangle = has_ext("GL_ARB_texture_rectangle");
+	GLAD_GL_SGI_texture_color_table = has_ext("GL_SGI_texture_color_table");
+	GLAD_GL_ATI_map_object_buffer = has_ext("GL_ATI_map_object_buffer");
+	GLAD_GL_ARB_robustness = has_ext("GL_ARB_robustness");
+	GLAD_GL_NV_pixel_data_range = has_ext("GL_NV_pixel_data_range");
+	GLAD_GL_EXT_framebuffer_blit = has_ext("GL_EXT_framebuffer_blit");
+	GLAD_GL_ARB_gpu_shader_fp64 = has_ext("GL_ARB_gpu_shader_fp64");
+	GLAD_GL_NV_command_list = has_ext("GL_NV_command_list");
+	GLAD_GL_SGIX_depth_texture = has_ext("GL_SGIX_depth_texture");
+	GLAD_GL_EXT_vertex_weighting = has_ext("GL_EXT_vertex_weighting");
+	GLAD_GL_GREMEDY_string_marker = has_ext("GL_GREMEDY_string_marker");
+	GLAD_GL_ARB_texture_compression_bptc = has_ext("GL_ARB_texture_compression_bptc");
+	GLAD_GL_EXT_subtexture = has_ext("GL_EXT_subtexture");
+	GLAD_GL_EXT_pixel_transform_color_table = has_ext("GL_EXT_pixel_transform_color_table");
+	GLAD_GL_EXT_texture_compression_rgtc = has_ext("GL_EXT_texture_compression_rgtc");
+	GLAD_GL_ARB_shader_atomic_counter_ops = has_ext("GL_ARB_shader_atomic_counter_ops");
+	GLAD_GL_SGIX_depth_pass_instrument = has_ext("GL_SGIX_depth_pass_instrument");
+	GLAD_GL_EXT_gpu_program_parameters = has_ext("GL_EXT_gpu_program_parameters");
+	GLAD_GL_NV_evaluators = has_ext("GL_NV_evaluators");
+	GLAD_GL_SGIS_texture_filter4 = has_ext("GL_SGIS_texture_filter4");
+	GLAD_GL_AMD_performance_monitor = has_ext("GL_AMD_performance_monitor");
+	GLAD_GL_NV_geometry_shader4 = has_ext("GL_NV_geometry_shader4");
+	GLAD_GL_EXT_stencil_clear_tag = has_ext("GL_EXT_stencil_clear_tag");
+	GLAD_GL_NV_vertex_program1_1 = has_ext("GL_NV_vertex_program1_1");
+	GLAD_GL_NV_present_video = has_ext("GL_NV_present_video");
+	GLAD_GL_ARB_texture_compression_rgtc = has_ext("GL_ARB_texture_compression_rgtc");
+	GLAD_GL_HP_convolution_border_modes = has_ext("GL_HP_convolution_border_modes");
+	GLAD_GL_EXT_shader_integer_mix = has_ext("GL_EXT_shader_integer_mix");
+	GLAD_GL_SGIX_framezoom = has_ext("GL_SGIX_framezoom");
+	GLAD_GL_ARB_stencil_texturing = has_ext("GL_ARB_stencil_texturing");
+	GLAD_GL_ARB_shader_clock = has_ext("GL_ARB_shader_clock");
+	GLAD_GL_NV_shader_atomic_fp16_vector = has_ext("GL_NV_shader_atomic_fp16_vector");
+	GLAD_GL_SGIX_fog_offset = has_ext("GL_SGIX_fog_offset");
+	GLAD_GL_ARB_draw_elements_base_vertex = has_ext("GL_ARB_draw_elements_base_vertex");
+	GLAD_GL_INGR_interlace_read = has_ext("GL_INGR_interlace_read");
+	GLAD_GL_NV_transform_feedback = has_ext("GL_NV_transform_feedback");
+	GLAD_GL_NV_fragment_program = has_ext("GL_NV_fragment_program");
+	GLAD_GL_AMD_stencil_operation_extended = has_ext("GL_AMD_stencil_operation_extended");
+	GLAD_GL_ARB_seamless_cubemap_per_texture = has_ext("GL_ARB_seamless_cubemap_per_texture");
+	GLAD_GL_ARB_instanced_arrays = has_ext("GL_ARB_instanced_arrays");
+	GLAD_GL_EXT_polygon_offset = has_ext("GL_EXT_polygon_offset");
+	GLAD_GL_NV_vertex_array_range2 = has_ext("GL_NV_vertex_array_range2");
+	GLAD_GL_KHR_robustness = has_ext("GL_KHR_robustness");
+	GLAD_GL_AMD_sparse_texture = has_ext("GL_AMD_sparse_texture");
+	GLAD_GL_ARB_clip_control = has_ext("GL_ARB_clip_control");
+	GLAD_GL_NV_fragment_coverage_to_color = has_ext("GL_NV_fragment_coverage_to_color");
+	GLAD_GL_NV_fence = has_ext("GL_NV_fence");
+	GLAD_GL_ARB_texture_buffer_range = has_ext("GL_ARB_texture_buffer_range");
+	GLAD_GL_SUN_mesh_array = has_ext("GL_SUN_mesh_array");
+	GLAD_GL_ARB_vertex_attrib_binding = has_ext("GL_ARB_vertex_attrib_binding");
+	GLAD_GL_ARB_framebuffer_no_attachments = has_ext("GL_ARB_framebuffer_no_attachments");
+	GLAD_GL_ARB_cl_event = has_ext("GL_ARB_cl_event");
+	GLAD_GL_ARB_derivative_control = has_ext("GL_ARB_derivative_control");
+	GLAD_GL_NV_packed_depth_stencil = has_ext("GL_NV_packed_depth_stencil");
+	GLAD_GL_OES_single_precision = has_ext("GL_OES_single_precision");
+	GLAD_GL_NV_primitive_restart = has_ext("GL_NV_primitive_restart");
+	GLAD_GL_SUN_global_alpha = has_ext("GL_SUN_global_alpha");
+	GLAD_GL_ARB_fragment_shader_interlock = has_ext("GL_ARB_fragment_shader_interlock");
+	GLAD_GL_EXT_texture_object = has_ext("GL_EXT_texture_object");
+	GLAD_GL_AMD_name_gen_delete = has_ext("GL_AMD_name_gen_delete");
+	GLAD_GL_NV_texture_compression_vtc = has_ext("GL_NV_texture_compression_vtc");
+	GLAD_GL_NV_sample_mask_override_coverage = has_ext("GL_NV_sample_mask_override_coverage");
+	GLAD_GL_NV_texture_shader3 = has_ext("GL_NV_texture_shader3");
+	GLAD_GL_NV_texture_shader2 = has_ext("GL_NV_texture_shader2");
+	GLAD_GL_EXT_texture = has_ext("GL_EXT_texture");
+	GLAD_GL_ARB_buffer_storage = has_ext("GL_ARB_buffer_storage");
+	GLAD_GL_AMD_shader_atomic_counter_ops = has_ext("GL_AMD_shader_atomic_counter_ops");
+	GLAD_GL_APPLE_vertex_program_evaluators = has_ext("GL_APPLE_vertex_program_evaluators");
+	GLAD_GL_ARB_multi_bind = has_ext("GL_ARB_multi_bind");
+	GLAD_GL_ARB_explicit_uniform_location = has_ext("GL_ARB_explicit_uniform_location");
+	GLAD_GL_ARB_depth_buffer_float = has_ext("GL_ARB_depth_buffer_float");
+	GLAD_GL_NV_path_rendering_shared_edge = has_ext("GL_NV_path_rendering_shared_edge");
+	GLAD_GL_SGIX_shadow_ambient = has_ext("GL_SGIX_shadow_ambient");
+	GLAD_GL_ARB_texture_cube_map = has_ext("GL_ARB_texture_cube_map");
+	GLAD_GL_AMD_vertex_shader_viewport_index = has_ext("GL_AMD_vertex_shader_viewport_index");
+	GLAD_GL_SGIX_list_priority = has_ext("GL_SGIX_list_priority");
+	GLAD_GL_NV_vertex_buffer_unified_memory = has_ext("GL_NV_vertex_buffer_unified_memory");
+	GLAD_GL_NV_uniform_buffer_unified_memory = has_ext("GL_NV_uniform_buffer_unified_memory");
+	GLAD_GL_EXT_texture_env_dot3 = has_ext("GL_EXT_texture_env_dot3");
+	GLAD_GL_ATI_texture_env_combine3 = has_ext("GL_ATI_texture_env_combine3");
+	GLAD_GL_ARB_map_buffer_alignment = has_ext("GL_ARB_map_buffer_alignment");
+	GLAD_GL_NV_blend_equation_advanced = has_ext("GL_NV_blend_equation_advanced");
+	GLAD_GL_SGIS_sharpen_texture = has_ext("GL_SGIS_sharpen_texture");
+	GLAD_GL_KHR_robust_buffer_access_behavior = has_ext("GL_KHR_robust_buffer_access_behavior");
+	GLAD_GL_ARB_pipeline_statistics_query = has_ext("GL_ARB_pipeline_statistics_query");
+	GLAD_GL_ARB_vertex_program = has_ext("GL_ARB_vertex_program");
+	GLAD_GL_ARB_texture_rgb10_a2ui = has_ext("GL_ARB_texture_rgb10_a2ui");
+	GLAD_GL_OML_interlace = has_ext("GL_OML_interlace");
+	GLAD_GL_ATI_pixel_format_float = has_ext("GL_ATI_pixel_format_float");
+	GLAD_GL_NV_geometry_shader_passthrough = has_ext("GL_NV_geometry_shader_passthrough");
+	GLAD_GL_ARB_vertex_buffer_object = has_ext("GL_ARB_vertex_buffer_object");
+	GLAD_GL_EXT_shadow_funcs = has_ext("GL_EXT_shadow_funcs");
+	GLAD_GL_ATI_text_fragment_shader = has_ext("GL_ATI_text_fragment_shader");
+	GLAD_GL_NV_vertex_array_range = has_ext("GL_NV_vertex_array_range");
+	GLAD_GL_SGIX_fragment_lighting = has_ext("GL_SGIX_fragment_lighting");
+	GLAD_GL_NV_texture_expand_normal = has_ext("GL_NV_texture_expand_normal");
+	GLAD_GL_NV_framebuffer_multisample_coverage = has_ext("GL_NV_framebuffer_multisample_coverage");
+	GLAD_GL_EXT_timer_query = has_ext("GL_EXT_timer_query");
+	GLAD_GL_EXT_vertex_array_bgra = has_ext("GL_EXT_vertex_array_bgra");
+	GLAD_GL_NV_bindless_texture = has_ext("GL_NV_bindless_texture");
+	GLAD_GL_KHR_debug = has_ext("GL_KHR_debug");
+	GLAD_GL_SGIS_texture_border_clamp = has_ext("GL_SGIS_texture_border_clamp");
+	GLAD_GL_ATI_vertex_attrib_array_object = has_ext("GL_ATI_vertex_attrib_array_object");
+	GLAD_GL_SGIX_clipmap = has_ext("GL_SGIX_clipmap");
+	GLAD_GL_EXT_geometry_shader4 = has_ext("GL_EXT_geometry_shader4");
+	GLAD_GL_ARB_shader_texture_image_samples = has_ext("GL_ARB_shader_texture_image_samples");
+	GLAD_GL_MESA_ycbcr_texture = has_ext("GL_MESA_ycbcr_texture");
+	GLAD_GL_MESAX_texture_stack = has_ext("GL_MESAX_texture_stack");
+	GLAD_GL_AMD_seamless_cubemap_per_texture = has_ext("GL_AMD_seamless_cubemap_per_texture");
+	GLAD_GL_EXT_bindable_uniform = has_ext("GL_EXT_bindable_uniform");
+	GLAD_GL_KHR_texture_compression_astc_hdr = has_ext("GL_KHR_texture_compression_astc_hdr");
+	GLAD_GL_ARB_shader_ballot = has_ext("GL_ARB_shader_ballot");
+	GLAD_GL_KHR_blend_equation_advanced = has_ext("GL_KHR_blend_equation_advanced");
+	GLAD_GL_ARB_fragment_program_shadow = has_ext("GL_ARB_fragment_program_shadow");
+	GLAD_GL_ATI_element_array = has_ext("GL_ATI_element_array");
+	GLAD_GL_AMD_texture_texture4 = has_ext("GL_AMD_texture_texture4");
+	GLAD_GL_SGIX_reference_plane = has_ext("GL_SGIX_reference_plane");
+	GLAD_GL_EXT_stencil_two_side = has_ext("GL_EXT_stencil_two_side");
+	GLAD_GL_ARB_transform_feedback_overflow_query = has_ext("GL_ARB_transform_feedback_overflow_query");
+	GLAD_GL_SGIX_texture_lod_bias = has_ext("GL_SGIX_texture_lod_bias");
+	GLAD_GL_KHR_no_error = has_ext("GL_KHR_no_error");
+	GLAD_GL_NV_explicit_multisample = has_ext("GL_NV_explicit_multisample");
+	GLAD_GL_IBM_static_data = has_ext("GL_IBM_static_data");
+	GLAD_GL_EXT_clip_volume_hint = has_ext("GL_EXT_clip_volume_hint");
+	GLAD_GL_EXT_texture_perturb_normal = has_ext("GL_EXT_texture_perturb_normal");
+	GLAD_GL_NV_fragment_program2 = has_ext("GL_NV_fragment_program2");
+	GLAD_GL_NV_fragment_program4 = has_ext("GL_NV_fragment_program4");
+	GLAD_GL_EXT_point_parameters = has_ext("GL_EXT_point_parameters");
+	GLAD_GL_PGI_misc_hints = has_ext("GL_PGI_misc_hints");
+	GLAD_GL_SGIX_subsample = has_ext("GL_SGIX_subsample");
+	GLAD_GL_AMD_shader_stencil_export = has_ext("GL_AMD_shader_stencil_export");
+	GLAD_GL_ARB_shader_texture_lod = has_ext("GL_ARB_shader_texture_lod");
+	GLAD_GL_ARB_vertex_shader = has_ext("GL_ARB_vertex_shader");
+	GLAD_GL_ARB_depth_clamp = has_ext("GL_ARB_depth_clamp");
+	GLAD_GL_SGIS_texture_select = has_ext("GL_SGIS_texture_select");
+	GLAD_GL_NV_texture_shader = has_ext("GL_NV_texture_shader");
+	GLAD_GL_ARB_tessellation_shader = has_ext("GL_ARB_tessellation_shader");
+	GLAD_GL_EXT_draw_buffers2 = has_ext("GL_EXT_draw_buffers2");
+	GLAD_GL_ARB_vertex_attrib_64bit = has_ext("GL_ARB_vertex_attrib_64bit");
+	GLAD_GL_EXT_texture_filter_minmax = has_ext("GL_EXT_texture_filter_minmax");
+	GLAD_GL_WIN_specular_fog = has_ext("GL_WIN_specular_fog");
+	GLAD_GL_AMD_interleaved_elements = has_ext("GL_AMD_interleaved_elements");
+	GLAD_GL_ARB_fragment_program = has_ext("GL_ARB_fragment_program");
+	GLAD_GL_OML_resample = has_ext("GL_OML_resample");
+	GLAD_GL_APPLE_ycbcr_422 = has_ext("GL_APPLE_ycbcr_422");
+	GLAD_GL_SGIX_texture_add_env = has_ext("GL_SGIX_texture_add_env");
+	GLAD_GL_ARB_shadow_ambient = has_ext("GL_ARB_shadow_ambient");
+	GLAD_GL_ARB_texture_storage = has_ext("GL_ARB_texture_storage");
+	GLAD_GL_EXT_pixel_buffer_object = has_ext("GL_EXT_pixel_buffer_object");
+	GLAD_GL_ARB_copy_image = has_ext("GL_ARB_copy_image");
+	GLAD_GL_SGIS_pixel_texture = has_ext("GL_SGIS_pixel_texture");
+	GLAD_GL_SGIS_generate_mipmap = has_ext("GL_SGIS_generate_mipmap");
+	GLAD_GL_SGIX_instruments = has_ext("GL_SGIX_instruments");
+	GLAD_GL_HP_texture_lighting = has_ext("GL_HP_texture_lighting");
+	GLAD_GL_ARB_shader_storage_buffer_object = has_ext("GL_ARB_shader_storage_buffer_object");
+	GLAD_GL_EXT_sparse_texture2 = has_ext("GL_EXT_sparse_texture2");
+	GLAD_GL_EXT_blend_minmax = has_ext("GL_EXT_blend_minmax");
+	GLAD_GL_MESA_pack_invert = has_ext("GL_MESA_pack_invert");
+	GLAD_GL_ARB_base_instance = has_ext("GL_ARB_base_instance");
+	GLAD_GL_SGIX_convolution_accuracy = has_ext("GL_SGIX_convolution_accuracy");
+	GLAD_GL_PGI_vertex_hints = has_ext("GL_PGI_vertex_hints");
+	GLAD_GL_AMD_transform_feedback4 = has_ext("GL_AMD_transform_feedback4");
+	GLAD_GL_ARB_ES3_1_compatibility = has_ext("GL_ARB_ES3_1_compatibility");
+	GLAD_GL_EXT_texture_integer = has_ext("GL_EXT_texture_integer");
+	GLAD_GL_ARB_texture_multisample = has_ext("GL_ARB_texture_multisample");
+	GLAD_GL_AMD_gpu_shader_int64 = has_ext("GL_AMD_gpu_shader_int64");
+	GLAD_GL_S3_s3tc = has_ext("GL_S3_s3tc");
+	GLAD_GL_ARB_query_buffer_object = has_ext("GL_ARB_query_buffer_object");
+	GLAD_GL_AMD_vertex_shader_tessellator = has_ext("GL_AMD_vertex_shader_tessellator");
+	GLAD_GL_ARB_invalidate_subdata = has_ext("GL_ARB_invalidate_subdata");
+	GLAD_GL_EXT_index_material = has_ext("GL_EXT_index_material");
+	GLAD_GL_NV_blend_equation_advanced_coherent = has_ext("GL_NV_blend_equation_advanced_coherent");
+	GLAD_GL_KHR_texture_compression_astc_sliced_3d = has_ext("GL_KHR_texture_compression_astc_sliced_3d");
+	GLAD_GL_INTEL_parallel_arrays = has_ext("GL_INTEL_parallel_arrays");
+	GLAD_GL_ATI_draw_buffers = has_ext("GL_ATI_draw_buffers");
+	GLAD_GL_EXT_cmyka = has_ext("GL_EXT_cmyka");
+	GLAD_GL_SGIX_pixel_texture = has_ext("GL_SGIX_pixel_texture");
+	GLAD_GL_APPLE_specular_vector = has_ext("GL_APPLE_specular_vector");
+	GLAD_GL_ARB_compatibility = has_ext("GL_ARB_compatibility");
+	GLAD_GL_ARB_timer_query = has_ext("GL_ARB_timer_query");
+	GLAD_GL_SGIX_interlace = has_ext("GL_SGIX_interlace");
+	GLAD_GL_NV_parameter_buffer_object = has_ext("GL_NV_parameter_buffer_object");
+	GLAD_GL_AMD_shader_trinary_minmax = has_ext("GL_AMD_shader_trinary_minmax");
+	GLAD_GL_ARB_direct_state_access = has_ext("GL_ARB_direct_state_access");
+	GLAD_GL_EXT_rescale_normal = has_ext("GL_EXT_rescale_normal");
+	GLAD_GL_ARB_pixel_buffer_object = has_ext("GL_ARB_pixel_buffer_object");
+	GLAD_GL_ARB_uniform_buffer_object = has_ext("GL_ARB_uniform_buffer_object");
+	GLAD_GL_ARB_vertex_type_10f_11f_11f_rev = has_ext("GL_ARB_vertex_type_10f_11f_11f_rev");
+	GLAD_GL_ARB_texture_swizzle = has_ext("GL_ARB_texture_swizzle");
+	GLAD_GL_NV_transform_feedback2 = has_ext("GL_NV_transform_feedback2");
+	GLAD_GL_SGIX_async_pixel = has_ext("GL_SGIX_async_pixel");
+	GLAD_GL_NV_fragment_program_option = has_ext("GL_NV_fragment_program_option");
+	GLAD_GL_ARB_explicit_attrib_location = has_ext("GL_ARB_explicit_attrib_location");
+	GLAD_GL_EXT_blend_color = has_ext("GL_EXT_blend_color");
+	GLAD_GL_NV_shader_thread_group = has_ext("GL_NV_shader_thread_group");
+	GLAD_GL_EXT_stencil_wrap = has_ext("GL_EXT_stencil_wrap");
+	GLAD_GL_EXT_index_array_formats = has_ext("GL_EXT_index_array_formats");
+	GLAD_GL_OVR_multiview2 = has_ext("GL_OVR_multiview2");
+	GLAD_GL_EXT_histogram = has_ext("GL_EXT_histogram");
+	GLAD_GL_ARB_get_texture_sub_image = has_ext("GL_ARB_get_texture_sub_image");
+	GLAD_GL_SGIS_point_parameters = has_ext("GL_SGIS_point_parameters");
+	GLAD_GL_SGIX_ycrcb = has_ext("GL_SGIX_ycrcb");
+	GLAD_GL_EXT_direct_state_access = has_ext("GL_EXT_direct_state_access");
+	GLAD_GL_ARB_cull_distance = has_ext("GL_ARB_cull_distance");
+	GLAD_GL_AMD_sample_positions = has_ext("GL_AMD_sample_positions");
+	GLAD_GL_NV_vertex_program = has_ext("GL_NV_vertex_program");
+	GLAD_GL_NV_shader_thread_shuffle = has_ext("GL_NV_shader_thread_shuffle");
+	GLAD_GL_ARB_shader_precision = has_ext("GL_ARB_shader_precision");
+	GLAD_GL_EXT_vertex_shader = has_ext("GL_EXT_vertex_shader");
+	GLAD_GL_EXT_blend_func_separate = has_ext("GL_EXT_blend_func_separate");
+	GLAD_GL_APPLE_fence = has_ext("GL_APPLE_fence");
+	GLAD_GL_OES_byte_coordinates = has_ext("GL_OES_byte_coordinates");
+	GLAD_GL_ARB_transpose_matrix = has_ext("GL_ARB_transpose_matrix");
+	GLAD_GL_ARB_provoking_vertex = has_ext("GL_ARB_provoking_vertex");
+	GLAD_GL_EXT_fog_coord = has_ext("GL_EXT_fog_coord");
+	GLAD_GL_EXT_vertex_array = has_ext("GL_EXT_vertex_array");
+	GLAD_GL_ARB_half_float_vertex = has_ext("GL_ARB_half_float_vertex");
+	GLAD_GL_EXT_blend_equation_separate = has_ext("GL_EXT_blend_equation_separate");
+	GLAD_GL_NV_framebuffer_mixed_samples = has_ext("GL_NV_framebuffer_mixed_samples");
+	GLAD_GL_NVX_conditional_render = has_ext("GL_NVX_conditional_render");
+	GLAD_GL_ARB_multi_draw_indirect = has_ext("GL_ARB_multi_draw_indirect");
+	GLAD_GL_EXT_raster_multisample = has_ext("GL_EXT_raster_multisample");
+	GLAD_GL_NV_copy_image = has_ext("GL_NV_copy_image");
+	GLAD_GL_ARB_fragment_layer_viewport = has_ext("GL_ARB_fragment_layer_viewport");
+	GLAD_GL_INTEL_framebuffer_CMAA = has_ext("GL_INTEL_framebuffer_CMAA");
+	GLAD_GL_ARB_transform_feedback2 = has_ext("GL_ARB_transform_feedback2");
+	GLAD_GL_ARB_transform_feedback3 = has_ext("GL_ARB_transform_feedback3");
+	GLAD_GL_SGIX_ycrcba = has_ext("GL_SGIX_ycrcba");
+	GLAD_GL_EXT_debug_marker = has_ext("GL_EXT_debug_marker");
+	GLAD_GL_EXT_bgra = has_ext("GL_EXT_bgra");
+	GLAD_GL_ARB_sparse_texture_clamp = has_ext("GL_ARB_sparse_texture_clamp");
+	GLAD_GL_EXT_pixel_transform = has_ext("GL_EXT_pixel_transform");
+	GLAD_GL_ARB_conservative_depth = has_ext("GL_ARB_conservative_depth");
+	GLAD_GL_ATI_fragment_shader = has_ext("GL_ATI_fragment_shader");
+	GLAD_GL_ARB_vertex_array_object = has_ext("GL_ARB_vertex_array_object");
+	GLAD_GL_SUN_triangle_list = has_ext("GL_SUN_triangle_list");
+	GLAD_GL_EXT_texture_env_add = has_ext("GL_EXT_texture_env_add");
+	GLAD_GL_EXT_packed_depth_stencil = has_ext("GL_EXT_packed_depth_stencil");
+	GLAD_GL_EXT_texture_mirror_clamp = has_ext("GL_EXT_texture_mirror_clamp");
+	GLAD_GL_NV_multisample_filter_hint = has_ext("GL_NV_multisample_filter_hint");
+	GLAD_GL_APPLE_float_pixels = has_ext("GL_APPLE_float_pixels");
+	GLAD_GL_ARB_transform_feedback_instanced = has_ext("GL_ARB_transform_feedback_instanced");
+	GLAD_GL_SGIX_async = has_ext("GL_SGIX_async");
+	GLAD_GL_EXT_texture_compression_latc = has_ext("GL_EXT_texture_compression_latc");
+	GLAD_GL_NV_shader_atomic_float = has_ext("GL_NV_shader_atomic_float");
+	GLAD_GL_ARB_shading_language_100 = has_ext("GL_ARB_shading_language_100");
+	GLAD_GL_INTEL_performance_query = has_ext("GL_INTEL_performance_query");
+	GLAD_GL_ARB_texture_mirror_clamp_to_edge = has_ext("GL_ARB_texture_mirror_clamp_to_edge");
+	GLAD_GL_NV_gpu_shader5 = has_ext("GL_NV_gpu_shader5");
+	GLAD_GL_NV_bindless_multi_draw_indirect_count = has_ext("GL_NV_bindless_multi_draw_indirect_count");
+	GLAD_GL_ARB_ES2_compatibility = has_ext("GL_ARB_ES2_compatibility");
+	GLAD_GL_ARB_indirect_parameters = has_ext("GL_ARB_indirect_parameters");
+	GLAD_GL_NV_half_float = has_ext("GL_NV_half_float");
+	GLAD_GL_ARB_ES3_2_compatibility = has_ext("GL_ARB_ES3_2_compatibility");
+	GLAD_GL_ATI_texture_mirror_once = has_ext("GL_ATI_texture_mirror_once");
+	GLAD_GL_IBM_rasterpos_clip = has_ext("GL_IBM_rasterpos_clip");
+	GLAD_GL_SGIX_shadow = has_ext("GL_SGIX_shadow");
+	GLAD_GL_EXT_polygon_offset_clamp = has_ext("GL_EXT_polygon_offset_clamp");
+	GLAD_GL_NV_deep_texture3D = has_ext("GL_NV_deep_texture3D");
+	GLAD_GL_ARB_shader_draw_parameters = has_ext("GL_ARB_shader_draw_parameters");
+	GLAD_GL_SGIX_calligraphic_fragment = has_ext("GL_SGIX_calligraphic_fragment");
+	GLAD_GL_ARB_shader_bit_encoding = has_ext("GL_ARB_shader_bit_encoding");
+	GLAD_GL_EXT_compiled_vertex_array = has_ext("GL_EXT_compiled_vertex_array");
+	GLAD_GL_NV_depth_buffer_float = has_ext("GL_NV_depth_buffer_float");
+	GLAD_GL_NV_occlusion_query = has_ext("GL_NV_occlusion_query");
+	GLAD_GL_APPLE_flush_buffer_range = has_ext("GL_APPLE_flush_buffer_range");
+	GLAD_GL_ARB_imaging = has_ext("GL_ARB_imaging");
+	GLAD_GL_ARB_draw_buffers_blend = has_ext("GL_ARB_draw_buffers_blend");
+	GLAD_GL_AMD_gcn_shader = has_ext("GL_AMD_gcn_shader");
+	GLAD_GL_AMD_blend_minmax_factor = has_ext("GL_AMD_blend_minmax_factor");
+	GLAD_GL_EXT_texture_sRGB_decode = has_ext("GL_EXT_texture_sRGB_decode");
+	GLAD_GL_ARB_shading_language_420pack = has_ext("GL_ARB_shading_language_420pack");
+	GLAD_GL_ARB_shader_viewport_layer_array = has_ext("GL_ARB_shader_viewport_layer_array");
+	GLAD_GL_ATI_meminfo = has_ext("GL_ATI_meminfo");
+	GLAD_GL_EXT_abgr = has_ext("GL_EXT_abgr");
+	GLAD_GL_AMD_pinned_memory = has_ext("GL_AMD_pinned_memory");
+	GLAD_GL_EXT_texture_snorm = has_ext("GL_EXT_texture_snorm");
+	GLAD_GL_SGIX_texture_coordinate_clamp = has_ext("GL_SGIX_texture_coordinate_clamp");
+	GLAD_GL_ARB_clear_buffer_object = has_ext("GL_ARB_clear_buffer_object");
+	GLAD_GL_ARB_multisample = has_ext("GL_ARB_multisample");
+	GLAD_GL_EXT_debug_label = has_ext("GL_EXT_debug_label");
+	GLAD_GL_ARB_sample_shading = has_ext("GL_ARB_sample_shading");
+	GLAD_GL_NV_internalformat_sample_query = has_ext("GL_NV_internalformat_sample_query");
+	GLAD_GL_INTEL_map_texture = has_ext("GL_INTEL_map_texture");
+	GLAD_GL_ARB_texture_env_crossbar = has_ext("GL_ARB_texture_env_crossbar");
+	GLAD_GL_EXT_422_pixels = has_ext("GL_EXT_422_pixels");
+	GLAD_GL_ARB_compute_shader = has_ext("GL_ARB_compute_shader");
+	GLAD_GL_EXT_blend_logic_op = has_ext("GL_EXT_blend_logic_op");
+	GLAD_GL_IBM_cull_vertex = has_ext("GL_IBM_cull_vertex");
+	GLAD_GL_IBM_vertex_array_lists = has_ext("GL_IBM_vertex_array_lists");
+	GLAD_GL_ARB_color_buffer_float = has_ext("GL_ARB_color_buffer_float");
+	GLAD_GL_ARB_bindless_texture = has_ext("GL_ARB_bindless_texture");
+	GLAD_GL_ARB_window_pos = has_ext("GL_ARB_window_pos");
+	GLAD_GL_ARB_internalformat_query = has_ext("GL_ARB_internalformat_query");
+	GLAD_GL_ARB_shadow = has_ext("GL_ARB_shadow");
+	GLAD_GL_ARB_texture_mirrored_repeat = has_ext("GL_ARB_texture_mirrored_repeat");
+	GLAD_GL_EXT_shader_image_load_store = has_ext("GL_EXT_shader_image_load_store");
+	GLAD_GL_EXT_copy_texture = has_ext("GL_EXT_copy_texture");
+	GLAD_GL_NV_register_combiners2 = has_ext("GL_NV_register_combiners2");
+	GLAD_GL_SGIX_ycrcb_subsample = has_ext("GL_SGIX_ycrcb_subsample");
+	GLAD_GL_SGIX_ir_instrument1 = has_ext("GL_SGIX_ir_instrument1");
+	GLAD_GL_NV_draw_texture = has_ext("GL_NV_draw_texture");
+	GLAD_GL_EXT_texture_shared_exponent = has_ext("GL_EXT_texture_shared_exponent");
+	GLAD_GL_EXT_draw_instanced = has_ext("GL_EXT_draw_instanced");
+	GLAD_GL_NV_copy_depth_to_color = has_ext("GL_NV_copy_depth_to_color");
+	GLAD_GL_ARB_viewport_array = has_ext("GL_ARB_viewport_array");
+	GLAD_GL_ARB_separate_shader_objects = has_ext("GL_ARB_separate_shader_objects");
+	GLAD_GL_EXT_depth_bounds_test = has_ext("GL_EXT_depth_bounds_test");
+	GLAD_GL_EXT_shared_texture_palette = has_ext("GL_EXT_shared_texture_palette");
+	GLAD_GL_ARB_texture_env_add = has_ext("GL_ARB_texture_env_add");
+	GLAD_GL_NV_video_capture = has_ext("GL_NV_video_capture");
+	GLAD_GL_ARB_sampler_objects = has_ext("GL_ARB_sampler_objects");
+	GLAD_GL_ARB_matrix_palette = has_ext("GL_ARB_matrix_palette");
+	GLAD_GL_SGIS_texture_color_mask = has_ext("GL_SGIS_texture_color_mask");
+	GLAD_GL_EXT_packed_pixels = has_ext("GL_EXT_packed_pixels");
+	GLAD_GL_EXT_coordinate_frame = has_ext("GL_EXT_coordinate_frame");
+	GLAD_GL_ARB_texture_compression = has_ext("GL_ARB_texture_compression");
+	GLAD_GL_APPLE_aux_depth_stencil = has_ext("GL_APPLE_aux_depth_stencil");
+	GLAD_GL_ARB_shader_subroutine = has_ext("GL_ARB_shader_subroutine");
+	GLAD_GL_EXT_framebuffer_sRGB = has_ext("GL_EXT_framebuffer_sRGB");
+	GLAD_GL_ARB_texture_storage_multisample = has_ext("GL_ARB_texture_storage_multisample");
+	GLAD_GL_KHR_blend_equation_advanced_coherent = has_ext("GL_KHR_blend_equation_advanced_coherent");
+	GLAD_GL_EXT_vertex_attrib_64bit = has_ext("GL_EXT_vertex_attrib_64bit");
+	GLAD_GL_ARB_depth_texture = has_ext("GL_ARB_depth_texture");
+	GLAD_GL_NV_shader_buffer_store = has_ext("GL_NV_shader_buffer_store");
+	GLAD_GL_OES_query_matrix = has_ext("GL_OES_query_matrix");
+	GLAD_GL_MESA_window_pos = has_ext("GL_MESA_window_pos");
+	GLAD_GL_NV_fill_rectangle = has_ext("GL_NV_fill_rectangle");
+	GLAD_GL_NV_shader_storage_buffer_object = has_ext("GL_NV_shader_storage_buffer_object");
+	GLAD_GL_ARB_texture_query_lod = has_ext("GL_ARB_texture_query_lod");
+	GLAD_GL_ARB_copy_buffer = has_ext("GL_ARB_copy_buffer");
+	GLAD_GL_ARB_shader_image_size = has_ext("GL_ARB_shader_image_size");
+	GLAD_GL_NV_shader_atomic_counters = has_ext("GL_NV_shader_atomic_counters");
+	GLAD_GL_APPLE_object_purgeable = has_ext("GL_APPLE_object_purgeable");
+	GLAD_GL_ARB_occlusion_query = has_ext("GL_ARB_occlusion_query");
+	GLAD_GL_INGR_color_clamp = has_ext("GL_INGR_color_clamp");
+	GLAD_GL_SGI_color_table = has_ext("GL_SGI_color_table");
+	GLAD_GL_NV_gpu_program5_mem_extended = has_ext("GL_NV_gpu_program5_mem_extended");
+	GLAD_GL_ARB_texture_cube_map_array = has_ext("GL_ARB_texture_cube_map_array");
+	GLAD_GL_SGIX_scalebias_hint = has_ext("GL_SGIX_scalebias_hint");
+	GLAD_GL_EXT_gpu_shader4 = has_ext("GL_EXT_gpu_shader4");
+	GLAD_GL_NV_geometry_program4 = has_ext("GL_NV_geometry_program4");
+	GLAD_GL_EXT_framebuffer_multisample_blit_scaled = has_ext("GL_EXT_framebuffer_multisample_blit_scaled");
+	GLAD_GL_AMD_debug_output = has_ext("GL_AMD_debug_output");
+	GLAD_GL_ARB_texture_border_clamp = has_ext("GL_ARB_texture_border_clamp");
+	GLAD_GL_ARB_fragment_coord_conventions = has_ext("GL_ARB_fragment_coord_conventions");
+	GLAD_GL_ARB_multitexture = has_ext("GL_ARB_multitexture");
+	GLAD_GL_SGIX_polynomial_ffd = has_ext("GL_SGIX_polynomial_ffd");
+	GLAD_GL_EXT_provoking_vertex = has_ext("GL_EXT_provoking_vertex");
+	GLAD_GL_ARB_point_parameters = has_ext("GL_ARB_point_parameters");
+	GLAD_GL_ARB_shader_image_load_store = has_ext("GL_ARB_shader_image_load_store");
+	GLAD_GL_ARB_conditional_render_inverted = has_ext("GL_ARB_conditional_render_inverted");
+	GLAD_GL_HP_occlusion_test = has_ext("GL_HP_occlusion_test");
+	GLAD_GL_ARB_ES3_compatibility = has_ext("GL_ARB_ES3_compatibility");
+	GLAD_GL_ARB_texture_barrier = has_ext("GL_ARB_texture_barrier");
+	GLAD_GL_ARB_texture_buffer_object_rgb32 = has_ext("GL_ARB_texture_buffer_object_rgb32");
+	GLAD_GL_NV_bindless_multi_draw_indirect = has_ext("GL_NV_bindless_multi_draw_indirect");
+	GLAD_GL_SGIX_texture_multi_buffer = has_ext("GL_SGIX_texture_multi_buffer");
+	GLAD_GL_EXT_transform_feedback = has_ext("GL_EXT_transform_feedback");
+	GLAD_GL_KHR_texture_compression_astc_ldr = has_ext("GL_KHR_texture_compression_astc_ldr");
+	GLAD_GL_3DFX_multisample = has_ext("GL_3DFX_multisample");
+	GLAD_GL_INTEL_fragment_shader_ordering = has_ext("GL_INTEL_fragment_shader_ordering");
+	GLAD_GL_ARB_texture_env_dot3 = has_ext("GL_ARB_texture_env_dot3");
+	GLAD_GL_NV_gpu_program4 = has_ext("GL_NV_gpu_program4");
+	GLAD_GL_NV_gpu_program5 = has_ext("GL_NV_gpu_program5");
+	GLAD_GL_NV_float_buffer = has_ext("GL_NV_float_buffer");
+	GLAD_GL_SGIS_texture_edge_clamp = has_ext("GL_SGIS_texture_edge_clamp");
+	GLAD_GL_ARB_framebuffer_sRGB = has_ext("GL_ARB_framebuffer_sRGB");
+	GLAD_GL_SUN_slice_accum = has_ext("GL_SUN_slice_accum");
+	GLAD_GL_EXT_index_texture = has_ext("GL_EXT_index_texture");
+	GLAD_GL_EXT_shader_image_load_formatted = has_ext("GL_EXT_shader_image_load_formatted");
+	GLAD_GL_ARB_geometry_shader4 = has_ext("GL_ARB_geometry_shader4");
+	GLAD_GL_EXT_separate_specular_color = has_ext("GL_EXT_separate_specular_color");
+	GLAD_GL_AMD_depth_clamp_separate = has_ext("GL_AMD_depth_clamp_separate");
+	GLAD_GL_NV_conservative_raster = has_ext("GL_NV_conservative_raster");
+	GLAD_GL_ARB_sparse_texture2 = has_ext("GL_ARB_sparse_texture2");
+	GLAD_GL_SGIX_sprite = has_ext("GL_SGIX_sprite");
+	GLAD_GL_ARB_get_program_binary = has_ext("GL_ARB_get_program_binary");
+	GLAD_GL_AMD_occlusion_query_event = has_ext("GL_AMD_occlusion_query_event");
+	GLAD_GL_SGIS_multisample = has_ext("GL_SGIS_multisample");
+	GLAD_GL_EXT_framebuffer_object = has_ext("GL_EXT_framebuffer_object");
+	GLAD_GL_ARB_robustness_isolation = has_ext("GL_ARB_robustness_isolation");
+	GLAD_GL_ARB_vertex_array_bgra = has_ext("GL_ARB_vertex_array_bgra");
+	GLAD_GL_APPLE_vertex_array_range = has_ext("GL_APPLE_vertex_array_range");
+	GLAD_GL_AMD_query_buffer_object = has_ext("GL_AMD_query_buffer_object");
+	GLAD_GL_NV_register_combiners = has_ext("GL_NV_register_combiners");
+	GLAD_GL_ARB_draw_buffers = has_ext("GL_ARB_draw_buffers");
+	GLAD_GL_ARB_clear_texture = has_ext("GL_ARB_clear_texture");
+	GLAD_GL_ARB_debug_output = has_ext("GL_ARB_debug_output");
+	GLAD_GL_SGI_color_matrix = has_ext("GL_SGI_color_matrix");
+	GLAD_GL_EXT_cull_vertex = has_ext("GL_EXT_cull_vertex");
+	GLAD_GL_EXT_texture_sRGB = has_ext("GL_EXT_texture_sRGB");
+	GLAD_GL_APPLE_row_bytes = has_ext("GL_APPLE_row_bytes");
+	GLAD_GL_NV_texgen_reflection = has_ext("GL_NV_texgen_reflection");
+	GLAD_GL_IBM_multimode_draw_arrays = has_ext("GL_IBM_multimode_draw_arrays");
+	GLAD_GL_APPLE_vertex_array_object = has_ext("GL_APPLE_vertex_array_object");
+	GLAD_GL_3DFX_texture_compression_FXT1 = has_ext("GL_3DFX_texture_compression_FXT1");
+	GLAD_GL_NV_fragment_shader_interlock = has_ext("GL_NV_fragment_shader_interlock");
+	GLAD_GL_AMD_conservative_depth = has_ext("GL_AMD_conservative_depth");
+	GLAD_GL_ARB_texture_float = has_ext("GL_ARB_texture_float");
+	GLAD_GL_ARB_compressed_texture_pixel_storage = has_ext("GL_ARB_compressed_texture_pixel_storage");
+	GLAD_GL_SGIS_detail_texture = has_ext("GL_SGIS_detail_texture");
+	GLAD_GL_ARB_draw_instanced = has_ext("GL_ARB_draw_instanced");
+	GLAD_GL_OES_read_format = has_ext("GL_OES_read_format");
+	GLAD_GL_ATI_texture_float = has_ext("GL_ATI_texture_float");
+	GLAD_GL_ARB_texture_gather = has_ext("GL_ARB_texture_gather");
+	GLAD_GL_AMD_vertex_shader_layer = has_ext("GL_AMD_vertex_shader_layer");
+	GLAD_GL_ARB_shading_language_include = has_ext("GL_ARB_shading_language_include");
+	GLAD_GL_APPLE_client_storage = has_ext("GL_APPLE_client_storage");
+	GLAD_GL_WIN_phong_shading = has_ext("GL_WIN_phong_shading");
+	GLAD_GL_INGR_blend_func_separate = has_ext("GL_INGR_blend_func_separate");
+	GLAD_GL_NV_path_rendering = has_ext("GL_NV_path_rendering");
+	GLAD_GL_NV_conservative_raster_dilate = has_ext("GL_NV_conservative_raster_dilate");
+	GLAD_GL_ATI_vertex_streams = has_ext("GL_ATI_vertex_streams");
+	GLAD_GL_ARB_post_depth_coverage = has_ext("GL_ARB_post_depth_coverage");
+	GLAD_GL_ARB_texture_non_power_of_two = has_ext("GL_ARB_texture_non_power_of_two");
+	GLAD_GL_APPLE_rgb_422 = has_ext("GL_APPLE_rgb_422");
+	GLAD_GL_EXT_texture_lod_bias = has_ext("GL_EXT_texture_lod_bias");
+	GLAD_GL_ARB_gpu_shader_int64 = has_ext("GL_ARB_gpu_shader_int64");
+	GLAD_GL_ARB_seamless_cube_map = has_ext("GL_ARB_seamless_cube_map");
+	GLAD_GL_ARB_shader_group_vote = has_ext("GL_ARB_shader_group_vote");
+	GLAD_GL_NV_vdpau_interop = has_ext("GL_NV_vdpau_interop");
+	GLAD_GL_ARB_occlusion_query2 = has_ext("GL_ARB_occlusion_query2");
+	GLAD_GL_ARB_internalformat_query2 = has_ext("GL_ARB_internalformat_query2");
+	GLAD_GL_EXT_texture_filter_anisotropic = has_ext("GL_EXT_texture_filter_anisotropic");
+	GLAD_GL_SUN_vertex = has_ext("GL_SUN_vertex");
+	GLAD_GL_SGIX_igloo_interface = has_ext("GL_SGIX_igloo_interface");
+	GLAD_GL_SGIS_texture_lod = has_ext("GL_SGIS_texture_lod");
+	GLAD_GL_NV_vertex_program3 = has_ext("GL_NV_vertex_program3");
+	GLAD_GL_ARB_draw_indirect = has_ext("GL_ARB_draw_indirect");
+	GLAD_GL_NV_vertex_program4 = has_ext("GL_NV_vertex_program4");
+	GLAD_GL_AMD_transform_feedback3_lines_triangles = has_ext("GL_AMD_transform_feedback3_lines_triangles");
+	GLAD_GL_SGIS_fog_function = has_ext("GL_SGIS_fog_function");
+	GLAD_GL_EXT_x11_sync_object = has_ext("GL_EXT_x11_sync_object");
+	GLAD_GL_ARB_sync = has_ext("GL_ARB_sync");
+	GLAD_GL_NV_sample_locations = has_ext("GL_NV_sample_locations");
+	GLAD_GL_ARB_compute_variable_group_size = has_ext("GL_ARB_compute_variable_group_size");
+	GLAD_GL_OES_fixed_point = has_ext("GL_OES_fixed_point");
+	GLAD_GL_NV_blend_square = has_ext("GL_NV_blend_square");
+	GLAD_GL_EXT_framebuffer_multisample = has_ext("GL_EXT_framebuffer_multisample");
+	GLAD_GL_ARB_gpu_shader5 = has_ext("GL_ARB_gpu_shader5");
+	GLAD_GL_SGIS_texture4D = has_ext("GL_SGIS_texture4D");
+	GLAD_GL_EXT_texture3D = has_ext("GL_EXT_texture3D");
+	GLAD_GL_EXT_multisample = has_ext("GL_EXT_multisample");
+	GLAD_GL_EXT_secondary_color = has_ext("GL_EXT_secondary_color");
+	GLAD_GL_ARB_texture_filter_minmax = has_ext("GL_ARB_texture_filter_minmax");
+	GLAD_GL_ATI_vertex_array_object = has_ext("GL_ATI_vertex_array_object");
+	GLAD_GL_ARB_parallel_shader_compile = has_ext("GL_ARB_parallel_shader_compile");
+	GLAD_GL_NVX_gpu_memory_info = has_ext("GL_NVX_gpu_memory_info");
+	GLAD_GL_ARB_sparse_texture = has_ext("GL_ARB_sparse_texture");
+	GLAD_GL_SGIS_point_line_texgen = has_ext("GL_SGIS_point_line_texgen");
+	GLAD_GL_ARB_sample_locations = has_ext("GL_ARB_sample_locations");
+	GLAD_GL_ARB_sparse_buffer = has_ext("GL_ARB_sparse_buffer");
+	GLAD_GL_EXT_draw_range_elements = has_ext("GL_EXT_draw_range_elements");
+	GLAD_GL_SGIX_blend_alpha_minmax = has_ext("GL_SGIX_blend_alpha_minmax");
+	GLAD_GL_KHR_context_flush_control = has_ext("GL_KHR_context_flush_control");
+	free_exts();
+	return 1;
+}
+
+static void find_coreGL(void) {
+
+    /* 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
+     */
+    int i, major, minor;
+
+    const char* version;
+    const char* prefixes[] = {
+        "OpenGL ES-CM ",
+        "OpenGL ES-CL ",
+        "OpenGL ES ",
+        NULL
+    };
+
+    version = (const char*) glGetString(GL_VERSION);
+    if (!version) return;
+
+    for (i = 0;  prefixes[i];  i++) {
+        const size_t length = strlen(prefixes[i]);
+        if (strncmp(version, prefixes[i], length) == 0) {
+            version += length;
+            break;
+        }
+    }
+
+/* PR #18 */
+#ifdef _MSC_VER
+    sscanf_s(version, "%d.%d", &major, &minor);
+#else
+    sscanf(version, "%d.%d", &major, &minor);
+#endif
+
+    GLVersion.major = major; GLVersion.minor = minor;
+    max_loaded_major = major; max_loaded_minor = minor;
+	GLAD_GL_VERSION_1_0 = (major == 1 && minor >= 0) || major > 1;
+	GLAD_GL_VERSION_1_1 = (major == 1 && minor >= 1) || major > 1;
+	GLAD_GL_VERSION_1_2 = (major == 1 && minor >= 2) || major > 1;
+	GLAD_GL_VERSION_1_3 = (major == 1 && minor >= 3) || major > 1;
+	GLAD_GL_VERSION_1_4 = (major == 1 && minor >= 4) || major > 1;
+	GLAD_GL_VERSION_1_5 = (major == 1 && minor >= 5) || major > 1;
+	GLAD_GL_VERSION_2_0 = (major == 2 && minor >= 0) || major > 2;
+	GLAD_GL_VERSION_2_1 = (major == 2 && minor >= 1) || major > 2;
+	GLAD_GL_VERSION_3_0 = (major == 3 && minor >= 0) || major > 3;
+	GLAD_GL_VERSION_3_1 = (major == 3 && minor >= 1) || major > 3;
+	GLAD_GL_VERSION_3_2 = (major == 3 && minor >= 2) || major > 3;
+	GLAD_GL_VERSION_3_3 = (major == 3 && minor >= 3) || major > 3;
+	if (GLVersion.major > 3 || (GLVersion.major >= 3 && GLVersion.minor >= 3)) {
+		max_loaded_major = 3;
+		max_loaded_minor = 3;
+	}
+}
+
+int gladLoadGLLoader(GLADloadproc load) {
+	GLVersion.major = 0; GLVersion.minor = 0;
+	glGetString = (PFNGLGETSTRINGPROC)load("glGetString");
+	if(glGetString == NULL) return 0;
+	if(glGetString(GL_VERSION) == NULL) return 0;
+	find_coreGL();
+	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);
+	load_GL_VERSION_3_1(load);
+	load_GL_VERSION_3_2(load);
+	load_GL_VERSION_3_3(load);
+
+	if (!find_extensionsGL()) return 0;
+	load_GL_APPLE_element_array(load);
+	load_GL_AMD_multi_draw_indirect(load);
+	load_GL_SGIX_tag_sample_buffer(load);
+	load_GL_NV_point_sprite(load);
+	load_GL_ATI_separate_stencil(load);
+	load_GL_EXT_texture_buffer_object(load);
+	load_GL_ARB_vertex_blend(load);
+	load_GL_OVR_multiview(load);
+	load_GL_ARB_program_interface_query(load);
+	load_GL_EXT_index_func(load);
+	load_GL_NV_shader_buffer_load(load);
+	load_GL_EXT_color_subtable(load);
+	load_GL_SUNX_constant_data(load);
+	load_GL_EXT_multi_draw_arrays(load);
+	load_GL_ARB_shader_atomic_counters(load);
+	load_GL_NV_conditional_render(load);
+	load_GL_MESA_resize_buffers(load);
+	load_GL_ARB_texture_view(load);
+	load_GL_ARB_map_buffer_range(load);
+	load_GL_EXT_convolution(load);
+	load_GL_NV_vertex_attrib_integer_64bit(load);
+	load_GL_EXT_paletted_texture(load);
+	load_GL_ARB_texture_buffer_object(load);
+	load_GL_ATI_pn_triangles(load);
+	load_GL_SGIX_flush_raster(load);
+	load_GL_EXT_light_texture(load);
+	load_GL_HP_image_transform(load);
+	load_GL_AMD_draw_buffers_blend(load);
+	load_GL_APPLE_texture_range(load);
+	load_GL_EXT_texture_array(load);
+	load_GL_NV_texture_barrier(load);
+	load_GL_ARB_vertex_type_2_10_10_10_rev(load);
+	load_GL_3DFX_tbuffer(load);
+	load_GL_GREMEDY_frame_terminator(load);
+	load_GL_ARB_blend_func_extended(load);
+	load_GL_EXT_separate_shader_objects(load);
+	load_GL_NV_texture_multisample(load);
+	load_GL_ARB_shader_objects(load);
+	load_GL_ARB_framebuffer_object(load);
+	load_GL_ATI_envmap_bumpmap(load);
+	load_GL_ATI_map_object_buffer(load);
+	load_GL_ARB_robustness(load);
+	load_GL_NV_pixel_data_range(load);
+	load_GL_EXT_framebuffer_blit(load);
+	load_GL_ARB_gpu_shader_fp64(load);
+	load_GL_NV_command_list(load);
+	load_GL_EXT_vertex_weighting(load);
+	load_GL_GREMEDY_string_marker(load);
+	load_GL_EXT_subtexture(load);
+	load_GL_EXT_gpu_program_parameters(load);
+	load_GL_NV_evaluators(load);
+	load_GL_SGIS_texture_filter4(load);
+	load_GL_AMD_performance_monitor(load);
+	load_GL_EXT_stencil_clear_tag(load);
+	load_GL_NV_present_video(load);
+	load_GL_SGIX_framezoom(load);
+	load_GL_ARB_draw_elements_base_vertex(load);
+	load_GL_NV_transform_feedback(load);
+	load_GL_NV_fragment_program(load);
+	load_GL_AMD_stencil_operation_extended(load);
+	load_GL_ARB_instanced_arrays(load);
+	load_GL_EXT_polygon_offset(load);
+	load_GL_KHR_robustness(load);
+	load_GL_AMD_sparse_texture(load);
+	load_GL_ARB_clip_control(load);
+	load_GL_NV_fragment_coverage_to_color(load);
+	load_GL_NV_fence(load);
+	load_GL_ARB_texture_buffer_range(load);
+	load_GL_SUN_mesh_array(load);
+	load_GL_ARB_vertex_attrib_binding(load);
+	load_GL_ARB_framebuffer_no_attachments(load);
+	load_GL_ARB_cl_event(load);
+	load_GL_OES_single_precision(load);
+	load_GL_NV_primitive_restart(load);
+	load_GL_SUN_global_alpha(load);
+	load_GL_EXT_texture_object(load);
+	load_GL_AMD_name_gen_delete(load);
+	load_GL_ARB_buffer_storage(load);
+	load_GL_APPLE_vertex_program_evaluators(load);
+	load_GL_ARB_multi_bind(load);
+	load_GL_SGIX_list_priority(load);
+	load_GL_NV_vertex_buffer_unified_memory(load);
+	load_GL_NV_blend_equation_advanced(load);
+	load_GL_SGIS_sharpen_texture(load);
+	load_GL_ARB_vertex_program(load);
+	load_GL_ARB_vertex_buffer_object(load);
+	load_GL_NV_vertex_array_range(load);
+	load_GL_SGIX_fragment_lighting(load);
+	load_GL_NV_framebuffer_multisample_coverage(load);
+	load_GL_EXT_timer_query(load);
+	load_GL_NV_bindless_texture(load);
+	load_GL_KHR_debug(load);
+	load_GL_ATI_vertex_attrib_array_object(load);
+	load_GL_EXT_geometry_shader4(load);
+	load_GL_EXT_bindable_uniform(load);
+	load_GL_KHR_blend_equation_advanced(load);
+	load_GL_ATI_element_array(load);
+	load_GL_SGIX_reference_plane(load);
+	load_GL_EXT_stencil_two_side(load);
+	load_GL_NV_explicit_multisample(load);
+	load_GL_IBM_static_data(load);
+	load_GL_EXT_texture_perturb_normal(load);
+	load_GL_EXT_point_parameters(load);
+	load_GL_PGI_misc_hints(load);
+	load_GL_ARB_vertex_shader(load);
+	load_GL_ARB_tessellation_shader(load);
+	load_GL_EXT_draw_buffers2(load);
+	load_GL_ARB_vertex_attrib_64bit(load);
+	load_GL_EXT_texture_filter_minmax(load);
+	load_GL_AMD_interleaved_elements(load);
+	load_GL_ARB_fragment_program(load);
+	load_GL_ARB_texture_storage(load);
+	load_GL_ARB_copy_image(load);
+	load_GL_SGIS_pixel_texture(load);
+	load_GL_SGIX_instruments(load);
+	load_GL_ARB_shader_storage_buffer_object(load);
+	load_GL_EXT_blend_minmax(load);
+	load_GL_ARB_base_instance(load);
+	load_GL_ARB_ES3_1_compatibility(load);
+	load_GL_EXT_texture_integer(load);
+	load_GL_ARB_texture_multisample(load);
+	load_GL_AMD_gpu_shader_int64(load);
+	load_GL_AMD_vertex_shader_tessellator(load);
+	load_GL_ARB_invalidate_subdata(load);
+	load_GL_EXT_index_material(load);
+	load_GL_INTEL_parallel_arrays(load);
+	load_GL_ATI_draw_buffers(load);
+	load_GL_SGIX_pixel_texture(load);
+	load_GL_ARB_timer_query(load);
+	load_GL_NV_parameter_buffer_object(load);
+	load_GL_ARB_direct_state_access(load);
+	load_GL_ARB_uniform_buffer_object(load);
+	load_GL_NV_transform_feedback2(load);
+	load_GL_EXT_blend_color(load);
+	load_GL_EXT_histogram(load);
+	load_GL_ARB_get_texture_sub_image(load);
+	load_GL_SGIS_point_parameters(load);
+	load_GL_EXT_direct_state_access(load);
+	load_GL_AMD_sample_positions(load);
+	load_GL_NV_vertex_program(load);
+	load_GL_EXT_vertex_shader(load);
+	load_GL_EXT_blend_func_separate(load);
+	load_GL_APPLE_fence(load);
+	load_GL_OES_byte_coordinates(load);
+	load_GL_ARB_transpose_matrix(load);
+	load_GL_ARB_provoking_vertex(load);
+	load_GL_EXT_fog_coord(load);
+	load_GL_EXT_vertex_array(load);
+	load_GL_EXT_blend_equation_separate(load);
+	load_GL_NV_framebuffer_mixed_samples(load);
+	load_GL_NVX_conditional_render(load);
+	load_GL_ARB_multi_draw_indirect(load);
+	load_GL_EXT_raster_multisample(load);
+	load_GL_NV_copy_image(load);
+	load_GL_INTEL_framebuffer_CMAA(load);
+	load_GL_ARB_transform_feedback2(load);
+	load_GL_ARB_transform_feedback3(load);
+	load_GL_EXT_debug_marker(load);
+	load_GL_EXT_pixel_transform(load);
+	load_GL_ATI_fragment_shader(load);
+	load_GL_ARB_vertex_array_object(load);
+	load_GL_SUN_triangle_list(load);
+	load_GL_ARB_transform_feedback_instanced(load);
+	load_GL_SGIX_async(load);
+	load_GL_INTEL_performance_query(load);
+	load_GL_NV_gpu_shader5(load);
+	load_GL_NV_bindless_multi_draw_indirect_count(load);
+	load_GL_ARB_ES2_compatibility(load);
+	load_GL_ARB_indirect_parameters(load);
+	load_GL_NV_half_float(load);
+	load_GL_ARB_ES3_2_compatibility(load);
+	load_GL_EXT_polygon_offset_clamp(load);
+	load_GL_EXT_compiled_vertex_array(load);
+	load_GL_NV_depth_buffer_float(load);
+	load_GL_NV_occlusion_query(load);
+	load_GL_APPLE_flush_buffer_range(load);
+	load_GL_ARB_imaging(load);
+	load_GL_ARB_draw_buffers_blend(load);
+	load_GL_ARB_clear_buffer_object(load);
+	load_GL_ARB_multisample(load);
+	load_GL_EXT_debug_label(load);
+	load_GL_ARB_sample_shading(load);
+	load_GL_NV_internalformat_sample_query(load);
+	load_GL_INTEL_map_texture(load);
+	load_GL_ARB_compute_shader(load);
+	load_GL_IBM_vertex_array_lists(load);
+	load_GL_ARB_color_buffer_float(load);
+	load_GL_ARB_bindless_texture(load);
+	load_GL_ARB_window_pos(load);
+	load_GL_ARB_internalformat_query(load);
+	load_GL_EXT_shader_image_load_store(load);
+	load_GL_EXT_copy_texture(load);
+	load_GL_NV_register_combiners2(load);
+	load_GL_NV_draw_texture(load);
+	load_GL_EXT_draw_instanced(load);
+	load_GL_ARB_viewport_array(load);
+	load_GL_ARB_separate_shader_objects(load);
+	load_GL_EXT_depth_bounds_test(load);
+	load_GL_NV_video_capture(load);
+	load_GL_ARB_sampler_objects(load);
+	load_GL_ARB_matrix_palette(load);
+	load_GL_SGIS_texture_color_mask(load);
+	load_GL_EXT_coordinate_frame(load);
+	load_GL_ARB_texture_compression(load);
+	load_GL_ARB_shader_subroutine(load);
+	load_GL_ARB_texture_storage_multisample(load);
+	load_GL_EXT_vertex_attrib_64bit(load);
+	load_GL_OES_query_matrix(load);
+	load_GL_MESA_window_pos(load);
+	load_GL_ARB_copy_buffer(load);
+	load_GL_APPLE_object_purgeable(load);
+	load_GL_ARB_occlusion_query(load);
+	load_GL_SGI_color_table(load);
+	load_GL_EXT_gpu_shader4(load);
+	load_GL_NV_geometry_program4(load);
+	load_GL_AMD_debug_output(load);
+	load_GL_ARB_multitexture(load);
+	load_GL_SGIX_polynomial_ffd(load);
+	load_GL_EXT_provoking_vertex(load);
+	load_GL_ARB_point_parameters(load);
+	load_GL_ARB_shader_image_load_store(load);
+	load_GL_ARB_texture_barrier(load);
+	load_GL_NV_bindless_multi_draw_indirect(load);
+	load_GL_EXT_transform_feedback(load);
+	load_GL_NV_gpu_program4(load);
+	load_GL_NV_gpu_program5(load);
+	load_GL_ARB_geometry_shader4(load);
+	load_GL_NV_conservative_raster(load);
+	load_GL_SGIX_sprite(load);
+	load_GL_ARB_get_program_binary(load);
+	load_GL_AMD_occlusion_query_event(load);
+	load_GL_SGIS_multisample(load);
+	load_GL_EXT_framebuffer_object(load);
+	load_GL_APPLE_vertex_array_range(load);
+	load_GL_NV_register_combiners(load);
+	load_GL_ARB_draw_buffers(load);
+	load_GL_ARB_clear_texture(load);
+	load_GL_ARB_debug_output(load);
+	load_GL_EXT_cull_vertex(load);
+	load_GL_IBM_multimode_draw_arrays(load);
+	load_GL_APPLE_vertex_array_object(load);
+	load_GL_SGIS_detail_texture(load);
+	load_GL_ARB_draw_instanced(load);
+	load_GL_ARB_shading_language_include(load);
+	load_GL_INGR_blend_func_separate(load);
+	load_GL_NV_path_rendering(load);
+	load_GL_NV_conservative_raster_dilate(load);
+	load_GL_ATI_vertex_streams(load);
+	load_GL_ARB_gpu_shader_int64(load);
+	load_GL_NV_vdpau_interop(load);
+	load_GL_ARB_internalformat_query2(load);
+	load_GL_SUN_vertex(load);
+	load_GL_SGIX_igloo_interface(load);
+	load_GL_ARB_draw_indirect(load);
+	load_GL_NV_vertex_program4(load);
+	load_GL_SGIS_fog_function(load);
+	load_GL_EXT_x11_sync_object(load);
+	load_GL_ARB_sync(load);
+	load_GL_NV_sample_locations(load);
+	load_GL_ARB_compute_variable_group_size(load);
+	load_GL_OES_fixed_point(load);
+	load_GL_EXT_framebuffer_multisample(load);
+	load_GL_SGIS_texture4D(load);
+	load_GL_EXT_texture3D(load);
+	load_GL_EXT_multisample(load);
+	load_GL_EXT_secondary_color(load);
+	load_GL_ATI_vertex_array_object(load);
+	load_GL_ARB_parallel_shader_compile(load);
+	load_GL_ARB_sparse_texture(load);
+	load_GL_ARB_sample_locations(load);
+	load_GL_ARB_sparse_buffer(load);
+	load_GL_EXT_draw_range_elements(load);
+	return GLVersion.major != 0 || GLVersion.minor != 0;
+}
+
+#endif  // GLAD_IMPLEMENTATION

+ 492 - 237
examples/oculus_glfw_sample/oculus_glfw_sample.c

@@ -4,11 +4,11 @@
 *
 *
 *   NOTE: This example requires raylib module [rlgl]
 *   NOTE: This example requires raylib module [rlgl]
 *
 *
-*   Compile rlgl using:
+*   Compile rlgl module using:
 *   gcc -c rlgl.c -Wall -std=c99 -DRLGL_STANDALONE -DRAYMATH_IMPLEMENTATION -DGRAPHICS_API_OPENGL_33
 *   gcc -c rlgl.c -Wall -std=c99 -DRLGL_STANDALONE -DRAYMATH_IMPLEMENTATION -DGRAPHICS_API_OPENGL_33
 *
 *
 *   Compile example using:
 *   Compile example using:
-*   gcc -o oculus_glfw_sample.exe oculus_glfw_sample.c rlgl.o glad.o -L. -lLibOVRRT32_1 -lglfw3 -lopengl32 -lgdi32 -std=c99
+*   gcc -o oculus_glfw_sample.exe oculus_glfw_sample.c rlgl.o -L. -lLibOVRRT32_1 -lglfw3 -lopengl32 -lgdi32 -std=c99
 *
 *
 *   This example has been created using raylib 1.5 (www.raylib.com)
 *   This example has been created using raylib 1.5 (www.raylib.com)
 *   raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
 *   raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
@@ -21,72 +21,103 @@
 #include <stdarg.h>
 #include <stdarg.h>
 #include <stdio.h>
 #include <stdio.h>
 #include <string.h>
 #include <string.h>
+#include <math.h>
 
 
+#define GLAD_IMPLEMENTATION
 #include "glad.h"               // Extensions loading library
 #include "glad.h"               // Extensions loading library
 #include <GLFW/glfw3.h>         // Windows/Context and inputs management
 #include <GLFW/glfw3.h>         // Windows/Context and inputs management
 
 
-#include "OculusSDK/LibOVR/Include/OVR_CAPI_GL.h"    // Oculus SDK for OpenGL
-
 #define RLGL_STANDALONE
 #define RLGL_STANDALONE
 #include "rlgl.h"
 #include "rlgl.h"
 
 
+//#define PLATFORM_OCULUS
+
+#if defined(PLATFORM_OCULUS)
+    #include "OculusSDK/LibOVR/Include/OVR_CAPI_GL.h"    // Oculus SDK for OpenGL
+#endif
+
+#if defined(PLATFORM_OCULUS)
 // OVR device variables
 // OVR device variables
 ovrSession session;
 ovrSession session;
 ovrHmdDesc hmdDesc;
 ovrHmdDesc hmdDesc;
 ovrGraphicsLuid luid;
 ovrGraphicsLuid luid;
+#endif
 
 
-// OVR OpenGL required variables
-GLuint fbo = 0;
-GLuint depthBuffer = 0;
-ovrTextureSwapChain eyeTexture;
-
-GLuint mirrorFbo = 0;
-ovrMirrorTexture mirrorTexture;
-ovrEyeRenderDesc eyeRenderDescs[2];
-Matrix eyeProjections[2];
-
-ovrLayerEyeFov eyeLayer;
-ovrViewScaleDesc viewScaleDesc;
-
-Vector2 renderTargetSize = { 0, 0 };
-Vector2 mirrorSize;
-unsigned int frame = 0;
+unsigned int frameIndex = 0;
 
 
-// GLFW variables
-GLFWwindow *window = NULL;
+#define RED        (Color){ 230, 41, 55, 255 }     // Red
+#define MAROON     (Color){ 190, 33, 55, 255 }     // Maroon
+#define RAYWHITE   (Color){ 245, 245, 245, 255 }   // My own White (raylib logo)
+#define DARKGRAY   (Color){ 80, 80, 80, 255 }      // Dark Gray
 
 
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------
 // Types and Structures Definition
 // Types and Structures Definition
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------
+#if defined(PLATFORM_OCULUS)
+typedef struct OculusBuffer {
+    ovrTextureSwapChain textureChain;
+    GLuint depthId;
+    GLuint fboId;
+    int width;
+    int height;
+} OculusBuffer;
+
+typedef struct OculusMirror {
+    ovrMirrorTexture texture;
+    GLuint fboId;
+    int width;
+    int height;
+} OculusMirror;
+
+typedef struct OculusLayer {
+    ovrViewScaleDesc viewScaleDesc;
+    ovrLayerEyeFov eyeLayer;      // layer 0
+    //ovrLayerQuad quadLayer;     // layer 1
+    Matrix eyeProjections[2];
+    int width;
+    int height;
+} OculusLayer;
+#endif
+
 typedef enum { LOG_INFO = 0, LOG_ERROR, LOG_WARNING, LOG_DEBUG, LOG_OTHER } TraceLogType;
 typedef enum { LOG_INFO = 0, LOG_ERROR, LOG_WARNING, LOG_DEBUG, LOG_OTHER } TraceLogType;
 
 
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------
 // Module specific Functions Declaration
 // Module specific Functions Declaration
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------
-static void ErrorCallback(int error, const char* description)
-{
-    fputs(description, stderr);
-}
-
-static void KeyCallback(GLFWwindow* window, int key, int scancode, int action, int mods)
-{
-    if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
-    {
-        glfwSetWindowShouldClose(window, GL_TRUE);
-    }
-}
+static void ErrorCallback(int error, const char* description);
+static void KeyCallback(GLFWwindow* window, int key, int scancode, int action, int mods);
+static void TraceLog(int msgType, const char *text, ...);
 
 
+// Drawing functions (uses rlgl functionality)
+static void DrawGrid(int slices, float spacing);
+static void DrawCube(Vector3 position, float width, float height, float length, Color color);
+static void DrawCubeWires(Vector3 position, float width, float height, float length, Color color);
 static void DrawRectangleV(Vector2 position, Vector2 size, Color color);
 static void DrawRectangleV(Vector2 position, Vector2 size, Color color);
-static void TraceLog(int msgType, const char *text, ...);
+
+#if defined(PLATFORM_OCULUS)
+// Oculus Rift functions
 static Matrix FromOvrMatrix(ovrMatrix4f ovrM);
 static Matrix FromOvrMatrix(ovrMatrix4f ovrM);
-void DrawGrid(int slices, float spacing);
-void DrawCube(Vector3 position, float width, float height, float length, Color color);
+static OculusBuffer LoadOculusBuffer(ovrSession session, int width, int height);
+static void UnloadOculusBuffer(ovrSession session, OculusBuffer buffer);
+static void SetOculusBuffer(ovrSession session, OculusBuffer buffer);
+static void UnsetOculusBuffer(OculusBuffer buffer);
+static OculusMirror LoadOculusMirror(ovrSession session, int width, int height);    // Load Oculus mirror buffers
+static void UnloadOculusMirror(ovrSession session, OculusMirror mirror);            // Unload Oculus mirror buffers
+static void BlitOculusMirror(ovrSession session, OculusMirror mirror);
+static OculusLayer InitOculusLayer(ovrSession session);
+#endif
 
 
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------
 // Main Entry point
 // Main Entry point
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------
-int main() 
+int main(void)
 {
 {
+    // Initialization
+    //--------------------------------------------------------------------------------------
+    int screenWidth = 1080;
+    int screenHeight = 600;
+    
+#if defined(PLATFORM_OCULUS)
     ovrResult result = ovr_Initialize(NULL);
     ovrResult result = ovr_Initialize(NULL);
     if (OVR_FAILURE(result)) TraceLog(LOG_ERROR, "OVR: Could not initialize Oculus device");
     if (OVR_FAILURE(result)) TraceLog(LOG_ERROR, "OVR: Could not initialize Oculus device");
 
 
@@ -106,37 +137,14 @@ int main()
     TraceLog(LOG_INFO, "OVR: Serian Number: %s", hmdDesc.SerialNumber);
     TraceLog(LOG_INFO, "OVR: Serian Number: %s", hmdDesc.SerialNumber);
     TraceLog(LOG_INFO, "OVR: Resolution: %ix%i", hmdDesc.Resolution.w, hmdDesc.Resolution.h);
     TraceLog(LOG_INFO, "OVR: Resolution: %ix%i", hmdDesc.Resolution.w, hmdDesc.Resolution.h);
     
     
-    
-    viewScaleDesc.HmdSpaceToWorldScaleInMeters = 1.0f;
-    memset(&eyeLayer, 0, sizeof(ovrLayerEyeFov));
-    eyeLayer.Header.Type = ovrLayerType_EyeFov;
-    eyeLayer.Header.Flags = ovrLayerFlag_TextureOriginAtBottomLeft;
-    
-    for (int eye = 0; eye < 2; eye++)
-    {
-        eyeRenderDescs[eye] = ovr_GetRenderDesc(session, eye, hmdDesc.DefaultEyeFov[eye]);
-        ovrMatrix4f ovrPerspectiveProjection = ovrMatrix4f_Projection(eyeRenderDescs[eye].Fov, 0.01f, 1000.0f, ovrProjection_ClipRangeOpenGL);
-        // NOTE struct ovrMatrix4f { float M[4][4] }
-        eyeProjections[eye] = FromOvrMatrix(ovrPerspectiveProjection);
-        viewScaleDesc.HmdToEyeOffset[eye] = eyeRenderDescs[eye].HmdToEyeOffset;
-
-        eyeLayer.Fov[eye] = eyeRenderDescs[eye].Fov;
-        ovrSizei eyeSize = ovr_GetFovTextureSize(session, eye, eyeLayer.Fov[eye], 1.0f);
-        eyeLayer.Viewport[eye].Size = eyeSize;
-        eyeLayer.Viewport[eye].Pos.x = renderTargetSize.x;
-        eyeLayer.Viewport[eye].Pos.y = 0;
-
-        renderTargetSize.y = eyeSize.h;     //std::max(renderTargetSize.y, (uint32_t)eyeSize.h);
-        renderTargetSize.x += eyeSize.w;
-    }
-    
-    // Make the on screen window 1/2 the resolution of the device
-    mirrorSize.x = hmdDesc.Resolution.w/2;
-    mirrorSize.y = hmdDesc.Resolution.h/2;
-
+    screenWidth = hmdDesc.Resolution.w/2;
+    screenHeight = hmdDesc.Resolution.h/2;
+#endif
     
     
     // GLFW3 Initialization + OpenGL 3.3 Context + Extensions
     // GLFW3 Initialization + OpenGL 3.3 Context + Extensions
     //--------------------------------------------------------
     //--------------------------------------------------------
+    glfwSetErrorCallback(ErrorCallback);
+    
     if (!glfwInit())
     if (!glfwInit())
     {
     {
         TraceLog(LOG_WARNING, "GLFW3: Can not initialize GLFW");
         TraceLog(LOG_WARNING, "GLFW3: Can not initialize GLFW");
@@ -149,9 +157,8 @@ int main()
     glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
     glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
     glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
     glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
     glfwWindowHint(GLFW_OPENGL_DEBUG_CONTEXT, GL_TRUE);
     glfwWindowHint(GLFW_OPENGL_DEBUG_CONTEXT, GL_TRUE);
-    //glfwWindowHint(GLFW_DECORATED, GL_FALSE);   // Mandatory on Oculus Rift to avoid program crash? --> NO
    
    
-    window = glfwCreateWindow(mirrorSize.x, mirrorSize.y, "raylib oculus sample", NULL, NULL);
+    GLFWwindow *window = glfwCreateWindow(screenWidth, screenHeight, "raylib oculus sample", NULL, NULL);
     
     
     if (!window)
     if (!window)
     {
     {
@@ -160,146 +167,129 @@ int main()
     }
     }
     else TraceLog(LOG_INFO, "GLFW3: Window created successfully");
     else TraceLog(LOG_INFO, "GLFW3: Window created successfully");
     
     
-    glfwSetErrorCallback(ErrorCallback);
     glfwSetKeyCallback(window, KeyCallback);
     glfwSetKeyCallback(window, KeyCallback);
     
     
     glfwMakeContextCurrent(window);
     glfwMakeContextCurrent(window);
     glfwSwapInterval(0);
     glfwSwapInterval(0);
 
 
+    // Load OpenGL 3.3 extensions
     if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
     if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
     {
     {
         TraceLog(LOG_WARNING, "GLAD: Cannot load OpenGL extensions");
         TraceLog(LOG_WARNING, "GLAD: Cannot load OpenGL extensions");
         exit(1);
         exit(1);
     }
     }
     else TraceLog(LOG_INFO, "GLAD: OpenGL extensions loaded successfully");
     else TraceLog(LOG_INFO, "GLAD: OpenGL extensions loaded successfully");
+    //--------------------------------------------------------
     
     
-    // Initialize OVR OpenGL swap chain textures
-    ovrTextureSwapChainDesc desc = {};
-    desc.Type = ovrTexture_2D;
-    desc.ArraySize = 1;
-    desc.Width = renderTargetSize.x;
-    desc.Height = renderTargetSize.y;
-    desc.MipLevels = 1;
-    desc.Format = OVR_FORMAT_R8G8B8A8_UNORM_SRGB;
-    desc.SampleCount = 1;
-    desc.StaticImage = ovrFalse;
-    
-    result = ovr_CreateTextureSwapChainGL(session, &desc, &eyeTexture);
-    eyeLayer.ColorTexture[0] = eyeTexture;
-    
-    if (!OVR_SUCCESS(result)) TraceLog(LOG_WARNING, "Failed to create swap textures");
-    
-    int length = 0;
-    result = ovr_GetTextureSwapChainLength(session, eyeTexture, &length);
-    
-    if (!OVR_SUCCESS(result) || !length) TraceLog(LOG_WARNING, "Unable to count swap chain textures");
-
-    for (int i = 0; i < length; ++i) 
-    {
-        GLuint chainTexId;
-        ovr_GetTextureSwapChainBufferGL(session, eyeTexture, i, &chainTexId);
-        glBindTexture(GL_TEXTURE_2D, chainTexId);
-        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
-        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
-        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
-        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
-    }
-    
-    glBindTexture(GL_TEXTURE_2D, 0);
-
-    // Setup framebuffer object
-    glGenFramebuffers(1, &fbo);
-    glGenRenderbuffers(1, &depthBuffer);
-    glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbo);
-    glBindRenderbuffer(GL_RENDERBUFFER, depthBuffer);
-    glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, renderTargetSize.x, renderTargetSize.y);
-    glBindRenderbuffer(GL_RENDERBUFFER, 0);
-    glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthBuffer);
-    glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
-
-    // Setup mirror texture
-    ovrMirrorTextureDesc mirrorDesc;
-    memset(&mirrorDesc, 0, sizeof(mirrorDesc));
-    mirrorDesc.Format = OVR_FORMAT_R8G8B8A8_UNORM_SRGB;
-    mirrorDesc.Width = mirrorSize.x;
-    mirrorDesc.Height = mirrorSize.y;
-    
-    if (!OVR_SUCCESS(ovr_CreateMirrorTextureGL(session, &mirrorDesc, &mirrorTexture))) TraceLog(LOG_WARNING, "Could not create mirror texture");
-
-    glGenFramebuffers(1, &mirrorFbo);
+#if defined(PLATFORM_OCULUS)
+    // Initialize Oculus Buffers
+    OculusLayer layer = InitOculusLayer(session);   
+    OculusBuffer buffer = LoadOculusBuffer(session, layer.width, layer.height);
+    OculusMirror mirror = LoadOculusMirror(session, hmdDesc.Resolution.w/2, hmdDesc.Resolution.h/2);
+    layer.eyeLayer.ColorTexture[0] = buffer.textureChain;     //SetOculusLayerTexture(eyeLayer, buffer.textureChain);
 
 
     // Recenter OVR tracking origin
     // Recenter OVR tracking origin
     ovr_RecenterTrackingOrigin(session);
     ovr_RecenterTrackingOrigin(session);
-    
+#endif
+
     // Initialize rlgl internal buffers and OpenGL state
     // Initialize rlgl internal buffers and OpenGL state
     rlglInit();
     rlglInit();
-    rlglInitGraphics(0, 0, mirrorSize.x, mirrorSize.y);
-    rlClearColor(245, 245, 245, 255); // Define clear color
-    glEnable(GL_DEPTH_TEST);
+    rlglInitGraphics(0, 0, screenWidth, screenHeight);
+    rlClearColor(245, 245, 245, 255);   // Define clear color
+    rlEnableDepthTest();                // Enable DEPTH_TEST for 3D
     
     
-    Vector2 position = { mirrorSize.x/2 - 100, mirrorSize.y/2 - 100 };
     Vector2 size = { 200, 200 };
     Vector2 size = { 200, 200 };
-    Color color = { 180, 20, 20, 255 };
     Vector3 cubePosition = { 0.0f, 0.0f, 0.0f };
     Vector3 cubePosition = { 0.0f, 0.0f, 0.0f };
-
+    
+    Camera camera;
+    camera.position = (Vector3){ 5.0f, 5.0f, 5.0f };    // Camera position
+    camera.target = (Vector3){ 0.0f, 0.0f, 0.0f };      // Camera looking at point
+    camera.up = (Vector3){ 0.0f, 1.0f, 0.0f };          // Camera up vector (rotation towards target)
+    camera.fovy = 45.0f;                                // Camera field-of-view Y
+    //--------------------------------------------------------------------------------------    
+
+    // Main game loop    
     while (!glfwWindowShouldClose(window)) 
     while (!glfwWindowShouldClose(window)) 
     {
     {
         // Update
         // Update
         //----------------------------------------------------------------------------------
         //----------------------------------------------------------------------------------
-        frame++;
+#if defined(PLATFORM_OCULUS)
+        frameIndex++;
         
         
         ovrPosef eyePoses[2];
         ovrPosef eyePoses[2];
-        ovr_GetEyePoses(session, frame, ovrTrue, viewScaleDesc.HmdToEyeOffset, eyePoses, &eyeLayer.SensorSampleTime);
+        ovr_GetEyePoses(session, frameIndex, ovrTrue, layer.viewScaleDesc.HmdToEyeOffset, eyePoses, &layer.eyeLayer.SensorSampleTime);
+        
+        layer.eyeLayer.RenderPose[0] = eyePoses[0];
+        layer.eyeLayer.RenderPose[1] = eyePoses[1];
+#endif
         //----------------------------------------------------------------------------------
         //----------------------------------------------------------------------------------
 
 
         // Draw
         // Draw
         //----------------------------------------------------------------------------------
         //----------------------------------------------------------------------------------
-        int curIndex;
-        ovr_GetTextureSwapChainCurrentIndex(session, eyeTexture, &curIndex);
-        GLuint curTexId;
-        ovr_GetTextureSwapChainBufferGL(session, eyeTexture, curIndex, &curTexId);
-        glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbo);
-        glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, curTexId, 0);
-        
-        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-        
+#if defined(PLATFORM_OCULUS)
+        SetOculusBuffer(session, buffer);
+#endif
+
+        rlClearScreenBuffers();             // Clear current framebuffers
+
+#if defined(PLATFORM_OCULUS)
         for (int eye = 0; eye < 2; eye++)
         for (int eye = 0; eye < 2; eye++)
         {
         {
-            glViewport(eyeLayer.Viewport[eye].Pos.x, eyeLayer.Viewport[eye].Pos.y, 
-                       eyeLayer.Viewport[eye].Size.w, eyeLayer.Viewport[eye].Size.h);
-            eyeLayer.RenderPose[eye] = eyePoses[eye];
+            glViewport(layer.eyeLayer.Viewport[eye].Pos.x, layer.eyeLayer.Viewport[eye].Pos.y, layer.eyeLayer.Viewport[eye].Size.w, layer.eyeLayer.Viewport[eye].Size.h);
+
+            Quaternion eyeRPose = (Quaternion){ eyePoses[eye].Orientation.x, eyePoses[eye].Orientation.y, eyePoses[eye].Orientation.z, eyePoses[eye].Orientation.w };
+            QuaternionInvert(&eyeRPose);
+            Matrix eyeOrientation = QuaternionToMatrix(eyeRPose);
+            Matrix eyeTranslation = MatrixTranslate(-eyePoses[eye].Position.x, -eyePoses[eye].Position.y, -eyePoses[eye].Position.z);
+
+            Matrix eyeView = MatrixMultiply(eyeTranslation, eyeOrientation);
+            Matrix modelview = MatrixMultiply(matView, eyeView);
+            Matrix mvp = MatrixMultiply(modelview, layer.eyeProjections[eye]);
+#else
+            // Calculate projection matrix (from perspective) and view matrix from camera look at
+            Matrix matProj = MatrixPerspective(camera.fovy, (double)screenWidth/(double)screenHeight, 0.01, 1000.0);
+            MatrixTranspose(&matProj);
+            Matrix matView = MatrixLookAt(camera.position, camera.target, camera.up);
+            Matrix mvp = MatrixMultiply(matView, matProj);
+#endif
+            DrawCube(cubePosition, 2.0f, 2.0f, 2.0f, RED);
+            DrawCubeWires(cubePosition, 2.0f, 2.0f, 2.0f, RAYWHITE);
+            DrawGrid(10, 1.0f);
+
+            // NOTE: Internal buffers drawing (3D data)
+            rlglDraw(mvp);
             
             
-            // Convert struct ovrPosef { ovrQuatf Orientation; ovrVector3f Position; } to Matrix 
-            // TODO: Review maths!
-            Matrix eyeOrientation = QuaternionToMatrix((Quaternion){ -eyePoses[eye].Orientation.x, -eyePoses[eye].Orientation.y, -eyePoses[eye].Orientation.z, -eyePoses[eye].Orientation.w });
-            Matrix eyePosition = MatrixTranslate(-eyePoses[eye].Position.x, -eyePoses[eye].Position.y, -eyePoses[eye].Position.z);
-            Matrix mvp = MatrixMultiply(eyeProjections[eye], MatrixMultiply(eyeOrientation, eyePosition));
-
-            // NOTE: Nothing is drawn until rlglDraw()
-            DrawRectangleV(position, size, color);
-            //DrawCube(cubePosition, 2.0f, 2.0f, 2.0f, color);
-            //DrawGrid(10, 1.0f);
+            matProj = MatrixOrtho(0.0, screenWidth, screenHeight, 0.0, 0.0, 1.0);
+            MatrixTranspose(&matProj);
+            matView = MatrixIdentity();
+            mvp = MatrixMultiply(matView, matProj);
             
             
-            // NOTE: rlglDraw() must be modified to support an external modelview-projection matrix
-            // TODO: Still working on it (now uses internal mvp)
+            // TODO: 2D drawing on Oculus Rift: requires an ovrLayerQuad layer
+            DrawRectangleV((Vector2){ 10.0f, 10.0f }, (Vector2){ 300.0f, 20.0f }, DARKGRAY);
+
+            // NOTE: Internal buffers drawing (2D data)
             rlglDraw(mvp);
             rlglDraw(mvp);
+            
+#if defined(PLATFORM_OCULUS)
         }
         }
         
         
-        glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 0, 0);
-        glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
-        ovr_CommitTextureSwapChain(session, eyeTexture);
-        ovrLayerHeader *headerList = &eyeLayer.Header;
-        ovr_SubmitFrame(session, frame, &viewScaleDesc, &headerList, 1);
+        UnsetOculusBuffer(buffer);
+        
+        ovr_CommitTextureSwapChain(session, buffer.textureChain);
+        
+        ovrLayerHeader *layers = &layer.eyeLayer.Header;
+        ovr_SubmitFrame(session, frameIndex, &layer.viewScaleDesc, &layers, 1);
 
 
         // Blit mirror texture to back buffer
         // Blit mirror texture to back buffer
-        GLuint mirrorTextureId;
-        ovr_GetMirrorTextureBufferGL(session, mirrorTexture, &mirrorTextureId);
-        glBindFramebuffer(GL_READ_FRAMEBUFFER, mirrorFbo);
-        glFramebufferTexture2D(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, mirrorTextureId, 0);
-        glBlitFramebuffer(0, 0, mirrorSize.x, mirrorSize.y, 0, mirrorSize.y, mirrorSize.x, 0, GL_COLOR_BUFFER_BIT, GL_NEAREST);
-        glBindFramebuffer(GL_READ_FRAMEBUFFER, 0);
+        BlitOculusMirror(session, mirror);
+
+        // Get session status information
+        ovrSessionStatus sessionStatus;
+        ovr_GetSessionStatus(session, &sessionStatus);
+        if (sessionStatus.ShouldQuit) TraceLog(LOG_WARNING, "OVR: Session should quit...");
+        if (sessionStatus.ShouldRecenter) ovr_RecenterTrackingOrigin(session);
+#endif
 
 
-        
         glfwSwapBuffers(window);
         glfwSwapBuffers(window);
         glfwPollEvents();
         glfwPollEvents();
         //----------------------------------------------------------------------------------
         //----------------------------------------------------------------------------------
@@ -307,20 +297,20 @@ int main()
 
 
     // De-Initialization
     // De-Initialization
     //--------------------------------------------------------------------------------------
     //--------------------------------------------------------------------------------------
-    if (mirrorFbo) glDeleteFramebuffers(1, &mirrorFbo);
-    if (mirrorTexture) ovr_DestroyMirrorTexture(session, mirrorTexture);
-
-    if (fbo) glDeleteFramebuffers(1, &fbo);
-    if (depthBuffer) glDeleteTextures(1, &depthBuffer);
-    if (eyeTexture) ovr_DestroyTextureSwapChain(session, eyeTexture);
+#if defined(PLATFORM_OCULUS)
+    UnloadOculusMirror(session, mirror);    // Unload Oculus mirror buffer
+    UnloadOculusBuffer(session, buffer);    // Unload Oculus texture buffers
+#endif
 
 
-    rlglClose();
+    rlglClose();                            // Unload rlgl internal buffers and default shader/texture
     
     
     glfwDestroyWindow(window);
     glfwDestroyWindow(window);
     glfwTerminate();
     glfwTerminate();
     
     
+#if defined(PLATFORM_OCULUS)
     ovr_Destroy(session);   // Must be called after glfwTerminate()
     ovr_Destroy(session);   // Must be called after glfwTerminate()
     ovr_Shutdown();
     ovr_Shutdown();
+#endif
     //--------------------------------------------------------------------------------------
     //--------------------------------------------------------------------------------------
     
     
     return 0;
     return 0;
@@ -330,24 +320,22 @@ int main()
 // Module specific Functions Definitions
 // Module specific Functions Definitions
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------
 
 
-// Draw rectangle using rlgl OpenGL 1.1 style coding (translated to OpenGL 3.3 internally)
-static void DrawRectangleV(Vector2 position, Vector2 size, Color color)
+// GLFW3: Error callback
+static void ErrorCallback(int error, const char* description)
 {
 {
-    rlBegin(RL_TRIANGLES);
-        rlColor4ub(color.r, color.g, color.b, color.a);
-
-        rlVertex2i(position.x, position.y);
-        rlVertex2i(position.x, position.y + size.y);
-        rlVertex2i(position.x + size.x, position.y + size.y);
+    TraceLog(LOG_ERROR, description);
+}
 
 
-        rlVertex2i(position.x, position.y);
-        rlVertex2i(position.x + size.x, position.y + size.y);
-        rlVertex2i(position.x + size.x, position.y);
-    rlEnd();
+// GLFW3: Keyboard callback
+static void KeyCallback(GLFWwindow* window, int key, int scancode, int action, int mods)
+{
+    if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
+    {
+        glfwSetWindowShouldClose(window, GL_TRUE);
+    }
 }
 }
 
 
 // Output a trace log message
 // Output a trace log message
-// NOTE: Expected msgType: (0)Info, (1)Error, (2)Warning
 static void TraceLog(int msgType, const char *text, ...)
 static void TraceLog(int msgType, const char *text, ...)
 {
 {
     va_list args;
     va_list args;
@@ -370,30 +358,52 @@ static void TraceLog(int msgType, const char *text, ...)
     //if (msgType == LOG_ERROR) exit(1);
     //if (msgType == LOG_ERROR) exit(1);
 }
 }
 
 
-static Matrix FromOvrMatrix(ovrMatrix4f ovrmat)
+// Draw rectangle using rlgl OpenGL 1.1 style coding (translated to OpenGL 3.3 internally)
+static void DrawRectangleV(Vector2 position, Vector2 size, Color color)
 {
 {
-    Matrix rmat;
-    
-    rmat.m0 = ovrmat.M[0][0];
-    rmat.m1 = ovrmat.M[1][0];
-    rmat.m2 = ovrmat.M[2][0];
-    rmat.m3 = ovrmat.M[3][0];
-    rmat.m4 = ovrmat.M[0][1];
-    rmat.m5 = ovrmat.M[1][1];
-    rmat.m6 = ovrmat.M[2][1];
-    rmat.m7 = ovrmat.M[3][1];
-    rmat.m8 = ovrmat.M[0][2];
-    rmat.m9 = ovrmat.M[1][2];
-    rmat.m10 = ovrmat.M[2][2];
-    rmat.m11 = ovrmat.M[3][2];
-    rmat.m12 = ovrmat.M[0][3];
-    rmat.m13 = ovrmat.M[1][3];
-    rmat.m14 = ovrmat.M[2][3];
-    rmat.m15 = ovrmat.M[3][3];
-    
-    //MatrixTranspose(&rmat);
-    
-    return rmat;
+    rlBegin(RL_TRIANGLES);
+        rlColor4ub(color.r, color.g, color.b, color.a);
+
+        rlVertex2i(position.x, position.y);
+        rlVertex2i(position.x, position.y + size.y);
+        rlVertex2i(position.x + size.x, position.y + size.y);
+
+        rlVertex2i(position.x, position.y);
+        rlVertex2i(position.x + size.x, position.y + size.y);
+        rlVertex2i(position.x + size.x, position.y);
+    rlEnd();
+}
+
+// Draw a grid centered at (0, 0, 0)
+static void DrawGrid(int slices, float spacing)
+{
+    int halfSlices = slices / 2;
+
+    rlBegin(RL_LINES);
+        for(int i = -halfSlices; i <= halfSlices; i++)
+        {
+            if (i == 0)
+            {
+                rlColor3f(0.5f, 0.5f, 0.5f);
+                rlColor3f(0.5f, 0.5f, 0.5f);
+                rlColor3f(0.5f, 0.5f, 0.5f);
+                rlColor3f(0.5f, 0.5f, 0.5f);
+            }
+            else
+            {
+                rlColor3f(0.75f, 0.75f, 0.75f);
+                rlColor3f(0.75f, 0.75f, 0.75f);
+                rlColor3f(0.75f, 0.75f, 0.75f);
+                rlColor3f(0.75f, 0.75f, 0.75f);
+            }
+
+            rlVertex3f((float)i*spacing, 0.0f, (float)-halfSlices*spacing);
+            rlVertex3f((float)i*spacing, 0.0f, (float)halfSlices*spacing);
+
+            rlVertex3f((float)-halfSlices*spacing, 0.0f, (float)i*spacing);
+            rlVertex3f((float)halfSlices*spacing, 0.0f, (float)i*spacing);
+        }
+    rlEnd();
 }
 }
 
 
 // Draw cube
 // Draw cube
@@ -471,34 +481,279 @@ void DrawCube(Vector3 position, float width, float height, float length, Color c
     rlPopMatrix();
     rlPopMatrix();
 }
 }
 
 
-// Draw a grid centered at (0, 0, 0)
-void DrawGrid(int slices, float spacing)
+// Draw cube wires
+void DrawCubeWires(Vector3 position, float width, float height, float length, Color color)
 {
 {
-    int halfSlices = slices / 2;
+    float x = 0.0f;
+    float y = 0.0f;
+    float z = 0.0f;
 
 
-    rlBegin(RL_LINES);
-        for(int i = -halfSlices; i <= halfSlices; i++)
-        {
-            if (i == 0)
-            {
-                rlColor3f(0.5f, 0.5f, 0.5f);
-                rlColor3f(0.5f, 0.5f, 0.5f);
-                rlColor3f(0.5f, 0.5f, 0.5f);
-                rlColor3f(0.5f, 0.5f, 0.5f);
-            }
-            else
-            {
-                rlColor3f(0.75f, 0.75f, 0.75f);
-                rlColor3f(0.75f, 0.75f, 0.75f);
-                rlColor3f(0.75f, 0.75f, 0.75f);
-                rlColor3f(0.75f, 0.75f, 0.75f);
-            }
+    rlPushMatrix();
 
 
-            rlVertex3f((float)i*spacing, 0.0f, (float)-halfSlices*spacing);
-            rlVertex3f((float)i*spacing, 0.0f, (float)halfSlices*spacing);
+        rlTranslatef(position.x, position.y, position.z);
+        //rlRotatef(45, 0, 1, 0);
 
 
-            rlVertex3f((float)-halfSlices*spacing, 0.0f, (float)i*spacing);
-            rlVertex3f((float)halfSlices*spacing, 0.0f, (float)i*spacing);
-        }
-    rlEnd();
+        rlBegin(RL_LINES);
+            rlColor4ub(color.r, color.g, color.b, color.a);
+
+            // Front Face -----------------------------------------------------
+            // Bottom Line
+            rlVertex3f(x-width/2, y-height/2, z+length/2);  // Bottom Left
+            rlVertex3f(x+width/2, y-height/2, z+length/2);  // Bottom Right
+
+            // Left Line
+            rlVertex3f(x+width/2, y-height/2, z+length/2);  // Bottom Right
+            rlVertex3f(x+width/2, y+height/2, z+length/2);  // Top Right
+
+            // Top Line
+            rlVertex3f(x+width/2, y+height/2, z+length/2);  // Top Right
+            rlVertex3f(x-width/2, y+height/2, z+length/2);  // Top Left
+
+            // Right Line
+            rlVertex3f(x-width/2, y+height/2, z+length/2);  // Top Left
+            rlVertex3f(x-width/2, y-height/2, z+length/2);  // Bottom Left
+
+            // Back Face ------------------------------------------------------
+            // Bottom Line
+            rlVertex3f(x-width/2, y-height/2, z-length/2);  // Bottom Left
+            rlVertex3f(x+width/2, y-height/2, z-length/2);  // Bottom Right
+
+            // Left Line
+            rlVertex3f(x+width/2, y-height/2, z-length/2);  // Bottom Right
+            rlVertex3f(x+width/2, y+height/2, z-length/2);  // Top Right
+
+            // Top Line
+            rlVertex3f(x+width/2, y+height/2, z-length/2);  // Top Right
+            rlVertex3f(x-width/2, y+height/2, z-length/2);  // Top Left
+
+            // Right Line
+            rlVertex3f(x-width/2, y+height/2, z-length/2);  // Top Left
+            rlVertex3f(x-width/2, y-height/2, z-length/2);  // Bottom Left
+
+            // Top Face -------------------------------------------------------
+            // Left Line
+            rlVertex3f(x-width/2, y+height/2, z+length/2);  // Top Left Front
+            rlVertex3f(x-width/2, y+height/2, z-length/2);  // Top Left Back
+
+            // Right Line
+            rlVertex3f(x+width/2, y+height/2, z+length/2);  // Top Right Front
+            rlVertex3f(x+width/2, y+height/2, z-length/2);  // Top Right Back
+
+            // Bottom Face  ---------------------------------------------------
+            // Left Line
+            rlVertex3f(x-width/2, y-height/2, z+length/2);  // Top Left Front
+            rlVertex3f(x-width/2, y-height/2, z-length/2);  // Top Left Back
+
+            // Right Line
+            rlVertex3f(x+width/2, y-height/2, z+length/2);  // Top Right Front
+            rlVertex3f(x+width/2, y-height/2, z-length/2);  // Top Right Back
+        rlEnd();
+    rlPopMatrix();
+}
+
+#if defined(PLATFORM_OCULUS)
+// Convert from Oculus ovrMatrix4f struct to raymath Matrix struct
+static Matrix FromOvrMatrix(ovrMatrix4f ovrmat)
+{
+    Matrix rmat;
+    
+    rmat.m0 = ovrmat.M[0][0];
+    rmat.m1 = ovrmat.M[1][0];
+    rmat.m2 = ovrmat.M[2][0];
+    rmat.m3 = ovrmat.M[3][0];
+    rmat.m4 = ovrmat.M[0][1];
+    rmat.m5 = ovrmat.M[1][1];
+    rmat.m6 = ovrmat.M[2][1];
+    rmat.m7 = ovrmat.M[3][1];
+    rmat.m8 = ovrmat.M[0][2];
+    rmat.m9 = ovrmat.M[1][2];
+    rmat.m10 = ovrmat.M[2][2];
+    rmat.m11 = ovrmat.M[3][2];
+    rmat.m12 = ovrmat.M[0][3];
+    rmat.m13 = ovrmat.M[1][3];
+    rmat.m14 = ovrmat.M[2][3];
+    rmat.m15 = ovrmat.M[3][3];
+    
+    MatrixTranspose(&rmat);
+    
+    return rmat;
+}
+
+// Load Oculus required buffers: texture-swap-chain, fbo, texture-depth
+static OculusBuffer LoadOculusBuffer(ovrSession session, int width, int height)
+{
+    OculusBuffer buffer;
+    buffer.width = width;
+    buffer.height = height;
+    
+    // Create OVR texture chain
+    ovrTextureSwapChainDesc desc = {};
+    desc.Type = ovrTexture_2D;
+    desc.ArraySize = 1;
+    desc.Width = width;
+    desc.Height = height;
+    desc.MipLevels = 1;
+    desc.Format = OVR_FORMAT_R8G8B8A8_UNORM_SRGB;
+    desc.SampleCount = 1;
+    desc.StaticImage = ovrFalse;
+
+    ovrResult result = ovr_CreateTextureSwapChainGL(session, &desc, &buffer.textureChain);
+    
+    //eyeLayer.ColorTexture[0] = buffer.textureChain;      // <------------------- ???
+    
+    if (!OVR_SUCCESS(result)) TraceLog(LOG_WARNING, "OVR: Failed to create swap textures buffer");
+
+    int textureCount = 0;
+    ovr_GetTextureSwapChainLength(session, buffer.textureChain, &textureCount);
+    
+    if (!OVR_SUCCESS(result) || !textureCount) TraceLog(LOG_WARNING, "OVR: Unable to count swap chain textures");
+
+    for (int i = 0; i < textureCount; ++i)
+    {
+        GLuint chainTexId;
+        ovr_GetTextureSwapChainBufferGL(session, buffer.textureChain, i, &chainTexId);
+        glBindTexture(GL_TEXTURE_2D, chainTexId);
+        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+    }
+    
+    glBindTexture(GL_TEXTURE_2D, 0);
+    
+    /*
+    // Setup framebuffer object (using depth texture)
+    glGenFramebuffers(1, &buffer.fboId);
+    glGenTextures(1, &buffer.depthId);
+    glBindTexture(GL_TEXTURE_2D, buffer.depthId);
+    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+    glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT16, buffer.width, buffer.height, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, NULL);
+    */
+    
+    // Setup framebuffer object (using depth renderbuffer)
+    glGenFramebuffers(1, &buffer.fboId);
+    glGenRenderbuffers(1, &buffer.depthId);
+    glBindFramebuffer(GL_DRAW_FRAMEBUFFER, buffer.fboId);
+    glBindRenderbuffer(GL_RENDERBUFFER, buffer.depthId);
+    glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, buffer.width, buffer.height);
+    glBindRenderbuffer(GL_RENDERBUFFER, 0);
+    glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, buffer.depthId);
+    glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
+
+    return buffer;
+}
+
+// Unload texture required buffers
+static void UnloadOculusBuffer(ovrSession session, OculusBuffer buffer)
+{
+    if (buffer.textureChain)
+    {
+        ovr_DestroyTextureSwapChain(session, buffer.textureChain);
+        buffer.textureChain = NULL;
+    }
+
+    if (buffer.depthId != 0) glDeleteTextures(1, &buffer.depthId);
+    if (buffer.fboId != 0) glDeleteFramebuffers(1, &buffer.fboId);
+}
+
+// Set current Oculus buffer
+static void SetOculusBuffer(ovrSession session, OculusBuffer buffer)
+{
+    GLuint currentTexId;
+    int currentIndex;
+    
+    ovr_GetTextureSwapChainCurrentIndex(session, buffer.textureChain, &currentIndex);
+    ovr_GetTextureSwapChainBufferGL(session, buffer.textureChain, currentIndex, &currentTexId);
+
+    glBindFramebuffer(GL_DRAW_FRAMEBUFFER, buffer.fboId);
+    glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, currentTexId, 0);
+    //glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, buffer.depthId, 0);    // Already binded
+
+    //glViewport(0, 0, buffer.width, buffer.height);
+    //glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+    //glEnable(GL_FRAMEBUFFER_SRGB);
+}
+
+// Unset Oculus buffer
+static void UnsetOculusBuffer(OculusBuffer buffer)
+{
+    glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 0, 0);
+    glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
+}
+
+// Load Oculus mirror buffers
+static OculusMirror LoadOculusMirror(ovrSession session, int width, int height)
+{
+    OculusMirror mirror;
+    mirror.width = width;
+    mirror.height = height;
+    
+    ovrMirrorTextureDesc mirrorDesc;
+    memset(&mirrorDesc, 0, sizeof(mirrorDesc));
+    mirrorDesc.Format = OVR_FORMAT_R8G8B8A8_UNORM_SRGB;
+    mirrorDesc.Width = mirror.width;
+    mirrorDesc.Height = mirror.height;
+    
+    if (!OVR_SUCCESS(ovr_CreateMirrorTextureGL(session, &mirrorDesc, &mirror.texture))) TraceLog(LOG_WARNING, "Could not create mirror texture");
+
+    glGenFramebuffers(1, &mirror.fboId);
+
+    return mirror;
+}
+
+// Unload Oculus mirror buffers
+static void UnloadOculusMirror(ovrSession session, OculusMirror mirror)
+{
+    if (mirror.fboId != 0) glDeleteFramebuffers(1, &mirror.fboId);
+    if (mirror.texture) ovr_DestroyMirrorTexture(session, mirror.texture);
+}
+
+static void BlitOculusMirror(ovrSession session, OculusMirror mirror)
+{
+    GLuint mirrorTextureId;
+    
+    ovr_GetMirrorTextureBufferGL(session, mirror.texture, &mirrorTextureId);
+    
+    glBindFramebuffer(GL_READ_FRAMEBUFFER, mirror.fboId);
+    glFramebufferTexture2D(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, mirrorTextureId, 0);
+    glBlitFramebuffer(0, 0, mirror.width, mirror.height, 0, mirror.height, mirror.width, 0, GL_COLOR_BUFFER_BIT, GL_NEAREST);
+    glBindFramebuffer(GL_READ_FRAMEBUFFER, 0);
+}
+
+// Requires: session, hmdDesc
+static OculusLayer InitOculusLayer(ovrSession session)
+{
+    OculusLayer layer = { 0 };
+    
+    layer.viewScaleDesc.HmdSpaceToWorldScaleInMeters = 1.0f;
+
+    memset(&layer.eyeLayer, 0, sizeof(ovrLayerEyeFov));
+    layer.eyeLayer.Header.Type = ovrLayerType_EyeFov;
+    layer.eyeLayer.Header.Flags = ovrLayerFlag_TextureOriginAtBottomLeft;
+
+    ovrEyeRenderDesc eyeRenderDescs[2];
+    
+    for (int eye = 0; eye < 2; eye++)
+    {
+        eyeRenderDescs[eye] = ovr_GetRenderDesc(session, eye, hmdDesc.DefaultEyeFov[eye]);
+        ovrMatrix4f ovrPerspectiveProjection = ovrMatrix4f_Projection(eyeRenderDescs[eye].Fov, 0.01f, 10000.0f, ovrProjection_None); //ovrProjection_ClipRangeOpenGL);
+        layer.eyeProjections[eye] = FromOvrMatrix(ovrPerspectiveProjection);      // NOTE: struct ovrMatrix4f { float M[4][4] } --> struct Matrix
+
+        layer.viewScaleDesc.HmdToEyeOffset[eye] = eyeRenderDescs[eye].HmdToEyeOffset;
+        layer.eyeLayer.Fov[eye] = eyeRenderDescs[eye].Fov;
+        
+        ovrSizei eyeSize = ovr_GetFovTextureSize(session, eye, layer.eyeLayer.Fov[eye], 1.0f);
+        layer.eyeLayer.Viewport[eye].Size = eyeSize;
+        layer.eyeLayer.Viewport[eye].Pos.x = layer.width;
+        layer.eyeLayer.Viewport[eye].Pos.y = 0;
+
+        layer.height = eyeSize.h;     //std::max(renderTargetSize.y, (uint32_t)eyeSize.h);
+        layer.width += eyeSize.w;
+    }
+    
+    return layer;
 }
 }
+#endif

+ 0 - 498
examples/oculus_glfw_sample/oculus_glfw_sample.old.c

@@ -1,498 +0,0 @@
-/*******************************************************************************************
-*
-*   raylib Oculus minimum sample (OpenGL 3.3 Core)
-*
-*   NOTE: This example requires raylib module [rlgl]
-*
-*   Compile rlgl using:
-*   gcc -c rlgl.c -Wall -std=c99 -DRLGL_STANDALONE -DRAYMATH_IMPLEMENTATION -DGRAPHICS_API_OPENGL_33
-*
-*   Compile example using:
-*   gcc -o oculus_glfw_sample.exe oculus_glfw_sample.c rlgl.o glad.o -L. -lLibOVRRT32_1 -lglfw3 -lopengl32 -lgdi32 -std=c99
-*
-*   This example has been created using raylib 1.5 (www.raylib.com)
-*   raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
-*
-*   Copyright (c) 2015 Ramon Santamaria (@raysan5)
-*
-********************************************************************************************/
-
-#if defined(_WIN32)
-    #define GLFW_EXPOSE_NATIVE_WIN32
-    #define GLFW_EXPOSE_NATIVE_WGL
-    #define OVR_OS_WIN32
-#elif defined(__APPLE__)
-    #define GLFW_EXPOSE_NATIVE_COCOA
-    #define GLFW_EXPOSE_NATIVE_NSGL
-    #define OVR_OS_MAC
-#elif defined(__linux__)
-    #define GLFW_EXPOSE_NATIVE_X11
-    #define GLFW_EXPOSE_NATIVE_GLX
-    #define OVR_OS_LINUX
-#endif
-
-#include "glad.h"      // Extensions loading library
-
-#include <GLFW/glfw3.h>
-#include <GLFW/glfw3native.h>
-
-#include "OculusSDK/LibOVR/Include/OVR_CAPI_GL.h"    // Oculus SDK for OpenGL
-
-//#include "GL/CAPI_GLE.h"        // stripped-down GLEW/GLAD library to manage extensions (really required?)
-//#include "Extras/OVR_Math.h"    // math utilities C++ (really required?)
-
-#define RLGL_STANDALONE
-#include "rlgl.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-
-//----------------------------------------------------------------------------------
-// Types and Structures Definition
-//----------------------------------------------------------------------------------
-typedef struct OculusBuffer {
-    ovrTextureSwapChain textureChain;
-    GLuint depthId;
-    GLuint fboId;
-    int width;
-    int height;
-} OculusBuffer;
-
-typedef enum { LOG_INFO = 0, LOG_ERROR, LOG_WARNING, LOG_DEBUG, LOG_OTHER } TraceLogType;
-
-//----------------------------------------------------------------------------------
-// Module specific Functions Declaration
-//----------------------------------------------------------------------------------
-static OculusBuffer LoadOculusBuffer(ovrSession session, int width, int height);
-static void UnloadOculusBuffer(ovrSession session, OculusBuffer buffer);
-static void SetOculusBuffer(ovrSession session, OculusBuffer buffer);
-static void UnsetOculusBuffer(OculusBuffer buffer);
-
-static void ErrorCallback(int error, const char* description)
-{
-    fputs(description, stderr);
-}
-
-static void KeyCallback(GLFWwindow* window, int key, int scancode, int action, int mods)
-{
-    if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
-    {
-        glfwSetWindowShouldClose(window, GL_TRUE);
-    }
-}
-
-static void DrawRectangleV(Vector2 position, Vector2 size, Color color);
-static void TraceLog(int msgType, const char *text, ...);
-
-//----------------------------------------------------------------------------------
-// Main Entry point
-//----------------------------------------------------------------------------------
-int main()
-{
-    // Initialization
-    //--------------------------------------------------------------------------------------
-    ovrSession session;
-    ovrGraphicsLuid luid;   // Useless for OpenGL since SDK 0.7
-    ovrHmdDesc hmdDesc;
-    
-    ovrResult result = ovr_Initialize(NULL);
-    if (OVR_FAILURE(result)) TraceLog(LOG_ERROR, "OVR: Could not initialize Oculus device");
-
-    result = ovr_Create(&session, &luid);
-    if (OVR_FAILURE(result))
-    {
-        TraceLog(LOG_WARNING, "OVR: Could not create Oculus session");
-        ovr_Shutdown();
-    }
-
-    hmdDesc = ovr_GetHmdDesc(session);
-    
-    TraceLog(LOG_INFO, "OVR: Product Name: %s", hmdDesc.ProductName);
-    TraceLog(LOG_INFO, "OVR: Manufacturer: %s", hmdDesc.Manufacturer);
-    TraceLog(LOG_INFO, "OVR: Product ID: %i", hmdDesc.ProductId);
-    TraceLog(LOG_INFO, "OVR: Product Type: %i", hmdDesc.Type);
-    TraceLog(LOG_INFO, "OVR: Serian Number: %s", hmdDesc.SerialNumber);
-    TraceLog(LOG_INFO, "OVR: Resolution: %ix%i", hmdDesc.Resolution.w, hmdDesc.Resolution.h);
-    
-    int screenWidth = hmdDesc.Resolution.w/2 + 100;		// Added 100 pixels for testing
-    int screenHeight = hmdDesc.Resolution.h/2 + 100;	// Added 100 pixels for testing
-
-    // GLFW3 Initialization + OpenGL 3.3 Context + Extensions
-    //--------------------------------------------------------
-    GLFWwindow *window;
-    
-    glfwSetErrorCallback(ErrorCallback);
-    
-    if (!glfwInit())
-    {
-        TraceLog(LOG_WARNING, "GLFW3: Can not initialize GLFW");
-        exit(EXIT_FAILURE);
-    }
-    else TraceLog(LOG_INFO, "GLFW3: GLFW initialized successfully");
-    
-    glfwWindowHint(GLFW_DEPTH_BITS, 16);
-    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
-    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
-    //glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
-    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
-    glfwWindowHint(GLFW_OPENGL_DEBUG_CONTEXT, GL_TRUE);
-    glfwWindowHint(GLFW_DECORATED, GL_FALSE);   // Mandatory on Oculus Rift to avoid program crash!
-   
-    window = glfwCreateWindow(screenWidth, screenHeight, "rlgl standalone", NULL, NULL);
-    
-    if (!window)
-    {
-        glfwTerminate();
-        exit(EXIT_FAILURE);
-    }
-    else TraceLog(LOG_INFO, "GLFW3: Window created successfully");
-    
-    glfwSetKeyCallback(window, KeyCallback);
-    
-    glfwMakeContextCurrent(window);
-    glfwSwapInterval(0);
-
-    if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
-    {
-        TraceLog(LOG_WARNING, "GLAD: Cannot load OpenGL extensions");
-        exit(1);
-    }
-    else TraceLog(LOG_INFO, "GLAD: OpenGL extensions loaded successfully");
-    
-    rlglInit();
-    rlglInitGraphics(0, 0, screenWidth, screenHeight);
-    rlClearColor(245, 245, 245, 255); // Define clear color
-    
-    Vector2 position = { screenWidth/2 - 100, screenHeight/2 - 100 };
-    Vector2 size = { 200, 200 };
-    Color color = { 180, 20, 20, 255 };
-    //---------------------------------------------------------------------------
-    
-    OculusBuffer eyeRenderBuffer[2];
-
-    GLuint mirrorFBO = 0;
-    ovrMirrorTexture mirrorTexture = NULL;
-
-    bool isVisible = true;
-    long long frameIndex = 0;
-
-    // Make eyes render buffers
-    ovrSizei recommendedTexSizeLeft = ovr_GetFovTextureSize(session, ovrEye_Left, hmdDesc.DefaultEyeFov[0], 1.0f);
-    eyeRenderBuffer[0] = LoadOculusBuffer(session, recommendedTexSizeLeft.w, recommendedTexSizeLeft.h);
-    ovrSizei recommendedTexSizeRight = ovr_GetFovTextureSize(session, ovrEye_Right, hmdDesc.DefaultEyeFov[1], 1.0f);
-    eyeRenderBuffer[1] = LoadOculusBuffer(session, recommendedTexSizeRight.w, recommendedTexSizeRight.h);
-    
-    // Note: the mirror window can be any size, for this sample we use 1/2 the HMD resolution
-    ovrSizei windowSize = { hmdDesc.Resolution.w/2, hmdDesc.Resolution.h/2 };
-
-    // Define mirror texture descriptor
-    ovrMirrorTextureDesc mirrorDesc;
-    memset(&mirrorDesc, 0, sizeof(mirrorDesc));
-    mirrorDesc.Width = windowSize.w;
-    mirrorDesc.Height = windowSize.h;
-    mirrorDesc.Format = OVR_FORMAT_R8G8B8A8_UNORM_SRGB;
-
-    // Create mirror texture and an FBO used to copy mirror texture to back buffer
-    result = ovr_CreateMirrorTextureGL(session, &mirrorDesc, &mirrorTexture);
-    if (!OVR_SUCCESS(result)) TraceLog(LOG_WARNING, "OVR: Failed to create mirror texture");
-
-    // Configure the mirror read buffer
-    GLuint texId;
-    ovr_GetMirrorTextureBufferGL(session, mirrorTexture, &texId);
-
-    glGenFramebuffers(1, &mirrorFBO);
-    glBindFramebuffer(GL_READ_FRAMEBUFFER, mirrorFBO);
-    glFramebufferTexture2D(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texId, 0);
-    glFramebufferRenderbuffer(GL_READ_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, 0);
-    glBindFramebuffer(GL_READ_FRAMEBUFFER, 0);
-    
-    if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
-    {
-        glDeleteFramebuffers(1, &mirrorFBO);
-        TraceLog(LOG_WARNING, "OVR: Could not initialize mirror framebuffers");
-    }
-    
-    glClearColor(1.0f, 0.1f, 0.1f, 0.0f);
-    glEnable(GL_DEPTH_TEST);
-    ovr_RecenterTrackingOrigin(session);
-    
-    // FloorLevel will give tracking poses where the floor height is 0
-    ovr_SetTrackingOriginType(session, ovrTrackingOrigin_FloorLevel);
-    //--------------------------------------------------------------------------------------
-
-    // Main loop
-    while (!glfwWindowShouldClose(window))
-    {
-        // Update
-        //----------------------------------------------------------------------------------
-        frameIndex++;
-        
-        // TODO: Update game here!
-        
-	    // Call ovr_GetRenderDesc each frame to get the ovrEyeRenderDesc, as the returned values (e.g. HmdToEyeOffset) may change at runtime.
-	    ovrEyeRenderDesc eyeRenderDesc[2];
-	    eyeRenderDesc[0] = ovr_GetRenderDesc(session, ovrEye_Left, hmdDesc.DefaultEyeFov[0]);
-	    eyeRenderDesc[1] = ovr_GetRenderDesc(session, ovrEye_Right, hmdDesc.DefaultEyeFov[1]);
-
-        // Get eye poses, feeding in correct IPD offset
-        ovrPosef eyeRenderPose[2];
-        ovrVector3f hmdToEyeOffset[2] = { eyeRenderDesc[0].HmdToEyeOffset, eyeRenderDesc[1].HmdToEyeOffset };
-
-        double sensorSampleTime;    // sensorSampleTime is fed into the layer later
-        ovr_GetEyePoses(session, frameIndex, ovrTrue, hmdToEyeOffset, eyeRenderPose, &sensorSampleTime);
-        //----------------------------------------------------------------------------------
-
-        // Draw
-        //----------------------------------------------------------------------------------
-        
-        // Clear screen to red color
-        glClearColor(1.0f, 0.1f, 0.1f, 0.0f);   
-        //glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-        
-        if (isVisible)
-        {
-            for (int eye = 0; eye < 2; ++eye)
-            {
-                SetOculusBuffer(session, eyeRenderBuffer[eye]);
-
-                // TODO: Get view and projection matrices for the eye
-                // Sample using Oculus OVR_Math.h (C++)
-                /*
-                Matrix4f projection[eye] = Matrix4f(ovrMatrix4f_Projection(eyeRenderDesc[eye].Fov, 0.01f, 10000.0f, ovrProjection_None));
-                Matrix4f eyeOrientation[eye] = Matrix4f(Quatf(eyeRenderPose[eye].Orientation).Inverted());
-                Matrix4f eyePose[eye] = Matrix4f::Translation(-Vector3f(eyeRenderPose[eye].Position));
-                Matrix4f mvp = projection[eye]*eyeOrientation[eye]*eyePose[eye];
-				*/
-
-                // Sample using custom raymath.h (C) -INCOMPLETE-
-                /*
-                Matrix projection = MatrixPerspective(eyeRenderDesc[eye].Fov, ((double)screenWidth/(double)screenHeight), 0.01, 1000.0);
-                Matrix eyeOrientation = QuaternionToMatrix((Quaternion){ -eyeRenderPose[eye].Orientation.x, -eyeRenderPose[eye].Orientation.y, 
-                                                                         -eyeRenderPose[eye].Orientation.z, -eyeRenderPose[eye].Orientation.w });
-                Matrix eyePose = MatrixTranslate(-eyeRenderPose[eye].Position.x, -eyeRenderPose[eye].Position.y, -eyeRenderPose[eye].Position.z);
-                Matrix mvp = MatrixMultiply(projection, MatrixMultiply(eyeOrientation, eyePose));
-                */
-                
-                // Render everything
-                // TODO: Pass calculated mvp matrix to default shader to consider projection and orientation! 
-                //DrawRectangleV(position, size, color);
-                //rlglDraw();
-
-                UnsetOculusBuffer(eyeRenderBuffer[eye]);
-                
-                // Commit changes to the textures so they get picked up frame
-                ovr_CommitTextureSwapChain(session, eyeRenderBuffer[eye].textureChain);
-            }
-        }
-        
-        // Set up positional data
-        ovrViewScaleDesc viewScaleDesc;
-        viewScaleDesc.HmdSpaceToWorldScaleInMeters = 1.0f;
-        viewScaleDesc.HmdToEyeOffset[0] = hmdToEyeOffset[0];
-        viewScaleDesc.HmdToEyeOffset[1] = hmdToEyeOffset[1];
-
-        // Create the main eye layer
-        ovrLayerEyeFov eyeLayer;
-        eyeLayer.Header.Type  = ovrLayerType_EyeFov;
-        eyeLayer.Header.Flags = ovrLayerFlag_TextureOriginAtBottomLeft;   // Because OpenGL
-
-        for (int eye = 0; eye < 2; eye++)
-        {
-            eyeLayer.ColorTexture[eye] = eyeRenderBuffer[eye].textureChain;
-            eyeLayer.Viewport[eye] = (ovrRecti){ eyeRenderBuffer[eye].width, eyeRenderBuffer[eye].height };
-            eyeLayer.Fov[eye] = hmdDesc.DefaultEyeFov[eye];
-            eyeLayer.RenderPose[eye] = eyeRenderPose[eye];
-            eyeLayer.SensorSampleTime = sensorSampleTime;
-        }
-
-        // Append all the layers to global list
-        ovrLayerHeader *layerList = &eyeLayer.Header;
-        ovrResult result = ovr_SubmitFrame(session, frameIndex, NULL, &layerList, 1);
-        
-        // exit the rendering loop if submit returns an error, will retry on ovrError_DisplayLost
-        if (!OVR_SUCCESS(result)) return 1;
-
-        isVisible = (result == ovrSuccess);
-
-        // Get session status information
-        ovrSessionStatus sessionStatus;
-        ovr_GetSessionStatus(session, &sessionStatus);
-        if (sessionStatus.ShouldQuit) TraceLog(LOG_WARNING, "OVR: Session should quit.");
-        if (sessionStatus.ShouldRecenter) ovr_RecenterTrackingOrigin(session);
-        
-        // Blit mirror texture to back buffer
-        glBindFramebuffer(GL_READ_FRAMEBUFFER, mirrorFBO);
-        glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
-        GLint w = mirrorDesc.Width;
-        GLint h = mirrorDesc.Height;
-        glBlitFramebuffer(0, h, w, 0, 0, 0, w, h, GL_COLOR_BUFFER_BIT, GL_NEAREST);
-        glBindFramebuffer(GL_READ_FRAMEBUFFER, 0);
-        
-        glfwSwapBuffers(window);
-        glfwPollEvents();
-        //----------------------------------------------------------------------------------
-    }
-
-    // De-Initialization
-    //--------------------------------------------------------------------------------------
-    if (mirrorFBO) glDeleteFramebuffers(1, &mirrorFBO);
-    if (mirrorTexture) ovr_DestroyMirrorTexture(session, mirrorTexture);
-    for (int eye = 0; eye < 2; eye++) UnloadOculusBuffer(session, eyeRenderBuffer[eye]);
-    
-    rlglClose();
-    
-    glfwDestroyWindow(window);
-    glfwTerminate();
-    
-    ovr_Destroy(session);   // Must be called after glfwTerminate()
-    ovr_Shutdown();
-    //--------------------------------------------------------------------------------------
-    
-    return 0;
-}
-
-//----------------------------------------------------------------------------------
-// Module specific Functions Definitions
-//----------------------------------------------------------------------------------
-
-// Load Oculus required buffers: texture-swap-chain, fbo, texture-depth
-static OculusBuffer LoadOculusBuffer(ovrSession session, int width, int height)
-{
-    OculusBuffer buffer;
-    buffer.width = width;
-    buffer.height = height;
-    
-    // Create OVR texture chain
-    ovrTextureSwapChainDesc desc = {};
-    desc.Type = ovrTexture_2D;
-    desc.ArraySize = 1;
-    desc.Width = width;
-    desc.Height = height;
-    desc.MipLevels = 1;
-    desc.Format = OVR_FORMAT_R8G8B8A8_UNORM_SRGB;
-    desc.SampleCount = 1;
-    desc.StaticImage = ovrFalse;
-
-    ovrResult result = ovr_CreateTextureSwapChainGL(session, &desc, &buffer.textureChain);
-
-    int textureCount = 0;
-    ovr_GetTextureSwapChainLength(session, buffer.textureChain, &textureCount);
-
-    if (OVR_SUCCESS(result))
-    {
-        for (int i = 0; i < textureCount; ++i)
-        {
-            GLuint chainTexId;
-            ovr_GetTextureSwapChainBufferGL(session, buffer.textureChain, i, &chainTexId);
-            glBindTexture(GL_TEXTURE_2D, chainTexId);
-            
-            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
-            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
-            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
-            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
-        }
-    }
-    
-    // Generate framebuffer
-    glGenFramebuffers(1, &buffer.fboId);
-
-    // Create Depth texture
-    glGenTextures(1, &buffer.depthId);
-    glBindTexture(GL_TEXTURE_2D, buffer.depthId);
-    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
-    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
-    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
-    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
-
-    glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT16, buffer.width, buffer.height, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, NULL);
-
-    return buffer;
-}
-
-// Unload texture required buffers
-static void UnloadOculusBuffer(ovrSession session, OculusBuffer buffer)
-{
-    if (buffer.textureChain)
-    {
-        ovr_DestroyTextureSwapChain(session, buffer.textureChain);
-        buffer.textureChain = NULL;
-    }
-
-    if (buffer.depthId)
-    {
-        glDeleteTextures(1, &buffer.depthId);
-        buffer.depthId = 0;
-    }
-
-    if (buffer.fboId)
-    {
-        glDeleteFramebuffers(1, &buffer.fboId);
-        buffer.fboId = 0;
-    }
-}
-
-// Set current Oculus buffer
-static void SetOculusBuffer(ovrSession session, OculusBuffer buffer)
-{
-    GLuint currentTexId;
-    int currentIndex;
-    
-    ovr_GetTextureSwapChainCurrentIndex(session, buffer.textureChain, &currentIndex);
-    ovr_GetTextureSwapChainBufferGL(session, buffer.textureChain, currentIndex, &currentTexId);
-
-    glBindFramebuffer(GL_FRAMEBUFFER, buffer.fboId);
-    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, currentTexId, 0);
-    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, buffer.depthId, 0);
-
-    glViewport(0, 0, buffer.width, buffer.height);
-    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-    glEnable(GL_FRAMEBUFFER_SRGB);
-}
-
-// Unset Oculus buffer
-static void UnsetOculusBuffer(OculusBuffer buffer)
-{
-    glBindFramebuffer(GL_FRAMEBUFFER, buffer.fboId);
-    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 0, 0);
-    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, 0, 0);
-}
-
-// Draw rectangle using rlgl OpenGL 1.1 style coding (translated to OpenGL 3.3 internally)
-static void DrawRectangleV(Vector2 position, Vector2 size, Color color)
-{
-    rlBegin(RL_TRIANGLES);
-        rlColor4ub(color.r, color.g, color.b, color.a);
-
-        rlVertex2i(position.x, position.y);
-        rlVertex2i(position.x, position.y + size.y);
-        rlVertex2i(position.x + size.x, position.y + size.y);
-
-        rlVertex2i(position.x, position.y);
-        rlVertex2i(position.x + size.x, position.y + size.y);
-        rlVertex2i(position.x + size.x, position.y);
-    rlEnd();
-}
-
-// Output a trace log message
-// NOTE: Expected msgType: (0)Info, (1)Error, (2)Warning
-static void TraceLog(int msgType, const char *text, ...)
-{
-    va_list args;
-    va_start(args, text);
-
-    switch(msgType)
-    {
-        case LOG_INFO: fprintf(stdout, "INFO: "); break;
-        case LOG_ERROR: fprintf(stdout, "ERROR: "); break;
-        case LOG_WARNING: fprintf(stdout, "WARNING: "); break;
-        case LOG_DEBUG: fprintf(stdout, "DEBUG: "); break;
-        default: break;
-    }
-
-    vfprintf(stdout, text, args);
-    fprintf(stdout, "\n");
-
-    va_end(args);
-
-    //if (msgType == LOG_ERROR) exit(1);
-}

+ 0 - 0
examples/oculus_glfw_sample/raylib_OculusRiftCV1.png → examples/oculus_glfw_sample/raylib_OculusRiftCV1_test01.png


BIN
examples/oculus_glfw_sample/raylib_OculusRiftCV1_test02.png


BIN
examples/oculus_glfw_sample/raylib_OculusRiftCV1_test03.png


+ 309 - 35
examples/oculus_glfw_sample/raylib_rlgl_standalone.c

@@ -9,7 +9,7 @@
 *   gcc -c rlgl.c -Wall -std=c99 -DRLGL_STANDALONE -DRAYMATH_IMPLEMENTATION -DGRAPHICS_API_OPENGL_33
 *   gcc -c rlgl.c -Wall -std=c99 -DRLGL_STANDALONE -DRAYMATH_IMPLEMENTATION -DGRAPHICS_API_OPENGL_33
 *
 *
 *   Compile example using:
 *   Compile example using:
-*   gcc -o $(NAME_PART).exe $(FILE_NAME) rlgl.o glad.o -lglfw3 -lopengl32 -lgdi32 -std=c99
+*   gcc -o $(NAME_PART).exe $(FILE_NAME) rlgl.o -lglfw3 -lopengl32 -lgdi32 -std=c99
 *
 *
 *   This example has been created using raylib 1.5 (www.raylib.com)
 *   This example has been created using raylib 1.5 (www.raylib.com)
 *   raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
 *   raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
@@ -18,104 +18,201 @@
 *
 *
 ********************************************************************************************/
 ********************************************************************************************/
 
 
-#include "glad.h"
-#include <GLFW/glfw3.h>
+#define GLAD_IMPLEMENTATION
+#include "glad.h"               // Extensions loading library
+#include <GLFW/glfw3.h>         // Windows/Context and inputs management
 
 
 #define RLGL_STANDALONE
 #define RLGL_STANDALONE
 #include "rlgl.h"
 #include "rlgl.h"
 
 
 #include <stdlib.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include <stdio.h>
+#include <stdarg.h>
+
+#define RED        (Color){ 230, 41, 55, 255 }     // Red
+#define MAROON     (Color){ 190, 33, 55, 255 }     // Maroon
+#define RAYWHITE   (Color){ 245, 245, 245, 255 }   // My own White (raylib logo)
+#define DARKGRAY   (Color){ 80, 80, 80, 255 }      // Dark Gray
+//----------------------------------------------------------------------------------
+typedef enum { LOG_INFO = 0, LOG_ERROR, LOG_WARNING, LOG_DEBUG, LOG_OTHER } TraceLogType;
 
 
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------
 // Module specific Functions Declaration
 // Module specific Functions Declaration
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------
-static void ErrorCallback(int error, const char* description)
-{
-    fputs(description, stderr);
-}
+static void ErrorCallback(int error, const char* description);
+static void KeyCallback(GLFWwindow* window, int key, int scancode, int action, int mods);
+static void TraceLog(int msgType, const char *text, ...);
 
 
-static void KeyCallback(GLFWwindow* window, int key, int scancode, int action, int mods)
-{
-    if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
-    {
-        glfwSetWindowShouldClose(window, GL_TRUE);
-    }
-}
-
-void DrawRectangleV(Vector2 position, Vector2 size, Color color);
+// Drawing functions (uses rlgl functionality)
+static void DrawGrid(int slices, float spacing);
+static void DrawCube(Vector3 position, float width, float height, float length, Color color);
+static void DrawCubeWires(Vector3 position, float width, float height, float length, Color color);
+static void DrawRectangleV(Vector2 position, Vector2 size, Color color);
 
 
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------
 // Main Entry point
 // Main Entry point
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------
 int main(void)
 int main(void)
 {
 {
+    // Initialization
+    //--------------------------------------------------------------------------------------
     const int screenWidth = 800;
     const int screenWidth = 800;
     const int screenHeight = 450;
     const int screenHeight = 450;
     
     
-    GLFWwindow *window;
     
     
+    // GLFW3 Initialization + OpenGL 3.3 Context + Extensions
+    //--------------------------------------------------------
     glfwSetErrorCallback(ErrorCallback);
     glfwSetErrorCallback(ErrorCallback);
     
     
-    if (!glfwInit()) exit(EXIT_FAILURE);
+    if (!glfwInit())
+    {
+        TraceLog(LOG_WARNING, "GLFW3: Can not initialize GLFW");
+        exit(EXIT_FAILURE);
+    }
+    else TraceLog(LOG_INFO, "GLFW3: GLFW initialized successfully");
     
     
     glfwWindowHint(GLFW_SAMPLES, 4);
     glfwWindowHint(GLFW_SAMPLES, 4);
+    glfwWindowHint(GLFW_DEPTH_BITS, 16);
     glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
     glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
     glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
     glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
-    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
     glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
     glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
+    glfwWindowHint(GLFW_OPENGL_DEBUG_CONTEXT, GL_TRUE);
    
    
-    window = glfwCreateWindow(screenWidth, screenHeight, "rlgl standalone", NULL, NULL);
+    GLFWwindow *window = glfwCreateWindow(screenWidth, screenHeight, "rlgl standalone", NULL, NULL);
     
     
     if (!window)
     if (!window)
     {
     {
         glfwTerminate();
         glfwTerminate();
         exit(EXIT_FAILURE);
         exit(EXIT_FAILURE);
     }
     }
+    else TraceLog(LOG_INFO, "GLFW3: Window created successfully");
     
     
     glfwSetKeyCallback(window, KeyCallback);
     glfwSetKeyCallback(window, KeyCallback);
     
     
     glfwMakeContextCurrent(window);
     glfwMakeContextCurrent(window);
     glfwSwapInterval(1);
     glfwSwapInterval(1);
 
 
+    // Load OpenGL 3.3 extensions
     if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
     if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
     {
     {
-        printf("Cannot load GL extensions.\n");
+        TraceLog(LOG_WARNING, "GLAD: Cannot load OpenGL extensions");
         exit(1);
         exit(1);
     }
     }
+    else TraceLog(LOG_INFO, "GLAD: OpenGL extensions loaded successfully");
+    //--------------------------------------------------------
     
     
+    // Initialize rlgl internal buffers and OpenGL state
     rlglInit();
     rlglInit();
     rlglInitGraphics(0, 0, screenWidth, screenHeight);
     rlglInitGraphics(0, 0, screenWidth, screenHeight);
-    rlClearColor(245, 245, 245, 255); // Define clear color
+    rlClearColor(245, 245, 245, 255);   // Define clear color
+    rlEnableDepthTest();                // Enable DEPTH_TEST for 3D
     
     
-    Vector2 position = { screenWidth/2 - 100, screenHeight/2 - 100 };
     Vector2 size = { 200, 200 };
     Vector2 size = { 200, 200 };
-    Color color = { 180, 20, 20, 255 };
+    Vector3 cubePosition = { 0.0f, 0.0f, 0.0f };
     
     
-    while (!glfwWindowShouldClose(window))
+    Camera camera;
+    camera.position = (Vector3){ 5.0f, 5.0f, 5.0f };    // Camera position
+    camera.target = (Vector3){ 0.0f, 0.0f, 0.0f };      // Camera looking at point
+    camera.up = (Vector3){ 0.0f, 1.0f, 0.0f };          // Camera up vector (rotation towards target)
+    camera.fovy = 45.0f;                                // Camera field-of-view Y
+    //--------------------------------------------------------------------------------------    
+
+    // Main game loop    
+    while (!glfwWindowShouldClose(window)) 
     {
     {
-        rlClearScreenBuffers();
-        
-        DrawRectangleV(position, size, color);
-        
-        rlglDraw();
-        
+        // Update
+        //----------------------------------------------------------------------------------
+        // ...
+        //----------------------------------------------------------------------------------
+
+        // Draw
+        //----------------------------------------------------------------------------------
+        rlClearScreenBuffers();             // Clear current framebuffer
+            // Calculate projection matrix (from perspective) and view matrix from camera look at
+            Matrix matProj = MatrixPerspective(camera.fovy, (double)screenWidth/(double)screenHeight, 0.01, 1000.0);
+            MatrixTranspose(&matProj);
+            Matrix matView = MatrixLookAt(camera.position, camera.target, camera.up);
+            Matrix mvp = MatrixMultiply(matView, matProj);
+
+            DrawCube(cubePosition, 2.0f, 2.0f, 2.0f, RED);
+            DrawCubeWires(cubePosition, 2.0f, 2.0f, 2.0f, RAYWHITE);
+            DrawGrid(10, 1.0f);
+
+            // NOTE: Internal buffers drawing (3D data)
+            rlglDraw(mvp);
+            
+            matProj = MatrixOrtho(0.0, screenWidth, screenHeight, 0.0, 0.0, 1.0);
+            MatrixTranspose(&matProj);
+            matView = MatrixIdentity();
+            mvp = MatrixMultiply(matView, matProj);
+            
+            // TODO: 2D drawing on Oculus Rift: requires an ovrLayerQuad layer
+            DrawRectangleV((Vector2){ 10.0f, 10.0f }, (Vector2){ 300.0f, 20.0f }, DARKGRAY);
+
+            // NOTE: Internal buffers drawing (2D data)
+            rlglDraw(mvp);
+            
         glfwSwapBuffers(window);
         glfwSwapBuffers(window);
         glfwPollEvents();
         glfwPollEvents();
+        //----------------------------------------------------------------------------------
     }
     }
-    
-    rlglClose();
+
+    // De-Initialization
+    //--------------------------------------------------------------------------------------
+    rlglClose();                            // Unload rlgl internal buffers and default shader/texture
     
     
     glfwDestroyWindow(window);
     glfwDestroyWindow(window);
     glfwTerminate();
     glfwTerminate();
     
     
+    //--------------------------------------------------------------------------------------
+    
     return 0;
     return 0;
 }
 }
 
 
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------
 // Module specific Functions Definitions
 // Module specific Functions Definitions
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------
-void DrawRectangleV(Vector2 position, Vector2 size, Color color)
+
+// GLFW3: Error callback
+static void ErrorCallback(int error, const char* description)
+{
+    TraceLog(LOG_ERROR, description);
+}
+
+// GLFW3: Keyboard callback
+static void KeyCallback(GLFWwindow* window, int key, int scancode, int action, int mods)
+{
+    if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
+    {
+        glfwSetWindowShouldClose(window, GL_TRUE);
+    }
+}
+
+// Output a trace log message
+static void TraceLog(int msgType, const char *text, ...)
+{
+    va_list args;
+    va_start(args, text);
+
+    switch(msgType)
+    {
+        case LOG_INFO: fprintf(stdout, "INFO: "); break;
+        case LOG_ERROR: fprintf(stdout, "ERROR: "); break;
+        case LOG_WARNING: fprintf(stdout, "WARNING: "); break;
+        case LOG_DEBUG: fprintf(stdout, "DEBUG: "); break;
+        default: break;
+    }
+
+    vfprintf(stdout, text, args);
+    fprintf(stdout, "\n");
+
+    va_end(args);
+
+    //if (msgType == LOG_ERROR) exit(1);
+}
+
+// Draw rectangle using rlgl OpenGL 1.1 style coding (translated to OpenGL 3.3 internally)
+static void DrawRectangleV(Vector2 position, Vector2 size, Color color)
 {
 {
     rlBegin(RL_TRIANGLES);
     rlBegin(RL_TRIANGLES);
         rlColor4ub(color.r, color.g, color.b, color.a);
         rlColor4ub(color.r, color.g, color.b, color.a);
@@ -128,4 +225,181 @@ void DrawRectangleV(Vector2 position, Vector2 size, Color color)
         rlVertex2i(position.x + size.x, position.y + size.y);
         rlVertex2i(position.x + size.x, position.y + size.y);
         rlVertex2i(position.x + size.x, position.y);
         rlVertex2i(position.x + size.x, position.y);
     rlEnd();
     rlEnd();
-}
+}
+
+// Draw a grid centered at (0, 0, 0)
+static void DrawGrid(int slices, float spacing)
+{
+    int halfSlices = slices / 2;
+
+    rlBegin(RL_LINES);
+        for(int i = -halfSlices; i <= halfSlices; i++)
+        {
+            if (i == 0)
+            {
+                rlColor3f(0.5f, 0.5f, 0.5f);
+                rlColor3f(0.5f, 0.5f, 0.5f);
+                rlColor3f(0.5f, 0.5f, 0.5f);
+                rlColor3f(0.5f, 0.5f, 0.5f);
+            }
+            else
+            {
+                rlColor3f(0.75f, 0.75f, 0.75f);
+                rlColor3f(0.75f, 0.75f, 0.75f);
+                rlColor3f(0.75f, 0.75f, 0.75f);
+                rlColor3f(0.75f, 0.75f, 0.75f);
+            }
+
+            rlVertex3f((float)i*spacing, 0.0f, (float)-halfSlices*spacing);
+            rlVertex3f((float)i*spacing, 0.0f, (float)halfSlices*spacing);
+
+            rlVertex3f((float)-halfSlices*spacing, 0.0f, (float)i*spacing);
+            rlVertex3f((float)halfSlices*spacing, 0.0f, (float)i*spacing);
+        }
+    rlEnd();
+}
+
+// Draw cube
+// NOTE: Cube position is the center position
+void DrawCube(Vector3 position, float width, float height, float length, Color color)
+{
+    float x = 0.0f;
+    float y = 0.0f;
+    float z = 0.0f;
+
+    rlPushMatrix();
+
+        // NOTE: Be careful! Function order matters (rotate -> scale -> translate)
+        rlTranslatef(position.x, position.y, position.z);
+        //rlScalef(2.0f, 2.0f, 2.0f);
+        //rlRotatef(45, 0, 1, 0);
+
+        rlBegin(RL_TRIANGLES);
+            rlColor4ub(color.r, color.g, color.b, color.a);
+
+            // Front Face -----------------------------------------------------
+            rlVertex3f(x-width/2, y-height/2, z+length/2);  // Bottom Left
+            rlVertex3f(x+width/2, y-height/2, z+length/2);  // Bottom Right
+            rlVertex3f(x-width/2, y+height/2, z+length/2);  // Top Left
+
+            rlVertex3f(x+width/2, y+height/2, z+length/2);  // Top Right
+            rlVertex3f(x-width/2, y+height/2, z+length/2);  // Top Left
+            rlVertex3f(x+width/2, y-height/2, z+length/2);  // Bottom Right
+
+            // Back Face ------------------------------------------------------
+            rlVertex3f(x-width/2, y-height/2, z-length/2);  // Bottom Left
+            rlVertex3f(x-width/2, y+height/2, z-length/2);  // Top Left
+            rlVertex3f(x+width/2, y-height/2, z-length/2);  // Bottom Right
+
+            rlVertex3f(x+width/2, y+height/2, z-length/2);  // Top Right
+            rlVertex3f(x+width/2, y-height/2, z-length/2);  // Bottom Right
+            rlVertex3f(x-width/2, y+height/2, z-length/2);  // Top Left
+
+            // Top Face -------------------------------------------------------
+            rlVertex3f(x-width/2, y+height/2, z-length/2);  // Top Left
+            rlVertex3f(x-width/2, y+height/2, z+length/2);  // Bottom Left
+            rlVertex3f(x+width/2, y+height/2, z+length/2);  // Bottom Right
+
+            rlVertex3f(x+width/2, y+height/2, z-length/2);  // Top Right
+            rlVertex3f(x-width/2, y+height/2, z-length/2);  // Top Left
+            rlVertex3f(x+width/2, y+height/2, z+length/2);  // Bottom Right
+
+            // Bottom Face ----------------------------------------------------
+            rlVertex3f(x-width/2, y-height/2, z-length/2);  // Top Left
+            rlVertex3f(x+width/2, y-height/2, z+length/2);  // Bottom Right
+            rlVertex3f(x-width/2, y-height/2, z+length/2);  // Bottom Left
+
+            rlVertex3f(x+width/2, y-height/2, z-length/2);  // Top Right
+            rlVertex3f(x+width/2, y-height/2, z+length/2);  // Bottom Right
+            rlVertex3f(x-width/2, y-height/2, z-length/2);  // Top Left
+
+            // Right face -----------------------------------------------------
+            rlVertex3f(x+width/2, y-height/2, z-length/2);  // Bottom Right
+            rlVertex3f(x+width/2, y+height/2, z-length/2);  // Top Right
+            rlVertex3f(x+width/2, y+height/2, z+length/2);  // Top Left
+
+            rlVertex3f(x+width/2, y-height/2, z+length/2);  // Bottom Left
+            rlVertex3f(x+width/2, y-height/2, z-length/2);  // Bottom Right
+            rlVertex3f(x+width/2, y+height/2, z+length/2);  // Top Left
+
+            // Left Face ------------------------------------------------------
+            rlVertex3f(x-width/2, y-height/2, z-length/2);  // Bottom Right
+            rlVertex3f(x-width/2, y+height/2, z+length/2);  // Top Left
+            rlVertex3f(x-width/2, y+height/2, z-length/2);  // Top Right
+
+            rlVertex3f(x-width/2, y-height/2, z+length/2);  // Bottom Left
+            rlVertex3f(x-width/2, y+height/2, z+length/2);  // Top Left
+            rlVertex3f(x-width/2, y-height/2, z-length/2);  // Bottom Right
+        rlEnd();
+    rlPopMatrix();
+}
+
+// Draw cube wires
+void DrawCubeWires(Vector3 position, float width, float height, float length, Color color)
+{
+    float x = 0.0f;
+    float y = 0.0f;
+    float z = 0.0f;
+
+    rlPushMatrix();
+
+        rlTranslatef(position.x, position.y, position.z);
+        //rlRotatef(45, 0, 1, 0);
+
+        rlBegin(RL_LINES);
+            rlColor4ub(color.r, color.g, color.b, color.a);
+
+            // Front Face -----------------------------------------------------
+            // Bottom Line
+            rlVertex3f(x-width/2, y-height/2, z+length/2);  // Bottom Left
+            rlVertex3f(x+width/2, y-height/2, z+length/2);  // Bottom Right
+
+            // Left Line
+            rlVertex3f(x+width/2, y-height/2, z+length/2);  // Bottom Right
+            rlVertex3f(x+width/2, y+height/2, z+length/2);  // Top Right
+
+            // Top Line
+            rlVertex3f(x+width/2, y+height/2, z+length/2);  // Top Right
+            rlVertex3f(x-width/2, y+height/2, z+length/2);  // Top Left
+
+            // Right Line
+            rlVertex3f(x-width/2, y+height/2, z+length/2);  // Top Left
+            rlVertex3f(x-width/2, y-height/2, z+length/2);  // Bottom Left
+
+            // Back Face ------------------------------------------------------
+            // Bottom Line
+            rlVertex3f(x-width/2, y-height/2, z-length/2);  // Bottom Left
+            rlVertex3f(x+width/2, y-height/2, z-length/2);  // Bottom Right
+
+            // Left Line
+            rlVertex3f(x+width/2, y-height/2, z-length/2);  // Bottom Right
+            rlVertex3f(x+width/2, y+height/2, z-length/2);  // Top Right
+
+            // Top Line
+            rlVertex3f(x+width/2, y+height/2, z-length/2);  // Top Right
+            rlVertex3f(x-width/2, y+height/2, z-length/2);  // Top Left
+
+            // Right Line
+            rlVertex3f(x-width/2, y+height/2, z-length/2);  // Top Left
+            rlVertex3f(x-width/2, y-height/2, z-length/2);  // Bottom Left
+
+            // Top Face -------------------------------------------------------
+            // Left Line
+            rlVertex3f(x-width/2, y+height/2, z+length/2);  // Top Left Front
+            rlVertex3f(x-width/2, y+height/2, z-length/2);  // Top Left Back
+
+            // Right Line
+            rlVertex3f(x+width/2, y+height/2, z+length/2);  // Top Right Front
+            rlVertex3f(x+width/2, y+height/2, z-length/2);  // Top Right Back
+
+            // Bottom Face  ---------------------------------------------------
+            // Left Line
+            rlVertex3f(x-width/2, y-height/2, z+length/2);  // Top Left Front
+            rlVertex3f(x-width/2, y-height/2, z-length/2);  // Top Left Back
+
+            // Right Line
+            rlVertex3f(x+width/2, y-height/2, z+length/2);  // Top Right Front
+            rlVertex3f(x+width/2, y-height/2, z-length/2);  // Top Right Back
+        rlEnd();
+    rlPopMatrix();
+}

+ 19 - 1
examples/oculus_glfw_sample/raymath.h

@@ -73,7 +73,7 @@
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------
 
 
 #if defined(RAYMATH_STANDALONE)
 #if defined(RAYMATH_STANDALONE)
-	// Vector2 type
+    // Vector2 type
     typedef struct Vector2 {
     typedef struct Vector2 {
         float x;
         float x;
         float y;
         float y;
@@ -158,6 +158,7 @@ RMDEF void PrintMatrix(Matrix m);                             // Print matrix ut
 //------------------------------------------------------------------------------------
 //------------------------------------------------------------------------------------
 RMDEF float QuaternionLength(Quaternion quat);                // Compute the length of a quaternion
 RMDEF float QuaternionLength(Quaternion quat);                // Compute the length of a quaternion
 RMDEF void QuaternionNormalize(Quaternion *q);                // Normalize provided quaternion
 RMDEF void QuaternionNormalize(Quaternion *q);                // Normalize provided quaternion
+RMDEF void QuaternionInvert(Quaternion *quat);                // Invert provided quaternion
 RMDEF Quaternion QuaternionMultiply(Quaternion q1, Quaternion q2);    // Calculate two quaternion multiplication
 RMDEF Quaternion QuaternionMultiply(Quaternion q1, Quaternion q2);    // Calculate two quaternion multiplication
 RMDEF Quaternion QuaternionSlerp(Quaternion q1, Quaternion q2, float slerp); // Calculates spherical linear interpolation between two quaternions
 RMDEF Quaternion QuaternionSlerp(Quaternion q1, Quaternion q2, float slerp); // Calculates spherical linear interpolation between two quaternions
 RMDEF Quaternion QuaternionFromMatrix(Matrix matrix);                 // Returns a quaternion for a given rotation matrix
 RMDEF Quaternion QuaternionFromMatrix(Matrix matrix);                 // Returns a quaternion for a given rotation matrix
@@ -908,6 +909,23 @@ RMDEF void QuaternionNormalize(Quaternion *q)
     q->w *= ilength;
     q->w *= ilength;
 }
 }
 
 
+// Invert provided quaternion
+RMDEF void QuaternionInvert(Quaternion *quat)
+{
+    float length = QuaternionLength(*quat);
+    float lengthSq = length*length;
+    
+    if (lengthSq != 0.0)
+    {
+        float i = 1.0f/lengthSq;
+        
+        quat->x *= -i;
+        quat->y *= -i;
+        quat->z *= -i;
+        quat->w *= i;
+    }
+}
+
 // Calculate two quaternion multiplication
 // Calculate two quaternion multiplication
 RMDEF Quaternion QuaternionMultiply(Quaternion q1, Quaternion q2)
 RMDEF Quaternion QuaternionMultiply(Quaternion q1, Quaternion q2)
 {
 {

Fișier diff suprimat deoarece este prea mare
+ 483 - 441
examples/oculus_glfw_sample/rlgl.c


+ 90 - 64
examples/oculus_glfw_sample/rlgl.h

@@ -130,47 +130,43 @@ typedef enum { OPENGL_11 = 1, OPENGL_33, OPENGL_ES_20 } GlVersion;
         COMPRESSED_ASTC_4x4_RGBA,       // 8 bpp
         COMPRESSED_ASTC_4x4_RGBA,       // 8 bpp
         COMPRESSED_ASTC_8x8_RGBA        // 2 bpp
         COMPRESSED_ASTC_8x8_RGBA        // 2 bpp
     } TextureFormat;
     } TextureFormat;
-    
-    // Bounding box type
-    typedef struct BoundingBox {
-        Vector3 min;
-        Vector3 max;
-    } BoundingBox;
-
-    // Mesh with vertex data type
-    // NOTE: If using OpenGL 1.1, data loaded in CPU; if OpenGL 3.3+ data loaded in GPU (vaoId)
+
+    // Vertex data definning a mesh
     typedef struct Mesh {
     typedef struct Mesh {
-        int vertexCount;            // num vertices
-        float *vertices;            // vertex position (XYZ - 3 components per vertex)
-        float *texcoords;           // vertex texture coordinates (UV - 2 components per vertex)
-        float *texcoords2;          // vertex second texture coordinates (useful for lightmaps)
-        float *normals;             // vertex normals (XYZ - 3 components per vertex)
-        float *tangents;            // vertex tangents (XYZ - 3 components per vertex)
-        unsigned char *colors;      // vertex colors (RGBA - 4 components per vertex)
-        
-        BoundingBox bounds;         // mesh limits defined by min and max points
-        
-        unsigned int vaoId;         // OpenGL Vertex Array Object id
-        unsigned int vboId[6];      // OpenGL Vertex Buffer Objects id (6 types of vertex data)
+        int vertexCount;        // number of vertices stored in arrays
+        int triangleCount;      // number of triangles stored (indexed or not)
+        float *vertices;        // vertex position (XYZ - 3 components per vertex) (shader-location = 0)
+        float *texcoords;       // vertex texture coordinates (UV - 2 components per vertex) (shader-location = 1)
+        float *texcoords2;      // vertex second texture coordinates (useful for lightmaps) (shader-location = 5)
+        float *normals;         // vertex normals (XYZ - 3 components per vertex) (shader-location = 2)
+        float *tangents;        // vertex tangents (XYZ - 3 components per vertex) (shader-location = 4)
+        unsigned char *colors;  // vertex colors (RGBA - 4 components per vertex) (shader-location = 3)
+        unsigned short *indices;// vertex indices (in case vertex data comes indexed)
+
+        unsigned int vaoId;     // OpenGL Vertex Array Object id
+        unsigned int vboId[7];  // OpenGL Vertex Buffer Objects id (7 types of vertex data)
     } Mesh;
     } Mesh;
 
 
-    // Shader type
+    // Shader type (generic shader)
     typedef struct Shader {
     typedef struct Shader {
-        unsigned int id;                // Shader program id
-
-        // Variable attributes
-        int vertexLoc;        // Vertex attribute location point (vertex shader)
-        int texcoordLoc;      // Texcoord attribute location point (vertex shader)
-        int normalLoc;        // Normal attribute location point (vertex shader)
-        int colorLoc;         // Color attibute location point (vertex shader)
-
-        // Uniforms
-        int mvpLoc;           // ModelView-Projection matrix uniform location point (vertex shader)
-        int tintColorLoc;     // Color uniform location point (fragment shader)
+        unsigned int id;        // Shader program id
         
         
-        int mapDiffuseLoc;    // Diffuse map texture uniform location point (fragment shader)
-        int mapNormalLoc;     // Normal map texture uniform location point (fragment shader)
-        int mapSpecularLoc;   // Specular map texture uniform location point (fragment shader)
+        // Vertex attributes locations (default locations)
+        int vertexLoc;          // Vertex attribute location point (default-location = 0)
+        int texcoordLoc;        // Texcoord attribute location point (default-location = 1)
+        int normalLoc;          // Normal attribute location point (default-location = 2)
+        int colorLoc;           // Color attibute location point (default-location = 3)
+        int tangentLoc;         // Tangent attribute location point (default-location = 4)
+        int texcoord2Loc;       // Texcoord2 attribute location point (default-location = 5)
+
+        // Uniform locations
+        int mvpLoc;             // ModelView-Projection matrix uniform location point (vertex shader)
+        int tintColorLoc;       // Color uniform location point (fragment shader)
+        
+        // Texture map locations (generic for any kind of map)
+        int mapTexture0Loc;     // Map texture uniform location point (default-texture-unit = 0)
+        int mapTexture1Loc;     // Map texture uniform location point (default-texture-unit = 1)
+        int mapTexture2Loc;     // Map texture uniform location point (default-texture-unit = 2)
     } Shader;
     } Shader;
 
 
     // Texture2D type
     // Texture2D type
@@ -192,27 +188,46 @@ typedef enum { OPENGL_11 = 1, OPENGL_33, OPENGL_ES_20 } GlVersion;
     
     
     // Material type
     // Material type
     typedef struct Material {
     typedef struct Material {
-        Shader shader;
+        Shader shader;          // Standard shader (supports 3 map types: diffuse, normal, specular)
 
 
-        Texture2D texDiffuse;      // Diffuse texture
-        Texture2D texNormal;       // Normal texture
-        Texture2D texSpecular;     // Specular texture
-        
-        Color colDiffuse;
-        Color colAmbient;
-        Color colSpecular;
+        Texture2D texDiffuse;   // Diffuse texture
+        Texture2D texNormal;    // Normal texture
+        Texture2D texSpecular;  // Specular texture
+
+        Color colDiffuse;       // Diffuse color
+        Color colAmbient;       // Ambient color
+        Color colSpecular;      // Specular color
         
         
-        float glossiness;
-        float normalDepth;
+        float glossiness;       // Glossiness level (Ranges from 0 to 1000)
     } Material;
     } Material;
+    
+    // Camera type, defines a camera position/orientation in 3d space
+    typedef struct Camera {
+        Vector3 position;       // Camera position
+        Vector3 target;         // Camera target it looks-at
+        Vector3 up;             // Camera up vector (rotation over its axis)
+        float fovy;             // Camera field-of-view apperture in Y (degrees)
+    } Camera;
+
+    // Light type
+    typedef struct LightData {
+        unsigned int id;        // Light unique id
+        int type;               // Light type: LIGHT_POINT, LIGHT_DIRECTIONAL, LIGHT_SPOT
+        bool enabled;           // Light enabled
+        
+        Vector3 position;       // Light position
+        Vector3 target;         // Light target: LIGHT_DIRECTIONAL and LIGHT_SPOT (cone direction target)
+        float radius;           // Light attenuation radius light intensity reduced with distance (world distance)
+        
+        Color diffuse;          // Light diffuse color
+        float intensity;        // Light intensity level
+        
+        float coneAngle;        // Light cone max angle: LIGHT_SPOT
+    } LightData, *Light;
+    
+    // Light types
+    typedef enum { LIGHT_POINT, LIGHT_DIRECTIONAL, LIGHT_SPOT } LightType;
 
 
-    // 3d Model type
-    typedef struct Model {
-        Mesh mesh;
-        Matrix transform;
-        Material material;
-    } Model;
-	
     // Color blending modes (pre-defined)
     // Color blending modes (pre-defined)
     typedef enum { BLEND_ALPHA = 0, BLEND_ADDITIVE, BLEND_MULTIPLIED } BlendMode;
     typedef enum { BLEND_ALPHA = 0, BLEND_ADDITIVE, BLEND_MULTIPLIED } BlendMode;
 #endif
 #endif
@@ -234,6 +249,7 @@ void rlScalef(float x, float y, float z);       // Multiply the current matrix b
 void rlMultMatrixf(float *mat);                 // Multiply the current matrix by another matrix
 void rlMultMatrixf(float *mat);                 // Multiply the current matrix by another matrix
 void rlFrustum(double left, double right, double bottom, double top, double near, double far);
 void rlFrustum(double left, double right, double bottom, double top, double near, double far);
 void rlOrtho(double left, double right, double bottom, double top, double near, double far);
 void rlOrtho(double left, double right, double bottom, double top, double near, double far);
+void rlViewport(int x, int y, int width, int height); // Set the viewport area
 
 
 //------------------------------------------------------------------------------------
 //------------------------------------------------------------------------------------
 // Functions Declaration - Vertex level operations
 // Functions Declaration - Vertex level operations
@@ -259,6 +275,8 @@ void rlEnableRenderTexture(unsigned int id);    // Enable render texture (fbo)
 void rlDisableRenderTexture(void);              // Disable render texture (fbo), return to default framebuffer
 void rlDisableRenderTexture(void);              // Disable render texture (fbo), return to default framebuffer
 void rlEnableDepthTest(void);                   // Enable depth test
 void rlEnableDepthTest(void);                   // Enable depth test
 void rlDisableDepthTest(void);                  // Disable depth test
 void rlDisableDepthTest(void);                  // Disable depth test
+void rlEnableWireMode(void);                    // Enable wire mode
+void rlDisableWireMode(void);                   // Disable wire mode
 void rlDeleteTextures(unsigned int id);         // Delete OpenGL texture from GPU
 void rlDeleteTextures(unsigned int id);         // Delete OpenGL texture from GPU
 void rlDeleteRenderTextures(RenderTexture2D target);    // Delete render textures (fbo) from GPU
 void rlDeleteRenderTextures(RenderTexture2D target);    // Delete render textures (fbo) from GPU
 void rlDeleteShader(unsigned int id);           // Delete OpenGL shader program from GPU
 void rlDeleteShader(unsigned int id);           // Delete OpenGL shader program from GPU
@@ -273,7 +291,7 @@ int rlGetVersion(void);                         // Returns current OpenGL versio
 //------------------------------------------------------------------------------------
 //------------------------------------------------------------------------------------
 void rlglInit(void);                            // Initialize rlgl (shaders, VAO, VBO...)
 void rlglInit(void);                            // Initialize rlgl (shaders, VAO, VBO...)
 void rlglClose(void);                           // De-init rlgl
 void rlglClose(void);                           // De-init rlgl
-void rlglDraw(Matrix mvp);                      // Draw VAO/VBO
+void rlglDraw(Matrix mvp);                            // Draw VAO/VBO
 void rlglInitGraphics(int offsetX, int offsetY, int width, int height);  // Initialize Graphics (OpenGL stuff)
 void rlglInitGraphics(int offsetX, int offsetY, int width, int height);  // Initialize Graphics (OpenGL stuff)
 
 
 unsigned int rlglLoadTexture(void *data, int width, int height, int textureFormat, int mipmapCount);    // Load texture in GPU
 unsigned int rlglLoadTexture(void *data, int width, int height, int textureFormat, int mipmapCount);    // Load texture in GPU
@@ -281,35 +299,43 @@ RenderTexture2D rlglLoadRenderTexture(int width, int height);   // Load a textur
 void rlglUpdateTexture(unsigned int id, int width, int height, int format, void *data);         // Update GPU texture with new data
 void rlglUpdateTexture(unsigned int id, int width, int height, int format, void *data);         // Update GPU texture with new data
 void rlglGenerateMipmaps(Texture2D texture);                             // Generate mipmap data for selected texture
 void rlglGenerateMipmaps(Texture2D texture);                             // Generate mipmap data for selected texture
 
 
-// NOTE: There is a set of shader related functions that are available to end user,
-// to avoid creating function wrappers through core module, they have been directly declared in raylib.h
-
-Model rlglLoadModel(Mesh mesh);           // Upload vertex data into GPU and provided VAO/VBO ids
-void rlglDrawModel(Model model, Vector3 position, Vector3 rotationAxis, float rotationAngle, Vector3 scale, Color color, bool wires);
+void rlglLoadMesh(Mesh *mesh, bool dynamic);                        // Upload vertex data into GPU and provided VAO/VBO ids
+void rlglUpdateMesh(Mesh mesh, int buffer, int numVertex);          // Update vertex data on GPU (upload new data to one buffer)
+void rlglDrawMesh(Mesh mesh, Material material, Matrix transform);  // Draw a 3d mesh with material and transform
+void rlglUnloadMesh(Mesh *mesh);                                    // Unload mesh data from CPU and GPU
 
 
 Vector3 rlglUnproject(Vector3 source, Matrix proj, Matrix view);    // Get world coordinates from screen coordinates
 Vector3 rlglUnproject(Vector3 source, Matrix proj, Matrix view);    // Get world coordinates from screen coordinates
 
 
 unsigned char *rlglReadScreenPixels(int width, int height);         // Read screen pixel data (color buffer)
 unsigned char *rlglReadScreenPixels(int width, int height);         // Read screen pixel data (color buffer)
 void *rlglReadTexturePixels(Texture2D texture);                     // Read texture pixel data
 void *rlglReadTexturePixels(Texture2D texture);                     // Read texture pixel data
 
 
+// NOTE: There is a set of shader related functions that are available to end user,
+// to avoid creating function wrappers through core module, they have been directly declared in raylib.h
+
 #if defined(RLGL_STANDALONE)
 #if defined(RLGL_STANDALONE)
 //------------------------------------------------------------------------------------
 //------------------------------------------------------------------------------------
 // Shaders System Functions (Module: rlgl)
 // Shaders System Functions (Module: rlgl)
 // NOTE: This functions are useless when using OpenGL 1.1
 // NOTE: This functions are useless when using OpenGL 1.1
 //------------------------------------------------------------------------------------
 //------------------------------------------------------------------------------------
 Shader LoadShader(char *vsFileName, char *fsFileName);              // Load a custom shader and bind default locations
 Shader LoadShader(char *vsFileName, char *fsFileName);              // Load a custom shader and bind default locations
-unsigned int LoadShaderProgram(char *vShaderStr, char *fShaderStr); // Load custom shader strings and return program id
 void UnloadShader(Shader shader);                                   // Unload a custom shader from memory
 void UnloadShader(Shader shader);                                   // Unload a custom shader from memory
-void SetCustomShader(Shader shader);                                // Set custom shader to be used in batch draw
-void SetDefaultShader(void);                                        // Set default shader to be used in batch draw
-void SetModelShader(Model *model, Shader shader);                   // Link a shader to a model
+
+Shader GetDefaultShader(void);                                      // Get default shader
+Shader GetStandardShader(void);                                     // Get default shader
+Texture2D GetDefaultTexture(void);                                  // Get default texture
 
 
 int GetShaderLocation(Shader shader, const char *uniformName);              // Get shader uniform location
 int GetShaderLocation(Shader shader, const char *uniformName);              // Get shader uniform location
 void SetShaderValue(Shader shader, int uniformLoc, float *value, int size); // Set shader uniform value (float)
 void SetShaderValue(Shader shader, int uniformLoc, float *value, int size); // Set shader uniform value (float)
 void SetShaderValuei(Shader shader, int uniformLoc, int *value, int size);  // Set shader uniform value (int)
 void SetShaderValuei(Shader shader, int uniformLoc, int *value, int size);  // Set shader uniform value (int)
 void SetShaderValueMatrix(Shader shader, int uniformLoc, Matrix mat);       // Set shader uniform value (matrix 4x4)
 void SetShaderValueMatrix(Shader shader, int uniformLoc, Matrix mat);       // Set shader uniform value (matrix 4x4)
 
 
-void SetBlendMode(int mode);                                        // Set blending mode (alpha, additive, multiplied)
+void BeginShaderMode(Shader shader);                                // Begin custom shader drawing
+void EndShaderMode(void);                                           // End custom shader drawing (use default shader)
+void BeginBlendMode(int mode);                                      // Begin blending mode (alpha, additive, multiplied)
+void EndBlendMode(void);                                            // End blending mode (reset to default: alpha blending)
+
+Light CreateLight(int type, Vector3 position, Color diffuse);       // Create a new light, initialize it and add to pool
+void DestroyLight(Light light);                                     // Destroy a light and take it out of the list
 #endif
 #endif
 
 
 #ifdef __cplusplus
 #ifdef __cplusplus

+ 2 - 2
examples/resources/shaders/glsl330/grayscale.fs

@@ -6,7 +6,7 @@ in vec4 fragColor;
 
 
 // Input uniform values
 // Input uniform values
 uniform sampler2D texture0;
 uniform sampler2D texture0;
-uniform vec4 fragTintColor;
+uniform vec4 colDiffuse;
 
 
 // Output fragment color
 // Output fragment color
 out vec4 finalColor;
 out vec4 finalColor;
@@ -16,7 +16,7 @@ out vec4 finalColor;
 void main()
 void main()
 {
 {
     // Texel color fetching from texture sampler
     // Texel color fetching from texture sampler
-    vec4 texelColor = texture(texture0, fragTexCoord)*fragTintColor*fragColor;
+    vec4 texelColor = texture(texture0, fragTexCoord)*colDiffuse*fragColor;
     
     
     // Convert texel color to grayscale using NTSC conversion weights
     // Convert texel color to grayscale using NTSC conversion weights
     float gray = dot(texelColor.rgb, vec3(0.299, 0.587, 0.114));
     float gray = dot(texelColor.rgb, vec3(0.299, 0.587, 0.114));

+ 8 - 7
examples/resources/shaders/standard.fs

@@ -11,7 +11,6 @@ uniform sampler2D texture0;
 uniform sampler2D texture1;
 uniform sampler2D texture1;
 uniform sampler2D texture2;
 uniform sampler2D texture2;
 
 
-uniform vec4 colTint;
 uniform vec4 colAmbient;
 uniform vec4 colAmbient;
 uniform vec4 colDiffuse;
 uniform vec4 colDiffuse;
 uniform vec4 colSpecular;
 uniform vec4 colSpecular;
@@ -55,7 +54,7 @@ vec3 CalcPointLight(Light l, vec3 n, vec3 v, float s)
         spec = pow(dot(n, h), 3 + glossiness)*s;
         spec = pow(dot(n, h), 3 + glossiness)*s;
     }
     }
     
     
-    return (diff*l.diffuse.rgb*colDiffuse.rgb + spec*colSpecular.rgb);
+    return (diff*l.diffuse.rgb + spec*colSpecular.rgb);
 }
 }
 
 
 vec3 CalcDirectionalLight(Light l, vec3 n, vec3 v, float s)
 vec3 CalcDirectionalLight(Light l, vec3 n, vec3 v, float s)
@@ -74,7 +73,7 @@ vec3 CalcDirectionalLight(Light l, vec3 n, vec3 v, float s)
     }
     }
     
     
     // Combine results
     // Combine results
-    return (diff*l.intensity*l.diffuse.rgb*colDiffuse.rgb + spec*colSpecular.rgb);
+    return (diff*l.intensity*l.diffuse.rgb + spec*colSpecular.rgb);
 }
 }
 
 
 vec3 CalcSpotLight(Light l, vec3 n, vec3 v, float s)
 vec3 CalcSpotLight(Light l, vec3 n, vec3 v, float s)
@@ -89,8 +88,10 @@ vec3 CalcSpotLight(Light l, vec3 n, vec3 v, float s)
     // Spot attenuation
     // Spot attenuation
     float attenuation = clamp(dot(n, lightToSurface), 0.0, 1.0);
     float attenuation = clamp(dot(n, lightToSurface), 0.0, 1.0);
     attenuation = dot(lightToSurface, -lightDir);
     attenuation = dot(lightToSurface, -lightDir);
+    
     float lightToSurfaceAngle = degrees(acos(attenuation));
     float lightToSurfaceAngle = degrees(acos(attenuation));
     if (lightToSurfaceAngle > l.coneAngle) attenuation = 0.0;
     if (lightToSurfaceAngle > l.coneAngle) attenuation = 0.0;
+    
     float falloff = (l.coneAngle - lightToSurfaceAngle)/l.coneAngle;
     float falloff = (l.coneAngle - lightToSurfaceAngle)/l.coneAngle;
     
     
     // Combine diffuse and attenuation
     // Combine diffuse and attenuation
@@ -104,7 +105,7 @@ vec3 CalcSpotLight(Light l, vec3 n, vec3 v, float s)
         spec = pow(dot(n, h), 3 + glossiness)*s;
         spec = pow(dot(n, h), 3 + glossiness)*s;
     }
     }
     
     
-    return falloff*(diffAttenuation*l.diffuse.rgb + spec*colSpecular.rgb);
+    return (falloff*(diffAttenuation*l.diffuse.rgb + spec*colSpecular.rgb));
 }
 }
 
 
 void main()
 void main()
@@ -123,7 +124,7 @@ void main()
     vec3 lighting = colAmbient.rgb;
     vec3 lighting = colAmbient.rgb;
     
     
     // Calculate normal texture color fetching or set to maximum normal value by default
     // Calculate normal texture color fetching or set to maximum normal value by default
-    if(useNormal == 1)
+    if (useNormal == 1)
     {
     {
         n *= texture(texture1, fragTexCoord).rgb;
         n *= texture(texture1, fragTexCoord).rgb;
         n = normalize(n);
         n = normalize(n);
@@ -131,7 +132,7 @@ void main()
     
     
     // Calculate specular texture color fetching or set to maximum specular value by default
     // Calculate specular texture color fetching or set to maximum specular value by default
     float spec = 1.0;
     float spec = 1.0;
-    if(useSpecular == 1) spec *= normalize(texture(texture2, fragTexCoord).r);
+    if (useSpecular == 1) spec *= normalize(texture(texture2, fragTexCoord).r);
     
     
     for (int i = 0; i < lightsCount; i++)
     for (int i = 0; i < lightsCount; i++)
     {
     {
@@ -150,5 +151,5 @@ void main()
     }
     }
     
     
     // Calculate final fragment color
     // Calculate final fragment color
-    finalColor = vec4(texelColor.rgb*lighting*colTint.rgb, texelColor.a*colTint.a);
+    finalColor = vec4(texelColor.rgb*lighting*colDiffuse.rgb, texelColor.a*colDiffuse.a);
 }
 }

+ 7 - 5
examples/shaders_custom_uniform.c

@@ -33,7 +33,7 @@ int main()
     Camera camera = {{ 3.0f, 3.0f, 3.0f }, { 0.0f, 1.5f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f };
     Camera camera = {{ 3.0f, 3.0f, 3.0f }, { 0.0f, 1.5f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f };
 
 
     Model dwarf = LoadModel("resources/model/dwarf.obj");                   // Load OBJ model
     Model dwarf = LoadModel("resources/model/dwarf.obj");                   // Load OBJ model
-    Texture2D texture = LoadTexture("resources/model/dwarf_diffuse.png");   // Load model texture
+    Texture2D texture = LoadTexture("resources/model/dwarf_diffuse.png");   // Load model texture (diffuse map)
     SetModelTexture(&dwarf, texture);                                       // Bind texture to model
     SetModelTexture(&dwarf, texture);                                       // Bind texture to model
 
 
     Vector3 position = { 0.0f, 0.0f, 0.0f };                                // Set model position
     Vector3 position = { 0.0f, 0.0f, 0.0f };                                // Set model position
@@ -94,10 +94,12 @@ int main()
             
             
             EndTextureMode();           // End drawing to texture (now we have a texture available for next passes)
             EndTextureMode();           // End drawing to texture (now we have a texture available for next passes)
             
             
-            SetCustomShader(shader);
-            // NOTE: Render texture must be y-flipped due to default OpenGL coordinates (left-bottom)
-            DrawTextureRec(target.texture, (Rectangle){ 0, 0, target.texture.width, -target.texture.height }, (Vector2){ 0, 0 }, WHITE);
-            SetDefaultShader();
+            BeginShaderMode(shader);
+            
+                // NOTE: Render texture must be y-flipped due to default OpenGL coordinates (left-bottom)
+                DrawTextureRec(target.texture, (Rectangle){ 0, 0, target.texture.width, -target.texture.height }, (Vector2){ 0, 0 }, WHITE);
+            
+            EndShaderMode();
             
             
             DrawText("(c) Dwarf 3D model by David Moreno", screenWidth - 200, screenHeight - 20, 10, GRAY);
             DrawText("(c) Dwarf 3D model by David Moreno", screenWidth - 200, screenHeight - 20, 10, GRAY);
 
 

+ 7 - 5
examples/shaders_postprocessing.c

@@ -33,7 +33,7 @@ int main()
     Camera camera = {{ 3.0f, 3.0f, 3.0f }, { 0.0f, 1.5f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f };
     Camera camera = {{ 3.0f, 3.0f, 3.0f }, { 0.0f, 1.5f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f };
     
     
     Model dwarf = LoadModel("resources/model/dwarf.obj");                   // Load OBJ model
     Model dwarf = LoadModel("resources/model/dwarf.obj");                   // Load OBJ model
-    Texture2D texture = LoadTexture("resources/model/dwarf_diffuse.png");   // Load model texture
+    Texture2D texture = LoadTexture("resources/model/dwarf_diffuse.png");   // Load model texture (diffuse map)
     SetModelTexture(&dwarf, texture);                                       // Bind texture to model
     SetModelTexture(&dwarf, texture);                                       // Bind texture to model
 
 
     Vector3 position = { 0.0f, 0.0f, 0.0f };                                // Set model position
     Vector3 position = { 0.0f, 0.0f, 0.0f };                                // Set model position
@@ -80,10 +80,12 @@ int main()
                 
                 
             EndTextureMode();           // End drawing to texture (now we have a texture available for next passes)
             EndTextureMode();           // End drawing to texture (now we have a texture available for next passes)
             
             
-            SetCustomShader(shader);
-            // NOTE: Render texture must be y-flipped due to default OpenGL coordinates (left-bottom)
-            DrawTextureRec(target.texture, (Rectangle){ 0, 0, target.texture.width, -target.texture.height }, (Vector2){ 0, 0 }, WHITE);
-            SetDefaultShader();
+            BeginShaderMode(shader);
+            
+                // NOTE: Render texture must be y-flipped due to default OpenGL coordinates (left-bottom)
+                DrawTextureRec(target.texture, (Rectangle){ 0, 0, target.texture.width, -target.texture.height }, (Vector2){ 0, 0 }, WHITE);
+                
+            EndShaderMode();
             
             
             DrawText("(c) Dwarf 3D model by David Moreno", screenWidth - 200, screenHeight - 20, 10, DARKGRAY);
             DrawText("(c) Dwarf 3D model by David Moreno", screenWidth - 200, screenHeight - 20, 10, DARKGRAY);
 
 

+ 9 - 9
examples/shaders_shapes_textures.c

@@ -65,16 +65,16 @@ int main()
 
 
             
             
             // Activate our custom shader to be applied on next shapes/textures drawings
             // Activate our custom shader to be applied on next shapes/textures drawings
-            SetCustomShader(shader);
+            BeginShaderMode(shader);
             
             
-            DrawText("USING CUSTOM SHADER", 190, 40, 10, RED);
+                DrawText("USING CUSTOM SHADER", 190, 40, 10, RED);
 
 
-            DrawRectangle(250 - 60, 90, 120, 60, RED);
-            DrawRectangleGradient(250 - 90, 170, 180, 130, MAROON, GOLD);
-            DrawRectangleLines(250 - 40, 320, 80, 60, ORANGE);
+                DrawRectangle(250 - 60, 90, 120, 60, RED);
+                DrawRectangleGradient(250 - 90, 170, 180, 130, MAROON, GOLD);
+                DrawRectangleLines(250 - 40, 320, 80, 60, ORANGE);
 
 
             // Activate our default shader for next drawings
             // Activate our default shader for next drawings
-            SetDefaultShader();
+            EndShaderMode();
             
             
             DrawText("USING DEFAULT SHADER", 370, 40, 10, RED);
             DrawText("USING DEFAULT SHADER", 370, 40, 10, RED);
             
             
@@ -89,12 +89,12 @@ int main()
             DrawPoly((Vector2){430, 320}, 6, 80, 0, BROWN);
             DrawPoly((Vector2){430, 320}, 6, 80, 0, BROWN);
             
             
             // Activate our custom shader to be applied on next shapes/textures drawings
             // Activate our custom shader to be applied on next shapes/textures drawings
-            SetCustomShader(shader);
+            BeginShaderMode(shader);
 
 
-            DrawTexture(sonic, 380, -10, WHITE);    // Using custom shader
+                DrawTexture(sonic, 380, -10, WHITE);    // Using custom shader
             
             
             // Activate our default shader for next drawings
             // Activate our default shader for next drawings
-            SetDefaultShader();
+            EndShaderMode();
             
             
         EndDrawing();
         EndDrawing();
         //----------------------------------------------------------------------------------
         //----------------------------------------------------------------------------------

+ 2 - 2
examples/shaders_standard_lighting.c

@@ -40,9 +40,9 @@ int main()
     material.texDiffuse = LoadTexture("resources/model/dwarf_diffuse.png");   // Load model diffuse texture
     material.texDiffuse = LoadTexture("resources/model/dwarf_diffuse.png");   // Load model diffuse texture
     material.texNormal = LoadTexture("resources/model/dwarf_normal.png");     // Load model normal texture
     material.texNormal = LoadTexture("resources/model/dwarf_normal.png");     // Load model normal texture
     material.texSpecular = LoadTexture("resources/model/dwarf_specular.png"); // Load model specular texture
     material.texSpecular = LoadTexture("resources/model/dwarf_specular.png"); // Load model specular texture
-    material.colDiffuse = (Color){255, 255, 255, 255};
+    material.colDiffuse = WHITE;
     material.colAmbient = (Color){0, 0, 10, 255};
     material.colAmbient = (Color){0, 0, 10, 255};
-    material.colSpecular = (Color){255, 255, 255, 255};
+    material.colSpecular = WHITE;
     material.glossiness = 50.0f;
     material.glossiness = 50.0f;
     
     
     dwarf.material = material;      // Apply material to model
     dwarf.material = material;      // Apply material to model

+ 13 - 11
examples/textures_particles_trail_blending.c

@@ -102,20 +102,22 @@ int main()
 
 
             ClearBackground(DARKGRAY);
             ClearBackground(DARKGRAY);
             
             
-            SetBlendMode(blending);
+            BeginBlendMode(blending);
 
 
-            // Draw active particles
-            for (int i = 0; i < MAX_PARTICLES; i++)
-            {
-                if (mouseTail[i].active) DrawTexturePro(smoke, (Rectangle){ 0, 0, smoke.width, smoke.height }, 
-                                                       (Rectangle){ mouseTail[i].position.x, mouseTail[i].position.y, smoke.width*mouseTail[i].size, smoke.height*mouseTail[i].size },
-                                                       (Vector2){ smoke.width*mouseTail[i].size/2, smoke.height*mouseTail[i].size/2 }, mouseTail[i].rotation,
-                                                       Fade(mouseTail[i].color, mouseTail[i].alpha));
-            }
+                // Draw active particles
+                for (int i = 0; i < MAX_PARTICLES; i++)
+                {
+                    if (mouseTail[i].active) DrawTexturePro(smoke, (Rectangle){ 0, 0, smoke.width, smoke.height }, 
+                                                           (Rectangle){ mouseTail[i].position.x, mouseTail[i].position.y, smoke.width*mouseTail[i].size, smoke.height*mouseTail[i].size },
+                                                           (Vector2){ smoke.width*mouseTail[i].size/2, smoke.height*mouseTail[i].size/2 }, mouseTail[i].rotation,
+                                                           Fade(mouseTail[i].color, mouseTail[i].alpha));
+                }
+            
+            EndBlendMode();
             
             
-            DrawText("PRESS SPACE to CHANGE BLENDING MODE", 180, 20, 20, RAYWHITE);
+            DrawText("PRESS SPACE to CHANGE BLENDING MODE", 180, 20, 20, BLACK);
             
             
-            if (blending == BLEND_ALPHA) DrawText("ALPHA BLENDING", 290, screenHeight - 40, 20, RAYWHITE);
+            if (blending == BLEND_ALPHA) DrawText("ALPHA BLENDING", 290, screenHeight - 40, 20, BLACK);
             else DrawText("ADDITIVE BLENDING", 280, screenHeight - 40, 20, RAYWHITE);
             else DrawText("ADDITIVE BLENDING", 280, screenHeight - 40, 20, RAYWHITE);
             
             
         EndDrawing();
         EndDrawing();

+ 7 - 6
src/Makefile

@@ -69,12 +69,13 @@ else
 endif
 endif
 
 
 # define compiler flags:
 # define compiler flags:
-#  -O1              defines optimization level
-#  -Wall            turns on most, but not all, compiler warnings
-#  -std=c99         defines C language mode (standard C from 1999 revision)
-#  -std=gnu99       defines C language mode (GNU C from 1999 revision)
-#  -fgnu89-inline   declaring inline functions support (GCC optimized, faster)
-CFLAGS = -O1 -Wall -std=gnu99 -fgnu89-inline
+#  -O1                  defines optimization level
+#  -Wall                turns on most, but not all, compiler warnings
+#  -std=c99             defines C language mode (standard C from 1999 revision)
+#  -std=gnu99           defines C language mode (GNU C from 1999 revision)
+#  -fgnu89-inline       declaring inline functions support (GCC optimized, faster)
+#  -Wno-missing-braces  ignore invalid warning (GCC bug 53119)
+CFLAGS = -O1 -Wall -std=gnu99 -fgnu89-inline -Wno-missing-braces
 
 
 #CFLAGSEXTRA = -Wextra -Wmissing-prototypes -Wstrict-prototypes
 #CFLAGSEXTRA = -Wextra -Wmissing-prototypes -Wstrict-prototypes
 
 

+ 8 - 8
src/audio.c

@@ -37,24 +37,24 @@
 
 
 #include "AL/al.h"          // OpenAL basic header
 #include "AL/al.h"          // OpenAL basic header
 #include "AL/alc.h"         // OpenAL context header (like OpenGL, OpenAL requires a context to work)
 #include "AL/alc.h"         // OpenAL context header (like OpenGL, OpenAL requires a context to work)
-#include "AL/alext.h"       // extensions for other format types
+#include "AL/alext.h"       // OpenAL extensions for other format types
 
 
-#include <stdlib.h>         // Declares malloc() and free() for memory management
-#include <string.h>         // Required for strcmp()
-#include <stdio.h>          // Used for .WAV loading
+#include <stdlib.h>         // Required for: malloc(), free()
+#include <string.h>         // Required for: strcmp(), strncmp()
+#include <stdio.h>          // Required for: FILE, fopen(), fclose(), fread()
 
 
 #if defined(AUDIO_STANDALONE)
 #if defined(AUDIO_STANDALONE)
-    #include <stdarg.h>     // Used for functions with variable number of parameters (TraceLog())
+    #include <stdarg.h>     // Required for: va_list, va_start(), vfprintf(), va_end()
 #else
 #else
-    #include "utils.h"      // rRES data decompression utility function
-                            // NOTE: Includes Android fopen function map
+    #include "utils.h"      // Required for: DecompressData()
+                            // NOTE: Includes Android fopen() function map
 #endif
 #endif
 
 
 //#define STB_VORBIS_HEADER_ONLY
 //#define STB_VORBIS_HEADER_ONLY
 #include "stb_vorbis.h"     // OGG loading functions
 #include "stb_vorbis.h"     // OGG loading functions
 
 
 #define JAR_XM_IMPLEMENTATION
 #define JAR_XM_IMPLEMENTATION
-#include "jar_xm.h"         // For playing .xm files
+#include "jar_xm.h"         // XM loading functions
 
 
 #define JAR_MOD_IMPLEMENTATION
 #define JAR_MOD_IMPLEMENTATION
 #include "jar_mod.h"        // For playing .mod files
 #include "jar_mod.h"        // For playing .mod files

+ 1 - 1
src/camera.c

@@ -30,7 +30,7 @@
     #include "raylib.h"
     #include "raylib.h"
 #endif
 #endif
 
 
-#include <math.h>
+#include <math.h>               // Required for: sqrt(), sin(), cos()
 
 
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------
 // Defines and Macros
 // Defines and Macros

+ 9 - 9
src/core.c

@@ -2078,10 +2078,10 @@ static void MouseButtonCallback(GLFWwindow *window, int button, int action, int
     gestureEvent.position[0] = GetMousePosition();
     gestureEvent.position[0] = GetMousePosition();
     
     
     // Normalize gestureEvent.position[0] for screenWidth and screenHeight
     // Normalize gestureEvent.position[0] for screenWidth and screenHeight
-    gestureEvent.position[0].x /= (float)GetScreenWidth(); 
+    gestureEvent.position[0].x /= (float)GetScreenWidth();
     gestureEvent.position[0].y /= (float)GetScreenHeight();
     gestureEvent.position[0].y /= (float)GetScreenHeight();
-	
-	// Gesture data is sent to gestures system for processing
+
+    // Gesture data is sent to gestures system for processing
     ProcessGestureEvent(gestureEvent);
     ProcessGestureEvent(gestureEvent);
 #endif
 #endif
 }
 }
@@ -2223,10 +2223,10 @@ static void AndroidCommandCallback(struct android_app *app, int32_t cmd)
                     // Load default font for convenience
                     // Load default font for convenience
                     // NOTE: External function (defined in module: text)
                     // NOTE: External function (defined in module: text)
                     LoadDefaultFont();
                     LoadDefaultFont();
-                    
+
                     // TODO: GPU assets reload in case of lost focus (lost context)
                     // TODO: GPU assets reload in case of lost focus (lost context)
                     // NOTE: This problem has been solved just unbinding and rebinding context from display
                     // NOTE: This problem has been solved just unbinding and rebinding context from display
-					/*
+                    /*
                     if (assetsReloadRequired)
                     if (assetsReloadRequired)
                     {
                     {
                         for (int i = 0; i < assetsCount; i++)
                         for (int i = 0; i < assetsCount; i++)
@@ -2759,9 +2759,9 @@ static void *GamepadThread(void *arg)
     };
     };
 
 
     // Read gamepad event
     // Read gamepad event
-	struct js_event gamepadEvent;
+    struct js_event gamepadEvent;
     
     
-	while (1) 
+    while (1) 
     {
     {
         for (int i = 0; i < MAX_GAMEPADS; i++)
         for (int i = 0; i < MAX_GAMEPADS; i++)
         {
         {
@@ -2792,8 +2792,8 @@ static void *GamepadThread(void *arg)
                 }
                 }
             }
             }
         }
         }
-	}
-    
+    }
+
     return NULL;
     return NULL;
 }
 }
 #endif
 #endif

+ 5 - 5
src/gestures.c

@@ -28,19 +28,19 @@
 #if defined(GESTURES_STANDALONE)
 #if defined(GESTURES_STANDALONE)
     #include "gestures.h"
     #include "gestures.h"
 #else
 #else
-    #include "raylib.h"         // Required for typedef(s): Vector2, Gestures
+    #include "raylib.h"         // Required for: Vector2, Gestures
 #endif
 #endif
 
 
-#include <math.h>               // Used for: atan2(), sqrt()
-#include <stdint.h>             // Defines int32_t, int64_t
+#include <math.h>               // Required for: atan2(), sqrt()
+#include <stdint.h>             // Required for: uint64_t
 
 
 #if defined(_WIN32)
 #if defined(_WIN32)
     // Functions required to query time on Windows
     // Functions required to query time on Windows
     int __stdcall QueryPerformanceCounter(unsigned long long int *lpPerformanceCount);
     int __stdcall QueryPerformanceCounter(unsigned long long int *lpPerformanceCount);
     int __stdcall QueryPerformanceFrequency(unsigned long long int *lpFrequency);
     int __stdcall QueryPerformanceFrequency(unsigned long long int *lpFrequency);
 #elif defined(__linux)
 #elif defined(__linux)
-    #include <sys/time.h>       // Declares storage size of ‘now’
-    #include <time.h>           // Used for clock functions
+    #include <sys/time.h>       // Required for: timespec
+    #include <time.h>           // Required for: clock_gettime()
 #endif
 #endif
 
 
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------

+ 11 - 12
src/models.c

@@ -26,16 +26,16 @@
 #include "raylib.h"
 #include "raylib.h"
 
 
 #if defined(PLATFORM_ANDROID)
 #if defined(PLATFORM_ANDROID)
-    #include "utils.h"  // Android fopen function map
+    #include "utils.h"      // Android fopen function map
 #endif
 #endif
 
 
-#include <stdio.h>      // Standard input/output functions, used to read model files data
-#include <stdlib.h>     // Declares malloc() and free() for memory management
-#include <string.h>     // Required for strcmp()
-#include <math.h>       // Used for sin, cos, tan
+#include <stdio.h>          // Required for: FILE, fopen(), fclose(), fscanf(), feof(), rewind(), fgets()
+#include <stdlib.h>         // Required for: malloc(), free()
+#include <string.h>         // Required for: strcmp()
+#include <math.h>           // Required for: sin(), cos()
 
 
-#include "rlgl.h"       // raylib OpenGL abstraction layer to OpenGL 1.1, 3.3+ or ES2
-#include "raymath.h"    // Required for data type Matrix and Matrix functions
+#include "rlgl.h"           // raylib OpenGL abstraction layer to OpenGL 1.1, 3.3+ or ES2
+#include "raymath.h"        // Matrix data type and Matrix functions
 
 
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------
 // Defines and Macros
 // Defines and Macros
@@ -605,7 +605,7 @@ Model LoadModel(const char *fileName)
     
     
     // TODO: Initialize default data for model in case loading fails, maybe a cube?
     // TODO: Initialize default data for model in case loading fails, maybe a cube?
 
 
-    if (strcmp(GetExtension(fileName),"obj") == 0) model.mesh = LoadOBJ(fileName);
+    if (strcmp(GetExtension(fileName), "obj") == 0) model.mesh = LoadOBJ(fileName);
     else TraceLog(WARNING, "[%s] Model extension not recognized, it can't be loaded", fileName);
     else TraceLog(WARNING, "[%s] Model extension not recognized, it can't be loaded", fileName);
 
 
     if (model.mesh.vertexCount == 0) TraceLog(WARNING, "Model could not be loaded");
     if (model.mesh.vertexCount == 0) TraceLog(WARNING, "Model could not be loaded");
@@ -764,7 +764,7 @@ Material LoadMaterial(const char *fileName)
 {
 {
     Material material = { 0 };
     Material material = { 0 };
     
     
-    if (strcmp(GetExtension(fileName),"mtl") == 0) material = LoadMTL(fileName);
+    if (strcmp(GetExtension(fileName), "mtl") == 0) material = LoadMTL(fileName);
     else TraceLog(WARNING, "[%s] Material extension not recognized, it can't be loaded", fileName);
     else TraceLog(WARNING, "[%s] Material extension not recognized, it can't be loaded", fileName);
     
     
     return material;
     return material;
@@ -779,8 +779,7 @@ Material LoadDefaultMaterial(void)
     material.texDiffuse = GetDefaultTexture();      // White texture (1x1 pixel)
     material.texDiffuse = GetDefaultTexture();      // White texture (1x1 pixel)
     //material.texNormal;           // NOTE: By default, not set
     //material.texNormal;           // NOTE: By default, not set
     //material.texSpecular;         // NOTE: By default, not set
     //material.texSpecular;         // NOTE: By default, not set
-    
-    material.colTint = WHITE;       // Tint color
+
     material.colDiffuse = WHITE;    // Diffuse color
     material.colDiffuse = WHITE;    // Diffuse color
     material.colAmbient = WHITE;    // Ambient color
     material.colAmbient = WHITE;    // Ambient color
     material.colSpecular = WHITE;   // Specular color
     material.colSpecular = WHITE;   // Specular color
@@ -1298,7 +1297,7 @@ void DrawModelEx(Model model, Vector3 position, Vector3 rotationAxis, float rota
     //Matrix matModel = MatrixMultiply(model.transform, matTransform);    // Transform to world-space coordinates
     //Matrix matModel = MatrixMultiply(model.transform, matTransform);    // Transform to world-space coordinates
     
     
     model.transform = MatrixMultiply(MatrixMultiply(matScale, matRotation), matTranslation);
     model.transform = MatrixMultiply(MatrixMultiply(matScale, matRotation), matTranslation);
-    model.material.colTint = tint;
+    model.material.colDiffuse = tint;       // TODO: Multiply tint color by diffuse color?
     
     
     rlglDrawMesh(model.mesh, model.material, model.transform);
     rlglDrawMesh(model.mesh, model.material, model.transform);
 }
 }

+ 2 - 2
src/physac.c

@@ -29,8 +29,8 @@
     #include "raylib.h"
     #include "raylib.h"
 #endif
 #endif
 
 
-#include <stdlib.h>         // Declares malloc() and free() for memory management
-#include <math.h>           // Declares cos(), sin(), abs() and fminf() for math operations
+#include <stdlib.h>         // Required for: malloc(), free()
+#include <math.h>           // Required for: cos(), sin(), abs(), fminf()
 
 
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------
 // Defines and Macros
 // Defines and Macros

+ 101 - 16
src/raygui.c

@@ -22,17 +22,30 @@
 *
 *
 **********************************************************************************************/
 **********************************************************************************************/
 
 
+//#define RAYGUI_STANDALONE     // To use the raygui module as standalone lib, just uncomment this line
+                              // NOTE: Some external funtions are required for drawing and input management
+
+#if !defined(RAYGUI_STANDALONE)
+    #include "raylib.h"
+#endif
+
 #include "raygui.h"
 #include "raygui.h"
 
 
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>     // Required for malloc(), free()
-#include <string.h>     // Required for strcmp()
+#include <stdio.h>      // Required for: FILE, fopen(), fclose(), fprintf(), feof(), fscanf()
+                        // NOTE: Those functions are only used in SaveGuiStyle() and LoadGuiStyle()
+                        
+#include <stdlib.h>     // Required for: malloc(), free()
+#include <string.h>     // Required for: strcmp()
+#include <stdarg.h>     // Required for: va_list, va_start(), vfprintf(), va_end()
 
 
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------
 // Defines and Macros
 // Defines and Macros
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------
-//...
+#if defined(RAYGUI_STANDALONE)
+    #define KEY_LEFT            263
+    #define KEY_RIGHT           262
+    #define MOUSE_LEFT_BUTTON     0
+#endif
 
 
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------
 // Types and Structures Definition
 // Types and Structures Definition
@@ -50,7 +63,7 @@ typedef enum { SLIDER_DEFAULT, SLIDER_HOVER, SLIDER_ACTIVE } SliderState;
 // Global Variables Definition
 // Global Variables Definition
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------
 
 
-//Current GUI style (default light)
+// Current GUI style (default light)
 static int style[NUM_PROPERTIES] = {
 static int style[NUM_PROPERTIES] = {
     0xf5f5f5ff,         // GLOBAL_BASE_COLOR,
     0xf5f5f5ff,         // GLOBAL_BASE_COLOR,
     0xf5f5f5ff,         // GLOBAL_BORDER_COLOR,
     0xf5f5f5ff,         // GLOBAL_BORDER_COLOR,
@@ -157,6 +170,30 @@ static int style[NUM_PROPERTIES] = {
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------
 static Color ColorMultiply(Color baseColor, float value);
 static Color ColorMultiply(Color baseColor, float value);
 
 
+#if defined RAYGUI_STANDALONE
+static Color GetColor(int hexValue);   // Returns a Color struct from hexadecimal value
+static int GetHexValue(Color color);   // Returns hexadecimal value for a Color
+static bool CheckCollisionPointRec(Vector2 point, Rectangle rec);  // Check if point is inside rectangle
+static const char *FormatText(const char *text, ...);   // Formatting of text with variables to 'embed'
+
+// NOTE: raygui depend on some raylib input and drawing functions
+// TODO: Set your own functions
+static Vector2 GetMousePosition() { return (Vector2){ 0.0f, 0.0f }; }
+static int IsMouseButtonDown(int button) { return 0; }
+static int IsMouseButtonPressed(int button) { return 0; }
+static int IsMouseButtonReleased(int button) { return 0; }
+static int IsMouseButtonUp(int button) { return 0; }
+
+static int GetKeyPressed(void) { return 0; }    // NOTE: Only used by GuiTextBox()
+static int IsKeyDown(int key) { return 0; }     // NOTE: Only used by GuiSpinner()
+
+static int MeasureText(const char *text, int fontSize) { return 0; }
+static void DrawText(const char *text, int posX, int posY, int fontSize, Color color) { }
+static void DrawRectangleRec(Rectangle rec, Color color) { }
+static void DrawRectangle(int posX, int posY, int width, int height, Color color) { DrawRectangleRec((Rectangle){ posX, posY, width, height }, color); }
+
+#endif
+
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------
 // Module Functions Definition
 // Module Functions Definition
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------
@@ -164,7 +201,9 @@ static Color ColorMultiply(Color baseColor, float value);
 // Label element, show text
 // Label element, show text
 void GuiLabel(Rectangle bounds, const char *text)
 void GuiLabel(Rectangle bounds, const char *text)
 {
 {
-    GuiLabelEx(bounds,text, GetColor(style[LABEL_TEXT_COLOR]), BLANK, BLANK);
+    #define BLANK (Color){ 0, 0, 0, 0 } // Blank (Transparent)
+
+    GuiLabelEx(bounds, text, GetColor(style[LABEL_TEXT_COLOR]), BLANK, BLANK);
 }
 }
 
 
 // Label element extended, configurable colors
 // Label element extended, configurable colors
@@ -173,7 +212,7 @@ void GuiLabelEx(Rectangle bounds, const char *text, Color textColor, Color borde
     // Update control
     // Update control
     //--------------------------------------------------------------------
     //--------------------------------------------------------------------
     int textWidth = MeasureText(text, style[GLOBAL_TEXT_FONTSIZE]);
     int textWidth = MeasureText(text, style[GLOBAL_TEXT_FONTSIZE]);
-    int textHeight = GetDefaultFont().size;
+    int textHeight = style[GLOBAL_TEXT_FONTSIZE];
 
 
     if (bounds.width < textWidth) bounds.width = textWidth + style[LABEL_TEXT_PADDING];
     if (bounds.width < textWidth) bounds.width = textWidth + style[LABEL_TEXT_PADDING];
     if (bounds.height < textHeight) bounds.height = textHeight + style[LABEL_TEXT_PADDING]/2;
     if (bounds.height < textHeight) bounds.height = textHeight + style[LABEL_TEXT_PADDING]/2;
@@ -194,7 +233,7 @@ bool GuiButton(Rectangle bounds, const char *text)
     Vector2 mousePoint = GetMousePosition();
     Vector2 mousePoint = GetMousePosition();
     
     
     int textWidth = MeasureText(text, style[GLOBAL_TEXT_FONTSIZE]);
     int textWidth = MeasureText(text, style[GLOBAL_TEXT_FONTSIZE]);
-    int textHeight = GetDefaultFont().size;
+    int textHeight = style[GLOBAL_TEXT_FONTSIZE];
     
     
     // Update control
     // Update control
     //--------------------------------------------------------------------
     //--------------------------------------------------------------------
@@ -252,7 +291,7 @@ bool GuiToggleButton(Rectangle bounds, const char *text, bool toggle)
     Vector2 mousePoint = GetMousePosition();
     Vector2 mousePoint = GetMousePosition();
     
     
     int textWidth = MeasureText(text, style[GLOBAL_TEXT_FONTSIZE]);
     int textWidth = MeasureText(text, style[GLOBAL_TEXT_FONTSIZE]);
-    int textHeight = GetDefaultFont().size;
+    int textHeight = style[GLOBAL_TEXT_FONTSIZE];
     
     
     // Update control
     // Update control
     //--------------------------------------------------------------------   
     //--------------------------------------------------------------------   
@@ -337,7 +376,7 @@ int GuiComboBox(Rectangle bounds, int comboNum, char **comboText, int comboActiv
     Rectangle click = { bounds.x + bounds.width + style[COMBOBOX_PADDING], bounds.y, style[COMBOBOX_BUTTON_WIDTH], style[COMBOBOX_BUTTON_HEIGHT] };
     Rectangle click = { bounds.x + bounds.width + style[COMBOBOX_PADDING], bounds.y, style[COMBOBOX_BUTTON_WIDTH], style[COMBOBOX_BUTTON_HEIGHT] };
     Vector2 mousePoint = GetMousePosition();
     Vector2 mousePoint = GetMousePosition();
 
 
-    int textHeight = GetDefaultFont().size;
+    int textHeight = style[GLOBAL_TEXT_FONTSIZE];
      
      
     for (int i = 0; i < comboNum; i++)
     for (int i = 0; i < comboNum; i++)
     {
     {
@@ -627,9 +666,8 @@ int GuiSpinner(Rectangle bounds, int value, int minValue, int maxValue)
     Rectangle rightButtonBound = { bounds.x + bounds.width - bounds.width/4 + 1, bounds.y, bounds.width/4, bounds.height };
     Rectangle rightButtonBound = { bounds.x + bounds.width - bounds.width/4 + 1, bounds.y, bounds.width/4, bounds.height };
     Vector2 mousePoint = GetMousePosition();
     Vector2 mousePoint = GetMousePosition();
 
 
-    int textHeight = GetDefaultFont().size;
-
     int textWidth = MeasureText(FormatText("%i", value), style[GLOBAL_TEXT_FONTSIZE]);
     int textWidth = MeasureText(FormatText("%i", value), style[GLOBAL_TEXT_FONTSIZE]);
+    int textHeight = style[GLOBAL_TEXT_FONTSIZE];
     
     
     int buttonSide = 0;
     int buttonSide = 0;
     
     
@@ -864,10 +902,11 @@ char *GuiTextBox(Rectangle bounds, char *text)
         
         
         DrawText(FormatText("%c", text[i]), initPos, bounds.y + style[TEXTBOX_TEXT_FONTSIZE], style[TEXTBOX_TEXT_FONTSIZE], GetColor(style[TEXTBOX_TEXT_COLOR]));
         DrawText(FormatText("%c", text[i]), initPos, bounds.y + style[TEXTBOX_TEXT_FONTSIZE], style[TEXTBOX_TEXT_FONTSIZE], GetColor(style[TEXTBOX_TEXT_COLOR]));
         
         
-        initPos += ((GetDefaultFont().charRecs[(int)text[i] - 32].width + 2));
+        initPos += (MeasureText(FormatText("%c", text[i]), style[GLOBAL_TEXT_FONTSIZE]) + 2);
+        //initPos += ((GetDefaultFont().charRecs[(int)text[i] - 32].width + 2));
     }
     }
 
 
-    if ((framesCounter/20)%2 && CheckCollisionPointRec(mousePoint, bounds)) DrawLine(initPos + 2, bounds.y + 5, initPos + 2, bounds.y + 10 + 15, GetColor(style[TEXTBOX_LINE_COLOR]));
+    if ((framesCounter/20)%2 && CheckCollisionPointRec(mousePoint, bounds)) DrawRectangle(initPos + 2, bounds.y + 5, 1, 20, GetColor(style[TEXTBOX_LINE_COLOR]));
     //--------------------------------------------------------------------    
     //--------------------------------------------------------------------    
 
 
     return text;
     return text;
@@ -1051,4 +1090,50 @@ static Color ColorMultiply(Color baseColor, float value)
     multColor.b += (255 - multColor.b)*value;
     multColor.b += (255 - multColor.b)*value;
     
     
     return multColor;
     return multColor;
-}
+}
+
+#if defined (RAYGUI_STANDALONE)
+// Returns a Color struct from hexadecimal value
+static Color GetColor(int hexValue)
+{
+    Color color;
+
+    color.r = (unsigned char)(hexValue >> 24) & 0xFF;
+    color.g = (unsigned char)(hexValue >> 16) & 0xFF;
+    color.b = (unsigned char)(hexValue >> 8) & 0xFF;
+    color.a = (unsigned char)hexValue & 0xFF;
+
+    return color;
+}
+
+// Returns hexadecimal value for a Color
+static int GetHexValue(Color color)
+{
+    return (((int)color.r << 24) | ((int)color.g << 16) | ((int)color.b << 8) | (int)color.a);
+}
+
+// Check if point is inside rectangle
+static bool CheckCollisionPointRec(Vector2 point, Rectangle rec)
+{
+    bool collision = false;
+
+    if ((point.x >= rec.x) && (point.x <= (rec.x + rec.width)) && (point.y >= rec.y) && (point.y <= (rec.y + rec.height))) collision = true;
+
+    return collision;
+}
+
+// Formatting of text with variables to 'embed'
+static const char *FormatText(const char *text, ...)
+{
+    #define MAX_FORMATTEXT_LENGTH   64
+    
+    static char buffer[MAX_FORMATTEXT_LENGTH];
+
+    va_list args;
+    va_start(args, text);
+    vsprintf(buffer, text, args);
+    va_end(args);
+
+    return buffer;
+}
+#endif

+ 35 - 2
src/raygui.h

@@ -23,16 +23,49 @@
 #ifndef RAYGUI_H
 #ifndef RAYGUI_H
 #define RAYGUI_H
 #define RAYGUI_H
 
 
-#include "raylib.h"
+//#include "raylib.h"
 
 
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------
 // Defines and Macros
 // Defines and Macros
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------
-#define NUM_PROPERTIES  98
+#define NUM_PROPERTIES       98
 
 
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------
 // Types and Structures Definition
 // Types and Structures Definition
+// NOTE: Some types are required for RAYGUI_STANDALONE usage
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------
+#if defined(RAYGUI_STANDALONE)
+    #ifndef __cplusplus
+    // Boolean type
+        #ifndef true
+            typedef enum { false, true } bool;
+        #endif
+    #endif
+
+    // Vector2 type
+    typedef struct Vector2 {
+        float x;
+        float y;
+    } Vector2;
+
+    // Color type, RGBA (32bit)
+    typedef struct Color {
+        unsigned char r;
+        unsigned char g;
+        unsigned char b;
+        unsigned char a;
+    } Color;
+
+    // Rectangle type
+    typedef struct Rectangle {
+        int x;
+        int y;
+        int width;
+        int height;
+    } Rectangle;
+#endif
+
+// Gui properties enumeration
 typedef enum GuiProperty {
 typedef enum GuiProperty {
     GLOBAL_BASE_COLOR = 0,
     GLOBAL_BASE_COLOR = 0,
     GLOBAL_BORDER_COLOR,
     GLOBAL_BORDER_COLOR,

+ 52 - 53
src/raylib.h

@@ -350,7 +350,7 @@ typedef struct Camera {
     Vector3 position;       // Camera position
     Vector3 position;       // Camera position
     Vector3 target;         // Camera target it looks-at
     Vector3 target;         // Camera target it looks-at
     Vector3 up;             // Camera up vector (rotation over its axis)
     Vector3 up;             // Camera up vector (rotation over its axis)
-    float fovy;             // Field-Of-View apperture in Y (degrees)
+    float fovy;             // Camera field-of-view apperture in Y (degrees)
 } Camera;
 } Camera;
 
 
 // Camera2D type, defines a 2d camera
 // Camera2D type, defines a 2d camera
@@ -363,87 +363,84 @@ typedef struct Camera2D {
 
 
 // Bounding box type
 // Bounding box type
 typedef struct BoundingBox {
 typedef struct BoundingBox {
-    Vector3 min;
-    Vector3 max;
+    Vector3 min;            // minimum vertex box-corner
+    Vector3 max;            // maximum vertex box-corner
 } BoundingBox;
 } BoundingBox;
 
 
 // Vertex data definning a mesh
 // Vertex data definning a mesh
 typedef struct Mesh {
 typedef struct Mesh {
-    int vertexCount;            // number of vertices stored in arrays
-    int triangleCount;          // number of triangles stored (indexed or not)
-    float *vertices;            // vertex position (XYZ - 3 components per vertex) (shader-location = 0)
-    float *texcoords;           // vertex texture coordinates (UV - 2 components per vertex) (shader-location = 1)
-    float *texcoords2;          // vertex second texture coordinates (useful for lightmaps) (shader-location = 5)
-    float *normals;             // vertex normals (XYZ - 3 components per vertex) (shader-location = 2)
-    float *tangents;            // vertex tangents (XYZ - 3 components per vertex) (shader-location = 4)
-    unsigned char *colors;      // vertex colors (RGBA - 4 components per vertex) (shader-location = 3)
-    unsigned short *indices;    // vertex indices (in case vertex data comes indexed)
-
-    BoundingBox bounds;         // mesh limits defined by min and max points
-    
-    unsigned int vaoId;         // OpenGL Vertex Array Object id
-    unsigned int vboId[7];      // OpenGL Vertex Buffer Objects id (7 types of vertex data)
+    int vertexCount;        // number of vertices stored in arrays
+    int triangleCount;      // number of triangles stored (indexed or not)
+    float *vertices;        // vertex position (XYZ - 3 components per vertex) (shader-location = 0)
+    float *texcoords;       // vertex texture coordinates (UV - 2 components per vertex) (shader-location = 1)
+    float *texcoords2;      // vertex second texture coordinates (useful for lightmaps) (shader-location = 5)
+    float *normals;         // vertex normals (XYZ - 3 components per vertex) (shader-location = 2)
+    float *tangents;        // vertex tangents (XYZ - 3 components per vertex) (shader-location = 4)
+    unsigned char *colors;  // vertex colors (RGBA - 4 components per vertex) (shader-location = 3)
+    unsigned short *indices;// vertex indices (in case vertex data comes indexed)
+
+    unsigned int vaoId;     // OpenGL Vertex Array Object id
+    unsigned int vboId[7];  // OpenGL Vertex Buffer Objects id (7 types of vertex data)
 } Mesh;
 } Mesh;
 
 
 // Shader type (generic shader)
 // Shader type (generic shader)
 typedef struct Shader {
 typedef struct Shader {
-    unsigned int id;      // Shader program id
+    unsigned int id;        // Shader program id
     
     
     // Vertex attributes locations (default locations)
     // Vertex attributes locations (default locations)
-    int vertexLoc;        // Vertex attribute location point    (default-location = 0)
-    int texcoordLoc;      // Texcoord attribute location point  (default-location = 1)
-    int texcoord2Loc;     // Texcoord2 attribute location point (default-location = 5)
-    int normalLoc;        // Normal attribute location point    (default-location = 2)
-    int tangentLoc;       // Tangent attribute location point   (default-location = 4)
-    int colorLoc;         // Color attibute location point      (default-location = 3)
+    int vertexLoc;          // Vertex attribute location point    (default-location = 0)
+    int texcoordLoc;        // Texcoord attribute location point  (default-location = 1)
+    int texcoord2Loc;       // Texcoord2 attribute location point (default-location = 5)
+    int normalLoc;          // Normal attribute location point    (default-location = 2)
+    int tangentLoc;         // Tangent attribute location point   (default-location = 4)
+    int colorLoc;           // Color attibute location point      (default-location = 3)
 
 
     // Uniform locations
     // Uniform locations
-    int mvpLoc;           // ModelView-Projection matrix uniform location point (vertex shader)
-    int tintColorLoc;     // Diffuse color uniform location point (fragment shader)
+    int mvpLoc;             // ModelView-Projection matrix uniform location point (vertex shader)
+    int tintColorLoc;       // Diffuse color uniform location point (fragment shader)
     
     
     // Texture map locations (generic for any kind of map)
     // Texture map locations (generic for any kind of map)
-    int mapTexture0Loc;  // Map texture uniform location point (default-texture-unit = 0)
-    int mapTexture1Loc;  // Map texture uniform location point (default-texture-unit = 1)
-    int mapTexture2Loc;  // Map texture uniform location point (default-texture-unit = 2)
+    int mapTexture0Loc;     // Map texture uniform location point (default-texture-unit = 0)
+    int mapTexture1Loc;     // Map texture uniform location point (default-texture-unit = 1)
+    int mapTexture2Loc;     // Map texture uniform location point (default-texture-unit = 2)
 } Shader;
 } Shader;
 
 
 // Material type
 // Material type
 typedef struct Material {
 typedef struct Material {
-    Shader shader;              // Standard shader (supports 3 map textures)
+    Shader shader;          // Standard shader (supports 3 map textures)
 
 
-    Texture2D texDiffuse;       // Diffuse texture  (binded to shader mapTexture0Loc)
-    Texture2D texNormal;        // Normal texture   (binded to shader mapTexture1Loc)
-    Texture2D texSpecular;      // Specular texture (binded to shader mapTexture2Loc)
+    Texture2D texDiffuse;   // Diffuse texture  (binded to shader mapTexture0Loc)
+    Texture2D texNormal;    // Normal texture   (binded to shader mapTexture1Loc)
+    Texture2D texSpecular;  // Specular texture (binded to shader mapTexture2Loc)
     
     
-    Color colTint;              // Tint color
-    Color colDiffuse;           // Diffuse color
-    Color colAmbient;           // Ambient color
-    Color colSpecular;          // Specular color
+    Color colDiffuse;       // Diffuse color
+    Color colAmbient;       // Ambient color
+    Color colSpecular;      // Specular color
     
     
-    float glossiness;           // Glossiness level (Ranges from 0 to 1000)
+    float glossiness;       // Glossiness level (Ranges from 0 to 1000)
 } Material;
 } Material;
 
 
 // Model type
 // Model type
 typedef struct Model {
 typedef struct Model {
-    Mesh mesh;                  // Vertex data buffers (RAM and VRAM)
-    Matrix transform;           // Local transform matrix
-    Material material;          // Shader and textures data
+    Mesh mesh;              // Vertex data buffers (RAM and VRAM)
+    Matrix transform;       // Local transform matrix
+    Material material;      // Shader and textures data
 } Model;
 } Model;
 
 
 // Light type
 // Light type
 typedef struct LightData {
 typedef struct LightData {
-    unsigned int id;    // Light id
-    int type;           // Light type: LIGHT_POINT, LIGHT_DIRECTIONAL, LIGHT_SPOT
-    bool enabled;       // Light enabled
+    unsigned int id;        // Light unique id
+    int type;               // Light type: LIGHT_POINT, LIGHT_DIRECTIONAL, LIGHT_SPOT
+    bool enabled;           // Light enabled
     
     
-    Vector3 position;   // Light position
-    Vector3 target;     // Light target: LIGHT_DIRECTIONAL and LIGHT_SPOT (cone direction target)
-    float radius;       // Light attenuation radius light intensity reduced with distance (world distance)
+    Vector3 position;       // Light position
+    Vector3 target;         // Light target: LIGHT_DIRECTIONAL and LIGHT_SPOT (cone direction target)
+    float radius;           // Light attenuation radius light intensity reduced with distance (world distance)
     
     
-    Color diffuse;      // Light diffuse color
-    float intensity;    // Light intensity level
+    Color diffuse;          // Light diffuse color
+    float intensity;        // Light intensity level
     
     
-    float coneAngle;    // Light cone max angle: LIGHT_SPOT
+    float coneAngle;        // Light cone max angle: LIGHT_SPOT
 } LightData, *Light;
 } LightData, *Light;
 
 
 // Light types
 // Light types
@@ -861,8 +858,7 @@ Vector3 ResolveCollisionCubicmap(Image cubicmap, Vector3 mapPosition, Vector3 *p
 //------------------------------------------------------------------------------------
 //------------------------------------------------------------------------------------
 Shader LoadShader(char *vsFileName, char *fsFileName);              // Load a custom shader and bind default locations
 Shader LoadShader(char *vsFileName, char *fsFileName);              // Load a custom shader and bind default locations
 void UnloadShader(Shader shader);                                   // Unload a custom shader from memory
 void UnloadShader(Shader shader);                                   // Unload a custom shader from memory
-void SetDefaultShader(void);                                        // Set default shader to be used in batch draw
-void SetCustomShader(Shader shader);                                // Set custom shader to be used in batch draw
+
 Shader GetDefaultShader(void);                                      // Get default shader
 Shader GetDefaultShader(void);                                      // Get default shader
 Shader GetStandardShader(void);                                     // Get default shader
 Shader GetStandardShader(void);                                     // Get default shader
 Texture2D GetDefaultTexture(void);                                  // Get default texture
 Texture2D GetDefaultTexture(void);                                  // Get default texture
@@ -872,7 +868,10 @@ void SetShaderValue(Shader shader, int uniformLoc, float *value, int size); // S
 void SetShaderValuei(Shader shader, int uniformLoc, int *value, int size);  // Set shader uniform value (int)
 void SetShaderValuei(Shader shader, int uniformLoc, int *value, int size);  // Set shader uniform value (int)
 void SetShaderValueMatrix(Shader shader, int uniformLoc, Matrix mat);       // Set shader uniform value (matrix 4x4)
 void SetShaderValueMatrix(Shader shader, int uniformLoc, Matrix mat);       // Set shader uniform value (matrix 4x4)
 
 
-void SetBlendMode(int mode);                                        // Set blending mode (alpha, additive, multiplied)
+void BeginShaderMode(Shader shader);                                // Begin custom shader drawing
+void EndShaderMode(void);                                           // End custom shader drawing (use default shader)
+void BeginBlendMode(int mode);                                      // Begin blending mode (alpha, additive, multiplied)
+void EndBlendMode(void);                                            // End blending mode (reset to default: alpha blending)
 
 
 Light CreateLight(int type, Vector3 position, Color diffuse);       // Create a new light, initialize it and add to pool
 Light CreateLight(int type, Vector3 position, Color diffuse);       // Create a new light, initialize it and add to pool
 void DestroyLight(Light light);                                     // Destroy a light and take it out of the list
 void DestroyLight(Light light);                                     // Destroy a light and take it out of the list

+ 1 - 1
src/raymath.h

@@ -73,7 +73,7 @@
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------
 
 
 #if defined(RAYMATH_STANDALONE)
 #if defined(RAYMATH_STANDALONE)
-	// Vector2 type
+    // Vector2 type
     typedef struct Vector2 {
     typedef struct Vector2 {
         float x;
         float x;
         float y;
         float y;

+ 44 - 30
src/rlgl.c

@@ -28,41 +28,41 @@
 
 
 #include "rlgl.h"
 #include "rlgl.h"
 
 
-#include <stdio.h>          // Standard input / output lib
-#include <stdlib.h>         // Declares malloc() and free() for memory management, rand()
-#include <string.h>         // Declares strcmp(), strlen(), strtok()
+#include <stdio.h>                  // Standard input / output lib
+#include <stdlib.h>                 // Required for: malloc(), free(), rand()
+#include <string.h>                 // Required for: strcmp(), strlen(), strtok()
 
 
 #ifndef RLGL_STANDALONE
 #ifndef RLGL_STANDALONE
-    #include "raymath.h"    // Required for Vector3 and Matrix functions
+    #include "raymath.h"            // Required for Vector3 and Matrix functions
 #endif
 #endif
 
 
 #if defined(GRAPHICS_API_OPENGL_11)
 #if defined(GRAPHICS_API_OPENGL_11)
-    #ifdef __APPLE__                // OpenGL include for OSX
-        #include <OpenGL/gl.h>
+    #ifdef __APPLE__                
+        #include <OpenGL/gl.h>      // OpenGL 1.1 library for OSX
     #else
     #else
-        #include <GL/gl.h>          // Basic OpenGL include
+        #include <GL/gl.h>          // OpenGL 1.1 library
     #endif
     #endif
 #endif
 #endif
 
 
 #if defined(GRAPHICS_API_OPENGL_33)
 #if defined(GRAPHICS_API_OPENGL_33)
-    #ifdef __APPLE__                // OpenGL include for OSX
-        #include <OpenGL/gl3.h>
+    #ifdef __APPLE__ 
+        #include <OpenGL/gl3.h>     // OpenGL 3 library for OSX
     #else
     #else
         //#define GLEW_STATIC
         //#define GLEW_STATIC
         //#include <GL/glew.h>        // GLEW header, includes OpenGL headers
         //#include <GL/glew.h>        // GLEW header, includes OpenGL headers
-        #include "glad.h"         // glad header, includes OpenGL headers
+        #include "glad.h"           // GLAD library, includes OpenGL headers
     #endif
     #endif
 #endif
 #endif
 
 
 #if defined(GRAPHICS_API_OPENGL_ES2)
 #if defined(GRAPHICS_API_OPENGL_ES2)
-    #include <EGL/egl.h>
-    #include <GLES2/gl2.h>
-    #include <GLES2/gl2ext.h>
+    #include <EGL/egl.h>            // EGL library
+    #include <GLES2/gl2.h>          // OpenGL ES 2.0 library
+    #include <GLES2/gl2ext.h>       // OpenGL ES 2.0 extensions library
 #endif
 #endif
 
 
 #if defined(RLGL_STANDALONE)
 #if defined(RLGL_STANDALONE)
-    #include <stdarg.h>         // Used for functions with variable number of parameters (TraceLog())
-#endif
+    #include <stdarg.h>             // Required for: va_list, va_start(), vfprintf(), va_end()
+#endif                              // NOTE: Used on TraceLog()
 
 
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------
 // Defines and Macros
 // Defines and Macros
@@ -237,7 +237,7 @@ static Shader LoadDefaultShader(void);      // Load default shader (just vertex
 static Shader LoadStandardShader(void);     // Load standard shader (support materials and lighting)
 static Shader LoadStandardShader(void);     // Load standard shader (support materials and lighting)
 static void LoadDefaultShaderLocations(Shader *shader); // Bind default shader locations (attributes and uniforms)
 static void LoadDefaultShaderLocations(Shader *shader); // Bind default shader locations (attributes and uniforms)
 static void UnloadDefaultShader(void);      // Unload default shader
 static void UnloadDefaultShader(void);      // Unload default shader
-static void UnloadStandardShader(void);      // Unload standard shader
+static void UnloadStandardShader(void);     // Unload standard shader
 
 
 static void LoadDefaultBuffers(void);       // Load default internal buffers (lines, triangles, quads)
 static void LoadDefaultBuffers(void);       // Load default internal buffers (lines, triangles, quads)
 static void UpdateDefaultBuffers(void);     // Update default internal buffers (VAOs/VBOs) with vertex data
 static void UpdateDefaultBuffers(void);     // Update default internal buffers (VAOs/VBOs) with vertex data
@@ -256,7 +256,7 @@ static Color *GenNextMipmap(Color *srcData, int srcWidth, int srcHeight);
 
 
 #if defined(RLGL_STANDALONE)
 #if defined(RLGL_STANDALONE)
 static void TraceLog(int msgType, const char *text, ...);
 static void TraceLog(int msgType, const char *text, ...);
-float *MatrixToFloat(Matrix mat);   // Converts Matrix to float array
+float *MatrixToFloat(Matrix mat);           // Converts Matrix to float array
 #endif
 #endif
 
 
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------
@@ -1545,10 +1545,10 @@ void rlglLoadMesh(Mesh *mesh, bool dynamic)
     mesh->vboId[5] = 0;     // Vertex texcoords2 VBO
     mesh->vboId[5] = 0;     // Vertex texcoords2 VBO
     mesh->vboId[6] = 0;     // Vertex indices VBO
     mesh->vboId[6] = 0;     // Vertex indices VBO
     
     
+#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
     int drawHint = GL_STATIC_DRAW;
     int drawHint = GL_STATIC_DRAW;
     if (dynamic) drawHint = GL_DYNAMIC_DRAW;
     if (dynamic) drawHint = GL_DYNAMIC_DRAW;
 
 
-#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
     GLuint vaoId = 0;       // Vertex Array Objects (VAO)
     GLuint vaoId = 0;       // Vertex Array Objects (VAO)
     GLuint vboId[7];        // Vertex Buffer Objects (VBOs)
     GLuint vboId[7];        // Vertex Buffer Objects (VBOs)
 
 
@@ -1674,6 +1674,7 @@ void rlglLoadMesh(Mesh *mesh, bool dynamic)
 // Update vertex data on GPU (upload new data to one buffer)
 // Update vertex data on GPU (upload new data to one buffer)
 void rlglUpdateMesh(Mesh mesh, int buffer, int numVertex)
 void rlglUpdateMesh(Mesh mesh, int buffer, int numVertex)
 {
 {
+#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
     // Activate mesh VAO
     // Activate mesh VAO
     if (vaoSupported) glBindVertexArray(mesh.vaoId);
     if (vaoSupported) glBindVertexArray(mesh.vaoId);
         
         
@@ -1729,6 +1730,7 @@ void rlglUpdateMesh(Mesh mesh, int buffer, int numVertex)
     //mesh.vertices = glMapBuffer(GL_ARRAY_BUFFER, GL_READ_WRITE);
     //mesh.vertices = glMapBuffer(GL_ARRAY_BUFFER, GL_READ_WRITE);
     // Now we can modify vertices
     // Now we can modify vertices
     //glUnmapBuffer(GL_ARRAY_BUFFER);
     //glUnmapBuffer(GL_ARRAY_BUFFER);
+#endif
 }
 }
 
 
 // Draw a 3d mesh with material and transform
 // Draw a 3d mesh with material and transform
@@ -1800,9 +1802,6 @@ void rlglDrawMesh(Mesh mesh, Material material, Matrix transform)
         // Setup shader uniforms for lights
         // Setup shader uniforms for lights
         SetShaderLights(material.shader);
         SetShaderLights(material.shader);
         
         
-        // Upload to shader material.colSpecular
-        glUniform4f(glGetUniformLocation(material.shader.id, "colTint"), (float)material.colTint.r/255, (float)material.colTint.g/255, (float)material.colTint.b/255, (float)material.colTint.a/255);
-        
         // Upload to shader material.colAmbient
         // Upload to shader material.colAmbient
         glUniform4f(glGetUniformLocation(material.shader.id, "colAmbient"), (float)material.colAmbient.r/255, (float)material.colAmbient.g/255, (float)material.colAmbient.b/255, (float)material.colAmbient.a/255);
         glUniform4f(glGetUniformLocation(material.shader.id, "colAmbient"), (float)material.colAmbient.r/255, (float)material.colAmbient.g/255, (float)material.colAmbient.b/255, (float)material.colAmbient.a/255);
         
         
@@ -2157,7 +2156,7 @@ void UnloadShader(Shader shader)
 }
 }
 
 
 // Set custom shader to be used on batch draw
 // Set custom shader to be used on batch draw
-void SetCustomShader(Shader shader)
+void BeginShaderMode(Shader shader)
 {
 {
 #if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
 #if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
     if (currentShader.id != shader.id)
     if (currentShader.id != shader.id)
@@ -2169,10 +2168,10 @@ void SetCustomShader(Shader shader)
 }
 }
 
 
 // Set default shader to be used in batch draw
 // Set default shader to be used in batch draw
-void SetDefaultShader(void)
+void EndShaderMode(void)
 {
 {
 #if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
 #if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
-    SetCustomShader(defaultShader);
+    BeginShaderMode(defaultShader);
 #endif
 #endif
 }
 }
 
 
@@ -2254,9 +2253,9 @@ void SetShaderValueMatrix(Shader shader, int uniformLoc, Matrix mat)
 #endif
 #endif
 }
 }
 
 
-// Set blending mode (alpha, additive, multiplied)
-// NOTE: Only 3 blending modes predefined
-void SetBlendMode(int mode)
+// Begin blending mode (alpha, additive, multiplied)
+// NOTE: Only 3 blending modes supported, default blend mode is alpha
+void BeginBlendMode(int mode)
 {
 {
     if ((blendMode != mode) && (mode < 3))
     if ((blendMode != mode) && (mode < 3))
     {
     {
@@ -2274,11 +2273,20 @@ void SetBlendMode(int mode)
     }
     }
 }
 }
 
 
+// End blending mode (reset to default: alpha blending)
+void EndBlendMode(void)
+{
+    BeginBlendMode(BLEND_ALPHA);
+}
+
 // Create a new light, initialize it and add to pool
 // Create a new light, initialize it and add to pool
 Light CreateLight(int type, Vector3 position, Color diffuse)
 Light CreateLight(int type, Vector3 position, Color diffuse)
 {
 {
+    Light light = NULL;
+    
+#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
     // Allocate dynamic memory
     // Allocate dynamic memory
-    Light light = (Light)malloc(sizeof(LightData));
+    light = (Light)malloc(sizeof(LightData));
     
     
     // Initialize light values with generic values
     // Initialize light values with generic values
     light->id = lightsCount;
     light->id = lightsCount;
@@ -2295,13 +2303,18 @@ Light CreateLight(int type, Vector3 position, Color diffuse)
     
     
     // Increase enabled lights count
     // Increase enabled lights count
     lightsCount++;
     lightsCount++;
-    
+#else
+    // TODO: Support OpenGL 1.1 lighting system
+    TraceLog(WARNING, "Lighting currently not supported on OpenGL 1.1");
+#endif
+
     return light;
     return light;
 }
 }
 
 
 // Destroy a light and take it out of the list
 // Destroy a light and take it out of the list
 void DestroyLight(Light light)
 void DestroyLight(Light light)
 {
 {
+#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
     // Free dynamic memory allocation
     // Free dynamic memory allocation
     free(lights[light->id]);
     free(lights[light->id]);
     
     
@@ -2319,6 +2332,7 @@ void DestroyLight(Light light)
     
     
     // Decrease enabled physic objects count
     // Decrease enabled physic objects count
     lightsCount--;
     lightsCount--;
+#endif
 }
 }
 
 
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------
@@ -2366,7 +2380,7 @@ static void LoadCompressedTexture(unsigned char *data, int width, int height, in
 static unsigned int LoadShaderProgram(char *vShaderStr, char *fShaderStr)
 static unsigned int LoadShaderProgram(char *vShaderStr, char *fShaderStr)
 {
 {
     unsigned int program = 0;
     unsigned int program = 0;
-	
+
 #if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
 #if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
     GLuint vertexShader;
     GLuint vertexShader;
     GLuint fragmentShader;
     GLuint fragmentShader;

+ 63 - 58
src/rlgl.h

@@ -32,15 +32,15 @@
 //#define RLGL_STANDALONE       // NOTE: To use rlgl as standalone lib, just uncomment this line
 //#define RLGL_STANDALONE       // NOTE: To use rlgl as standalone lib, just uncomment this line
 
 
 #ifndef RLGL_STANDALONE
 #ifndef RLGL_STANDALONE
-    #include "raylib.h"         // Required for typedef(s): Model, Shader, Texture2D
-    #include "utils.h"          // Required for function TraceLog()
+    #include "raylib.h"         // Required for: Model, Shader, Texture2D
+    #include "utils.h"          // Required for: TraceLog()
 #endif
 #endif
 
 
 #ifdef RLGL_STANDALONE
 #ifdef RLGL_STANDALONE
     #define RAYMATH_STANDALONE
     #define RAYMATH_STANDALONE
 #endif
 #endif
 
 
-#include "raymath.h"            // Required for types: Vector3, Matrix
+#include "raymath.h"            // Required for: Vector3, Matrix
 
 
 // Select desired OpenGL version
 // Select desired OpenGL version
 // NOTE: Those preprocessor defines are only used on rlgl module,
 // NOTE: Those preprocessor defines are only used on rlgl module,
@@ -130,51 +130,43 @@ typedef enum { OPENGL_11 = 1, OPENGL_33, OPENGL_ES_20 } GlVersion;
         COMPRESSED_ASTC_4x4_RGBA,       // 8 bpp
         COMPRESSED_ASTC_4x4_RGBA,       // 8 bpp
         COMPRESSED_ASTC_8x8_RGBA        // 2 bpp
         COMPRESSED_ASTC_8x8_RGBA        // 2 bpp
     } TextureFormat;
     } TextureFormat;
-    
-    // Bounding box type
-    typedef struct BoundingBox {
-        Vector3 min;
-        Vector3 max;
-    } BoundingBox;
 
 
     // Vertex data definning a mesh
     // Vertex data definning a mesh
     typedef struct Mesh {
     typedef struct Mesh {
-        int vertexCount;            // number of vertices stored in arrays
-        float *vertices;            // vertex position (XYZ - 3 components per vertex) (shader-location = 0)
-        float *texcoords;           // vertex texture coordinates (UV - 2 components per vertex) (shader-location = 1)
-        float *texcoords2;          // vertex second texture coordinates (useful for lightmaps) (shader-location = 5)
-        float *normals;             // vertex normals (XYZ - 3 components per vertex) (shader-location = 2)
-        float *tangents;            // vertex tangents (XYZ - 3 components per vertex) (shader-location = 4)
-        unsigned char *colors;      // vertex colors (RGBA - 4 components per vertex) (shader-location = 3)
-        unsigned short *indices;    // vertex indices (in case vertex data comes indexed)
-        int triangleCount;          // number of triangles stored (indexed or not)
-        
-        BoundingBox bounds;         // mesh limits defined by min and max points
-        
-        unsigned int vaoId;         // OpenGL Vertex Array Object id
-        unsigned int vboId[7];      // OpenGL Vertex Buffer Objects id (7 types of vertex data)
+        int vertexCount;        // number of vertices stored in arrays
+        int triangleCount;      // number of triangles stored (indexed or not)
+        float *vertices;        // vertex position (XYZ - 3 components per vertex) (shader-location = 0)
+        float *texcoords;       // vertex texture coordinates (UV - 2 components per vertex) (shader-location = 1)
+        float *texcoords2;      // vertex second texture coordinates (useful for lightmaps) (shader-location = 5)
+        float *normals;         // vertex normals (XYZ - 3 components per vertex) (shader-location = 2)
+        float *tangents;        // vertex tangents (XYZ - 3 components per vertex) (shader-location = 4)
+        unsigned char *colors;  // vertex colors (RGBA - 4 components per vertex) (shader-location = 3)
+        unsigned short *indices;// vertex indices (in case vertex data comes indexed)
+
+        unsigned int vaoId;     // OpenGL Vertex Array Object id
+        unsigned int vboId[7];  // OpenGL Vertex Buffer Objects id (7 types of vertex data)
     } Mesh;
     } Mesh;
 
 
     // Shader type (generic shader)
     // Shader type (generic shader)
     typedef struct Shader {
     typedef struct Shader {
-        unsigned int id;      // Shader program id
+        unsigned int id;        // Shader program id
         
         
         // Vertex attributes locations (default locations)
         // Vertex attributes locations (default locations)
-        int vertexLoc;        // Vertex attribute location point (default-location = 0)
-        int texcoordLoc;      // Texcoord attribute location point (default-location = 1)
-        int normalLoc;        // Normal attribute location point (default-location = 2)
-        int colorLoc;         // Color attibute location point (default-location = 3)
-        int tangentLoc;       // Tangent attribute location point (default-location = 4)
-        int texcoord2Loc;     // Texcoord2 attribute location point (default-location = 5)
+        int vertexLoc;          // Vertex attribute location point (default-location = 0)
+        int texcoordLoc;        // Texcoord attribute location point (default-location = 1)
+        int normalLoc;          // Normal attribute location point (default-location = 2)
+        int colorLoc;           // Color attibute location point (default-location = 3)
+        int tangentLoc;         // Tangent attribute location point (default-location = 4)
+        int texcoord2Loc;       // Texcoord2 attribute location point (default-location = 5)
 
 
         // Uniform locations
         // Uniform locations
-        int mvpLoc;           // ModelView-Projection matrix uniform location point (vertex shader)
-        int tintColorLoc;     // Color uniform location point (fragment shader)
+        int mvpLoc;             // ModelView-Projection matrix uniform location point (vertex shader)
+        int tintColorLoc;       // Color uniform location point (fragment shader)
         
         
         // Texture map locations (generic for any kind of map)
         // Texture map locations (generic for any kind of map)
-        int mapTexture0Loc;  // Map texture uniform location point (default-texture-unit = 0)
-        int mapTexture1Loc;  // Map texture uniform location point (default-texture-unit = 1)
-        int mapTexture2Loc;  // Map texture uniform location point (default-texture-unit = 2)
+        int mapTexture0Loc;     // Map texture uniform location point (default-texture-unit = 0)
+        int mapTexture1Loc;     // Map texture uniform location point (default-texture-unit = 1)
+        int mapTexture2Loc;     // Map texture uniform location point (default-texture-unit = 2)
     } Shader;
     } Shader;
 
 
     // Texture2D type
     // Texture2D type
@@ -196,36 +188,46 @@ typedef enum { OPENGL_11 = 1, OPENGL_33, OPENGL_ES_20 } GlVersion;
     
     
     // Material type
     // Material type
     typedef struct Material {
     typedef struct Material {
-        Shader shader;              // Standard shader (supports 3 map types: diffuse, normal, specular)
+        Shader shader;          // Standard shader (supports 3 map types: diffuse, normal, specular)
 
 
-        Texture2D texDiffuse;       // Diffuse texture
-        Texture2D texNormal;        // Normal texture
-        Texture2D texSpecular;      // Specular texture
-        
-        Color colTint;              // Tint color
-        Color colDiffuse;           // Diffuse color
-        Color colAmbient;           // Ambient color
-        Color colSpecular;          // Specular color
+        Texture2D texDiffuse;   // Diffuse texture
+        Texture2D texNormal;    // Normal texture
+        Texture2D texSpecular;  // Specular texture
+
+        Color colDiffuse;       // Diffuse color
+        Color colAmbient;       // Ambient color
+        Color colSpecular;      // Specular color
         
         
-        float glossiness;           // Glossiness level (Ranges from 0 to 1000)
+        float glossiness;       // Glossiness level (Ranges from 0 to 1000)
     } Material;
     } Material;
     
     
+    // Camera type, defines a camera position/orientation in 3d space
+    typedef struct Camera {
+        Vector3 position;       // Camera position
+        Vector3 target;         // Camera target it looks-at
+        Vector3 up;             // Camera up vector (rotation over its axis)
+        float fovy;             // Camera field-of-view apperture in Y (degrees)
+    } Camera;
+
     // Light type
     // Light type
     typedef struct LightData {
     typedef struct LightData {
-        int id;
-        int type;           // LIGHT_POINT, LIGHT_DIRECTIONAL, LIGHT_SPOT
-        bool enabled;
+        unsigned int id;        // Light unique id
+        int type;               // Light type: LIGHT_POINT, LIGHT_DIRECTIONAL, LIGHT_SPOT
+        bool enabled;           // Light enabled
         
         
-        Vector3 position;
-        Vector3 target;     // Used on LIGHT_DIRECTIONAL and LIGHT_SPOT (cone direction target)
-        float radius;       // Lost of light intensity with distance (world distance)
+        Vector3 position;       // Light position
+        Vector3 target;         // Light target: LIGHT_DIRECTIONAL and LIGHT_SPOT (cone direction target)
+        float radius;           // Light attenuation radius light intensity reduced with distance (world distance)
         
         
-        Color diffuse;      // Use Vector3 diffuse
-        float intensity;
+        Color diffuse;          // Light diffuse color
+        float intensity;        // Light intensity level
         
         
-        float coneAngle;    // Spot light max angle
+        float coneAngle;        // Light cone max angle: LIGHT_SPOT
     } LightData, *Light;
     } LightData, *Light;
-	
+    
+    // Light types
+    typedef enum { LIGHT_POINT, LIGHT_DIRECTIONAL, LIGHT_SPOT } LightType;
+
     // Color blending modes (pre-defined)
     // Color blending modes (pre-defined)
     typedef enum { BLEND_ALPHA = 0, BLEND_ADDITIVE, BLEND_MULTIPLIED } BlendMode;
     typedef enum { BLEND_ALPHA = 0, BLEND_ADDITIVE, BLEND_MULTIPLIED } BlendMode;
 #endif
 #endif
@@ -317,9 +319,9 @@ void *rlglReadTexturePixels(Texture2D texture);                     // Read text
 //------------------------------------------------------------------------------------
 //------------------------------------------------------------------------------------
 Shader LoadShader(char *vsFileName, char *fsFileName);              // Load a custom shader and bind default locations
 Shader LoadShader(char *vsFileName, char *fsFileName);              // Load a custom shader and bind default locations
 void UnloadShader(Shader shader);                                   // Unload a custom shader from memory
 void UnloadShader(Shader shader);                                   // Unload a custom shader from memory
-void SetCustomShader(Shader shader);                                // Set custom shader to be used in batch draw
-void SetDefaultShader(void);                                        // Set default shader to be used in batch draw
+
 Shader GetDefaultShader(void);                                      // Get default shader
 Shader GetDefaultShader(void);                                      // Get default shader
+Shader GetStandardShader(void);                                     // Get default shader
 Texture2D GetDefaultTexture(void);                                  // Get default texture
 Texture2D GetDefaultTexture(void);                                  // Get default texture
 
 
 int GetShaderLocation(Shader shader, const char *uniformName);              // Get shader uniform location
 int GetShaderLocation(Shader shader, const char *uniformName);              // Get shader uniform location
@@ -327,7 +329,10 @@ void SetShaderValue(Shader shader, int uniformLoc, float *value, int size); // S
 void SetShaderValuei(Shader shader, int uniformLoc, int *value, int size);  // Set shader uniform value (int)
 void SetShaderValuei(Shader shader, int uniformLoc, int *value, int size);  // Set shader uniform value (int)
 void SetShaderValueMatrix(Shader shader, int uniformLoc, Matrix mat);       // Set shader uniform value (matrix 4x4)
 void SetShaderValueMatrix(Shader shader, int uniformLoc, Matrix mat);       // Set shader uniform value (matrix 4x4)
 
 
-void SetBlendMode(int mode);                                        // Set blending mode (alpha, additive, multiplied)
+void BeginShaderMode(Shader shader);                                // Begin custom shader drawing
+void EndShaderMode(void);                                           // End custom shader drawing (use default shader)
+void BeginBlendMode(int mode);                                      // Begin blending mode (alpha, additive, multiplied)
+void EndBlendMode(void);                                            // End blending mode (reset to default: alpha blending)
 
 
 Light CreateLight(int type, Vector3 position, Color diffuse);       // Create a new light, initialize it and add to pool
 Light CreateLight(int type, Vector3 position, Color diffuse);       // Create a new light, initialize it and add to pool
 void DestroyLight(Light light);                                     // Destroy a light and take it out of the list
 void DestroyLight(Light light);                                     // Destroy a light and take it out of the list

+ 1 - 1
src/shapes.c

@@ -489,7 +489,7 @@ Rectangle GetCollisionRec(Rectangle rec1, Rectangle rec2)
                 retRec.height = rec2.height - dyy;
                 retRec.height = rec2.height - dyy;
             }
             }
         }
         }
-		
+
         if (rec1.width > rec2.width)
         if (rec1.width > rec2.width)
         {
         {
             if (retRec.width >= rec2.width) retRec.width = rec2.width;
             if (retRec.width >= rec2.width) retRec.width = rec2.width;

+ 6 - 6
src/text.c

@@ -25,16 +25,16 @@
 
 
 #include "raylib.h"
 #include "raylib.h"
 
 
-#include <stdlib.h>       // Declares malloc() and free() for memory management
-#include <string.h>       // String management functions (just strlen() is used)
-#include <stdarg.h>       // Used for functions with variable number of parameters (FormatText())
-#include <stdio.h>        // Standard input / output lib
+#include <stdlib.h>         // Required for: malloc(), free()
+#include <string.h>         // Required for: strlen()
+#include <stdarg.h>         // Required for: va_list, va_start(), vfprintf(), va_end()
+#include <stdio.h>          // Required for: FILE, fopen(), fclose(), fscanf(), feof(), rewind(), fgets()
 
 
-#include "utils.h"        // Required for function GetExtension()
+#include "utils.h"          // Required for: GetExtension()
 
 
 // Following libs are used on LoadTTF()
 // Following libs are used on LoadTTF()
 #define STB_TRUETYPE_IMPLEMENTATION
 #define STB_TRUETYPE_IMPLEMENTATION
-#include "stb_truetype.h"
+#include "stb_truetype.h"   // Required for: stbtt_BakeFontBitmap()
 
 
 // Rectangle packing functions (not used at the moment)
 // Rectangle packing functions (not used at the moment)
 //#define STB_RECT_PACK_IMPLEMENTATION
 //#define STB_RECT_PACK_IMPLEMENTATION

+ 36 - 30
src/textures.c

@@ -29,8 +29,8 @@
 
 
 #include "raylib.h"
 #include "raylib.h"
 
 
-#include <stdlib.h>             // Declares malloc() and free() for memory management
-#include <string.h>             // Required for strcmp(), strrchr(), strncmp()
+#include <stdlib.h>             // Required for: malloc(), free()
+#include <string.h>             // Required for: strcmp(), strrchr(), strncmp()
 
 
 #include "rlgl.h"               // raylib OpenGL abstraction layer to OpenGL 1.1, 3.3 or ES2
 #include "rlgl.h"               // raylib OpenGL abstraction layer to OpenGL 1.1, 3.3 or ES2
                                 // Required: rlglLoadTexture() rlDeleteTextures(), 
                                 // Required: rlglLoadTexture() rlDeleteTextures(), 
@@ -40,10 +40,12 @@
                                 // NOTE: Includes Android fopen function map
                                 // NOTE: Includes Android fopen function map
 
 
 #define STB_IMAGE_IMPLEMENTATION
 #define STB_IMAGE_IMPLEMENTATION
-#include "stb_image.h"          // Used to read image data (multiple formats support)
+#include "stb_image.h"          // Required for: stbi_load()
+                                // NOTE: Used to read image data (multiple formats support)
 
 
 #define STB_IMAGE_RESIZE_IMPLEMENTATION
 #define STB_IMAGE_RESIZE_IMPLEMENTATION
-#include "stb_image_resize.h"   // Used on image scaling function: ImageResize()
+#include "stb_image_resize.h"   // Required for: stbir_resize_uint8() 
+                                // NOTE: Used for image scaling on ImageResize()
 
 
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------
 // Defines and Macros
 // Defines and Macros
@@ -1394,39 +1396,43 @@ void DrawTextureRec(Texture2D texture, Rectangle sourceRec, Vector2 position, Co
 // NOTE: origin is relative to destination rectangle size
 // NOTE: origin is relative to destination rectangle size
 void DrawTexturePro(Texture2D texture, Rectangle sourceRec, Rectangle destRec, Vector2 origin, float rotation, Color tint)
 void DrawTexturePro(Texture2D texture, Rectangle sourceRec, Rectangle destRec, Vector2 origin, float rotation, Color tint)
 {
 {
-    if (sourceRec.width < 0) sourceRec.x -= sourceRec.width;
-    if (sourceRec.height < 0) sourceRec.y -= sourceRec.height;
-    
-    rlEnableTexture(texture.id);
+    // Check if texture is valid
+    if (texture.id != 0)
+    {
+        if (sourceRec.width < 0) sourceRec.x -= sourceRec.width;
+        if (sourceRec.height < 0) sourceRec.y -= sourceRec.height;
+        
+        rlEnableTexture(texture.id);
 
 
-    rlPushMatrix();
-        rlTranslatef(destRec.x, destRec.y, 0);
-        rlRotatef(rotation, 0, 0, 1);
-        rlTranslatef(-origin.x, -origin.y, 0);
+        rlPushMatrix();
+            rlTranslatef(destRec.x, destRec.y, 0);
+            rlRotatef(rotation, 0, 0, 1);
+            rlTranslatef(-origin.x, -origin.y, 0);
 
 
-        rlBegin(RL_QUADS);
-            rlColor4ub(tint.r, tint.g, tint.b, tint.a);
-            rlNormal3f(0.0f, 0.0f, 1.0f);                          // Normal vector pointing towards viewer
+            rlBegin(RL_QUADS);
+                rlColor4ub(tint.r, tint.g, tint.b, tint.a);
+                rlNormal3f(0.0f, 0.0f, 1.0f);                          // Normal vector pointing towards viewer
 
 
-            // Bottom-left corner for texture and quad
-            rlTexCoord2f((float)sourceRec.x / texture.width, (float)sourceRec.y / texture.height);
-            rlVertex2f(0.0f, 0.0f);
+                // Bottom-left corner for texture and quad
+                rlTexCoord2f((float)sourceRec.x / texture.width, (float)sourceRec.y / texture.height);
+                rlVertex2f(0.0f, 0.0f);
 
 
-            // Bottom-right corner for texture and quad
-            rlTexCoord2f((float)sourceRec.x / texture.width, (float)(sourceRec.y + sourceRec.height) / texture.height);
-            rlVertex2f(0.0f, destRec.height);
+                // Bottom-right corner for texture and quad
+                rlTexCoord2f((float)sourceRec.x / texture.width, (float)(sourceRec.y + sourceRec.height) / texture.height);
+                rlVertex2f(0.0f, destRec.height);
 
 
-            // Top-right corner for texture and quad
-            rlTexCoord2f((float)(sourceRec.x + sourceRec.width) / texture.width, (float)(sourceRec.y + sourceRec.height) / texture.height);
-            rlVertex2f(destRec.width, destRec.height);
+                // Top-right corner for texture and quad
+                rlTexCoord2f((float)(sourceRec.x + sourceRec.width) / texture.width, (float)(sourceRec.y + sourceRec.height) / texture.height);
+                rlVertex2f(destRec.width, destRec.height);
 
 
-            // Top-left corner for texture and quad
-            rlTexCoord2f((float)(sourceRec.x + sourceRec.width) / texture.width, (float)sourceRec.y / texture.height);
-            rlVertex2f(destRec.width, 0.0f);
-        rlEnd();
-    rlPopMatrix();
+                // Top-left corner for texture and quad
+                rlTexCoord2f((float)(sourceRec.x + sourceRec.width) / texture.width, (float)sourceRec.y / texture.height);
+                rlVertex2f(destRec.width, 0.0f);
+            rlEnd();
+        rlPopMatrix();
 
 
-    rlDisableTexture();
+        rlDisableTexture();
+    }
 }
 }
 
 
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------

+ 5 - 5
src/utils.c

@@ -35,14 +35,14 @@
     #include <android/asset_manager.h>
     #include <android/asset_manager.h>
 #endif
 #endif
 
 
-#include <stdlib.h>             // malloc(), free()
-#include <stdio.h>              // printf(), fprintf()
-#include <stdarg.h>             // Used for functions with variable number of parameters (TraceLog())
-//#include <string.h>           // String management functions: strlen(), strrchr(), strcmp()
+#include <stdlib.h>                 // Required for: malloc(), free()
+#include <stdio.h>                  // Required for: fopen(), fclose(), fputc(), fwrite(), printf(), fprintf(), funopen()
+#include <stdarg.h>                 // Required for: va_list, va_start(), vfprintf(), va_end()
+//#include <string.h>               // Required for: strlen(), strrchr(), strcmp()
 
 
 #if defined(PLATFORM_DESKTOP) || defined(PLATFORM_RPI)
 #if defined(PLATFORM_DESKTOP) || defined(PLATFORM_RPI)
     #define STB_IMAGE_WRITE_IMPLEMENTATION
     #define STB_IMAGE_WRITE_IMPLEMENTATION
-    #include "stb_image_write.h"    // Create PNG file
+    #include "stb_image_write.h"    // Required for: stbi_write_png()
 #endif
 #endif
 
 
 #include "tinfl.c"
 #include "tinfl.c"

+ 2 - 2
src/utils.h

@@ -27,8 +27,8 @@
 #define UTILS_H
 #define UTILS_H
 
 
 #if defined(PLATFORM_ANDROID)
 #if defined(PLATFORM_ANDROID)
-    #include <stdio.h>                      // Defines FILE struct
-    #include <android/asset_manager.h>      // defines AAssetManager struct
+    #include <stdio.h>                      // Required for: FILE
+    #include <android/asset_manager.h>      // Required for: AAssetManager
 #endif
 #endif
 
 
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------

Unele fișiere nu au fost afișate deoarece prea multe fișiere au fost modificate în acest diff