Use a trampoline for all GL entry functions.

Bug swiftshader:64

Change-Id: Ice0e96934bae8628a14d628fd02046fc81f7a0ab
Reviewed-on: https://swiftshader-review.googlesource.com/c/19608
Reviewed-by: Alexis Hétu <sugoi@google.com>
Tested-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/OpenGL/libGLES_CM/libGLES_CM.def b/src/OpenGL/libGLES_CM/libGLES_CM.def
index cf15c8b..9c9d032 100644
--- a/src/OpenGL/libGLES_CM/libGLES_CM.def
+++ b/src/OpenGL/libGLES_CM/libGLES_CM.def
@@ -210,5 +210,3 @@
     eglGetSyncAttribKHR
 
 	libGLES_CM_swiftshader
-
-	Register
diff --git a/src/OpenGL/libGLES_CM/libGLES_CM.lds b/src/OpenGL/libGLES_CM/libGLES_CM.lds
index dcf548f..a169b99 100644
--- a/src/OpenGL/libGLES_CM/libGLES_CM.lds
+++ b/src/OpenGL/libGLES_CM/libGLES_CM.lds
@@ -212,8 +212,6 @@
 
     libGLES_CM_swiftshader;
 
-    Register;
-
 local:
     *;
 };
diff --git a/src/OpenGL/libGLES_CM/main.cpp b/src/OpenGL/libGLES_CM/main.cpp
index f2bd0b7..8ba8247 100644
--- a/src/OpenGL/libGLES_CM/main.cpp
+++ b/src/OpenGL/libGLES_CM/main.cpp
@@ -1411,11 +1411,6 @@
 {
 	return es1::DrawTexfvOES(coords);
 }
-
-void GL_APIENTRY Register(const char *licenseKey)
-{
-	// Nothing to do, SwiftShader is open-source
-}
 }
 
 LibGLES_CMexports::LibGLES_CMexports()
diff --git a/src/OpenGL/libGLESv2/entry_points.cpp b/src/OpenGL/libGLESv2/entry_points.cpp
index 5460bcd..7a6479d 100644
--- a/src/OpenGL/libGLESv2/entry_points.cpp
+++ b/src/OpenGL/libGLESv2/entry_points.cpp
@@ -15,1196 +15,1521 @@
 // entry_points.cpp: GL entry points exports and definition
 
 #include "main.h"
-
+#include "entry_points.h"
 #include "libEGL/main.h"
 
