0030638: Visualization, TKOpenGl - load OpenGL 4.5 functions within OpenGl_Context
authorkgv <kgv@opencascade.com>
Mon, 8 Apr 2019 15:03:34 +0000 (18:03 +0300)
committerapn <apn@opencascade.com>
Tue, 9 Apr 2019 11:17:47 +0000 (14:17 +0300)
src/OpenGl/FILES
src/OpenGl/OpenGl_Context.cxx
src/OpenGl/OpenGl_Context.hxx
src/OpenGl/OpenGl_GlCore45.hxx [new file with mode: 0644]
src/OpenGl/OpenGl_GlFunctions.hxx

index 107ce00..fbfde8d 100755 (executable)
@@ -95,6 +95,7 @@ OpenGl_GlCore41.hxx
 OpenGl_GlCore42.hxx
 OpenGl_GlCore43.hxx
 OpenGl_GlCore44.hxx
+OpenGl_GlCore45.hxx
 OpenGl_LayerList.cxx
 OpenGl_LayerList.hxx
 OpenGl_LayerFilter.hxx
index 48bd620..b6ef9c2 100644 (file)
@@ -26,7 +26,7 @@
 #include <OpenGl_ExtGS.hxx>
 #include <OpenGl_ArbSamplerObject.hxx>
 #include <OpenGl_ArbTexBindless.hxx>
-#include <OpenGl_GlCore44.hxx>
+#include <OpenGl_GlCore45.hxx>
 #include <OpenGl_FrameBuffer.hxx>
 #include <OpenGl_FrameStats.hxx>
 #include <OpenGl_Sampler.hxx>
@@ -109,6 +109,8 @@ OpenGl_Context::OpenGl_Context (const Handle(OpenGl_Caps)& theCaps)
   core43back (NULL),
   core44     (NULL),
   core44back (NULL),
+  core45     (NULL),
+  core45back (NULL),
   caps   (!theCaps.IsNull() ? theCaps : new OpenGl_Caps()),
 #if defined(GL_ES_VERSION_2_0)
   hasHighp   (Standard_False),
@@ -1266,6 +1268,8 @@ void OpenGl_Context::init (const Standard_Boolean theIsCoreProfile)
   core43back = NULL;
   core44     = NULL;
   core44back = NULL;
+  core45     = NULL;
+  core45back = NULL;
   arbTBO     = NULL;
   arbTboRGB32 = Standard_False;
   arbIns     = NULL;
@@ -1532,6 +1536,7 @@ void OpenGl_Context::init (const Standard_Boolean theIsCoreProfile)
   bool has42 = false;
   bool has43 = false;
   bool has44 = false;
+  bool has45 = false;
 
   // retrieve platform-dependent extensions
 #if defined(HAVE_EGL)
@@ -2331,6 +2336,131 @@ void OpenGl_Context::init (const Standard_Boolean theIsCoreProfile)
        && FindProcShort (glBindImageTextures)
        && FindProcShort (glBindVertexBuffers);
 
