summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThiago Marcos P. Santos <tmpsantos@gmail.com>2019-02-05 15:18:01 +0200
committerThiago Marcos P. Santos <tmpsantos@gmail.com>2019-02-12 19:42:08 +0200
commit470b01847db1046bbae872f932b0e83ebf3af5f8 (patch)
tree2bb4ca4f6ee0bb892041e37b52a6c3f172e1da16
parent9b66be7bef71d100579647d787b542d248952f88 (diff)
downloadqtlocation-mapboxgl-470b01847db1046bbae872f932b0e83ebf3af5f8.tar.gz
[android,linux,darwin,qt] Load OpenGL for the platform
These loaders will provide pointers to the platform implementation of OpenGL. On Android, Linux and Darwin, we simply link with the OpenGL implementation that is expected to exist on the platform. Qt has its own GL loader, so we just connect the dots.
-rw-r--r--platform/android/src/gl_functions.cpp151
-rw-r--r--platform/darwin/src/gl_functions.cpp180
-rw-r--r--platform/linux/src/gl_functions.cpp166
-rw-r--r--platform/qt/src/gl_functions.cpp566
4 files changed, 1063 insertions, 0 deletions
diff --git a/platform/android/src/gl_functions.cpp b/platform/android/src/gl_functions.cpp
new file mode 100644
index 0000000000..168ae4c52e
--- /dev/null
+++ b/platform/android/src/gl_functions.cpp
@@ -0,0 +1,151 @@
+#include <mbgl/platform/gl_functions.hpp>
+
+#define GL_GLEXT_PROTOTYPES
+#include <GLES2/gl2.h>
+#include <GLES2/gl2ext.h>
+
+namespace mbgl {
+namespace platform {
+
+void (* const glActiveTexture)(GLenum) = ::glActiveTexture;
+void (* const glAttachShader)(GLuint, GLuint) = ::glAttachShader;
+void (* const glBindAttribLocation)(GLuint, GLuint, const GLchar *) = ::glBindAttribLocation;
+void (* const glBindBuffer)(GLenum, GLuint) = ::glBindBuffer;
+void (* const glBindFramebuffer)(GLenum, GLuint) = ::glBindFramebuffer;
+void (* const glBindRenderbuffer)(GLenum, GLuint) = ::glBindRenderbuffer;
+void (* const glBindTexture)(GLenum, GLuint) = ::glBindTexture;
+void (* const glBlendColor)(GLfloat, GLfloat, GLfloat, GLfloat) = ::glBlendColor;
+void (* const glBlendEquation)(GLenum) = ::glBlendEquation;
+void (* const glBlendEquationSeparate)(GLenum, GLenum) = ::glBlendEquationSeparate;
+void (* const glBlendFunc)(GLenum, GLenum) = ::glBlendFunc;
+void (* const glBlendFuncSeparate)(GLenum, GLenum, GLenum, GLenum) = ::glBlendFuncSeparate;
+void (* const glBufferData)(GLenum, GLsizeiptr, const void *, GLenum) = ::glBufferData;
+void (* const glBufferSubData)(GLenum, GLintptr, GLsizeiptr, const void *) = ::glBufferSubData;
+GLenum (* const glCheckFramebufferStatus)(GLenum) = ::glCheckFramebufferStatus;
+void (* const glClear)(GLbitfield) = ::glClear;
+void (* const glClearColor)(GLfloat, GLfloat, GLfloat, GLfloat) = ::glClearColor;
+void (* const glClearDepthf)(GLfloat) = ::glClearDepthf;
+void (* const glClearStencil)(GLint) = ::glClearStencil;
+void (* const glColorMask)(GLboolean, GLboolean, GLboolean, GLboolean) = ::glColorMask;
+void (* const glCompileShader)(GLuint) = ::glCompileShader;
+void (* const glCompressedTexImage2D)(GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const void *) = ::glCompressedTexImage2D;
+void (* const glCompressedTexSubImage2D)(GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const void *) = ::glCompressedTexSubImage2D;
+void (* const glCopyTexImage2D)(GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLsizei, GLint) = ::glCopyTexImage2D;
+void (* const glCopyTexSubImage2D)(GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei) = ::glCopyTexSubImage2D;
+GLuint (* const glCreateProgram)() = ::glCreateProgram;
+GLuint (* const glCreateShader)(GLenum) = ::glCreateShader;
+void (* const glCullFace)(GLenum) = ::glCullFace;
+void (* const glDeleteBuffers)(GLsizei, const GLuint *) = ::glDeleteBuffers;
+void (* const glDeleteFramebuffers)(GLsizei, const GLuint *) = ::glDeleteFramebuffers;
+void (* const glDeleteProgram)(GLuint) = ::glDeleteProgram;
+void (* const glDeleteRenderbuffers)(GLsizei, const GLuint *) = ::glDeleteRenderbuffers;
+void (* const glDeleteShader)(GLuint) = ::glDeleteShader;
+void (* const glDeleteTextures)(GLsizei, const GLuint *) = ::glDeleteTextures;
+void (* const glDepthFunc)(GLenum) = ::glDepthFunc;
+void (* const glDepthMask)(GLboolean) = ::glDepthMask;
+void (* const glDepthRangef)(GLfloat, GLfloat) = ::glDepthRangef;
+void (* const glDetachShader)(GLuint, GLuint) = ::glDetachShader;
+void (* const glDisable)(GLenum) = ::glDisable;
+void (* const glDisableVertexAttribArray)(GLuint) = ::glDisableVertexAttribArray;
+void (* const glDrawArrays)(GLenum, GLint, GLsizei) = ::glDrawArrays;
+void (* const glDrawElements)(GLenum, GLsizei, GLenum, const void *) = ::glDrawElements;
+void (* const glEnable)(GLenum) = ::glEnable;
+void (* const glEnableVertexAttribArray)(GLuint) = ::glEnableVertexAttribArray;
+void (* const glFinish)() = ::glFinish;
+void (* const glFlush)() = ::glFlush;
+void (* const glFramebufferRenderbuffer)(GLenum, GLenum, GLenum, GLuint) = ::glFramebufferRenderbuffer;
+void (* const glFramebufferTexture2D)(GLenum, GLenum, GLenum, GLuint, GLint) = ::glFramebufferTexture2D;
+void (* const glFrontFace)(GLenum) = ::glFrontFace;
+void (* const glGenBuffers)(GLsizei, GLuint *) = ::glGenBuffers;
+void (* const glGenerateMipmap)(GLenum) = ::glGenerateMipmap;
+void (* const glGenFramebuffers)(GLsizei, GLuint *) = ::glGenFramebuffers;
+void (* const glGenRenderbuffers)(GLsizei, GLuint *) = ::glGenRenderbuffers;
+void (* const glGenTextures)(GLsizei, GLuint *) = ::glGenTextures;
+void (* const glGetActiveAttrib)(GLuint, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLchar *) = ::glGetActiveAttrib;
+void (* const glGetActiveUniform)(GLuint, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLchar *) = ::glGetActiveUniform;
+void (* const glGetAttachedShaders)(GLuint, GLsizei, GLsizei *, GLuint *) = ::glGetAttachedShaders;
+GLint (* const glGetAttribLocation)(GLuint, const GLchar *) = ::glGetAttribLocation;
+void (* const glGetBooleanv)(GLenum, GLboolean *) = ::glGetBooleanv;
+void (* const glGetBufferParameteriv)(GLenum, GLenum, GLint *) = ::glGetBufferParameteriv;
+GLenum (* const glGetError)() = ::glGetError;
+void (* const glGetFloatv)(GLenum, GLfloat *) = ::glGetFloatv;
+void (* const glGetFramebufferAttachmentParameteriv)(GLenum, GLenum, GLenum, GLint *) = ::glGetFramebufferAttachmentParameteriv;
+void (* const glGetIntegerv)(GLenum, GLint *) = ::glGetIntegerv;
+void (* const glGetProgramInfoLog)(GLuint, GLsizei, GLsizei *, GLchar *) = ::glGetProgramInfoLog;
+void (* const glGetProgramiv)(GLuint, GLenum, GLint *) = ::glGetProgramiv;
+void (* const glGetRenderbufferParameteriv)(GLenum, GLenum, GLint *) = ::glGetRenderbufferParameteriv;
+void (* const glGetShaderInfoLog)(GLuint, GLsizei, GLsizei *, GLchar *) = ::glGetShaderInfoLog;
+void (* const glGetShaderiv)(GLuint, GLenum, GLint *) = ::glGetShaderiv;
+void (* const glGetShaderSource)(GLuint, GLsizei, GLsizei *, GLchar *) = ::glGetShaderSource;
+const GLubyte *(*glGetString)(GLenum) = ::glGetString;
+void (* const glGetTexParameterfv)(GLenum, GLenum, GLfloat *) = ::glGetTexParameterfv;
+void (* const glGetTexParameteriv)(GLenum, GLenum, GLint *) = ::glGetTexParameteriv;
+void (* const glGetUniformfv)(GLuint, GLint, GLfloat *) = ::glGetUniformfv;
+void (* const glGetUniformiv)(GLuint, GLint, GLint *) = ::glGetUniformiv;
+GLint (* const glGetUniformLocation)(GLuint, const GLchar *) = ::glGetUniformLocation;
+void (* const glGetVertexAttribfv)(GLuint, GLenum, GLfloat *) = ::glGetVertexAttribfv;
+void (* const glGetVertexAttribiv)(GLuint, GLenum, GLint *) = ::glGetVertexAttribiv;
+void (* const glGetVertexAttribPointerv)(GLuint, GLenum, void **) = ::glGetVertexAttribPointerv;
+void (* const glHint)(GLenum, GLenum) = ::glHint;
+GLboolean (* const glIsBuffer)(GLuint) = ::glIsBuffer;
+GLboolean (* const glIsEnabled)(GLenum) = ::glIsEnabled;
+GLboolean (* const glIsFramebuffer)(GLuint) = ::glIsFramebuffer;
+GLboolean (* const glIsProgram)(GLuint) = ::glIsProgram;
+GLboolean (* const glIsRenderbuffer)(GLuint) = ::glIsRenderbuffer;
+GLboolean (* const glIsShader)(GLuint) = ::glIsShader;
+GLboolean (* const glIsTexture)(GLuint) = ::glIsTexture;
+void (* const glLineWidth)(GLfloat) = ::glLineWidth;
+void (* const glLinkProgram)(GLuint) = ::glLinkProgram;
+void (* const glPixelStorei)(GLenum, GLint) = ::glPixelStorei;
+void (* const glPolygonOffset)(GLfloat, GLfloat) = ::glPolygonOffset;
+void (* const glReadPixels)(GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, void *) = ::glReadPixels;
+void (* const glRenderbufferStorage)(GLenum, GLenum, GLsizei, GLsizei) = ::glRenderbufferStorage;
+void (* const glSampleCoverage)(GLfloat, GLboolean) = ::glSampleCoverage;
+void (* const glScissor)(GLint, GLint, GLsizei, GLsizei) = ::glScissor;
+void (* const glShaderSource)(GLuint, GLsizei, const GLchar * const*, const GLint *) = ::glShaderSource;
+void (* const glStencilFunc)(GLenum, GLint, GLuint) = ::glStencilFunc;
+void (* const glStencilFuncSeparate)(GLenum, GLenum, GLint, GLuint) = ::glStencilFuncSeparate;
+void (* const glStencilMask)(GLuint) = ::glStencilMask;
+void (* const glStencilMaskSeparate)(GLenum, GLuint) = ::glStencilMaskSeparate;
+void (* const glStencilOp)(GLenum, GLenum, GLenum) = ::glStencilOp;
+void (* const glStencilOpSeparate)(GLenum, GLenum, GLenum, GLenum) = ::glStencilOpSeparate;
+void (* const glTexImage2D)(GLenum, GLint, GLint, GLsizei, GLsizei, GLint, GLenum, GLenum, const void *) = ::glTexImage2D;
+void (* const glTexParameterf)(GLenum, GLenum, GLfloat) = ::glTexParameterf;
+void (* const glTexParameterfv)(GLenum, GLenum, const GLfloat *) = ::glTexParameterfv;
+void (* const glTexParameteri)(GLenum, GLenum, GLint) = ::glTexParameteri;
+void (* const glTexParameteriv)(GLenum, GLenum, const GLint *) = ::glTexParameteriv;
+void (* const glTexSubImage2D)(GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, const void *) = ::glTexSubImage2D;
+void (* const glUniform1f)(GLint, GLfloat) = ::glUniform1f;
+void (* const glUniform1fv)(GLint, GLsizei, const GLfloat *) = ::glUniform1fv;
+void (* const glUniform1i)(GLint, GLint) = ::glUniform1i;
+void (* const glUniform1iv)(GLint, GLsizei, const GLint *) = ::glUniform1iv;
+void (* const glUniform2f)(GLint, GLfloat, GLfloat) = ::glUniform2f;
+void (* const glUniform2fv)(GLint, GLsizei, const GLfloat *) = ::glUniform2fv;
+void (* const glUniform2i)(GLint, GLint, GLint) = ::glUniform2i;
+void (* const glUniform2iv)(GLint, GLsizei, const GLint *) = ::glUniform2iv;
+void (* const glUniform3f)(GLint, GLfloat, GLfloat, GLfloat) = ::glUniform3f;
+void (* const glUniform3fv)(GLint, GLsizei, const GLfloat *) = ::glUniform3fv;
+void (* const glUniform3i)(GLint, GLint, GLint, GLint) = ::glUniform3i;
+void (* const glUniform3iv)(GLint, GLsizei, const GLint *) = ::glUniform3iv;
+void (* const glUniform4f)(GLint, GLfloat, GLfloat, GLfloat, GLfloat) = ::glUniform4f;
+void (* const glUniform4fv)(GLint, GLsizei, const GLfloat *) = ::glUniform4fv;
+void (* const glUniform4i)(GLint, GLint, GLint, GLint, GLint) = ::glUniform4i;
+void (* const glUniform4iv)(GLint, GLsizei, const GLint *) = ::glUniform4iv;
+void (* const glUniformMatrix2fv)(GLint, GLsizei, GLboolean, const GLfloat *) = ::glUniformMatrix2fv;
+void (* const glUniformMatrix3fv)(GLint, GLsizei, GLboolean, const GLfloat *) = ::glUniformMatrix3fv;
+void (* const glUniformMatrix4fv)(GLint, GLsizei, GLboolean, const GLfloat *) = ::glUniformMatrix4fv;
+void (* const glUseProgram)(GLuint) = ::glUseProgram;
+void (* const glValidateProgram)(GLuint) = ::glValidateProgram;
+void (* const glVertexAttrib1f)(GLuint, GLfloat) = ::glVertexAttrib1f;
+void (* const glVertexAttrib1fv)(GLuint, const GLfloat *) = ::glVertexAttrib1fv;
+void (* const glVertexAttrib2f)(GLuint, GLfloat, GLfloat) = ::glVertexAttrib2f;
+void (* const glVertexAttrib2fv)(GLuint, const GLfloat *) = ::glVertexAttrib2fv;
+void (* const glVertexAttrib3f)(GLuint, GLfloat, GLfloat, GLfloat) = ::glVertexAttrib3f;
+void (* const glVertexAttrib3fv)(GLuint, const GLfloat *) = ::glVertexAttrib3fv;
+void (* const glVertexAttrib4f)(GLuint, GLfloat, GLfloat, GLfloat, GLfloat) = ::glVertexAttrib4f;
+void (* const glVertexAttrib4fv)(GLuint, const GLfloat *) = ::glVertexAttrib4fv;
+void (* const glVertexAttribPointer)(GLuint, GLint, GLenum, GLboolean, GLsizei, const void *) = ::glVertexAttribPointer;
+void (* const glViewport)(GLint, GLint, GLsizei, GLsizei) = ::glViewport;
+
+} // namespace platform
+} // namespace mbgl \ No newline at end of file
diff --git a/platform/darwin/src/gl_functions.cpp b/platform/darwin/src/gl_functions.cpp
new file mode 100644
index 0000000000..b8828d3117
--- /dev/null
+++ b/platform/darwin/src/gl_functions.cpp
@@ -0,0 +1,180 @@
+#include <mbgl/platform/gl_functions.hpp>
+
+#include "TargetConditionals.h"
+
+#if TARGET_OS_IPHONE
+ #include <OpenGLES/ES2/gl.h>
+ #include <OpenGLES/ES2/glext.h>
+#elif TARGET_OS_SIMULATOR
+ #include <OpenGLES/ES2/gl.h>
+ #include <OpenGLES/ES2/glext.h>
+#elif TARGET_OS_MAC
+ #include <OpenGL/OpenGL.h>
+ #include <OpenGL/gl.h>
+ #include <OpenGL/glext.h>
+#else
+ #error Unsupported Apple platform
+#endif
+
+namespace mbgl {
+namespace platform {
+
+void (* const glActiveTexture)(GLenum) = ::glActiveTexture;
+void (* const glAttachShader)(GLuint, GLuint) = ::glAttachShader;
+void (* const glBindAttribLocation)(GLuint, GLuint, const GLchar *) = ::glBindAttribLocation;
+void (* const glBindBuffer)(GLenum, GLuint) = ::glBindBuffer;
+void (* const glBindFramebuffer)(GLenum, GLuint) = ::glBindFramebuffer;
+void (* const glBindRenderbuffer)(GLenum, GLuint) = ::glBindRenderbuffer;
+void (* const glBindTexture)(GLenum, GLuint) = ::glBindTexture;
+void (* const glBlendColor)(GLfloat, GLfloat, GLfloat, GLfloat) = ::glBlendColor;
+void (* const glBlendEquation)(GLenum) = ::glBlendEquation;
+void (* const glBlendEquationSeparate)(GLenum, GLenum) = ::glBlendEquationSeparate;
+void (* const glBlendFunc)(GLenum, GLenum) = ::glBlendFunc;
+void (* const glBlendFuncSeparate)(GLenum, GLenum, GLenum, GLenum) = ::glBlendFuncSeparate;
+void (* const glBufferData)(GLenum, GLsizeiptr, const void *, GLenum) = ::glBufferData;
+void (* const glBufferSubData)(GLenum, GLintptr, GLsizeiptr, const void *) = ::glBufferSubData;
+GLenum (* const glCheckFramebufferStatus)(GLenum) = ::glCheckFramebufferStatus;
+void (* const glClear)(GLbitfield) = ::glClear;
+void (* const glClearColor)(GLfloat, GLfloat, GLfloat, GLfloat) = ::glClearColor;
+#if !TARGET_OS_IPHONE && !TARGET_OS_SIMULATOR && TARGET_OS_MAC
+void (* const glClearDepthf)(GLfloat) = [](GLfloat depth) { return ::glClearDepth(depth); };
+#else
+void (* const glClearDepthf)(GLfloat) = ::glClearDepthf;
+#endif
+void (* const glClearStencil)(GLint) = ::glClearStencil;
+void (* const glColorMask)(GLboolean, GLboolean, GLboolean, GLboolean) = ::glColorMask;
+void (* const glCompileShader)(GLuint) = ::glCompileShader;
+void (* const glCompressedTexImage2D)(GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const void *) = ::glCompressedTexImage2D;
+void (* const glCompressedTexSubImage2D)(GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const void *) = ::glCompressedTexSubImage2D;
+void (* const glCopyTexImage2D)(GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLsizei, GLint) = ::glCopyTexImage2D;
+void (* const glCopyTexSubImage2D)(GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei) = ::glCopyTexSubImage2D;
+GLuint (* const glCreateProgram)() = ::glCreateProgram;
+GLuint (* const glCreateShader)(GLenum) = ::glCreateShader;
+void (* const glCullFace)(GLenum) = ::glCullFace;
+void (* const glDeleteBuffers)(GLsizei, const GLuint *) = ::glDeleteBuffers;
+void (* const glDeleteFramebuffers)(GLsizei, const GLuint *) = ::glDeleteFramebuffers;
+void (* const glDeleteProgram)(GLuint) = ::glDeleteProgram;
+void (* const glDeleteRenderbuffers)(GLsizei, const GLuint *) = ::glDeleteRenderbuffers;
+void (* const glDeleteShader)(GLuint) = ::glDeleteShader;
+void (* const glDeleteTextures)(GLsizei, const GLuint *) = ::glDeleteTextures;
+void (* const glDepthFunc)(GLenum) = ::glDepthFunc;
+void (* const glDepthMask)(GLboolean) = ::glDepthMask;
+#if !TARGET_OS_IPHONE && !TARGET_OS_SIMULATOR && TARGET_OS_MAC
+void (* const glDepthRangef)(GLfloat, GLfloat) = [](GLfloat nearVal, GLfloat farVal) { return ::glDepthRange(nearVal, farVal); };
+#else
+void (* const glDepthRangef)(GLfloat, GLfloat) = ::glDepthRangef;
+#endif
+void (* const glDetachShader)(GLuint, GLuint) = ::glDetachShader;
+void (* const glDisable)(GLenum) = ::glDisable;
+void (* const glDisableVertexAttribArray)(GLuint) = ::glDisableVertexAttribArray;
+void (* const glDrawArrays)(GLenum, GLint, GLsizei) = ::glDrawArrays;
+void (* const glDrawElements)(GLenum, GLsizei, GLenum, const void *) = ::glDrawElements;
+void (* const glEnable)(GLenum) = ::glEnable;
+void (* const glEnableVertexAttribArray)(GLuint) = ::glEnableVertexAttribArray;
+void (* const glFinish)() = ::glFinish;
+void (* const glFlush)() = ::glFlush;
+void (* const glFramebufferRenderbuffer)(GLenum, GLenum, GLenum, GLuint) = ::glFramebufferRenderbuffer;
+void (* const glFramebufferTexture2D)(GLenum, GLenum, GLenum, GLuint, GLint) = ::glFramebufferTexture2D;
+void (* const glFrontFace)(GLenum) = ::glFrontFace;
+void (* const glGenBuffers)(GLsizei, GLuint *) = ::glGenBuffers;
+void (* const glGenerateMipmap)(GLenum) = ::glGenerateMipmap;
+void (* const glGenFramebuffers)(GLsizei, GLuint *) = ::glGenFramebuffers;
+void (* const glGenRenderbuffers)(GLsizei, GLuint *) = ::glGenRenderbuffers;
+void (* const glGenTextures)(GLsizei, GLuint *) = ::glGenTextures;
+void (* const glGetActiveAttrib)(GLuint, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLchar *) = ::glGetActiveAttrib;
+void (* const glGetActiveUniform)(GLuint, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLchar *) = ::glGetActiveUniform;
+void (* const glGetAttachedShaders)(GLuint, GLsizei, GLsizei *, GLuint *) = ::glGetAttachedShaders;
+GLint (* const glGetAttribLocation)(GLuint, const GLchar *) = ::glGetAttribLocation;
+void (* const glGetBooleanv)(GLenum, GLboolean *) = ::glGetBooleanv;
+void (* const glGetBufferParameteriv)(GLenum, GLenum, GLint *) = ::glGetBufferParameteriv;
+GLenum (* const glGetError)() = ::glGetError;
+void (* const glGetFloatv)(GLenum, GLfloat *) = ::glGetFloatv;
+void (* const glGetFramebufferAttachmentParameteriv)(GLenum, GLenum, GLenum, GLint *) = ::glGetFramebufferAttachmentParameteriv;
+void (* const glGetIntegerv)(GLenum, GLint *) = ::glGetIntegerv;
+void (* const glGetProgramInfoLog)(GLuint, GLsizei, GLsizei *, GLchar *) = ::glGetProgramInfoLog;
+void (* const glGetProgramiv)(GLuint, GLenum, GLint *) = ::glGetProgramiv;
+void (* const glGetRenderbufferParameteriv)(GLenum, GLenum, GLint *) = ::glGetRenderbufferParameteriv;
+void (* const glGetShaderInfoLog)(GLuint, GLsizei, GLsizei *, GLchar *) = ::glGetShaderInfoLog;
+void (* const glGetShaderiv)(GLuint, GLenum, GLint *) = ::glGetShaderiv;
+void (* const glGetShaderSource)(GLuint, GLsizei, GLsizei *, GLchar *) = ::glGetShaderSource;
+const GLubyte *(*glGetString)(GLenum) = ::glGetString;
+void (* const glGetTexParameterfv)(GLenum, GLenum, GLfloat *) = ::glGetTexParameterfv;
+void (* const glGetTexParameteriv)(GLenum, GLenum, GLint *) = ::glGetTexParameteriv;
+void (* const glGetUniformfv)(GLuint, GLint, GLfloat *) = ::glGetUniformfv;
+void (* const glGetUniformiv)(GLuint, GLint, GLint *) = ::glGetUniformiv;
+GLint (* const glGetUniformLocation)(GLuint, const GLchar *) = ::glGetUniformLocation;
+void (* const glGetVertexAttribfv)(GLuint, GLenum, GLfloat *) = ::glGetVertexAttribfv;
+void (* const glGetVertexAttribiv)(GLuint, GLenum, GLint *) = ::glGetVertexAttribiv;
+void (* const glGetVertexAttribPointerv)(GLuint, GLenum, void **) = ::glGetVertexAttribPointerv;
+void (* const glHint)(GLenum, GLenum) = ::glHint;
+GLboolean (* const glIsBuffer)(GLuint) = ::glIsBuffer;
+GLboolean (* const glIsEnabled)(GLenum) = ::glIsEnabled;
+GLboolean (* const glIsFramebuffer)(GLuint) = ::glIsFramebuffer;
+GLboolean (* const glIsProgram)(GLuint) = ::glIsProgram;
+GLboolean (* const glIsRenderbuffer)(GLuint) = ::glIsRenderbuffer;
+GLboolean (* const glIsShader)(GLuint) = ::glIsShader;
+GLboolean (* const glIsTexture)(GLuint) = ::glIsTexture;
+void (* const glLineWidth)(GLfloat) = ::glLineWidth;
+void (* const glLinkProgram)(GLuint) = ::glLinkProgram;
+void (* const glPixelStorei)(GLenum, GLint) = ::glPixelStorei;
+void (* const glPolygonOffset)(GLfloat, GLfloat) = ::glPolygonOffset;
+void (* const glReadPixels)(GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, void *) = ::glReadPixels;
+void (* const glRenderbufferStorage)(GLenum, GLenum, GLsizei, GLsizei) = ::glRenderbufferStorage;
+void (* const glSampleCoverage)(GLfloat, GLboolean) = ::glSampleCoverage;
+void (* const glScissor)(GLint, GLint, GLsizei, GLsizei) = ::glScissor;
+void (* const glShaderSource)(GLuint, GLsizei, const GLchar * const*, const GLint *) = ::glShaderSource;
+void (* const glStencilFunc)(GLenum, GLint, GLuint) = ::glStencilFunc;
+void (* const glStencilFuncSeparate)(GLenum, GLenum, GLint, GLuint) = ::glStencilFuncSeparate;
+void (* const glStencilMask)(GLuint) = ::glStencilMask;
+void (* const glStencilMaskSeparate)(GLenum, GLuint) = ::glStencilMaskSeparate;
+void (* const glStencilOp)(GLenum, GLenum, GLenum) = ::glStencilOp;
+void (* const glStencilOpSeparate)(GLenum, GLenum, GLenum, GLenum) = ::glStencilOpSeparate;
+void (* const glTexImage2D)(GLenum, GLint, GLint, GLsizei, GLsizei, GLint, GLenum, GLenum, const void *) = ::glTexImage2D;
+void (* const glTexParameterf)(GLenum, GLenum, GLfloat) = ::glTexParameterf;
+void (* const glTexParameterfv)(GLenum, GLenum, const GLfloat *) = ::glTexParameterfv;
+void (* const glTexParameteri)(GLenum, GLenum, GLint) = ::glTexParameteri;
+void (* const glTexParameteriv)(GLenum, GLenum, const GLint *) = ::glTexParameteriv;
+void (* const glTexSubImage2D)(GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, const void *) = ::glTexSubImage2D;
+void (* const glUniform1f)(GLint, GLfloat) = ::glUniform1f;
+void (* const glUniform1fv)(GLint, GLsizei, const GLfloat *) = ::glUniform1fv;
+void (* const glUniform1i)(GLint, GLint) = ::glUniform1i;
+void (* const glUniform1iv)(GLint, GLsizei, const GLint *) = ::glUniform1iv;
+void (* const glUniform2f)(GLint, GLfloat, GLfloat) = ::glUniform2f;
+void (* const glUniform2fv)(GLint, GLsizei, const GLfloat *) = ::glUniform2fv;
+void (* const glUniform2i)(GLint, GLint, GLint) = ::glUniform2i;
+void (* const glUniform2iv)(GLint, GLsizei, const GLint *) = ::glUniform2iv;
+void (* const glUniform3f)(GLint, GLfloat, GLfloat, GLfloat) = ::glUniform3f;
+void (* const glUniform3fv)(GLint, GLsizei, const GLfloat *) = ::glUniform3fv;
+void (* const glUniform3i)(GLint, GLint, GLint, GLint) = ::glUniform3i;
+void (* const glUniform3iv)(GLint, GLsizei, const GLint *) = ::glUniform3iv;
+void (* const glUniform4f)(GLint, GLfloat, GLfloat, GLfloat, GLfloat) = ::glUniform4f;
+void (* const glUniform4fv)(GLint, GLsizei, const GLfloat *) = ::glUniform4fv;
+void (* const glUniform4i)(GLint, GLint, GLint, GLint, GLint) = ::glUniform4i;
+void (* const glUniform4iv)(GLint, GLsizei, const GLint *) = ::glUniform4iv;
+void (* const glUniformMatrix2fv)(GLint, GLsizei, GLboolean, const GLfloat *) = ::glUniformMatrix2fv;
+void (* const glUniformMatrix3fv)(GLint, GLsizei, GLboolean, const GLfloat *) = ::glUniformMatrix3fv;
+void (* const glUniformMatrix4fv)(GLint, GLsizei, GLboolean, const GLfloat *) = ::glUniformMatrix4fv;
+void (* const glUseProgram)(GLuint) = ::glUseProgram;
+void (* const glValidateProgram)(GLuint) = ::glValidateProgram;
+void (* const glVertexAttrib1f)(GLuint, GLfloat) = ::glVertexAttrib1f;
+void (* const glVertexAttrib1fv)(GLuint, const GLfloat *) = ::glVertexAttrib1fv;
+void (* const glVertexAttrib2f)(GLuint, GLfloat, GLfloat) = ::glVertexAttrib2f;
+void (* const glVertexAttrib2fv)(GLuint, const GLfloat *) = ::glVertexAttrib2fv;
+void (* const glVertexAttrib3f)(GLuint, GLfloat, GLfloat, GLfloat) = ::glVertexAttrib3f;
+void (* const glVertexAttrib3fv)(GLuint, const GLfloat *) = ::glVertexAttrib3fv;
+void (* const glVertexAttrib4f)(GLuint, GLfloat, GLfloat, GLfloat, GLfloat) = ::glVertexAttrib4f;
+void (* const glVertexAttrib4fv)(GLuint, const GLfloat *) = ::glVertexAttrib4fv;
+void (* const glVertexAttribPointer)(GLuint, GLint, GLenum, GLboolean, GLsizei, const void *) = ::glVertexAttribPointer;
+void (* const glViewport)(GLint, GLint, GLsizei, GLsizei) = ::glViewport;
+
+#ifndef MBGL_USE_GLES2
+void (* const glDrawPixels)(GLsizei, GLsizei, GLenum, GLenum, const GLvoid *) = ::glDrawPixels;
+void (* const glGetDoublev)(GLenum, GLdouble *) = ::glGetDoublev;
+void (* const glPixelTransferf)(GLenum, GLfloat) = ::glPixelTransferf;
+void (* const glPixelZoom)(GLfloat, GLfloat) = ::glPixelZoom;
+void (* const glPointSize)(GLfloat) = ::glPointSize;
+void (* const glRasterPos4d)(GLdouble, GLdouble, GLdouble, GLdouble) = ::glRasterPos4d;
+#endif
+
+} // namespace platform
+} // namespace mbgl
diff --git a/platform/linux/src/gl_functions.cpp b/platform/linux/src/gl_functions.cpp
new file mode 100644
index 0000000000..a5c7527935
--- /dev/null
+++ b/platform/linux/src/gl_functions.cpp
@@ -0,0 +1,166 @@
+#include <mbgl/platform/gl_functions.hpp>
+
+#define GL_GLEXT_PROTOTYPES
+
+#ifndef MBGL_USE_GLES2
+#include <GL/gl.h>
+#include <GL/glext.h>
+#else
+#include <GLES2/gl2.h>
+#include <GLES2/gl2ext.h>
+#endif
+
+namespace mbgl {
+namespace platform {
+
+void (* const glActiveTexture)(GLenum) = ::glActiveTexture;
+void (* const glAttachShader)(GLuint, GLuint) = ::glAttachShader;
+void (* const glBindAttribLocation)(GLuint, GLuint, const GLchar *) = ::glBindAttribLocation;
+void (* const glBindBuffer)(GLenum, GLuint) = ::glBindBuffer;
+void (* const glBindFramebuffer)(GLenum, GLuint) = ::glBindFramebuffer;
+void (* const glBindRenderbuffer)(GLenum, GLuint) = ::glBindRenderbuffer;
+void (* const glBindTexture)(GLenum, GLuint) = ::glBindTexture;
+void (* const glBlendColor)(GLfloat, GLfloat, GLfloat, GLfloat) = ::glBlendColor;
+void (* const glBlendEquation)(GLenum) = ::glBlendEquation;
+void (* const glBlendEquationSeparate)(GLenum, GLenum) = ::glBlendEquationSeparate;
+void (* const glBlendFunc)(GLenum, GLenum) = ::glBlendFunc;
+void (* const glBlendFuncSeparate)(GLenum, GLenum, GLenum, GLenum) = ::glBlendFuncSeparate;
+void (* const glBufferData)(GLenum, GLsizeiptr, const void *, GLenum) = ::glBufferData;
+void (* const glBufferSubData)(GLenum, GLintptr, GLsizeiptr, const void *) = ::glBufferSubData;
+GLenum (* const glCheckFramebufferStatus)(GLenum) = ::glCheckFramebufferStatus;
+void (* const glClear)(GLbitfield) = ::glClear;
+void (* const glClearColor)(GLfloat, GLfloat, GLfloat, GLfloat) = ::glClearColor;
+void (* const glClearDepthf)(GLfloat) = ::glClearDepthf;
+void (* const glClearStencil)(GLint) = ::glClearStencil;
+void (* const glColorMask)(GLboolean, GLboolean, GLboolean, GLboolean) = ::glColorMask;
+void (* const glCompileShader)(GLuint) = ::glCompileShader;
+void (* const glCompressedTexImage2D)(GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const void *) = ::glCompressedTexImage2D;
+void (* const glCompressedTexSubImage2D)(GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const void *) = ::glCompressedTexSubImage2D;
+void (* const glCopyTexImage2D)(GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLsizei, GLint) = ::glCopyTexImage2D;
+void (* const glCopyTexSubImage2D)(GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei) = ::glCopyTexSubImage2D;
+GLuint (* const glCreateProgram)() = ::glCreateProgram;
+GLuint (* const glCreateShader)(GLenum) = ::glCreateShader;
+void (* const glCullFace)(GLenum) = ::glCullFace;
+void (* const glDeleteBuffers)(GLsizei, const GLuint *) = ::glDeleteBuffers;
+void (* const glDeleteFramebuffers)(GLsizei, const GLuint *) = ::glDeleteFramebuffers;
+void (* const glDeleteProgram)(GLuint) = ::glDeleteProgram;
+void (* const glDeleteRenderbuffers)(GLsizei, const GLuint *) = ::glDeleteRenderbuffers;
+void (* const glDeleteShader)(GLuint) = ::glDeleteShader;
+void (* const glDeleteTextures)(GLsizei, const GLuint *) = ::glDeleteTextures;
+void (* const glDepthFunc)(GLenum) = ::glDepthFunc;
+void (* const glDepthMask)(GLboolean) = ::glDepthMask;
+void (* const glDepthRangef)(GLfloat, GLfloat) = ::glDepthRangef;
+void (* const glDetachShader)(GLuint, GLuint) = ::glDetachShader;
+void (* const glDisable)(GLenum) = ::glDisable;
+void (* const glDisableVertexAttribArray)(GLuint) = ::glDisableVertexAttribArray;
+void (* const glDrawArrays)(GLenum, GLint, GLsizei) = ::glDrawArrays;
+void (* const glDrawElements)(GLenum, GLsizei, GLenum, const void *) = ::glDrawElements;
+void (* const glEnable)(GLenum) = ::glEnable;
+void (* const glEnableVertexAttribArray)(GLuint) = ::glEnableVertexAttribArray;
+void (* const glFinish)() = ::glFinish;
+void (* const glFlush)() = ::glFlush;
+void (* const glFramebufferRenderbuffer)(GLenum, GLenum, GLenum, GLuint) = ::glFramebufferRenderbuffer;
+void (* const glFramebufferTexture2D)(GLenum, GLenum, GLenum, GLuint, GLint) = ::glFramebufferTexture2D;
+void (* const glFrontFace)(GLenum) = ::glFrontFace;
+void (* const glGenBuffers)(GLsizei, GLuint *) = ::glGenBuffers;
+void (* const glGenerateMipmap)(GLenum) = ::glGenerateMipmap;
+void (* const glGenFramebuffers)(GLsizei, GLuint *) = ::glGenFramebuffers;
+void (* const glGenRenderbuffers)(GLsizei, GLuint *) = ::glGenRenderbuffers;
+void (* const glGenTextures)(GLsizei, GLuint *) = ::glGenTextures;
+void (* const glGetActiveAttrib)(GLuint, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLchar *) = ::glGetActiveAttrib;
+void (* const glGetActiveUniform)(GLuint, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLchar *) = ::glGetActiveUniform;
+void (* const glGetAttachedShaders)(GLuint, GLsizei, GLsizei *, GLuint *) = ::glGetAttachedShaders;
+GLint (* const glGetAttribLocation)(GLuint, const GLchar *) = ::glGetAttribLocation;
+void (* const glGetBooleanv)(GLenum, GLboolean *) = ::glGetBooleanv;
+void (* const glGetBufferParameteriv)(GLenum, GLenum, GLint *) = ::glGetBufferParameteriv;
+GLenum (* const glGetError)() = ::glGetError;
+void (* const glGetFloatv)(GLenum, GLfloat *) = ::glGetFloatv;
+void (* const glGetFramebufferAttachmentParameteriv)(GLenum, GLenum, GLenum, GLint *) = ::glGetFramebufferAttachmentParameteriv;
+void (* const glGetIntegerv)(GLenum, GLint *) = ::glGetIntegerv;
+void (* const glGetProgramInfoLog)(GLuint, GLsizei, GLsizei *, GLchar *) = ::glGetProgramInfoLog;
+void (* const glGetProgramiv)(GLuint, GLenum, GLint *) = ::glGetProgramiv;
+void (* const glGetRenderbufferParameteriv)(GLenum, GLenum, GLint *) = ::glGetRenderbufferParameteriv;
+void (* const glGetShaderInfoLog)(GLuint, GLsizei, GLsizei *, GLchar *) = ::glGetShaderInfoLog;
+void (* const glGetShaderiv)(GLuint, GLenum, GLint *) = ::glGetShaderiv;
+void (* const glGetShaderSource)(GLuint, GLsizei, GLsizei *, GLchar *) = ::glGetShaderSource;
+const GLubyte *(*glGetString)(GLenum) = ::glGetString;
+void (* const glGetTexParameterfv)(GLenum, GLenum, GLfloat *) = ::glGetTexParameterfv;
+void (* const glGetTexParameteriv)(GLenum, GLenum, GLint *) = ::glGetTexParameteriv;
+void (* const glGetUniformfv)(GLuint, GLint, GLfloat *) = ::glGetUniformfv;
+void (* const glGetUniformiv)(GLuint, GLint, GLint *) = ::glGetUniformiv;
+GLint (* const glGetUniformLocation)(GLuint, const GLchar *) = ::glGetUniformLocation;
+void (* const glGetVertexAttribfv)(GLuint, GLenum, GLfloat *) = ::glGetVertexAttribfv;
+void (* const glGetVertexAttribiv)(GLuint, GLenum, GLint *) = ::glGetVertexAttribiv;
+void (* const glGetVertexAttribPointerv)(GLuint, GLenum, void **) = ::glGetVertexAttribPointerv;
+void (* const glHint)(GLenum, GLenum) = ::glHint;
+GLboolean (* const glIsBuffer)(GLuint) = ::glIsBuffer;
+GLboolean (* const glIsEnabled)(GLenum) = ::glIsEnabled;
+GLboolean (* const glIsFramebuffer)(GLuint) = ::glIsFramebuffer;
+GLboolean (* const glIsProgram)(GLuint) = ::glIsProgram;
+GLboolean (* const glIsRenderbuffer)(GLuint) = ::glIsRenderbuffer;
+GLboolean (* const glIsShader)(GLuint) = ::glIsShader;
+GLboolean (* const glIsTexture)(GLuint) = ::glIsTexture;
+void (* const glLineWidth)(GLfloat) = ::glLineWidth;
+void (* const glLinkProgram)(GLuint) = ::glLinkProgram;
+void (* const glPixelStorei)(GLenum, GLint) = ::glPixelStorei;
+void (* const glPolygonOffset)(GLfloat, GLfloat) = ::glPolygonOffset;
+void (* const glReadPixels)(GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, void *) = ::glReadPixels;
+void (* const glRenderbufferStorage)(GLenum, GLenum, GLsizei, GLsizei) = ::glRenderbufferStorage;
+void (* const glSampleCoverage)(GLfloat, GLboolean) = ::glSampleCoverage;
+void (* const glScissor)(GLint, GLint, GLsizei, GLsizei) = ::glScissor;
+void (* const glShaderSource)(GLuint, GLsizei, const GLchar * const*, const GLint *) = ::glShaderSource;
+void (* const glStencilFunc)(GLenum, GLint, GLuint) = ::glStencilFunc;
+void (* const glStencilFuncSeparate)(GLenum, GLenum, GLint, GLuint) = ::glStencilFuncSeparate;
+void (* const glStencilMask)(GLuint) = ::glStencilMask;
+void (* const glStencilMaskSeparate)(GLenum, GLuint) = ::glStencilMaskSeparate;
+void (* const glStencilOp)(GLenum, GLenum, GLenum) = ::glStencilOp;
+void (* const glStencilOpSeparate)(GLenum, GLenum, GLenum, GLenum) = ::glStencilOpSeparate;
+void (* const glTexImage2D)(GLenum, GLint, GLint, GLsizei, GLsizei, GLint, GLenum, GLenum, const void *) = ::glTexImage2D;
+void (* const glTexParameterf)(GLenum, GLenum, GLfloat) = ::glTexParameterf;
+void (* const glTexParameterfv)(GLenum, GLenum, const GLfloat *) = ::glTexParameterfv;
+void (* const glTexParameteri)(GLenum, GLenum, GLint) = ::glTexParameteri;
+void (* const glTexParameteriv)(GLenum, GLenum, const GLint *) = ::glTexParameteriv;
+void (* const glTexSubImage2D)(GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, const void *) = ::glTexSubImage2D;
+void (* const glUniform1f)(GLint, GLfloat) = ::glUniform1f;
+void (* const glUniform1fv)(GLint, GLsizei, const GLfloat *) = ::glUniform1fv;
+void (* const glUniform1i)(GLint, GLint) = ::glUniform1i;
+void (* const glUniform1iv)(GLint, GLsizei, const GLint *) = ::glUniform1iv;
+void (* const glUniform2f)(GLint, GLfloat, GLfloat) = ::glUniform2f;
+void (* const glUniform2fv)(GLint, GLsizei, const GLfloat *) = ::glUniform2fv;
+void (* const glUniform2i)(GLint, GLint, GLint) = ::glUniform2i;
+void (* const glUniform2iv)(GLint, GLsizei, const GLint *) = ::glUniform2iv;
+void (* const glUniform3f)(GLint, GLfloat, GLfloat, GLfloat) = ::glUniform3f;
+void (* const glUniform3fv)(GLint, GLsizei, const GLfloat *) = ::glUniform3fv;
+void (* const glUniform3i)(GLint, GLint, GLint, GLint) = ::glUniform3i;
+void (* const glUniform3iv)(GLint, GLsizei, const GLint *) = ::glUniform3iv;
+void (* const glUniform4f)(GLint, GLfloat, GLfloat, GLfloat, GLfloat) = ::glUniform4f;
+void (* const glUniform4fv)(GLint, GLsizei, const GLfloat *) = ::glUniform4fv;
+void (* const glUniform4i)(GLint, GLint, GLint, GLint, GLint) = ::glUniform4i;
+void (* const glUniform4iv)(GLint, GLsizei, const GLint *) = ::glUniform4iv;
+void (* const glUniformMatrix2fv)(GLint, GLsizei, GLboolean, const GLfloat *) = ::glUniformMatrix2fv;
+void (* const glUniformMatrix3fv)(GLint, GLsizei, GLboolean, const GLfloat *) = ::glUniformMatrix3fv;
+void (* const glUniformMatrix4fv)(GLint, GLsizei, GLboolean, const GLfloat *) = ::glUniformMatrix4fv;
+void (* const glUseProgram)(GLuint) = ::glUseProgram;
+void (* const glValidateProgram)(GLuint) = ::glValidateProgram;
+void (* const glVertexAttrib1f)(GLuint, GLfloat) = ::glVertexAttrib1f;
+void (* const glVertexAttrib1fv)(GLuint, const GLfloat *) = ::glVertexAttrib1fv;
+void (* const glVertexAttrib2f)(GLuint, GLfloat, GLfloat) = ::glVertexAttrib2f;
+void (* const glVertexAttrib2fv)(GLuint, const GLfloat *) = ::glVertexAttrib2fv;
+void (* const glVertexAttrib3f)(GLuint, GLfloat, GLfloat, GLfloat) = ::glVertexAttrib3f;
+void (* const glVertexAttrib3fv)(GLuint, const GLfloat *) = ::glVertexAttrib3fv;
+void (* const glVertexAttrib4f)(GLuint, GLfloat, GLfloat, GLfloat, GLfloat) = ::glVertexAttrib4f;
+void (* const glVertexAttrib4fv)(GLuint, const GLfloat *) = ::glVertexAttrib4fv;
+void (* const glVertexAttribPointer)(GLuint, GLint, GLenum, GLboolean, GLsizei, const void *) = ::glVertexAttribPointer;
+void (* const glViewport)(GLint, GLint, GLsizei, GLsizei) = ::glViewport;
+
+#ifndef MBGL_USE_GLES2
+void (* const glDrawPixels)(GLsizei, GLsizei, GLenum, GLenum, const GLvoid *) = ::glDrawPixels;
+void (* const glGetDoublev)(GLenum, GLdouble *) = ::glGetDoublev;
+void (* const glPixelTransferf)(GLenum, GLfloat) = ::glPixelTransferf;
+void (* const glPixelZoom)(GLfloat, GLfloat) = ::glPixelZoom;
+void (* const glPointSize)(GLfloat) = ::glPointSize;
+void (* const glRasterPos4d)(GLdouble, GLdouble, GLdouble, GLdouble) = ::glRasterPos4d;
+#endif
+
+} // namespace platform
+} // namespace mbgl
diff --git a/platform/qt/src/gl_functions.cpp b/platform/qt/src/gl_functions.cpp
new file mode 100644
index 0000000000..b9f1ac26de
--- /dev/null
+++ b/platform/qt/src/gl_functions.cpp
@@ -0,0 +1,566 @@
+#include <mbgl/platform/gl_functions.hpp>
+
+#include <QOpenGLContext>
+#include <QOpenGLFunctions>
+
+namespace mbgl {
+namespace platform {
+
+void (* const glActiveTexture)(GLenum) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glActiveTexture(args...);
+};
+
+void (* const glAttachShader)(GLuint, GLuint) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glAttachShader(args...);
+};
+
+void (* const glBindAttribLocation)(GLuint, GLuint, const GLchar *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glBindAttribLocation(args...);
+};
+
+void (* const glBindBuffer)(GLenum, GLuint) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glBindBuffer(args...);
+};
+
+void (* const glBindFramebuffer)(GLenum, GLuint) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glBindFramebuffer(args...);
+};
+
+void (* const glBindRenderbuffer)(GLenum, GLuint) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glBindRenderbuffer(args...);
+};
+
+void (* const glBindTexture)(GLenum, GLuint) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glBindTexture(args...);
+};
+
+void (* const glBlendColor)(GLfloat, GLfloat, GLfloat, GLfloat) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glBlendColor(args...);
+};
+
+void (* const glBlendEquation)(GLenum) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glBlendEquation(args...);
+};
+
+void (* const glBlendEquationSeparate)(GLenum, GLenum) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glBlendEquationSeparate(args...);
+};
+
+void (* const glBlendFunc)(GLenum, GLenum) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glBlendFunc(args...);
+};
+
+void (* const glBlendFuncSeparate)(GLenum, GLenum, GLenum, GLenum) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glBlendFuncSeparate(args...);
+};
+
+void (* const glBufferData)(GLenum, GLsizeiptr, const void *, GLenum) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glBufferData(args...);
+};
+
+void (* const glBufferSubData)(GLenum, GLintptr, GLsizeiptr, const void *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glBufferSubData(args...);
+};
+
+GLenum (* const glCheckFramebufferStatus)(GLenum) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glCheckFramebufferStatus(args...);
+};
+
+void (* const glClear)(GLbitfield) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glClear(args...);
+};
+
+void (* const glClearColor)(GLfloat, GLfloat, GLfloat, GLfloat) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glClearColor(args...);
+};
+
+void (* const glClearDepthf)(GLfloat) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glClearDepthf(args...);
+};
+
+void (* const glClearStencil)(GLint) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glClearStencil(args...);
+};
+
+void (* const glColorMask)(GLboolean, GLboolean, GLboolean, GLboolean) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glColorMask(args...);
+};
+
+void (* const glCompileShader)(GLuint) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glCompileShader(args...);
+};
+
+void (* const glCompressedTexImage2D)(GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const void *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glCompressedTexImage2D(args...);
+};
+
+void (* const glCompressedTexSubImage2D)(GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const void *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glCompressedTexSubImage2D(args...);
+};
+
+void (* const glCopyTexImage2D)(GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLsizei, GLint) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glCopyTexImage2D(args...);
+};
+
+void (* const glCopyTexSubImage2D)(GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glCopyTexSubImage2D(args...);
+};
+
+GLuint (* const glCreateProgram)() = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glCreateProgram(args...);
+};
+
+GLuint (* const glCreateShader)(GLenum) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glCreateShader(args...);
+};
+
+void (* const glCullFace)(GLenum) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glCullFace(args...);
+};
+
+void (* const glDeleteBuffers)(GLsizei, const GLuint *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glDeleteBuffers(args...);
+};
+
+void (* const glDeleteFramebuffers)(GLsizei, const GLuint *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glDeleteFramebuffers(args...);
+};
+
+void (* const glDeleteProgram)(GLuint) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glDeleteProgram(args...);
+};
+
+void (* const glDeleteRenderbuffers)(GLsizei, const GLuint *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glDeleteRenderbuffers(args...);
+};
+
+void (* const glDeleteShader)(GLuint) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glDeleteShader(args...);
+};
+
+void (* const glDeleteTextures)(GLsizei, const GLuint *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glDeleteTextures(args...);
+};
+
+void (* const glDepthFunc)(GLenum) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glDepthFunc(args...);
+};
+
+void (* const glDepthMask)(GLboolean) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glDepthMask(args...);
+};
+
+void (* const glDepthRangef)(GLfloat, GLfloat) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glDepthRangef(args...);
+};
+
+void (* const glDetachShader)(GLuint, GLuint) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glDetachShader(args...);
+};
+
+void (* const glDisable)(GLenum) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glDisable(args...);
+};
+
+void (* const glDisableVertexAttribArray)(GLuint) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glDisableVertexAttribArray(args...);
+};
+
+void (* const glDrawArrays)(GLenum, GLint, GLsizei) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glDrawArrays(args...);
+};
+
+void (* const glDrawElements)(GLenum, GLsizei, GLenum, const void *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glDrawElements(args...);
+};
+
+void (* const glEnable)(GLenum) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glEnable(args...);
+};
+
+void (* const glEnableVertexAttribArray)(GLuint) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glEnableVertexAttribArray(args...);
+};
+
+void (* const glFinish)() = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glFinish(args...);
+};
+
+void (* const glFlush)() = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glFlush(args...);
+};
+
+void (* const glFramebufferRenderbuffer)(GLenum, GLenum, GLenum, GLuint) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glFramebufferRenderbuffer(args...);
+};
+
+void (* const glFramebufferTexture2D)(GLenum, GLenum, GLenum, GLuint, GLint) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glFramebufferTexture2D(args...);
+};
+
+void (* const glFrontFace)(GLenum) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glFrontFace(args...);
+};
+
+void (* const glGenBuffers)(GLsizei, GLuint *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glGenBuffers(args...);
+};
+
+void (* const glGenerateMipmap)(GLenum) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glGenerateMipmap(args...);
+};
+
+void (* const glGenFramebuffers)(GLsizei, GLuint *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glGenFramebuffers(args...);
+};
+
+void (* const glGenRenderbuffers)(GLsizei, GLuint *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glGenRenderbuffers(args...);
+};
+
+void (* const glGenTextures)(GLsizei, GLuint *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glGenTextures(args...);
+};
+
+void (* const glGetActiveAttrib)(GLuint, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLchar *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glGetActiveAttrib(args...);
+};
+
+void (* const glGetActiveUniform)(GLuint, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLchar *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glGetActiveUniform(args...);
+};
+
+void (* const glGetAttachedShaders)(GLuint, GLsizei, GLsizei *, GLuint *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glGetAttachedShaders(args...);
+};
+
+GLint (* const glGetAttribLocation)(GLuint, const GLchar *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glGetAttribLocation(args...);
+};
+
+void (* const glGetBooleanv)(GLenum, GLboolean *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glGetBooleanv(args...);
+};
+
+void (* const glGetBufferParameteriv)(GLenum, GLenum, GLint *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glGetBufferParameteriv(args...);
+};
+
+GLenum (* const glGetError)() = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glGetError(args...);
+};
+
+void (* const glGetFloatv)(GLenum, GLfloat *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glGetFloatv(args...);
+};
+
+void (* const glGetFramebufferAttachmentParameteriv)(GLenum, GLenum, GLenum, GLint *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glGetFramebufferAttachmentParameteriv(args...);
+};
+
+void (* const glGetIntegerv)(GLenum, GLint *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glGetIntegerv(args...);
+};
+
+void (* const glGetProgramInfoLog)(GLuint, GLsizei, GLsizei *, GLchar *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glGetProgramInfoLog(args...);
+};
+
+void (* const glGetProgramiv)(GLuint, GLenum, GLint *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glGetProgramiv(args...);
+};
+
+void (* const glGetRenderbufferParameteriv)(GLenum, GLenum, GLint *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glGetRenderbufferParameteriv(args...);
+};
+
+void (* const glGetShaderInfoLog)(GLuint, GLsizei, GLsizei *, GLchar *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glGetShaderInfoLog(args...);
+};
+
+void (* const glGetShaderiv)(GLuint, GLenum, GLint *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glGetShaderiv(args...);
+};
+
+void (* const glGetShaderSource)(GLuint, GLsizei, GLsizei *, GLchar *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glGetShaderSource(args...);
+};
+
+const GLubyte *(*glGetString)(GLenum) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glGetString(args...);
+};
+
+void (* const glGetTexParameterfv)(GLenum, GLenum, GLfloat *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glGetTexParameterfv(args...);
+};
+
+void (* const glGetTexParameteriv)(GLenum, GLenum, GLint *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glGetTexParameteriv(args...);
+};
+
+void (* const glGetUniformfv)(GLuint, GLint, GLfloat *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glGetUniformfv(args...);
+};
+
+void (* const glGetUniformiv)(GLuint, GLint, GLint *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glGetUniformiv(args...);
+};
+
+GLint (* const glGetUniformLocation)(GLuint, const GLchar *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glGetUniformLocation(args...);
+};
+
+void (* const glGetVertexAttribfv)(GLuint, GLenum, GLfloat *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glGetVertexAttribfv(args...);
+};
+
+void (* const glGetVertexAttribiv)(GLuint, GLenum, GLint *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glGetVertexAttribiv(args...);
+};
+
+void (* const glGetVertexAttribPointerv)(GLuint, GLenum, void **) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glGetVertexAttribPointerv(args...);
+};
+
+void (* const glHint)(GLenum, GLenum) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glHint(args...);
+};
+
+GLboolean (* const glIsBuffer)(GLuint) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glIsBuffer(args...);
+};
+
+GLboolean (* const glIsEnabled)(GLenum) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glIsEnabled(args...);
+};
+
+GLboolean (* const glIsFramebuffer)(GLuint) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glIsFramebuffer(args...);
+};
+
+GLboolean (* const glIsProgram)(GLuint) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glIsProgram(args...);
+};
+
+GLboolean (* const glIsRenderbuffer)(GLuint) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glIsRenderbuffer(args...);
+};
+
+GLboolean (* const glIsShader)(GLuint) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glIsShader(args...);
+};
+
+GLboolean (* const glIsTexture)(GLuint) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glIsTexture(args...);
+};
+
+void (* const glLineWidth)(GLfloat) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glLineWidth(args...);
+};
+
+void (* const glLinkProgram)(GLuint) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glLinkProgram(args...);
+};
+
+void (* const glPixelStorei)(GLenum, GLint) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glPixelStorei(args...);
+};
+
+void (* const glPolygonOffset)(GLfloat, GLfloat) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glPolygonOffset(args...);
+};
+
+void (* const glReadPixels)(GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, void *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glReadPixels(args...);
+};
+
+void (* const glRenderbufferStorage)(GLenum, GLenum, GLsizei, GLsizei) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glRenderbufferStorage(args...);
+};
+
+void (* const glSampleCoverage)(GLfloat, GLboolean) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glSampleCoverage(args...);
+};
+
+void (* const glScissor)(GLint, GLint, GLsizei, GLsizei) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glScissor(args...);
+};
+
+void (* const glShaderSource)(GLuint, GLsizei, const GLchar * const*, const GLint *) = [](GLuint shader, GLsizei count, const GLchar * const * string, const GLint *length) {
+ return QOpenGLContext::currentContext()->functions()->glShaderSource(shader, count, const_cast<const GLchar **>(string), length);
+};
+
+void (* const glStencilFunc)(GLenum, GLint, GLuint) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glStencilFunc(args...);
+};
+
+void (* const glStencilFuncSeparate)(GLenum, GLenum, GLint, GLuint) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glStencilFuncSeparate(args...);
+};
+
+void (* const glStencilMask)(GLuint) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glStencilMask(args...);
+};
+
+void (* const glStencilMaskSeparate)(GLenum, GLuint) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glStencilMaskSeparate(args...);
+};
+
+void (* const glStencilOp)(GLenum, GLenum, GLenum) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glStencilOp(args...);
+};
+
+void (* const glStencilOpSeparate)(GLenum, GLenum, GLenum, GLenum) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glStencilOpSeparate(args...);
+};
+
+void (* const glTexImage2D)(GLenum, GLint, GLint, GLsizei, GLsizei, GLint, GLenum, GLenum, const void *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glTexImage2D(args...);
+};
+
+void (* const glTexParameterf)(GLenum, GLenum, GLfloat) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glTexParameterf(args...);
+};
+
+void (* const glTexParameterfv)(GLenum, GLenum, const GLfloat *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glTexParameterfv(args...);
+};
+
+void (* const glTexParameteri)(GLenum, GLenum, GLint) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glTexParameteri(args...);
+};
+
+void (* const glTexParameteriv)(GLenum, GLenum, const GLint *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glTexParameteriv(args...);
+};
+
+void (* const glTexSubImage2D)(GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, const void *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glTexSubImage2D(args...);
+};
+
+void (* const glUniform1f)(GLint, GLfloat) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glUniform1f(args...);
+};
+
+void (* const glUniform1fv)(GLint, GLsizei, const GLfloat *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glUniform1fv(args...);
+};
+
+void (* const glUniform1i)(GLint, GLint) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glUniform1i(args...);
+};
+
+void (* const glUniform1iv)(GLint, GLsizei, const GLint *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glUniform1iv(args...);
+};
+
+void (* const glUniform2f)(GLint, GLfloat, GLfloat) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glUniform2f(args...);
+};
+
+void (* const glUniform2fv)(GLint, GLsizei, const GLfloat *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glUniform2fv(args...);
+};
+
+void (* const glUniform2i)(GLint, GLint, GLint) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glUniform2i(args...);
+};
+
+void (* const glUniform2iv)(GLint, GLsizei, const GLint *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glUniform2iv(args...);
+};
+
+void (* const glUniform3f)(GLint, GLfloat, GLfloat, GLfloat) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glUniform3f(args...);
+};
+
+void (* const glUniform3fv)(GLint, GLsizei, const GLfloat *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glUniform3fv(args...);
+};
+
+void (* const glUniform3i)(GLint, GLint, GLint, GLint) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glUniform3i(args...);
+};
+
+void (* const glUniform3iv)(GLint, GLsizei, const GLint *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glUniform3iv(args...);
+};
+
+void (* const glUniform4f)(GLint, GLfloat, GLfloat, GLfloat, GLfloat) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glUniform4f(args...);
+};
+
+void (* const glUniform4fv)(GLint, GLsizei, const GLfloat *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glUniform4fv(args...);
+};
+
+void (* const glUniform4i)(GLint, GLint, GLint, GLint, GLint) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glUniform4i(args...);
+};
+
+void (* const glUniform4iv)(GLint, GLsizei, const GLint *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glUniform4iv(args...);
+};
+
+void (* const glUniformMatrix2fv)(GLint, GLsizei, GLboolean, const GLfloat *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glUniformMatrix2fv(args...);
+};
+
+void (* const glUniformMatrix3fv)(GLint, GLsizei, GLboolean, const GLfloat *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glUniformMatrix3fv(args...);
+};
+
+void (* const glUniformMatrix4fv)(GLint, GLsizei, GLboolean, const GLfloat *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glUniformMatrix4fv(args...);
+};
+
+void (* const glUseProgram)(GLuint) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glUseProgram(args...);
+};
+
+void (* const glValidateProgram)(GLuint) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glValidateProgram(args...);
+};
+
+void (* const glVertexAttrib1f)(GLuint, GLfloat) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glVertexAttrib1f(args...);
+};
+
+void (* const glVertexAttrib1fv)(GLuint, const GLfloat *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glVertexAttrib1fv(args...);
+};
+
+void (* const glVertexAttrib2f)(GLuint, GLfloat, GLfloat) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glVertexAttrib2f(args...);
+};
+
+void (* const glVertexAttrib2fv)(GLuint, const GLfloat *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glVertexAttrib2fv(args...);
+};
+
+void (* const glVertexAttrib3f)(GLuint, GLfloat, GLfloat, GLfloat) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glVertexAttrib3f(args...);
+};
+
+void (* const glVertexAttrib3fv)(GLuint, const GLfloat *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glVertexAttrib3fv(args...);
+};
+
+void (* const glVertexAttrib4f)(GLuint, GLfloat, GLfloat, GLfloat, GLfloat) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glVertexAttrib4f(args...);
+};
+
+void (* const glVertexAttrib4fv)(GLuint, const GLfloat *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glVertexAttrib4fv(args...);
+};
+
+void (* const glVertexAttribPointer)(GLuint, GLint, GLenum, GLboolean, GLsizei, const void *) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glVertexAttribPointer(args...);
+};
+
+void (* const glViewport)(GLint, GLint, GLsizei, GLsizei) = [](auto... args) {
+ return QOpenGLContext::currentContext()->functions()->glViewport(args...);
+};
+
+} // namespace platform
+} // namespace mbgl \ No newline at end of file