-namespace es2
-{
-void ActiveTexture(GLenum texture);
-void AttachShader(GLuint program, GLuint shader);
-void BeginQueryEXT(GLenum target, GLuint name);
-void BindAttribLocation(GLuint program, GLuint index, const GLchar* name);
-void BindBuffer(GLenum target, GLuint buffer);
-void BindFramebuffer(GLenum target, GLuint framebuffer);
-void BindRenderbuffer(GLenum target, GLuint renderbuffer);
-void BindTexture(GLenum target, GLuint texture);
-void BlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
-void BlendEquation(GLenum mode);
-void BlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha);
-void BlendFunc(GLenum sfactor, GLenum dfactor);
-void BlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
-void BufferData(GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage);
-void BufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data);
-GLenum CheckFramebufferStatus(GLenum target);
-void Clear(GLbitfield mask);
-void ClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
-void ClearDepthf(GLclampf depth);
-void ClearStencil(GLint s);
-void ColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
-void CompileShader(GLuint shader);
-void CompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height,
-                          GLint border, GLsizei imageSize, const GLvoid* data);
-void CompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
-                             GLenum format, GLsizei imageSize, const GLvoid* data);
-void CopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
-void CopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
-GLuint CreateProgram(void);
-GLuint CreateShader(GLenum type);
-void CullFace(GLenum mode);
-void DeleteBuffers(GLsizei n, const GLuint* buffers);
-void DeleteFencesNV(GLsizei n, const GLuint* fences);
-void DeleteFramebuffers(GLsizei n, const GLuint* framebuffers);
-void DeleteProgram(GLuint program);
-void DeleteQueriesEXT(GLsizei n, const GLuint *ids);
-void DeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers);
-void DeleteShader(GLuint shader);
-void DeleteTextures(GLsizei n, const GLuint* textures);
-void DepthFunc(GLenum func);
-void DepthMask(GLboolean flag);
-void DepthRangef(GLclampf zNear, GLclampf zFar);
-void DetachShader(GLuint program, GLuint shader);
-void Disable(GLenum cap);
-void DisableVertexAttribArray(GLuint index);
-void DrawArrays(GLenum mode, GLint first, GLsizei count);
-void DrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices);
-void DrawArraysInstancedEXT(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount);
-void DrawElementsInstancedEXT(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instanceCount);
-void VertexAttribDivisorEXT(GLuint index, GLuint divisor);
-void DrawArraysInstancedANGLE(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount);
-void DrawElementsInstancedANGLE(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instanceCount);
-void VertexAttribDivisorANGLE(GLuint index, GLuint divisor);
-void Enable(GLenum cap);
-void EnableVertexAttribArray(GLuint index);
-void EndQueryEXT(GLenum target);
-void FinishFenceNV(GLuint fence);
-void Finish(void);
-void Flush(void);
-void FramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
-void FramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
-void FrontFace(GLenum mode);
-void GenBuffers(GLsizei n, GLuint* buffers);
-void GenerateMipmap(GLenum target);
-void GenFencesNV(GLsizei n, GLuint* fences);
-void GenFramebuffers(GLsizei n, GLuint* framebuffers);
-void GenQueriesEXT(GLsizei n, GLuint* ids);
-void GenRenderbuffers(GLsizei n, GLuint* renderbuffers);
-void GenTextures(GLsizei n, GLuint* textures);
-void GetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
-void GetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name);
-void GetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders);
-int GetAttribLocation(GLuint program, const GLchar* name);
-void GetBooleanv(GLenum pname, GLboolean* params);
-void GetBufferParameteriv(GLenum target, GLenum pname, GLint* params);
-GLenum GetError(void);
-void GetFenceivNV(GLuint fence, GLenum pname, GLint *params);
-void GetFloatv(GLenum pname, GLfloat* params);
-void GetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint* params);
-GLenum GetGraphicsResetStatusEXT(void);
-void GetIntegerv(GLenum pname, GLint* params);
-void GetProgramiv(GLuint program, GLenum pname, GLint* params);
-void GetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog);
-void GetQueryivEXT(GLenum target, GLenum pname, GLint *params);
-void GetQueryObjectuivEXT(GLuint name, GLenum pname, GLuint *params);
-void GetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* params);
-void GetShaderiv(GLuint shader, GLenum pname, GLint* params);
-void GetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog);
-void GetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision);
-void GetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source);
-const GLubyte* GetString(GLenum name);
-void GetTexParameterfv(GLenum target, GLenum pname, GLfloat* params);
-void GetTexParameteriv(GLenum target, GLenum pname, GLint* params);
-void GetnUniformfvEXT(GLuint program, GLint location, GLsizei bufSize, GLfloat* params);
-void GetUniformfv(GLuint program, GLint location, GLfloat* params);
-void GetnUniformivEXT(GLuint program, GLint location, GLsizei bufSize, GLint* params);
-void GetUniformiv(GLuint program, GLint location, GLint* params);
-int GetUniformLocation(GLuint program, const GLchar* name);
-void GetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params);
-void GetVertexAttribiv(GLuint index, GLenum pname, GLint* params);
-void GetVertexAttribPointerv(GLuint index, GLenum pname, GLvoid** pointer);
-void Hint(GLenum target, GLenum mode);
-GLboolean IsBuffer(GLuint buffer);
-GLboolean IsEnabled(GLenum cap);
-GLboolean IsFenceNV(GLuint fence);
-GLboolean IsFramebuffer(GLuint framebuffer);
-GLboolean IsProgram(GLuint program);
-GLboolean IsQueryEXT(GLuint name);
-GLboolean IsRenderbuffer(GLuint renderbuffer);
-GLboolean IsShader(GLuint shader);
-GLboolean IsTexture(GLuint texture);
-void LineWidth(GLfloat width);
-void LinkProgram(GLuint program);
-void PixelStorei(GLenum pname, GLint param);
-void PolygonOffset(GLfloat factor, GLfloat units);
-void ReadnPixelsEXT(GLint x, GLint y, GLsizei width, GLsizei height,
-                    GLenum format, GLenum type, GLsizei bufSize, GLvoid *data);
-void ReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels);
-void ReleaseShaderCompiler(void);
-void RenderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
-void RenderbufferStorageMultisampleANGLE(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
-void RenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
-void SampleCoverage(GLclampf value, GLboolean invert);
-void SetFenceNV(GLuint fence, GLenum condition);
-void Scissor(GLint x, GLint y, GLsizei width, GLsizei height);
-void ShaderBinary(GLsizei n, const GLuint* shaders, GLenum binaryformat, const GLvoid* binary, GLsizei length);
-void ShaderSource(GLuint shader, GLsizei count, const GLchar *const *string, const GLint *length);
-void StencilFunc(GLenum func, GLint ref, GLuint mask);
-void StencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask);
-void StencilMask(GLuint mask);
-void StencilMaskSeparate(GLenum face, GLuint mask);
-void StencilOp(GLenum fail, GLenum zfail, GLenum zpass);
-void StencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass);
-GLboolean TestFenceNV(GLuint fence);
-void TexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
-                GLint border, GLenum format, GLenum type, const GLvoid* pixels);
-void TexParameterf(GLenum target, GLenum pname, GLfloat param);
-void TexParameterfv(GLenum target, GLenum pname, const GLfloat* params);
-void TexParameteri(GLenum target, GLenum pname, GLint param);
-void TexParameteriv(GLenum target, GLenum pname, const GLint* params);
-void TexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
-                   GLenum format, GLenum type, const GLvoid* pixels);
-void Uniform1f(GLint location, GLfloat x);
-void Uniform1fv(GLint location, GLsizei count, const GLfloat* v);
-void Uniform1i(GLint location, GLint x);
-void Uniform1iv(GLint location, GLsizei count, const GLint* v);
-void Uniform2f(GLint location, GLfloat x, GLfloat y);
-void Uniform2fv(GLint location, GLsizei count, const GLfloat* v);
-void Uniform2i(GLint location, GLint x, GLint y);
-void Uniform2iv(GLint location, GLsizei count, const GLint* v);
-void Uniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z);
-void Uniform3fv(GLint location, GLsizei count, const GLfloat* v);
-void Uniform3i(GLint location, GLint x, GLint y, GLint z);
-void Uniform3iv(GLint location, GLsizei count, const GLint* v);
-void Uniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
-void Uniform4fv(GLint location, GLsizei count, const GLfloat* v);
-void Uniform4i(GLint location, GLint x, GLint y, GLint z, GLint w);
-void Uniform4iv(GLint location, GLsizei count, const GLint* v);
-void UniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
-void UniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
-void UniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
-void UseProgram(GLuint program);
-void ValidateProgram(GLuint program);
-void VertexAttrib1f(GLuint index, GLfloat x);
-void VertexAttrib1fv(GLuint index, const GLfloat* values);
-void VertexAttrib2f(GLuint index, GLfloat x, GLfloat y);
-void VertexAttrib2fv(GLuint index, const GLfloat* values);
-void VertexAttrib3f(GLuint index, GLfloat x, GLfloat y, GLfloat z);
-void VertexAttrib3fv(GLuint index, const GLfloat* values);
-void VertexAttrib4f(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
-void VertexAttrib4fv(GLuint index, const GLfloat* values);
-GL_APICALL void VertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr);
-GL_APICALL void Viewport(GLint x, GLint y, GLsizei width, GLsizei height);
-GL_APICALL void BlitFramebufferNV(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
-GL_APICALL void BlitFramebufferANGLE(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
-                                     GLbitfield mask, GLenum filter);
-GL_APICALL void TexImage3DOES(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth,
-                              GLint border, GLenum format, GLenum type, const GLvoid* pixels);
-GL_APICALL void TexSubImage3DOES(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
-GL_APICALL void CopyTexSubImage3DOES(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
-GL_APICALL void CompressedTexImage3DOES(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data);
-GL_APICALL void CompressedTexSubImage3DOES(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data);
-GL_APICALL void FramebufferTexture3DOES(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
-GL_APICALL void EGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image);
-GL_APICALL void EGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImageOES image);
-GL_APICALL GLboolean IsRenderbufferOES(GLuint renderbuffer);
-GL_APICALL void BindRenderbufferOES(GLenum target, GLuint renderbuffer);
-GL_APICALL void DeleteRenderbuffersOES(GLsizei n, const GLuint* renderbuffers);
-GL_APICALL void GenRenderbuffersOES(GLsizei n, GLuint* renderbuffers);
-GL_APICALL void RenderbufferStorageOES(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
-GL_APICALL void GetRenderbufferParameterivOES(GLenum target, GLenum pname, GLint* params);
-GL_APICALL GLboolean IsFramebufferOES(GLuint framebuffer);
-GL_APICALL void BindFramebufferOES(GLenum target, GLuint framebuffer);
-GL_APICALL void DeleteFramebuffersOES(GLsizei n, const GLuint* framebuffers);
-GL_APICALL void GenFramebuffersOES(GLsizei n, GLuint* framebuffers);
-GL_APICALL GLenum CheckFramebufferStatusOES(GLenum target);
-GL_APICALL void FramebufferRenderbufferOES(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
-GL_APICALL void FramebufferTexture2DOES(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
-GL_APICALL void GetFramebufferAttachmentParameterivOES(GLenum target, GLenum attachment, GLenum pname, GLint* params);
-GL_APICALL void GenerateMipmapOES(GLenum target);
-GL_APICALL void DrawBuffersEXT(GLsizei n, const GLenum *bufs);
-}
-
 extern "C"
 {
 GL_APICALL void GL_APIENTRY glActiveTexture(GLenum texture)
 {
-	return es2::ActiveTexture(texture);
+	return gl::ActiveTexture(texture);
 }
 
 GL_APICALL void GL_APIENTRY glAttachShader(GLuint program, GLuint shader)
 {
-	return es2::AttachShader(program, shader);
+	return gl::AttachShader(program, shader);
 }
 
 GL_APICALL void GL_APIENTRY glBeginQueryEXT(GLenum target, GLuint name)
 {
-	return es2::BeginQueryEXT(target, name);
+	return gl::BeginQueryEXT(target, name);
 }
 
 GL_APICALL void GL_APIENTRY glBindAttribLocation(GLuint program, GLuint index, const GLchar* name)
 {
-	return es2::BindAttribLocation(program, index, name);
+	return gl::BindAttribLocation(program, index, name);
 }
 
 GL_APICALL void GL_APIENTRY glBindBuffer(GLenum target, GLuint buffer)
 {
-	return es2::BindBuffer(target, buffer);
+	return gl::BindBuffer(target, buffer);
 }
 
 GL_APICALL void GL_APIENTRY glBindFramebuffer(GLenum target, GLuint framebuffer)
 {
-	return es2::BindFramebuffer(target, framebuffer);
+	return gl::BindFramebuffer(target, framebuffer);
 }
 
 GL_APICALL void GL_APIENTRY glBindFramebufferOES(GLenum target, GLuint framebuffer)
 {
-	return es2::BindFramebuffer(target, framebuffer);
+	return gl::BindFramebuffer(target, framebuffer);
 }
 
 GL_APICALL void GL_APIENTRY glBindRenderbuffer(GLenum target, GLuint renderbuffer)
 {
-	return es2::BindRenderbuffer(target, renderbuffer);
+	return gl::BindRenderbuffer(target, renderbuffer);
 }
 
 GL_APICALL void GL_APIENTRY glBindRenderbufferOES(GLenum target, GLuint renderbuffer)
 {
-	return es2::BindRenderbuffer(target, renderbuffer);
+	return gl::BindRenderbuffer(target, renderbuffer);
 }
 
 GL_APICALL void GL_APIENTRY glBindTexture(GLenum target, GLuint texture)
 {
-	return es2::BindTexture(target, texture);
+	return gl::BindTexture(target, texture);
 }
 
 GL_APICALL void GL_APIENTRY glBlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
 {
-	return es2::BlendColor(red, green, blue, alpha);
+	return gl::BlendColor(red, green, blue, alpha);
 }
 
 GL_APICALL void GL_APIENTRY glBlendEquation(GLenum mode)
 {
-	return es2::BlendEquation(mode);
+	return gl::BlendEquation(mode);
 }
 
 GL_APICALL void GL_APIENTRY glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha)
 {
-	return es2::BlendEquationSeparate(modeRGB, modeAlpha);
+	return gl::BlendEquationSeparate(modeRGB, modeAlpha);
 }
 
 GL_APICALL void GL_APIENTRY glBlendFunc(GLenum sfactor, GLenum dfactor)
 {
-	return es2::BlendFunc(sfactor, dfactor);
+	return gl::BlendFunc(sfactor, dfactor);
 }
 
 GL_APICALL void GL_APIENTRY glBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
 {
-	return es2::BlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha);
+	return gl::BlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha);
 }
 
 GL_APICALL void GL_APIENTRY glBufferData(GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage)
 {
-	return es2::BufferData(target, size, data, usage);
+	return gl::BufferData(target, size, data, usage);
 }
 
 GL_APICALL void GL_APIENTRY glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data)
 {
-	return es2::BufferSubData(target, offset, size, data);
+	return gl::BufferSubData(target, offset, size, data);
 }
 
 GL_APICALL GLenum GL_APIENTRY glCheckFramebufferStatus(GLenum target)
 {
-	return es2::CheckFramebufferStatus(target);
+	return gl::CheckFramebufferStatus(target);
 }
 
 GL_APICALL GLenum GL_APIENTRY glCheckFramebufferStatusOES(GLenum target)
 {
-	return es2::CheckFramebufferStatus(target);
+	return gl::CheckFramebufferStatus(target);
 }
 
 GL_APICALL void GL_APIENTRY glClear(GLbitfield mask)
 {
-	return es2::Clear(mask);
+	return gl::Clear(mask);
 }
 
 GL_APICALL void GL_APIENTRY glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
 {
-	return es2::ClearColor(red, green, blue, alpha);
+	return gl::ClearColor(red, green, blue, alpha);
 }
 
 GL_APICALL void GL_APIENTRY glClearDepthf(GLclampf depth)
 {
-	return es2::ClearDepthf(depth);
+	return gl::ClearDepthf(depth);
 }
 
 GL_APICALL void GL_APIENTRY glClearStencil(GLint s)
 {
-	return es2::ClearStencil(s);
+	return gl::ClearStencil(s);
 }
 
 GL_APICALL void GL_APIENTRY glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
 {
-	return es2::ColorMask(red, green, blue, alpha);
+	return gl::ColorMask(red, green, blue, alpha);
 }
 
 GL_APICALL void GL_APIENTRY glCompileShader(GLuint shader)
 {
-	return es2::CompileShader(shader);
+	return gl::CompileShader(shader);
 }
 
 GL_APICALL void GL_APIENTRY glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height,
                                                    GLint border, GLsizei imageSize, const GLvoid* data)
 {
-	return es2::CompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data);
+	return gl::CompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data);
 }
 
 GL_APICALL void GL_APIENTRY glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
                                                       GLenum format, GLsizei imageSize, const GLvoid* data)
 {
-	return es2::CompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data);
+	return gl::CompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data);
 }
 
 GL_APICALL void GL_APIENTRY glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
 {
-	return es2::CopyTexImage2D(target, level, internalformat, x, y, width, height, border);
+	return gl::CopyTexImage2D(target, level, internalformat, x, y, width, height, border);
 }
 
 GL_APICALL void GL_APIENTRY glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
 {
-	return es2::CopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height);
+	return gl::CopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height);
 }
 
 GL_APICALL GLuint GL_APIENTRY glCreateProgram(void)
 {
-	return es2::CreateProgram();
+	return gl::CreateProgram();
 }
 
 GL_APICALL GLuint GL_APIENTRY glCreateShader(GLenum type)
 {
-	return es2::CreateShader(type);
+	return gl::CreateShader(type);
 }
 
 GL_APICALL void GL_APIENTRY glCullFace(GLenum mode)
 {
-	return es2::CullFace(mode);
+	return gl::CullFace(mode);
 }
 
 GL_APICALL void GL_APIENTRY glDeleteBuffers(GLsizei n, const GLuint* buffers)
 {
-	return es2::DeleteBuffers(n, buffers);
+	return gl::DeleteBuffers(n, buffers);
 }
 
 GL_APICALL void GL_APIENTRY glDeleteFencesNV(GLsizei n, const GLuint* fences)
 {
-	return es2::DeleteFencesNV(n, fences);
+	return gl::DeleteFencesNV(n, fences);
 }
 
 GL_APICALL void GL_APIENTRY glDeleteFramebuffers(GLsizei n, const GLuint* framebuffers)
 {
-	return es2::DeleteFramebuffers(n, framebuffers);
+	return gl::DeleteFramebuffers(n, framebuffers);
 }
 
 GL_APICALL void GL_APIENTRY glDeleteFramebuffersOES(GLsizei n, const GLuint* framebuffers)
 {
-	return es2::DeleteFramebuffers(n, framebuffers);
+	return gl::DeleteFramebuffers(n, framebuffers);
 }
 
 GL_APICALL void GL_APIENTRY glDeleteProgram(GLuint program)
 {
-	return es2::DeleteProgram(program);
+	return gl::DeleteProgram(program);
 }
 
 GL_APICALL void GL_APIENTRY glDeleteQueriesEXT(GLsizei n, const GLuint *ids)
 {
-	return es2::DeleteQueriesEXT(n, ids);
+	return gl::DeleteQueriesEXT(n, ids);
 }
 
 GL_APICALL void GL_APIENTRY glDeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers)
 {
-	return es2::DeleteRenderbuffers(n, renderbuffers);
+	return gl::DeleteRenderbuffers(n, renderbuffers);
 }
 
 GL_APICALL void GL_APIENTRY glDeleteRenderbuffersOES(GLsizei n, const GLuint* renderbuffers)
 {
-	return es2::DeleteRenderbuffers(n, renderbuffers);
+	return gl::DeleteRenderbuffers(n, renderbuffers);
 }
 
 GL_APICALL void GL_APIENTRY glDeleteShader(GLuint shader)
 {
-	return es2::DeleteShader(shader);
+	return gl::DeleteShader(shader);
 }
 
 GL_APICALL void GL_APIENTRY glDeleteTextures(GLsizei n, const GLuint* textures)
 {
-	return es2::DeleteTextures(n, textures);
+	return gl::DeleteTextures(n, textures);
 }
 
 GL_APICALL void GL_APIENTRY glDepthFunc(GLenum func)
 {
-	return es2::DepthFunc(func);
+	return gl::DepthFunc(func);
 }
 
 GL_APICALL void GL_APIENTRY glDepthMask(GLboolean flag)
 {
-	return es2::DepthMask(flag);
+	return gl::DepthMask(flag);
 }
 
 GL_APICALL void GL_APIENTRY glDepthRangef(GLclampf zNear, GLclampf zFar)
 {
-	return es2::DepthRangef(zNear, zFar);
+	return gl::DepthRangef(zNear, zFar);
 }
 
 GL_APICALL void GL_APIENTRY glDetachShader(GLuint program, GLuint shader)
 {
-	return es2::DetachShader(program, shader);
+	return gl::DetachShader(program, shader);
 }
 
 GL_APICALL void GL_APIENTRY glDisable(GLenum cap)
 {
-	return es2::Disable(cap);
+	return gl::Disable(cap);
 }
 
 GL_APICALL void GL_APIENTRY glDisableVertexAttribArray(GLuint index)
 {
-	return es2::DisableVertexAttribArray(index);
+	return gl::DisableVertexAttribArray(index);
 }
 
 GL_APICALL void GL_APIENTRY glDrawArrays(GLenum mode, GLint first, GLsizei count)
 {
-	return es2::DrawArrays(mode, first, count);
+	return gl::DrawArrays(mode, first, count);
 }
 
 GL_APICALL void GL_APIENTRY glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices)
 {
-	return es2::DrawElements(mode, count, type, indices);
+	return gl::DrawElements(mode, count, type, indices);
 }
 
 GL_APICALL void GL_APIENTRY glDrawArraysInstancedEXT(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount)
 {
-	return es2::DrawArraysInstancedEXT(mode, first, count, instanceCount);
+	return gl::DrawArraysInstancedEXT(mode, first, count, instanceCount);
 }
 
 GL_APICALL void GL_APIENTRY glDrawElementsInstancedEXT(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instanceCount)
 {
-	return es2::DrawElementsInstancedEXT(mode, count, type, indices, instanceCount);
+	return gl::DrawElementsInstancedEXT(mode, count, type, indices, instanceCount);
 }
 
 GL_APICALL void GL_APIENTRY glVertexAttribDivisorEXT(GLuint index, GLuint divisor)
 {
-	return es2::VertexAttribDivisorEXT(index, divisor);
+	return gl::VertexAttribDivisorEXT(index, divisor);
 }
 
 GL_APICALL void GL_APIENTRY glDrawArraysInstancedANGLE(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount)
 {
-	return es2::DrawArraysInstancedANGLE(mode, first, count, instanceCount);
+	return gl::DrawArraysInstancedANGLE(mode, first, count, instanceCount);
 }
 
 GL_APICALL void GL_APIENTRY glDrawElementsInstancedANGLE(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instanceCount)
 {
-	return es2::DrawElementsInstancedANGLE(mode, count, type, indices, instanceCount);
+	return gl::DrawElementsInstancedANGLE(mode, count, type, indices, instanceCount);
 }
 
 GL_APICALL void GL_APIENTRY glVertexAttribDivisorANGLE(GLuint index, GLuint divisor)
 {
-	return es2::VertexAttribDivisorANGLE(index, divisor);
+	return gl::VertexAttribDivisorANGLE(index, divisor);
 }
 
 GL_APICALL void GL_APIENTRY glEnable(GLenum cap)
 {
-	return es2::Enable(cap);
+	return gl::Enable(cap);
 }
 
 GL_APICALL void GL_APIENTRY glEnableVertexAttribArray(GLuint index)
 {
-	return es2::EnableVertexAttribArray(index);
+	return gl::EnableVertexAttribArray(index);
 }
 
 GL_APICALL void GL_APIENTRY glEndQueryEXT(GLenum target)
 {
-	return es2::EndQueryEXT(target);
+	return gl::EndQueryEXT(target);
 }
 
 GL_APICALL void GL_APIENTRY glFinishFenceNV(GLuint fence)
 {
-	return es2::FinishFenceNV(fence);
+	return gl::FinishFenceNV(fence);
 }
 
 GL_APICALL void GL_APIENTRY glFinish(void)
 {
-	return es2::Finish();
+	return gl::Finish();
 }
 
 GL_APICALL void GL_APIENTRY glFlush(void)
 {
-	return es2::Flush();
+	return gl::Flush();
 }
 
 GL_APICALL void GL_APIENTRY glFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
 {
-	return es2::FramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);
+	return gl::FramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);
 }
 
 GL_APICALL void GL_APIENTRY glFramebufferRenderbufferOES(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
 {
-	return es2::FramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);
+	return gl::FramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);
 }
 
 GL_APICALL void GL_APIENTRY glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
 {
-	return es2::FramebufferTexture2D(target, attachment, textarget, texture, level);
+	return gl::FramebufferTexture2D(target, attachment, textarget, texture, level);
 }
 
 GL_APICALL void GL_APIENTRY glFramebufferTexture2DOES(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
 {
-	return es2::FramebufferTexture2D(target, attachment, textarget, texture, level);
+	return gl::FramebufferTexture2D(target, attachment, textarget, texture, level);
 }
 
 GL_APICALL void GL_APIENTRY glFrontFace(GLenum mode)
 {
-	return es2::FrontFace(mode);
+	return gl::FrontFace(mode);
 }
 
 GL_APICALL void GL_APIENTRY glGenBuffers(GLsizei n, GLuint* buffers)
 {
-	return es2::GenBuffers(n, buffers);
+	return gl::GenBuffers(n, buffers);
 }
 
 GL_APICALL void GL_APIENTRY glGenerateMipmap(GLenum target)
 {
-	return es2::GenerateMipmap(target);
+	return gl::GenerateMipmap(target);
 }
 
 GL_APICALL void GL_APIENTRY glGenerateMipmapOES(GLenum target)
 {
-	return es2::GenerateMipmap(target);
+	return gl::GenerateMipmap(target);
 }
 
 GL_APICALL void GL_APIENTRY glGenFencesNV(GLsizei n, GLuint* fences)
 {
-	return es2::GenFencesNV(n, fences);
+	return gl::GenFencesNV(n, fences);
 }
 
 GL_APICALL void GL_APIENTRY glGenFramebuffers(GLsizei n, GLuint* framebuffers)
 {
-	return es2::GenFramebuffers(n, framebuffers);
+	return gl::GenFramebuffers(n, framebuffers);
 }
 
 GL_APICALL void GL_APIENTRY glGenFramebuffersOES(GLsizei n, GLuint* framebuffers)
 {
-	return es2::GenFramebuffers(n, framebuffers);
+	return gl::GenFramebuffers(n, framebuffers);
 }
 
 GL_APICALL void GL_APIENTRY glGenQueriesEXT(GLsizei n, GLuint* ids)
 {
-	return es2::GenQueriesEXT(n, ids);
+	return gl::GenQueriesEXT(n, ids);
 }
 
 GL_APICALL void GL_APIENTRY glGenRenderbuffers(GLsizei n, GLuint* renderbuffers)
 {
-	return es2::GenRenderbuffers(n, renderbuffers);
+	return gl::GenRenderbuffers(n, renderbuffers);
 }
 
 GL_APICALL void GL_APIENTRY glGenRenderbuffersOES(GLsizei n, GLuint* renderbuffers)
 {
-	return es2::GenRenderbuffers(n, renderbuffers);
+	return gl::GenRenderbuffers(n, renderbuffers);
 }
 
 GL_APICALL void GL_APIENTRY glGenTextures(GLsizei n, GLuint* textures)
 {
-	return es2::GenTextures(n, textures);
+	return gl::GenTextures(n, textures);
 }
 
 GL_APICALL void GL_APIENTRY glGetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, GLchar *name)
 {
-	return es2::GetActiveAttrib(program, index, bufsize, length, size, type, name);
+	return gl::GetActiveAttrib(program, index, bufsize, length, size, type, name);
 }
 
 GL_APICALL void GL_APIENTRY glGetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name)
 {
-	return es2::GetActiveUniform(program, index, bufsize, length, size, type, name);
+	return gl::GetActiveUniform(program, index, bufsize, length, size, type, name);
 }
 
 GL_APICALL void GL_APIENTRY glGetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders)
 {
-	return es2::GetAttachedShaders(program, maxcount, count, shaders);
+	return gl::GetAttachedShaders(program, maxcount, count, shaders);
 }
 
 GL_APICALL int GL_APIENTRY glGetAttribLocation(GLuint program, const GLchar* name)
 {
-	return es2::GetAttribLocation(program, name);
+	return gl::GetAttribLocation(program, name);
 }
 
 GL_APICALL void GL_APIENTRY glGetBooleanv(GLenum pname, GLboolean* params)
 {
-	return es2::GetBooleanv(pname, params);
+	return gl::GetBooleanv(pname, params);
 }
 
 GL_APICALL void GL_APIENTRY glGetBufferParameteriv(GLenum target, GLenum pname, GLint* params)
 {
-	return es2::GetBufferParameteriv(target, pname, params);
+	return gl::GetBufferParameteriv(target, pname, params);
 }
 
 GL_APICALL GLenum GL_APIENTRY glGetError(void)
 {
-	return es2::GetError();
+	return gl::GetError();
 }
 
 GL_APICALL void GL_APIENTRY glGetFenceivNV(GLuint fence, GLenum pname, GLint *params)
 {
-	return es2::GetFenceivNV(fence, pname, params);
+	return gl::GetFenceivNV(fence, pname, params);
 }
 
 GL_APICALL void GL_APIENTRY glGetFloatv(GLenum pname, GLfloat* params)
 {
-	return es2::GetFloatv(pname, params);
+	return gl::GetFloatv(pname, params);
 }
 
 GL_APICALL void GL_APIENTRY glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint* params)
 {
-	return es2::GetFramebufferAttachmentParameteriv(target, attachment, pname, params);
+	return gl::GetFramebufferAttachmentParameteriv(target, attachment, pname, params);
 }
 
 GL_APICALL void GL_APIENTRY glGetFramebufferAttachmentParameterivOES(GLenum target, GLenum attachment, GLenum pname, GLint* params)
 {
-	return es2::GetFramebufferAttachmentParameteriv(target, attachment, pname, params);
+	return gl::GetFramebufferAttachmentParameteriv(target, attachment, pname, params);
 }
 
 GL_APICALL GLenum GL_APIENTRY glGetGraphicsResetStatusEXT(void)
 {
-	return es2::GetGraphicsResetStatusEXT();
+	return gl::GetGraphicsResetStatusEXT();
 }
 
 GL_APICALL void GL_APIENTRY glGetIntegerv(GLenum pname, GLint* params)
 {
-	return es2::GetIntegerv(pname, params);
+	return gl::GetIntegerv(pname, params);
 }
 
 GL_APICALL void GL_APIENTRY glGetProgramiv(GLuint program, GLenum pname, GLint* params)
 {
-	return es2::GetProgramiv(program, pname, params);
+	return gl::GetProgramiv(program, pname, params);
 }
 
 GL_APICALL void GL_APIENTRY glGetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog)
 {
-	return es2::GetProgramInfoLog(program, bufsize, length, infolog);
+	return gl::GetProgramInfoLog(program, bufsize, length, infolog);
 }
 
 GL_APICALL void GL_APIENTRY glGetQueryivEXT(GLenum target, GLenum pname, GLint *params)
 {
-	return es2::GetQueryivEXT(target, pname, params);
+	return gl::GetQueryivEXT(target, pname, params);
 }
 
 GL_APICALL void GL_APIENTRY glGetQueryObjectuivEXT(GLuint name, GLenum pname, GLuint *params)
 {
-	return es2::GetQueryObjectuivEXT(name, pname, params);
+	return gl::GetQueryObjectuivEXT(name, pname, params);
 }
 
 GL_APICALL void GL_APIENTRY glGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* params)
 {
-	return es2::GetRenderbufferParameteriv(target, pname, params);
+	return gl::GetRenderbufferParameteriv(target, pname, params);
 }
 
 GL_APICALL void GL_APIENTRY glGetRenderbufferParameterivOES(GLenum target, GLenum pname, GLint* params)
 {
-	return es2::GetRenderbufferParameteriv(target, pname, params);
+	return gl::GetRenderbufferParameteriv(target, pname, params);
 }
 
 GL_APICALL void GL_APIENTRY glGetShaderiv(GLuint shader, GLenum pname, GLint* params)
 {
-	return es2::GetShaderiv(shader, pname, params);
+	return gl::GetShaderiv(shader, pname, params);
 }
 
 GL_APICALL void GL_APIENTRY glGetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog)
 {
-	return es2::GetShaderInfoLog(shader, bufsize, length, infolog);
+	return gl::GetShaderInfoLog(shader, bufsize, length, infolog);
 }
 
 GL_APICALL void GL_APIENTRY glGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision)
 {
-	return es2::GetShaderPrecisionFormat(shadertype, precisiontype, range, precision);
+	return gl::GetShaderPrecisionFormat(shadertype, precisiontype, range, precision);
 }
 
 GL_APICALL void GL_APIENTRY glGetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source)
 {
-	return es2::GetShaderSource(shader, bufsize, length, source);
+	return gl::GetShaderSource(shader, bufsize, length, source);
 }
 
 GL_APICALL const GLubyte* GL_APIENTRY glGetString(GLenum name)
 {
-	return es2::GetString(name);
+	return gl::GetString(name);
 }
 
 GL_APICALL void GL_APIENTRY glGetTexParameterfv(GLenum target, GLenum pname, GLfloat* params)
 {
-	return es2::GetTexParameterfv(target, pname, params);
+	return gl::GetTexParameterfv(target, pname, params);
 }
 
 GL_APICALL void GL_APIENTRY glGetTexParameteriv(GLenum target, GLenum pname, GLint* params)
 {
-	return es2::GetTexParameteriv(target, pname, params);
+	return gl::GetTexParameteriv(target, pname, params);
 }
 
 GL_APICALL void GL_APIENTRY glGetnUniformfvEXT(GLuint program, GLint location, GLsizei bufSize, GLfloat* params)
 {
-	return es2::GetnUniformfvEXT(program, location, bufSize, params);
+	return gl::GetnUniformfvEXT(program, location, bufSize, params);
 }
 
 GL_APICALL void GL_APIENTRY glGetUniformfv(GLuint program, GLint location, GLfloat* params)
 {
-	return es2::GetUniformfv(program, location, params);
+	return gl::GetUniformfv(program, location, params);
 }
 
 GL_APICALL void GL_APIENTRY glGetnUniformivEXT(GLuint program, GLint location, GLsizei bufSize, GLint* params)
 {
-	return es2::GetnUniformivEXT(program, location, bufSize, params);
+	return gl::GetnUniformivEXT(program, location, bufSize, params);
 }
 
 GL_APICALL void GL_APIENTRY glGetUniformiv(GLuint program, GLint location, GLint* params)
 {
-	return es2::GetUniformiv(program, location, params);
+	return gl::GetUniformiv(program, location, params);
 }
 
 GL_APICALL int GL_APIENTRY glGetUniformLocation(GLuint program, const GLchar* name)
 {
-	return es2::GetUniformLocation(program, name);
+	return gl::GetUniformLocation(program, name);
 }
 
 GL_APICALL void GL_APIENTRY glGetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params)
 {
-	return es2::GetVertexAttribfv(index, pname, params);
+	return gl::GetVertexAttribfv(index, pname, params);
 }
 
 GL_APICALL void GL_APIENTRY glGetVertexAttribiv(GLuint index, GLenum pname, GLint* params)
 {
-	return es2::GetVertexAttribiv(index, pname, params);
+	return gl::GetVertexAttribiv(index, pname, params);
 }
 
 GL_APICALL void GL_APIENTRY glGetVertexAttribPointerv(GLuint index, GLenum pname, GLvoid** pointer)
 {
-	return es2::GetVertexAttribPointerv(index, pname, pointer);
+	return gl::GetVertexAttribPointerv(index, pname, pointer);
 }
 
 GL_APICALL void GL_APIENTRY glHint(GLenum target, GLenum mode)
 {
-	return es2::Hint(target, mode);
+	return gl::Hint(target, mode);
 }
 
 GL_APICALL GLboolean GL_APIENTRY glIsBuffer(GLuint buffer)
 {
-	return es2::IsBuffer(buffer);
+	return gl::IsBuffer(buffer);
 }
 
 GL_APICALL GLboolean GL_APIENTRY glIsEnabled(GLenum cap)
 {
-	return es2::IsEnabled(cap);
+	return gl::IsEnabled(cap);
 }
 
 GL_APICALL GLboolean GL_APIENTRY glIsFenceNV(GLuint fence)
 {
-	return es2::IsFenceNV(fence);
+	return gl::IsFenceNV(fence);
 }
 
 GL_APICALL GLboolean GL_APIENTRY glIsFramebuffer(GLuint framebuffer)
 {
-	return es2::IsFramebuffer(framebuffer);
+	return gl::IsFramebuffer(framebuffer);
 }
 
 GL_APICALL GLboolean GL_APIENTRY glIsFramebufferOES(GLuint framebuffer)
 {
-	return es2::IsFramebuffer(framebuffer);
+	return gl::IsFramebuffer(framebuffer);
 }
 
 GL_APICALL GLboolean GL_APIENTRY glIsProgram(GLuint program)
 {
-	return es2::IsProgram(program);
+	return gl::IsProgram(program);
 }
 
 GL_APICALL GLboolean GL_APIENTRY glIsQueryEXT(GLuint name)
 {
-	return es2::IsQueryEXT(name);
+	return gl::IsQueryEXT(name);
 }
 
 GL_APICALL GLboolean GL_APIENTRY glIsRenderbuffer(GLuint renderbuffer)
 {
-	return es2::IsRenderbuffer(renderbuffer);
+	return gl::IsRenderbuffer(renderbuffer);
 }
 
 GL_APICALL GLboolean GL_APIENTRY glIsRenderbufferOES(GLuint renderbuffer)
 {
-	return es2::IsRenderbuffer(renderbuffer);
+	return gl::IsRenderbuffer(renderbuffer);
 }
 
 GL_APICALL GLboolean GL_APIENTRY glIsShader(GLuint shader)
 {
-	return es2::IsShader(shader);
+	return gl::IsShader(shader);
 }
 
 GL_APICALL GLboolean GL_APIENTRY glIsTexture(GLuint texture)
 {
-	return es2::IsTexture(texture);
+	return gl::IsTexture(texture);
 }
 
 GL_APICALL void GL_APIENTRY glLineWidth(GLfloat width)
 {
-	return es2::LineWidth(width);
+	return gl::LineWidth(width);
 }
 
 GL_APICALL void GL_APIENTRY glLinkProgram(GLuint program)
 {
-	return es2::LinkProgram(program);
+	return gl::LinkProgram(program);
 }
 
 GL_APICALL void GL_APIENTRY glPixelStorei(GLenum pname, GLint param)
 {
-	return es2::PixelStorei(pname, param);
+	return gl::PixelStorei(pname, param);
 }
 
 GL_APICALL void GL_APIENTRY glPolygonOffset(GLfloat factor, GLfloat units)
 {
-	return es2::PolygonOffset(factor, units);
+	return gl::PolygonOffset(factor, units);
 }
 
 GL_APICALL void GL_APIENTRY glReadnPixelsEXT(GLint x, GLint y, GLsizei width, GLsizei height,
                                              GLenum format, GLenum type, GLsizei bufSize, GLvoid *data)
 {
-	return es2::ReadnPixelsEXT(x, y, width, height, format, type, bufSize, data);
+	return gl::ReadnPixelsEXT(x, y, width, height, format, type, bufSize, data);
 }
 
 GL_APICALL void GL_APIENTRY glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels)
 {
-	return es2::ReadPixels(x, y, width, height, format, type, pixels);
+	return gl::ReadPixels(x, y, width, height, format, type, pixels);
 }
 
 GL_APICALL void GL_APIENTRY glReleaseShaderCompiler(void)
 {
-	return es2::ReleaseShaderCompiler();
+	return gl::ReleaseShaderCompiler();
 }
 
 GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
 {
-	return es2::RenderbufferStorageMultisample(target, samples, internalformat, width, height);
+	return gl::RenderbufferStorageMultisample(target, samples, internalformat, width, height);
 }
 
 GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleANGLE(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
 {
-	return es2::RenderbufferStorageMultisampleANGLE(target, samples, internalformat, width, height);
+	return gl::RenderbufferStorageMultisampleANGLE(target, samples, internalformat, width, height);
 }
 
 GL_APICALL void GL_APIENTRY glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
 {
-	return es2::RenderbufferStorage(target, internalformat, width, height);
+	return gl::RenderbufferStorage(target, internalformat, width, height);
 }
 
 GL_APICALL void GL_APIENTRY glRenderbufferStorageOES(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
 {
-	return es2::RenderbufferStorage(target, internalformat, width, height);
+	return gl::RenderbufferStorage(target, internalformat, width, height);
 }
 
 GL_APICALL void GL_APIENTRY glSampleCoverage(GLclampf value, GLboolean invert)
 {
-	return es2::SampleCoverage(value, invert);
+	return gl::SampleCoverage(value, invert);
 }
 
 GL_APICALL void GL_APIENTRY glSetFenceNV(GLuint fence, GLenum condition)
 {
-	return es2::SetFenceNV(fence, condition);
+	return gl::SetFenceNV(fence, condition);
 }
 
 GL_APICALL void GL_APIENTRY glScissor(GLint x, GLint y, GLsizei width, GLsizei height)
 {
-	return es2::Scissor(x, y, width, height);
+	return gl::Scissor(x, y, width, height);
 }
 
 GL_APICALL void GL_APIENTRY glShaderBinary(GLsizei n, const GLuint* shaders, GLenum binaryformat, const GLvoid* binary, GLsizei length)
 {
-	return es2::ShaderBinary(n, shaders, binaryformat, binary, length);
+	return gl::ShaderBinary(n, shaders, binaryformat, binary, length);
 }
 
 GL_APICALL void GL_APIENTRY glShaderSource(GLuint shader, GLsizei count, const GLchar *const *string, const GLint *length)
 {
-	return es2::ShaderSource(shader, count, string, length);
+	return gl::ShaderSource(shader, count, string, length);
 }
 
 GL_APICALL void GL_APIENTRY glStencilFunc(GLenum func, GLint ref, GLuint mask)
 {
-	return es2::StencilFunc(func, ref, mask);
+	return gl::StencilFunc(func, ref, mask);
 }
 
 GL_APICALL void GL_APIENTRY glStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask)
 {
-	return es2::StencilFuncSeparate(face, func, ref, mask);
+	return gl::StencilFuncSeparate(face, func, ref, mask);
 }
 
 GL_APICALL void GL_APIENTRY glStencilMask(GLuint mask)
 {
-	return es2::StencilMask(mask);
+	return gl::StencilMask(mask);
 }
 
 GL_APICALL void GL_APIENTRY glStencilMaskSeparate(GLenum face, GLuint mask)
 {
-	return es2::StencilMaskSeparate(face, mask);
+	return gl::StencilMaskSeparate(face, mask);
 }
 
 GL_APICALL void GL_APIENTRY glStencilOp(GLenum fail, GLenum zfail, GLenum zpass)
 {
-	return es2::StencilOp(fail, zfail, zpass);
+	return gl::StencilOp(fail, zfail, zpass);
 }
 
 GL_APICALL void GL_APIENTRY glStencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass)
 {
-	return es2::StencilOpSeparate(face, fail, zfail, zpass);
+	return gl::StencilOpSeparate(face, fail, zfail, zpass);
 }
 
 GLboolean GL_APIENTRY glTestFenceNV(GLuint fence)
 {
-	return es2::TestFenceNV(fence);
+	return gl::TestFenceNV(fence);
 }
 
 GL_APICALL void GL_APIENTRY glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
                                          GLint border, GLenum format, GLenum type, const GLvoid* pixels)
 {
-	return es2::TexImage2D(target, level, internalformat, width, height, border, format, type, pixels);
+	return gl::TexImage2D(target, level, internalformat, width, height, border, format, type, pixels);
 }
 
 GL_APICALL void GL_APIENTRY glTexParameterf(GLenum target, GLenum pname, GLfloat param)
 {
-	return es2::TexParameterf(target, pname, param);
+	return gl::TexParameterf(target, pname, param);
 }
 
 GL_APICALL void GL_APIENTRY glTexParameterfv(GLenum target, GLenum pname, const GLfloat* params)
 {
-	return es2::TexParameterfv(target, pname, params);
+	return gl::TexParameterfv(target, pname, params);
 }
 
 GL_APICALL void GL_APIENTRY glTexParameteri(GLenum target, GLenum pname, GLint param)
 {
-	return es2::TexParameteri(target, pname, param);
+	return gl::TexParameteri(target, pname, param);
 }
 
 GL_APICALL void GL_APIENTRY glTexParameteriv(GLenum target, GLenum pname, const GLint* params)
 {
-	return es2::TexParameteriv(target, pname, params);
+	return gl::TexParameteriv(target, pname, params);
 }
 
 GL_APICALL void GL_APIENTRY glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
                                             GLenum format, GLenum type, const GLvoid* pixels)
 {
-	return es2::TexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels);
+	return gl::TexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels);
 }
 
 GL_APICALL void GL_APIENTRY glUniform1f(GLint location, GLfloat x)
 {
-	return es2::Uniform1f(location, x);
+	return gl::Uniform1f(location, x);
 }
 
 GL_APICALL void GL_APIENTRY glUniform1fv(GLint location, GLsizei count, const GLfloat* v)
 {
-	return es2::Uniform1fv(location, count, v);
+	return gl::Uniform1fv(location, count, v);
 }
 
 GL_APICALL void GL_APIENTRY glUniform1i(GLint location, GLint x)
 {
-	return es2::Uniform1i(location, x);
+	return gl::Uniform1i(location, x);
 }
 
 GL_APICALL void GL_APIENTRY glUniform1iv(GLint location, GLsizei count, const GLint* v)
 {
-	return es2::Uniform1iv(location, count, v);
+	return gl::Uniform1iv(location, count, v);
 }
 
 GL_APICALL void GL_APIENTRY glUniform2f(GLint location, GLfloat x, GLfloat y)
 {
-	return es2::Uniform2f(location, x, y);
+	return gl::Uniform2f(location, x, y);
 }
 
 GL_APICALL void GL_APIENTRY glUniform2fv(GLint location, GLsizei count, const GLfloat* v)
 {
-	return es2::Uniform2fv(location, count, v);
+	return gl::Uniform2fv(location, count, v);
 }
 
 GL_APICALL void GL_APIENTRY glUniform2i(GLint location, GLint x, GLint y)
 {
-	return es2::Uniform2i(location, x, y);
+	return gl::Uniform2i(location, x, y);
 }
 
 GL_APICALL void GL_APIENTRY glUniform2iv(GLint location, GLsizei count, const GLint* v)
 {
-	return es2::Uniform2iv(location, count, v);
+	return gl::Uniform2iv(location, count, v);
 }
 
 GL_APICALL void GL_APIENTRY glUniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z)
 {
-	return es2::Uniform3f(location, x, y, z);
+	return gl::Uniform3f(location, x, y, z);
 }
 
 GL_APICALL void GL_APIENTRY glUniform3fv(GLint location, GLsizei count, const GLfloat* v)
 {
-	return es2::Uniform3fv(location, count, v);
+	return gl::Uniform3fv(location, count, v);
 }
 
 GL_APICALL void GL_APIENTRY glUniform3i(GLint location, GLint x, GLint y, GLint z)
 {
-	return es2::Uniform3i(location, x, y, z);
+	return gl::Uniform3i(location, x, y, z);
 }
 
 GL_APICALL void GL_APIENTRY glUniform3iv(GLint location, GLsizei count, const GLint* v)
 {
-	return es2::Uniform3iv(location, count, v);
+	return gl::Uniform3iv(location, count, v);
 }
 
 GL_APICALL void GL_APIENTRY glUniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
 {
-	return es2::Uniform4f(location, x, y, z, w);
+	return gl::Uniform4f(location, x, y, z, w);
 }
 
 GL_APICALL void GL_APIENTRY glUniform4fv(GLint location, GLsizei count, const GLfloat* v)
 {
-	return es2::Uniform4fv(location, count, v);
+	return gl::Uniform4fv(location, count, v);
 }
 
 GL_APICALL void GL_APIENTRY glUniform4i(GLint location, GLint x, GLint y, GLint z, GLint w)
 {
-	return es2::Uniform4i(location, x, y, z, w);
+	return gl::Uniform4i(location, x, y, z, w);
 }
 
 GL_APICALL void GL_APIENTRY glUniform4iv(GLint location, GLsizei count, const GLint* v)
 {
-	return es2::Uniform4iv(location, count, v);
+	return gl::Uniform4iv(location, count, v);
 }
 
 GL_APICALL void GL_APIENTRY glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
 {
-	return es2::UniformMatrix2fv(location, count, transpose, value);
+	return gl::UniformMatrix2fv(location, count, transpose, value);
 }
 
 GL_APICALL void GL_APIENTRY glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
 {
-	return es2::UniformMatrix3fv(location, count, transpose, value);
+	return gl::UniformMatrix3fv(location, count, transpose, value);
 }
 
 GL_APICALL void GL_APIENTRY glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
 {
-	return es2::UniformMatrix4fv(location, count, transpose, value);
+	return gl::UniformMatrix4fv(location, count, transpose, value);
 }
 
 GL_APICALL void GL_APIENTRY glUseProgram(GLuint program)
 {
-	return es2::UseProgram(program);
+	return gl::UseProgram(program);
 }
 
 GL_APICALL void GL_APIENTRY glValidateProgram(GLuint program)
 {
-	return es2::ValidateProgram(program);
+	return gl::ValidateProgram(program);
 }
 
 GL_APICALL void GL_APIENTRY glVertexAttrib1f(GLuint index, GLfloat x)
 {
-	return es2::VertexAttrib1f(index, x);
+	return gl::VertexAttrib1f(index, x);
 }
 
 GL_APICALL void GL_APIENTRY glVertexAttrib1fv(GLuint index, const GLfloat* values)
 {
-	return es2::VertexAttrib1fv(index, values);
+	return gl::VertexAttrib1fv(index, values);
 }
 
 GL_APICALL void GL_APIENTRY glVertexAttrib2f(GLuint index, GLfloat x, GLfloat y)
 {
-	return es2::VertexAttrib2f(index, x, y);
+	return gl::VertexAttrib2f(index, x, y);
 }
 
 GL_APICALL void GL_APIENTRY glVertexAttrib2fv(GLuint index, const GLfloat* values)
 {
-	return es2::VertexAttrib2fv(index, values);
+	return gl::VertexAttrib2fv(index, values);
 }
 
 GL_APICALL void GL_APIENTRY glVertexAttrib3f(GLuint index, GLfloat x, GLfloat y, GLfloat z)
 {
-	return es2::VertexAttrib3f(index, x, y, z);
+	return gl::VertexAttrib3f(index, x, y, z);
 }
 
 GL_APICALL void GL_APIENTRY glVertexAttrib3fv(GLuint index, const GLfloat* values)
 {
-	return es2::VertexAttrib3fv(index, values);
+	return gl::VertexAttrib3fv(index, values);
 }
 
 GL_APICALL void GL_APIENTRY glVertexAttrib4f(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
 {
-	return es2::VertexAttrib4f(index, x, y, z, w);
+	return gl::VertexAttrib4f(index, x, y, z, w);
 }
 
 GL_APICALL void GL_APIENTRY glVertexAttrib4fv(GLuint index, const GLfloat* values)
 {
-	return es2::VertexAttrib4fv(index, values);
+	return gl::VertexAttrib4fv(index, values);
 }
 
 GL_APICALL void GL_APIENTRY glVertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr)
 {
-	return es2::VertexAttribPointer(index, size, type, normalized, stride, ptr);
+	return gl::VertexAttribPointer(index, size, type, normalized, stride, ptr);
 }
 
 GL_APICALL void GL_APIENTRY glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
 {
-	return es2::Viewport(x, y, width, height);
+	return gl::Viewport(x, y, width, height);
 }
 
 GL_APICALL void GL_APIENTRY glBlitFramebufferNV(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)
 {
-	return es2::BlitFramebufferNV(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
+	return gl::BlitFramebufferNV(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
 }
 
 GL_APICALL void GL_APIENTRY glBlitFramebufferANGLE(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
                                                    GLbitfield mask, GLenum filter)
 {
-	return es2::BlitFramebufferANGLE(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
+	return gl::BlitFramebufferANGLE(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
 }
 
 GL_APICALL void GL_APIENTRY glTexImage3DOES(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth,
                                             GLint border, GLenum format, GLenum type, const GLvoid* pixels)
 {
-	return es2::TexImage3DOES(target, level, internalformat, width, height, depth, border, format, type, pixels);
+	return gl::TexImage3DOES(target, level, internalformat, width, height, depth, border, format, type, pixels);
 }
 
 GL_APICALL void GL_APIENTRY glTexSubImage3DOES(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels)
 {
-	return es2::TexSubImage3DOES(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);
+	return gl::TexSubImage3DOES(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);
 }
 
 GL_APICALL void GL_APIENTRY glCopyTexSubImage3DOES(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)
 {
-	return es2::CopyTexSubImage3DOES(target, level, xoffset, yoffset, zoffset, x, y, width, height);
+	return gl::CopyTexSubImage3DOES(target, level, xoffset, yoffset, zoffset, x, y, width, height);
 }
 
 GL_APICALL void GL_APIENTRY glCompressedTexImage3DOES(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data)
 {
-	return es2::CompressedTexImage3DOES(target, level,internalformat, width, height, depth, border, imageSize, data);
+	return gl::CompressedTexImage3DOES(target, level,internalformat, width, height, depth, border, imageSize, data);
 }
 
 GL_APICALL void GL_APIENTRY glCompressedTexSubImage3DOES(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data)
 {
-	return es2::CompressedTexSubImage3DOES(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data);
+	return gl::CompressedTexSubImage3DOES(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data);
 }
 
 GL_APICALL void GL_APIENTRY glFramebufferTexture3DOES(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset)
 {
-	return es2::FramebufferTexture3DOES(target, attachment, textarget, texture, level, zoffset);
+	return gl::FramebufferTexture3DOES(target, attachment, textarget, texture, level, zoffset);
 }
 
 GL_APICALL void GL_APIENTRY glEGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image)
 {
-	return es2::EGLImageTargetTexture2DOES(target, image);
+	return gl::EGLImageTargetTexture2DOES(target, image);
 }
 
 GL_APICALL void GL_APIENTRY glEGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImageOES image)
 {
-	return es2::EGLImageTargetRenderbufferStorageOES(target, image);
+	return gl::EGLImageTargetRenderbufferStorageOES(target, image);
 }
 
 GL_APICALL void GL_APIENTRY glDrawBuffersEXT(GLsizei n, const GLenum *bufs)
 {
-	return es2::DrawBuffersEXT(n, bufs);
+	return gl::DrawBuffersEXT(n, bufs);
 }
 
-void GL_APIENTRY Register(const char *licenseKey)
+GL_APICALL void GL_APIENTRY glReadBuffer(GLenum src)
 {
-	// Nothing to do, SwiftShader is open-source
+	return gl::ReadBuffer(src);
+}
+
+GL_APICALL void GL_APIENTRY glDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices)
+{
+	return gl::DrawRangeElements(mode, start, end, count, type, indices);
+}
+
+GL_APICALL void GL_APIENTRY glTexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *data)
+{
+	return gl::TexImage3D(target, level, internalformat, width, height, depth, border, format, type, data);
+}
+
+GL_APICALL void GL_APIENTRY glTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data)
+{
+	return gl::TexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, data);
+}
+
+GL_APICALL void GL_APIENTRY glCopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+{
+	return gl::CopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height);
+}
+
+GL_APICALL void GL_APIENTRY glCompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data)
+{
+	return gl::CompressedTexImage3D(target, level, internalformat, width, height, depth, border, imageSize, data);
+}
+
+GL_APICALL void GL_APIENTRY glCompressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data)
+{
+	return gl::CompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data);
+}
+
+GL_APICALL void GL_APIENTRY glGenQueries(GLsizei n, GLuint *ids)
+{
+	return gl::GenQueries(n, ids);
+}
+
+GL_APICALL void GL_APIENTRY glDeleteQueries(GLsizei n, const GLuint *ids)
+{
+	return gl::DeleteQueries(n, ids);
+}
+
+GL_APICALL GLboolean GL_APIENTRY glIsQuery(GLuint id)
+{
+	return gl::IsQuery(id);
+}
+
+GL_APICALL void GL_APIENTRY glBeginQuery(GLenum target, GLuint id)
+{
+	return gl::BeginQuery(target, id);
+}
+
+GL_APICALL void GL_APIENTRY glEndQuery(GLenum target)
+{
+	return gl::EndQuery(target);
+}
+
+GL_APICALL void GL_APIENTRY glGetQueryiv(GLenum target, GLenum pname, GLint *params)
+{
+	return gl::GetQueryiv(target, pname, params);
+}
+
+GL_APICALL void GL_APIENTRY glGetQueryObjectuiv(GLuint id, GLenum pname, GLuint *params)
+{
+	return gl::GetQueryObjectuiv(id, pname, params);
+}
+
+GL_APICALL GLboolean GL_APIENTRY glUnmapBuffer(GLenum target)
+{
+	return gl::UnmapBuffer(target);
+}
+
+GL_APICALL void GL_APIENTRY glGetBufferPointerv(GLenum target, GLenum pname, void **params)
+{
+	return gl::GetBufferPointerv(target, pname, params);
+}
+
+GL_APICALL void GL_APIENTRY glDrawBuffers(GLsizei n, const GLenum *bufs)
+{
+	return gl::DrawBuffers(n, bufs);
+}
+
+GL_APICALL void GL_APIENTRY glUniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+{
+	return gl::UniformMatrix2x3fv(location, count, transpose, value);
+}
+
+GL_APICALL void GL_APIENTRY glUniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+{
+	return gl::UniformMatrix3x2fv(location, count, transpose, value);
+}
+
+GL_APICALL void GL_APIENTRY glUniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+{
+	return gl::UniformMatrix2x4fv(location, count, transpose, value);
+}
+
+GL_APICALL void GL_APIENTRY glUniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+{
+	return gl::UniformMatrix4x2fv(location, count, transpose, value);
+}
+
+GL_APICALL void GL_APIENTRY glUniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+{
+	return gl::UniformMatrix3x4fv(location, count, transpose, value);
+}
+
+GL_APICALL void GL_APIENTRY glUniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+{
+	return gl::UniformMatrix4x3fv(location, count, transpose, value);
+}
+
+GL_APICALL void GL_APIENTRY glBlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)
+{
+	return gl::BlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
+}
+
+GL_APICALL void GL_APIENTRY glFramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer)
+{
+	return gl::FramebufferTextureLayer(target, attachment, texture, level, layer);
+}
+
+GL_APICALL void *GL_APIENTRY glMapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access)
+{
+	return gl::MapBufferRange(target, offset, length, access);
+}
+
+GL_APICALL void GL_APIENTRY glFlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length)
+{
+	return gl::FlushMappedBufferRange(target, offset, length);
+}
+
+GL_APICALL void GL_APIENTRY glBindVertexArray(GLuint array)
+{
+	return gl::BindVertexArray(array);
+}
+
+GL_APICALL void GL_APIENTRY glBindVertexArrayOES(GLuint array)
+{
+	return gl::BindVertexArrayOES(array);
+}
+
+GL_APICALL void GL_APIENTRY glDeleteVertexArrays(GLsizei n, const GLuint *arrays)
+{
+	return gl::DeleteVertexArrays(n, arrays);
+}
+
+GL_APICALL void GL_APIENTRY glDeleteVertexArraysOES(GLsizei n, const GLuint *arrays)
+{
+	return gl::DeleteFramebuffersOES(n, arrays);
+}
+
+GL_APICALL void GL_APIENTRY glGenVertexArrays(GLsizei n, GLuint *arrays)
+{
+	return gl::GenVertexArrays(n, arrays);
+}
+
+GL_APICALL void GL_APIENTRY glGenVertexArraysOES(GLsizei n, GLuint *arrays)
+{
+	return gl::GenVertexArraysOES(n, arrays);
+}
+
+GL_APICALL GLboolean GL_APIENTRY glIsVertexArray(GLuint array)
+{
+	return gl::IsVertexArray(array);
+}
+
+GL_APICALL GLboolean GL_APIENTRY glIsVertexArrayOES(GLuint array)
+{
+	return gl::IsVertexArrayOES(array);
+}
+
+GL_APICALL void GL_APIENTRY glGetIntegeri_v(GLenum target, GLuint index, GLint *data)
+{
+	return gl::GetIntegeri_v(target, index, data);
+}
+
+GL_APICALL void GL_APIENTRY glBeginTransformFeedback(GLenum primitiveMode)
+{
+	return gl::BeginTransformFeedback(primitiveMode);
+}
+
+GL_APICALL void GL_APIENTRY glEndTransformFeedback(void)
+{
+	return gl::EndTransformFeedback();
+}
+
+GL_APICALL void GL_APIENTRY glBindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size)
+{
+	return gl::BindBufferRange(target, index, buffer, offset, size);
+}
+
+GL_APICALL void GL_APIENTRY glBindBufferBase(GLenum target, GLuint index, GLuint buffer)
+{
+	return gl::BindBufferBase(target, index, buffer);
+}
+
+GL_APICALL void GL_APIENTRY glTransformFeedbackVaryings(GLuint program, GLsizei count, const GLchar *const *varyings, GLenum bufferMode)
+{
+	return gl::TransformFeedbackVaryings(program, count, varyings, bufferMode);
+}
+
+GL_APICALL void GL_APIENTRY glGetTransformFeedbackVarying(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name)
+{
+	return gl::GetTransformFeedbackVarying(program, index, bufSize, length, size, type, name);
+}
+
+GL_APICALL void GL_APIENTRY glVertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer)
+{
+	return gl::VertexAttribIPointer(index, size, type, stride, pointer);
+}
+
+GL_APICALL void GL_APIENTRY glGetVertexAttribIiv(GLuint index, GLenum pname, GLint *params)
+{
+	return gl::GetVertexAttribIiv(index, pname, params);
+}
+
+GL_APICALL void GL_APIENTRY glGetVertexAttribIuiv(GLuint index, GLenum pname, GLuint *params)
+{
+	return gl::GetVertexAttribIuiv(index, pname, params);
+}
+
+GL_APICALL void GL_APIENTRY glVertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w)
+{
+	return gl::VertexAttribI4i(index, x, y, z, w);
+}
+
+GL_APICALL void GL_APIENTRY glVertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w)
+{
+	return gl::VertexAttribI4ui(index, x, y, z, w);
+}
+
+GL_APICALL void GL_APIENTRY glVertexAttribI4iv(GLuint index, const GLint *v)
+{
+	return gl::VertexAttribI4iv(index, v);
+}
+
+GL_APICALL void GL_APIENTRY glVertexAttribI4uiv(GLuint index, const GLuint *v)
+{
+	return gl::VertexAttribI4uiv(index, v);
+}
+
+GL_APICALL void GL_APIENTRY glGetUniformuiv(GLuint program, GLint location, GLuint *params)
+{
+	return gl::GetUniformuiv(program, location, params);
+}
+
+GL_APICALL GLint GL_APIENTRY glGetFragDataLocation(GLuint program, const GLchar *name)
+{
+	return gl::GetFragDataLocation(program, name);
+}
+
+GL_APICALL void GL_APIENTRY glUniform1ui(GLint location, GLuint v0)
+{
+	return gl::Uniform1ui(location, v0);
+}
+
+GL_APICALL void GL_APIENTRY glUniform2ui(GLint location, GLuint v0, GLuint v1)
+{
+	return gl::Uniform2ui(location, v0, v1);
+}
+
+GL_APICALL void GL_APIENTRY glUniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2)
+{
+	return gl::Uniform3ui(location, v0, v1, v2);
+}
+
+GL_APICALL void GL_APIENTRY glUniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
+{
+	return gl::Uniform4ui(location, v0, v1, v2, v3);
+}
+
+GL_APICALL void GL_APIENTRY glUniform1uiv(GLint location, GLsizei count, const GLuint *value)
+{
+	return gl::Uniform1uiv(location, count, value);
+}
+
+GL_APICALL void GL_APIENTRY glUniform2uiv(GLint location, GLsizei count, const GLuint *value)
+{
+	return gl::Uniform2uiv(location, count, value);
+}
+
+GL_APICALL void GL_APIENTRY glUniform3uiv(GLint location, GLsizei count, const GLuint *value)
+{
+	return gl::Uniform3uiv(location, count, value);
+}
+
+GL_APICALL void GL_APIENTRY glUniform4uiv(GLint location, GLsizei count, const GLuint *value)
+{
+	return gl::Uniform4uiv(location, count, value);
+}
+
+GL_APICALL void GL_APIENTRY glClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint *value)
+{
+	return gl::ClearBufferiv(buffer, drawbuffer, value);
+}
+
+GL_APICALL void GL_APIENTRY glClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint *value)
+{
+	return gl::ClearBufferuiv(buffer, drawbuffer, value);
+}
+
+GL_APICALL void GL_APIENTRY glClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat *value)
+{
+	return gl::ClearBufferfv(buffer, drawbuffer, value);
+}
+
+GL_APICALL void GL_APIENTRY glClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil)
+{
+	return gl::ClearBufferfi(buffer, drawbuffer, depth, stencil);
+}
+
+GL_APICALL const GLubyte *GL_APIENTRY glGetStringi(GLenum name, GLuint index)
+{
+	return gl::GetStringi(name, index);
+}
+
+GL_APICALL void GL_APIENTRY glCopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size)
+{
+	return gl::CopyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size);
+}
+
+GL_APICALL void GL_APIENTRY glGetUniformIndices(GLuint program, GLsizei uniformCount, const GLchar *const *uniformNames, GLuint *uniformIndices)
+{
+	return gl::GetUniformIndices(program, uniformCount, uniformNames, uniformIndices);
+}
+
+GL_APICALL void GL_APIENTRY glGetActiveUniformsiv(GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params)
+{
+	return gl::GetActiveUniformsiv(program, uniformCount, uniformIndices, pname, params);
+}
+
+GL_APICALL GLuint GL_APIENTRY glGetUniformBlockIndex(GLuint program, const GLchar *uniformBlockName)
+{
+	return gl::GetUniformBlockIndex(program, uniformBlockName);
+}
+
+GL_APICALL void GL_APIENTRY glGetActiveUniformBlockiv(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params)
+{
+	return gl::GetActiveUniformBlockiv(program, uniformBlockIndex, pname, params);
+}
+
+GL_APICALL void GL_APIENTRY glGetActiveUniformBlockName(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName)
+{
+	return gl::GetActiveUniformBlockName(program, uniformBlockIndex, bufSize, length, uniformBlockName);
+}
+
+GL_APICALL void GL_APIENTRY glUniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding)
+{
+	return gl::UniformBlockBinding(program, uniformBlockIndex, uniformBlockBinding);
+}
+
+GL_APICALL void GL_APIENTRY glDrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount)
+{
+	return gl::DrawArraysInstanced(mode, first, count, instanceCount);
+}
+
+GL_APICALL void GL_APIENTRY glDrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instanceCount)
+{
+	return gl::DrawElementsInstanced(mode, count, type, indices, instanceCount);
+}
+
+GL_APICALL GLsync GL_APIENTRY glFenceSync(GLenum condition, GLbitfield flags)
+{
+	return gl::FenceSync(condition, flags);
+}
+
+GL_APICALL GLboolean GL_APIENTRY glIsSync(GLsync sync)
+{
+	return gl::IsSync(sync);
+}
+
+GL_APICALL void GL_APIENTRY glDeleteSync(GLsync sync)
+{
+	return gl::DeleteSync(sync);
+}
+
+GL_APICALL GLenum GL_APIENTRY glClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
+{
+	return gl::ClientWaitSync(sync, flags, timeout);
+}
+
+GL_APICALL void GL_APIENTRY glWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
+{
+	return gl::WaitSync(sync, flags, timeout);
+}
+
+GL_APICALL void GL_APIENTRY glGetInteger64v(GLenum pname, GLint64 *data)
+{
+	return gl::GetInteger64v(pname, data);
+}
+
+GL_APICALL void GL_APIENTRY glGetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values)
+{
+	return gl::GetSynciv(sync, pname, bufSize, length, values);
+}
+
+GL_APICALL void GL_APIENTRY glGetInteger64i_v(GLenum target, GLuint index, GLint64 *data)
+{
+	return gl::GetInteger64i_v(target, index, data);
+}
+
+GL_APICALL void GL_APIENTRY glGetBufferParameteri64v(GLenum target, GLenum pname, GLint64 *params)
+{
+	return gl::GetBufferParameteri64v(target, pname, params);
+}
+
+GL_APICALL void GL_APIENTRY glGenSamplers(GLsizei count, GLuint *samplers)
+{
+	return gl::GenSamplers(count, samplers);
+}
+
+GL_APICALL void GL_APIENTRY glDeleteSamplers(GLsizei count, const GLuint *samplers)
+{
+	return gl::DeleteSamplers(count, samplers);
+}
+
+GL_APICALL GLboolean GL_APIENTRY glIsSampler(GLuint sampler)
+{
+	return gl::IsSampler(sampler);
+}
+
+GL_APICALL void GL_APIENTRY glBindSampler(GLuint unit, GLuint sampler)
+{
+	return gl::BindSampler(unit, sampler);
+}
+
+GL_APICALL void GL_APIENTRY glSamplerParameteri(GLuint sampler, GLenum pname, GLint param)
+{
+	return gl::SamplerParameteri(sampler, pname, param);
+}
+
+GL_APICALL void GL_APIENTRY glSamplerParameteriv(GLuint sampler, GLenum pname, const GLint *param)
+{
+	return gl::SamplerParameteriv(sampler, pname, param);
+}
+
+GL_APICALL void GL_APIENTRY glSamplerParameterf(GLuint sampler, GLenum pname, GLfloat param)
+{
+	return gl::SamplerParameterf(sampler, pname, param);
+}
+
+GL_APICALL void GL_APIENTRY glSamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat *param)
+{
+	return gl::SamplerParameterfv(sampler, pname, param);
+}
+
+GL_APICALL void GL_APIENTRY glGetSamplerParameteriv(GLuint sampler, GLenum pname, GLint *params)
+{
+	return gl::GetSamplerParameteriv(sampler, pname, params);
+}
+
+GL_APICALL void GL_APIENTRY glGetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat *params)
+{
+	return gl::GetSamplerParameterfv(sampler, pname, params);
+}
+
+GL_APICALL void GL_APIENTRY glVertexAttribDivisor(GLuint index, GLuint divisor)
+{
+	return gl::VertexAttribDivisor(index, divisor);
+}
+
+GL_APICALL void GL_APIENTRY glBindTransformFeedback(GLenum target, GLuint id)
+{
+	return gl::BindTransformFeedback(target, id);
+}
+
+GL_APICALL void GL_APIENTRY glDeleteTransformFeedbacks(GLsizei n, const GLuint *ids)
+{
+	return gl::DeleteTransformFeedbacks(n, ids);
+}
+
+GL_APICALL void GL_APIENTRY glGenTransformFeedbacks(GLsizei n, GLuint *ids)
+{
+	return gl::GenTransformFeedbacks(n, ids);
+}
+
+GL_APICALL GLboolean GL_APIENTRY glIsTransformFeedback(GLuint id)
+{
+	return gl::IsTransformFeedback(id);
+}
+
+GL_APICALL void GL_APIENTRY glPauseTransformFeedback(void)
+{
+	return gl::PauseTransformFeedback();
+}
+
+GL_APICALL void GL_APIENTRY glResumeTransformFeedback(void)
+{
+	return gl::ResumeTransformFeedback();
+}
+
+GL_APICALL void GL_APIENTRY glGetProgramBinary(GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary)
+{
+	return gl::GetProgramBinary(program, bufSize, length, binaryFormat, binary);
+}
+
+GL_APICALL void GL_APIENTRY glProgramBinary(GLuint program, GLenum binaryFormat, const void *binary, GLsizei length)
+{
+	return gl::ProgramBinary(program, binaryFormat, binary, length);
+}
+
+GL_APICALL void GL_APIENTRY glProgramParameteri(GLuint program, GLenum pname, GLint value)
+{
+	return gl::ProgramParameteri(program, pname, value);
+}
+
+GL_APICALL void GL_APIENTRY glInvalidateFramebuffer(GLenum target, GLsizei numAttachments, const GLenum *attachments)
+{
+	return gl::InvalidateFramebuffer(target, numAttachments, attachments);
+}
+
+GL_APICALL void GL_APIENTRY glInvalidateSubFramebuffer(GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height)
+{
+	return gl::InvalidateSubFramebuffer(target, numAttachments, attachments, x, y, width, height);
+}
+
+GL_APICALL void GL_APIENTRY glTexStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)
+{
+	return gl::TexStorage2D(target, levels, internalformat, width, height);
+}
+
+GL_APICALL void GL_APIENTRY glTexStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth)
+{
+	return gl::TexStorage3D(target, levels, internalformat, width, height, depth);
+}
+
+GL_APICALL void GL_APIENTRY glGetInternalformativ(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params)
+{
+	return gl::GetInternalformativ(target, internalformat, pname, bufSize, params);
 }
 }
 