+  has45 = IsGlGreaterEqual (4, 5)
+       && FindProcShort (glBindVertexBuffers)
+       && FindProcShort (glClipControl)
+       && FindProcShort (glCreateTransformFeedbacks)
+       && FindProcShort (glTransformFeedbackBufferBase)
+       && FindProcShort (glTransformFeedbackBufferRange)
+       && FindProcShort (glGetTransformFeedbackiv)
+       && FindProcShort (glGetTransformFeedbacki_v)
+       && FindProcShort (glGetTransformFeedbacki64_v)
+       && FindProcShort (glCreateBuffers)
+       && FindProcShort (glNamedBufferStorage)
+       && FindProcShort (glNamedBufferData)
+       && FindProcShort (glNamedBufferSubData)
+       && FindProcShort (glCopyNamedBufferSubData)
+       && FindProcShort (glClearNamedBufferData)
+       && FindProcShort (glClearNamedBufferSubData)
+       && FindProcShort (glMapNamedBuffer)
+       && FindProcShort (glMapNamedBufferRange)
+       && FindProcShort (glUnmapNamedBuffer)
+       && FindProcShort (glFlushMappedNamedBufferRange)
+       && FindProcShort (glGetNamedBufferParameteriv)
+       && FindProcShort (glGetNamedBufferParameteri64v)
+       && FindProcShort (glGetNamedBufferPointerv)
+       && FindProcShort (glGetNamedBufferSubData)
+       && FindProcShort (glCreateFramebuffers)
+       && FindProcShort (glNamedFramebufferRenderbuffer)
+       && FindProcShort (glNamedFramebufferParameteri)
+       && FindProcShort (glNamedFramebufferTexture)
+       && FindProcShort (glNamedFramebufferTextureLayer)
+       && FindProcShort (glNamedFramebufferDrawBuffer)
+       && FindProcShort (glNamedFramebufferDrawBuffers)
+       && FindProcShort (glNamedFramebufferReadBuffer)
+       && FindProcShort (glInvalidateNamedFramebufferData)
+       && FindProcShort (glInvalidateNamedFramebufferSubData)
+       && FindProcShort (glClearNamedFramebufferiv)
+       && FindProcShort (glClearNamedFramebufferuiv)
+       && FindProcShort (glClearNamedFramebufferfv)
+       && FindProcShort (glClearNamedFramebufferfi)
+       && FindProcShort (glBlitNamedFramebuffer)
+       && FindProcShort (glCheckNamedFramebufferStatus)
+       && FindProcShort (glGetNamedFramebufferParameteriv)
+       && FindProcShort (glGetNamedFramebufferAttachmentParameteriv)
+       && FindProcShort (glCreateRenderbuffers)
+       && FindProcShort (glNamedRenderbufferStorage)
+       && FindProcShort (glNamedRenderbufferStorageMultisample)
+       && FindProcShort (glGetNamedRenderbufferParameteriv)
+       && FindProcShort (glCreateTextures)
+       && FindProcShort (glTextureBuffer)
+       && FindProcShort (glTextureBufferRange)
+       && FindProcShort (glTextureStorage1D)
+       && FindProcShort (glTextureStorage2D)
+       && FindProcShort (glTextureStorage3D)
+       && FindProcShort (glTextureStorage2DMultisample)
+       && FindProcShort (glTextureStorage3DMultisample)
+       && FindProcShort (glTextureSubImage1D)
+       && FindProcShort (glTextureSubImage2D)
+       && FindProcShort (glTextureSubImage3D)
+       && FindProcShort (glCompressedTextureSubImage1D)
+       && FindProcShort (glCompressedTextureSubImage2D)
+       && FindProcShort (glCompressedTextureSubImage3D)
+       && FindProcShort (glCopyTextureSubImage1D)
+       && FindProcShort (glCopyTextureSubImage2D)
+       && FindProcShort (glCopyTextureSubImage3D)
+       && FindProcShort (glTextureParameterf)
+       && FindProcShort (glTextureParameterfv)
+       && FindProcShort (glTextureParameteri)
+       && FindProcShort (glTextureParameterIiv)
+       && FindProcShort (glTextureParameterIuiv)
+       && FindProcShort (glTextureParameteriv)
+       && FindProcShort (glGenerateTextureMipmap)
+       && FindProcShort (glBindTextureUnit)
+       && FindProcShort (glGetTextureImage)
+       && FindProcShort (glGetCompressedTextureImage)
+       && FindProcShort (glGetTextureLevelParameterfv)
+       && FindProcShort (glGetTextureLevelParameteriv)
+       && FindProcShort (glGetTextureParameterfv)
+       && FindProcShort (glGetTextureParameterIiv)
+       && FindProcShort (glGetTextureParameterIuiv)
+       && FindProcShort (glGetTextureParameteriv)
+       && FindProcShort (glCreateVertexArrays)
+       && FindProcShort (glDisableVertexArrayAttrib)
+       && FindProcShort (glEnableVertexArrayAttrib)
+       && FindProcShort (glVertexArrayElementBuffer)
+       && FindProcShort (glVertexArrayVertexBuffer)
+       && FindProcShort (glVertexArrayVertexBuffers)
+       && FindProcShort (glVertexArrayAttribBinding)
+       && FindProcShort (glVertexArrayAttribFormat)
+       && FindProcShort (glVertexArrayAttribIFormat)
+       && FindProcShort (glVertexArrayAttribLFormat)
+       && FindProcShort (glVertexArrayBindingDivisor)
+       && FindProcShort (glGetVertexArrayiv)
+       && FindProcShort (glGetVertexArrayIndexediv)
+       && FindProcShort (glGetVertexArrayIndexed64iv)
+       && FindProcShort (glCreateSamplers)
+       && FindProcShort (glCreateProgramPipelines)
+       && FindProcShort (glCreateQueries)
+       && FindProcShort (glGetQueryBufferObjecti64v)
+       && FindProcShort (glGetQueryBufferObjectiv)
+       && FindProcShort (glGetQueryBufferObjectui64v)
+       && FindProcShort (glGetQueryBufferObjectuiv)
+       && FindProcShort (glMemoryBarrierByRegion)
+       && FindProcShort (glGetTextureSubImage)
+       && FindProcShort (glGetCompressedTextureSubImage)
+       && FindProcShort (glGetGraphicsResetStatus)
+       && FindProcShort (glGetnCompressedTexImage)
+       && FindProcShort (glGetnTexImage)
+       && FindProcShort (glGetnUniformdv)
+       && FindProcShort (glGetnUniformfv)
+       && FindProcShort (glGetnUniformiv)
+       && FindProcShort (glGetnUniformuiv)
+       && FindProcShort (glReadnPixels)
+       && FindProcShort (glGetnMapdv)
+       && FindProcShort (glGetnMapfv)
+       && FindProcShort (glGetnMapiv)
+       && FindProcShort (glGetnPixelMapfv)
+       && FindProcShort (glGetnPixelMapuiv)
+       && FindProcShort (glGetnPixelMapusv)
+       && FindProcShort (glGetnPolygonStipple)
+       && FindProcShort (glGetnColorTable)
+       && FindProcShort (glGetnConvolutionFilter)
+       && FindProcShort (glGetnSeparableFilter)
+       && FindProcShort (glGetnHistogram)
+       && FindProcShort (glGetnMinmax)
+       && FindProcShort (glTextureBarrier);
+
   // initialize debug context extension
   if (CheckExtension ("GL_ARB_debug_output"))
   {
@@ -2636,6 +2766,19 @@ void OpenGl_Context::init (const Standard_Boolean theIsCoreProfile)
   {
     core44back = (OpenGl_GlCore44Back* )(&(*myFuncs));
   }
+
+  if (!has45)
+  {
+    checkWrongVersion (4, 5);
+    myGlVerMajor = 4;
+    myGlVerMinor = 4;
+    return;
+  }
+  core45 = (OpenGl_GlCore45* )(&(*myFuncs));
+  if (!isCoreProfile)
+  {
+    core45back = (OpenGl_GlCore45Back* )(&(*myFuncs));
+  }
 #endif
 }
 