@@ -1217,200 +1542,200 @@
 
 LibGLESv2exports::LibGLESv2exports()
 {
-	this->glActiveTexture = es2::ActiveTexture;
-	this->glAttachShader = es2::AttachShader;
-	this->glBeginQueryEXT = es2::BeginQueryEXT;
-	this->glBindAttribLocation = es2::BindAttribLocation;
-	this->glBindBuffer = es2::BindBuffer;
-	this->glBindFramebuffer = es2::BindFramebuffer;
-	this->glBindRenderbuffer = es2::BindRenderbuffer;
-	this->glBindTexture = es2::BindTexture;
-	this->glBlendColor = es2::BlendColor;
-	this->glBlendEquation = es2::BlendEquation;
-	this->glBlendEquationSeparate = es2::BlendEquationSeparate;
-	this->glBlendFunc = es2::BlendFunc;
-	this->glBlendFuncSeparate = es2::BlendFuncSeparate;
-	this->glBufferData = es2::BufferData;
-	this->glBufferSubData = es2::BufferSubData;
-	this->glCheckFramebufferStatus = es2::CheckFramebufferStatus;
-	this->glClear = es2::Clear;
-	this->glClearColor = es2::ClearColor;
-	this->glClearDepthf = es2::ClearDepthf;
-	this->glClearStencil = es2::ClearStencil;
-	this->glColorMask = es2::ColorMask;
-	this->glCompileShader = es2::CompileShader;
-	this->glCompressedTexImage2D = es2::CompressedTexImage2D;
-	this->glCompressedTexSubImage2D = es2::CompressedTexSubImage2D;
-	this->glCopyTexImage2D = es2::CopyTexImage2D;
-	this->glCopyTexSubImage2D = es2::CopyTexSubImage2D;
-	this->glCreateProgram = es2::CreateProgram;
-	this->glCreateShader = es2::CreateShader;
-	this->glCullFace = es2::CullFace;
-	this->glDeleteBuffers = es2::DeleteBuffers;
-	this->glDeleteFencesNV = es2::DeleteFencesNV;
-	this->glDeleteFramebuffers = es2::DeleteFramebuffers;
-	this->glDeleteProgram = es2::DeleteProgram;
-	this->glDeleteQueriesEXT = es2::DeleteQueriesEXT;
-	this->glDeleteRenderbuffers = es2::DeleteRenderbuffers;
-	this->glDeleteShader = es2::DeleteShader;
-	this->glDeleteTextures = es2::DeleteTextures;
-	this->glDepthFunc = es2::DepthFunc;
-	this->glDepthMask = es2::DepthMask;
-	this->glDepthRangef = es2::DepthRangef;
-	this->glDetachShader = es2::DetachShader;
-	this->glDisable = es2::Disable;
-	this->glDisableVertexAttribArray = es2::DisableVertexAttribArray;
-	this->glDrawArrays = es2::DrawArrays;
-	this->glDrawElements = es2::DrawElements;
-	this->glDrawArraysInstancedEXT = es2::DrawArraysInstancedEXT;
-	this->glDrawElementsInstancedEXT = es2::DrawElementsInstancedEXT;
-	this->glVertexAttribDivisorEXT = es2::VertexAttribDivisorEXT;
-	this->glDrawArraysInstancedANGLE = es2::DrawArraysInstancedANGLE;
-	this->glDrawElementsInstancedANGLE = es2::DrawElementsInstancedANGLE;
-	this->glVertexAttribDivisorANGLE = es2::VertexAttribDivisorANGLE;
-	this->glEnable = es2::Enable;
-	this->glEnableVertexAttribArray = es2::EnableVertexAttribArray;
-	this->glEndQueryEXT = es2::EndQueryEXT;
-	this->glFinishFenceNV = es2::FinishFenceNV;
-	this->glFinish = es2::Finish;
-	this->glFlush = es2::Flush;
-	this->glFramebufferRenderbuffer = es2::FramebufferRenderbuffer;
-	this->glFramebufferTexture2D = es2::FramebufferTexture2D;
-	this->glFrontFace = es2::FrontFace;
-	this->glGenBuffers = es2::GenBuffers;
-	this->glGenerateMipmap = es2::GenerateMipmap;
-	this->glGenFencesNV = es2::GenFencesNV;
-	this->glGenFramebuffers = es2::GenFramebuffers;
-	this->glGenQueriesEXT = es2::GenQueriesEXT;
-	this->glGenRenderbuffers = es2::GenRenderbuffers;
-	this->glGenTextures = es2::GenTextures;
-	this->glGetActiveAttrib = es2::GetActiveAttrib;
-	this->glGetActiveUniform = es2::GetActiveUniform;
-	this->glGetAttachedShaders = es2::GetAttachedShaders;
-	this->glGetAttribLocation = es2::GetAttribLocation;
-	this->glGetBooleanv = es2::GetBooleanv;
-	this->glGetBufferParameteriv = es2::GetBufferParameteriv;
-	this->glGetError = es2::GetError;
-	this->glGetFenceivNV = es2::GetFenceivNV;
-	this->glGetFloatv = es2::GetFloatv;
-	this->glGetFramebufferAttachmentParameteriv = es2::GetFramebufferAttachmentParameteriv;
-	this->glGetGraphicsResetStatusEXT = es2::GetGraphicsResetStatusEXT;
-	this->glGetIntegerv = es2::GetIntegerv;
-	this->glGetProgramiv = es2::GetProgramiv;
-	this->glGetProgramInfoLog = es2::GetProgramInfoLog;
-	this->glGetQueryivEXT = es2::GetQueryivEXT;
-	this->glGetQueryObjectuivEXT = es2::GetQueryObjectuivEXT;
-	this->glGetRenderbufferParameteriv = es2::GetRenderbufferParameteriv;
-	this->glGetShaderiv = es2::GetShaderiv;
-	this->glGetShaderInfoLog = es2::GetShaderInfoLog;
-	this->glGetShaderPrecisionFormat = es2::GetShaderPrecisionFormat;
-	this->glGetShaderSource = es2::GetShaderSource;
-	this->glGetString = es2::GetString;
-	this->glGetTexParameterfv = es2::GetTexParameterfv;
-	this->glGetTexParameteriv = es2::GetTexParameteriv;
-	this->glGetnUniformfvEXT = es2::GetnUniformfvEXT;
-	this->glGetUniformfv = es2::GetUniformfv;
-	this->glGetnUniformivEXT = es2::GetnUniformivEXT;
-	this->glGetUniformiv = es2::GetUniformiv;
-	this->glGetUniformLocation = es2::GetUniformLocation;
-	this->glGetVertexAttribfv = es2::GetVertexAttribfv;
-	this->glGetVertexAttribiv = es2::GetVertexAttribiv;
-	this->glGetVertexAttribPointerv = es2::GetVertexAttribPointerv;
-	this->glHint = es2::Hint;
-	this->glIsBuffer = es2::IsBuffer;
-	this->glIsEnabled = es2::IsEnabled;
-	this->glIsFenceNV = es2::IsFenceNV;
-	this->glIsFramebuffer = es2::IsFramebuffer;
-	this->glIsProgram = es2::IsProgram;
-	this->glIsQueryEXT = es2::IsQueryEXT;
-	this->glIsRenderbuffer = es2::IsRenderbuffer;
-	this->glIsShader = es2::IsShader;
-	this->glIsTexture = es2::IsTexture;
-	this->glLineWidth = es2::LineWidth;
-	this->glLinkProgram = es2::LinkProgram;
-	this->glPixelStorei = es2::PixelStorei;
-	this->glPolygonOffset = es2::PolygonOffset;
-	this->glReadnPixelsEXT = es2::ReadnPixelsEXT;
-	this->glReadPixels = es2::ReadPixels;
-	this->glReleaseShaderCompiler = es2::ReleaseShaderCompiler;
-	this->glRenderbufferStorageMultisample = es2::RenderbufferStorageMultisample;
-	this->glRenderbufferStorageMultisampleANGLE = es2::RenderbufferStorageMultisampleANGLE;
-	this->glRenderbufferStorage = es2::RenderbufferStorage;
-	this->glSampleCoverage = es2::SampleCoverage;
-	this->glSetFenceNV = es2::SetFenceNV;
-	this->glScissor = es2::Scissor;
-	this->glShaderBinary = es2::ShaderBinary;
-	this->glShaderSource = es2::ShaderSource;
-	this->glStencilFunc = es2::StencilFunc;
-	this->glStencilFuncSeparate = es2::StencilFuncSeparate;
-	this->glStencilMask = es2::StencilMask;
-	this->glStencilMaskSeparate = es2::StencilMaskSeparate;
-	this->glStencilOp = es2::StencilOp;
-	this->glStencilOpSeparate = es2::StencilOpSeparate;
-	this->glTestFenceNV = es2::TestFenceNV;
-	this->glTexImage2D = es2::TexImage2D;
-	this->glTexParameterf = es2::TexParameterf;
-	this->glTexParameterfv = es2::TexParameterfv;
-	this->glTexParameteri = es2::TexParameteri;
-	this->glTexParameteriv = es2::TexParameteriv;
-	this->glTexSubImage2D = es2::TexSubImage2D;
-	this->glUniform1f = es2::Uniform1f;
-	this->glUniform1fv = es2::Uniform1fv;
-	this->glUniform1i = es2::Uniform1i;
-	this->glUniform1iv = es2::Uniform1iv;
-	this->glUniform2f = es2::Uniform2f;
-	this->glUniform2fv = es2::Uniform2fv;
-	this->glUniform2i = es2::Uniform2i;
-	this->glUniform2iv = es2::Uniform2iv;
-	this->glUniform3f = es2::Uniform3f;
-	this->glUniform3fv = es2::Uniform3fv;
-	this->glUniform3i = es2::Uniform3i;
-	this->glUniform3iv = es2::Uniform3iv;
-	this->glUniform4f = es2::Uniform4f;
-	this->glUniform4fv = es2::Uniform4fv;
-	this->glUniform4i = es2::Uniform4i;
-	this->glUniform4iv = es2::Uniform4iv;
-	this->glUniformMatrix2fv = es2::UniformMatrix2fv;
-	this->glUniformMatrix3fv = es2::UniformMatrix3fv;
-	this->glUniformMatrix4fv = es2::UniformMatrix4fv;
-	this->glUseProgram = es2::UseProgram;
-	this->glValidateProgram = es2::ValidateProgram;
-	this->glVertexAttrib1f = es2::VertexAttrib1f;
-	this->glVertexAttrib1fv = es2::VertexAttrib1fv;
-	this->glVertexAttrib2f = es2::VertexAttrib2f;
-	this->glVertexAttrib2fv = es2::VertexAttrib2fv;
-	this->glVertexAttrib3f = es2::VertexAttrib3f;
-	this->glVertexAttrib3fv = es2::VertexAttrib3fv;
-	this->glVertexAttrib4f = es2::VertexAttrib4f;
-	this->glVertexAttrib4fv = es2::VertexAttrib4fv;
-	this->glVertexAttribPointer = es2::VertexAttribPointer;
-	this->glViewport = es2::Viewport;
-	this->glBlitFramebufferNV = es2::BlitFramebufferNV;
-	this->glBlitFramebufferANGLE = es2::BlitFramebufferANGLE;
-	this->glTexImage3DOES = es2::TexImage3DOES;
-	this->glTexSubImage3DOES = es2::TexSubImage3DOES;
-	this->glCopyTexSubImage3DOES = es2::CopyTexSubImage3DOES;
-	this->glCompressedTexImage3DOES = es2::CompressedTexImage3DOES;
-	this->glCompressedTexSubImage3DOES = es2::CompressedTexSubImage3DOES;
-	this->glFramebufferTexture3DOES = es2::FramebufferTexture3DOES;
-	this->glEGLImageTargetTexture2DOES = es2::EGLImageTargetTexture2DOES;
-	this->glEGLImageTargetRenderbufferStorageOES = es2::EGLImageTargetRenderbufferStorageOES;
-	this->glIsRenderbufferOES = es2::IsRenderbufferOES;
-	this->glBindRenderbufferOES = es2::BindRenderbufferOES;
-	this->glDeleteRenderbuffersOES = es2::DeleteRenderbuffersOES;
-	this->glGenRenderbuffersOES = es2::GenRenderbuffersOES;
-	this->glRenderbufferStorageOES = es2::RenderbufferStorageOES;
-	this->glGetRenderbufferParameterivOES = es2::GetRenderbufferParameterivOES;
-	this->glIsFramebufferOES = es2::IsFramebufferOES;
-	this->glBindFramebufferOES = es2::BindFramebufferOES;
-	this->glDeleteFramebuffersOES = es2::DeleteFramebuffersOES;
-	this->glGenFramebuffersOES = es2::GenFramebuffersOES;
-	this->glCheckFramebufferStatusOES = es2::CheckFramebufferStatusOES;
-	this->glFramebufferRenderbufferOES = es2::FramebufferRenderbufferOES;
-	this->glFramebufferTexture2DOES = es2::FramebufferTexture2DOES;
-	this->glGetFramebufferAttachmentParameterivOES = es2::GetFramebufferAttachmentParameterivOES;
-	this->glGenerateMipmapOES = es2::GenerateMipmapOES;
-	this->glDrawBuffersEXT = es2::DrawBuffersEXT;
+	this->glActiveTexture = gl::ActiveTexture;
+	this->glAttachShader = gl::AttachShader;
+	this->glBeginQueryEXT = gl::BeginQueryEXT;
+	this->glBindAttribLocation = gl::BindAttribLocation;
+	this->glBindBuffer = gl::BindBuffer;
+	this->glBindFramebuffer = gl::BindFramebuffer;
+	this->glBindRenderbuffer = gl::BindRenderbuffer;
+	this->glBindTexture = gl::BindTexture;
+	this->glBlendColor = gl::BlendColor;
+	this->glBlendEquation = gl::BlendEquation;
+	this->glBlendEquationSeparate = gl::BlendEquationSeparate;
+	this->glBlendFunc = gl::BlendFunc;
+	this->glBlendFuncSeparate = gl::BlendFuncSeparate;
+	this->glBufferData = gl::BufferData;
+	this->glBufferSubData = gl::BufferSubData;
+	this->glCheckFramebufferStatus = gl::CheckFramebufferStatus;
+	this->glClear = gl::Clear;
+	this->glClearColor = gl::ClearColor;
+	this->glClearDepthf = gl::ClearDepthf;
+	this->glClearStencil = gl::ClearStencil;
+	this->glColorMask = gl::ColorMask;
+	this->glCompileShader = gl::CompileShader;
+	this->glCompressedTexImage2D = gl::CompressedTexImage2D;
+	this->glCompressedTexSubImage2D = gl::CompressedTexSubImage2D;
+	this->glCopyTexImage2D = gl::CopyTexImage2D;
+	this->glCopyTexSubImage2D = gl::CopyTexSubImage2D;
+	this->glCreateProgram = gl::CreateProgram;
+	this->glCreateShader = gl::CreateShader;
+	this->glCullFace = gl::CullFace;
+	this->glDeleteBuffers = gl::DeleteBuffers;
+	this->glDeleteFencesNV = gl::DeleteFencesNV;
+	this->glDeleteFramebuffers = gl::DeleteFramebuffers;
+	this->glDeleteProgram = gl::DeleteProgram;
+	this->glDeleteQueriesEXT = gl::DeleteQueriesEXT;
+	this->glDeleteRenderbuffers = gl::DeleteRenderbuffers;
+	this->glDeleteShader = gl::DeleteShader;
+	this->glDeleteTextures = gl::DeleteTextures;
+	this->glDepthFunc = gl::DepthFunc;
+	this->glDepthMask = gl::DepthMask;
+	this->glDepthRangef = gl::DepthRangef;
+	this->glDetachShader = gl::DetachShader;
+	this->glDisable = gl::Disable;
+	this->glDisableVertexAttribArray = gl::DisableVertexAttribArray;
+	this->glDrawArrays = gl::DrawArrays;
+	this->glDrawElements = gl::DrawElements;
+	this->glDrawArraysInstancedEXT = gl::DrawArraysInstancedEXT;
+	this->glDrawElementsInstancedEXT = gl::DrawElementsInstancedEXT;
+	this->glVertexAttribDivisorEXT = gl::VertexAttribDivisorEXT;
+	this->glDrawArraysInstancedANGLE = gl::DrawArraysInstancedANGLE;
+	this->glDrawElementsInstancedANGLE = gl::DrawElementsInstancedANGLE;
+	this->glVertexAttribDivisorANGLE = gl::VertexAttribDivisorANGLE;
+	this->glEnable = gl::Enable;
+	this->glEnableVertexAttribArray = gl::EnableVertexAttribArray;
+	this->glEndQueryEXT = gl::EndQueryEXT;
+	this->glFinishFenceNV = gl::FinishFenceNV;
+	this->glFinish = gl::Finish;
+	this->glFlush = gl::Flush;
+	this->glFramebufferRenderbuffer = gl::FramebufferRenderbuffer;
+	this->glFramebufferTexture2D = gl::FramebufferTexture2D;
+	this->glFrontFace = gl::FrontFace;
+	this->glGenBuffers = gl::GenBuffers;
+	this->glGenerateMipmap = gl::GenerateMipmap;
+	this->glGenFencesNV = gl::GenFencesNV;
+	this->glGenFramebuffers = gl::GenFramebuffers;
+	this->glGenQueriesEXT = gl::GenQueriesEXT;
+	this->glGenRenderbuffers = gl::GenRenderbuffers;
+	this->glGenTextures = gl::GenTextures;
+	this->glGetActiveAttrib = gl::GetActiveAttrib;
+	this->glGetActiveUniform = gl::GetActiveUniform;
+	this->glGetAttachedShaders = gl::GetAttachedShaders;
+	this->glGetAttribLocation = gl::GetAttribLocation;
+	this->glGetBooleanv = gl::GetBooleanv;
+	this->glGetBufferParameteriv = gl::GetBufferParameteriv;
+	this->glGetError = gl::GetError;
+	this->glGetFenceivNV = gl::GetFenceivNV;
+	this->glGetFloatv = gl::GetFloatv;
+	this->glGetFramebufferAttachmentParameteriv = gl::GetFramebufferAttachmentParameteriv;
+	this->glGetGraphicsResetStatusEXT = gl::GetGraphicsResetStatusEXT;
+	this->glGetIntegerv = gl::GetIntegerv;
+	this->glGetProgramiv = gl::GetProgramiv;
+	this->glGetProgramInfoLog = gl::GetProgramInfoLog;
+	this->glGetQueryivEXT = gl::GetQueryivEXT;
+	this->glGetQueryObjectuivEXT = gl::GetQueryObjectuivEXT;
+	this->glGetRenderbufferParameteriv = gl::GetRenderbufferParameteriv;
+	this->glGetShaderiv = gl::GetShaderiv;
+	this->glGetShaderInfoLog = gl::GetShaderInfoLog;
+	this->glGetShaderPrecisionFormat = gl::GetShaderPrecisionFormat;
+	this->glGetShaderSource = gl::GetShaderSource;
+	this->glGetString = gl::GetString;
+	this->glGetTexParameterfv = gl::GetTexParameterfv;
+	this->glGetTexParameteriv = gl::GetTexParameteriv;
+	this->glGetnUniformfvEXT = gl::GetnUniformfvEXT;
+	this->glGetUniformfv = gl::GetUniformfv;
+	this->glGetnUniformivEXT = gl::GetnUniformivEXT;
+	this->glGetUniformiv = gl::GetUniformiv;
+	this->glGetUniformLocation = gl::GetUniformLocation;
+	this->glGetVertexAttribfv = gl::GetVertexAttribfv;
+	this->glGetVertexAttribiv = gl::GetVertexAttribiv;
+	this->glGetVertexAttribPointerv = gl::GetVertexAttribPointerv;
+	this->glHint = gl::Hint;
+	this->glIsBuffer = gl::IsBuffer;
+	this->glIsEnabled = gl::IsEnabled;
+	this->glIsFenceNV = gl::IsFenceNV;
+	this->glIsFramebuffer = gl::IsFramebuffer;
+	this->glIsProgram = gl::IsProgram;
+	this->glIsQueryEXT = gl::IsQueryEXT;
+	this->glIsRenderbuffer = gl::IsRenderbuffer;
+	this->glIsShader = gl::IsShader;
+	this->glIsTexture = gl::IsTexture;
+	this->glLineWidth = gl::LineWidth;
+	this->glLinkProgram = gl::LinkProgram;
+	this->glPixelStorei = gl::PixelStorei;
+	this->glPolygonOffset = gl::PolygonOffset;
+	this->glReadnPixelsEXT = gl::ReadnPixelsEXT;
+	this->glReadPixels = gl::ReadPixels;
+	this->glReleaseShaderCompiler = gl::ReleaseShaderCompiler;
+	this->glRenderbufferStorageMultisample = gl::RenderbufferStorageMultisample;
+	this->glRenderbufferStorageMultisampleANGLE = gl::RenderbufferStorageMultisampleANGLE;
+	this->glRenderbufferStorage = gl::RenderbufferStorage;
+	this->glSampleCoverage = gl::SampleCoverage;
+	this->glSetFenceNV = gl::SetFenceNV;
+	this->glScissor = gl::Scissor;
+	this->glShaderBinary = gl::ShaderBinary;
+	this->glShaderSource = gl::ShaderSource;
+	this->glStencilFunc = gl::StencilFunc;
+	this->glStencilFuncSeparate = gl::StencilFuncSeparate;
+	this->glStencilMask = gl::StencilMask;
+	this->glStencilMaskSeparate = gl::StencilMaskSeparate;
+	this->glStencilOp = gl::StencilOp;
+	this->glStencilOpSeparate = gl::StencilOpSeparate;
+	this->glTestFenceNV = gl::TestFenceNV;
+	this->glTexImage2D = gl::TexImage2D;
+	this->glTexParameterf = gl::TexParameterf;
+	this->glTexParameterfv = gl::TexParameterfv;
+	this->glTexParameteri = gl::TexParameteri;
+	this->glTexParameteriv = gl::TexParameteriv;
+	this->glTexSubImage2D = gl::TexSubImage2D;
+	this->glUniform1f = gl::Uniform1f;
+	this->glUniform1fv = gl::Uniform1fv;
+	this->glUniform1i = gl::Uniform1i;
+	this->glUniform1iv = gl::Uniform1iv;
+	this->glUniform2f = gl::Uniform2f;
+	this->glUniform2fv = gl::Uniform2fv;
+	this->glUniform2i = gl::Uniform2i;
+	this->glUniform2iv = gl::Uniform2iv;
+	this->glUniform3f = gl::Uniform3f;
+	this->glUniform3fv = gl::Uniform3fv;
+	this->glUniform3i = gl::Uniform3i;
+	this->glUniform3iv = gl::Uniform3iv;
+	this->glUniform4f = gl::Uniform4f;
+	this->glUniform4fv = gl::Uniform4fv;
+	this->glUniform4i = gl::Uniform4i;
+	this->glUniform4iv = gl::Uniform4iv;
+	this->glUniformMatrix2fv = gl::UniformMatrix2fv;
+	this->glUniformMatrix3fv = gl::UniformMatrix3fv;
+	this->glUniformMatrix4fv = gl::UniformMatrix4fv;
+	this->glUseProgram = gl::UseProgram;
+	this->glValidateProgram = gl::ValidateProgram;
+	this->glVertexAttrib1f = gl::VertexAttrib1f;
+	this->glVertexAttrib1fv = gl::VertexAttrib1fv;
+	this->glVertexAttrib2f = gl::VertexAttrib2f;
+	this->glVertexAttrib2fv = gl::VertexAttrib2fv;
+	this->glVertexAttrib3f = gl::VertexAttrib3f;
+	this->glVertexAttrib3fv = gl::VertexAttrib3fv;
+	this->glVertexAttrib4f = gl::VertexAttrib4f;
+	this->glVertexAttrib4fv = gl::VertexAttrib4fv;
+	this->glVertexAttribPointer = gl::VertexAttribPointer;
+	this->glViewport = gl::Viewport;
+	this->glBlitFramebufferNV = gl::BlitFramebufferNV;
+	this->glBlitFramebufferANGLE = gl::BlitFramebufferANGLE;
+	this->glTexImage3DOES = gl::TexImage3DOES;
+	this->glTexSubImage3DOES = gl::TexSubImage3DOES;
+	this->glCopyTexSubImage3DOES = gl::CopyTexSubImage3DOES;
+	this->glCompressedTexImage3DOES = gl::CompressedTexImage3DOES;
+	this->glCompressedTexSubImage3DOES = gl::CompressedTexSubImage3DOES;
+	this->glFramebufferTexture3DOES = gl::FramebufferTexture3DOES;
+	this->glEGLImageTargetTexture2DOES = gl::EGLImageTargetTexture2DOES;
+	this->glEGLImageTargetRenderbufferStorageOES = gl::EGLImageTargetRenderbufferStorageOES;
+	this->glIsRenderbufferOES = gl::IsRenderbufferOES;
+	this->glBindRenderbufferOES = gl::BindRenderbufferOES;
+	this->glDeleteRenderbuffersOES = gl::DeleteRenderbuffersOES;
+	this->glGenRenderbuffersOES = gl::GenRenderbuffersOES;
+	this->glRenderbufferStorageOES = gl::RenderbufferStorageOES;
+	this->glGetRenderbufferParameterivOES = gl::GetRenderbufferParameterivOES;
+	this->glIsFramebufferOES = gl::IsFramebufferOES;
+	this->glBindFramebufferOES = gl::BindFramebufferOES;
+	this->glDeleteFramebuffersOES = gl::DeleteFramebuffersOES;
+	this->glGenFramebuffersOES = gl::GenFramebuffersOES;
+	this->glCheckFramebufferStatusOES = gl::CheckFramebufferStatusOES;
+	this->glFramebufferRenderbufferOES = gl::FramebufferRenderbufferOES;
+	this->glFramebufferTexture2DOES = gl::FramebufferTexture2DOES;
+	this->glGetFramebufferAttachmentParameterivOES = gl::GetFramebufferAttachmentParameterivOES;
+	this->glGenerateMipmapOES = gl::GenerateMipmapOES;
+	this->glDrawBuffersEXT = gl::DrawBuffersEXT;
 
 	this->es2CreateContext = ::es2CreateContext;
 	this->es2GetProcAddress = ::es2GetProcAddress;
diff --git a/src/OpenGL/libGLESv2/entry_points.h b/src/OpenGL/libGLESv2/entry_points.h
new file mode 100644
index 0000000..b72c6cd
--- /dev/null
+++ b/src/OpenGL/libGLESv2/entry_points.h
@@ -0,0 +1,334 @@
+// Copyright 2018 The SwiftShader Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef LIBGLESV2_ENTRY_POINTS_H_
+#define LIBGLESV2_ENTRY_POINTS_H_
+
+#include <GLES2/gl2.h>
+#include <GLES2/gl2ext.h>
+#include <GLES3/gl3.h>
+
+namespace gl
+{
+	void ActiveTexture(GLenum texture);
+	void AttachShader(GLuint program, GLuint shader);
+	void BeginQueryEXT(GLenum target, GLuint name);
+	void BindAttribLocation(GLuint program, GLuint index, const GLchar* name);
+	void BindBuffer(GLenum target, GLuint buffer);
+	void BindFramebuffer(GLenum target, GLuint framebuffer);
+	void BindRenderbuffer(GLenum target, GLuint renderbuffer);
+	void BindTexture(GLenum target, GLuint texture);
+	void BlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
+	void BlendEquation(GLenum mode);
+	void BlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha);
+	void BlendFunc(GLenum sfactor, GLenum dfactor);
+	void BlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+	void BufferData(GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage);
+	void BufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data);
+	GLenum CheckFramebufferStatus(GLenum target);
+	void Clear(GLbitfield mask);
+	void ClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
+	void ClearDepthf(GLclampf depth);
+	void ClearStencil(GLint s);
+	void ColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+	void CompileShader(GLuint shader);
+	void CompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height,
+		GLint border, GLsizei imageSize, const GLvoid* data);
+	void CompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
+		GLenum format, GLsizei imageSize, const GLvoid* data);
+	void CopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+	void CopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+	GLuint CreateProgram(void);
+	GLuint CreateShader(GLenum type);
+	void CullFace(GLenum mode);
+	void DeleteBuffers(GLsizei n, const GLuint* buffers);
+	void DeleteFencesNV(GLsizei n, const GLuint* fences);
+	void DeleteFramebuffers(GLsizei n, const GLuint* framebuffers);
+	void DeleteProgram(GLuint program);
+	void DeleteQueriesEXT(GLsizei n, const GLuint *ids);
+	void DeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers);
+	void DeleteShader(GLuint shader);
+	void DeleteTextures(GLsizei n, const GLuint* textures);
+	void DepthFunc(GLenum func);
+	void DepthMask(GLboolean flag);
+	void DepthRangef(GLclampf zNear, GLclampf zFar);
+	void DetachShader(GLuint program, GLuint shader);
+	void Disable(GLenum cap);
+	void DisableVertexAttribArray(GLuint index);
+	void DrawArrays(GLenum mode, GLint first, GLsizei count);
+	void DrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices);
+	void DrawArraysInstancedEXT(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount);
+	void DrawElementsInstancedEXT(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instanceCount);
+	void VertexAttribDivisorEXT(GLuint index, GLuint divisor);
+	void DrawArraysInstancedANGLE(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount);
+	void DrawElementsInstancedANGLE(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instanceCount);
+	void VertexAttribDivisorANGLE(GLuint index, GLuint divisor);
+	void Enable(GLenum cap);
+	void EnableVertexAttribArray(GLuint index);
+	void EndQueryEXT(GLenum target);
+	void FinishFenceNV(GLuint fence);
+	void Finish(void);
+	void Flush(void);
+	void FramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+	void FramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+	void FrontFace(GLenum mode);
+	void GenBuffers(GLsizei n, GLuint* buffers);
+	void GenerateMipmap(GLenum target);
+	void GenFencesNV(GLsizei n, GLuint* fences);
+	void GenFramebuffers(GLsizei n, GLuint* framebuffers);
+	void GenQueriesEXT(GLsizei n, GLuint* ids);
+	void GenRenderbuffers(GLsizei n, GLuint* renderbuffers);
+	void GenTextures(GLsizei n, GLuint* textures);
+	void GetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+	void GetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name);
+	void GetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders);
+	int GetAttribLocation(GLuint program, const GLchar* name);
+	void GetBooleanv(GLenum pname, GLboolean* params);
+	void GetBufferParameteriv(GLenum target, GLenum pname, GLint* params);
+	GLenum GetError(void);
+	void GetFenceivNV(GLuint fence, GLenum pname, GLint *params);
+	void GetFloatv(GLenum pname, GLfloat* params);
+	void GetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint* params);
+	GLenum GetGraphicsResetStatusEXT(void);
+	void GetIntegerv(GLenum pname, GLint* params);
+	void GetProgramiv(GLuint program, GLenum pname, GLint* params);
+	void GetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog);
+	void GetQueryivEXT(GLenum target, GLenum pname, GLint *params);
+	void GetQueryObjectuivEXT(GLuint name, GLenum pname, GLuint *params);
+	void GetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* params);
+	void GetShaderiv(GLuint shader, GLenum pname, GLint* params);
+	void GetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog);
+	void GetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision);
+	void GetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source);
+	const GLubyte* GetString(GLenum name);
+	void GetTexParameterfv(GLenum target, GLenum pname, GLfloat* params);
+	void GetTexParameteriv(GLenum target, GLenum pname, GLint* params);
+	void GetnUniformfvEXT(GLuint program, GLint location, GLsizei bufSize, GLfloat* params);
+	void GetUniformfv(GLuint program, GLint location, GLfloat* params);
+	void GetnUniformivEXT(GLuint program, GLint location, GLsizei bufSize, GLint* params);
+	void GetUniformiv(GLuint program, GLint location, GLint* params);
+	int GetUniformLocation(GLuint program, const GLchar* name);
+	void GetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params);
+	void GetVertexAttribiv(GLuint index, GLenum pname, GLint* params);
+	void GetVertexAttribPointerv(GLuint index, GLenum pname, GLvoid** pointer);
+	void Hint(GLenum target, GLenum mode);
+	GLboolean IsBuffer(GLuint buffer);
+	GLboolean IsEnabled(GLenum cap);
+	GLboolean IsFenceNV(GLuint fence);
+	GLboolean IsFramebuffer(GLuint framebuffer);
+	GLboolean IsProgram(GLuint program);
+	GLboolean IsQueryEXT(GLuint name);
+	GLboolean IsRenderbuffer(GLuint renderbuffer);
+	GLboolean IsShader(GLuint shader);
+	GLboolean IsTexture(GLuint texture);
+	void LineWidth(GLfloat width);
+	void LinkProgram(GLuint program);
+	void PixelStorei(GLenum pname, GLint param);
+	void PolygonOffset(GLfloat factor, GLfloat units);
+	void ReadnPixelsEXT(GLint x, GLint y, GLsizei width, GLsizei height,
+		GLenum format, GLenum type, GLsizei bufSize, GLvoid *data);
+	void ReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels);
+	void ReleaseShaderCompiler(void);
+	void RenderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+	void RenderbufferStorageMultisampleANGLE(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+	void RenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+	void SampleCoverage(GLclampf value, GLboolean invert);
+	void SetFenceNV(GLuint fence, GLenum condition);
+	void Scissor(GLint x, GLint y, GLsizei width, GLsizei height);
+	void ShaderBinary(GLsizei n, const GLuint* shaders, GLenum binaryformat, const GLvoid* binary, GLsizei length);
+	void ShaderSource(GLuint shader, GLsizei count, const GLchar *const *string, const GLint *length);
+	void StencilFunc(GLenum func, GLint ref, GLuint mask);
+	void StencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask);
+	void StencilMask(GLuint mask);
+	void StencilMaskSeparate(GLenum face, GLuint mask);
+	void StencilOp(GLenum fail, GLenum zfail, GLenum zpass);
+	void StencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass);
+	GLboolean TestFenceNV(GLuint fence);
+	void TexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
+		GLint border, GLenum format, GLenum type, const GLvoid* pixels);
+	void TexParameterf(GLenum target, GLenum pname, GLfloat param);
+	void TexParameterfv(GLenum target, GLenum pname, const GLfloat* params);
+	void TexParameteri(GLenum target, GLenum pname, GLint param);
+	void TexParameteriv(GLenum target, GLenum pname, const GLint* params);
+	void TexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
+		GLenum format, GLenum type, const GLvoid* pixels);
+	void Uniform1f(GLint location, GLfloat x);
+	void Uniform1fv(GLint location, GLsizei count, const GLfloat* v);
+	void Uniform1i(GLint location, GLint x);
+	void Uniform1iv(GLint location, GLsizei count, const GLint* v);
+	void Uniform2f(GLint location, GLfloat x, GLfloat y);
+	void Uniform2fv(GLint location, GLsizei count, const GLfloat* v);
+	void Uniform2i(GLint location, GLint x, GLint y);
+	void Uniform2iv(GLint location, GLsizei count, const GLint* v);
+	void Uniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z);
+	void Uniform3fv(GLint location, GLsizei count, const GLfloat* v);
+	void Uniform3i(GLint location, GLint x, GLint y, GLint z);
+	void Uniform3iv(GLint location, GLsizei count, const GLint* v);
+	void Uniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+	void Uniform4fv(GLint location, GLsizei count, const GLfloat* v);
+	void Uniform4i(GLint location, GLint x, GLint y, GLint z, GLint w);
+	void Uniform4iv(GLint location, GLsizei count, const GLint* v);
+	void UniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+	void UniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+	void UniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+	void UseProgram(GLuint program);
+	void ValidateProgram(GLuint program);
+	void VertexAttrib1f(GLuint index, GLfloat x);
+	void VertexAttrib1fv(GLuint index, const GLfloat* values);
+	void VertexAttrib2f(GLuint index, GLfloat x, GLfloat y);
+	void VertexAttrib2fv(GLuint index, const GLfloat* values);
+	void VertexAttrib3f(GLuint index, GLfloat x, GLfloat y, GLfloat z);
+	void VertexAttrib3fv(GLuint index, const GLfloat* values);
+	void VertexAttrib4f(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+	void VertexAttrib4fv(GLuint index, const GLfloat* values);
+	void VertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr);
+	void Viewport(GLint x, GLint y, GLsizei width, GLsizei height);
+	void BlitFramebufferNV(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+	void BlitFramebufferANGLE(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
+		GLbitfield mask, GLenum filter);
+	void TexImage3DOES(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth,
+		GLint border, GLenum format, GLenum type, const GLvoid* pixels);
+	void TexSubImage3DOES(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
+	void CopyTexSubImage3DOES(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+	void CompressedTexImage3DOES(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data);
+	void CompressedTexSubImage3DOES(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data);
+	void FramebufferTexture3DOES(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
+	void EGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image);
+	void EGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImageOES image);
+	GLboolean IsRenderbufferOES(GLuint renderbuffer);
+	void BindRenderbufferOES(GLenum target, GLuint renderbuffer);
+	void DeleteRenderbuffersOES(GLsizei n, const GLuint* renderbuffers);
+	void GenRenderbuffersOES(GLsizei n, GLuint* renderbuffers);
+	void RenderbufferStorageOES(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+	void GetRenderbufferParameterivOES(GLenum target, GLenum pname, GLint* params);
+	GLboolean IsFramebufferOES(GLuint framebuffer);
+	void BindFramebufferOES(GLenum target, GLuint framebuffer);
+	void DeleteFramebuffersOES(GLsizei n, const GLuint* framebuffers);
+	void GenFramebuffersOES(GLsizei n, GLuint* framebuffers);
+	GLenum CheckFramebufferStatusOES(GLenum target);
+	void FramebufferRenderbufferOES(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+	void FramebufferTexture2DOES(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+	void GetFramebufferAttachmentParameterivOES(GLenum target, GLenum attachment, GLenum pname, GLint* params);
+	void GenerateMipmapOES(GLenum target);
+	void DrawBuffersEXT(GLsizei n, const GLenum *bufs);
+	void ReadBuffer(GLenum src);
+	void DrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices);
+	void TexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *data);
+	void TexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data);
+	void CopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+	void CompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data);
+	void CompressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data);
+	void GenQueries(GLsizei n, GLuint *ids);
+	void DeleteQueries(GLsizei n, const GLuint *ids);
+	GLboolean IsQuery(GLuint id);
+	void BeginQuery(GLenum target, GLuint id);
+	void EndQuery(GLenum target);
+	void GetQueryiv(GLenum target, GLenum pname, GLint *params);
+	void GetQueryObjectuiv(GLuint id, GLenum pname, GLuint *params);
+	GLboolean UnmapBuffer(GLenum target);
+	void GetBufferPointerv(GLenum target, GLenum pname, void **params);
+	void DrawBuffers(GLsizei n, const GLenum *bufs);
+	void UniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+	void UniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+	void UniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+	void UniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+	void UniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+	void UniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+	void BlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+	void FramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+	void *MapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
+	void FlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length);
+	void BindVertexArray(GLuint array);
+	void BindVertexArrayOES(GLuint array);
+	void DeleteVertexArrays(GLsizei n, const GLuint *arrays);
+	void DeleteVertexArraysOES(GLsizei n, const GLuint *arrays);
+	void GenVertexArrays(GLsizei n, GLuint *arrays);
+	void GenVertexArraysOES(GLsizei n, GLuint *arrays);
+	GLboolean IsVertexArray(GLuint array);
+	GLboolean IsVertexArrayOES(GLuint array);
+	void GetIntegeri_v(GLenum target, GLuint index, GLint *data);
+	void BeginTransformFeedback(GLenum primitiveMode);
+	void EndTransformFeedback(void);
+	void BindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+	void BindBufferBase(GLenum target, GLuint index, GLuint buffer);
+	void TransformFeedbackVaryings(GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode);
+	void GetTransformFeedbackVarying(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
+	void VertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
+	void GetVertexAttribIiv(GLuint index, GLenum pname, GLint *params);
+	void GetVertexAttribIuiv(GLuint index, GLenum pname, GLuint *params);
+	void VertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w);
+	void VertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+	void VertexAttribI4iv(GLuint index, const GLint *v);
+	void VertexAttribI4uiv(GLuint index, const GLuint *v);
+	void GetUniformuiv(GLuint program, GLint location, GLuint *params);
+	GLint GetFragDataLocation(GLuint program, const GLchar *name);
+	void Uniform1ui(GLint location, GLuint v0);
+	void Uniform2ui(GLint location, GLuint v0, GLuint v1);
+	void Uniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2);
+	void Uniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+	void Uniform1uiv(GLint location, GLsizei count, const GLuint *value);
+	void Uniform2uiv(GLint location, GLsizei count, const GLuint *value);
+	void Uniform3uiv(GLint location, GLsizei count, const GLuint *value);
+	void Uniform4uiv(GLint location, GLsizei count, const GLuint *value);
+	void ClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint *value);
+	void ClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint *value);
+	void ClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat *value);
+	void ClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
+	const GLubyte *GetStringi(GLenum name, GLuint index);
+	void CopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+	void GetUniformIndices(GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices);
+	void GetActiveUniformsiv(GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params);
+	GLuint GetUniformBlockIndex(GLuint program, const GLchar *uniformBlockName);
+	void GetActiveUniformBlockiv(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params);
+	void GetActiveUniformBlockName(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName);
+	void UniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
+	void DrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount);
+	void DrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instanceCount);
+	GLsync FenceSync(GLenum condition, GLbitfield flags);
+	GLboolean IsSync(GLsync sync);
+	void DeleteSync(GLsync sync);
+	GLenum ClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout);
+	void WaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout);
+	void GetInteger64v(GLenum pname, GLint64 *data);
+	void GetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
+	void GetInteger64i_v(GLenum target, GLuint index, GLint64 *data);
+	void GetBufferParameteri64v(GLenum target, GLenum pname, GLint64 *params);
+	void GenSamplers(GLsizei count, GLuint *samplers);
+	void DeleteSamplers(GLsizei count, const GLuint *samplers);
+	GLboolean IsSampler(GLuint sampler);
+	void BindSampler(GLuint unit, GLuint sampler);
+	void SamplerParameteri(GLuint sampler, GLenum pname, GLint param);
+	void SamplerParameteriv(GLuint sampler, GLenum pname, const GLint *param);
+	void SamplerParameterf(GLuint sampler, GLenum pname, GLfloat param);
+	void SamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat *param);
+	void GetSamplerParameteriv(GLuint sampler, GLenum pname, GLint *params);
+	void GetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat *params);
+	void VertexAttribDivisor(GLuint index, GLuint divisor);
+	void BindTransformFeedback(GLenum target, GLuint id);
+	void DeleteTransformFeedbacks(GLsizei n, const GLuint *ids);
+	void GenTransformFeedbacks(GLsizei n, GLuint *ids);
+	GLboolean IsTransformFeedback(GLuint id);
+	void PauseTransformFeedback(void);
+	void ResumeTransformFeedback(void);
+	void GetProgramBinary(GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary);
+	void ProgramBinary(GLuint program, GLenum binaryFormat, const void *binary, GLsizei length);
+	void ProgramParameteri(GLuint program, GLenum pname, GLint value);
+	void InvalidateFramebuffer(GLenum target, GLsizei numAttachments, const GLenum *attachments);
+	void InvalidateSubFramebuffer(GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height);
+	void TexStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+	void TexStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+	void GetInternalformativ(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params);
+}
+
+#endif   // LIBGLESV2_ENTRY_POINTS_H_
diff --git a/src/OpenGL/libGLESv2/libGLESv2.cpp b/src/OpenGL/libGLESv2/libGLESv2.cpp
index 209853a..ef00cc3 100644
--- a/src/OpenGL/libGLESv2/libGLESv2.cpp
+++ b/src/OpenGL/libGLESv2/libGLESv2.cpp
@@ -42,7 +42,7 @@
 
 static bool validImageSize(GLint level, GLsizei width, GLsizei height)
 {
-	if(level < 0 || level >= es2::IMPLEMENTATION_MAX_TEXTURE_LEVELS || width < 0 || height < 0)
+	if(level < 0 || level >= IMPLEMENTATION_MAX_TEXTURE_LEVELS || width < 0 || height < 0)
 	{
 		return false;
 	}
@@ -50,6 +50,13 @@
 	return true;
 }
 
+}
+
+namespace gl
+{
+
+using namespace es2;
+
 void ActiveTexture(GLenum texture)
 {
 	TRACE("(GLenum texture = 0x%X)", texture);
@@ -311,11 +318,6 @@
 	}
 }
 
-void BlendEquation(GLenum mode)
-{
-	glBlendEquationSeparate(mode, mode);
-}
-
 void BlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha)
 {
 	TRACE("(GLenum modeRGB = 0x%X, GLenum modeAlpha = 0x%X)", modeRGB, modeAlpha);
@@ -352,9 +354,9 @@
 	}
 }
 
-void BlendFunc(GLenum sfactor, GLenum dfactor)
+void BlendEquation(GLenum mode)
 {
-	glBlendFuncSeparate(sfactor, dfactor, sfactor, dfactor);
+	BlendEquationSeparate(mode, mode);
 }
 
 void BlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
@@ -460,6 +462,11 @@
 	}
 }
 
+void BlendFunc(GLenum sfactor, GLenum dfactor)
+{
+	BlendFuncSeparate(sfactor, dfactor, sfactor, dfactor);
+}
+
 void BufferData(GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage)
 {
 	size = static_cast<GLint>(size);   // Work around issues with some 64-bit applications
@@ -4331,11 +4338,6 @@
 	}
 }
 