index f58cb99..8a26ab5 100644 (file)
@@ -132,6 +132,10 @@ template<typename theBaseClass_t> struct OpenGl_TmplCore44;
 typedef OpenGl_TmplCore44<OpenGl_GlCore43Back> OpenGl_GlCore44Back;
 typedef OpenGl_TmplCore44<OpenGl_GlCore43>     OpenGl_GlCore44;
 
+template<typename theBaseClass_t> struct OpenGl_TmplCore45;
+typedef OpenGl_TmplCore45<OpenGl_GlCore44Back> OpenGl_GlCore45Back;
+typedef OpenGl_TmplCore45<OpenGl_GlCore44>     OpenGl_GlCore45;
+
 class Graphic3d_PresentationAttributes;
 class OpenGl_Aspects;
 class OpenGl_FrameBuffer;
@@ -853,6 +857,8 @@ public: //! @name core profiles
   OpenGl_GlCore43Back* core43back; //!< OpenGL 4.3 backward compatibility profile
   OpenGl_GlCore44*     core44;     //!< OpenGL 4.4 core profile
   OpenGl_GlCore44Back* core44back; //!< OpenGL 4.4 backward compatibility profile
+  OpenGl_GlCore45*     core45;     //!< OpenGL 4.5 core profile
+  OpenGl_GlCore45Back* core45back; //!< OpenGL 4.5 backward compatibility profile
 
   Handle(OpenGl_Caps) caps; //!< context options
 
diff --git a/src/OpenGl/OpenGl_GlCore45.hxx b/src/OpenGl/OpenGl_GlCore45.hxx
new file mode 100644 (file)
index 0000000..e9e9099
--- /dev/null
@@ -0,0 +1,159 @@
+// Copyright (c) 2019 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#ifndef _OpenGl_GlCore45_Header
+#define _OpenGl_GlCore45_Header
+
+#include <OpenGl_GlCore44.hxx>
+
+//! OpenGL 4.5 definition.
+template<typename theBaseClass_t>
+struct OpenGl_TmplCore45 : public theBaseClass_t
+{
+
+public: //! @name OpenGL 4.5 additives to 4.4
+
+#if !defined(GL_ES_VERSION_2_0)
+  using theBaseClass_t::glClipControl;
+  using theBaseClass_t::glCreateTransformFeedbacks;
+  using theBaseClass_t::glTransformFeedbackBufferBase;
+  using theBaseClass_t::glTransformFeedbackBufferRange;
+  using theBaseClass_t::glGetTransformFeedbackiv;
+  using theBaseClass_t::glGetTransformFeedbacki_v;
+  using theBaseClass_t::glGetTransformFeedbacki64_v;
+  using theBaseClass_t::glCreateBuffers;
+  using theBaseClass_t::glNamedBufferStorage;
+  using theBaseClass_t::glNamedBufferData;
+  using theBaseClass_t::glNamedBufferSubData;
+  using theBaseClass_t::glCopyNamedBufferSubData;
+  using theBaseClass_t::glClearNamedBufferData;
+  using theBaseClass_t::glClearNamedBufferSubData;
+  using theBaseClass_t::glMapNamedBuffer;
+  using theBaseClass_t::glMapNamedBufferRange;
+  using theBaseClass_t::glUnmapNamedBuffer;
+  using theBaseClass_t::glFlushMappedNamedBufferRange;
+  using theBaseClass_t::glGetNamedBufferParameteriv;
+  using theBaseClass_t::glGetNamedBufferParameteri64v;
+  using theBaseClass_t::glGetNamedBufferPointerv;
+  using theBaseClass_t::glGetNamedBufferSubData;
+  using theBaseClass_t::glCreateFramebuffers;
+  using theBaseClass_t::glNamedFramebufferRenderbuffer;
+  using theBaseClass_t::glNamedFramebufferParameteri;
+  using theBaseClass_t::glNamedFramebufferTexture;
+  using theBaseClass_t::glNamedFramebufferTextureLayer;
+  using theBaseClass_t::glNamedFramebufferDrawBuffer;
+  using theBaseClass_t::glNamedFramebufferDrawBuffers;
+  using theBaseClass_t::glNamedFramebufferReadBuffer;
+  using theBaseClass_t::glInvalidateNamedFramebufferData;
+  using theBaseClass_t::glInvalidateNamedFramebufferSubData;
+  using theBaseClass_t::glClearNamedFramebufferiv;
+  using theBaseClass_t::glClearNamedFramebufferuiv;
+  using theBaseClass_t::glClearNamedFramebufferfv;
+  using theBaseClass_t::glClearNamedFramebufferfi;
+  using theBaseClass_t::glBlitNamedFramebuffer;
+  using theBaseClass_t::glCheckNamedFramebufferStatus;
+  using theBaseClass_t::glGetNamedFramebufferParameteriv;
+  using theBaseClass_t::glGetNamedFramebufferAttachmentParameteriv;
+  using theBaseClass_t::glCreateRenderbuffers;
+  using theBaseClass_t::glNamedRenderbufferStorage;
+  using theBaseClass_t::glNamedRenderbufferStorageMultisample;
+  using theBaseClass_t::glGetNamedRenderbufferParameteriv;
+  using theBaseClass_t::glCreateTextures;
+  using theBaseClass_t::glTextureBuffer;
+  using theBaseClass_t::glTextureBufferRange;
+  using theBaseClass_t::glTextureStorage1D;
+  using theBaseClass_t::glTextureStorage2D;
+  using theBaseClass_t::glTextureStorage3D;
+  using theBaseClass_t::glTextureStorage2DMultisample;
+  using theBaseClass_t::glTextureStorage3DMultisample;
+  using theBaseClass_t::glTextureSubImage1D;
+  using theBaseClass_t::glTextureSubImage2D;
+  using theBaseClass_t::glTextureSubImage3D;
+  using theBaseClass_t::glCompressedTextureSubImage1D;
+  using theBaseClass_t::glCompressedTextureSubImage2D;
+  using theBaseClass_t::glCompressedTextureSubImage3D;
+  using theBaseClass_t::glCopyTextureSubImage1D;
+  using theBaseClass_t::glCopyTextureSubImage2D;
+  using theBaseClass_t::glCopyTextureSubImage3D;
+  using theBaseClass_t::glTextureParameterf;
+  using theBaseClass_t::glTextureParameterfv;
+  using theBaseClass_t::glTextureParameteri;
+  using theBaseClass_t::glTextureParameterIiv;
+  using theBaseClass_t::glTextureParameterIuiv;
+  using theBaseClass_t::glTextureParameteriv;
+  using theBaseClass_t::glGenerateTextureMipmap;
+  using theBaseClass_t::glBindTextureUnit;
+  using theBaseClass_t::glGetTextureImage;
+  using theBaseClass_t::glGetCompressedTextureImage;
+  using theBaseClass_t::glGetTextureLevelParameterfv;
+  using theBaseClass_t::glGetTextureLevelParameteriv;
+  using theBaseClass_t::glGetTextureParameterfv;
+  using theBaseClass_t::glGetTextureParameterIiv;
+  using theBaseClass_t::glGetTextureParameterIuiv;
+  using theBaseClass_t::glGetTextureParameteriv;
+  using theBaseClass_t::glCreateVertexArrays;
+  using theBaseClass_t::glDisableVertexArrayAttrib;
+  using theBaseClass_t::glEnableVertexArrayAttrib;
+  using theBaseClass_t::glVertexArrayElementBuffer;
+  using theBaseClass_t::glVertexArrayVertexBuffer;
+  using theBaseClass_t::glVertexArrayVertexBuffers;
+  using theBaseClass_t::glVertexArrayAttribBinding;
+  using theBaseClass_t::glVertexArrayAttribFormat;
+  using theBaseClass_t::glVertexArrayAttribIFormat;
+  using theBaseClass_t::glVertexArrayAttribLFormat;
+  using theBaseClass_t::glVertexArrayBindingDivisor;
+  using theBaseClass_t::glGetVertexArrayiv;
+  using theBaseClass_t::glGetVertexArrayIndexediv;
+  using theBaseClass_t::glGetVertexArrayIndexed64iv;
+  using theBaseClass_t::glCreateSamplers;
+  using theBaseClass_t::glCreateProgramPipelines;
+  using theBaseClass_t::glCreateQueries;
+  using theBaseClass_t::glGetQueryBufferObjecti64v;
+  using theBaseClass_t::glGetQueryBufferObjectiv;
+  using theBaseClass_t::glGetQueryBufferObjectui64v;
+  using theBaseClass_t::glGetQueryBufferObjectuiv;
+  using theBaseClass_t::glMemoryBarrierByRegion;
+  using theBaseClass_t::glGetTextureSubImage;
+  using theBaseClass_t::glGetCompressedTextureSubImage;
+  using theBaseClass_t::glGetGraphicsResetStatus;
+  using theBaseClass_t::glGetnCompressedTexImage;
+  using theBaseClass_t::glGetnTexImage;
+  using theBaseClass_t::glGetnUniformdv;
+  using theBaseClass_t::glGetnUniformfv;
+  using theBaseClass_t::glGetnUniformiv;
+  using theBaseClass_t::glGetnUniformuiv;
+  using theBaseClass_t::glReadnPixels;
+  using theBaseClass_t::glGetnMapdv;
+  using theBaseClass_t::glGetnMapfv;
+  using theBaseClass_t::glGetnMapiv;
+  using theBaseClass_t::glGetnPixelMapfv;
+  using theBaseClass_t::glGetnPixelMapuiv;
+  using theBaseClass_t::glGetnPixelMapusv;
+  using theBaseClass_t::glGetnPolygonStipple;
+  using theBaseClass_t::glGetnColorTable;
+  using theBaseClass_t::glGetnConvolutionFilter;
+  using theBaseClass_t::glGetnSeparableFilter;
+  using theBaseClass_t::glGetnHistogram;
+  using theBaseClass_t::glGetnMinmax;
+  using theBaseClass_t::glTextureBarrier;
+#endif
+
+};
+
+//! OpenGL 4.5 compatibility profile.
+typedef OpenGl_TmplCore45<OpenGl_GlCore44Back> OpenGl_GlCore45Back;
+
+//! OpenGL 4.5 core profile.
+typedef OpenGl_TmplCore45<OpenGl_GlCore44>     OpenGl_GlCore45;
+
+#endif // _OpenGl_GlCore45_Header
index d1bb22c..f39015e 100644 (file)
@@ -1528,6 +1528,131 @@ public: //! @name OpenGL 4.4
   PFNGLBINDIMAGETEXTURESPROC glBindImageTextures;
   PFNGLBINDVERTEXBUFFERSPROC glBindVertexBuffers;
 