-void StencilFunc(GLenum func, GLint ref, GLuint mask)
-{
-	glStencilFuncSeparate(GL_FRONT_AND_BACK, func, ref, mask);
-}
-
 void StencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask)
 {
 	TRACE("(GLenum face = 0x%X, GLenum func = 0x%X, GLint ref = %d, GLuint mask = %d)", face, func, ref, mask);
@@ -4381,9 +4383,9 @@
 	}
 }
 
-void StencilMask(GLuint mask)
+void StencilFunc(GLenum func, GLint ref, GLuint mask)
 {
-	glStencilMaskSeparate(GL_FRONT_AND_BACK, mask);
+	StencilFuncSeparate(GL_FRONT_AND_BACK, func, ref, mask);
 }
 
 void StencilMaskSeparate(GLenum face, GLuint mask)
@@ -4416,9 +4418,9 @@
 	}
 }
 
-void StencilOp(GLenum fail, GLenum zfail, GLenum zpass)
+void StencilMask(GLuint mask)
 {
-	glStencilOpSeparate(GL_FRONT_AND_BACK, fail, zfail, zpass);
+	StencilMaskSeparate(GL_FRONT_AND_BACK, mask);
 }
 
 void StencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass)
@@ -4497,6 +4499,11 @@
 	}
 }
 
+void StencilOp(GLenum fail, GLenum zfail, GLenum zpass)
+{
+	StencilOpSeparate(GL_FRONT_AND_BACK, fail, zfail, zpass);
+}
+
 GLboolean TestFenceNV(GLuint fence)
 {
 	TRACE("(GLuint fence = %d)", fence);
@@ -4749,7 +4756,7 @@
 
 void TexParameterfv(GLenum target, GLenum pname, const GLfloat* params)
 {
-	glTexParameterf(target, pname, *params);
+	TexParameterf(target, pname, *params);
 }
 
 void TexParameteri(GLenum target, GLenum pname, GLint param)
@@ -4884,7 +4891,7 @@
 
 void TexParameteriv(GLenum target, GLenum pname, const GLint* params)
 {
-	glTexParameteri(target, pname, *params);
+	TexParameteri(target, pname, *params);
 }
 
 void TexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
@@ -4959,11 +4966,6 @@
 	}
 }
 
-void Uniform1f(GLint location, GLfloat x)
-{
-	glUniform1fv(location, 1, &x);
-}
-
 void Uniform1fv(GLint location, GLsizei count, const GLfloat* v)
 {
 	TRACE("(GLint location = %d, GLsizei count = %d, const GLfloat* v = %p)", location, count, v);
@@ -4996,9 +4998,9 @@
 	}
 }
 
-void Uniform1i(GLint location, GLint x)
+void Uniform1f(GLint location, GLfloat x)
 {
-	glUniform1iv(location, 1, &x);
+	Uniform1fv(location, 1, &x);
 }
 
 void Uniform1iv(GLint location, GLsizei count, const GLint* v)
@@ -5033,11 +5035,9 @@
 	}
 }
 
-void Uniform2f(GLint location, GLfloat x, GLfloat y)
+void Uniform1i(GLint location, GLint x)
 {
-	GLfloat xy[2] = {x, y};
-
-	glUniform2fv(location, 1, (GLfloat*)&xy);
+	Uniform1iv(location, 1, &x);
 }
 
 void Uniform2fv(GLint location, GLsizei count, const GLfloat* v)
@@ -5072,11 +5072,11 @@
 	}
 }
 
-void Uniform2i(GLint location, GLint x, GLint y)
+void Uniform2f(GLint location, GLfloat x, GLfloat y)
 {
-	GLint xy[4] = {x, y};
+	GLfloat xy[2] = {x, y};
 
-	glUniform2iv(location, 1, (GLint*)&xy);
+	Uniform2fv(location, 1, (GLfloat*)&xy);
 }
 
 void Uniform2iv(GLint location, GLsizei count, const GLint* v)
@@ -5111,11 +5111,11 @@
 	}
 }
 
-void Uniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z)
+void Uniform2i(GLint location, GLint x, GLint y)
 {
-	GLfloat xyz[3] = {x, y, z};
+	GLint xy[4] = {x, y};
 
-	glUniform3fv(location, 1, (GLfloat*)&xyz);
+	Uniform2iv(location, 1, (GLint*)&xy);
 }
 
 void Uniform3fv(GLint location, GLsizei count, const GLfloat* v)
@@ -5150,11 +5150,11 @@
 	}
 }
 
-void Uniform3i(GLint location, GLint x, GLint y, GLint z)
+void Uniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z)
 {
-	GLint xyz[3] = {x, y, z};
+	GLfloat xyz[3] = {x, y, z};
 
-	glUniform3iv(location, 1, (GLint*)&xyz);
+	Uniform3fv(location, 1, (GLfloat*)&xyz);
 }
 
 void Uniform3iv(GLint location, GLsizei count, const GLint* v)
@@ -5189,11 +5189,11 @@
 	}
 }
 
-void Uniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+void Uniform3i(GLint location, GLint x, GLint y, GLint z)
 {
-	GLfloat xyzw[4] = {x, y, z, w};
+	GLint xyz[3] = {x, y, z};
 
-	glUniform4fv(location, 1, (GLfloat*)&xyzw);
+	Uniform3iv(location, 1, (GLint*)&xyz);
 }
 
 void Uniform4fv(GLint location, GLsizei count, const GLfloat* v)
@@ -5228,11 +5228,11 @@
 	}
 }
 
-void Uniform4i(GLint location, GLint x, GLint y, GLint z, GLint w)
+void Uniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
 {
-	GLint xyzw[4] = {x, y, z, w};
+	GLfloat xyzw[4] = {x, y, z, w};
 
-	glUniform4iv(location, 1, (GLint*)&xyzw);
+	Uniform4fv(location, 1, (GLfloat*)&xyzw);
 }
 
 void Uniform4iv(GLint location, GLsizei count, const GLint* v)
@@ -5267,6 +5267,13 @@
 	}
 }
 
+void Uniform4i(GLint location, GLint x, GLint y, GLint z, GLint w)
+{
+	GLint xyzw[4] = {x, y, z, w};
+
+	Uniform4iv(location, 1, (GLint*)&xyzw);
+}
+
 void UniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
 {
 	TRACE("(GLint location = %d, GLsizei count = %d, GLboolean transpose = %d, const GLfloat* value = %p)",
@@ -5650,7 +5657,7 @@
 	}
 }
 
-static void BlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter, bool allowPartialDepthStencilBlit)
+static void BlitFramebufferSW(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter, bool allowPartialDepthStencilBlit)
 {
 	TRACE("(GLint srcX0 = %d, GLint srcY0 = %d, GLint srcX1 = %d, GLint srcY1 = %d, "
 	      "GLint dstX0 = %d, GLint dstY0 = %d, GLint dstX1 = %d, GLint dstY1 = %d, "
@@ -5686,7 +5693,7 @@
 
 void BlitFramebufferNV(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)
 {
-	BlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter, true);
+	BlitFramebufferSW(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter, true);
 }
 
 void BlitFramebufferANGLE(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
@@ -5698,7 +5705,7 @@
 		return error(GL_INVALID_OPERATION);
 	}
 
-	BlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter, false);
+	BlitFramebufferSW(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter, false);
 }
 
 void TexImage3DOES(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth,
@@ -6267,6 +6274,8 @@
 
 }
 
+#include "entry_points.h"
+
 extern "C" NO_SANITIZE_FUNCTION __eglMustCastToProperFunctionPointerType es2GetProcAddress(const char *procname)
 {
 	struct Function
@@ -6277,300 +6286,299 @@
 
 	static const Function glFunctions[] =
 	{
-		#define FUNCTION(name) {#name, (__eglMustCastToProperFunctionPointerType)name}
+		#define FUNCTION(name) {"gl" #name, (__eglMustCastToProperFunctionPointerType)gl::name}
 
-		FUNCTION(glActiveTexture),
-		FUNCTION(glAttachShader),
-		FUNCTION(glBeginQuery),
-		FUNCTION(glBeginQueryEXT),
-		FUNCTION(glBeginTransformFeedback),
-		FUNCTION(glBindAttribLocation),
-		FUNCTION(glBindBuffer),
-		FUNCTION(glBindBufferBase),
-		FUNCTION(glBindBufferRange),
-		FUNCTION(glBindFramebuffer),
-		FUNCTION(glBindFramebufferOES),
-		FUNCTION(glBindRenderbuffer),
-		FUNCTION(glBindRenderbufferOES),
-		FUNCTION(glBindSampler),
-		FUNCTION(glBindTexture),
-		FUNCTION(glBindTransformFeedback),
-		FUNCTION(glBindVertexArray),
-		FUNCTION(glBindVertexArrayOES),
-		FUNCTION(glBlendColor),
-		FUNCTION(glBlendEquation),
-		FUNCTION(glBlendEquationSeparate),
-		FUNCTION(glBlendFunc),
-		FUNCTION(glBlendFuncSeparate),
-		FUNCTION(glBlitFramebuffer),
-		FUNCTION(glBlitFramebufferANGLE),
-		FUNCTION(glBufferData),
-		FUNCTION(glBufferSubData),
-		FUNCTION(glCheckFramebufferStatus),
-		FUNCTION(glCheckFramebufferStatusOES),
-		FUNCTION(glClear),
-		FUNCTION(glClearBufferfi),
-		FUNCTION(glClearBufferfv),
-		FUNCTION(glClearBufferiv),
-		FUNCTION(glClearBufferuiv),
-		FUNCTION(glClearColor),
-		FUNCTION(glClearDepthf),
-		FUNCTION(glClearStencil),
-		FUNCTION(glClientWaitSync),
-		FUNCTION(glColorMask),
-		FUNCTION(glCompileShader),
-		FUNCTION(glCompressedTexImage2D),
-		FUNCTION(glCompressedTexImage3D),
-		FUNCTION(glCompressedTexSubImage2D),
-		FUNCTION(glCompressedTexSubImage3D),
-		FUNCTION(glCopyBufferSubData),
-		FUNCTION(glCopyTexImage2D),
-		FUNCTION(glCopyTexSubImage2D),
-		FUNCTION(glCopyTexSubImage3D),
-		FUNCTION(glCreateProgram),
-		FUNCTION(glCreateShader),
-		FUNCTION(glCullFace),
-		FUNCTION(glDeleteBuffers),
-		FUNCTION(glDeleteFencesNV),
-		FUNCTION(glDeleteFramebuffers),
-		FUNCTION(glDeleteFramebuffersOES),
-		FUNCTION(glDeleteProgram),
-		FUNCTION(glDeleteQueries),
-		FUNCTION(glDeleteQueriesEXT),
-		FUNCTION(glDeleteRenderbuffers),
-		FUNCTION(glDeleteRenderbuffersOES),
-		FUNCTION(glDeleteSamplers),
-		FUNCTION(glDeleteShader),
-		FUNCTION(glDeleteSync),
-		FUNCTION(glDeleteTextures),
-		FUNCTION(glDeleteTransformFeedbacks),
-		FUNCTION(glDeleteVertexArrays),
-		FUNCTION(glDeleteVertexArraysOES),
-		FUNCTION(glDepthFunc),
-		//FUNCTION(DepthFunc),
-		FUNCTION(glDepthMask),
-		FUNCTION(glDepthRangef),
-		FUNCTION(glDetachShader),
-		FUNCTION(glDisable),
-		FUNCTION(glDisableVertexAttribArray),
-		FUNCTION(glDrawArrays),
-		FUNCTION(glDrawArraysInstanced),
-		FUNCTION(glDrawBuffers),
-		FUNCTION(glDrawBuffersEXT),
-		FUNCTION(glDrawElements),
-		FUNCTION(glDrawElementsInstanced),
-		FUNCTION(glDrawRangeElements),
-		FUNCTION(glEGLImageTargetRenderbufferStorageOES),
-		FUNCTION(glEGLImageTargetTexture2DOES),
-		FUNCTION(glEnable),
-		FUNCTION(glEnableVertexAttribArray),
-		FUNCTION(glEndQuery),
-		FUNCTION(glEndQueryEXT),
-		FUNCTION(glEndTransformFeedback),
-		FUNCTION(glFenceSync),
-		FUNCTION(glFinish),
-		FUNCTION(glFinishFenceNV),
-		FUNCTION(glFlush),
-		FUNCTION(glFlushMappedBufferRange),
-		FUNCTION(glFramebufferRenderbuffer),
-		FUNCTION(glFramebufferRenderbufferOES),
-		FUNCTION(glFramebufferTexture2D),
-		FUNCTION(glFramebufferTexture2DOES),
-		FUNCTION(glFramebufferTextureLayer),
-		FUNCTION(glFrontFace),
-		FUNCTION(glGenBuffers),
-		FUNCTION(glGenFencesNV),
-		FUNCTION(glGenFramebuffers),
-		FUNCTION(glGenFramebuffersOES),
-		FUNCTION(glGenQueries),
-		FUNCTION(glGenQueriesEXT),
-		FUNCTION(glGenRenderbuffers),
-		FUNCTION(glGenRenderbuffersOES),
-		FUNCTION(glGenSamplers),
-		FUNCTION(glGenTextures),
-		FUNCTION(glGenTransformFeedbacks),
-		FUNCTION(glGenVertexArrays),
-		FUNCTION(glGenVertexArraysOES),
-		FUNCTION(glGenerateMipmap),
-		FUNCTION(glGenerateMipmapOES),
-		FUNCTION(glGetActiveAttrib),
-		FUNCTION(glGetActiveUniform),
-		FUNCTION(glGetActiveUniformBlockName),
-		FUNCTION(glGetActiveUniformBlockiv),
-		FUNCTION(glGetActiveUniformsiv),
-		FUNCTION(glGetAttachedShaders),
-		FUNCTION(glGetAttribLocation),
-		FUNCTION(glGetBooleanv),
-		FUNCTION(glGetBufferParameteri64v),
-		FUNCTION(glGetBufferParameteriv),
-		FUNCTION(glGetBufferPointerv),
-		FUNCTION(glGetError),
-		FUNCTION(glGetFenceivNV),
-		FUNCTION(glGetFloatv),
-		FUNCTION(glGetFragDataLocation),
-		FUNCTION(glGetFramebufferAttachmentParameteriv),
-		FUNCTION(glGetFramebufferAttachmentParameterivOES),
-		FUNCTION(glGetGraphicsResetStatusEXT),
-		FUNCTION(glGetInteger64i_v),
-		FUNCTION(glGetInteger64v),
-		FUNCTION(glGetIntegeri_v),
-		FUNCTION(glGetIntegerv),
-		FUNCTION(glGetInternalformativ),
-		FUNCTION(glGetProgramBinary),
-		FUNCTION(glGetProgramInfoLog),
-		FUNCTION(glGetProgramiv),
-		FUNCTION(glGetQueryObjectuiv),
-		FUNCTION(glGetQueryObjectuivEXT),
-		FUNCTION(glGetQueryiv),
-		FUNCTION(glGetQueryivEXT),
-		FUNCTION(glGetRenderbufferParameteriv),
-		FUNCTION(glGetRenderbufferParameterivOES),
-		FUNCTION(glGetSamplerParameterfv),
-		FUNCTION(glGetSamplerParameteriv),
-		FUNCTION(glGetShaderInfoLog),
-		FUNCTION(glGetShaderPrecisionFormat),
-		FUNCTION(glGetShaderSource),
-		FUNCTION(glGetShaderiv),
-		FUNCTION(glGetString),
-		FUNCTION(glGetStringi),
-		FUNCTION(glGetSynciv),
-		FUNCTION(glGetTexParameterfv),
-		FUNCTION(glGetTexParameteriv),
-		FUNCTION(glGetTransformFeedbackVarying),
-		FUNCTION(glGetUniformBlockIndex),
-		FUNCTION(glGetUniformIndices),
-		FUNCTION(glGetUniformLocation),
-		FUNCTION(glGetUniformfv),
-		FUNCTION(glGetUniformiv),
-		FUNCTION(glGetUniformuiv),
-		FUNCTION(glGetVertexAttribIiv),
-		FUNCTION(glGetVertexAttribIuiv),
-		FUNCTION(glGetVertexAttribPointerv),
-		FUNCTION(glGetVertexAttribfv),
-		FUNCTION(glGetVertexAttribiv),
-		FUNCTION(glGetnUniformfvEXT),
-		FUNCTION(glGetnUniformivEXT),
-		FUNCTION(glHint),
-		FUNCTION(glInvalidateFramebuffer),
-		FUNCTION(glInvalidateSubFramebuffer),
-		FUNCTION(glIsBuffer),
-		FUNCTION(glIsEnabled),
-		FUNCTION(glIsFenceNV),
-		FUNCTION(glIsFramebuffer),
-		FUNCTION(glIsFramebufferOES),
-		FUNCTION(glIsProgram),
-		FUNCTION(glIsQuery),
-		FUNCTION(glIsQueryEXT),
-		FUNCTION(glIsRenderbuffer),
-		FUNCTION(glIsRenderbufferOES),
-		FUNCTION(glIsSampler),
-		FUNCTION(glIsShader),
-		FUNCTION(glIsSync),
-		FUNCTION(glIsTexture),
-		FUNCTION(glIsTransformFeedback),
-		FUNCTION(glIsVertexArray),
-		FUNCTION(glIsVertexArrayOES),
-		FUNCTION(glLineWidth),
-		FUNCTION(glLinkProgram),
-		FUNCTION(glMapBufferRange),
-		FUNCTION(glPauseTransformFeedback),
-		FUNCTION(glPixelStorei),
-		FUNCTION(glPolygonOffset),
-		FUNCTION(glProgramBinary),
-		FUNCTION(glProgramParameteri),
-		FUNCTION(glReadBuffer),
-		FUNCTION(glReadPixels),
-		FUNCTION(glReadnPixelsEXT),
-		FUNCTION(glReleaseShaderCompiler),
-		FUNCTION(glRenderbufferStorage),
-		FUNCTION(glRenderbufferStorageMultisample),
-		FUNCTION(glRenderbufferStorageMultisampleANGLE),
-		FUNCTION(glRenderbufferStorageOES),
-		FUNCTION(glResumeTransformFeedback),
-		FUNCTION(glSampleCoverage),
-		FUNCTION(glSamplerParameterf),
-		FUNCTION(glSamplerParameterfv),
-		FUNCTION(glSamplerParameteri),
-		FUNCTION(glSamplerParameteriv),
-		FUNCTION(glScissor),
-		FUNCTION(glSetFenceNV),
-		FUNCTION(glShaderBinary),
-		FUNCTION(glShaderSource),
-		FUNCTION(glStencilFunc),
-		FUNCTION(glStencilFuncSeparate),
-		FUNCTION(glStencilMask),
-		FUNCTION(glStencilMaskSeparate),
-		FUNCTION(glStencilOp),
-		FUNCTION(glStencilOpSeparate),
-		FUNCTION(glTestFenceNV),
-		FUNCTION(glTexImage2D),
-		FUNCTION(glTexImage3D),
-		FUNCTION(glTexImage3DOES),
-		FUNCTION(glTexParameterf),
-		FUNCTION(glTexParameterfv),
-		FUNCTION(glTexParameteri),
-		FUNCTION(glTexParameteriv),
-		FUNCTION(glTexStorage2D),
-		FUNCTION(glTexStorage3D),
-		FUNCTION(glTexSubImage2D),
-		FUNCTION(glTexSubImage3D),
-		FUNCTION(glTransformFeedbackVaryings),
-		FUNCTION(glUniform1f),
-		FUNCTION(glUniform1fv),
-		FUNCTION(glUniform1i),
-		FUNCTION(glUniform1iv),
-		FUNCTION(glUniform1ui),
-		FUNCTION(glUniform1uiv),
-		FUNCTION(glUniform2f),
-		FUNCTION(glUniform2fv),
-		FUNCTION(glUniform2i),
-		FUNCTION(glUniform2iv),
-		FUNCTION(glUniform2ui),
-		FUNCTION(glUniform2uiv),
-		FUNCTION(glUniform3f),
-		FUNCTION(glUniform3fv),
-		FUNCTION(glUniform3i),
-		FUNCTION(glUniform3iv),
-		FUNCTION(glUniform3ui),
-		FUNCTION(glUniform3uiv),
-		FUNCTION(glUniform4f),
-		FUNCTION(glUniform4fv),
-		FUNCTION(glUniform4i),
-		FUNCTION(glUniform4iv),
-		FUNCTION(glUniform4ui),
-		FUNCTION(glUniform4uiv),
-		FUNCTION(glUniformBlockBinding),
-		FUNCTION(glUniformMatrix2fv),
-		FUNCTION(glUniformMatrix2x3fv),
-		FUNCTION(glUniformMatrix2x4fv),
-		FUNCTION(glUniformMatrix3fv),
-		FUNCTION(glUniformMatrix3x2fv),
-		FUNCTION(glUniformMatrix3x4fv),
-		FUNCTION(glUniformMatrix4fv),
-		FUNCTION(glUniformMatrix4x2fv),
-		FUNCTION(glUniformMatrix4x3fv),
-		FUNCTION(glUnmapBuffer),
-		FUNCTION(glUseProgram),
-		FUNCTION(glValidateProgram),
-		FUNCTION(glVertexAttrib1f),
-		FUNCTION(glVertexAttrib1fv),
-		FUNCTION(glVertexAttrib2f),
-		FUNCTION(glVertexAttrib2fv),
-		FUNCTION(glVertexAttrib3f),
-		FUNCTION(glVertexAttrib3fv),
-		FUNCTION(glVertexAttrib4f),
-		FUNCTION(glVertexAttrib4fv),
-		FUNCTION(glVertexAttribDivisor),
-		FUNCTION(glVertexAttribDivisorANGLE),
-		FUNCTION(glVertexAttribDivisorEXT),
-		FUNCTION(glVertexAttribI4i),
-		FUNCTION(glVertexAttribI4iv),
-		FUNCTION(glVertexAttribI4ui),
-		FUNCTION(glVertexAttribI4uiv),
-		FUNCTION(glVertexAttribIPointer),
-		FUNCTION(glVertexAttribPointer),
-		FUNCTION(glViewport),
-		FUNCTION(glWaitSync),
+		FUNCTION(ActiveTexture),
+		FUNCTION(AttachShader),
+		FUNCTION(BeginQuery),
+		FUNCTION(BeginQueryEXT),
+		FUNCTION(BeginTransformFeedback),
+		FUNCTION(BindAttribLocation),
+		FUNCTION(BindBuffer),
+		FUNCTION(BindBufferBase),
+		FUNCTION(BindBufferRange),
+		FUNCTION(BindFramebuffer),
+		FUNCTION(BindFramebufferOES),
+		FUNCTION(BindRenderbuffer),
+		FUNCTION(BindRenderbufferOES),
+		FUNCTION(BindSampler),
+		FUNCTION(BindTexture),
+		FUNCTION(BindTransformFeedback),
+		FUNCTION(BindVertexArray),
+		FUNCTION(BindVertexArrayOES),
+		FUNCTION(BlendColor),
+		FUNCTION(BlendEquation),
+		FUNCTION(BlendEquationSeparate),
+		FUNCTION(BlendFunc),
+		FUNCTION(BlendFuncSeparate),
+		FUNCTION(BlitFramebuffer),
+		FUNCTION(BlitFramebufferANGLE),
+		FUNCTION(BufferData),
+		FUNCTION(BufferSubData),
+		FUNCTION(CheckFramebufferStatus),
+		FUNCTION(CheckFramebufferStatusOES),
+		FUNCTION(Clear),
+		FUNCTION(ClearBufferfi),
+		FUNCTION(ClearBufferfv),
+		FUNCTION(ClearBufferiv),
+		FUNCTION(ClearBufferuiv),
+		FUNCTION(ClearColor),
+		FUNCTION(ClearDepthf),
+		FUNCTION(ClearStencil),
+		FUNCTION(ClientWaitSync),
+		FUNCTION(ColorMask),
+		FUNCTION(CompileShader),
+		FUNCTION(CompressedTexImage2D),
+		FUNCTION(CompressedTexImage3D),
+		FUNCTION(CompressedTexSubImage2D),
+		FUNCTION(CompressedTexSubImage3D),
+		FUNCTION(CopyBufferSubData),
+		FUNCTION(CopyTexImage2D),
+		FUNCTION(CopyTexSubImage2D),
+		FUNCTION(CopyTexSubImage3D),
+		FUNCTION(CreateProgram),
+		FUNCTION(CreateShader),
+		FUNCTION(CullFace),
+		FUNCTION(DeleteBuffers),
+		FUNCTION(DeleteFencesNV),
+		FUNCTION(DeleteFramebuffers),
+		FUNCTION(DeleteFramebuffersOES),
+		FUNCTION(DeleteProgram),
+		FUNCTION(DeleteQueries),
+		FUNCTION(DeleteQueriesEXT),
+		FUNCTION(DeleteRenderbuffers),
+		FUNCTION(DeleteRenderbuffersOES),
+		FUNCTION(DeleteSamplers),
+		FUNCTION(DeleteShader),
+		FUNCTION(DeleteSync),
+		FUNCTION(DeleteTextures),
+		FUNCTION(DeleteTransformFeedbacks),
+		FUNCTION(DeleteVertexArrays),
+		FUNCTION(DeleteVertexArraysOES),
+		FUNCTION(DepthFunc),
+		FUNCTION(DepthMask),
+		FUNCTION(DepthRangef),
+		FUNCTION(DetachShader),
+		FUNCTION(Disable),
+		FUNCTION(DisableVertexAttribArray),
+		FUNCTION(DrawArrays),
+		FUNCTION(DrawArraysInstanced),
+		FUNCTION(DrawBuffers),
+		FUNCTION(DrawBuffersEXT),
+		FUNCTION(DrawElements),
+		FUNCTION(DrawElementsInstanced),
+		FUNCTION(DrawRangeElements),
+		FUNCTION(EGLImageTargetRenderbufferStorageOES),
+		FUNCTION(EGLImageTargetTexture2DOES),
+		FUNCTION(Enable),
+		FUNCTION(EnableVertexAttribArray),
+		FUNCTION(EndQuery),
+		FUNCTION(EndQueryEXT),
+		FUNCTION(EndTransformFeedback),
+		FUNCTION(FenceSync),
+		FUNCTION(Finish),
+		FUNCTION(FinishFenceNV),
+		FUNCTION(Flush),
+		FUNCTION(FlushMappedBufferRange),
+		FUNCTION(FramebufferRenderbuffer),
+		FUNCTION(FramebufferRenderbufferOES),
+		FUNCTION(FramebufferTexture2D),
+		FUNCTION(FramebufferTexture2DOES),
+		FUNCTION(FramebufferTextureLayer),
+		FUNCTION(FrontFace),
+		FUNCTION(GenBuffers),
+		FUNCTION(GenFencesNV),
+		FUNCTION(GenFramebuffers),
+		FUNCTION(GenFramebuffersOES),
+		FUNCTION(GenQueries),
+		FUNCTION(GenQueriesEXT),
+		FUNCTION(GenRenderbuffers),
+		FUNCTION(GenRenderbuffersOES),
+		FUNCTION(GenSamplers),
+		FUNCTION(GenTextures),
+		FUNCTION(GenTransformFeedbacks),
+		FUNCTION(GenVertexArrays),
+		FUNCTION(GenVertexArraysOES),
+		FUNCTION(GenerateMipmap),
+		FUNCTION(GenerateMipmapOES),
+		FUNCTION(GetActiveAttrib),
+		FUNCTION(GetActiveUniform),
+		FUNCTION(GetActiveUniformBlockName),
+		FUNCTION(GetActiveUniformBlockiv),
+		FUNCTION(GetActiveUniformsiv),
+		FUNCTION(GetAttachedShaders),
+		FUNCTION(GetAttribLocation),
+		FUNCTION(GetBooleanv),
+		FUNCTION(GetBufferParameteri64v),
+		FUNCTION(GetBufferParameteriv),
+		FUNCTION(GetBufferPointerv),
+		FUNCTION(GetError),
+		FUNCTION(GetFenceivNV),
+		FUNCTION(GetFloatv),
+		FUNCTION(GetFragDataLocation),
+		FUNCTION(GetFramebufferAttachmentParameteriv),
+		FUNCTION(GetFramebufferAttachmentParameterivOES),
+		FUNCTION(GetGraphicsResetStatusEXT),
+		FUNCTION(GetInteger64i_v),
+		FUNCTION(GetInteger64v),
+		FUNCTION(GetIntegeri_v),
+		FUNCTION(GetIntegerv),
+		FUNCTION(GetInternalformativ),
+		FUNCTION(GetProgramBinary),
+		FUNCTION(GetProgramInfoLog),
+		FUNCTION(GetProgramiv),
+		FUNCTION(GetQueryObjectuiv),
+		FUNCTION(GetQueryObjectuivEXT),
+		FUNCTION(GetQueryiv),
+		FUNCTION(GetQueryivEXT),
+		FUNCTION(GetRenderbufferParameteriv),
+		FUNCTION(GetRenderbufferParameterivOES),
+		FUNCTION(GetSamplerParameterfv),
+		FUNCTION(GetSamplerParameteriv),
+		FUNCTION(GetShaderInfoLog),
+		FUNCTION(GetShaderPrecisionFormat),
+		FUNCTION(GetShaderSource),
+		FUNCTION(GetShaderiv),
+		FUNCTION(GetString),
+		FUNCTION(GetStringi),
+		FUNCTION(GetSynciv),
+		FUNCTION(GetTexParameterfv),
+		FUNCTION(GetTexParameteriv),
+		FUNCTION(GetTransformFeedbackVarying),
+		FUNCTION(GetUniformBlockIndex),
+		FUNCTION(GetUniformIndices),
+		FUNCTION(GetUniformLocation),
+		FUNCTION(GetUniformfv),
+		FUNCTION(GetUniformiv),
+		FUNCTION(GetUniformuiv),
+		FUNCTION(GetVertexAttribIiv),
+		FUNCTION(GetVertexAttribIuiv),
+		FUNCTION(GetVertexAttribPointerv),
+		FUNCTION(GetVertexAttribfv),
+		FUNCTION(GetVertexAttribiv),
+		FUNCTION(GetnUniformfvEXT),
+		FUNCTION(GetnUniformivEXT),
+		FUNCTION(Hint),
+		FUNCTION(InvalidateFramebuffer),
+		FUNCTION(InvalidateSubFramebuffer),
+		FUNCTION(IsBuffer),
+		FUNCTION(IsEnabled),
+		FUNCTION(IsFenceNV),
+		FUNCTION(IsFramebuffer),
+		FUNCTION(IsFramebufferOES),
+		FUNCTION(IsProgram),
+		FUNCTION(IsQuery),
+		FUNCTION(IsQueryEXT),
+		FUNCTION(IsRenderbuffer),
+		FUNCTION(IsRenderbufferOES),
+		FUNCTION(IsSampler),
+		FUNCTION(IsShader),
+		FUNCTION(IsSync),
+		FUNCTION(IsTexture),
+		FUNCTION(IsTransformFeedback),
+		FUNCTION(IsVertexArray),
+		FUNCTION(IsVertexArrayOES),
+		FUNCTION(LineWidth),
+		FUNCTION(LinkProgram),
+		FUNCTION(MapBufferRange),
+		FUNCTION(PauseTransformFeedback),
+		FUNCTION(PixelStorei),
+		FUNCTION(PolygonOffset),
+		FUNCTION(ProgramBinary),
+		FUNCTION(ProgramParameteri),
+		FUNCTION(ReadBuffer),
+		FUNCTION(ReadPixels),
+		FUNCTION(ReadnPixelsEXT),
+		FUNCTION(ReleaseShaderCompiler),
+		FUNCTION(RenderbufferStorage),
+		FUNCTION(RenderbufferStorageMultisample),
+		FUNCTION(RenderbufferStorageMultisampleANGLE),
+		FUNCTION(RenderbufferStorageOES),
+		FUNCTION(ResumeTransformFeedback),
+		FUNCTION(SampleCoverage),
+		FUNCTION(SamplerParameterf),
+		FUNCTION(SamplerParameterfv),
+		FUNCTION(SamplerParameteri),
+		FUNCTION(SamplerParameteriv),
+		FUNCTION(Scissor),
+		FUNCTION(SetFenceNV),
+		FUNCTION(ShaderBinary),
+		FUNCTION(ShaderSource),
+		FUNCTION(StencilFunc),
+		FUNCTION(StencilFuncSeparate),
+		FUNCTION(StencilMask),
+		FUNCTION(StencilMaskSeparate),
+		FUNCTION(StencilOp),
+		FUNCTION(StencilOpSeparate),
+		FUNCTION(TestFenceNV),
+		FUNCTION(TexImage2D),
+		FUNCTION(TexImage3D),
+		FUNCTION(TexImage3DOES),
+		FUNCTION(TexParameterf),
+		FUNCTION(TexParameterfv),
+		FUNCTION(TexParameteri),
+		FUNCTION(TexParameteriv),
+		FUNCTION(TexStorage2D),
+		FUNCTION(TexStorage3D),
+		FUNCTION(TexSubImage2D),
+		FUNCTION(TexSubImage3D),
+		FUNCTION(TransformFeedbackVaryings),
+		FUNCTION(Uniform1f),
+		FUNCTION(Uniform1fv),
+		FUNCTION(Uniform1i),
+		FUNCTION(Uniform1iv),
+		FUNCTION(Uniform1ui),
+		FUNCTION(Uniform1uiv),
+		FUNCTION(Uniform2f),
+		FUNCTION(Uniform2fv),
+		FUNCTION(Uniform2i),
+		FUNCTION(Uniform2iv),
+		FUNCTION(Uniform2ui),
+		FUNCTION(Uniform2uiv),
+		FUNCTION(Uniform3f),
+		FUNCTION(Uniform3fv),
+		FUNCTION(Uniform3i),
+		FUNCTION(Uniform3iv),
+		FUNCTION(Uniform3ui),
+		FUNCTION(Uniform3uiv),
+		FUNCTION(Uniform4f),
+		FUNCTION(Uniform4fv),
+		FUNCTION(Uniform4i),
+		FUNCTION(Uniform4iv),
+		FUNCTION(Uniform4ui),
+		FUNCTION(Uniform4uiv),
+		FUNCTION(UniformBlockBinding),
+		FUNCTION(UniformMatrix2fv),
+		FUNCTION(UniformMatrix2x3fv),
+		FUNCTION(UniformMatrix2x4fv),
+		FUNCTION(UniformMatrix3fv),
+		FUNCTION(UniformMatrix3x2fv),
+		FUNCTION(UniformMatrix3x4fv),
+		FUNCTION(UniformMatrix4fv),
+		FUNCTION(UniformMatrix4x2fv),
+		FUNCTION(UniformMatrix4x3fv),
+		FUNCTION(UnmapBuffer),
+		FUNCTION(UseProgram),
+		FUNCTION(ValidateProgram),
+		FUNCTION(VertexAttrib1f),
+		FUNCTION(VertexAttrib1fv),
+		FUNCTION(VertexAttrib2f),
+		FUNCTION(VertexAttrib2fv),
+		FUNCTION(VertexAttrib3f),
+		FUNCTION(VertexAttrib3fv),
+		FUNCTION(VertexAttrib4f),
+		FUNCTION(VertexAttrib4fv),
+		FUNCTION(VertexAttribDivisor),
+		FUNCTION(VertexAttribDivisorANGLE),
+		FUNCTION(VertexAttribDivisorEXT),
+		FUNCTION(VertexAttribI4i),
+		FUNCTION(VertexAttribI4iv),
+		FUNCTION(VertexAttribI4ui),
+		FUNCTION(VertexAttribI4uiv),
+		FUNCTION(VertexAttribIPointer),
+		FUNCTION(VertexAttribPointer),
+		FUNCTION(Viewport),
+		FUNCTION(WaitSync),
 
 		#undef FUNCTION
 	};
diff --git a/src/OpenGL/libGLESv2/libGLESv2.def b/src/OpenGL/libGLESv2/libGLESv2.def
index 8d07c32..485f6c3 100644
--- a/src/OpenGL/libGLESv2/libGLESv2.def
+++ b/src/OpenGL/libGLESv2/libGLESv2.def
@@ -295,5 +295,3 @@
     glGetInternalformativ           @308
 
     libGLESv2_swiftshader
-
-	Register
diff --git a/src/OpenGL/libGLESv2/libGLESv2.lds b/src/OpenGL/libGLESv2/libGLESv2.lds
index 86da3a1..9544387 100644
--- a/src/OpenGL/libGLESv2/libGLESv2.lds
+++ b/src/OpenGL/libGLESv2/libGLESv2.lds
@@ -302,8 +302,6 @@
 	_ZTS*;
 	_ZTI*;
 
-	Register;
-
 local:
 	*;
 };