+public: //! @name OpenGL 4.5
+
+  PFNGLCLIPCONTROLPROC glClipControl;
+  PFNGLCREATETRANSFORMFEEDBACKSPROC glCreateTransformFeedbacks;
+  PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC glTransformFeedbackBufferBase;
+  PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC glTransformFeedbackBufferRange;
+  PFNGLGETTRANSFORMFEEDBACKIVPROC glGetTransformFeedbackiv;
+  PFNGLGETTRANSFORMFEEDBACKI_VPROC glGetTransformFeedbacki_v;
+  PFNGLGETTRANSFORMFEEDBACKI64_VPROC glGetTransformFeedbacki64_v;
+  PFNGLCREATEBUFFERSPROC glCreateBuffers;
+  PFNGLNAMEDBUFFERSTORAGEPROC glNamedBufferStorage;
+  PFNGLNAMEDBUFFERDATAPROC glNamedBufferData;
+  PFNGLNAMEDBUFFERSUBDATAPROC glNamedBufferSubData;
+  PFNGLCOPYNAMEDBUFFERSUBDATAPROC glCopyNamedBufferSubData;
+  PFNGLCLEARNAMEDBUFFERDATAPROC glClearNamedBufferData;
+  PFNGLCLEARNAMEDBUFFERSUBDATAPROC glClearNamedBufferSubData;
+  PFNGLMAPNAMEDBUFFERPROC glMapNamedBuffer;
+  PFNGLMAPNAMEDBUFFERRANGEPROC glMapNamedBufferRange;
+  PFNGLUNMAPNAMEDBUFFERPROC glUnmapNamedBuffer;
+  PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC glFlushMappedNamedBufferRange;
+  PFNGLGETNAMEDBUFFERPARAMETERIVPROC glGetNamedBufferParameteriv;
+  PFNGLGETNAMEDBUFFERPARAMETERI64VPROC glGetNamedBufferParameteri64v;
+  PFNGLGETNAMEDBUFFERPOINTERVPROC glGetNamedBufferPointerv;
+  PFNGLGETNAMEDBUFFERSUBDATAPROC glGetNamedBufferSubData;
+  PFNGLCREATEFRAMEBUFFERSPROC glCreateFramebuffers;
+  PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC glNamedFramebufferRenderbuffer;
+  PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC glNamedFramebufferParameteri;
+  PFNGLNAMEDFRAMEBUFFERTEXTUREPROC glNamedFramebufferTexture;
+  PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC glNamedFramebufferTextureLayer;
+  PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC glNamedFramebufferDrawBuffer;
+  PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC glNamedFramebufferDrawBuffers;
+  PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC glNamedFramebufferReadBuffer;
+  PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC glInvalidateNamedFramebufferData;
+  PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC glInvalidateNamedFramebufferSubData;
+  PFNGLCLEARNAMEDFRAMEBUFFERIVPROC glClearNamedFramebufferiv;
+  PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC glClearNamedFramebufferuiv;
+  PFNGLCLEARNAMEDFRAMEBUFFERFVPROC glClearNamedFramebufferfv;
+  PFNGLCLEARNAMEDFRAMEBUFFERFIPROC glClearNamedFramebufferfi;
+  PFNGLBLITNAMEDFRAMEBUFFERPROC glBlitNamedFramebuffer;
+  PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC glCheckNamedFramebufferStatus;
+  PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC glGetNamedFramebufferParameteriv;
+  PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC glGetNamedFramebufferAttachmentParameteriv;
+  PFNGLCREATERENDERBUFFERSPROC glCreateRenderbuffers;
+  PFNGLNAMEDRENDERBUFFERSTORAGEPROC glNamedRenderbufferStorage;
+  PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC glNamedRenderbufferStorageMultisample;
+  PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC glGetNamedRenderbufferParameteriv;
+  PFNGLCREATETEXTURESPROC glCreateTextures;
+  PFNGLTEXTUREBUFFERPROC glTextureBuffer;
+  PFNGLTEXTUREBUFFERRANGEPROC glTextureBufferRange;
+  PFNGLTEXTURESTORAGE1DPROC glTextureStorage1D;
+  PFNGLTEXTURESTORAGE2DPROC glTextureStorage2D;
+  PFNGLTEXTURESTORAGE3DPROC glTextureStorage3D;
+  PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC glTextureStorage2DMultisample;
+  PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC glTextureStorage3DMultisample;
+  PFNGLTEXTURESUBIMAGE1DPROC glTextureSubImage1D;
+  PFNGLTEXTURESUBIMAGE2DPROC glTextureSubImage2D;
+  PFNGLTEXTURESUBIMAGE3DPROC glTextureSubImage3D;
+  PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC glCompressedTextureSubImage1D;
+  PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC glCompressedTextureSubImage2D;
+  PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC glCompressedTextureSubImage3D;
+  PFNGLCOPYTEXTURESUBIMAGE1DPROC glCopyTextureSubImage1D;
+  PFNGLCOPYTEXTURESUBIMAGE2DPROC glCopyTextureSubImage2D;
+  PFNGLCOPYTEXTURESUBIMAGE3DPROC glCopyTextureSubImage3D;
+  PFNGLTEXTUREPARAMETERFPROC glTextureParameterf;
+  PFNGLTEXTUREPARAMETERFVPROC glTextureParameterfv;
+  PFNGLTEXTUREPARAMETERIPROC glTextureParameteri;
+  PFNGLTEXTUREPARAMETERIIVPROC glTextureParameterIiv;
+  PFNGLTEXTUREPARAMETERIUIVPROC glTextureParameterIuiv;
+  PFNGLTEXTUREPARAMETERIVPROC glTextureParameteriv;
+  PFNGLGENERATETEXTUREMIPMAPPROC glGenerateTextureMipmap;
+  PFNGLBINDTEXTUREUNITPROC glBindTextureUnit;
+  PFNGLGETTEXTUREIMAGEPROC glGetTextureImage;
+  PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC glGetCompressedTextureImage;
+  PFNGLGETTEXTURELEVELPARAMETERFVPROC glGetTextureLevelParameterfv;
+  PFNGLGETTEXTURELEVELPARAMETERIVPROC glGetTextureLevelParameteriv;
+  PFNGLGETTEXTUREPARAMETERFVPROC glGetTextureParameterfv;
+  PFNGLGETTEXTUREPARAMETERIIVPROC glGetTextureParameterIiv;
+  PFNGLGETTEXTUREPARAMETERIUIVPROC glGetTextureParameterIuiv;
+  PFNGLGETTEXTUREPARAMETERIVPROC glGetTextureParameteriv;
+  PFNGLCREATEVERTEXARRAYSPROC glCreateVertexArrays;
+  PFNGLDISABLEVERTEXARRAYATTRIBPROC glDisableVertexArrayAttrib;
+  PFNGLENABLEVERTEXARRAYATTRIBPROC glEnableVertexArrayAttrib;
+  PFNGLVERTEXARRAYELEMENTBUFFERPROC glVertexArrayElementBuffer;
+  PFNGLVERTEXARRAYVERTEXBUFFERPROC glVertexArrayVertexBuffer;
+  PFNGLVERTEXARRAYVERTEXBUFFERSPROC glVertexArrayVertexBuffers;
+  PFNGLVERTEXARRAYATTRIBBINDINGPROC glVertexArrayAttribBinding;
+  PFNGLVERTEXARRAYATTRIBFORMATPROC glVertexArrayAttribFormat;
+  PFNGLVERTEXARRAYATTRIBIFORMATPROC glVertexArrayAttribIFormat;
+  PFNGLVERTEXARRAYATTRIBLFORMATPROC glVertexArrayAttribLFormat;
+  PFNGLVERTEXARRAYBINDINGDIVISORPROC glVertexArrayBindingDivisor;
+  PFNGLGETVERTEXARRAYIVPROC glGetVertexArrayiv;
+  PFNGLGETVERTEXARRAYINDEXEDIVPROC glGetVertexArrayIndexediv;
+  PFNGLGETVERTEXARRAYINDEXED64IVPROC glGetVertexArrayIndexed64iv;
+  PFNGLCREATESAMPLERSPROC glCreateSamplers;
+  PFNGLCREATEPROGRAMPIPELINESPROC glCreateProgramPipelines;
+  PFNGLCREATEQUERIESPROC glCreateQueries;
+  PFNGLGETQUERYBUFFEROBJECTI64VPROC glGetQueryBufferObjecti64v;
+  PFNGLGETQUERYBUFFEROBJECTIVPROC glGetQueryBufferObjectiv;
+  PFNGLGETQUERYBUFFEROBJECTUI64VPROC glGetQueryBufferObjectui64v;
+  PFNGLGETQUERYBUFFEROBJECTUIVPROC glGetQueryBufferObjectuiv;
+  PFNGLMEMORYBARRIERBYREGIONPROC glMemoryBarrierByRegion;
+  PFNGLGETTEXTURESUBIMAGEPROC glGetTextureSubImage;
+  PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC glGetCompressedTextureSubImage;
+  PFNGLGETGRAPHICSRESETSTATUSPROC glGetGraphicsResetStatus;
+  PFNGLGETNCOMPRESSEDTEXIMAGEPROC glGetnCompressedTexImage;
+  PFNGLGETNTEXIMAGEPROC glGetnTexImage;
+  PFNGLGETNUNIFORMDVPROC glGetnUniformdv;
+  PFNGLGETNUNIFORMFVPROC glGetnUniformfv;
+  PFNGLGETNUNIFORMIVPROC glGetnUniformiv;
+  PFNGLGETNUNIFORMUIVPROC glGetnUniformuiv;
+  PFNGLREADNPIXELSPROC glReadnPixels;
+  PFNGLGETNMAPDVPROC glGetnMapdv;
+  PFNGLGETNMAPFVPROC glGetnMapfv;
+  PFNGLGETNMAPIVPROC glGetnMapiv;
+  PFNGLGETNPIXELMAPFVPROC  glGetnPixelMapfv;
+  PFNGLGETNPIXELMAPUIVPROC glGetnPixelMapuiv;
+  PFNGLGETNPIXELMAPUSVPROC glGetnPixelMapusv;
+  PFNGLGETNPOLYGONSTIPPLEPROC glGetnPolygonStipple;
+  PFNGLGETNCOLORTABLEPROC glGetnColorTable;
+  PFNGLGETNCONVOLUTIONFILTERPROC glGetnConvolutionFilter;
+  PFNGLGETNSEPARABLEFILTERPROC glGetnSeparableFilter;
+  PFNGLGETNHISTOGRAMPROC glGetnHistogram;
+  PFNGLGETNMINMAXPROC glGetnMinmax;
+  PFNGLTEXTUREBARRIERPROC glTextureBarrier;
+
 public: //! @name GL_EXT_geometry_shader4
 
   PFNGLPROGRAMPARAMETERIEXTPROC glProgramParameteriEXT;