diff --git a/src/OpenGL/libGLESv2/libGLESv2.vcxproj b/src/OpenGL/libGLESv2/libGLESv2.vcxproj
index 7bb3c72..5c0e73e 100644
--- a/src/OpenGL/libGLESv2/libGLESv2.vcxproj
+++ b/src/OpenGL/libGLESv2/libGLESv2.vcxproj
@@ -386,6 +386,7 @@
     <ClInclude Include="Buffer.h" />

     <ClInclude Include="Context.h" />

     <ClInclude Include="Device.hpp" />

+    <ClInclude Include="entry_points.h" />

     <ClInclude Include="Fence.h" />

     <ClInclude Include="Framebuffer.h" />

     <ClInclude Include="IndexDataManager.h" />

diff --git a/src/OpenGL/libGLESv2/libGLESv2.vcxproj.filters b/src/OpenGL/libGLESv2/libGLESv2.vcxproj.filters
index 615363b..004a944 100644
--- a/src/OpenGL/libGLESv2/libGLESv2.vcxproj.filters
+++ b/src/OpenGL/libGLESv2/libGLESv2.vcxproj.filters
@@ -169,6 +169,9 @@
     <ClInclude Include="..\common\Surface.hpp">

       <Filter>Header Files</Filter>

     </ClInclude>

+    <ClInclude Include="entry_points.h">

+      <Filter>Header Files</Filter>

+    </ClInclude>

   </ItemGroup>

   <ItemGroup>

     <ResourceCompile Include="libGLESv2.rc" />

diff --git a/src/OpenGL/libGLESv2/libGLESv3.cpp b/src/OpenGL/libGLESv2/libGLESv3.cpp
index ce2a3c8..2669739 100644
--- a/src/OpenGL/libGLESv2/libGLESv3.cpp
+++ b/src/OpenGL/libGLESv2/libGLESv3.cpp
@@ -207,10 +207,10 @@
 	}
 }
 
-extern "C"
+namespace gl
 {
 
-GL_APICALL void GL_APIENTRY glReadBuffer(GLenum src)
+void ReadBuffer(GLenum src)
 {
 	TRACE("(GLenum src = 0x%X)", src);
 
@@ -283,7 +283,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices)
+void DrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices)
 {
 	TRACE("(GLenum mode = 0x%X, GLuint start = %d, GLuint end = %d, "
 		  "GLsizei count = %d, GLenum type = 0x%x, const void* indices = %p)",
@@ -332,7 +332,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glTexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *data)
+void TexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *data)
 {
 	TRACE("(GLenum target = 0x%X, GLint level = %d, GLenum internalformat = 0x%X, "
 	      "GLsizei width = %d, GLsizei height = %d, GLsizei depth = %d, GLint border = %d, "
@@ -392,7 +392,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data)
+void TexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data)
 {
 	TRACE("(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "
 		"GLint zoffset = %d, GLsizei width = %d, GLsizei height = %d, GLsizei depth = %d, "
@@ -440,7 +440,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glCopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+void CopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)
 {
 	TRACE("(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "
 		"GLint zoffset = %d, GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d)",
@@ -503,7 +503,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glCompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data)
+void CompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data)
 {
 	TRACE("(GLenum target = 0x%X, GLint level = %d, GLenum internalformat = 0x%X, GLsizei width = %d, "
 		"GLsizei height = %d, GLsizei depth = %d, GLint border = %d, GLsizei imageSize = %d, const GLvoid* data = %p)",
@@ -560,7 +560,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glCompressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data)
+void CompressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data)
 {
 	TRACE("(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "
 	      "GLint zoffset = %d, GLsizei width = %d, GLsizei height = %d, GLsizei depth = %d, "
@@ -657,7 +657,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glGenQueries(GLsizei n, GLuint *ids)
+void GenQueries(GLsizei n, GLuint *ids)
 {
 	TRACE("(GLsizei n = %d, GLuint* ids = %p)", n, ids);
 
@@ -677,7 +677,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glDeleteQueries(GLsizei n, const GLuint *ids)
+void DeleteQueries(GLsizei n, const GLuint *ids)
 {
 	TRACE("(GLsizei n = %d, GLuint* ids = %p)", n, ids);
 
@@ -697,7 +697,7 @@
 	}
 }
 
-GL_APICALL GLboolean GL_APIENTRY glIsQuery(GLuint id)
+GLboolean IsQuery(GLuint id)
 {
 	TRACE("(GLuint id = %d)", id);
 
@@ -721,7 +721,7 @@
 	return GL_FALSE;
 }
 
-GL_APICALL void GL_APIENTRY glBeginQuery(GLenum target, GLuint id)
+void BeginQuery(GLenum target, GLuint id)
 {
 	TRACE("(GLenum target = 0x%X, GLuint id = %d)", target, id);
 
@@ -743,7 +743,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glEndQuery(GLenum target)
+void EndQuery(GLenum target)
 {
 	TRACE("(GLenum target = 0x%X)", target);
 
@@ -760,7 +760,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glGetQueryiv(GLenum target, GLenum pname, GLint *params)
+void GetQueryiv(GLenum target, GLenum pname, GLint *params)
 {
 	TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint *params = %p)",
 		  target, pname, params);
@@ -778,7 +778,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glGetQueryObjectuiv(GLuint id, GLenum pname, GLuint *params)
+void GetQueryObjectuiv(GLuint id, GLenum pname, GLuint *params)
 {
 	TRACE("(GLuint id = %d, GLenum pname = 0x%X, GLint *params = %p)",
 	      id, pname, params);
@@ -822,7 +822,7 @@
 	}
 }
 
-GL_APICALL GLboolean GL_APIENTRY glUnmapBuffer(GLenum target)
+GLboolean UnmapBuffer(GLenum target)
 {
 	TRACE("(GLenum target = 0x%X)", target);
 
@@ -854,7 +854,7 @@
 	return GL_TRUE;
 }
 
-GL_APICALL void GL_APIENTRY glGetBufferPointerv(GLenum target, GLenum pname, void **params)
+void GetBufferPointerv(GLenum target, GLenum pname, void **params)
 {
 	TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint *params = %p)",
 	      target, pname, params);
@@ -884,7 +884,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glDrawBuffers(GLsizei n, const GLenum *bufs)
+void DrawBuffers(GLsizei n, const GLenum *bufs)
 {
 	TRACE("(GLsizei n = %d, const GLenum *bufs = %p)", n, bufs);
 
@@ -976,7 +976,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glUniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+void UniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
 {
 	TRACE("(GLint location = %d, GLsizei count = %d, GLboolean transpose = %d, const GLfloat *value = %p)", location, count, transpose, value);
 
@@ -1008,7 +1008,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glUniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+void UniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
 {
 	TRACE("(GLint location = %d, GLsizei count = %d, GLboolean transpose = %d, const GLfloat *value = %p)", location, count, transpose, value);
 
@@ -1040,7 +1040,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glUniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+void UniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
 {
 	TRACE("(GLint location = %d, GLsizei count = %d, GLboolean transpose = %d, const GLfloat *value = %p)", location, count, transpose, value);
 
@@ -1072,7 +1072,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glUniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+void UniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
 {
 	TRACE("(GLint location = %d, GLsizei count = %d, GLboolean transpose = %d, const GLfloat *value = %p)", location, count, transpose, value);
 
@@ -1104,7 +1104,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glUniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+void UniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
 {
 	TRACE("(GLint location = %d, GLsizei count = %d, GLboolean transpose = %d, const GLfloat *value = %p)", location, count, transpose, value);
 
@@ -1136,7 +1136,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glUniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+void UniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
 {
 	TRACE("(GLint location = %d, GLsizei count = %d, GLboolean transpose = %d, const GLfloat *value = %p)", location, count, transpose, value);
 
@@ -1168,7 +1168,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glBlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)
+void BlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)
 {
 	TRACE("(GLint srcX0 = %d, GLint srcY0 = %d, GLint srcX1 = %d, GLint srcY1 = %d, "
 	      "GLint dstX0 = %d, GLint dstY0 = %d, GLint dstX1 = %d, GLint dstY1 = %d, "
@@ -1208,7 +1208,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glFramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer)
+void FramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer)
 {
 	TRACE("(GLenum target = 0x%X, GLenum attachment = 0x%X, GLuint texture = %d, GLint level = %d, GLint layer = %d)",
 	      target, attachment, texture, level, layer);
@@ -1344,7 +1344,7 @@
 	}
 }
 
-GL_APICALL void *GL_APIENTRY glMapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access)
+void *MapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access)
 {
 	TRACE("(GLenum target = 0x%X,  GLintptr offset = %d, GLsizeiptr length = %d, GLbitfield access = %X)",
 	      target, offset, length, access);
@@ -1414,7 +1414,7 @@
 	return nullptr;
 }
 
-GL_APICALL void GL_APIENTRY glFlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length)
+void FlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length)
 {
 	TRACE("(GLenum target = 0x%X,  GLintptr offset = %d, GLsizeiptr length = %d)",
 	      target, offset, length);
@@ -1462,7 +1462,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glBindVertexArray(GLuint array)
+void BindVertexArray(GLuint array)
 {
 	TRACE("(GLuint array = %d)", array);
 
@@ -1479,12 +1479,12 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glBindVertexArrayOES(GLuint array)
+void BindVertexArrayOES(GLuint array)
 {
-	glBindVertexArray(array);
+	BindVertexArray(array);
 }
 
-GL_APICALL void GL_APIENTRY glDeleteVertexArrays(GLsizei n, const GLuint *arrays)
+void DeleteVertexArrays(GLsizei n, const GLuint *arrays)
 {
 	TRACE("(GLsizei n = %d, const GLuint *arrays = %p)", n, arrays);
 
@@ -1507,12 +1507,12 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glDeleteVertexArraysOES(GLsizei n, const GLuint *arrays)
+void DeleteVertexArraysOES(GLsizei n, const GLuint *arrays)
 {
-	glDeleteVertexArrays(n, arrays);
+	DeleteVertexArrays(n, arrays);
 }
 
-GL_APICALL void GL_APIENTRY glGenVertexArrays(GLsizei n, GLuint *arrays)
+void GenVertexArrays(GLsizei n, GLuint *arrays)
 {
 	TRACE("(GLsizei n = %d, const GLuint *arrays = %p)", n, arrays);
 
@@ -1532,12 +1532,12 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glGenVertexArraysOES(GLsizei n, GLuint *arrays)
+void GenVertexArraysOES(GLsizei n, GLuint *arrays)
 {
-	glGenVertexArrays(n, arrays);
+	GenVertexArrays(n, arrays);
 }
 
-GL_APICALL GLboolean GL_APIENTRY glIsVertexArray(GLuint array)
+GLboolean IsVertexArray(GLuint array)
 {
 	TRACE("(GLuint array = %d)", array);
 
@@ -1561,12 +1561,12 @@
 	return GL_FALSE;
 }
 
-GL_APICALL GLboolean GL_APIENTRY glIsVertexArrayOES(GLuint array)
+GLboolean IsVertexArrayOES(GLuint array)
 {
-	return glIsVertexArray(array);
+	return IsVertexArray(array);
 }
 
-GL_APICALL void GL_APIENTRY glGetIntegeri_v(GLenum target, GLuint index, GLint *data)
+void GetIntegeri_v(GLenum target, GLuint index, GLint *data)
 {
 	TRACE("(GLenum target = 0x%X, GLuint index = %d, GLint* data = %p)",
 	      target, index, data);
@@ -1626,7 +1626,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glBeginTransformFeedback(GLenum primitiveMode)
+void BeginTransformFeedback(GLenum primitiveMode)
 {
 	TRACE("(GLenum primitiveMode = 0x%X)", primitiveMode);
 
@@ -1661,7 +1661,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glEndTransformFeedback(void)
+void EndTransformFeedback(void)
 {
 	TRACE("()");
 
@@ -1686,7 +1686,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glBindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size)
+void BindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size)
 {
 	TRACE("(GLenum target = 0x%X, GLuint index = %d, GLuint buffer = %d, GLintptr offset = %d, GLsizeiptr size = %d)",
 	      target, index, buffer, offset, size);
@@ -1732,7 +1732,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glBindBufferBase(GLenum target, GLuint index, GLuint buffer)
+void BindBufferBase(GLenum target, GLuint index, GLuint buffer)
 {
 	TRACE("(GLenum target = 0x%X, GLuint index = %d, GLuint buffer = %d)",
 	      target, index, buffer);
@@ -1765,7 +1765,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glTransformFeedbackVaryings(GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode)
+void TransformFeedbackVaryings(GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode)
 {
 	TRACE("(GLuint program = %d, GLsizei count = %d, const GLchar *const*varyings = %p, GLenum bufferMode = 0x%X)",
 	      program, count, varyings, bufferMode);
@@ -1798,7 +1798,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glGetTransformFeedbackVarying(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name)
+void GetTransformFeedbackVarying(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name)
 {
 	TRACE("(GLuint program = %d, GLuint index = %d, GLsizei bufSize = %d, GLsizei *length = %p, GLsizei *size = %p, GLenum *type = %p, GLchar *name = %p)",
 	      program, index, bufSize, length, size, type, name);
@@ -1828,7 +1828,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glVertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer)
+void VertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer)
 {
 	TRACE("(GLuint program = %d, GLuint index = %d, GLsizei bufSize = %d, GLsizei *length = %p, GLsizei *size = %p, GLenum *type = %p, GLchar *name = %p)",
 	      index, size, type, stride, pointer);
@@ -1872,7 +1872,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glGetVertexAttribIiv(GLuint index, GLenum pname, GLint *params)
+void GetVertexAttribIiv(GLuint index, GLenum pname, GLint *params)
 {
 	TRACE("(GLuint index = %d, GLenum pname = 0x%X, GLint *params = %p)",
 	      index, pname, params);
@@ -1928,7 +1928,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glGetVertexAttribIuiv(GLuint index, GLenum pname, GLuint *params)
+void GetVertexAttribIuiv(GLuint index, GLenum pname, GLuint *params)
 {
 	TRACE("(GLuint index = %d, GLenum pname = 0x%X, GLuint *params = %p)",
 		index, pname, params);
@@ -1984,7 +1984,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glVertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w)
+void VertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w)
 {
 	TRACE("(GLuint index = %d, GLint x = %d, GLint y = %d, GLint z = %d, GLint w = %d)",
 	      index, x, y, z, w);
@@ -2003,7 +2003,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glVertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w)
+void VertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w)
 {
 	TRACE("(GLuint index = %d, GLint x = %d, GLint y = %d, GLint z = %d, GLint w = %d)",
 	      index, x, y, z, w);
@@ -2022,7 +2022,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glVertexAttribI4iv(GLuint index, const GLint *v)
+void VertexAttribI4iv(GLuint index, const GLint *v)
 {
 	TRACE("(GLuint index = %d, GLint *v = %p)", index, v);
 
@@ -2039,7 +2039,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glVertexAttribI4uiv(GLuint index, const GLuint *v)
+void VertexAttribI4uiv(GLuint index, const GLuint *v)
 {
 	TRACE("(GLuint index = %d, GLint *v = %p)", index, v);
 
@@ -2056,7 +2056,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glGetUniformuiv(GLuint program, GLint location, GLuint *params)
+void GetUniformuiv(GLuint program, GLint location, GLuint *params)
 {
 	TRACE("(GLuint program = %d, GLint location = %d, GLuint *params = %p)",
 	      program, location, params);
@@ -2091,7 +2091,7 @@
 	}
 }
 
-GL_APICALL GLint GL_APIENTRY glGetFragDataLocation(GLuint program, const GLchar *name)
+GLint GetFragDataLocation(GLuint program, const GLchar *name)
 {
 	TRACE("(GLuint program = %d, const GLchar *name = %p)", program, name);
 
@@ -2124,33 +2124,7 @@
 	return -1;
 }
 
-GL_APICALL void GL_APIENTRY glUniform1ui(GLint location, GLuint v0)
-{
-	glUniform1uiv(location, 1, &v0);
-}
-
-GL_APICALL void GL_APIENTRY glUniform2ui(GLint location, GLuint v0, GLuint v1)
-{
-	GLuint xy[2] = { v0, v1 };
-
-	glUniform2uiv(location, 1, (GLuint*)&xy);
-}
-
-GL_APICALL void GL_APIENTRY glUniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2)
-{
-	GLuint xyz[3] = { v0, v1, v2 };
-
-	glUniform3uiv(location, 1, (GLuint*)&xyz);
-}
-
-GL_APICALL void GL_APIENTRY glUniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
-{
-	GLuint xyzw[4] = { v0, v1, v2, v3 };
-
-	glUniform4uiv(location, 1, (GLuint*)&xyzw);
-}
-
-GL_APICALL void GL_APIENTRY glUniform1uiv(GLint location, GLsizei count, const GLuint *value)
+void Uniform1uiv(GLint location, GLsizei count, const GLuint *value)
 {
 	TRACE("(GLint location = %d, GLsizei count = %d, const GLuint *value = %p)",
 	      location, count, value);
@@ -2183,7 +2157,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glUniform2uiv(GLint location, GLsizei count, const GLuint *value)
+void Uniform2uiv(GLint location, GLsizei count, const GLuint *value)
 {
 	TRACE("(GLint location = %d, GLsizei count = %d, const GLuint *value = %p)",
 	      location, count, value);
@@ -2216,7 +2190,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glUniform3uiv(GLint location, GLsizei count, const GLuint *value)
+void Uniform3uiv(GLint location, GLsizei count, const GLuint *value)
 {
 	TRACE("(GLint location = %d, GLsizei count = %d, const GLuint *value = %p)",
 	      location, count, value);
@@ -2249,7 +2223,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glUniform4uiv(GLint location, GLsizei count, const GLuint *value)
+void Uniform4uiv(GLint location, GLsizei count, const GLuint *value)
 {
 	TRACE("(GLint location = %d, GLsizei count = %d, const GLuint *value = %p)",
 	      location, count, value);
@@ -2282,7 +2256,33 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint *value)
+void Uniform1ui(GLint location, GLuint v0)
+{
+	Uniform1uiv(location, 1, &v0);
+}
+
+void Uniform2ui(GLint location, GLuint v0, GLuint v1)
+{
+	GLuint xy[2] = { v0, v1 };
+
+	Uniform2uiv(location, 1, (GLuint*)&xy);
+}
+
+void Uniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2)
+{
+	GLuint xyz[3] = { v0, v1, v2 };
+
+	Uniform3uiv(location, 1, (GLuint*)&xyz);
+}
+
+void Uniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
+{
+	GLuint xyzw[4] = { v0, v1, v2, v3 };
+
+	Uniform4uiv(location, 1, (GLuint*)&xyzw);
+}
+
+void ClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint *value)
 {
 	TRACE("(GLenum buffer = 0x%X, GLint drawbuffer = %d, const GLint *value = %p)",
 	      buffer, drawbuffer, value);
@@ -2319,7 +2319,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint *value)
+void ClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint *value)
 {
 	TRACE("(GLenum buffer = 0x%X, GLint drawbuffer = %d, const GLuint *value = %p)",
 	      buffer, drawbuffer, value);
@@ -2346,7 +2346,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat *value)
+void ClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat *value)
 {
 	TRACE("(GLenum buffer = 0x%X, GLint drawbuffer = %d, const GLfloat *value = %p)",
 	      buffer, drawbuffer, value);
@@ -2383,7 +2383,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil)
+void ClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil)
 {
 	TRACE("(GLenum buffer = 0x%X, GLint drawbuffer = %d, GLfloat depth = %f, GLint stencil = %d)",
 	      buffer, drawbuffer, depth, stencil);
@@ -2411,7 +2411,7 @@
 	}
 }
 
-GL_APICALL const GLubyte *GL_APIENTRY glGetStringi(GLenum name, GLuint index)
+const GLubyte *GetStringi(GLenum name, GLuint index)
 {
 	TRACE("(GLenum name = 0x%X, GLuint index = %d)", name, index);
 
@@ -2438,7 +2438,7 @@
 	return (GLubyte*)nullptr;
 }
 
-GL_APICALL void GL_APIENTRY glCopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size)
+void CopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size)
 {
 	TRACE("(GLenum readTarget = 0x%X, GLenum writeTarget = 0x%X,  GLintptr readOffset = %d, GLintptr writeOffset = %d, GLsizeiptr size = %d)",
 	      readTarget, writeTarget, readOffset, writeOffset, size);
@@ -2481,7 +2481,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glGetUniformIndices(GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices)
+void GetUniformIndices(GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices)
 {
 	TRACE("(GLuint program = %d, GLsizei uniformCount = %d, const GLchar *const*uniformNames = %p, GLuint *uniformIndices = %p)",
 	      program, uniformCount, uniformNames, uniformIndices);
@@ -2526,7 +2526,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glGetActiveUniformsiv(GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params)
+void GetActiveUniformsiv(GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params)
 {
 	TRACE("(GLuint program = %d, GLsizei uniformCount = %d, const GLchar *const*uniformNames = %p, GLenum pname = 0x%X, GLuint *uniformIndices = %p)",
 	      program, uniformCount, uniformIndices, pname, uniformIndices);
@@ -2587,7 +2587,7 @@
 	}
 }
 
-GL_APICALL GLuint GL_APIENTRY glGetUniformBlockIndex(GLuint program, const GLchar *uniformBlockName)
+GLuint GetUniformBlockIndex(GLuint program, const GLchar *uniformBlockName)
 {
 	TRACE("(GLuint program = %d, const GLchar *uniformBlockName = %p)",
 	      program, uniformBlockName);
@@ -2616,7 +2616,7 @@
 	return GL_INVALID_INDEX;
 }
 
-GL_APICALL void GL_APIENTRY glGetActiveUniformBlockiv(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params)
+void GetActiveUniformBlockiv(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params)
 {
 	TRACE("(GLuint program = %d, GLuint uniformBlockIndex = %d, GLenum pname = 0x%X, GLint *params = %p)",
 	      program, uniformBlockIndex, pname, params);
@@ -2656,7 +2656,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glGetActiveUniformBlockName(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName)
+void GetActiveUniformBlockName(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName)
 {
 	TRACE("(GLuint program = %d, GLuint uniformBlockIndex = %d, GLsizei bufSize = %d, GLsizei *length = %p, GLchar *uniformBlockName = %p)",
 	      program, uniformBlockIndex, bufSize, length, uniformBlockName);
@@ -2686,7 +2686,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glUniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding)
+void UniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding)
 {
 	TRACE("(GLuint program = %d, GLuint uniformBlockIndex = %d, GLuint uniformBlockBinding = %d)",
 	      program, uniformBlockIndex, uniformBlockBinding);
@@ -2716,7 +2716,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glDrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount)
+void DrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount)
 {
 	TRACE("(GLenum mode = 0x%X, GLint first = %d, GLsizei count = %d, GLsizei instanceCount = %d)",
 	      mode, first, count, instanceCount);
@@ -2754,7 +2754,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glDrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instanceCount)
+void DrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instanceCount)
 {
 	TRACE("(GLenum mode = 0x%X, GLsizei count = %d, GLenum type = 0x%X, const void *indices = %p, GLsizei instanceCount = %d)",
 	      mode, count, type, indices, instanceCount);
@@ -2802,7 +2802,7 @@
 	}
 }
 
-GL_APICALL GLsync GL_APIENTRY glFenceSync(GLenum condition, GLbitfield flags)
+GLsync FenceSync(GLenum condition, GLbitfield flags)
 {
 	TRACE("(GLenum condition = 0x%X, GLbitfield flags = %X)", condition, flags);
 
@@ -2829,7 +2829,7 @@
 	return nullptr;
 }
 
-GL_APICALL GLboolean GL_APIENTRY glIsSync(GLsync sync)
+GLboolean IsSync(GLsync sync)
 {
 	TRACE("(GLsync sync = %p)", sync);
 
@@ -2848,7 +2848,7 @@
 	return GL_FALSE;
 }
 
-GL_APICALL void GL_APIENTRY glDeleteSync(GLsync sync)
+void DeleteSync(GLsync sync)
 {
 	TRACE("(GLsync sync = %p)", sync);
 
@@ -2870,7 +2870,7 @@
 	}
 }
 
-GL_APICALL GLenum GL_APIENTRY glClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
+GLenum ClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
 {
 	TRACE("(GLsync sync = %p, GLbitfield flags = %X, GLuint64 timeout = %llu)", sync, flags, timeout);
 
@@ -2898,7 +2898,7 @@
 	return GL_FALSE;
 }
 
-GL_APICALL void GL_APIENTRY glWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
+void WaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
 {
 	TRACE("(GLsync sync = %p, GLbitfield flags = %X, GLuint64 timeout = %llu)", sync, flags, timeout);
 
@@ -2929,7 +2929,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glGetInteger64v(GLenum pname, GLint64 *data)
+void GetInteger64v(GLenum pname, GLint64 *data)
 {
 	TRACE("(GLenum pname = 0x%X, GLint64 *data = %p)", pname, data);
 
@@ -2986,7 +2986,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glGetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values)
+void GetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values)
 {
 	TRACE("(GLsync sync = %p, GLenum pname = 0x%X, GLsizei bufSize = %d, GLsizei *length = %p, GLint *values = %p)",
 	      sync, pname, bufSize, length, values);
@@ -3010,7 +3010,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glGetInteger64i_v(GLenum target, GLuint index, GLint64 *data)
+void GetInteger64i_v(GLenum target, GLuint index, GLint64 *data)
 {
 	TRACE("(GLenum target = 0x%X, GLuint index = %d, GLint64 *data = %p)", target, index, data);
 
@@ -3069,7 +3069,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glGetBufferParameteri64v(GLenum target, GLenum pname, GLint64 *params)
+void GetBufferParameteri64v(GLenum target, GLenum pname, GLint64 *params)
 {
 	TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint64 *params = %p)", target, pname, params);
 
@@ -3116,7 +3116,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glGenSamplers(GLsizei count, GLuint *samplers)
+void GenSamplers(GLsizei count, GLuint *samplers)
 {
 	TRACE("(GLsizei count = %d, GLuint *samplers = %p)", count, samplers);
 
@@ -3136,7 +3136,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glDeleteSamplers(GLsizei count, const GLuint *samplers)
+void DeleteSamplers(GLsizei count, const GLuint *samplers)
 {
 	TRACE("(GLsizei count = %d, GLuint *samplers = %p)", count, samplers);
 
@@ -3156,7 +3156,7 @@
 	}
 }
 
-GL_APICALL GLboolean GL_APIENTRY glIsSampler(GLuint sampler)
+GLboolean IsSampler(GLuint sampler)
 {
 	TRACE("(GLuint sampler = %d)", sampler);
 
@@ -3178,7 +3178,7 @@
 	return GL_FALSE;
 }
 
-GL_APICALL void GL_APIENTRY glBindSampler(GLuint unit, GLuint sampler)
+void BindSampler(GLuint unit, GLuint sampler)
 {
 	TRACE("(GLuint unit = %d, GLuint sampler = %d)", unit, sampler);
 
@@ -3200,15 +3200,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glSamplerParameteri(GLuint sampler, GLenum pname, GLint param)
-{
-	TRACE("(GLuint sampler = %d, GLenum pname = 0x%X, GLint param = %d)",
-	      sampler, pname, param);
-
-	glSamplerParameteriv(sampler, pname, &param);
-}
-
-GL_APICALL void GL_APIENTRY glSamplerParameteriv(GLuint sampler, GLenum pname, const GLint *param)
+void SamplerParameteriv(GLuint sampler, GLenum pname, const GLint *param)
 {
 	TRACE("(GLuint sampler = %d, GLenum pname = 0x%X, const GLint *param = %p)",
 	      sampler, pname, param);
@@ -3236,15 +3228,15 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glSamplerParameterf(GLuint sampler, GLenum pname, GLfloat param)
+void SamplerParameteri(GLuint sampler, GLenum pname, GLint param)
 {
-	TRACE("(GLuint sampler = %d, GLenum pname = 0x%X, GLfloat param = %f)",
+	TRACE("(GLuint sampler = %d, GLenum pname = 0x%X, GLint param = %d)",
 	      sampler, pname, param);
 
-	glSamplerParameterfv(sampler, pname, &param);
+	SamplerParameteriv(sampler, pname, &param);
 }
 
-GL_APICALL void GL_APIENTRY glSamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat *param)
+void SamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat *param)
 {
 	TRACE("(GLuint sampler = %d, GLenum pname = 0x%X, const GLfloat *param = %p)",
 	      sampler, pname, param);
@@ -3270,7 +3262,15 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glGetSamplerParameteriv(GLuint sampler, GLenum pname, GLint *params)
+void SamplerParameterf(GLuint sampler, GLenum pname, GLfloat param)
+{
+	TRACE("(GLuint sampler = %d, GLenum pname = 0x%X, GLfloat param = %f)",
+	      sampler, pname, param);
+
+	SamplerParameterfv(sampler, pname, &param);
+}
+
+void GetSamplerParameteriv(GLuint sampler, GLenum pname, GLint *params)
 {
 	TRACE("(GLuint sampler = %d, GLenum pname = 0x%X, GLint *params = %p)",
 	      sampler, pname, params);
@@ -3293,7 +3293,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glGetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat *params)
+void GetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat *params)
 {
 	TRACE("(GLuint sampler = %d, GLenum pname = 0x%X, GLfloat *params = %p)",
 	      sampler, pname, params);
@@ -3316,7 +3316,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glVertexAttribDivisor(GLuint index, GLuint divisor)
+void VertexAttribDivisor(GLuint index, GLuint divisor)
 {
 	TRACE("(GLuint index = %d, GLuint divisor = %d)", index, divisor);
 
@@ -3333,7 +3333,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glBindTransformFeedback(GLenum target, GLuint id)
+void BindTransformFeedback(GLenum target, GLuint id)
 {
 	TRACE("(GLenum target = 0x%X, GLuint id = %d)", target, id);
 
@@ -3362,7 +3362,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glDeleteTransformFeedbacks(GLsizei n, const GLuint *ids)
+void DeleteTransformFeedbacks(GLsizei n, const GLuint *ids)
 {
 	TRACE("(GLsizei n = %d, const GLuint *ids = %p)", n, ids);
 
@@ -3392,7 +3392,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glGenTransformFeedbacks(GLsizei n, GLuint *ids)
+void GenTransformFeedbacks(GLsizei n, GLuint *ids)
 {
 	TRACE("(GLsizei n = %d, const GLuint *ids = %p)", n, ids);
 
@@ -3412,7 +3412,7 @@
 	}
 }
 
-GL_APICALL GLboolean GL_APIENTRY glIsTransformFeedback(GLuint id)
+GLboolean IsTransformFeedback(GLuint id)
 {
 	TRACE("(GLuint id = %d)", id);
 
@@ -3436,7 +3436,7 @@
 	return GL_FALSE;
 }
 
-GL_APICALL void GL_APIENTRY glPauseTransformFeedback(void)
+void PauseTransformFeedback(void)
 {
 	TRACE("()");
 
@@ -3457,7 +3457,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glResumeTransformFeedback(void)
+void ResumeTransformFeedback(void)
 {
 	TRACE("()");
 
@@ -3478,7 +3478,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glGetProgramBinary(GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary)
+void GetProgramBinary(GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary)
 {
 	TRACE("(GLuint program = %d, GLsizei bufSize = %d, GLsizei *length = %p, GLenum *binaryFormat = %p, void *binary = %p)",
 	      program, bufSize, length, binaryFormat, binary);
@@ -3504,7 +3504,7 @@
 	return error(GL_INVALID_OPERATION);
 }
 
-GL_APICALL void GL_APIENTRY glProgramBinary(GLuint program, GLenum binaryFormat, const void *binary, GLsizei length)
+void ProgramBinary(GLuint program, GLenum binaryFormat, const void *binary, GLsizei length)
 {
 	TRACE("(GLuint program = %d, GLenum binaryFormat = 0x%X, const void *binary = %p, GLsizei length = %d)",
 	      program, binaryFormat, binaryFormat, length);
@@ -3530,7 +3530,7 @@
 	return error(GL_INVALID_ENUM);
 }
 
-GL_APICALL void GL_APIENTRY glProgramParameteri(GLuint program, GLenum pname, GLint value)
+void ProgramParameteri(GLuint program, GLenum pname, GLint value)
 {
 	TRACE("(GLuint program = %d, GLenum pname = 0x%X, GLint value = %d)",
 	      program, pname, value);
@@ -3561,15 +3561,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glInvalidateFramebuffer(GLenum target, GLsizei numAttachments, const GLenum *attachments)
-{
-	TRACE("(GLenum target = 0x%X, GLsizei numAttachments = %d, const GLenum *attachments = %p)",
-	      target, numAttachments, attachments);
-
-	glInvalidateSubFramebuffer(target, numAttachments, attachments, 0, 0, std::numeric_limits<GLsizei>::max(), std::numeric_limits<GLsizei>::max());
-}
-
-GL_APICALL void GL_APIENTRY glInvalidateSubFramebuffer(GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height)
+void InvalidateSubFramebuffer(GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height)
 {
 	TRACE("(GLenum target = 0x%X, GLsizei numAttachments = %d, const GLenum *attachments = %p, GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d)",
 	      target, numAttachments, attachments, x, y, width, height);
@@ -3637,7 +3629,15 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glTexStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)
+void InvalidateFramebuffer(GLenum target, GLsizei numAttachments, const GLenum *attachments)
+{
+	TRACE("(GLenum target = 0x%X, GLsizei numAttachments = %d, const GLenum *attachments = %p)",
+	      target, numAttachments, attachments);
+
+	InvalidateSubFramebuffer(target, numAttachments, attachments, 0, 0, std::numeric_limits<GLsizei>::max(), std::numeric_limits<GLsizei>::max());
+}
+
+void TexStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)
 {
 	TRACE("(GLenum target = 0x%X, GLsizei levels = %d, GLenum internalformat = 0x%X, GLsizei width = %d, GLsizei height = %d)",
 	      target, levels, internalformat, width, height);
@@ -3725,7 +3725,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glTexStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth)
+void TexStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth)
 {
 	TRACE("(GLenum target = 0x%X, GLsizei levels = %d, GLenum internalformat = 0x%X, GLsizei width = %d, GLsizei height = %d, GLsizei depth = %d)",
 	      target, levels, internalformat, width, height, depth);
@@ -3798,7 +3798,7 @@
 	}
 }
 
-GL_APICALL void GL_APIENTRY glGetInternalformativ(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params)
+void GetInternalformativ(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params)
 {
 	TRACE("(GLenum target = 0x%X, GLenum internalformat = 0x%X, GLenum pname = 0x%X, GLsizei bufSize = %d, GLint *params = %p)",
 	      target, internalformat, pname, bufSize, params);