diff --git a/src/OpenGL/libEGL/libEGL.cpp b/src/OpenGL/libEGL/libEGL.cpp
index 70df27f..7dd5783 100644
--- a/src/OpenGL/libEGL/libEGL.cpp
+++ b/src/OpenGL/libEGL/libEGL.cpp
@@ -125,7 +125,7 @@
 };
 }
 
-EGLint GetError(void)
+EGLint EGLAPIENTRY GetError(void)
 {
 	TRACE("()");
 
@@ -139,7 +139,7 @@
 	return error;
 }
 
-EGLDisplay GetDisplay(EGLNativeDisplayType display_id)
+EGLDisplay EGLAPIENTRY GetDisplay(EGLNativeDisplayType display_id)
 {
 	TRACE("(EGLNativeDisplayType display_id = %p)", display_id);
 
@@ -160,7 +160,7 @@
 	return success(PRIMARY_DISPLAY);   // We only support the default display
 }
 
-EGLBoolean Initialize(EGLDisplay dpy, EGLint *major, EGLint *minor)
+EGLBoolean EGLAPIENTRY Initialize(EGLDisplay dpy, EGLint *major, EGLint *minor)
 {
 	TRACE("(EGLDisplay dpy = %p, EGLint *major = %p, EGLint *minor = %p)",
 		  dpy, major, minor);
@@ -183,7 +183,7 @@
 	return success(EGL_TRUE);
 }
 
-EGLBoolean Terminate(EGLDisplay dpy)
+EGLBoolean EGLAPIENTRY Terminate(EGLDisplay dpy)
 {
 	TRACE("(EGLDisplay dpy = %p)", dpy);
 
@@ -199,7 +199,7 @@
 	return success(EGL_TRUE);
 }
 
-const char *QueryString(EGLDisplay dpy, EGLint name)
+const char *EGLAPIENTRY QueryString(EGLDisplay dpy, EGLint name)
 {
 	TRACE("(EGLDisplay dpy = %p, EGLint name = %d)", dpy, name);
 
@@ -249,7 +249,7 @@
 	return error(EGL_BAD_PARAMETER, (const char*)nullptr);
 }
 
-EGLBoolean GetConfigs(EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config)
+EGLBoolean EGLAPIENTRY GetConfigs(EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config)
 {
 	TRACE("(EGLDisplay dpy = %p, EGLConfig *configs = %p, "
 	      "EGLint config_size = %d, EGLint *num_config = %p)",
@@ -277,7 +277,7 @@
 	return success(EGL_TRUE);
 }
 
-EGLBoolean ChooseConfig(EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config)
+EGLBoolean EGLAPIENTRY ChooseConfig(EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config)
 {
 	TRACE("(EGLDisplay dpy = %p, const EGLint *attrib_list = %p, "
 	      "EGLConfig *configs = %p, EGLint config_size = %d, EGLint *num_config = %p)",
@@ -310,7 +310,7 @@
 	return success(EGL_TRUE);
 }
 
-EGLBoolean GetConfigAttrib(EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value)
+EGLBoolean EGLAPIENTRY GetConfigAttrib(EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value)
 {
 	TRACE("(EGLDisplay dpy = %p, EGLConfig config = %p, EGLint attribute = %d, EGLint *value = %p)",
 	      dpy, config, attribute, value);
@@ -330,7 +330,7 @@
 	return success(EGL_TRUE);
 }
 
-EGLSurface CreatePlatformWindowSurface(EGLDisplay dpy, EGLConfig config, void *native_window, const EGLAttrib *attrib_list)
+EGLSurface EGLAPIENTRY CreatePlatformWindowSurface(EGLDisplay dpy, EGLConfig config, void *native_window, const EGLAttrib *attrib_list)
 {
 	TRACE("(EGLDisplay dpy = %p, EGLConfig config = %p, void *native_window = %p, "
 	      "const EGLint *attrib_list = %p)", dpy, config, native_window, attrib_list);
@@ -350,7 +350,7 @@
 	return display->createWindowSurface((EGLNativeWindowType)native_window, config, attrib_list);
 }
 
-EGLSurface CreatePlatformWindowSurfaceEXT(EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list)
+EGLSurface EGLAPIENTRY CreatePlatformWindowSurfaceEXT(EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list)
 {
 	TRACE("(EGLDisplay dpy = %p, EGLConfig config = %p, void *native_window = %p, "
 	      "const EGLint *attrib_list = %p)", dpy, config, native_window, attrib_list);
@@ -359,7 +359,7 @@
 	return CreatePlatformWindowSurface(dpy, config, native_window, &attribs);
 }
 
-EGLSurface CreateWindowSurface(EGLDisplay dpy, EGLConfig config, EGLNativeWindowType window, const EGLint *attrib_list)
+EGLSurface EGLAPIENTRY CreateWindowSurface(EGLDisplay dpy, EGLConfig config, EGLNativeWindowType window, const EGLint *attrib_list)
 {
 	TRACE("(EGLDisplay dpy = %p, EGLConfig config = %p, EGLNativeWindowType window = %p, "
 	      "const EGLint *attrib_list = %p)", dpy, config, window, attrib_list);
@@ -368,7 +368,7 @@
 	return CreatePlatformWindowSurface(dpy, config, (void*)window, &attribs);
 }
 
-EGLSurface CreatePbufferSurface(EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list)
+EGLSurface EGLAPIENTRY CreatePbufferSurface(EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list)
 {
 	TRACE("(EGLDisplay dpy = %p, EGLConfig config = %p, const EGLint *attrib_list = %p)",
 	      dpy, config, attrib_list);
@@ -383,7 +383,7 @@
 	return display->createPBufferSurface(config, attrib_list);
 }
 
-EGLSurface CreatePlatformPixmapSurface(EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLAttrib *attrib_list)
+EGLSurface EGLAPIENTRY CreatePlatformPixmapSurface(EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLAttrib *attrib_list)
 {
 	TRACE("(EGLDisplay dpy = %p, EGLConfig config = %p, void *native_pixmap = %p, "
 	      "const EGLint *attrib_list = %p)", dpy, config, native_pixmap, attrib_list);
@@ -400,7 +400,7 @@
 	return success(EGL_NO_SURFACE);
 }
 
-EGLSurface CreatePlatformPixmapSurfaceEXT(EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLint *attrib_list)
+EGLSurface EGLAPIENTRY CreatePlatformPixmapSurfaceEXT(EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLint *attrib_list)
 {
 	TRACE("(EGLDisplay dpy = %p, EGLConfig config = %p, void *native_pixmap = %p, "
 	      "const EGLint *attrib_list = %p)", dpy, config, native_pixmap, attrib_list);
@@ -409,7 +409,7 @@
 	return CreatePlatformPixmapSurface(dpy, config, native_pixmap, &attribs);
 }
 
-EGLSurface CreatePixmapSurface(EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint *attrib_list)
+EGLSurface EGLAPIENTRY CreatePixmapSurface(EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint *attrib_list)
 {
 	TRACE("(EGLDisplay dpy = %p, EGLConfig config = %p, EGLNativePixmapType pixmap = %p, "
 	      "const EGLint *attrib_list = %p)", dpy, config, pixmap, attrib_list);
@@ -418,7 +418,7 @@
 	return CreatePlatformPixmapSurface(dpy, config, (void*)pixmap, &attribs);
 }
 
-EGLBoolean DestroySurface(EGLDisplay dpy, EGLSurface surface)
+EGLBoolean EGLAPIENTRY DestroySurface(EGLDisplay dpy, EGLSurface surface)
 {
 	TRACE("(EGLDisplay dpy = %p, EGLSurface surface = %p)", dpy, surface);
 
@@ -440,7 +440,7 @@
 	return success(EGL_TRUE);
 }
 
-EGLBoolean QuerySurface(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value)
+EGLBoolean EGLAPIENTRY QuerySurface(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value)
 {
 	TRACE("(EGLDisplay dpy = %p, EGLSurface surface = %p, EGLint attribute = %d, EGLint *value = %p)",
 	      dpy, surface, attribute, value);
@@ -530,7 +530,7 @@
 	return success(EGL_TRUE);
 }
 
-EGLBoolean BindAPI(EGLenum api)
+EGLBoolean EGLAPIENTRY BindAPI(EGLenum api)
 {
 	TRACE("(EGLenum api = 0x%X)", api);
 
@@ -550,7 +550,7 @@
 	return success(EGL_TRUE);
 }
 
-EGLenum QueryAPI(void)
+EGLenum EGLAPIENTRY QueryAPI(void)
 {
 	TRACE("()");
 
@@ -559,7 +559,7 @@
 	return success(API);
 }
 
-EGLBoolean WaitClient(void)
+EGLBoolean EGLAPIENTRY WaitClient(void)
 {
 	TRACE("()");
 
@@ -574,7 +574,7 @@
 	return success(EGL_TRUE);
 }
 
-EGLBoolean ReleaseThread(void)
+EGLBoolean EGLAPIENTRY ReleaseThread(void)
 {
 	TRACE("()");
 
@@ -583,7 +583,7 @@
 	return EGL_TRUE;   // success() is not called here because it would re-allocate thread-local storage.
 }
 
-EGLSurface CreatePbufferFromClientBuffer(EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint *attrib_list)
+EGLSurface EGLAPIENTRY CreatePbufferFromClientBuffer(EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint *attrib_list)
 {
 	TRACE("(EGLDisplay dpy = %p, EGLenum buftype = 0x%X, EGLClientBuffer buffer = %p, "
 	      "EGLConfig config = %p, const EGLint *attrib_list = %p)",
@@ -610,7 +610,7 @@
 	};
 }
 
-EGLBoolean SurfaceAttrib(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value)
+EGLBoolean EGLAPIENTRY SurfaceAttrib(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value)
 {
 	TRACE("(EGLDisplay dpy = %p, EGLSurface surface = %p, EGLint attribute = %d, EGLint value = %d)",
 	      dpy, surface, attribute, value);
@@ -667,7 +667,7 @@
 	return success(EGL_TRUE);
 }
 
-EGLBoolean BindTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer)
+EGLBoolean EGLAPIENTRY BindTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer)
 {
 	TRACE("(EGLDisplay dpy = %p, EGLSurface surface = %p, EGLint buffer = %d)", dpy, surface, buffer);
 
@@ -709,7 +709,7 @@
 	return success(EGL_TRUE);
 }
 
-EGLBoolean ReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer)
+EGLBoolean EGLAPIENTRY ReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer)
 {
 	TRACE("(EGLDisplay dpy = %p, EGLSurface surface = %p, EGLint buffer = %d)", dpy, surface, buffer);
 
@@ -746,7 +746,7 @@
 	return success(EGL_TRUE);
 }
 
-EGLBoolean SwapInterval(EGLDisplay dpy, EGLint interval)
+EGLBoolean EGLAPIENTRY SwapInterval(EGLDisplay dpy, EGLint interval)
 {
 	TRACE("(EGLDisplay dpy = %p, EGLint interval = %d)", dpy, interval);
 
@@ -770,7 +770,7 @@
 	return success(EGL_TRUE);
 }
 
-EGLContext CreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list)
+EGLContext EGLAPIENTRY CreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list)
 {
 	TRACE("(EGLDisplay dpy = %p, EGLConfig config = %p, EGLContext share_context = %p, "
 	      "const EGLint *attrib_list = %p)", dpy, config, share_context, attrib_list);
@@ -876,7 +876,7 @@
 	return display->createContext(config, shareContext, majorVersion);
 }
 
-EGLBoolean DestroyContext(EGLDisplay dpy, EGLContext ctx)
+EGLBoolean EGLAPIENTRY DestroyContext(EGLDisplay dpy, EGLContext ctx)
 {
 	TRACE("(EGLDisplay dpy = %p, EGLContext ctx = %p)", dpy, ctx);
 
@@ -898,7 +898,7 @@
 	return success(EGL_TRUE);
 }
 
-EGLBoolean MakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx)
+EGLBoolean EGLAPIENTRY MakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx)
 {
 	TRACE("(EGLDisplay dpy = %p, EGLSurface draw = %p, EGLSurface read = %p, EGLContext ctx = %p)",
 	      dpy, draw, read, ctx);
@@ -954,7 +954,7 @@
 	return success(EGL_TRUE);
 }
 
-EGLContext GetCurrentContext(void)
+EGLContext EGLAPIENTRY GetCurrentContext(void)
 {
 	TRACE("()");
 
@@ -963,7 +963,7 @@
 	return success(context);
 }
 
-EGLSurface GetCurrentSurface(EGLint readdraw)
+EGLSurface EGLAPIENTRY GetCurrentSurface(EGLint readdraw)
 {
 	TRACE("(EGLint readdraw = %d)", readdraw);
 
@@ -983,7 +983,7 @@
 	}
 }
 
-EGLDisplay GetCurrentDisplay(void)
+EGLDisplay EGLAPIENTRY GetCurrentDisplay(void)
 {
 	TRACE("()");
 
@@ -1004,7 +1004,7 @@
 	return success(display->getEGLDisplay());
 }
 
-EGLBoolean QueryContext(EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value)
+EGLBoolean EGLAPIENTRY QueryContext(EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value)
 {
 	TRACE("(EGLDisplay dpy = %p, EGLContext ctx = %p, EGLint attribute = %d, EGLint *value = %p)",
 	      dpy, ctx, attribute, value);
@@ -1038,7 +1038,7 @@
 	return success(EGL_TRUE);
 }
 
-EGLBoolean WaitGL(void)
+EGLBoolean EGLAPIENTRY WaitGL(void)
 {
 	TRACE("()");
 
@@ -1053,7 +1053,7 @@
 	return success(EGL_TRUE);
 }
 
-EGLBoolean WaitNative(EGLint engine)
+EGLBoolean EGLAPIENTRY WaitNative(EGLint engine)
 {
 	TRACE("(EGLint engine = %d)", engine);
 
@@ -1084,7 +1084,7 @@
 	return success(EGL_TRUE);
 }
 
-EGLBoolean SwapBuffers(EGLDisplay dpy, EGLSurface surface)
+EGLBoolean EGLAPIENTRY SwapBuffers(EGLDisplay dpy, EGLSurface surface)
 {
 	TRACE("(EGLDisplay dpy = %p, EGLSurface surface = %p)", dpy, surface);
 
@@ -1106,7 +1106,7 @@
 	return success(EGL_TRUE);
 }
 
-EGLBoolean CopyBuffers(EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target)
+EGLBoolean EGLAPIENTRY CopyBuffers(EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target)
 {
 	TRACE("(EGLDisplay dpy = %p, EGLSurface surface = %p, EGLNativePixmapType target = %p)", dpy, surface, target);
 
@@ -1123,7 +1123,7 @@
 	return success(EGL_FALSE);
 }
 
-EGLImage CreateImage(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLAttrib *attrib_list)
+EGLImage EGLAPIENTRY CreateImage(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLAttrib *attrib_list)
 {
 	TRACE("(EGLDisplay dpy = %p, EGLContext ctx = %p, EGLenum target = 0x%X, buffer = %p, const EGLAttrib *attrib_list = %p)", dpy, ctx, target, buffer, attrib_list);
 
@@ -1212,7 +1212,7 @@
 	return success(eglImage);
 }
 
-EGLImageKHR CreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list)
+EGLImageKHR EGLAPIENTRY CreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list)
 {
 	TRACE("(EGLDisplay dpy = %p, EGLContext ctx = %p, EGLenum target = 0x%X, buffer = %p, const EGLint attrib_list = %p)", dpy, ctx, target, buffer, attrib_list);
 
@@ -1220,7 +1220,7 @@
 	return CreateImage(dpy, ctx, target, buffer, &attribs);
 }
 
-EGLBoolean DestroyImageKHR(EGLDisplay dpy, EGLImageKHR image)
+EGLBoolean EGLAPIENTRY DestroyImageKHR(EGLDisplay dpy, EGLImageKHR image)
 {
 	TRACE("(EGLDisplay dpy = %p, EGLImageKHR image = %p)", dpy, image);
 
@@ -1239,7 +1239,7 @@
 	return success(EGL_TRUE);
 }
 
-EGLDisplay GetPlatformDisplay(EGLenum platform, void *native_display, const EGLAttrib *attrib_list)
+EGLDisplay EGLAPIENTRY GetPlatformDisplay(EGLenum platform, void *native_display, const EGLAttrib *attrib_list)
 {
 	TRACE("(EGLenum platform = 0x%X, void *native_display = %p, const EGLAttrib *attrib_list = %p)", platform, native_display, attrib_list);
 
@@ -1294,7 +1294,7 @@
 	#endif
 }
 
-EGLDisplay GetPlatformDisplayEXT(EGLenum platform, void *native_display, const EGLint *attrib_list)
+EGLDisplay EGLAPIENTRY GetPlatformDisplayEXT(EGLenum platform, void *native_display, const EGLint *attrib_list)
 {
 	TRACE("(EGLenum platform = 0x%X, void *native_display = %p, const EGLint *attrib_list = %p)", platform, native_display, attrib_list);
 
@@ -1302,7 +1302,7 @@
 	return GetPlatformDisplay(platform, native_display, &attribs);
 }
 
-EGLSync CreateSync(EGLDisplay dpy, EGLenum type, const EGLAttrib *attrib_list)
+EGLSync EGLAPIENTRY CreateSync(EGLDisplay dpy, EGLenum type, const EGLAttrib *attrib_list)
 {
 	TRACE("(EGLDisplay dpy = %p, EGLunum type = %x, EGLAttrib *attrib_list=%p)", dpy, type, attrib_list);
 
@@ -1335,7 +1335,7 @@
 	return success(sync);
 }
 
-EGLSyncKHR CreateSyncKHR(EGLDisplay dpy, EGLenum type, const EGLint *attrib_list)
+EGLSyncKHR EGLAPIENTRY CreateSyncKHR(EGLDisplay dpy, EGLenum type, const EGLint *attrib_list)
 {
 	TRACE("(EGLDisplay dpy = %p, EGLunum type = %x, EGLint *attrib_list=%p)", dpy, type, attrib_list);
 
@@ -1343,7 +1343,7 @@
 	return CreateSync(dpy, type, &attribs);
 }
 
-EGLBoolean DestroySyncKHR(EGLDisplay dpy, EGLSyncKHR sync)
+EGLBoolean EGLAPIENTRY DestroySyncKHR(EGLDisplay dpy, EGLSyncKHR sync)
 {
 	TRACE("(EGLDisplay dpy = %p, EGLSyncKHR sync = %p)", dpy, sync);
 
@@ -1365,7 +1365,7 @@
 	return success(EGL_TRUE);
 }
 
-EGLint ClientWaitSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout)
+EGLint EGLAPIENTRY ClientWaitSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout)
 {
 	TRACE("(EGLDisplay dpy = %p, EGLSyncKHR sync = %p, EGLint flags = %x, EGLTimeKHR value = %llx)", dpy, sync, flags, timeout);
 
@@ -1393,7 +1393,7 @@
 	return success(EGL_CONDITION_SATISFIED_KHR);
 }
 
-EGLBoolean GetSyncAttrib(EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLAttrib *value)
+EGLBoolean EGLAPIENTRY GetSyncAttrib(EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLAttrib *value)
 {
 	TRACE("(EGLDisplay dpy = %p, EGLSyncKHR sync = %p, EGLint attribute = %x, EGLAttrib *value = %p)", dpy, sync, attribute, value);
 
@@ -1432,7 +1432,7 @@
 	}
 }
 
-EGLBoolean GetSyncAttribKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value)
+EGLBoolean EGLAPIENTRY GetSyncAttribKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value)
 {
 	EGLAttrib attrib_value;
 	EGLBoolean result = GetSyncAttrib(dpy, sync, attribute, &attrib_value);
@@ -1440,7 +1440,7 @@
 	return result;
 }
 
-__eglMustCastToProperFunctionPointerType GetProcAddress(const char *procname)
+__eglMustCastToProperFunctionPointerType EGLAPIENTRY GetProcAddress(const char *procname)
 {
 	TRACE("(const char *procname = \"%s\")", procname);
 
diff --git a/src/OpenGL/libEGL/libEGL.hpp b/src/OpenGL/libEGL/libEGL.hpp
index 68d2d80..0863cd5 100644
--- a/src/OpenGL/libEGL/libEGL.hpp
+++ b/src/OpenGL/libEGL/libEGL.hpp
@@ -25,46 +25,46 @@
 public:
 	LibEGLexports();
 
-	EGLint (*eglGetError)(void);
-	EGLDisplay (*eglGetDisplay)(EGLNativeDisplayType display_id);
-	EGLBoolean (*eglInitialize)(EGLDisplay dpy, EGLint *major, EGLint *minor);
-	EGLBoolean (*eglTerminate)(EGLDisplay dpy);
-	const char *(*eglQueryString)(EGLDisplay dpy, EGLint name);
-	EGLBoolean (*eglGetConfigs)(EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config);
-	EGLBoolean (*eglChooseConfig)(EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config);
-	EGLBoolean (*eglGetConfigAttrib)(EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value);
-	EGLSurface (*eglCreateWindowSurface)(EGLDisplay dpy, EGLConfig config, EGLNativeWindowType window, const EGLint *attrib_list);
-	EGLSurface (*eglCreatePbufferSurface)(EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list);
-	EGLSurface (*eglCreatePixmapSurface)(EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint *attrib_list);
-	EGLBoolean (*eglDestroySurface)(EGLDisplay dpy, EGLSurface surface);
-	EGLBoolean (*eglQuerySurface)(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value);
-	EGLBoolean (*eglBindAPI)(EGLenum api);
-	EGLenum (*eglQueryAPI)(void);
-	EGLBoolean (*eglWaitClient)(void);
-	EGLBoolean (*eglReleaseThread)(void);
-	EGLSurface (*eglCreatePbufferFromClientBuffer)(EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint *attrib_list);
-	EGLBoolean (*eglSurfaceAttrib)(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value);
-	EGLBoolean (*eglBindTexImage)(EGLDisplay dpy, EGLSurface surface, EGLint buffer);
-	EGLBoolean (*eglReleaseTexImage)(EGLDisplay dpy, EGLSurface surface, EGLint buffer);
-	EGLBoolean (*eglSwapInterval)(EGLDisplay dpy, EGLint interval);
-	EGLContext (*eglCreateContext)(EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list);
-	EGLBoolean (*eglDestroyContext)(EGLDisplay dpy, EGLContext ctx);
-	EGLBoolean (*eglMakeCurrent)(EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx);
-	EGLContext (*eglGetCurrentContext)(void);
-	EGLSurface (*eglGetCurrentSurface)(EGLint readdraw);
-	EGLDisplay (*eglGetCurrentDisplay)(void);
-	EGLBoolean (*eglQueryContext)(EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value);
-	EGLBoolean (*eglWaitGL)(void);
-	EGLBoolean (*eglWaitNative)(EGLint engine);
-	EGLBoolean (*eglSwapBuffers)(EGLDisplay dpy, EGLSurface surface);
-	EGLBoolean (*eglCopyBuffers)(EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target);
-	EGLImageKHR (*eglCreateImageKHR)(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list);
-	EGLBoolean (*eglDestroyImageKHR)(EGLDisplay dpy, EGLImageKHR image);
-	__eglMustCastToProperFunctionPointerType (*eglGetProcAddress)(const char*);
-	EGLSyncKHR (*eglCreateSyncKHR)(EGLDisplay dpy, EGLenum type, const EGLint *attrib_list);
-	EGLBoolean (*eglDestroySyncKHR)(EGLDisplay dpy, EGLSyncKHR sync);
-	EGLint (*eglClientWaitSyncKHR)(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout);
-	EGLBoolean (*eglGetSyncAttribKHR)(EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value);
+	EGLint (EGLAPIENTRY* eglGetError)(void);
+	EGLDisplay (EGLAPIENTRY* eglGetDisplay)(EGLNativeDisplayType display_id);
+	EGLBoolean (EGLAPIENTRY* eglInitialize)(EGLDisplay dpy, EGLint *major, EGLint *minor);
+	EGLBoolean (EGLAPIENTRY* eglTerminate)(EGLDisplay dpy);
+	const char *(EGLAPIENTRY* eglQueryString)(EGLDisplay dpy, EGLint name);
+	EGLBoolean (EGLAPIENTRY* eglGetConfigs)(EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config);
+	EGLBoolean (EGLAPIENTRY* eglChooseConfig)(EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config);
+	EGLBoolean (EGLAPIENTRY* eglGetConfigAttrib)(EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value);
+	EGLSurface (EGLAPIENTRY* eglCreateWindowSurface)(EGLDisplay dpy, EGLConfig config, EGLNativeWindowType window, const EGLint *attrib_list);
+	EGLSurface (EGLAPIENTRY* eglCreatePbufferSurface)(EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list);
+	EGLSurface (EGLAPIENTRY* eglCreatePixmapSurface)(EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint *attrib_list);
+	EGLBoolean (EGLAPIENTRY* eglDestroySurface)(EGLDisplay dpy, EGLSurface surface);
+	EGLBoolean (EGLAPIENTRY* eglQuerySurface)(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value);
+	EGLBoolean (EGLAPIENTRY* eglBindAPI)(EGLenum api);
+	EGLenum (EGLAPIENTRY* eglQueryAPI)(void);
+	EGLBoolean (EGLAPIENTRY* eglWaitClient)(void);
+	EGLBoolean (EGLAPIENTRY* eglReleaseThread)(void);
+	EGLSurface (EGLAPIENTRY* eglCreatePbufferFromClientBuffer)(EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint *attrib_list);
+	EGLBoolean (EGLAPIENTRY* eglSurfaceAttrib)(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value);
+	EGLBoolean (EGLAPIENTRY* eglBindTexImage)(EGLDisplay dpy, EGLSurface surface, EGLint buffer);
+	EGLBoolean (EGLAPIENTRY* eglReleaseTexImage)(EGLDisplay dpy, EGLSurface surface, EGLint buffer);
+	EGLBoolean (EGLAPIENTRY* eglSwapInterval)(EGLDisplay dpy, EGLint interval);
+	EGLContext (EGLAPIENTRY* eglCreateContext)(EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list);
+	EGLBoolean (EGLAPIENTRY* eglDestroyContext)(EGLDisplay dpy, EGLContext ctx);
+	EGLBoolean (EGLAPIENTRY* eglMakeCurrent)(EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx);
+	EGLContext (EGLAPIENTRY* eglGetCurrentContext)(void);
+	EGLSurface (EGLAPIENTRY* eglGetCurrentSurface)(EGLint readdraw);
+	EGLDisplay (EGLAPIENTRY* eglGetCurrentDisplay)(void);
+	EGLBoolean (EGLAPIENTRY* eglQueryContext)(EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value);
+	EGLBoolean (EGLAPIENTRY* eglWaitGL)(void);
+	EGLBoolean (EGLAPIENTRY* eglWaitNative)(EGLint engine);
+	EGLBoolean (EGLAPIENTRY* eglSwapBuffers)(EGLDisplay dpy, EGLSurface surface);
+	EGLBoolean (EGLAPIENTRY* eglCopyBuffers)(EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target);
+	EGLImageKHR (EGLAPIENTRY* eglCreateImageKHR)(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list);
+	EGLBoolean (EGLAPIENTRY* eglDestroyImageKHR)(EGLDisplay dpy, EGLImageKHR image);
+	__eglMustCastToProperFunctionPointerType (EGLAPIENTRY* eglGetProcAddress)(const char*);
+	EGLSyncKHR (EGLAPIENTRY* eglCreateSyncKHR)(EGLDisplay dpy, EGLenum type, const EGLint *attrib_list);
+	EGLBoolean (EGLAPIENTRY* eglDestroySyncKHR)(EGLDisplay dpy, EGLSyncKHR sync);
+	EGLint (EGLAPIENTRY* eglClientWaitSyncKHR)(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout);
+	EGLBoolean (EGLAPIENTRY* eglGetSyncAttribKHR)(EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value);
 
 	// Functions that don't change the error code, for use by client APIs
 	egl::Context *(*clientGetCurrentContext)();
diff --git a/src/OpenGL/libEGL/main.cpp b/src/OpenGL/libEGL/main.cpp
index 5b60037..2db5b5f 100644
--- a/src/OpenGL/libEGL/main.cpp
+++ b/src/OpenGL/libEGL/main.cpp
@@ -350,55 +350,55 @@
 
 namespace egl
 {
-EGLint GetError(void);
-EGLDisplay GetDisplay(EGLNativeDisplayType display_id);
-EGLBoolean Initialize(EGLDisplay dpy, EGLint *major, EGLint *minor);
-EGLBoolean Terminate(EGLDisplay dpy);
-const char *QueryString(EGLDisplay dpy, EGLint name);
-EGLBoolean GetConfigs(EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config);
-EGLBoolean ChooseConfig(EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config);
-EGLBoolean GetConfigAttrib(EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value);
-EGLSurface CreateWindowSurface(EGLDisplay dpy, EGLConfig config, EGLNativeWindowType window, const EGLint *attrib_list);
-EGLSurface CreatePbufferSurface(EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list);
-EGLSurface CreatePixmapSurface(EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint *attrib_list);
-EGLBoolean DestroySurface(EGLDisplay dpy, EGLSurface surface);
-EGLBoolean QuerySurface(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value);
-EGLBoolean BindAPI(EGLenum api);
-EGLenum QueryAPI(void);
-EGLBoolean WaitClient(void);
-EGLBoolean ReleaseThread(void);
-EGLSurface CreatePbufferFromClientBuffer(EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint *attrib_list);
-EGLBoolean SurfaceAttrib(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value);
-EGLBoolean BindTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer);
-EGLBoolean ReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer);
-EGLBoolean SwapInterval(EGLDisplay dpy, EGLint interval);
-EGLContext CreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list);
-EGLBoolean DestroyContext(EGLDisplay dpy, EGLContext ctx);
-EGLBoolean MakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx);
-EGLContext GetCurrentContext(void);
-EGLSurface GetCurrentSurface(EGLint readdraw);
-EGLDisplay GetCurrentDisplay(void);
-EGLBoolean QueryContext(EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value);
-EGLBoolean WaitGL(void);
-EGLBoolean WaitNative(EGLint engine);
-EGLBoolean SwapBuffers(EGLDisplay dpy, EGLSurface surface);
-EGLBoolean CopyBuffers(EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target);
-EGLImageKHR CreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list);
-EGLImageKHR CreateImage(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLAttrib *attrib_list);
-EGLBoolean DestroyImageKHR(EGLDisplay dpy, EGLImageKHR image);
-EGLDisplay GetPlatformDisplayEXT(EGLenum platform, void *native_display, const EGLint *attrib_list);
-EGLDisplay GetPlatformDisplay(EGLenum platform, void *native_display, const EGLAttrib *attrib_list);
-EGLSurface CreatePlatformWindowSurfaceEXT(EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list);
-EGLSurface CreatePlatformWindowSurface(EGLDisplay dpy, EGLConfig config, void *native_window, const EGLAttrib *attrib_list);
-EGLSurface CreatePlatformPixmapSurfaceEXT(EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLint *attrib_list);
-EGLSurface CreatePlatformPixmapSurface(EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLAttrib *attrib_list);
-EGLSyncKHR CreateSyncKHR(EGLDisplay dpy, EGLenum type, const EGLint *attrib_list);
-EGLSyncKHR CreateSync(EGLDisplay dpy, EGLenum type, const EGLAttrib *attrib_list);
-EGLBoolean DestroySyncKHR(EGLDisplay dpy, EGLSyncKHR sync);
-EGLint ClientWaitSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout);
-EGLBoolean GetSyncAttribKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value);
-EGLBoolean GetSyncAttrib(EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLAttrib *value);
-__eglMustCastToProperFunctionPointerType GetProcAddress(const char *procname);
+EGLint EGLAPIENTRY GetError(void);
+EGLDisplay EGLAPIENTRY GetDisplay(EGLNativeDisplayType display_id);
+EGLBoolean EGLAPIENTRY Initialize(EGLDisplay dpy, EGLint *major, EGLint *minor);
+EGLBoolean EGLAPIENTRY Terminate(EGLDisplay dpy);
+const char *EGLAPIENTRY QueryString(EGLDisplay dpy, EGLint name);
+EGLBoolean EGLAPIENTRY GetConfigs(EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config);
+EGLBoolean EGLAPIENTRY ChooseConfig(EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config);
+EGLBoolean EGLAPIENTRY GetConfigAttrib(EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value);
+EGLSurface EGLAPIENTRY CreateWindowSurface(EGLDisplay dpy, EGLConfig config, EGLNativeWindowType window, const EGLint *attrib_list);
+EGLSurface EGLAPIENTRY CreatePbufferSurface(EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list);
+EGLSurface EGLAPIENTRY CreatePixmapSurface(EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint *attrib_list);
+EGLBoolean EGLAPIENTRY DestroySurface(EGLDisplay dpy, EGLSurface surface);
+EGLBoolean EGLAPIENTRY QuerySurface(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value);
+EGLBoolean EGLAPIENTRY BindAPI(EGLenum api);
+EGLenum EGLAPIENTRY QueryAPI(void);
+EGLBoolean EGLAPIENTRY WaitClient(void);
+EGLBoolean EGLAPIENTRY ReleaseThread(void);
+EGLSurface EGLAPIENTRY CreatePbufferFromClientBuffer(EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint *attrib_list);
+EGLBoolean EGLAPIENTRY SurfaceAttrib(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value);
+EGLBoolean EGLAPIENTRY BindTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer);
+EGLBoolean EGLAPIENTRY ReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer);
+EGLBoolean EGLAPIENTRY SwapInterval(EGLDisplay dpy, EGLint interval);
+EGLContext EGLAPIENTRY CreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list);
+EGLBoolean EGLAPIENTRY DestroyContext(EGLDisplay dpy, EGLContext ctx);
+EGLBoolean EGLAPIENTRY MakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx);
+EGLContext EGLAPIENTRY GetCurrentContext(void);
+EGLSurface EGLAPIENTRY GetCurrentSurface(EGLint readdraw);
+EGLDisplay EGLAPIENTRY GetCurrentDisplay(void);
+EGLBoolean EGLAPIENTRY QueryContext(EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value);
+EGLBoolean EGLAPIENTRY WaitGL(void);
+EGLBoolean EGLAPIENTRY WaitNative(EGLint engine);
+EGLBoolean EGLAPIENTRY SwapBuffers(EGLDisplay dpy, EGLSurface surface);
+EGLBoolean EGLAPIENTRY CopyBuffers(EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target);
+EGLImageKHR EGLAPIENTRY CreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list);
+EGLImageKHR EGLAPIENTRY CreateImage(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLAttrib *attrib_list);
+EGLBoolean EGLAPIENTRY DestroyImageKHR(EGLDisplay dpy, EGLImageKHR image);
+EGLDisplay EGLAPIENTRY GetPlatformDisplayEXT(EGLenum platform, void *native_display, const EGLint *attrib_list);
+EGLDisplay EGLAPIENTRY GetPlatformDisplay(EGLenum platform, void *native_display, const EGLAttrib *attrib_list);
+EGLSurface EGLAPIENTRY CreatePlatformWindowSurfaceEXT(EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list);
+EGLSurface EGLAPIENTRY CreatePlatformWindowSurface(EGLDisplay dpy, EGLConfig config, void *native_window, const EGLAttrib *attrib_list);
+EGLSurface EGLAPIENTRY CreatePlatformPixmapSurfaceEXT(EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLint *attrib_list);
+EGLSurface EGLAPIENTRY CreatePlatformPixmapSurface(EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLAttrib *attrib_list);
+EGLSyncKHR EGLAPIENTRY CreateSyncKHR(EGLDisplay dpy, EGLenum type, const EGLint *attrib_list);
+EGLSyncKHR EGLAPIENTRY CreateSync(EGLDisplay dpy, EGLenum type, const EGLAttrib *attrib_list);
+EGLBoolean EGLAPIENTRY DestroySyncKHR(EGLDisplay dpy, EGLSyncKHR sync);
+EGLint EGLAPIENTRY ClientWaitSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout);
+EGLBoolean EGLAPIENTRY GetSyncAttribKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value);
+EGLBoolean EGLAPIENTRY GetSyncAttrib(EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLAttrib *value);
+__eglMustCastToProperFunctionPointerType EGLAPIENTRY GetProcAddress(const char *procname);
 }
 
 extern "C"
diff --git a/src/OpenGL/libGLES_CM/libGLES_CM.cpp b/src/OpenGL/libGLES_CM/libGLES_CM.cpp
index 31a2c29..daa61b0 100644
--- a/src/OpenGL/libGLES_CM/libGLES_CM.cpp
+++ b/src/OpenGL/libGLES_CM/libGLES_CM.cpp
@@ -48,7 +48,7 @@
 	return true;
 }
 
-void ActiveTexture(GLenum texture)
+void GL_APIENTRY ActiveTexture(GLenum texture)
 {
 	TRACE("(GLenum texture = 0x%X)", texture);
 
@@ -65,7 +65,7 @@
 	}
 }
 
-void AlphaFunc(GLenum func, GLclampf ref)
+void GL_APIENTRY AlphaFunc(GLenum func, GLclampf ref)
 {
 	TRACE("(GLenum func = 0x%X, GLclampf ref = %f)", func, ref);
 
@@ -92,12 +92,12 @@
 	}
 }
 
-void AlphaFuncx(GLenum func, GLclampx ref)
+void GL_APIENTRY AlphaFuncx(GLenum func, GLclampx ref)
 {
 	AlphaFunc(func, (float)ref / 0x10000);
 }
 
-void BindBuffer(GLenum target, GLuint buffer)
+void GL_APIENTRY BindBuffer(GLenum target, GLuint buffer)
 {
 	TRACE("(GLenum target = 0x%X, GLuint buffer = %d)", target, buffer);
 
@@ -119,7 +119,7 @@
 	}
 }
 
-void BindFramebuffer(GLenum target, GLuint framebuffer)
+void GL_APIENTRY BindFramebuffer(GLenum target, GLuint framebuffer)
 {
 	TRACE("(GLenum target = 0x%X, GLuint framebuffer = %d)", target, framebuffer);
 
@@ -136,7 +136,7 @@
 	}
 }
 
-void BindFramebufferOES(GLenum target, GLuint framebuffer)
+void GL_APIENTRY BindFramebufferOES(GLenum target, GLuint framebuffer)
 {
 	TRACE("(GLenum target = 0x%X, GLuint framebuffer = %d)", target, framebuffer);
 
@@ -153,7 +153,7 @@
 	}
 }
 
-void BindRenderbufferOES(GLenum target, GLuint renderbuffer)
+void GL_APIENTRY BindRenderbufferOES(GLenum target, GLuint renderbuffer)
 {
 	TRACE("(GLenum target = 0x%X, GLuint renderbuffer = %d)", target, renderbuffer);
 
@@ -173,7 +173,7 @@
 	}
 }
 
-void BindTexture(GLenum target, GLuint texture)
+void GL_APIENTRY BindTexture(GLenum target, GLuint texture)
 {
 	TRACE("(GLenum target = 0x%X, GLuint texture = %d)", target, texture);
 
@@ -202,14 +202,14 @@
 	}
 }
 
-void BlendEquationSeparateOES(GLenum modeRGB, GLenum modeAlpha);
+void GL_APIENTRY BlendEquationSeparateOES(GLenum modeRGB, GLenum modeAlpha);
 
-void BlendEquationOES(GLenum mode)
+void GL_APIENTRY BlendEquationOES(GLenum mode)
 {
 	BlendEquationSeparateOES(mode, mode);
 }
 
-void BlendEquationSeparateOES(GLenum modeRGB, GLenum modeAlpha)
+void GL_APIENTRY BlendEquationSeparateOES(GLenum modeRGB, GLenum modeAlpha)
 {
 	TRACE("(GLenum modeRGB = 0x%X, GLenum modeAlpha = 0x%X)", modeRGB, modeAlpha);
 
@@ -245,14 +245,14 @@
 	}
 }
 
-void BlendFuncSeparateOES(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+void GL_APIENTRY BlendFuncSeparateOES(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
 
-void BlendFunc(GLenum sfactor, GLenum dfactor)
+void GL_APIENTRY BlendFunc(GLenum sfactor, GLenum dfactor)
 {
 	BlendFuncSeparateOES(sfactor, dfactor, sfactor, dfactor);
 }
 
-void BlendFuncSeparateOES(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
+void GL_APIENTRY BlendFuncSeparateOES(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
 {
 	TRACE("(GLenum srcRGB = 0x%X, GLenum dstRGB = 0x%X, GLenum srcAlpha = 0x%X, GLenum dstAlpha = 0x%X)",
 		  srcRGB, dstRGB, srcAlpha, dstAlpha);
@@ -335,7 +335,7 @@
 	}
 }
 
-void BufferData(GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage)
+void GL_APIENTRY BufferData(GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage)
 {
 	size = static_cast<GLint>(size);   // Work around issues with some 64-bit applications
 
@@ -383,7 +383,7 @@
 	}
 }
 
-void BufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data)
+void GL_APIENTRY BufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data)
 {
 	size = static_cast<GLint>(size);   // Work around issues with some 64-bit applications
 	offset = static_cast<GLint>(offset);
@@ -433,7 +433,7 @@
 	}
 }
 
-GLenum CheckFramebufferStatusOES(GLenum target)
+GLenum GL_APIENTRY CheckFramebufferStatusOES(GLenum target)
 {
 	TRACE("(GLenum target = 0x%X)", target);
 
@@ -459,7 +459,7 @@
 	return 0;
 }
 
-void Clear(GLbitfield mask)
+void GL_APIENTRY Clear(GLbitfield mask)
 {
 	TRACE("(GLbitfield mask = %X)", mask);
 
@@ -476,7 +476,7 @@
 	}
 }
 
-void ClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
+void GL_APIENTRY ClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
 {
 	TRACE("(GLclampf red = %f, GLclampf green = %f, GLclampf blue = %f, GLclampf alpha = %f)",
 	      red, green, blue, alpha);
@@ -489,12 +489,12 @@
 	}
 }
 
-void ClearColorx(GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha)
+void GL_APIENTRY ClearColorx(GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha)
 {
 	ClearColor((float)red / 0x10000, (float)green / 0x10000, (float)blue / 0x10000, (float)alpha / 0x10000);
 }
 
-void ClearDepthf(GLclampf depth)
+void GL_APIENTRY ClearDepthf(GLclampf depth)
 {
 	TRACE("(GLclampf depth = %f)", depth);
 
@@ -506,12 +506,12 @@
 	}
 }
 
-void ClearDepthx(GLclampx depth)
+void GL_APIENTRY ClearDepthx(GLclampx depth)
 {
 	ClearDepthf((float)depth / 0x10000);
 }
 
-void ClearStencil(GLint s)
+void GL_APIENTRY ClearStencil(GLint s)
 {
 	TRACE("(GLint s = %d)", s);
 
@@ -523,7 +523,7 @@
 	}
 }
 
-void ClientActiveTexture(GLenum texture)
+void GL_APIENTRY ClientActiveTexture(GLenum texture)
 {
 	TRACE("(GLenum texture = 0x%X)", texture);
 
@@ -544,7 +544,7 @@
 	}
 }
 
-void ClipPlanef(GLenum plane, const GLfloat *equation)
+void GL_APIENTRY ClipPlanef(GLenum plane, const GLfloat *equation)
 {
 	TRACE("(GLenum plane = 0x%X, const GLfloat *equation)", plane);
 
@@ -563,7 +563,7 @@
 	}
 }
 
-void ClipPlanex(GLenum plane, const GLfixed *equation)
+void GL_APIENTRY ClipPlanex(GLenum plane, const GLfixed *equation)
 {
 	GLfloat equationf[4] =
 	{
@@ -576,7 +576,7 @@
 	ClipPlanef(plane, equationf);
 }
 
-void Color4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+void GL_APIENTRY Color4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
 {
 	TRACE("(GLfloat red = %f, GLfloat green = %f, GLfloat blue = %f, GLfloat alpha = %f)", red, green, blue, alpha);
 
@@ -588,17 +588,17 @@
 	}
 }
 
-void Color4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha)
+void GL_APIENTRY Color4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha)
 {
 	Color4f((float)red / 0xFF, (float)green / 0xFF, (float)blue / 0xFF, (float)alpha / 0xFF);
 }
 
-void Color4x(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha)
+void GL_APIENTRY Color4x(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha)
 {
 	Color4f((float)red / 0x10000, (float)green / 0x10000, (float)blue / 0x10000, (float)alpha / 0x10000);
 }
 
-void ColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
+void GL_APIENTRY ColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
 {
 	TRACE("(GLboolean red = %d, GLboolean green = %d, GLboolean blue = %d, GLboolean alpha = %d)",
 	      red, green, blue, alpha);
@@ -611,7 +611,7 @@
 	}
 }
 
-void VertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr)
+void GL_APIENTRY VertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr)
 {
 	TRACE("(GLuint index = %d, GLint size = %d, GLenum type = 0x%X, "
 	      "GLboolean normalized = %d, GLsizei stride = %d, const GLvoid* ptr = %p)",
@@ -653,7 +653,7 @@
 	}
 }
 
-void ColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)
+void GL_APIENTRY ColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)
 {
 	TRACE("(GLint size = %d, GLenum type = 0x%X, GLsizei stride = %d, const GLvoid *pointer = %p)", size, type, stride, pointer);
 
@@ -665,8 +665,8 @@
 	VertexAttribPointer(sw::Color0, size, type, true, stride, pointer);
 }
 
-void CompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height,
-                          GLint border, GLsizei imageSize, const GLvoid* data)
+void GL_APIENTRY CompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height,
+                                      GLint border, GLsizei imageSize, const GLvoid* data)
 {
 	TRACE("(GLenum target = 0x%X, GLint level = %d, GLenum internalformat = 0x%X, GLsizei width = %d, "
 	      "GLsizei height = %d, GLint border = %d, GLsizei imageSize = %d, const GLvoid* data = %p)",
@@ -738,8 +738,8 @@
 	}
 }
 
-void CompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
-                             GLenum format, GLsizei imageSize, const GLvoid* data)
+void GL_APIENTRY CompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
+                                         GLenum format, GLsizei imageSize, const GLvoid* data)
 {
 	TRACE("(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "
 	      "GLsizei width = %d, GLsizei height = %d, GLenum format = 0x%X, "
@@ -807,7 +807,7 @@
 	}
 }
 
-void CopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
+void GL_APIENTRY CopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
 {
 	TRACE("(GLenum target = 0x%X, GLint level = %d, GLenum internalformat = 0x%X, "
 	      "GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d, GLint border = %d)",
@@ -934,7 +934,7 @@
 	}
 }
 
-void CopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+void GL_APIENTRY CopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
 {
 	TRACE("(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "
 	      "GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d)",
@@ -1001,7 +1001,7 @@
 	}
 }
 
-void CullFace(GLenum mode)
+void GL_APIENTRY CullFace(GLenum mode)
 {
 	TRACE("(GLenum mode = 0x%X)", mode);
 
@@ -1024,7 +1024,7 @@
 	}
 }
 
-void DeleteBuffers(GLsizei n, const GLuint* buffers)
+void GL_APIENTRY DeleteBuffers(GLsizei n, const GLuint* buffers)
 {
 	TRACE("(GLsizei n = %d, const GLuint* buffers = %p)", n, buffers);
 
@@ -1044,7 +1044,7 @@
 	}
 }
 
-void DeleteFramebuffersOES(GLsizei n, const GLuint* framebuffers)
+void GL_APIENTRY DeleteFramebuffersOES(GLsizei n, const GLuint* framebuffers)
 {
 	TRACE("(GLsizei n = %d, const GLuint* framebuffers = %p)", n, framebuffers);
 
@@ -1067,7 +1067,7 @@
 	}
 }
 
-void DeleteRenderbuffersOES(GLsizei n, const GLuint* renderbuffers)
+void GL_APIENTRY DeleteRenderbuffersOES(GLsizei n, const GLuint* renderbuffers)
 {
 	TRACE("(GLsizei n = %d, const GLuint* renderbuffers = %p)", n, renderbuffers);
 
@@ -1087,7 +1087,7 @@
 	}
 }
 
-void DeleteTextures(GLsizei n, const GLuint* textures)
+void GL_APIENTRY DeleteTextures(GLsizei n, const GLuint* textures)
 {
 	TRACE("(GLsizei n = %d, const GLuint* textures = %p)", n, textures);
 
@@ -1110,7 +1110,7 @@
 	}
 }
 
-void DepthFunc(GLenum func)
+void GL_APIENTRY DepthFunc(GLenum func)
 {
 	TRACE("(GLenum func = 0x%X)", func);
 
@@ -1137,7 +1137,7 @@
 	}
 }
 
-void DepthMask(GLboolean flag)
+void GL_APIENTRY DepthMask(GLboolean flag)
 {
 	TRACE("(GLboolean flag = %d)", flag);
 
@@ -1149,7 +1149,7 @@
 	}
 }
 
-void DepthRangef(GLclampf zNear, GLclampf zFar)
+void GL_APIENTRY DepthRangef(GLclampf zNear, GLclampf zFar)
 {
 	TRACE("(GLclampf zNear = %f, GLclampf zFar = %f)", zNear, zFar);
 
@@ -1161,12 +1161,12 @@
 	}
 }
 
-void DepthRangex(GLclampx zNear, GLclampx zFar)
+void GL_APIENTRY DepthRangex(GLclampx zNear, GLclampx zFar)
 {
 	DepthRangef((float)zNear / 0x10000, (float)zFar / 0x10000);
 }
 
-void Disable(GLenum cap)
+void GL_APIENTRY Disable(GLenum cap)
 {
 	TRACE("(GLenum cap = 0x%X)", cap);
 
@@ -1224,7 +1224,7 @@
 	}
 }
 
-void DisableClientState(GLenum array)
+void GL_APIENTRY DisableClientState(GLenum array)
 {
 	TRACE("(GLenum array = 0x%X)", array);
 
@@ -1258,7 +1258,7 @@
 	}
 }
 
-void DrawArrays(GLenum mode, GLint first, GLsizei count)
+void GL_APIENTRY DrawArrays(GLenum mode, GLint first, GLsizei count)
 {
 	TRACE("(GLenum mode = 0x%X, GLint first = %d, GLsizei count = %d)", mode, first, count);
 
@@ -1275,7 +1275,7 @@
 	}
 }
 
-void DrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices)
+void GL_APIENTRY DrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices)
 {
 	TRACE("(GLenum mode = 0x%X, GLsizei count = %d, GLenum type = 0x%X, const GLvoid* indices = %p)",
 	      mode, count, type, indices);
@@ -1303,7 +1303,7 @@
 	}
 }
 
-void Enable(GLenum cap)
+void GL_APIENTRY Enable(GLenum cap)
 {
 	TRACE("(GLenum cap = 0x%X)", cap);
 
@@ -1361,7 +1361,7 @@
 	}
 }
 
-void EnableClientState(GLenum array)
+void GL_APIENTRY EnableClientState(GLenum array)
 {
 	TRACE("(GLenum array = 0x%X)", array);
 
@@ -1395,7 +1395,7 @@
 	}
 }
 
-void Finish(void)
+void GL_APIENTRY Finish(void)
 {
 	TRACE("()");
 
@@ -1407,7 +1407,7 @@
 	}
 }
 
-void Flush(void)
+void GL_APIENTRY Flush(void)
 {
 	TRACE("()");
 
@@ -1419,7 +1419,7 @@
 	}
 }
 
-void FramebufferRenderbufferOES(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
+void GL_APIENTRY FramebufferRenderbufferOES(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
 {
 	TRACE("(GLenum target = 0x%X, GLenum attachment = 0x%X, GLenum renderbuffertarget = 0x%X, "
 	      "GLuint renderbuffer = %d)", target, attachment, renderbuffertarget, renderbuffer);
@@ -1458,7 +1458,7 @@
 	}
 }
 
-void FramebufferTexture2DOES(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
+void GL_APIENTRY FramebufferTexture2DOES(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
 {
 	TRACE("(GLenum target = 0x%X, GLenum attachment = 0x%X, GLenum textarget = 0x%X, "
 	      "GLuint texture = %d, GLint level = %d)", target, attachment, textarget, texture, level);
@@ -1535,7 +1535,7 @@
 	}
 }
 
-void Fogf(GLenum pname, GLfloat param)
+void GL_APIENTRY Fogf(GLenum pname, GLfloat param)
 {
 	TRACE("(GLenum pname = 0x%X, GLfloat param = %f)", pname, param);
 
@@ -1578,7 +1578,7 @@
 	}
 }
 
-void Fogfv(GLenum pname, const GLfloat *params)
+void GL_APIENTRY Fogfv(GLenum pname, const GLfloat *params)
 {
 	TRACE("(GLenum pname = 0x%X, const GLfloat *params)", pname);
 
@@ -1622,7 +1622,7 @@
 	}
 }
 
-void Fogx(GLenum pname, GLfixed param)
+void GL_APIENTRY Fogx(GLenum pname, GLfixed param)
 {
 	TRACE("(GLenum pname = 0x%X, GLfixed param = %d)", pname, param);
 
@@ -1665,12 +1665,12 @@
 	}
 }
 
-void Fogxv(GLenum pname, const GLfixed *params)
+void GL_APIENTRY Fogxv(GLenum pname, const GLfixed *params)
 {
 	UNIMPLEMENTED();
 }
 
-void FrontFace(GLenum mode)
+void GL_APIENTRY FrontFace(GLenum mode)
 {
 	TRACE("(GLenum mode = 0x%X)", mode);
 
@@ -1692,7 +1692,7 @@
 	}
 }
 
-void Frustumf(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)
+void GL_APIENTRY Frustumf(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)
 {
 	TRACE("(GLfloat left = %f, GLfloat right = %f, GLfloat bottom = %f, GLfloat top = %f, GLfloat zNear = %f, GLfloat zFar = %f)", left, right, bottom, top, zNear, zFar);
 
@@ -1709,12 +1709,12 @@
 	}
 }
 
-void Frustumx(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar)
+void GL_APIENTRY Frustumx(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar)
 {
 	Frustumf((float)left / 0x10000, (float)right / 0x10000, (float)bottom / 0x10000, (float)top / 0x10000, (float)zNear / 0x10000, (float)zFar / 0x10000);
 }
 
-void GenerateMipmapOES(GLenum target)
+void GL_APIENTRY GenerateMipmapOES(GLenum target)
 {
 	TRACE("(GLenum target = 0x%X)", target);
 
@@ -1742,7 +1742,7 @@
 	}
 }
 
-void GenBuffers(GLsizei n, GLuint* buffers)
+void GL_APIENTRY GenBuffers(GLsizei n, GLuint* buffers)
 {
 	TRACE("(GLsizei n = %d, GLuint* buffers = %p)", n, buffers);
 
@@ -1762,7 +1762,7 @@
 	}
 }
 
-void GenFramebuffersOES(GLsizei n, GLuint* framebuffers)
+void GL_APIENTRY GenFramebuffersOES(GLsizei n, GLuint* framebuffers)
 {
 	TRACE("(GLsizei n = %d, GLuint* framebuffers = %p)", n, framebuffers);
 
@@ -1782,7 +1782,7 @@
 	}
 }
 
-void GenRenderbuffersOES(GLsizei n, GLuint* renderbuffers)
+void GL_APIENTRY GenRenderbuffersOES(GLsizei n, GLuint* renderbuffers)
 {
 	TRACE("(GLsizei n = %d, GLuint* renderbuffers = %p)", n, renderbuffers);
 
@@ -1802,7 +1802,7 @@
 	}
 }
 
-void GenTextures(GLsizei n, GLuint* textures)
+void GL_APIENTRY GenTextures(GLsizei n, GLuint* textures)
 {
 	TRACE("(GLsizei n = %d, GLuint* textures =  %p)", n, textures);
 
@@ -1822,7 +1822,7 @@
 	}
 }
 
-void GetRenderbufferParameterivOES(GLenum target, GLenum pname, GLint* params)
+void GL_APIENTRY GetRenderbufferParameterivOES(GLenum target, GLenum pname, GLint* params)
 {
 	TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint* params = %p)", target, pname, params);
 
@@ -1864,7 +1864,7 @@
 	}
 }
 
-void GetBooleanv(GLenum pname, GLboolean* params)
+void GL_APIENTRY GetBooleanv(GLenum pname, GLboolean* params)
 {
 	TRACE("(GLenum pname = 0x%X, GLboolean* params = %p)",  pname, params);
 
@@ -1925,7 +1925,7 @@
 	}
 }
 
-void GetBufferParameteriv(GLenum target, GLenum pname, GLint* params)
+void GL_APIENTRY GetBufferParameteriv(GLenum target, GLenum pname, GLint* params)
 {
 	TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint* params = %p)", target, pname, params);
 
@@ -1967,17 +1967,17 @@
 	}
 }
 
-void GetClipPlanef(GLenum pname, GLfloat eqn[4])
+void GL_APIENTRY GetClipPlanef(GLenum pname, GLfloat eqn[4])
 {
 	UNIMPLEMENTED();
 }
 
-void GetClipPlanex(GLenum pname, GLfixed eqn[4])
+void GL_APIENTRY GetClipPlanex(GLenum pname, GLfixed eqn[4])
 {
 	UNIMPLEMENTED();
 }
 
-GLenum GetError(void)
+GLenum GL_APIENTRY GetError(void)
 {
 	TRACE("()");
 
@@ -1991,12 +1991,12 @@
 	return GL_NO_ERROR;
 }
 
-void GetFixedv(GLenum pname, GLfixed *params)
+void GL_APIENTRY GetFixedv(GLenum pname, GLfixed *params)
 {
 	UNIMPLEMENTED();
 }
 
-void GetFloatv(GLenum pname, GLfloat* params)
+void GL_APIENTRY GetFloatv(GLenum pname, GLfloat* params)
 {
 	TRACE("(GLenum pname = 0x%X, GLfloat* params = %p)", pname, params);
 
@@ -2054,7 +2054,7 @@
 	}
 }
 
-void GetFramebufferAttachmentParameterivOES(GLenum target, GLenum attachment, GLenum pname, GLint* params)
+void GL_APIENTRY GetFramebufferAttachmentParameterivOES(GLenum target, GLenum attachment, GLenum pname, GLint* params)
 {
 	TRACE("(GLenum target = 0x%X, GLenum attachment = 0x%X, GLenum pname = 0x%X, GLint* params = %p)",
 	      target, attachment, pname, params);
@@ -2146,7 +2146,7 @@
 	}
 }
 
-void GetIntegerv(GLenum pname, GLint* params)
+void GL_APIENTRY GetIntegerv(GLenum pname, GLint* params)
 {
 	TRACE("(GLenum pname = 0x%X, GLint* params = %p)", pname, params);
 
@@ -2211,27 +2211,27 @@
 	}
 }
 
-void GetLightfv(GLenum light, GLenum pname, GLfloat *params)
+void GL_APIENTRY GetLightfv(GLenum light, GLenum pname, GLfloat *params)
 {
 	UNIMPLEMENTED();
 }
 
-void GetLightxv(GLenum light, GLenum pname, GLfixed *params)
+void GL_APIENTRY GetLightxv(GLenum light, GLenum pname, GLfixed *params)
 {
 	UNIMPLEMENTED();
 }
 
-void GetMaterialfv(GLenum face, GLenum pname, GLfloat *params)
+void GL_APIENTRY GetMaterialfv(GLenum face, GLenum pname, GLfloat *params)
 {
 	UNIMPLEMENTED();
 }
 
-void GetMaterialxv(GLenum face, GLenum pname, GLfixed *params)
+void GL_APIENTRY GetMaterialxv(GLenum face, GLenum pname, GLfixed *params)
 {
 	UNIMPLEMENTED();
 }
 
-void GetPointerv(GLenum pname, GLvoid **params)
+void GL_APIENTRY GetPointerv(GLenum pname, GLvoid **params)
 {
 	TRACE("(GLenum pname = 0x%X, GLvoid **params = %p)", pname, params);
 
@@ -2246,7 +2246,7 @@
 	}
 }
 
-const GLubyte* GetString(GLenum name)
+const GLubyte* GL_APIENTRY GetString(GLenum name)
 {
 	TRACE("(GLenum name = 0x%X)", name);
 
@@ -2294,7 +2294,7 @@
 	}
 }
 
-void GetTexParameterfv(GLenum target, GLenum pname, GLfloat* params)
+void GL_APIENTRY GetTexParameterfv(GLenum target, GLenum pname, GLfloat* params)
 {
 	TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLfloat* params = %p)", target, pname, params);
 
@@ -2345,7 +2345,7 @@
 	}
 }
 
-void GetTexParameteriv(GLenum target, GLenum pname, GLint* params)
+void GL_APIENTRY GetTexParameteriv(GLenum target, GLenum pname, GLint* params)
 {
 	TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint* params = %p)", target, pname, params);
 
@@ -2396,27 +2396,27 @@
 	}
 }
 
-void GetTexEnvfv(GLenum env, GLenum pname, GLfloat *params)
+void GL_APIENTRY GetTexEnvfv(GLenum env, GLenum pname, GLfloat *params)
 {
 	UNIMPLEMENTED();
 }
 
-void GetTexEnviv(GLenum env, GLenum pname, GLint *params)
+void GL_APIENTRY GetTexEnviv(GLenum env, GLenum pname, GLint *params)
 {
 	UNIMPLEMENTED();
 }
 
-void GetTexEnvxv(GLenum env, GLenum pname, GLfixed *params)
+void GL_APIENTRY GetTexEnvxv(GLenum env, GLenum pname, GLfixed *params)
 {
 	UNIMPLEMENTED();
 }
 
-void GetTexParameterxv(GLenum target, GLenum pname, GLfixed *params)
+void GL_APIENTRY GetTexParameterxv(GLenum target, GLenum pname, GLfixed *params)
 {
 	UNIMPLEMENTED();
 }
 
-void Hint(GLenum target, GLenum mode)
+void GL_APIENTRY Hint(GLenum target, GLenum mode)
 {
 	TRACE("(GLenum target = 0x%X, GLenum mode = 0x%X)", target, mode);
 
@@ -2451,7 +2451,7 @@
 	}
 }
 
-GLboolean IsBuffer(GLuint buffer)
+GLboolean GL_APIENTRY IsBuffer(GLuint buffer)
 {
 	TRACE("(GLuint buffer = %d)", buffer);
 
@@ -2470,7 +2470,7 @@
 	return GL_FALSE;
 }
 
-GLboolean IsEnabled(GLenum cap)
+GLboolean GL_APIENTRY IsEnabled(GLenum cap)
 {
 	TRACE("(GLenum cap = 0x%X)", cap);
 
@@ -2530,7 +2530,7 @@
 	return GL_FALSE;
 }
 
-GLboolean IsFramebufferOES(GLuint framebuffer)
+GLboolean GL_APIENTRY IsFramebufferOES(GLuint framebuffer)
 {
 	TRACE("(GLuint framebuffer = %d)", framebuffer);
 
@@ -2549,7 +2549,7 @@
 	return GL_FALSE;
 }
 
-GLboolean IsTexture(GLuint texture)
+GLboolean GL_APIENTRY IsTexture(GLuint texture)
 {
 	TRACE("(GLuint texture = %d)", texture);
 
@@ -2568,7 +2568,7 @@
 	return GL_FALSE;
 }
 
-GLboolean IsRenderbufferOES(GLuint renderbuffer)
+GLboolean GL_APIENTRY IsRenderbufferOES(GLuint renderbuffer)
 {
 	TRACE("(GLuint renderbuffer = %d)", renderbuffer);
 
@@ -2587,7 +2587,7 @@
 	return GL_FALSE;
 }
 
-void LightModelf(GLenum pname, GLfloat param)
+void GL_APIENTRY LightModelf(GLenum pname, GLfloat param)
 {
 	TRACE("(GLenum pname = 0x%X, GLfloat param = %f)", pname, param);
 
@@ -2608,7 +2608,7 @@
 	}
 }
 
-void LightModelfv(GLenum pname, const GLfloat *params)
+void GL_APIENTRY LightModelfv(GLenum pname, const GLfloat *params)
 {
 	TRACE("(GLenum pname = 0x%X, const GLfloat *params)", pname);
 
@@ -2630,7 +2630,7 @@
 	}
 }
 
-void LightModelx(GLenum pname, GLfixed param)
+void GL_APIENTRY LightModelx(GLenum pname, GLfixed param)
 {
 	TRACE("(GLenum pname = 0x%X, GLfixed param = %d)", pname, param);
 
@@ -2651,7 +2651,7 @@
 	}
 }
 
-void LightModelxv(GLenum pname, const GLfixed *params)
+void GL_APIENTRY LightModelxv(GLenum pname, const GLfixed *params)
 {
 	TRACE("(GLenum pname = 0x%X, const GLfixed *params)", pname);
 
@@ -2673,7 +2673,7 @@
 	}
 }
 
-void Lightf(GLenum light, GLenum pname, GLfloat param)
+void GL_APIENTRY Lightf(GLenum light, GLenum pname, GLfloat param)
 {
 	TRACE("(GLenum light = 0x%X, GLenum pname = 0x%X, GLfloat param = %f)", light, pname, param);
 
@@ -2737,7 +2737,7 @@
 	}
 }
 
-void Lightfv(GLenum light, GLenum pname, const GLfloat *params)
+void GL_APIENTRY Lightfv(GLenum light, GLenum pname, const GLfloat *params)
 {
 	TRACE("(GLenum light = 0x%X, GLenum pname = 0x%X, const GLint *params)", light, pname);
 
@@ -2800,17 +2800,17 @@
 	}
 }
 
-void Lightx(GLenum light, GLenum pname, GLfixed param)
+void GL_APIENTRY Lightx(GLenum light, GLenum pname, GLfixed param)
 {
 	UNIMPLEMENTED();
 }
 
-void Lightxv(GLenum light, GLenum pname, const GLfixed *params)
+void GL_APIENTRY Lightxv(GLenum light, GLenum pname, const GLfixed *params)
 {
 	UNIMPLEMENTED();
 }
 
-void LineWidth(GLfloat width)
+void GL_APIENTRY LineWidth(GLfloat width)
 {
 	TRACE("(GLfloat width = %f)", width);
 
@@ -2827,12 +2827,12 @@
 	}
 }
 
-void LineWidthx(GLfixed width)
+void GL_APIENTRY LineWidthx(GLfixed width)
 {
 	LineWidth((float)width / 0x10000);
 }
 
-void LoadIdentity(void)
+void GL_APIENTRY LoadIdentity(void)
 {
 	TRACE("()");
 
@@ -2844,7 +2844,7 @@
 	}
 }
 
-void LoadMatrixf(const GLfloat *m)
+void GL_APIENTRY LoadMatrixf(const GLfloat *m)
 {
 	TRACE("(const GLfloat *m)");
 
@@ -2856,7 +2856,7 @@
 	}
 }
 
-void LoadMatrixx(const GLfixed *m)
+void GL_APIENTRY LoadMatrixx(const GLfixed *m)
 {
 	GLfloat matrix[16] =
 	{
@@ -2869,7 +2869,7 @@
 	LoadMatrixf(matrix);
 }
 
-void LogicOp(GLenum opcode)
+void GL_APIENTRY LogicOp(GLenum opcode)
 {
 	TRACE("(GLenum opcode = 0x%X)", opcode);
 
@@ -2904,7 +2904,7 @@
 	}
 }
 
-void Materialf(GLenum face, GLenum pname, GLfloat param)
+void GL_APIENTRY Materialf(GLenum face, GLenum pname, GLfloat param)
 {
 	TRACE("(GLenum face = 0x%X, GLenum pname = 0x%X, GLfloat param = %f)", face, pname, param);
 
@@ -2938,7 +2938,7 @@
 	}
 }
 
-void Materialfv(GLenum face, GLenum pname, const GLfloat *params)
+void GL_APIENTRY Materialfv(GLenum face, GLenum pname, const GLfloat *params)
 {
 	TRACE("(GLenum face = 0x%X, GLenum pname = 0x%X, GLfloat params)", face, pname);
 
@@ -2978,17 +2978,17 @@
 	}
 }
 
-void Materialx(GLenum face, GLenum pname, GLfixed param)
+void GL_APIENTRY Materialx(GLenum face, GLenum pname, GLfixed param)
 {
 	UNIMPLEMENTED();
 }
 
-void Materialxv(GLenum face, GLenum pname, const GLfixed *params)
+void GL_APIENTRY Materialxv(GLenum face, GLenum pname, const GLfixed *params)
 {
 	UNIMPLEMENTED();
 }
 
-void MatrixMode(GLenum mode)
+void GL_APIENTRY MatrixMode(GLenum mode)
 {
 	TRACE("(GLenum mode = 0x%X)", mode);
 
@@ -3000,7 +3000,7 @@
 	}
 }
 
-void MultMatrixf(const GLfloat *m)
+void GL_APIENTRY MultMatrixf(const GLfloat *m)
 {
 	TRACE("(const GLfloat *m)");
 
@@ -3012,7 +3012,7 @@
 	}
 }
 
-void MultMatrixx(const GLfixed *m)
+void GL_APIENTRY MultMatrixx(const GLfixed *m)
 {
 	GLfloat matrix[16] =
 	{
@@ -3025,7 +3025,7 @@
 	MultMatrixf(matrix);
 }
 
-void MultiTexCoord4f(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q)
+void GL_APIENTRY MultiTexCoord4f(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q)
 {
 	TRACE("(GLenum target = 0x%X, GLfloat s = %f, GLfloat t = %f, GLfloat r = %f, GLfloat q = %f)", target, s, t, r, q);
 
@@ -3046,12 +3046,12 @@
 	}
 }
 
-void MultiTexCoord4x(GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q)
+void GL_APIENTRY MultiTexCoord4x(GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q)
 {
 	UNIMPLEMENTED();
 }
 
-void Normal3f(GLfloat nx, GLfloat ny, GLfloat nz)
+void GL_APIENTRY Normal3f(GLfloat nx, GLfloat ny, GLfloat nz)
 {
 	TRACE("(GLfloat nx, GLfloat ny, GLfloat nz)", nx, ny, nz);
 
@@ -3063,19 +3063,19 @@
 	}
 }
 
-void Normal3x(GLfixed nx, GLfixed ny, GLfixed nz)
+void GL_APIENTRY Normal3x(GLfixed nx, GLfixed ny, GLfixed nz)
 {
 	UNIMPLEMENTED();
 }
 
-void NormalPointer(GLenum type, GLsizei stride, const GLvoid *pointer)
+void GL_APIENTRY NormalPointer(GLenum type, GLsizei stride, const GLvoid *pointer)
 {
 	TRACE("(GLenum type = 0x%X, GLsizei stride = %d, const GLvoid *pointer = %p)", type, stride, pointer);
 
 	VertexAttribPointer(sw::Normal, 3, type, true, stride, pointer);
 }
 
-void Orthof(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)
+void GL_APIENTRY Orthof(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)
 {
 	TRACE("(GLfloat left = %f, GLfloat right = %f, GLfloat bottom = %f, GLfloat top = %f, GLfloat zNear = %f, GLfloat zFar = %f)", left, right, bottom, top, zNear, zFar);
 
@@ -3092,12 +3092,12 @@
 	}
 }
 
-void Orthox(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar)
+void GL_APIENTRY Orthox(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar)
 {
 	Orthof((float)left / 0x10000, (float)right / 0x10000, (float)bottom / 0x10000, (float)top / 0x10000, (float)zNear / 0x10000, (float)zFar / 0x10000);
 }
 
-void PixelStorei(GLenum pname, GLint param)
+void GL_APIENTRY PixelStorei(GLenum pname, GLint param)
 {
 	TRACE("(GLenum pname = 0x%X, GLint param = %d)", pname, param);
 
@@ -3129,7 +3129,7 @@
 	}
 }
 
-void PointParameterf(GLenum pname, GLfloat param)
+void GL_APIENTRY PointParameterf(GLenum pname, GLfloat param)
 {
 	TRACE("(GLenum pname = 0x%X, GLfloat param = %f)", pname, param);
 
@@ -3168,7 +3168,7 @@
 	}
 }
 
-void PointParameterfv(GLenum pname, const GLfloat *params)
+void GL_APIENTRY PointParameterfv(GLenum pname, const GLfloat *params)
 {
 	TRACE("(GLenum pname = 0x%X, const GLfloat *params)", pname);
 
@@ -3208,7 +3208,7 @@
 	}
 }
 
-void PointParameterx(GLenum pname, GLfixed param)
+void GL_APIENTRY PointParameterx(GLenum pname, GLfixed param)
 {
 	TRACE("(GLenum pname = 0x%X, GLfixed param = %d)", pname, param);
 
@@ -3247,7 +3247,7 @@
 	}
 }
 
-void PointParameterxv(GLenum pname, const GLfixed *params)
+void GL_APIENTRY PointParameterxv(GLenum pname, const GLfixed *params)
 {
 	TRACE("(GLenum pname = 0x%X, const GLfixed *params)", pname);
 
@@ -3287,7 +3287,7 @@
 	}
 }
 
-void PointSize(GLfloat size)
+void GL_APIENTRY PointSize(GLfloat size)
 {
 	TRACE("(GLfloat size = %f)", size);
 
@@ -3304,7 +3304,7 @@
 	}
 }
 
-void PointSizePointerOES(GLenum type, GLsizei stride, const GLvoid *pointer)
+void GL_APIENTRY PointSizePointerOES(GLenum type, GLsizei stride, const GLvoid *pointer)
 {
 	TRACE("(GLenum type = 0x%X, GLsizei stride = %d, const GLvoid *pointer = %p)", type, stride, pointer);
 
@@ -3320,12 +3320,12 @@
 	VertexAttribPointer(sw::PointSize, 1, type, true, stride, pointer);
 }
 
-void PointSizex(GLfixed size)
+void GL_APIENTRY PointSizex(GLfixed size)
 {
 	PointSize((float)size / 0x10000);
 }
 
-void PolygonOffset(GLfloat factor, GLfloat units)
+void GL_APIENTRY PolygonOffset(GLfloat factor, GLfloat units)
 {
 	TRACE("(GLfloat factor = %f, GLfloat units = %f)", factor, units);
 
@@ -3337,12 +3337,12 @@
 	}
 }
 
-void PolygonOffsetx(GLfixed factor, GLfixed units)
+void GL_APIENTRY PolygonOffsetx(GLfixed factor, GLfixed units)
 {
 	PolygonOffset((float)factor / 0x10000, (float)units / 0x10000);
 }
 
-void PopMatrix(void)
+void GL_APIENTRY PopMatrix(void)
 {
 	TRACE("()");
 
@@ -3354,7 +3354,7 @@
 	}
 }
 
-void PushMatrix(void)
+void GL_APIENTRY PushMatrix(void)
 {
 	TRACE("()");
 
@@ -3366,7 +3366,7 @@
 	}
 }
 
-void ReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels)
+void GL_APIENTRY ReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels)
 {
 	TRACE("(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d, "
 	      "GLenum format = 0x%X, GLenum type = 0x%X, GLvoid* pixels = %p)",
@@ -3385,7 +3385,7 @@
 	}
 }
 
-void RenderbufferStorageOES(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
+void GL_APIENTRY RenderbufferStorageOES(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
 {
 	TRACE("(GLenum target = 0x%X, GLenum internalformat = 0x%X, GLsizei width = %d, GLsizei height = %d)",
 	      target, internalformat, width, height);
@@ -3448,7 +3448,7 @@
 	}
 }
 
-void Rotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z)
+void GL_APIENTRY Rotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z)
 {
 	TRACE("(GLfloat angle = %f, GLfloat x = %f, GLfloat y = %f, GLfloat z = %f)", angle, x, y, z);
 
@@ -3460,12 +3460,12 @@
 	}
 }
 
-void Rotatex(GLfixed angle, GLfixed x, GLfixed y, GLfixed z)
+void GL_APIENTRY Rotatex(GLfixed angle, GLfixed x, GLfixed y, GLfixed z)
 {
 	Rotatef((float)angle / 0x10000, (float)x / 0x10000, (float)y / 0x10000, (float)z / 0x10000);
 }
 
-void SampleCoverage(GLclampf value, GLboolean invert)
+void GL_APIENTRY SampleCoverage(GLclampf value, GLboolean invert)
 {
 	TRACE("(GLclampf value = %f, GLboolean invert = %d)", value, invert);
 
@@ -3477,12 +3477,12 @@
 	}
 }
 
-void SampleCoveragex(GLclampx value, GLboolean invert)
+void GL_APIENTRY SampleCoveragex(GLclampx value, GLboolean invert)
 {
 	SampleCoverage((float)value / 0x10000, invert);
 }
 
-void Scalef(GLfloat x, GLfloat y, GLfloat z)
+void GL_APIENTRY Scalef(GLfloat x, GLfloat y, GLfloat z)
 {
 	TRACE("(GLfloat x = %f, GLfloat y = %f, GLfloat z = %f)", x, y, z);
 
@@ -3494,12 +3494,12 @@
 	}
 }
 
-void Scalex(GLfixed x, GLfixed y, GLfixed z)
+void GL_APIENTRY Scalex(GLfixed x, GLfixed y, GLfixed z)
 {
 	Scalef((float)x / 0x10000, (float)y / 0x10000, (float)z / 0x10000);
 }
 
-void Scissor(GLint x, GLint y, GLsizei width, GLsizei height)
+void GL_APIENTRY Scissor(GLint x, GLint y, GLsizei width, GLsizei height)
 {
 	TRACE("(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d)", x, y, width, height);
 
@@ -3516,7 +3516,7 @@
 	}
 }
 
-void ShadeModel(GLenum mode)
+void GL_APIENTRY ShadeModel(GLenum mode)
 {
 	switch(mode)
 	{
@@ -3535,7 +3535,7 @@
 	}
 }
 
-void StencilFunc(GLenum func, GLint ref, GLuint mask)
+void GL_APIENTRY StencilFunc(GLenum func, GLint ref, GLuint mask)
 {
 	TRACE("(GLenum func = 0x%X, GLint ref = %d, GLuint mask = %d)",  func, ref, mask);
 
@@ -3562,7 +3562,7 @@
 	}
 }
 
-void StencilMask(GLuint mask)
+void GL_APIENTRY StencilMask(GLuint mask)
 {
 	TRACE("(GLuint mask = %d)", mask);
 
@@ -3574,7 +3574,7 @@
 	}
 }
 
-void StencilOp(GLenum fail, GLenum zfail, GLenum zpass)
+void GL_APIENTRY StencilOp(GLenum fail, GLenum zfail, GLenum zpass)
 {
 	TRACE("(GLenum fail = 0x%X, GLenum zfail = 0x%X, GLenum zpas = 0x%Xs)", fail, zfail, zpass);
 
@@ -3631,7 +3631,7 @@
 	}
 }
 
-void TexCoordPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)
+void GL_APIENTRY TexCoordPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)
 {
 	TRACE("(GLint size = %d, GLenum type = 0x%X, GLsizei stride = %d, const GLvoid *pointer = %p)", size, type, stride, pointer);
 
@@ -3649,14 +3649,14 @@
 	}
 }
 
-void TexEnvi(GLenum target, GLenum pname, GLint param);
+void GL_APIENTRY TexEnvi(GLenum target, GLenum pname, GLint param);
 
-void TexEnvf(GLenum target, GLenum pname, GLfloat param)
+void GL_APIENTRY TexEnvf(GLenum target, GLenum pname, GLfloat param)
 {
 	TexEnvi(target, pname, (GLint)param);
 }
 
-void TexEnvfv(GLenum target, GLenum pname, const GLfloat *params)
+void GL_APIENTRY TexEnvfv(GLenum target, GLenum pname, const GLfloat *params)
 {
 	TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, const GLfloat *params)", target, pname);
 
@@ -3913,7 +3913,7 @@
 	}
 }
 
-void TexEnvi(GLenum target, GLenum pname, GLint param)
+void GL_APIENTRY TexEnvi(GLenum target, GLenum pname, GLint param)
 {
 	TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint param = %d)", target, pname, param);
 
@@ -4168,23 +4168,23 @@
 	}
 }
 
-void TexEnvx(GLenum target, GLenum pname, GLfixed param)
+void GL_APIENTRY TexEnvx(GLenum target, GLenum pname, GLfixed param)
 {
 	TexEnvi(target, pname, (GLint)param);
 }
 
-void TexEnviv(GLenum target, GLenum pname, const GLint *params)
+void GL_APIENTRY TexEnviv(GLenum target, GLenum pname, const GLint *params)
 {
 	UNIMPLEMENTED();
 }
 
-void TexEnvxv(GLenum target, GLenum pname, const GLfixed *params)
+void GL_APIENTRY TexEnvxv(GLenum target, GLenum pname, const GLfixed *params)
 {
 	UNIMPLEMENTED();
 }
 
-void TexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
-                GLint border, GLenum format, GLenum type, const GLvoid* pixels)
+void GL_APIENTRY TexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
+                            GLint border, GLenum format, GLenum type, const GLvoid* pixels)
 {
 	TRACE("(GLenum target = 0x%X, GLint level = %d, GLint internalformat = %d, GLsizei width = %d, GLsizei height = %d, "
 	      "GLint border = %d, GLenum format = 0x%X, GLenum type = 0x%X, const GLvoid* pixels =  %p)",
@@ -4299,7 +4299,7 @@
 	}
 }
 
-void TexParameterf(GLenum target, GLenum pname, GLfloat param)
+void GL_APIENTRY TexParameterf(GLenum target, GLenum pname, GLfloat param)
 {
 	TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLfloat param = %f)", target, pname, param);
 
@@ -4364,12 +4364,12 @@
 	}
 }
 
-void TexParameterfv(GLenum target, GLenum pname, const GLfloat* params)
+void GL_APIENTRY TexParameterfv(GLenum target, GLenum pname, const GLfloat* params)
 {
 	TexParameterf(target, pname, *params);
 }
 
-void TexParameteri(GLenum target, GLenum pname, GLint param)
+void GL_APIENTRY TexParameteri(GLenum target, GLenum pname, GLint param)
 {
 	TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint param = %d)", target, pname, param);
 
@@ -4434,7 +4434,7 @@
 	}
 }
 
-void TexParameteriv(GLenum target, GLenum pname, const GLint* params)
+void GL_APIENTRY TexParameteriv(GLenum target, GLenum pname, const GLint* params)
 {
 	TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint param = %p)", target, pname, params);
 
@@ -4472,18 +4472,18 @@
 	}
 }
 
-void TexParameterx(GLenum target, GLenum pname, GLfixed param)
+void GL_APIENTRY TexParameterx(GLenum target, GLenum pname, GLfixed param)
 {
 	TexParameteri(target, pname, (GLint)param);
 }
 
-void TexParameterxv(GLenum target, GLenum pname, const GLfixed *params)
+void GL_APIENTRY TexParameterxv(GLenum target, GLenum pname, const GLfixed *params)
 {
 	UNIMPLEMENTED();
 }
 
-void TexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
-                   GLenum format, GLenum type, const GLvoid* pixels)
+void GL_APIENTRY TexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
+                               GLenum format, GLenum type, const GLvoid* pixels)
 {
 	TRACE("(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "
 	      "GLsizei width = %d, GLsizei height = %d, GLenum format = 0x%X, GLenum type = 0x%X, "
@@ -4535,7 +4535,7 @@
 	}
 }
 
-void Translatef(GLfloat x, GLfloat y, GLfloat z)
+void GL_APIENTRY Translatef(GLfloat x, GLfloat y, GLfloat z)
 {
 	TRACE("(GLfloat x = %f, GLfloat y = %f, GLfloat z = %f)", x, y, z);
 
@@ -4547,12 +4547,12 @@
 	}
 }
 
-void Translatex(GLfixed x, GLfixed y, GLfixed z)
+void GL_APIENTRY Translatex(GLfixed x, GLfixed y, GLfixed z)
 {
 	Translatef((float)x / 0x10000, (float)y / 0x10000, (float)z / 0x10000);
 }
 
-void VertexPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)
+void GL_APIENTRY VertexPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)
 {
 	TRACE("(GLint size = %d, GLenum type = 0x%X, GLsizei stride = %d, const GLvoid *pointer = %p)", size, type, stride, pointer);
 
@@ -4564,7 +4564,7 @@
 	VertexAttribPointer(sw::Position, size, type, false, stride, pointer);
 }
 
-void Viewport(GLint x, GLint y, GLsizei width, GLsizei height)
+void GL_APIENTRY Viewport(GLint x, GLint y, GLsizei width, GLsizei height)
 {
 	TRACE("(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d)", x, y, width, height);
 
@@ -4581,7 +4581,7 @@
 	}
 }
 
-void EGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image)
+void GL_APIENTRY EGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image)
 {
 	TRACE("(GLenum target = 0x%X, GLeglImageOES image = %p)", target, image);
 
@@ -4623,19 +4623,19 @@
 	}
 }
 
-void EGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImageOES image)
+void GL_APIENTRY EGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImageOES image)
 {
 	TRACE("(GLenum target = 0x%X, GLeglImageOES image = %p)", target, image);
 
 	UNIMPLEMENTED();
 }
 
-void DrawTexsOES(GLshort x, GLshort y, GLshort z, GLshort width, GLshort height)
+void GL_APIENTRY DrawTexsOES(GLshort x, GLshort y, GLshort z, GLshort width, GLshort height)
 {
 	UNIMPLEMENTED();
 }
 
-void DrawTexiOES(GLint x, GLint y, GLint z, GLint width, GLint height)
+void GL_APIENTRY DrawTexiOES(GLint x, GLint y, GLint z, GLint width, GLint height)
 {
 	TRACE("(GLint x = %d, GLint y = %d, GLint z = %d, GLint width = %d, GLint height = %d)", x, y, z, width, height);
 
@@ -4652,27 +4652,27 @@
 	}
 }
 
-void DrawTexxOES(GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height)
+void GL_APIENTRY DrawTexxOES(GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height)
 {
 	UNIMPLEMENTED();
 }
 
-void DrawTexsvOES(const GLshort *coords)
+void GL_APIENTRY DrawTexsvOES(const GLshort *coords)
 {
 	UNIMPLEMENTED();
 }
 
-void DrawTexivOES(const GLint *coords)
+void GL_APIENTRY DrawTexivOES(const GLint *coords)
 {
 	UNIMPLEMENTED();
 }
 
-void DrawTexxvOES(const GLfixed *coords)
+void GL_APIENTRY DrawTexxvOES(const GLfixed *coords)
 {
 	UNIMPLEMENTED();
 }
 
-void DrawTexfOES(GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height)
+void GL_APIENTRY DrawTexfOES(GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height)
 {
 	TRACE("(GLfloat x = %f, GLfloat y = %f, GLfloat z = %f, GLfloat width = %f, GLfloat height = %f)", x, y, z, width, height);
 
@@ -4689,7 +4689,7 @@
 	}
 }
 
-void DrawTexfvOES(const GLfloat *coords)
+void GL_APIENTRY DrawTexfvOES(const GLfloat *coords)
 {
 	UNIMPLEMENTED();
 }
diff --git a/src/OpenGL/libGLES_CM/libGLES_CM.hpp b/src/OpenGL/libGLES_CM/libGLES_CM.hpp
index 80ce1f2..325578e 100644
--- a/src/OpenGL/libGLES_CM/libGLES_CM.hpp
+++ b/src/OpenGL/libGLES_CM/libGLES_CM.hpp
@@ -40,184 +40,184 @@
 public:
 	LibGLES_CMexports();
 
-	void (*glActiveTexture)(GLenum texture);
-	void (*glAlphaFunc)(GLenum func, GLclampf ref);
-	void (*glAlphaFuncx)(GLenum func, GLclampx ref);
-	void (*glBindBuffer)(GLenum target, GLuint buffer);
-	void (*glBindFramebuffer)(GLenum target, GLuint framebuffer);
-	void (*glBindFramebufferOES)(GLenum target, GLuint framebuffer);
-	void (*glBindRenderbufferOES)(GLenum target, GLuint renderbuffer);
-	void (*glBindTexture)(GLenum target, GLuint texture);
-	void (*glBlendEquationOES)(GLenum mode);
-	void (*glBlendEquationSeparateOES)(GLenum modeRGB, GLenum modeAlpha);
-	void (*glBlendFunc)(GLenum sfactor, GLenum dfactor);
-	void (*glBlendFuncSeparateOES)(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
-	void (*glBufferData)(GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage);
-	void (*glBufferSubData)(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data);
-	GLenum (*glCheckFramebufferStatusOES)(GLenum target);
-	void (*glClear)(GLbitfield mask);
-	void (*glClearColor)(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
-	void (*glClearColorx)(GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha);
-	void (*glClearDepthf)(GLclampf depth);
-	void (*glClearDepthx)(GLclampx depth);
-	void (*glClearStencil)(GLint s);
-	void (*glClientActiveTexture)(GLenum texture);
-	void (*glClipPlanef)(GLenum plane, const GLfloat *equation);
-	void (*glClipPlanex)(GLenum plane, const GLfixed *equation);
-	void (*glColor4f)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
-	void (*glColor4ub)(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha);
-	void (*glColor4x)(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
-	void (*glColorMask)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
-	void (*glColorPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
-	void (*glCompressedTexImage2D)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height,
-	                               GLint border, GLsizei imageSize, const GLvoid* data);
-	void (*glCompressedTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
-	                                  GLenum format, GLsizei imageSize, const GLvoid* data);
-	void (*glCopyTexImage2D)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
-	void (*glCopyTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
-	void (*glCullFace)(GLenum mode);
-	void (*glDeleteBuffers)(GLsizei n, const GLuint* buffers);
-	void (*glDeleteFramebuffersOES)(GLsizei n, const GLuint* framebuffers);
-	void (*glDeleteRenderbuffersOES)(GLsizei n, const GLuint* renderbuffers);
-	void (*glDeleteTextures)(GLsizei n, const GLuint* textures);
-	void (*glDepthFunc)(GLenum func);
-	void (*glDepthMask)(GLboolean flag);
-	void (*glDepthRangex)(GLclampx zNear, GLclampx zFar);
-	void (*glDepthRangef)(GLclampf zNear, GLclampf zFar);
-	void (*glDisable)(GLenum cap);
-	void (*glDisableClientState)(GLenum array);
-	void (*glDrawArrays)(GLenum mode, GLint first, GLsizei count);
-	void (*glDrawElements)(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices);
-	void (*glEnable)(GLenum cap);
-	void (*glEnableClientState)(GLenum array);
-	void (*glFinish)(void);
-	void (*glFlush)(void);
-	void (*glFramebufferRenderbufferOES)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
-	void (*glFramebufferTexture2DOES)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
-	void (*glFogf)(GLenum pname, GLfloat param);
-	void (*glFogfv)(GLenum pname, const GLfloat *params);
-	void (*glFogx)(GLenum pname, GLfixed param);
-	void (*glFogxv)(GLenum pname, const GLfixed *params);
-	void (*glFrontFace)(GLenum mode);
-	void (*glFrustumf)(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar);
-	void (*glFrustumx)(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar);
-	void (*glGenerateMipmapOES)(GLenum target);
-	void (*glGenBuffers)(GLsizei n, GLuint* buffers);
-	void (*glGenFramebuffersOES)(GLsizei n, GLuint* framebuffers);
-	void (*glGenRenderbuffersOES)(GLsizei n, GLuint* renderbuffers);
-	void (*glGenTextures)(GLsizei n, GLuint* textures);
-	void (*glGetRenderbufferParameterivOES)(GLenum target, GLenum pname, GLint* params);
-	void (*glGetBooleanv)(GLenum pname, GLboolean* params);
-	void (*glGetBufferParameteriv)(GLenum target, GLenum pname, GLint* params);
-	void (*glGetClipPlanef)(GLenum pname, GLfloat eqn[4]);
-	void (*glGetClipPlanex)(GLenum pname, GLfixed eqn[4]);
-	GLenum (*glGetError)(void);
-	void (*glGetFixedv)(GLenum pname, GLfixed *params);
-	void (*glGetFloatv)(GLenum pname, GLfloat* params);
-	void (*glGetFramebufferAttachmentParameterivOES)(GLenum target, GLenum attachment, GLenum pname, GLint* params);
-	void (*glGetIntegerv)(GLenum pname, GLint* params);
-	void (*glGetLightfv)(GLenum light, GLenum pname, GLfloat *params);
-	void (*glGetLightxv)(GLenum light, GLenum pname, GLfixed *params);
-	void (*glGetMaterialfv)(GLenum face, GLenum pname, GLfloat *params);
-	void (*glGetMaterialxv)(GLenum face, GLenum pname, GLfixed *params);
-	void (*glGetPointerv)(GLenum pname, GLvoid **params);
-	const GLubyte* (*glGetString)(GLenum name);
-	void (*glGetTexParameterfv)(GLenum target, GLenum pname, GLfloat* params);
-	void (*glGetTexParameteriv)(GLenum target, GLenum pname, GLint* params);
-	void (*glGetTexEnvfv)(GLenum env, GLenum pname, GLfloat *params);
-	void (*glGetTexEnviv)(GLenum env, GLenum pname, GLint *params);
-	void (*glGetTexEnvxv)(GLenum env, GLenum pname, GLfixed *params);
-	void (*glGetTexParameterxv)(GLenum target, GLenum pname, GLfixed *params);
-	void (*glHint)(GLenum target, GLenum mode);
-	GLboolean (*glIsBuffer)(GLuint buffer);
-	GLboolean (*glIsEnabled)(GLenum cap);
-	GLboolean (*glIsFramebufferOES)(GLuint framebuffer);
-	GLboolean (*glIsTexture)(GLuint texture);
-	GLboolean (*glIsRenderbufferOES)(GLuint renderbuffer);
-	void (*glLightModelf)(GLenum pname, GLfloat param);
-	void (*glLightModelfv)(GLenum pname, const GLfloat *params);
-	void (*glLightModelx)(GLenum pname, GLfixed param);
-	void (*glLightModelxv)(GLenum pname, const GLfixed *params);
-	void (*glLightf)(GLenum light, GLenum pname, GLfloat param);
-	void (*glLightfv)(GLenum light, GLenum pname, const GLfloat *params);
-	void (*glLightx)(GLenum light, GLenum pname, GLfixed param);
-	void (*glLightxv)(GLenum light, GLenum pname, const GLfixed *params);
-	void (*glLineWidth)(GLfloat width);
-	void (*glLineWidthx)(GLfixed width);
-	void (*glLoadIdentity)(void);
-	void (*glLoadMatrixf)(const GLfloat *m);
-	void (*glLoadMatrixx)(const GLfixed *m);
-	void (*glLogicOp)(GLenum opcode);
-	void (*glMaterialf)(GLenum face, GLenum pname, GLfloat param);
-	void (*glMaterialfv)(GLenum face, GLenum pname, const GLfloat *params);
-	void (*glMaterialx)(GLenum face, GLenum pname, GLfixed param);
-	void (*glMaterialxv)(GLenum face, GLenum pname, const GLfixed *params);
-	void (*glMatrixMode)(GLenum mode);
-	void (*glMultMatrixf)(const GLfloat *m);
-	void (*glMultMatrixx)(const GLfixed *m);
-	void (*glMultiTexCoord4f)(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
-	void (*glMultiTexCoord4x)(GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q);
-	void (*glNormal3f)(GLfloat nx, GLfloat ny, GLfloat nz);
-	void (*glNormal3x)(GLfixed nx, GLfixed ny, GLfixed nz);
-	void (*glNormalPointer)(GLenum type, GLsizei stride, const GLvoid *pointer);
-	void (*glOrthof)(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar);
-	void (*glOrthox)(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar);
-	void (*glPixelStorei)(GLenum pname, GLint param);
-	void (*glPointParameterf)(GLenum pname, GLfloat param);
-	void (*glPointParameterfv)(GLenum pname, const GLfloat *params);
-	void (*glPointParameterx)(GLenum pname, GLfixed param);
-	void (*glPointParameterxv)(GLenum pname, const GLfixed *params);
-	void (*glPointSize)(GLfloat size);
-	void (*glPointSizePointerOES)(GLenum type, GLsizei stride, const GLvoid *pointer);
-	void (*glPointSizex)(GLfixed size);
-	void (*glPolygonOffset)(GLfloat factor, GLfloat units);
-	void (*glPolygonOffsetx)(GLfixed factor, GLfixed units);
-	void (*glPopMatrix)(void);
-	void (*glPushMatrix)(void);
-	void (*glReadPixels)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels);
-	void (*glRenderbufferStorageOES)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
-	void (*glRotatef)(GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
-	void (*glRotatex)(GLfixed angle, GLfixed x, GLfixed y, GLfixed z);
-	void (*glSampleCoverage)(GLclampf value, GLboolean invert);
-	void (*glSampleCoveragex)(GLclampx value, GLboolean invert);
-	void (*glScalef)(GLfloat x, GLfloat y, GLfloat z);
-	void (*glScalex)(GLfixed x, GLfixed y, GLfixed z);
-	void (*glScissor)(GLint x, GLint y, GLsizei width, GLsizei height);
-	void (*glShadeModel)(GLenum mode);
-	void (*glStencilFunc)(GLenum func, GLint ref, GLuint mask);
-	void (*glStencilMask)(GLuint mask);
-	void (*glStencilOp)(GLenum fail, GLenum zfail, GLenum zpass);
-	void (*glTexCoordPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
-	void (*glTexEnvf)(GLenum target, GLenum pname, GLfloat param);
-	void (*glTexEnvfv)(GLenum target, GLenum pname, const GLfloat *params);
-	void (*glTexEnvi)(GLenum target, GLenum pname, GLint param);
-	void (*glTexEnvx)(GLenum target, GLenum pname, GLfixed param);
-	void (*glTexEnviv)(GLenum target, GLenum pname, const GLint *params);
-	void (*glTexEnvxv)(GLenum target, GLenum pname, const GLfixed *params);
-	void (*glTexImage2D)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
-	                     GLint border, GLenum format, GLenum type, const GLvoid* pixels);
-	void (*glTexParameterf)(GLenum target, GLenum pname, GLfloat param);
-	void (*glTexParameterfv)(GLenum target, GLenum pname, const GLfloat* params);
-	void (*glTexParameteri)(GLenum target, GLenum pname, GLint param);
-	void (*glTexParameteriv)(GLenum target, GLenum pname, const GLint* params);
-	void (*glTexParameterx)(GLenum target, GLenum pname, GLfixed param);
-	void (*glTexParameterxv)(GLenum target, GLenum pname, const GLfixed *params);
-	void (*glTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
-	                        GLenum format, GLenum type, const GLvoid* pixels);
-	void (*glTranslatef)(GLfloat x, GLfloat y, GLfloat z);
-	void (*glTranslatex)(GLfixed x, GLfixed y, GLfixed z);
-	void (*glVertexPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
-	void (*glViewport)(GLint x, GLint y, GLsizei width, GLsizei height);
-	void (*glEGLImageTargetTexture2DOES)(GLenum target, GLeglImageOES image);
-	void (*glEGLImageTargetRenderbufferStorageOES)(GLenum target, GLeglImageOES image);
-	void (*glDrawTexsOES)(GLshort x, GLshort y, GLshort z, GLshort width, GLshort height);
-	void (*glDrawTexiOES)(GLint x, GLint y, GLint z, GLint width, GLint height);
-	void (*glDrawTexxOES)(GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height);
-	void (*glDrawTexsvOES)(const GLshort *coords);
-	void (*glDrawTexivOES)(const GLint *coords);
-	void (*glDrawTexxvOES)(const GLfixed *coords);
-	void (*glDrawTexfOES)(GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height);
-	void (*glDrawTexfvOES)(const GLfloat *coords);
+	void (GL_APIENTRY *glActiveTexture)(GLenum texture);
+	void (GL_APIENTRY *glAlphaFunc)(GLenum func, GLclampf ref);
+	void (GL_APIENTRY *glAlphaFuncx)(GLenum func, GLclampx ref);
+	void (GL_APIENTRY *glBindBuffer)(GLenum target, GLuint buffer);
+	void (GL_APIENTRY *glBindFramebuffer)(GLenum target, GLuint framebuffer);
+	void (GL_APIENTRY *glBindFramebufferOES)(GLenum target, GLuint framebuffer);
+	void (GL_APIENTRY *glBindRenderbufferOES)(GLenum target, GLuint renderbuffer);
+	void (GL_APIENTRY *glBindTexture)(GLenum target, GLuint texture);
+	void (GL_APIENTRY *glBlendEquationOES)(GLenum mode);
+	void (GL_APIENTRY *glBlendEquationSeparateOES)(GLenum modeRGB, GLenum modeAlpha);
+	void (GL_APIENTRY *glBlendFunc)(GLenum sfactor, GLenum dfactor);
+	void (GL_APIENTRY *glBlendFuncSeparateOES)(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+	void (GL_APIENTRY *glBufferData)(GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage);
+	void (GL_APIENTRY *glBufferSubData)(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data);
+	GLenum (GL_APIENTRY *glCheckFramebufferStatusOES)(GLenum target);
+	void (GL_APIENTRY *glClear)(GLbitfield mask);
+	void (GL_APIENTRY *glClearColor)(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
+	void (GL_APIENTRY *glClearColorx)(GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha);
+	void (GL_APIENTRY *glClearDepthf)(GLclampf depth);
+	void (GL_APIENTRY *glClearDepthx)(GLclampx depth);
+	void (GL_APIENTRY *glClearStencil)(GLint s);
+	void (GL_APIENTRY *glClientActiveTexture)(GLenum texture);
+	void (GL_APIENTRY *glClipPlanef)(GLenum plane, const GLfloat *equation);
+	void (GL_APIENTRY *glClipPlanex)(GLenum plane, const GLfixed *equation);
+	void (GL_APIENTRY *glColor4f)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+	void (GL_APIENTRY *glColor4ub)(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha);
+	void (GL_APIENTRY *glColor4x)(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
+	void (GL_APIENTRY *glColorMask)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+	void (GL_APIENTRY *glColorPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+	void (GL_APIENTRY *glCompressedTexImage2D)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height,
+	                                           GLint border, GLsizei imageSize, const GLvoid* data);
+	void (GL_APIENTRY *glCompressedTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
+	                                              GLenum format, GLsizei imageSize, const GLvoid* data);
+	void (GL_APIENTRY *glCopyTexImage2D)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+	void (GL_APIENTRY *glCopyTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+	void (GL_APIENTRY *glCullFace)(GLenum mode);
+	void (GL_APIENTRY *glDeleteBuffers)(GLsizei n, const GLuint* buffers);
+	void (GL_APIENTRY *glDeleteFramebuffersOES)(GLsizei n, const GLuint* framebuffers);
+	void (GL_APIENTRY *glDeleteRenderbuffersOES)(GLsizei n, const GLuint* renderbuffers);
+	void (GL_APIENTRY *glDeleteTextures)(GLsizei n, const GLuint* textures);
+	void (GL_APIENTRY *glDepthFunc)(GLenum func);
+	void (GL_APIENTRY *glDepthMask)(GLboolean flag);
+	void (GL_APIENTRY *glDepthRangex)(GLclampx zNear, GLclampx zFar);
+	void (GL_APIENTRY *glDepthRangef)(GLclampf zNear, GLclampf zFar);
+	void (GL_APIENTRY *glDisable)(GLenum cap);
+	void (GL_APIENTRY *glDisableClientState)(GLenum array);
+	void (GL_APIENTRY *glDrawArrays)(GLenum mode, GLint first, GLsizei count);
+	void (GL_APIENTRY *glDrawElements)(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices);
+	void (GL_APIENTRY *glEnable)(GLenum cap);
+	void (GL_APIENTRY *glEnableClientState)(GLenum array);
+	void (GL_APIENTRY *glFinish)(void);
+	void (GL_APIENTRY *glFlush)(void);
+	void (GL_APIENTRY *glFramebufferRenderbufferOES)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+	void (GL_APIENTRY *glFramebufferTexture2DOES)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+	void (GL_APIENTRY *glFogf)(GLenum pname, GLfloat param);
+	void (GL_APIENTRY *glFogfv)(GLenum pname, const GLfloat *params);
+	void (GL_APIENTRY *glFogx)(GLenum pname, GLfixed param);
+	void (GL_APIENTRY *glFogxv)(GLenum pname, const GLfixed *params);
+	void (GL_APIENTRY *glFrontFace)(GLenum mode);
+	void (GL_APIENTRY *glFrustumf)(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar);
+	void (GL_APIENTRY *glFrustumx)(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar);
+	void (GL_APIENTRY *glGenerateMipmapOES)(GLenum target);
+	void (GL_APIENTRY *glGenBuffers)(GLsizei n, GLuint* buffers);
+	void (GL_APIENTRY *glGenFramebuffersOES)(GLsizei n, GLuint* framebuffers);
+	void (GL_APIENTRY *glGenRenderbuffersOES)(GLsizei n, GLuint* renderbuffers);
+	void (GL_APIENTRY *glGenTextures)(GLsizei n, GLuint* textures);
+	void (GL_APIENTRY *glGetRenderbufferParameterivOES)(GLenum target, GLenum pname, GLint* params);
+	void (GL_APIENTRY *glGetBooleanv)(GLenum pname, GLboolean* params);
+	void (GL_APIENTRY *glGetBufferParameteriv)(GLenum target, GLenum pname, GLint* params);
+	void (GL_APIENTRY *glGetClipPlanef)(GLenum pname, GLfloat eqn[4]);
+	void (GL_APIENTRY *glGetClipPlanex)(GLenum pname, GLfixed eqn[4]);
+	GLenum (GL_APIENTRY *glGetError)(void);
+	void (GL_APIENTRY *glGetFixedv)(GLenum pname, GLfixed *params);
+	void (GL_APIENTRY *glGetFloatv)(GLenum pname, GLfloat* params);
+	void (GL_APIENTRY *glGetFramebufferAttachmentParameterivOES)(GLenum target, GLenum attachment, GLenum pname, GLint* params);
+	void (GL_APIENTRY *glGetIntegerv)(GLenum pname, GLint* params);
+	void (GL_APIENTRY *glGetLightfv)(GLenum light, GLenum pname, GLfloat *params);
+	void (GL_APIENTRY *glGetLightxv)(GLenum light, GLenum pname, GLfixed *params);
+	void (GL_APIENTRY *glGetMaterialfv)(GLenum face, GLenum pname, GLfloat *params);
+	void (GL_APIENTRY *glGetMaterialxv)(GLenum face, GLenum pname, GLfixed *params);
+	void (GL_APIENTRY *glGetPointerv)(GLenum pname, GLvoid **params);
+	const GLubyte* (GL_APIENTRY *glGetString)(GLenum name);
+	void (GL_APIENTRY *glGetTexParameterfv)(GLenum target, GLenum pname, GLfloat* params);
+	void (GL_APIENTRY *glGetTexParameteriv)(GLenum target, GLenum pname, GLint* params);
+	void (GL_APIENTRY *glGetTexEnvfv)(GLenum env, GLenum pname, GLfloat *params);
+	void (GL_APIENTRY *glGetTexEnviv)(GLenum env, GLenum pname, GLint *params);
+	void (GL_APIENTRY *glGetTexEnvxv)(GLenum env, GLenum pname, GLfixed *params);
+	void (GL_APIENTRY *glGetTexParameterxv)(GLenum target, GLenum pname, GLfixed *params);
+	void (GL_APIENTRY *glHint)(GLenum target, GLenum mode);
+	GLboolean (GL_APIENTRY *glIsBuffer)(GLuint buffer);
+	GLboolean (GL_APIENTRY *glIsEnabled)(GLenum cap);
+	GLboolean (GL_APIENTRY *glIsFramebufferOES)(GLuint framebuffer);
+	GLboolean (GL_APIENTRY *glIsTexture)(GLuint texture);
+	GLboolean (GL_APIENTRY *glIsRenderbufferOES)(GLuint renderbuffer);
+	void (GL_APIENTRY *glLightModelf)(GLenum pname, GLfloat param);
+	void (GL_APIENTRY *glLightModelfv)(GLenum pname, const GLfloat *params);
+	void (GL_APIENTRY *glLightModelx)(GLenum pname, GLfixed param);
+	void (GL_APIENTRY *glLightModelxv)(GLenum pname, const GLfixed *params);
+	void (GL_APIENTRY *glLightf)(GLenum light, GLenum pname, GLfloat param);
+	void (GL_APIENTRY *glLightfv)(GLenum light, GLenum pname, const GLfloat *params);
+	void (GL_APIENTRY *glLightx)(GLenum light, GLenum pname, GLfixed param);
+	void (GL_APIENTRY *glLightxv)(GLenum light, GLenum pname, const GLfixed *params);
+	void (GL_APIENTRY *glLineWidth)(GLfloat width);
+	void (GL_APIENTRY *glLineWidthx)(GLfixed width);
+	void (GL_APIENTRY *glLoadIdentity)(void);
+	void (GL_APIENTRY *glLoadMatrixf)(const GLfloat *m);
+	void (GL_APIENTRY *glLoadMatrixx)(const GLfixed *m);
+	void (GL_APIENTRY *glLogicOp)(GLenum opcode);
+	void (GL_APIENTRY *glMaterialf)(GLenum face, GLenum pname, GLfloat param);
+	void (GL_APIENTRY *glMaterialfv)(GLenum face, GLenum pname, const GLfloat *params);
+	void (GL_APIENTRY *glMaterialx)(GLenum face, GLenum pname, GLfixed param);
+	void (GL_APIENTRY *glMaterialxv)(GLenum face, GLenum pname, const GLfixed *params);
+	void (GL_APIENTRY *glMatrixMode)(GLenum mode);
+	void (GL_APIENTRY *glMultMatrixf)(const GLfloat *m);
+	void (GL_APIENTRY *glMultMatrixx)(const GLfixed *m);
+	void (GL_APIENTRY *glMultiTexCoord4f)(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
+	void (GL_APIENTRY *glMultiTexCoord4x)(GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q);
+	void (GL_APIENTRY *glNormal3f)(GLfloat nx, GLfloat ny, GLfloat nz);
+	void (GL_APIENTRY *glNormal3x)(GLfixed nx, GLfixed ny, GLfixed nz);
+	void (GL_APIENTRY *glNormalPointer)(GLenum type, GLsizei stride, const GLvoid *pointer);
+	void (GL_APIENTRY *glOrthof)(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar);
+	void (GL_APIENTRY *glOrthox)(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar);
+	void (GL_APIENTRY *glPixelStorei)(GLenum pname, GLint param);
+	void (GL_APIENTRY *glPointParameterf)(GLenum pname, GLfloat param);
+	void (GL_APIENTRY *glPointParameterfv)(GLenum pname, const GLfloat *params);
+	void (GL_APIENTRY *glPointParameterx)(GLenum pname, GLfixed param);
+	void (GL_APIENTRY *glPointParameterxv)(GLenum pname, const GLfixed *params);
+	void (GL_APIENTRY *glPointSize)(GLfloat size);
+	void (GL_APIENTRY *glPointSizePointerOES)(GLenum type, GLsizei stride, const GLvoid *pointer);
+	void (GL_APIENTRY *glPointSizex)(GLfixed size);
+	void (GL_APIENTRY *glPolygonOffset)(GLfloat factor, GLfloat units);
+	void (GL_APIENTRY *glPolygonOffsetx)(GLfixed factor, GLfixed units);
+	void (GL_APIENTRY *glPopMatrix)(void);
+	void (GL_APIENTRY *glPushMatrix)(void);
+	void (GL_APIENTRY *glReadPixels)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels);
+	void (GL_APIENTRY *glRenderbufferStorageOES)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+	void (GL_APIENTRY *glRotatef)(GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
+	void (GL_APIENTRY *glRotatex)(GLfixed angle, GLfixed x, GLfixed y, GLfixed z);
+	void (GL_APIENTRY *glSampleCoverage)(GLclampf value, GLboolean invert);
+	void (GL_APIENTRY *glSampleCoveragex)(GLclampx value, GLboolean invert);
+	void (GL_APIENTRY *glScalef)(GLfloat x, GLfloat y, GLfloat z);
+	void (GL_APIENTRY *glScalex)(GLfixed x, GLfixed y, GLfixed z);
+	void (GL_APIENTRY *glScissor)(GLint x, GLint y, GLsizei width, GLsizei height);
+	void (GL_APIENTRY *glShadeModel)(GLenum mode);
+	void (GL_APIENTRY *glStencilFunc)(GLenum func, GLint ref, GLuint mask);
+	void (GL_APIENTRY *glStencilMask)(GLuint mask);
+	void (GL_APIENTRY *glStencilOp)(GLenum fail, GLenum zfail, GLenum zpass);
+	void (GL_APIENTRY *glTexCoordPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+	void (GL_APIENTRY *glTexEnvf)(GLenum target, GLenum pname, GLfloat param);
+	void (GL_APIENTRY *glTexEnvfv)(GLenum target, GLenum pname, const GLfloat *params);
+	void (GL_APIENTRY *glTexEnvi)(GLenum target, GLenum pname, GLint param);
+	void (GL_APIENTRY *glTexEnvx)(GLenum target, GLenum pname, GLfixed param);
+	void (GL_APIENTRY *glTexEnviv)(GLenum target, GLenum pname, const GLint *params);
+	void (GL_APIENTRY *glTexEnvxv)(GLenum target, GLenum pname, const GLfixed *params);
+	void (GL_APIENTRY *glTexImage2D)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
+	                                 GLint border, GLenum format, GLenum type, const GLvoid* pixels);
+	void (GL_APIENTRY *glTexParameterf)(GLenum target, GLenum pname, GLfloat param);
+	void (GL_APIENTRY *glTexParameterfv)(GLenum target, GLenum pname, const GLfloat* params);
+	void (GL_APIENTRY *glTexParameteri)(GLenum target, GLenum pname, GLint param);
+	void (GL_APIENTRY *glTexParameteriv)(GLenum target, GLenum pname, const GLint* params);
+	void (GL_APIENTRY *glTexParameterx)(GLenum target, GLenum pname, GLfixed param);
+	void (GL_APIENTRY *glTexParameterxv)(GLenum target, GLenum pname, const GLfixed *params);
+	void (GL_APIENTRY *glTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
+	                                    GLenum format, GLenum type, const GLvoid* pixels);
+	void (GL_APIENTRY *glTranslatef)(GLfloat x, GLfloat y, GLfloat z);
+	void (GL_APIENTRY *glTranslatex)(GLfixed x, GLfixed y, GLfixed z);
+	void (GL_APIENTRY *glVertexPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+	void (GL_APIENTRY *glViewport)(GLint x, GLint y, GLsizei width, GLsizei height);
+	void (GL_APIENTRY *glEGLImageTargetTexture2DOES)(GLenum target, GLeglImageOES image);
+	void (GL_APIENTRY *glEGLImageTargetRenderbufferStorageOES)(GLenum target, GLeglImageOES image);
+	void (GL_APIENTRY *glDrawTexsOES)(GLshort x, GLshort y, GLshort z, GLshort width, GLshort height);
+	void (GL_APIENTRY *glDrawTexiOES)(GLint x, GLint y, GLint z, GLint width, GLint height);
+	void (GL_APIENTRY *glDrawTexxOES)(GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height);
+	void (GL_APIENTRY *glDrawTexsvOES)(const GLshort *coords);
+	void (GL_APIENTRY *glDrawTexivOES)(const GLint *coords);
+	void (GL_APIENTRY *glDrawTexxvOES)(const GLfixed *coords);
+	void (GL_APIENTRY *glDrawTexfOES)(GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height);
+	void (GL_APIENTRY *glDrawTexfvOES)(const GLfloat *coords);
 
 	egl::Context *(*es1CreateContext)(egl::Display *display, const egl::Context *shareContext, const egl::Config *config);
 	__eglMustCastToProperFunctionPointerType (*es1GetProcAddress)(const char *procname);
diff --git a/src/OpenGL/libGLES_CM/main.cpp b/src/OpenGL/libGLES_CM/main.cpp
index 8ba8247..1666240 100644
--- a/src/OpenGL/libGLES_CM/main.cpp
+++ b/src/OpenGL/libGLES_CM/main.cpp
@@ -148,186 +148,186 @@
 
 namespace es1
 {
-void ActiveTexture(GLenum texture);
-void AlphaFunc(GLenum func, GLclampf ref);
-void AlphaFuncx(GLenum func, GLclampx ref);
-void BindBuffer(GLenum target, GLuint buffer);
-void BindFramebuffer(GLenum target, GLuint framebuffer);
-void BindFramebufferOES(GLenum target, GLuint framebuffer);
-void BindRenderbufferOES(GLenum target, GLuint renderbuffer);
-void BindTexture(GLenum target, GLuint texture);
-void BlendEquationSeparateOES(GLenum modeRGB, GLenum modeAlpha);
-void BlendEquationOES(GLenum mode);
-void BlendEquationSeparateOES(GLenum modeRGB, GLenum modeAlpha);
-void BlendFuncSeparateOES(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
-void BlendFunc(GLenum sfactor, GLenum dfactor);
-void BlendFuncSeparateOES(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 CheckFramebufferStatusOES(GLenum target);
-void Clear(GLbitfield mask);
-void ClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
-void ClearColorx(GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha);
-void ClearDepthf(GLclampf depth);
-void ClearDepthx(GLclampx depth);
-void ClearStencil(GLint s);
-void ClientActiveTexture(GLenum texture);
-void ClipPlanef(GLenum plane, const GLfloat *equation);
-void ClipPlanex(GLenum plane, const GLfixed *equation);
-void Color4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
-void Color4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha);
-void Color4x(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
-void ColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
-void ColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
-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);
-void CullFace(GLenum mode);
-void DeleteBuffers(GLsizei n, const GLuint* buffers);
-void DeleteFramebuffersOES(GLsizei n, const GLuint* framebuffers);
-void DeleteRenderbuffersOES(GLsizei n, const GLuint* renderbuffers);
-void DeleteTextures(GLsizei n, const GLuint* textures);
-void DepthFunc(GLenum func);
-void DepthMask(GLboolean flag);
-void DepthRangex(GLclampx zNear, GLclampx zFar);
-void DepthRangef(GLclampf zNear, GLclampf zFar);
-void Disable(GLenum cap);
-void DisableClientState(GLenum array);
-void DrawArrays(GLenum mode, GLint first, GLsizei count);
-void DrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices);
-void Enable(GLenum cap);
-void EnableClientState(GLenum array);
-void Finish(void);
-void Flush(void);
-void FramebufferRenderbufferOES(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
-void FramebufferTexture2DOES(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
-void Fogf(GLenum pname, GLfloat param);
-void Fogfv(GLenum pname, const GLfloat *params);
-void Fogx(GLenum pname, GLfixed param);
-void Fogxv(GLenum pname, const GLfixed *params);
-void FrontFace(GLenum mode);
-void Frustumf(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar);
-void Frustumx(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar);
-void GenerateMipmapOES(GLenum target);
-void GenBuffers(GLsizei n, GLuint* buffers);
-void GenFramebuffersOES(GLsizei n, GLuint* framebuffers);
-void GenRenderbuffersOES(GLsizei n, GLuint* renderbuffers);
-void GenTextures(GLsizei n, GLuint* textures);
-void GetRenderbufferParameterivOES(GLenum target, GLenum pname, GLint* params);
-void GetBooleanv(GLenum pname, GLboolean* params);
-void GetBufferParameteriv(GLenum target, GLenum pname, GLint* params);
-void GetClipPlanef(GLenum pname, GLfloat eqn[4]);
-void GetClipPlanex(GLenum pname, GLfixed eqn[4]);
-GLenum GetError(void);
-void GetFixedv(GLenum pname, GLfixed *params);
-void GetFloatv(GLenum pname, GLfloat* params);
-void GetFramebufferAttachmentParameterivOES(GLenum target, GLenum attachment, GLenum pname, GLint* params);
-void GetIntegerv(GLenum pname, GLint* params);
-void GetLightfv(GLenum light, GLenum pname, GLfloat *params);
-void GetLightxv(GLenum light, GLenum pname, GLfixed *params);
-void GetMaterialfv(GLenum face, GLenum pname, GLfloat *params);
-void GetMaterialxv(GLenum face, GLenum pname, GLfixed *params);
-void GetPointerv(GLenum pname, GLvoid **params);
-const GLubyte* GetString(GLenum name);
-void GetTexParameterfv(GLenum target, GLenum pname, GLfloat* params);
-void GetTexParameteriv(GLenum target, GLenum pname, GLint* params);
-void GetTexEnvfv(GLenum env, GLenum pname, GLfloat *params);
-void GetTexEnviv(GLenum env, GLenum pname, GLint *params);
-void GetTexEnvxv(GLenum env, GLenum pname, GLfixed *params);
-void GetTexParameterxv(GLenum target, GLenum pname, GLfixed *params);
-void Hint(GLenum target, GLenum mode);
-GLboolean IsBuffer(GLuint buffer);
-GLboolean IsEnabled(GLenum cap);
-GLboolean IsFramebufferOES(GLuint framebuffer);
-GLboolean IsTexture(GLuint texture);
-GLboolean IsRenderbufferOES(GLuint renderbuffer);
-void LightModelf(GLenum pname, GLfloat param);
-void LightModelfv(GLenum pname, const GLfloat *params);
-void LightModelx(GLenum pname, GLfixed param);
-void LightModelxv(GLenum pname, const GLfixed *params);
-void Lightf(GLenum light, GLenum pname, GLfloat param);
-void Lightfv(GLenum light, GLenum pname, const GLfloat *params);
-void Lightx(GLenum light, GLenum pname, GLfixed param);
-void Lightxv(GLenum light, GLenum pname, const GLfixed *params);
-void LineWidth(GLfloat width);
-void LineWidthx(GLfixed width);
-void LoadIdentity(void);
-void LoadMatrixf(const GLfloat *m);
-void LoadMatrixx(const GLfixed *m);
-void LogicOp(GLenum opcode);
-void Materialf(GLenum face, GLenum pname, GLfloat param);
-void Materialfv(GLenum face, GLenum pname, const GLfloat *params);
-void Materialx(GLenum face, GLenum pname, GLfixed param);
-void Materialxv(GLenum face, GLenum pname, const GLfixed *params);
-void MatrixMode(GLenum mode);
-void MultMatrixf(const GLfloat *m);
-void MultMatrixx(const GLfixed *m);
-void MultiTexCoord4f(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
-void MultiTexCoord4x(GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q);
-void Normal3f(GLfloat nx, GLfloat ny, GLfloat nz);
-void Normal3x(GLfixed nx, GLfixed ny, GLfixed nz);
-void NormalPointer(GLenum type, GLsizei stride, const GLvoid *pointer);
-void Orthof(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar);
-void Orthox(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar);
-void PixelStorei(GLenum pname, GLint param);
-void PointParameterf(GLenum pname, GLfloat param);
-void PointParameterfv(GLenum pname, const GLfloat *params);
-void PointParameterx(GLenum pname, GLfixed param);
-void PointParameterxv(GLenum pname, const GLfixed *params);
-void PointSize(GLfloat size);
-void PointSizePointerOES(GLenum type, GLsizei stride, const GLvoid *pointer);
-void PointSizex(GLfixed size);
-void PolygonOffset(GLfloat factor, GLfloat units);
-void PolygonOffsetx(GLfixed factor, GLfixed units);
-void PopMatrix(void);
-void PushMatrix(void);
-void ReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels);
-void RenderbufferStorageOES(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
-void Rotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
-void Rotatex(GLfixed angle, GLfixed x, GLfixed y, GLfixed z);
-void SampleCoverage(GLclampf value, GLboolean invert);
-void SampleCoveragex(GLclampx value, GLboolean invert);
-void Scalef(GLfloat x, GLfloat y, GLfloat z);
-void Scalex(GLfixed x, GLfixed y, GLfixed z);
-void Scissor(GLint x, GLint y, GLsizei width, GLsizei height);
-void ShadeModel(GLenum mode);
-void StencilFunc(GLenum func, GLint ref, GLuint mask);
-void StencilMask(GLuint mask);
-void StencilOp(GLenum fail, GLenum zfail, GLenum zpass);
-void TexCoordPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
-void TexEnvf(GLenum target, GLenum pname, GLfloat param);
-void TexEnvfv(GLenum target, GLenum pname, const GLfloat *params);
-void TexEnvi(GLenum target, GLenum pname, GLint param);
-void TexEnvx(GLenum target, GLenum pname, GLfixed param);
-void TexEnviv(GLenum target, GLenum pname, const GLint *params);
-void TexEnvxv(GLenum target, GLenum pname, const GLfixed *params);
-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 TexParameterx(GLenum target, GLenum pname, GLfixed param);
-void TexParameterxv(GLenum target, GLenum pname, const GLfixed *params);
-void TexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
-                   GLenum format, GLenum type, const GLvoid* pixels);
-void Translatef(GLfloat x, GLfloat y, GLfloat z);
-void Translatex(GLfixed x, GLfixed y, GLfixed z);
-void VertexPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
-void Viewport(GLint x, GLint y, GLsizei width, GLsizei height);
-void EGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image);
-void EGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImageOES image);
-void DrawTexsOES(GLshort x, GLshort y, GLshort z, GLshort width, GLshort height);
-void DrawTexiOES(GLint x, GLint y, GLint z, GLint width, GLint height);
-void DrawTexxOES(GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height);
-void DrawTexsvOES(const GLshort *coords);
-void DrawTexivOES(const GLint *coords);
-void DrawTexxvOES(const GLfixed *coords);
-void DrawTexfOES(GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height);
-void DrawTexfvOES(const GLfloat *coords);
+void GL_APIENTRY ActiveTexture(GLenum texture);
+void GL_APIENTRY AlphaFunc(GLenum func, GLclampf ref);
+void GL_APIENTRY AlphaFuncx(GLenum func, GLclampx ref);
+void GL_APIENTRY BindBuffer(GLenum target, GLuint buffer);
+void GL_APIENTRY BindFramebuffer(GLenum target, GLuint framebuffer);
+void GL_APIENTRY BindFramebufferOES(GLenum target, GLuint framebuffer);
+void GL_APIENTRY BindRenderbufferOES(GLenum target, GLuint renderbuffer);
+void GL_APIENTRY BindTexture(GLenum target, GLuint texture);
+void GL_APIENTRY BlendEquationSeparateOES(GLenum modeRGB, GLenum modeAlpha);
+void GL_APIENTRY BlendEquationOES(GLenum mode);
+void GL_APIENTRY BlendEquationSeparateOES(GLenum modeRGB, GLenum modeAlpha);
+void GL_APIENTRY BlendFuncSeparateOES(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+void GL_APIENTRY BlendFunc(GLenum sfactor, GLenum dfactor);
+void GL_APIENTRY BlendFuncSeparateOES(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+void GL_APIENTRY BufferData(GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage);
+void GL_APIENTRY BufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data);
+GLenum GL_APIENTRY CheckFramebufferStatusOES(GLenum target);
+void GL_APIENTRY Clear(GLbitfield mask);
+void GL_APIENTRY ClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
+void GL_APIENTRY ClearColorx(GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha);
+void GL_APIENTRY ClearDepthf(GLclampf depth);
+void GL_APIENTRY ClearDepthx(GLclampx depth);
+void GL_APIENTRY ClearStencil(GLint s);
+void GL_APIENTRY ClientActiveTexture(GLenum texture);
+void GL_APIENTRY ClipPlanef(GLenum plane, const GLfloat *equation);
+void GL_APIENTRY ClipPlanex(GLenum plane, const GLfixed *equation);
+void GL_APIENTRY Color4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+void GL_APIENTRY Color4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha);
+void GL_APIENTRY Color4x(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
+void GL_APIENTRY ColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+void GL_APIENTRY ColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+void GL_APIENTRY CompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height,
+                                      GLint border, GLsizei imageSize, const GLvoid* data);
+void GL_APIENTRY CompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
+                                         GLenum format, GLsizei imageSize, const GLvoid* data);
+void GL_APIENTRY CopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+void GL_APIENTRY CopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+void GL_APIENTRY CullFace(GLenum mode);
+void GL_APIENTRY DeleteBuffers(GLsizei n, const GLuint* buffers);
+void GL_APIENTRY DeleteFramebuffersOES(GLsizei n, const GLuint* framebuffers);
+void GL_APIENTRY DeleteRenderbuffersOES(GLsizei n, const GLuint* renderbuffers);
+void GL_APIENTRY DeleteTextures(GLsizei n, const GLuint* textures);
+void GL_APIENTRY DepthFunc(GLenum func);
+void GL_APIENTRY DepthMask(GLboolean flag);
+void GL_APIENTRY DepthRangex(GLclampx zNear, GLclampx zFar);
+void GL_APIENTRY DepthRangef(GLclampf zNear, GLclampf zFar);
+void GL_APIENTRY Disable(GLenum cap);
+void GL_APIENTRY DisableClientState(GLenum array);
+void GL_APIENTRY DrawArrays(GLenum mode, GLint first, GLsizei count);
+void GL_APIENTRY DrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices);
+void GL_APIENTRY Enable(GLenum cap);
+void GL_APIENTRY EnableClientState(GLenum array);
+void GL_APIENTRY Finish(void);
+void GL_APIENTRY Flush(void);
+void GL_APIENTRY FramebufferRenderbufferOES(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+void GL_APIENTRY FramebufferTexture2DOES(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+void GL_APIENTRY Fogf(GLenum pname, GLfloat param);
+void GL_APIENTRY Fogfv(GLenum pname, const GLfloat *params);
+void GL_APIENTRY Fogx(GLenum pname, GLfixed param);
+void GL_APIENTRY Fogxv(GLenum pname, const GLfixed *params);
+void GL_APIENTRY FrontFace(GLenum mode);
+void GL_APIENTRY Frustumf(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar);
+void GL_APIENTRY Frustumx(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar);
+void GL_APIENTRY GenerateMipmapOES(GLenum target);
+void GL_APIENTRY GenBuffers(GLsizei n, GLuint* buffers);
+void GL_APIENTRY GenFramebuffersOES(GLsizei n, GLuint* framebuffers);
+void GL_APIENTRY GenRenderbuffersOES(GLsizei n, GLuint* renderbuffers);
+void GL_APIENTRY GenTextures(GLsizei n, GLuint* textures);
+void GL_APIENTRY GetRenderbufferParameterivOES(GLenum target, GLenum pname, GLint* params);
+void GL_APIENTRY GetBooleanv(GLenum pname, GLboolean* params);
+void GL_APIENTRY GetBufferParameteriv(GLenum target, GLenum pname, GLint* params);
+void GL_APIENTRY GetClipPlanef(GLenum pname, GLfloat eqn[4]);
+void GL_APIENTRY GetClipPlanex(GLenum pname, GLfixed eqn[4]);
+GLenum GL_APIENTRY GetError(void);
+void GL_APIENTRY GetFixedv(GLenum pname, GLfixed *params);
+void GL_APIENTRY GetFloatv(GLenum pname, GLfloat* params);
+void GL_APIENTRY GetFramebufferAttachmentParameterivOES(GLenum target, GLenum attachment, GLenum pname, GLint* params);
+void GL_APIENTRY GetIntegerv(GLenum pname, GLint* params);
+void GL_APIENTRY GetLightfv(GLenum light, GLenum pname, GLfloat *params);
+void GL_APIENTRY GetLightxv(GLenum light, GLenum pname, GLfixed *params);
+void GL_APIENTRY GetMaterialfv(GLenum face, GLenum pname, GLfloat *params);
+void GL_APIENTRY GetMaterialxv(GLenum face, GLenum pname, GLfixed *params);
+void GL_APIENTRY GetPointerv(GLenum pname, GLvoid **params);
+const GLubyte* GL_APIENTRY GetString(GLenum name);
+void GL_APIENTRY GetTexParameterfv(GLenum target, GLenum pname, GLfloat* params);
+void GL_APIENTRY GetTexParameteriv(GLenum target, GLenum pname, GLint* params);
+void GL_APIENTRY GetTexEnvfv(GLenum env, GLenum pname, GLfloat *params);
+void GL_APIENTRY GetTexEnviv(GLenum env, GLenum pname, GLint *params);
+void GL_APIENTRY GetTexEnvxv(GLenum env, GLenum pname, GLfixed *params);
+void GL_APIENTRY GetTexParameterxv(GLenum target, GLenum pname, GLfixed *params);
+void GL_APIENTRY Hint(GLenum target, GLenum mode);
+GLboolean GL_APIENTRY IsBuffer(GLuint buffer);
+GLboolean GL_APIENTRY IsEnabled(GLenum cap);
+GLboolean GL_APIENTRY IsFramebufferOES(GLuint framebuffer);
+GLboolean GL_APIENTRY IsTexture(GLuint texture);
+GLboolean GL_APIENTRY IsRenderbufferOES(GLuint renderbuffer);
+void GL_APIENTRY LightModelf(GLenum pname, GLfloat param);
+void GL_APIENTRY LightModelfv(GLenum pname, const GLfloat *params);
+void GL_APIENTRY LightModelx(GLenum pname, GLfixed param);
+void GL_APIENTRY LightModelxv(GLenum pname, const GLfixed *params);
+void GL_APIENTRY Lightf(GLenum light, GLenum pname, GLfloat param);
+void GL_APIENTRY Lightfv(GLenum light, GLenum pname, const GLfloat *params);
+void GL_APIENTRY Lightx(GLenum light, GLenum pname, GLfixed param);
+void GL_APIENTRY Lightxv(GLenum light, GLenum pname, const GLfixed *params);
+void GL_APIENTRY LineWidth(GLfloat width);
+void GL_APIENTRY LineWidthx(GLfixed width);
+void GL_APIENTRY LoadIdentity(void);
+void GL_APIENTRY LoadMatrixf(const GLfloat *m);
+void GL_APIENTRY LoadMatrixx(const GLfixed *m);
+void GL_APIENTRY LogicOp(GLenum opcode);
+void GL_APIENTRY Materialf(GLenum face, GLenum pname, GLfloat param);
+void GL_APIENTRY Materialfv(GLenum face, GLenum pname, const GLfloat *params);
+void GL_APIENTRY Materialx(GLenum face, GLenum pname, GLfixed param);
+void GL_APIENTRY Materialxv(GLenum face, GLenum pname, const GLfixed *params);
+void GL_APIENTRY MatrixMode(GLenum mode);
+void GL_APIENTRY MultMatrixf(const GLfloat *m);
+void GL_APIENTRY MultMatrixx(const GLfixed *m);
+void GL_APIENTRY MultiTexCoord4f(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
+void GL_APIENTRY MultiTexCoord4x(GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q);
+void GL_APIENTRY Normal3f(GLfloat nx, GLfloat ny, GLfloat nz);
+void GL_APIENTRY Normal3x(GLfixed nx, GLfixed ny, GLfixed nz);
+void GL_APIENTRY NormalPointer(GLenum type, GLsizei stride, const GLvoid *pointer);
+void GL_APIENTRY Orthof(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar);
+void GL_APIENTRY Orthox(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar);
+void GL_APIENTRY PixelStorei(GLenum pname, GLint param);
+void GL_APIENTRY PointParameterf(GLenum pname, GLfloat param);
+void GL_APIENTRY PointParameterfv(GLenum pname, const GLfloat *params);
+void GL_APIENTRY PointParameterx(GLenum pname, GLfixed param);
+void GL_APIENTRY PointParameterxv(GLenum pname, const GLfixed *params);
+void GL_APIENTRY PointSize(GLfloat size);
+void GL_APIENTRY PointSizePointerOES(GLenum type, GLsizei stride, const GLvoid *pointer);
+void GL_APIENTRY PointSizex(GLfixed size);
+void GL_APIENTRY PolygonOffset(GLfloat factor, GLfloat units);
+void GL_APIENTRY PolygonOffsetx(GLfixed factor, GLfixed units);
+void GL_APIENTRY PopMatrix(void);
+void GL_APIENTRY PushMatrix(void);
+void GL_APIENTRY ReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels);
+void GL_APIENTRY RenderbufferStorageOES(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+void GL_APIENTRY Rotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
+void GL_APIENTRY Rotatex(GLfixed angle, GLfixed x, GLfixed y, GLfixed z);
+void GL_APIENTRY SampleCoverage(GLclampf value, GLboolean invert);
+void GL_APIENTRY SampleCoveragex(GLclampx value, GLboolean invert);
+void GL_APIENTRY Scalef(GLfloat x, GLfloat y, GLfloat z);
+void GL_APIENTRY Scalex(GLfixed x, GLfixed y, GLfixed z);
+void GL_APIENTRY Scissor(GLint x, GLint y, GLsizei width, GLsizei height);
+void GL_APIENTRY ShadeModel(GLenum mode);
+void GL_APIENTRY StencilFunc(GLenum func, GLint ref, GLuint mask);
+void GL_APIENTRY StencilMask(GLuint mask);
+void GL_APIENTRY StencilOp(GLenum fail, GLenum zfail, GLenum zpass);
+void GL_APIENTRY TexCoordPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+void GL_APIENTRY TexEnvf(GLenum target, GLenum pname, GLfloat param);
+void GL_APIENTRY TexEnvfv(GLenum target, GLenum pname, const GLfloat *params);
+void GL_APIENTRY TexEnvi(GLenum target, GLenum pname, GLint param);
+void GL_APIENTRY TexEnvx(GLenum target, GLenum pname, GLfixed param);
+void GL_APIENTRY TexEnviv(GLenum target, GLenum pname, const GLint *params);
+void GL_APIENTRY TexEnvxv(GLenum target, GLenum pname, const GLfixed *params);
+void GL_APIENTRY TexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
+                            GLint border, GLenum format, GLenum type, const GLvoid* pixels);
+void GL_APIENTRY TexParameterf(GLenum target, GLenum pname, GLfloat param);
+void GL_APIENTRY TexParameterfv(GLenum target, GLenum pname, const GLfloat* params);
+void GL_APIENTRY TexParameteri(GLenum target, GLenum pname, GLint param);
+void GL_APIENTRY TexParameteriv(GLenum target, GLenum pname, const GLint* params);
+void GL_APIENTRY TexParameterx(GLenum target, GLenum pname, GLfixed param);
+void GL_APIENTRY TexParameterxv(GLenum target, GLenum pname, const GLfixed *params);
+void GL_APIENTRY TexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
+                               GLenum format, GLenum type, const GLvoid* pixels);
+void GL_APIENTRY Translatef(GLfloat x, GLfloat y, GLfloat z);
+void GL_APIENTRY Translatex(GLfixed x, GLfixed y, GLfixed z);
+void GL_APIENTRY VertexPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+void GL_APIENTRY Viewport(GLint x, GLint y, GLsizei width, GLsizei height);
+void GL_APIENTRY EGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image);
+void GL_APIENTRY EGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImageOES image);
+void GL_APIENTRY DrawTexsOES(GLshort x, GLshort y, GLshort z, GLshort width, GLshort height);
+void GL_APIENTRY DrawTexiOES(GLint x, GLint y, GLint z, GLint width, GLint height);
+void GL_APIENTRY DrawTexxOES(GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height);
+void GL_APIENTRY DrawTexsvOES(const GLshort *coords);
+void GL_APIENTRY DrawTexivOES(const GLint *coords);
+void GL_APIENTRY DrawTexxvOES(const GLfixed *coords);
+void GL_APIENTRY DrawTexfOES(GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height);
+void GL_APIENTRY DrawTexfvOES(const GLfloat *coords);
 }
 
 egl::Context *es1CreateContext(egl::Display *display, const egl::Context *shareContext, const egl::Config *config);
diff --git a/src/OpenGL/libGLESv2/entry_points.h b/src/OpenGL/libGLESv2/entry_points.h
index b72c6cd..b3107a0 100644
--- a/src/OpenGL/libGLESv2/entry_points.h
+++ b/src/OpenGL/libGLESv2/entry_points.h
@@ -21,314 +21,314 @@
 
 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);
+	void GL_APIENTRY ActiveTexture(GLenum texture);
+	void GL_APIENTRY AttachShader(GLuint program, GLuint shader);
+	void GL_APIENTRY BeginQueryEXT(GLenum target, GLuint name);
+	void GL_APIENTRY BindAttribLocation(GLuint program, GLuint index, const GLchar* name);
+	void GL_APIENTRY BindBuffer(GLenum target, GLuint buffer);
+	void GL_APIENTRY BindFramebuffer(GLenum target, GLuint framebuffer);
+	void GL_APIENTRY BindRenderbuffer(GLenum target, GLuint renderbuffer);
+	void GL_APIENTRY BindTexture(GLenum target, GLuint texture);
+	void GL_APIENTRY BlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
+	void GL_APIENTRY BlendEquation(GLenum mode);
+	void GL_APIENTRY BlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha);
+	void GL_APIENTRY BlendFunc(GLenum sfactor, GLenum dfactor);
+	void GL_APIENTRY BlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+	void GL_APIENTRY BufferData(GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage);
+	void GL_APIENTRY BufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data);
+	GLenum GL_APIENTRY CheckFramebufferStatus(GLenum target);
+	void GL_APIENTRY Clear(GLbitfield mask);
+	void GL_APIENTRY ClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
+	void GL_APIENTRY ClearDepthf(GLclampf depth);
+	void GL_APIENTRY ClearStencil(GLint s);
+	void GL_APIENTRY ColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+	void GL_APIENTRY CompileShader(GLuint shader);
+	void GL_APIENTRY CompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height,
+	                                      GLint border, GLsizei imageSize, const GLvoid* data);
+	void GL_APIENTRY CompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
+	                                         GLenum format, GLsizei imageSize, const GLvoid* data);
+	void GL_APIENTRY CopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+	void GL_APIENTRY CopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+	GLuint GL_APIENTRY CreateProgram(void);
+	GLuint GL_APIENTRY CreateShader(GLenum type);
+	void GL_APIENTRY CullFace(GLenum mode);
+	void GL_APIENTRY DeleteBuffers(GLsizei n, const GLuint* buffers);
+	void GL_APIENTRY DeleteFencesNV(GLsizei n, const GLuint* fences);
+	void GL_APIENTRY DeleteFramebuffers(GLsizei n, const GLuint* framebuffers);
+	void GL_APIENTRY DeleteProgram(GLuint program);
+	void GL_APIENTRY DeleteQueriesEXT(GLsizei n, const GLuint *ids);
+	void GL_APIENTRY DeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers);
+	void GL_APIENTRY DeleteShader(GLuint shader);
+	void GL_APIENTRY DeleteTextures(GLsizei n, const GLuint* textures);
+	void GL_APIENTRY DepthFunc(GLenum func);
+	void GL_APIENTRY DepthMask(GLboolean flag);
+	void GL_APIENTRY DepthRangef(GLclampf zNear, GLclampf zFar);
+	void GL_APIENTRY DetachShader(GLuint program, GLuint shader);
+	void GL_APIENTRY Disable(GLenum cap);
+	void GL_APIENTRY DisableVertexAttribArray(GLuint index);
+	void GL_APIENTRY DrawArrays(GLenum mode, GLint first, GLsizei count);
+	void GL_APIENTRY DrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices);
+	void GL_APIENTRY DrawArraysInstancedEXT(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount);
+	void GL_APIENTRY DrawElementsInstancedEXT(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instanceCount);
+	void GL_APIENTRY VertexAttribDivisorEXT(GLuint index, GLuint divisor);
+	void GL_APIENTRY DrawArraysInstancedANGLE(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount);
+	void GL_APIENTRY DrawElementsInstancedANGLE(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instanceCount);
+	void GL_APIENTRY VertexAttribDivisorANGLE(GLuint index, GLuint divisor);
+	void GL_APIENTRY Enable(GLenum cap);
+	void GL_APIENTRY EnableVertexAttribArray(GLuint index);
+	void GL_APIENTRY EndQueryEXT(GLenum target);
+	void GL_APIENTRY FinishFenceNV(GLuint fence);
+	void GL_APIENTRY Finish(void);
+	void GL_APIENTRY Flush(void);
+	void GL_APIENTRY FramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+	void GL_APIENTRY FramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+	void GL_APIENTRY FrontFace(GLenum mode);
+	void GL_APIENTRY GenBuffers(GLsizei n, GLuint* buffers);
+	void GL_APIENTRY GenerateMipmap(GLenum target);
+	void GL_APIENTRY GenFencesNV(GLsizei n, GLuint* fences);
+	void GL_APIENTRY GenFramebuffers(GLsizei n, GLuint* framebuffers);
+	void GL_APIENTRY GenQueriesEXT(GLsizei n, GLuint* ids);
+	void GL_APIENTRY GenRenderbuffers(GLsizei n, GLuint* renderbuffers);
+	void GL_APIENTRY GenTextures(GLsizei n, GLuint* textures);
+	void GL_APIENTRY GetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+	void GL_APIENTRY GetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name);
+	void GL_APIENTRY GetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders);
+	int GL_APIENTRY GetAttribLocation(GLuint program, const GLchar* name);
+	void GL_APIENTRY GetBooleanv(GLenum pname, GLboolean* params);
+	void GL_APIENTRY GetBufferParameteriv(GLenum target, GLenum pname, GLint* params);
+	GLenum GL_APIENTRY GetError(void);
+	void GL_APIENTRY GetFenceivNV(GLuint fence, GLenum pname, GLint *params);
+	void GL_APIENTRY GetFloatv(GLenum pname, GLfloat* params);
+	void GL_APIENTRY GetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint* params);
+	GLenum GL_APIENTRY GetGraphicsResetStatusEXT(void);
+	void GL_APIENTRY GetIntegerv(GLenum pname, GLint* params);
+	void GL_APIENTRY GetProgramiv(GLuint program, GLenum pname, GLint* params);
+	void GL_APIENTRY GetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog);
+	void GL_APIENTRY GetQueryivEXT(GLenum target, GLenum pname, GLint *params);
+	void GL_APIENTRY GetQueryObjectuivEXT(GLuint name, GLenum pname, GLuint *params);
+	void GL_APIENTRY GetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* params);
+	void GL_APIENTRY GetShaderiv(GLuint shader, GLenum pname, GLint* params);
+	void GL_APIENTRY GetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog);
+	void GL_APIENTRY GetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision);
+	void GL_APIENTRY GetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source);
+	const GLubyte* GL_APIENTRY GetString(GLenum name);
+	void GL_APIENTRY GetTexParameterfv(GLenum target, GLenum pname, GLfloat* params);
+	void GL_APIENTRY GetTexParameteriv(GLenum target, GLenum pname, GLint* params);
+	void GL_APIENTRY GetnUniformfvEXT(GLuint program, GLint location, GLsizei bufSize, GLfloat* params);
+	void GL_APIENTRY GetUniformfv(GLuint program, GLint location, GLfloat* params);
+	void GL_APIENTRY GetnUniformivEXT(GLuint program, GLint location, GLsizei bufSize, GLint* params);
+	void GL_APIENTRY GetUniformiv(GLuint program, GLint location, GLint* params);
+	int GL_APIENTRY GetUniformLocation(GLuint program, const GLchar* name);
+	void GL_APIENTRY GetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params);
+	void GL_APIENTRY GetVertexAttribiv(GLuint index, GLenum pname, GLint* params);
+	void GL_APIENTRY GetVertexAttribPointerv(GLuint index, GLenum pname, GLvoid** pointer);
+	void GL_APIENTRY Hint(GLenum target, GLenum mode);
+	GLboolean GL_APIENTRY IsBuffer(GLuint buffer);
+	GLboolean GL_APIENTRY IsEnabled(GLenum cap);
+	GLboolean GL_APIENTRY IsFenceNV(GLuint fence);
+	GLboolean GL_APIENTRY IsFramebuffer(GLuint framebuffer);
+	GLboolean GL_APIENTRY IsProgram(GLuint program);
+	GLboolean GL_APIENTRY IsQueryEXT(GLuint name);
+	GLboolean GL_APIENTRY IsRenderbuffer(GLuint renderbuffer);
+	GLboolean GL_APIENTRY IsShader(GLuint shader);
+	GLboolean GL_APIENTRY IsTexture(GLuint texture);
+	void GL_APIENTRY LineWidth(GLfloat width);
+	void GL_APIENTRY LinkProgram(GLuint program);
+	void GL_APIENTRY PixelStorei(GLenum pname, GLint param);
+	void GL_APIENTRY PolygonOffset(GLfloat factor, GLfloat units);
+	void GL_APIENTRY ReadnPixelsEXT(GLint x, GLint y, GLsizei width, GLsizei height,
+	                                GLenum format, GLenum type, GLsizei bufSize, GLvoid *data);
+	void GL_APIENTRY ReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels);
+	void GL_APIENTRY ReleaseShaderCompiler(void);
+	void GL_APIENTRY RenderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+	void GL_APIENTRY RenderbufferStorageMultisampleANGLE(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+	void GL_APIENTRY RenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+	void GL_APIENTRY SampleCoverage(GLclampf value, GLboolean invert);
+	void GL_APIENTRY SetFenceNV(GLuint fence, GLenum condition);
+	void GL_APIENTRY Scissor(GLint x, GLint y, GLsizei width, GLsizei height);
+	void GL_APIENTRY ShaderBinary(GLsizei n, const GLuint* shaders, GLenum binaryformat, const GLvoid* binary, GLsizei length);
+	void GL_APIENTRY ShaderSource(GLuint shader, GLsizei count, const GLchar *const *string, const GLint *length);
+	void GL_APIENTRY StencilFunc(GLenum func, GLint ref, GLuint mask);
+	void GL_APIENTRY StencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask);
+	void GL_APIENTRY StencilMask(GLuint mask);
+	void GL_APIENTRY StencilMaskSeparate(GLenum face, GLuint mask);
+	void GL_APIENTRY StencilOp(GLenum fail, GLenum zfail, GLenum zpass);
+	void GL_APIENTRY StencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass);
+	GLboolean GL_APIENTRY TestFenceNV(GLuint fence);
+	void GL_APIENTRY TexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
+	                            GLint border, GLenum format, GLenum type, const GLvoid* pixels);
+	void GL_APIENTRY TexParameterf(GLenum target, GLenum pname, GLfloat param);
+	void GL_APIENTRY TexParameterfv(GLenum target, GLenum pname, const GLfloat* params);
+	void GL_APIENTRY TexParameteri(GLenum target, GLenum pname, GLint param);
+	void GL_APIENTRY TexParameteriv(GLenum target, GLenum pname, const GLint* params);
+	void GL_APIENTRY TexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
+	                               GLenum format, GLenum type, const GLvoid* pixels);
+	void GL_APIENTRY Uniform1f(GLint location, GLfloat x);
+	void GL_APIENTRY Uniform1fv(GLint location, GLsizei count, const GLfloat* v);
+	void GL_APIENTRY Uniform1i(GLint location, GLint x);
+	void GL_APIENTRY Uniform1iv(GLint location, GLsizei count, const GLint* v);
+	void GL_APIENTRY Uniform2f(GLint location, GLfloat x, GLfloat y);
+	void GL_APIENTRY Uniform2fv(GLint location, GLsizei count, const GLfloat* v);
+	void GL_APIENTRY Uniform2i(GLint location, GLint x, GLint y);
+	void GL_APIENTRY Uniform2iv(GLint location, GLsizei count, const GLint* v);
+	void GL_APIENTRY Uniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z);
+	void GL_APIENTRY Uniform3fv(GLint location, GLsizei count, const GLfloat* v);
+	void GL_APIENTRY Uniform3i(GLint location, GLint x, GLint y, GLint z);
+	void GL_APIENTRY Uniform3iv(GLint location, GLsizei count, const GLint* v);
+	void GL_APIENTRY Uniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+	void GL_APIENTRY Uniform4fv(GLint location, GLsizei count, const GLfloat* v);
+	void GL_APIENTRY Uniform4i(GLint location, GLint x, GLint y, GLint z, GLint w);
+	void GL_APIENTRY Uniform4iv(GLint location, GLsizei count, const GLint* v);
+	void GL_APIENTRY UniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+	void GL_APIENTRY UniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+	void GL_APIENTRY UniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+	void GL_APIENTRY UseProgram(GLuint program);
+	void GL_APIENTRY ValidateProgram(GLuint program);
+	void GL_APIENTRY VertexAttrib1f(GLuint index, GLfloat x);
+	void GL_APIENTRY VertexAttrib1fv(GLuint index, const GLfloat* values);
+	void GL_APIENTRY VertexAttrib2f(GLuint index, GLfloat x, GLfloat y);
+	void GL_APIENTRY VertexAttrib2fv(GLuint index, const GLfloat* values);
+	void GL_APIENTRY VertexAttrib3f(GLuint index, GLfloat x, GLfloat y, GLfloat z);
+	void GL_APIENTRY VertexAttrib3fv(GLuint index, const GLfloat* values);
+	void GL_APIENTRY VertexAttrib4f(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+	void GL_APIENTRY VertexAttrib4fv(GLuint index, const GLfloat* values);
+	void GL_APIENTRY VertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr);
+	void GL_APIENTRY Viewport(GLint x, GLint y, GLsizei width, GLsizei height);
+	void GL_APIENTRY BlitFramebufferNV(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+	void GL_APIENTRY BlitFramebufferANGLE(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
+	                                      GLbitfield mask, GLenum filter);
+	void GL_APIENTRY TexImage3DOES(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth,
+	                               GLint border, GLenum format, GLenum type, const GLvoid* pixels);
+	void GL_APIENTRY 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 GL_APIENTRY CopyTexSubImage3DOES(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+	void GL_APIENTRY CompressedTexImage3DOES(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data);
+	void GL_APIENTRY 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 GL_APIENTRY FramebufferTexture3DOES(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
+	void GL_APIENTRY EGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image);
+	void GL_APIENTRY EGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImageOES image);
+	GLboolean GL_APIENTRY IsRenderbufferOES(GLuint renderbuffer);
+	void GL_APIENTRY BindRenderbufferOES(GLenum target, GLuint renderbuffer);
+	void GL_APIENTRY DeleteRenderbuffersOES(GLsizei n, const GLuint* renderbuffers);
+	void GL_APIENTRY GenRenderbuffersOES(GLsizei n, GLuint* renderbuffers);
+	void GL_APIENTRY RenderbufferStorageOES(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+	void GL_APIENTRY GetRenderbufferParameterivOES(GLenum target, GLenum pname, GLint* params);
+	GLboolean GL_APIENTRY IsFramebufferOES(GLuint framebuffer);
+	void GL_APIENTRY BindFramebufferOES(GLenum target, GLuint framebuffer);
+	void GL_APIENTRY DeleteFramebuffersOES(GLsizei n, const GLuint* framebuffers);
+	void GL_APIENTRY GenFramebuffersOES(GLsizei n, GLuint* framebuffers);
+	GLenum GL_APIENTRY CheckFramebufferStatusOES(GLenum target);
+	void GL_APIENTRY FramebufferRenderbufferOES(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+	void GL_APIENTRY FramebufferTexture2DOES(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+	void GL_APIENTRY GetFramebufferAttachmentParameterivOES(GLenum target, GLenum attachment, GLenum pname, GLint* params);
+	void GL_APIENTRY GenerateMipmapOES(GLenum target);
+	void GL_APIENTRY DrawBuffersEXT(GLsizei n, const GLenum *bufs);
+	void GL_APIENTRY ReadBuffer(GLenum src);
+	void GL_APIENTRY DrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices);
+	void GL_APIENTRY TexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *data);
+	void GL_APIENTRY 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 GL_APIENTRY CopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+	void GL_APIENTRY CompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data);
+	void GL_APIENTRY 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 GL_APIENTRY GenQueries(GLsizei n, GLuint *ids);
+	void GL_APIENTRY DeleteQueries(GLsizei n, const GLuint *ids);
+	GLboolean GL_APIENTRY IsQuery(GLuint id);
+	void GL_APIENTRY BeginQuery(GLenum target, GLuint id);
+	void GL_APIENTRY EndQuery(GLenum target);
+	void GL_APIENTRY GetQueryiv(GLenum target, GLenum pname, GLint *params);
+	void GL_APIENTRY GetQueryObjectuiv(GLuint id, GLenum pname, GLuint *params);
+	GLboolean GL_APIENTRY UnmapBuffer(GLenum target);
+	void GL_APIENTRY GetBufferPointerv(GLenum target, GLenum pname, void **params);
+	void GL_APIENTRY DrawBuffers(GLsizei n, const GLenum *bufs);
+	void GL_APIENTRY UniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+	void GL_APIENTRY UniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+	void GL_APIENTRY UniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+	void GL_APIENTRY UniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+	void GL_APIENTRY UniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+	void GL_APIENTRY UniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+	void GL_APIENTRY BlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+	void GL_APIENTRY FramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+	void *GL_APIENTRY MapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
+	void GL_APIENTRY FlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length);
+	void GL_APIENTRY BindVertexArray(GLuint array);
+	void GL_APIENTRY BindVertexArrayOES(GLuint array);
+	void GL_APIENTRY DeleteVertexArrays(GLsizei n, const GLuint *arrays);
+	void GL_APIENTRY DeleteVertexArraysOES(GLsizei n, const GLuint *arrays);
+	void GL_APIENTRY GenVertexArrays(GLsizei n, GLuint *arrays);
+	void GL_APIENTRY GenVertexArraysOES(GLsizei n, GLuint *arrays);
+	GLboolean GL_APIENTRY IsVertexArray(GLuint array);
+	GLboolean GL_APIENTRY IsVertexArrayOES(GLuint array);
+	void GL_APIENTRY GetIntegeri_v(GLenum target, GLuint index, GLint *data);
+	void GL_APIENTRY BeginTransformFeedback(GLenum primitiveMode);
+	void GL_APIENTRY EndTransformFeedback(void);
+	void GL_APIENTRY BindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+	void GL_APIENTRY BindBufferBase(GLenum target, GLuint index, GLuint buffer);
+	void GL_APIENTRY TransformFeedbackVaryings(GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode);
+	void GL_APIENTRY GetTransformFeedbackVarying(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
+	void GL_APIENTRY VertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
+	void GL_APIENTRY GetVertexAttribIiv(GLuint index, GLenum pname, GLint *params);
+	void GL_APIENTRY GetVertexAttribIuiv(GLuint index, GLenum pname, GLuint *params);
+	void GL_APIENTRY VertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w);
+	void GL_APIENTRY VertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+	void GL_APIENTRY VertexAttribI4iv(GLuint index, const GLint *v);
+	void GL_APIENTRY VertexAttribI4uiv(GLuint index, const GLuint *v);
+	void GL_APIENTRY GetUniformuiv(GLuint program, GLint location, GLuint *params);
+	GLint GL_APIENTRY GetFragDataLocation(GLuint program, const GLchar *name);
+	void GL_APIENTRY Uniform1ui(GLint location, GLuint v0);
+	void GL_APIENTRY Uniform2ui(GLint location, GLuint v0, GLuint v1);
+	void GL_APIENTRY Uniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2);
+	void GL_APIENTRY Uniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+	void GL_APIENTRY Uniform1uiv(GLint location, GLsizei count, const GLuint *value);
+	void GL_APIENTRY Uniform2uiv(GLint location, GLsizei count, const GLuint *value);
+	void GL_APIENTRY Uniform3uiv(GLint location, GLsizei count, const GLuint *value);
+	void GL_APIENTRY Uniform4uiv(GLint location, GLsizei count, const GLuint *value);
+	void GL_APIENTRY ClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint *value);
+	void GL_APIENTRY ClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint *value);
+	void GL_APIENTRY ClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat *value);
+	void GL_APIENTRY ClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
+	const GLubyte *GL_APIENTRY GetStringi(GLenum name, GLuint index);
+	void GL_APIENTRY CopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+	void GL_APIENTRY GetUniformIndices(GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices);
+	void GL_APIENTRY GetActiveUniformsiv(GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params);
+	GLuint GL_APIENTRY GetUniformBlockIndex(GLuint program, const GLchar *uniformBlockName);
+	void GL_APIENTRY GetActiveUniformBlockiv(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params);
+	void GL_APIENTRY GetActiveUniformBlockName(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName);
+	void GL_APIENTRY UniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
+	void GL_APIENTRY DrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount);
+	void GL_APIENTRY DrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instanceCount);
+	GLsync GL_APIENTRY FenceSync(GLenum condition, GLbitfield flags);
+	GLboolean GL_APIENTRY IsSync(GLsync sync);
+	void GL_APIENTRY DeleteSync(GLsync sync);
+	GLenum GL_APIENTRY ClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout);
+	void GL_APIENTRY WaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout);
+	void GL_APIENTRY GetInteger64v(GLenum pname, GLint64 *data);
+	void GL_APIENTRY GetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
+	void GL_APIENTRY GetInteger64i_v(GLenum target, GLuint index, GLint64 *data);
+	void GL_APIENTRY GetBufferParameteri64v(GLenum target, GLenum pname, GLint64 *params);
+	void GL_APIENTRY GenSamplers(GLsizei count, GLuint *samplers);
+	void GL_APIENTRY DeleteSamplers(GLsizei count, const GLuint *samplers);
+	GLboolean GL_APIENTRY IsSampler(GLuint sampler);
+	void GL_APIENTRY BindSampler(GLuint unit, GLuint sampler);
+	void GL_APIENTRY SamplerParameteri(GLuint sampler, GLenum pname, GLint param);
+	void GL_APIENTRY SamplerParameteriv(GLuint sampler, GLenum pname, const GLint *param);
+	void GL_APIENTRY SamplerParameterf(GLuint sampler, GLenum pname, GLfloat param);
+	void GL_APIENTRY SamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat *param);
+	void GL_APIENTRY GetSamplerParameteriv(GLuint sampler, GLenum pname, GLint *params);
+	void GL_APIENTRY GetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat *params);
+	void GL_APIENTRY VertexAttribDivisor(GLuint index, GLuint divisor);
+	void GL_APIENTRY BindTransformFeedback(GLenum target, GLuint id);
+	void GL_APIENTRY DeleteTransformFeedbacks(GLsizei n, const GLuint *ids);
+	void GL_APIENTRY GenTransformFeedbacks(GLsizei n, GLuint *ids);
+	GLboolean GL_APIENTRY IsTransformFeedback(GLuint id);
+	void GL_APIENTRY PauseTransformFeedback(void);
+	void GL_APIENTRY ResumeTransformFeedback(void);
+	void GL_APIENTRY GetProgramBinary(GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary);
+	void GL_APIENTRY ProgramBinary(GLuint program, GLenum binaryFormat, const void *binary, GLsizei length);
+	void GL_APIENTRY ProgramParameteri(GLuint program, GLenum pname, GLint value);
+	void GL_APIENTRY InvalidateFramebuffer(GLenum target, GLsizei numAttachments, const GLenum *attachments);
+	void GL_APIENTRY InvalidateSubFramebuffer(GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height);
+	void GL_APIENTRY TexStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+	void GL_APIENTRY TexStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+	void GL_APIENTRY 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 75f4d06..acaf6b2 100644
--- a/src/OpenGL/libGLESv2/libGLESv2.cpp
+++ b/src/OpenGL/libGLESv2/libGLESv2.cpp
@@ -57,7 +57,7 @@
 
 using namespace es2;
 
-void ActiveTexture(GLenum texture)
+void GL_APIENTRY ActiveTexture(GLenum texture)
 {
 	TRACE("(GLenum texture = 0x%X)", texture);
 
@@ -74,7 +74,7 @@
 	}
 }
 
-void AttachShader(GLuint program, GLuint shader)
+void GL_APIENTRY AttachShader(GLuint program, GLuint shader)
 {
 	TRACE("(GLuint program = %d, GLuint shader = %d)", program, shader);
 
@@ -116,7 +116,7 @@
 	}
 }
 
-void BeginQueryEXT(GLenum target, GLuint name)
+void GL_APIENTRY BeginQueryEXT(GLenum target, GLuint name)
 {
 	TRACE("(GLenum target = 0x%X, GLuint name = %d)", target, name);
 
@@ -142,7 +142,7 @@
 	}
 }
 
-void BindAttribLocation(GLuint program, GLuint index, const GLchar* name)
+void GL_APIENTRY BindAttribLocation(GLuint program, GLuint index, const GLchar* name)
 {
 	TRACE("(GLuint program = %d, GLuint index = %d, const GLchar* name = %s)", program, index, name);
 
@@ -178,7 +178,7 @@
 	}
 }
 
-void BindBuffer(GLenum target, GLuint buffer)
+void GL_APIENTRY BindBuffer(GLenum target, GLuint buffer)
 {
 	TRACE("(GLenum target = 0x%X, GLuint buffer = %d)", target, buffer);
 
@@ -218,7 +218,7 @@
 	}
 }
 
-void BindFramebuffer(GLenum target, GLuint framebuffer)
+void GL_APIENTRY BindFramebuffer(GLenum target, GLuint framebuffer)
 {
 	TRACE("(GLenum target = 0x%X, GLuint framebuffer = %d)", target, framebuffer);
 
@@ -243,7 +243,7 @@
 	}
 }
 
-void BindRenderbuffer(GLenum target, GLuint renderbuffer)
+void GL_APIENTRY BindRenderbuffer(GLenum target, GLuint renderbuffer)
 {
 	TRACE("(GLenum target = 0x%X, GLuint renderbuffer = %d)", target, renderbuffer);
 
@@ -264,7 +264,7 @@
 	}
 }
 
-void BindTexture(GLenum target, GLuint texture)
+void GL_APIENTRY BindTexture(GLenum target, GLuint texture)
 {
 	TRACE("(GLenum target = 0x%X, GLuint texture = %d)", target, texture);
 
@@ -305,7 +305,7 @@
 	}
 }
 
-void BlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
+void GL_APIENTRY BlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
 {
 	TRACE("(GLclampf red = %f, GLclampf green = %f, GLclampf blue = %f, GLclampf alpha = %f)",
 		red, green, blue, alpha);
@@ -318,7 +318,7 @@
 	}
 }
 
-void BlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha)
+void GL_APIENTRY BlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha)
 {
 	TRACE("(GLenum modeRGB = 0x%X, GLenum modeAlpha = 0x%X)", modeRGB, modeAlpha);
 
@@ -354,12 +354,12 @@
 	}
 }
 
-void BlendEquation(GLenum mode)
+void GL_APIENTRY BlendEquation(GLenum mode)
 {
 	BlendEquationSeparate(mode, mode);
 }
 
-void BlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
+void GL_APIENTRY BlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
 {
 	TRACE("(GLenum srcRGB = 0x%X, GLenum dstRGB = 0x%X, GLenum srcAlpha = 0x%X, GLenum dstAlpha = 0x%X)",
 	      srcRGB, dstRGB, srcAlpha, dstAlpha);
@@ -462,12 +462,12 @@
 	}
 }
 
-void BlendFunc(GLenum sfactor, GLenum dfactor)
+void GL_APIENTRY BlendFunc(GLenum sfactor, GLenum dfactor)
 {
 	BlendFuncSeparate(sfactor, dfactor, sfactor, dfactor);
 }
 
-void BufferData(GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage)
+void GL_APIENTRY BufferData(GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage)
 {
 	size = static_cast<GLint>(size);   // Work around issues with some 64-bit applications
 
@@ -516,7 +516,7 @@
 	}
 }
 
-void BufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data)
+void GL_APIENTRY BufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data)
 {
 	size = static_cast<GLint>(size);   // Work around issues with some 64-bit applications
 	offset = static_cast<GLint>(offset);
@@ -560,7 +560,7 @@
 	}
 }
 
-GLenum CheckFramebufferStatus(GLenum target)
+GLenum GL_APIENTRY CheckFramebufferStatus(GLenum target)
 {
 	TRACE("(GLenum target = 0x%X)", target);
 
@@ -594,7 +594,7 @@
 	return 0;
 }
 
-void Clear(GLbitfield mask)
+void GL_APIENTRY Clear(GLbitfield mask)
 {
 	TRACE("(GLbitfield mask = %X)", mask);
 
@@ -611,7 +611,7 @@
 	}
 }
 
-void ClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
+void GL_APIENTRY ClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
 {
 	TRACE("(GLclampf red = %f, GLclampf green = %f, GLclampf blue = %f, GLclampf alpha = %f)",
 	      red, green, blue, alpha);
@@ -624,7 +624,7 @@
 	}
 }
 
-void ClearDepthf(GLclampf depth)
+void GL_APIENTRY ClearDepthf(GLclampf depth)
 {
 	TRACE("(GLclampf depth = %f)", depth);
 
@@ -636,7 +636,7 @@
 	}
 }
 
-void ClearStencil(GLint s)
+void GL_APIENTRY ClearStencil(GLint s)
 {
 	TRACE("(GLint s = %d)", s);
 
@@ -648,7 +648,7 @@
 	}
 }
 
-void ColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
+void GL_APIENTRY ColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
 {
 	TRACE("(GLboolean red = %d, GLboolean green = %d, GLboolean blue = %d, GLboolean alpha = %d)",
 	      red, green, blue, alpha);
@@ -661,7 +661,7 @@
 	}
 }
 
-void CompileShader(GLuint shader)
+void GL_APIENTRY CompileShader(GLuint shader)
 {
 	TRACE("(GLuint shader = %d)", shader);
 
@@ -687,8 +687,8 @@
 	}
 }
 
-void CompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height,
-                          GLint border, GLsizei imageSize, const GLvoid* data)
+void GL_APIENTRY CompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height,
+                                      GLint border, GLsizei imageSize, const GLvoid* data)
 {
 	TRACE("(GLenum target = 0x%X, GLint level = %d, GLenum internalformat = 0x%X, GLsizei width = %d, "
 	      "GLsizei height = %d, GLint border = %d, GLsizei imageSize = %d, const GLvoid* data = %p)",
@@ -786,8 +786,8 @@
 	}
 }
 
-void CompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
-                             GLenum format, GLsizei imageSize, const GLvoid* data)
+void GL_APIENTRY CompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
+                                         GLenum format, GLsizei imageSize, const GLvoid* data)
 {
 	TRACE("(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "
 	      "GLsizei width = %d, GLsizei height = %d, GLenum format = 0x%X, "
@@ -863,7 +863,7 @@
 	}
 }
 
-void CopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
+void GL_APIENTRY CopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
 {
 	TRACE("(GLenum target = 0x%X, GLint level = %d, GLenum internalformat = 0x%X, "
 	      "GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d, GLint border = %d)",
@@ -1011,7 +1011,7 @@
 	}
 }
 
-void CopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+void GL_APIENTRY CopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
 {
 	TRACE("(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "
 	      "GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d)",
@@ -1077,7 +1077,7 @@
 	}
 }
 
-GLuint CreateProgram(void)
+GLuint GL_APIENTRY CreateProgram(void)
 {
 	TRACE("()");
 
@@ -1091,7 +1091,7 @@
 	return 0;
 }
 
-GLuint CreateShader(GLenum type)
+GLuint GL_APIENTRY CreateShader(GLenum type)
 {
 	TRACE("(GLenum type = 0x%X)", type);
 
@@ -1112,7 +1112,7 @@
 	return 0;
 }
 
-void CullFace(GLenum mode)
+void GL_APIENTRY CullFace(GLenum mode)
 {
 	TRACE("(GLenum mode = 0x%X)", mode);
 
@@ -1135,7 +1135,7 @@
 	}
 }
 
-void DeleteBuffers(GLsizei n, const GLuint* buffers)
+void GL_APIENTRY DeleteBuffers(GLsizei n, const GLuint* buffers)
 {
 	TRACE("(GLsizei n = %d, const GLuint* buffers = %p)", n, buffers);
 
@@ -1155,7 +1155,7 @@
 	}
 }
 
-void DeleteFencesNV(GLsizei n, const GLuint* fences)
+void GL_APIENTRY DeleteFencesNV(GLsizei n, const GLuint* fences)
 {
 	TRACE("(GLsizei n = %d, const GLuint* fences = %p)", n, fences);
 
@@ -1175,7 +1175,7 @@
 	}
 }
 
-void DeleteFramebuffers(GLsizei n, const GLuint* framebuffers)
+void GL_APIENTRY DeleteFramebuffers(GLsizei n, const GLuint* framebuffers)
 {
 	TRACE("(GLsizei n = %d, const GLuint* framebuffers = %p)", n, framebuffers);
 
@@ -1198,7 +1198,7 @@
 	}
 }
 
-void DeleteProgram(GLuint program)
+void GL_APIENTRY DeleteProgram(GLuint program)
 {
 	TRACE("(GLuint program = %d)", program);
 
@@ -1227,7 +1227,7 @@
 	}
 }
 
-void DeleteQueriesEXT(GLsizei n, const GLuint *ids)
+void GL_APIENTRY DeleteQueriesEXT(GLsizei n, const GLuint *ids)
 {
 	TRACE("(GLsizei n = %d, const GLuint *ids = %p)", n, ids);
 
@@ -1247,7 +1247,7 @@
 	}
 }
 
-void DeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers)
+void GL_APIENTRY DeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers)
 {
 	TRACE("(GLsizei n = %d, const GLuint* renderbuffers = %p)", n, renderbuffers);
 
@@ -1267,7 +1267,7 @@
 	}
 }
 
-void DeleteShader(GLuint shader)
+void GL_APIENTRY DeleteShader(GLuint shader)
 {
 	TRACE("(GLuint shader = %d)", shader);
 
@@ -1296,7 +1296,7 @@
 	}
 }
 
-void DeleteTextures(GLsizei n, const GLuint* textures)
+void GL_APIENTRY DeleteTextures(GLsizei n, const GLuint* textures)
 {
 	TRACE("(GLsizei n = %d, const GLuint* textures = %p)", n, textures);
 
@@ -1319,7 +1319,7 @@
 	}
 }
 
-void DepthFunc(GLenum func)
+void GL_APIENTRY DepthFunc(GLenum func)
 {
 	TRACE("(GLenum func = 0x%X)", func);
 
@@ -1346,7 +1346,7 @@
 	}
 }
 
-void DepthMask(GLboolean flag)
+void GL_APIENTRY DepthMask(GLboolean flag)
 {
 	TRACE("(GLboolean flag = %d)", flag);
 
@@ -1358,7 +1358,7 @@
 	}
 }
 
-void DepthRangef(GLclampf zNear, GLclampf zFar)
+void GL_APIENTRY DepthRangef(GLclampf zNear, GLclampf zFar)
 {
 	TRACE("(GLclampf zNear = %f, GLclampf zFar = %f)", zNear, zFar);
 
@@ -1370,7 +1370,7 @@
 	}
 }
 
-void DetachShader(GLuint program, GLuint shader)
+void GL_APIENTRY DetachShader(GLuint program, GLuint shader)
 {
 	TRACE("(GLuint program = %d, GLuint shader = %d)", program, shader);
 
@@ -1416,7 +1416,7 @@
 	}
 }
 
-void Disable(GLenum cap)
+void GL_APIENTRY Disable(GLenum cap)
 {
 	TRACE("(GLenum cap = 0x%X)", cap);
 
@@ -1443,7 +1443,7 @@
 	}
 }
 
-void DisableVertexAttribArray(GLuint index)
+void GL_APIENTRY DisableVertexAttribArray(GLuint index)
 {
 	TRACE("(GLuint index = %d)", index);
 
@@ -1460,7 +1460,7 @@
 	}
 }
 
-void DrawArrays(GLenum mode, GLint first, GLsizei count)
+void GL_APIENTRY DrawArrays(GLenum mode, GLint first, GLsizei count)
 {
 	TRACE("(GLenum mode = 0x%X, GLint first = %d, GLsizei count = %d)", mode, first, count);
 
@@ -1497,7 +1497,7 @@
 	}
 }
 
-void DrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices)
+void GL_APIENTRY DrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices)
 {
 	TRACE("(GLenum mode = 0x%X, GLsizei count = %d, GLenum type = 0x%X, const GLvoid* indices = %p)",
 	      mode, count, type, indices);
@@ -1545,7 +1545,7 @@
 	}
 }
 
-void DrawArraysInstancedEXT(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount)
+void GL_APIENTRY DrawArraysInstancedEXT(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);
@@ -1583,7 +1583,7 @@
 	}
 }
 
-void DrawElementsInstancedEXT(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instanceCount)
+void GL_APIENTRY DrawElementsInstancedEXT(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);
@@ -1631,7 +1631,7 @@
 	}
 }
 
-void VertexAttribDivisorEXT(GLuint index, GLuint divisor)
+void GL_APIENTRY VertexAttribDivisorEXT(GLuint index, GLuint divisor)
 {
 	TRACE("(GLuint index = %d, GLuint divisor = %d)", index, divisor);
 
@@ -1648,7 +1648,7 @@
 	}
 }
 
-void DrawArraysInstancedANGLE(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount)
+void GL_APIENTRY DrawArraysInstancedANGLE(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);
@@ -1691,7 +1691,7 @@
 	}
 }
 
-void DrawElementsInstancedANGLE(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instanceCount)
+void GL_APIENTRY DrawElementsInstancedANGLE(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);
@@ -1744,7 +1744,7 @@
 	}
 }
 
-void VertexAttribDivisorANGLE(GLuint index, GLuint divisor)
+void GL_APIENTRY VertexAttribDivisorANGLE(GLuint index, GLuint divisor)
 {
 	TRACE("(GLuint index = %d, GLuint divisor = %d)", index, divisor);
 
@@ -1761,7 +1761,7 @@
 	}
 }
 
-void Enable(GLenum cap)
+void GL_APIENTRY Enable(GLenum cap)
 {
 	TRACE("(GLenum cap = 0x%X)", cap);
 
@@ -1788,7 +1788,7 @@
 	}
 }
 
-void EnableVertexAttribArray(GLuint index)
+void GL_APIENTRY EnableVertexAttribArray(GLuint index)
 {
 	TRACE("(GLuint index = %d)", index);
 
@@ -1805,7 +1805,7 @@
 	}
 }
 
-void EndQueryEXT(GLenum target)
+void GL_APIENTRY EndQueryEXT(GLenum target)
 {
 	TRACE("GLenum target = 0x%X)", target);
 
@@ -1826,7 +1826,7 @@
 	}
 }
 
-void FinishFenceNV(GLuint fence)
+void GL_APIENTRY FinishFenceNV(GLuint fence)
 {
 	TRACE("(GLuint fence = %d)", fence);
 
@@ -1845,7 +1845,7 @@
 	}
 }
 
-void Finish(void)
+void GL_APIENTRY Finish(void)
 {
 	TRACE("()");
 
@@ -1857,7 +1857,7 @@
 	}
 }
 
-void Flush(void)
+void GL_APIENTRY Flush(void)
 {
 	TRACE("()");
 
@@ -1869,7 +1869,7 @@
 	}
 }
 
-void FramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
+void GL_APIENTRY FramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
 {
 	TRACE("(GLenum target = 0x%X, GLenum attachment = 0x%X, GLenum renderbuffertarget = 0x%X, "
 	      "GLuint renderbuffer = %d)", target, attachment, renderbuffertarget, renderbuffer);
@@ -1943,7 +1943,7 @@
 	}
 }
 
-void FramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
+void GL_APIENTRY FramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
 {
 	TRACE("(GLenum target = 0x%X, GLenum attachment = 0x%X, GLenum textarget = 0x%X, "
 	      "GLuint texture = %d, GLint level = %d)", target, attachment, textarget, texture, level);
@@ -2058,7 +2058,7 @@
 	}
 }
 
-void FrontFace(GLenum mode)
+void GL_APIENTRY FrontFace(GLenum mode)
 {
 	TRACE("(GLenum mode = 0x%X)", mode);
 
@@ -2080,7 +2080,7 @@
 	}
 }
 
-void GenBuffers(GLsizei n, GLuint* buffers)
+void GL_APIENTRY GenBuffers(GLsizei n, GLuint* buffers)
 {
 	TRACE("(GLsizei n = %d, GLuint* buffers = %p)", n, buffers);
 
@@ -2100,7 +2100,7 @@
 	}
 }
 
-void GenerateMipmap(GLenum target)
+void GL_APIENTRY GenerateMipmap(GLenum target)
 {
 	TRACE("(GLenum target = 0x%X)", target);
 
@@ -2141,7 +2141,7 @@
 	}
 }
 
-void GenFencesNV(GLsizei n, GLuint* fences)
+void GL_APIENTRY GenFencesNV(GLsizei n, GLuint* fences)
 {
 	TRACE("(GLsizei n = %d, GLuint* fences = %p)", n, fences);
 
@@ -2161,7 +2161,7 @@
 	}
 }
 
-void GenFramebuffers(GLsizei n, GLuint* framebuffers)
+void GL_APIENTRY GenFramebuffers(GLsizei n, GLuint* framebuffers)
 {
 	TRACE("(GLsizei n = %d, GLuint* framebuffers = %p)", n, framebuffers);
 
@@ -2181,7 +2181,7 @@
 	}
 }
 
-void GenQueriesEXT(GLsizei n, GLuint* ids)
+void GL_APIENTRY GenQueriesEXT(GLsizei n, GLuint* ids)
 {
 	TRACE("(GLsizei n = %d, GLuint* ids = %p)", n, ids);
 
@@ -2201,7 +2201,7 @@
 	}
 }
 
-void GenRenderbuffers(GLsizei n, GLuint* renderbuffers)
+void GL_APIENTRY GenRenderbuffers(GLsizei n, GLuint* renderbuffers)
 {
 	TRACE("(GLsizei n = %d, GLuint* renderbuffers = %p)", n, renderbuffers);
 
@@ -2221,7 +2221,7 @@
 	}
 }
 
-void GenTextures(GLsizei n, GLuint* textures)
+void GL_APIENTRY GenTextures(GLsizei n, GLuint* textures)
 {
 	TRACE("(GLsizei n = %d, GLuint* textures = %p)", n, textures);
 
@@ -2241,7 +2241,7 @@
 	}
 }
 
-void GetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, GLchar *name)
+void GL_APIENTRY GetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, GLchar *name)
 {
 	TRACE("(GLuint program = %d, GLuint index = %d, GLsizei bufsize = %d, GLsizei *length = %p, "
 	      "GLint *size = %p, GLenum *type = %p, GLchar *name = %p)",
@@ -2279,7 +2279,7 @@
 	}
 }
 
-void GetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name)
+void GL_APIENTRY GetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name)
 {
 	TRACE("(GLuint program = %d, GLuint index = %d, GLsizei bufsize = %d, "
 	      "GLsizei* length = %p, GLint* size = %p, GLenum* type = %p, GLchar* name = %s)",
@@ -2317,7 +2317,7 @@
 	}
 }
 
-void GetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders)
+void GL_APIENTRY GetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders)
 {
 	TRACE("(GLuint program = %d, GLsizei maxcount = %d, GLsizei* count = %p, GLuint* shaders = %p)",
 	      program, maxcount, count, shaders);
@@ -2349,7 +2349,7 @@
 	}
 }
 
-int GetAttribLocation(GLuint program, const GLchar* name)
+int GL_APIENTRY GetAttribLocation(GLuint program, const GLchar* name)
 {
 	TRACE("(GLuint program = %d, const GLchar* name = %s)", program, name);
 
@@ -2382,7 +2382,7 @@
 	return -1;
 }
 
-void GetBooleanv(GLenum pname, GLboolean* params)
+void GL_APIENTRY GetBooleanv(GLenum pname, GLboolean* params)
 {
 	TRACE("(GLenum pname = 0x%X, GLboolean* params = %p)",  pname, params);
 
@@ -2438,7 +2438,7 @@
 	}
 }
 
-void GetBufferParameteriv(GLenum target, GLenum pname, GLint* params)
+void GL_APIENTRY GetBufferParameteriv(GLenum target, GLenum pname, GLint* params)
 {
 	TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint* params = %p)", target, pname, params);
 
@@ -2484,7 +2484,7 @@
 	}
 }
 
-GLenum GetError(void)
+GLenum GL_APIENTRY GetError(void)
 {
 	TRACE("()");
 
@@ -2498,7 +2498,7 @@
 	return GL_NO_ERROR;
 }
 
-void GetFenceivNV(GLuint fence, GLenum pname, GLint *params)
+void GL_APIENTRY GetFenceivNV(GLuint fence, GLenum pname, GLint *params)
 {
 	TRACE("(GLuint fence = %d, GLenum pname = 0x%X, GLint *params = %p)", fence, pname, params);
 
@@ -2517,7 +2517,7 @@
 	}
 }
 
-void GetFloatv(GLenum pname, GLfloat* params)
+void GL_APIENTRY GetFloatv(GLenum pname, GLfloat* params)
 {
 	TRACE("(GLenum pname = 0x%X, GLfloat* params = %p)", pname, params);
 
@@ -2570,7 +2570,7 @@
 	}
 }
 
-void GetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint* params)
+void GL_APIENTRY GetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint* params)
 {
 	TRACE("(GLenum target = 0x%X, GLenum attachment = 0x%X, GLenum pname = 0x%X, GLint* params = %p)",
 	      target, attachment, pname, params);
@@ -2810,14 +2810,14 @@
 	}
 }
 
-GLenum GetGraphicsResetStatusEXT(void)
+GLenum GL_APIENTRY GetGraphicsResetStatusEXT(void)
 {
 	TRACE("()");
 
 	return GL_NO_ERROR;
 }
 
-void GetIntegerv(GLenum pname, GLint* params)
+void GL_APIENTRY GetIntegerv(GLenum pname, GLint* params)
 {
 	TRACE("(GLenum pname = 0x%X, GLint* params = %p)", pname, params);
 
@@ -2895,7 +2895,7 @@
 	}
 }
 
-void GetProgramiv(GLuint program, GLenum pname, GLint* params)
+void GL_APIENTRY GetProgramiv(GLuint program, GLenum pname, GLint* params)
 {
 	TRACE("(GLuint program = %d, GLenum pname = 0x%X, GLint* params = %p)", program, pname, params);
 
@@ -2973,7 +2973,7 @@
 	}
 }
 
-void GetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog)
+void GL_APIENTRY GetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog)
 {
 	TRACE("(GLuint program = %d, GLsizei bufsize = %d, GLsizei* length = %p, GLchar* infolog = %p)",
 	      program, bufsize, length, infolog);
@@ -3005,7 +3005,7 @@
 	}
 }
 
-void GetQueryivEXT(GLenum target, GLenum pname, GLint *params)
+void GL_APIENTRY GetQueryivEXT(GLenum target, GLenum pname, GLint *params)
 {
 	TRACE("GLenum target = 0x%X, GLenum pname = 0x%X, GLint *params = %p)", target, pname, params);
 
@@ -3025,7 +3025,7 @@
 	}
 }
 
-void GetQueryObjectuivEXT(GLuint name, GLenum pname, GLuint *params)
+void GL_APIENTRY GetQueryObjectuivEXT(GLuint name, GLenum pname, GLuint *params)
 {
 	TRACE("(GLuint name = %d, GLenum pname = 0x%X, GLuint *params = %p)", name, pname, params);
 
@@ -3068,7 +3068,7 @@
 	}
 }
 
-void GetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* params)
+void GL_APIENTRY GetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* params)
 {
 	TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint* params = %p)", target, pname, params);
 
@@ -3111,7 +3111,7 @@
 	}
 }
 
-void GetShaderiv(GLuint shader, GLenum pname, GLint* params)
+void GL_APIENTRY GetShaderiv(GLuint shader, GLenum pname, GLint* params)
 {
 	TRACE("(GLuint shader = %d, GLenum pname = %d, GLint* params = %p)", shader, pname, params);
 
@@ -3156,7 +3156,7 @@
 	}
 }
 
-void GetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog)
+void GL_APIENTRY GetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog)
 {
 	TRACE("(GLuint shader = %d, GLsizei bufsize = %d, GLsizei* length = %p, GLchar* infolog = %p)",
 	      shader, bufsize, length, infolog);
@@ -3188,7 +3188,7 @@
 	}
 }
 
-void GetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision)
+void GL_APIENTRY GetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision)
 {
 	TRACE("(GLenum shadertype = 0x%X, GLenum precisiontype = 0x%X, GLint* range = %p, GLint* precision = %p)",
 	      shadertype, precisiontype, range, precision);
@@ -3225,7 +3225,7 @@
 	}
 }
 
-void GetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source)
+void GL_APIENTRY GetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source)
 {
 	TRACE("(GLuint shader = %d, GLsizei bufsize = %d, GLsizei* length = %p, GLchar* source = %p)",
 	      shader, bufsize, length, source);
@@ -3257,7 +3257,7 @@
 	}
 }
 
-const GLubyte* GetString(GLenum name)
+const GLubyte* GL_APIENTRY GetString(GLenum name)
 {
 	TRACE("(GLenum name = 0x%X)", name);
 
@@ -3281,7 +3281,7 @@
 	}
 }
 
-void GetTexParameterfv(GLenum target, GLenum pname, GLfloat* params)
+void GL_APIENTRY GetTexParameterfv(GLenum target, GLenum pname, GLfloat* params)
 {
 	TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLfloat* params = %p)", target, pname, params);
 
@@ -3361,7 +3361,7 @@
 	}
 }
 
-void GetTexParameteriv(GLenum target, GLenum pname, GLint* params)
+void GL_APIENTRY GetTexParameteriv(GLenum target, GLenum pname, GLint* params)
 {
 	TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint* params = %p)", target, pname, params);
 
@@ -3441,7 +3441,7 @@
 	}
 }
 
-void GetnUniformfvEXT(GLuint program, GLint location, GLsizei bufSize, GLfloat* params)
+void GL_APIENTRY GetnUniformfvEXT(GLuint program, GLint location, GLsizei bufSize, GLfloat* params)
 {
 	TRACE("(GLuint program = %d, GLint location = %d, GLsizei bufSize = %d, GLfloat* params = %p)",
 	      program, location, bufSize, params);
@@ -3481,7 +3481,7 @@
 	}
 }
 
-void GetUniformfv(GLuint program, GLint location, GLfloat* params)
+void GL_APIENTRY GetUniformfv(GLuint program, GLint location, GLfloat* params)
 {
 	TRACE("(GLuint program = %d, GLint location = %d, GLfloat* params = %p)", program, location, params);
 
@@ -3515,7 +3515,7 @@
 	}
 }
 
-void GetnUniformivEXT(GLuint program, GLint location, GLsizei bufSize, GLint* params)
+void GL_APIENTRY GetnUniformivEXT(GLuint program, GLint location, GLsizei bufSize, GLint* params)
 {
 	TRACE("(GLuint program = %d, GLint location = %d, GLsizei bufSize = %d, GLint* params = %p)",
 	      program, location, bufSize, params);
@@ -3555,7 +3555,7 @@
 	}
 }
 
-void GetUniformiv(GLuint program, GLint location, GLint* params)
+void GL_APIENTRY GetUniformiv(GLuint program, GLint location, GLint* params)
 {
 	TRACE("(GLuint program = %d, GLint location = %d, GLint* params = %p)", program, location, params);
 
@@ -3589,7 +3589,7 @@
 	}
 }
 
-int GetUniformLocation(GLuint program, const GLchar* name)
+int GL_APIENTRY GetUniformLocation(GLuint program, const GLchar* name)
 {
 	TRACE("(GLuint program = %d, const GLchar* name = %s)", program, name);
 
@@ -3627,7 +3627,7 @@
 	return -1;
 }
 
-void GetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params)
+void GL_APIENTRY GetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params)
 {
 	TRACE("(GLuint index = %d, GLenum pname = 0x%X, GLfloat* params = %p)", index, pname, params);
 
@@ -3680,7 +3680,7 @@
 	}
 }
 
-void GetVertexAttribiv(GLuint index, GLenum pname, GLint* params)
+void GL_APIENTRY GetVertexAttribiv(GLuint index, GLenum pname, GLint* params)
 {
 	TRACE("(GLuint index = %d, GLenum pname = 0x%X, GLint* params = %p)", index, pname, params);
 
@@ -3734,7 +3734,7 @@
 	}
 }
 
-void GetVertexAttribPointerv(GLuint index, GLenum pname, GLvoid** pointer)
+void GL_APIENTRY GetVertexAttribPointerv(GLuint index, GLenum pname, GLvoid** pointer)
 {
 	TRACE("(GLuint index = %d, GLenum pname = 0x%X, GLvoid** pointer = %p)", index, pname, pointer);
 
@@ -3756,7 +3756,7 @@
 	}
 }
 
-void Hint(GLenum target, GLenum mode)
+void GL_APIENTRY Hint(GLenum target, GLenum mode)
 {
 	TRACE("(GLenum target = 0x%X, GLenum mode = 0x%X)", target, mode);
 
@@ -3791,7 +3791,7 @@
 	}
 }
 
-GLboolean IsBuffer(GLuint buffer)
+GLboolean GL_APIENTRY IsBuffer(GLuint buffer)
 {
 	TRACE("(GLuint buffer = %d)", buffer);
 
@@ -3810,7 +3810,7 @@
 	return GL_FALSE;
 }
 
-GLboolean IsEnabled(GLenum cap)
+GLboolean GL_APIENTRY IsEnabled(GLenum cap)
 {
 	TRACE("(GLenum cap = 0x%X)", cap);
 
@@ -3839,7 +3839,7 @@
 	return false;
 }
 
-GLboolean IsFenceNV(GLuint fence)
+GLboolean GL_APIENTRY IsFenceNV(GLuint fence)
 {
 	TRACE("(GLuint fence = %d)", fence);
 
@@ -3860,7 +3860,7 @@
 	return GL_FALSE;
 }
 
-GLboolean IsFramebuffer(GLuint framebuffer)
+GLboolean GL_APIENTRY IsFramebuffer(GLuint framebuffer)
 {
 	TRACE("(GLuint framebuffer = %d)", framebuffer);
 
@@ -3879,7 +3879,7 @@
 	return GL_FALSE;
 }
 
-GLboolean IsProgram(GLuint program)
+GLboolean GL_APIENTRY IsProgram(GLuint program)
 {
 	TRACE("(GLuint program = %d)", program);
 
@@ -3898,7 +3898,7 @@
 	return GL_FALSE;
 }
 
-GLboolean IsQueryEXT(GLuint name)
+GLboolean GL_APIENTRY IsQueryEXT(GLuint name)
 {
 	TRACE("(GLuint name = %d)", name);
 
@@ -3922,7 +3922,7 @@
 	return GL_FALSE;
 }
 
-GLboolean IsRenderbuffer(GLuint renderbuffer)
+GLboolean GL_APIENTRY IsRenderbuffer(GLuint renderbuffer)
 {
 	TRACE("(GLuint renderbuffer = %d)", renderbuffer);
 
@@ -3941,7 +3941,7 @@
 	return GL_FALSE;
 }
 
-GLboolean IsShader(GLuint shader)
+GLboolean GL_APIENTRY IsShader(GLuint shader)
 {
 	TRACE("(GLuint shader = %d)", shader);
 
@@ -3960,7 +3960,7 @@
 	return GL_FALSE;
 }
 
-GLboolean IsTexture(GLuint texture)
+GLboolean GL_APIENTRY IsTexture(GLuint texture)
 {
 	TRACE("(GLuint texture = %d)", texture);
 
@@ -3979,7 +3979,7 @@
 	return GL_FALSE;
 }
 
-void LineWidth(GLfloat width)
+void GL_APIENTRY LineWidth(GLfloat width)
 {
 	TRACE("(GLfloat width = %f)", width);
 
@@ -3996,7 +3996,7 @@
 	}
 }
 
-void LinkProgram(GLuint program)
+void GL_APIENTRY LinkProgram(GLuint program)
 {
 	TRACE("(GLuint program = %d)", program);
 
@@ -4031,7 +4031,7 @@
 	}
 }
 
-void PixelStorei(GLenum pname, GLint param)
+void GL_APIENTRY PixelStorei(GLenum pname, GLint param)
 {
 	TRACE("(GLenum pname = 0x%X, GLint param = %d)", pname, param);
 
@@ -4117,7 +4117,7 @@
 	}
 }
 
-void PolygonOffset(GLfloat factor, GLfloat units)
+void GL_APIENTRY PolygonOffset(GLfloat factor, GLfloat units)
 {
 	TRACE("(GLfloat factor = %f, GLfloat units = %f)", factor, units);
 
@@ -4129,8 +4129,8 @@
 	}
 }
 
-void ReadnPixelsEXT(GLint x, GLint y, GLsizei width, GLsizei height,
-                    GLenum format, GLenum type, GLsizei bufSize, GLvoid *data)
+void GL_APIENTRY ReadnPixelsEXT(GLint x, GLint y, GLsizei width, GLsizei height,
+                                GLenum format, GLenum type, GLsizei bufSize, GLvoid *data)
 {
 	TRACE("(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d, "
 	      "GLenum format = 0x%X, GLenum type = 0x%X, GLsizei bufSize = 0x%d, GLvoid *data = %p)",
@@ -4149,7 +4149,7 @@
 	}
 }
 
-void ReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels)
+void GL_APIENTRY ReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels)
 {
 	TRACE("(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d, "
 	      "GLenum format = 0x%X, GLenum type = 0x%X, GLvoid* pixels = %p)",
@@ -4168,14 +4168,14 @@
 	}
 }
 
-void ReleaseShaderCompiler(void)
+void GL_APIENTRY ReleaseShaderCompiler(void)
 {
 	TRACE("()");
 
 	es2::Shader::releaseCompiler();
 }
 
-void RenderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
+void GL_APIENTRY RenderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
 {
 	TRACE("(GLenum target = 0x%X, GLsizei samples = %d, GLenum internalformat = 0x%X, GLsizei width = %d, GLsizei height = %d)",
 	      target, samples, internalformat, width, height);
@@ -4231,17 +4231,17 @@
 	}
 }
 
-void RenderbufferStorageMultisampleANGLE(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
+void GL_APIENTRY RenderbufferStorageMultisampleANGLE(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
 {
 	RenderbufferStorageMultisample(target, samples, internalformat, width, height);
 }
 
-void RenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
+void GL_APIENTRY RenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
 {
 	RenderbufferStorageMultisample(target, 0, internalformat, width, height);
 }
 
-void SampleCoverage(GLclampf value, GLboolean invert)
+void GL_APIENTRY SampleCoverage(GLclampf value, GLboolean invert)
 {
 	TRACE("(GLclampf value = %f, GLboolean invert = %d)", value, invert);
 
@@ -4253,7 +4253,7 @@
 	}
 }
 
-void SetFenceNV(GLuint fence, GLenum condition)
+void GL_APIENTRY SetFenceNV(GLuint fence, GLenum condition)
 {
 	TRACE("(GLuint fence = %d, GLenum condition = 0x%X)", fence, condition);
 
@@ -4277,7 +4277,7 @@
 	}
 }
 
-void Scissor(GLint x, GLint y, GLsizei width, GLsizei height)
+void GL_APIENTRY Scissor(GLint x, GLint y, GLsizei width, GLsizei height)
 {
 	TRACE("(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d)", x, y, width, height);
 
@@ -4294,7 +4294,7 @@
 	}
 }
 
-void ShaderBinary(GLsizei n, const GLuint* shaders, GLenum binaryformat, const GLvoid* binary, GLsizei length)
+void GL_APIENTRY ShaderBinary(GLsizei n, const GLuint* shaders, GLenum binaryformat, const GLvoid* binary, GLsizei length)
 {
 	TRACE("(GLsizei n = %d, const GLuint* shaders = %p, GLenum binaryformat = 0x%X, "
 	      "const GLvoid* binary = %p, GLsizei length = %d)",
@@ -4304,7 +4304,7 @@
 	return error(GL_INVALID_ENUM);
 }
 
-void ShaderSource(GLuint shader, GLsizei count, const GLchar *const *string, const GLint *length)
+void GL_APIENTRY ShaderSource(GLuint shader, GLsizei count, const GLchar *const *string, const GLint *length)
 {
 	TRACE("(GLuint shader = %d, GLsizei count = %d, const GLchar** string = %p, const GLint* length = %p)",
 	      shader, count, string, length);
@@ -4336,7 +4336,7 @@
 	}
 }
 
-void StencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask)
+void GL_APIENTRY 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,12 +4381,12 @@
 	}
 }
 
-void StencilFunc(GLenum func, GLint ref, GLuint mask)
+void GL_APIENTRY StencilFunc(GLenum func, GLint ref, GLuint mask)
 {
 	StencilFuncSeparate(GL_FRONT_AND_BACK, func, ref, mask);
 }
 
-void StencilMaskSeparate(GLenum face, GLuint mask)
+void GL_APIENTRY StencilMaskSeparate(GLenum face, GLuint mask)
 {
 	TRACE("(GLenum face = 0x%X, GLuint mask = %d)", face, mask);
 
@@ -4416,12 +4416,12 @@
 	}
 }
 
-void StencilMask(GLuint mask)
+void GL_APIENTRY StencilMask(GLuint mask)
 {
 	StencilMaskSeparate(GL_FRONT_AND_BACK, mask);
 }
 
-void StencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass)
+void GL_APIENTRY StencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass)
 {
 	TRACE("(GLenum face = 0x%X, GLenum fail = 0x%X, GLenum zfail = 0x%X, GLenum zpas = 0x%Xs)",
 	      face, fail, zfail, zpass);
@@ -4497,12 +4497,12 @@
 	}
 }
 
-void StencilOp(GLenum fail, GLenum zfail, GLenum zpass)
+void GL_APIENTRY StencilOp(GLenum fail, GLenum zfail, GLenum zpass)
 {
 	StencilOpSeparate(GL_FRONT_AND_BACK, fail, zfail, zpass);
 }
 
-GLboolean TestFenceNV(GLuint fence)
+GLboolean GL_APIENTRY TestFenceNV(GLuint fence)
 {
 	TRACE("(GLuint fence = %d)", fence);
 
@@ -4523,8 +4523,8 @@
 	return GL_TRUE;
 }
 
-void TexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
-                GLint border, GLenum format, GLenum type, const GLvoid* data)
+void GL_APIENTRY TexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
+                            GLint border, GLenum format, GLenum type, const GLvoid* data)
 {
 	TRACE("(GLenum target = 0x%X, GLint level = %d, GLint internalformat = %d, GLsizei width = %d, GLsizei height = %d, "
 	      "GLint border = %d, GLenum format = 0x%X, GLenum type = 0x%X, const GLvoid* data =  %p)",
@@ -4626,7 +4626,7 @@
 	}
 }
 
-void TexParameterf(GLenum target, GLenum pname, GLfloat param)
+void GL_APIENTRY TexParameterf(GLenum target, GLenum pname, GLfloat param)
 {
 	TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLfloat param = %f)", target, pname, param);
 
@@ -4745,12 +4745,12 @@
 	}
 }
 
-void TexParameterfv(GLenum target, GLenum pname, const GLfloat* params)
+void GL_APIENTRY TexParameterfv(GLenum target, GLenum pname, const GLfloat* params)
 {
 	TexParameterf(target, pname, *params);
 }
 
-void TexParameteri(GLenum target, GLenum pname, GLint param)
+void GL_APIENTRY TexParameteri(GLenum target, GLenum pname, GLint param)
 {
 	TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint param = %d)", target, pname, param);
 
@@ -4873,13 +4873,13 @@
 	}
 }
 
-void TexParameteriv(GLenum target, GLenum pname, const GLint* params)
+void GL_APIENTRY TexParameteriv(GLenum target, GLenum pname, const GLint* params)
 {
 	TexParameteri(target, pname, *params);
 }
 
-void TexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
-                   GLenum format, GLenum type, const GLvoid* data)
+void GL_APIENTRY TexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
+                               GLenum format, GLenum type, const GLvoid* data)
 {
 	TRACE("(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "
 	      "GLsizei width = %d, GLsizei height = %d, GLenum format = 0x%X, GLenum type = 0x%X, "
@@ -4950,7 +4950,7 @@
 	}
 }
 
-void Uniform1fv(GLint location, GLsizei count, const GLfloat* v)
+void GL_APIENTRY Uniform1fv(GLint location, GLsizei count, const GLfloat* v)
 {
 	TRACE("(GLint location = %d, GLsizei count = %d, const GLfloat* v = %p)", location, count, v);
 
@@ -4982,12 +4982,12 @@
 	}
 }
 
-void Uniform1f(GLint location, GLfloat x)
+void GL_APIENTRY Uniform1f(GLint location, GLfloat x)
 {
 	Uniform1fv(location, 1, &x);
 }
 
-void Uniform1iv(GLint location, GLsizei count, const GLint* v)
+void GL_APIENTRY Uniform1iv(GLint location, GLsizei count, const GLint* v)
 {
 	TRACE("(GLint location = %d, GLsizei count = %d, const GLint* v = %p)", location, count, v);
 
@@ -5019,12 +5019,12 @@
 	}
 }
 
-void Uniform1i(GLint location, GLint x)
+void GL_APIENTRY Uniform1i(GLint location, GLint x)
 {
 	Uniform1iv(location, 1, &x);
 }
 
-void Uniform2fv(GLint location, GLsizei count, const GLfloat* v)
+void GL_APIENTRY Uniform2fv(GLint location, GLsizei count, const GLfloat* v)
 {
 	TRACE("(GLint location = %d, GLsizei count = %d, const GLfloat* v = %p)", location, count, v);
 
@@ -5056,14 +5056,14 @@
 	}
 }
 
-void Uniform2f(GLint location, GLfloat x, GLfloat y)
+void GL_APIENTRY Uniform2f(GLint location, GLfloat x, GLfloat y)
 {
 	GLfloat xy[2] = {x, y};
 
 	Uniform2fv(location, 1, (GLfloat*)&xy);
 }
 
-void Uniform2iv(GLint location, GLsizei count, const GLint* v)
+void GL_APIENTRY Uniform2iv(GLint location, GLsizei count, const GLint* v)
 {
 	TRACE("(GLint location = %d, GLsizei count = %d, const GLint* v = %p)", location, count, v);
 
@@ -5095,14 +5095,14 @@
 	}
 }
 
-void Uniform2i(GLint location, GLint x, GLint y)
+void GL_APIENTRY Uniform2i(GLint location, GLint x, GLint y)
 {
 	GLint xy[4] = {x, y};
 
 	Uniform2iv(location, 1, (GLint*)&xy);
 }
 
-void Uniform3fv(GLint location, GLsizei count, const GLfloat* v)
+void GL_APIENTRY Uniform3fv(GLint location, GLsizei count, const GLfloat* v)
 {
 	TRACE("(GLint location = %d, GLsizei count = %d, const GLfloat* v = %p)", location, count, v);
 
@@ -5134,14 +5134,14 @@
 	}
 }
 
-void Uniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z)
+void GL_APIENTRY Uniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z)
 {
 	GLfloat xyz[3] = {x, y, z};
 
 	Uniform3fv(location, 1, (GLfloat*)&xyz);
 }
 
-void Uniform3iv(GLint location, GLsizei count, const GLint* v)
+void GL_APIENTRY Uniform3iv(GLint location, GLsizei count, const GLint* v)
 {
 	TRACE("(GLint location = %d, GLsizei count = %d, const GLint* v = %p)", location, count, v);
 
@@ -5173,14 +5173,14 @@
 	}
 }
 
-void Uniform3i(GLint location, GLint x, GLint y, GLint z)
+void GL_APIENTRY Uniform3i(GLint location, GLint x, GLint y, GLint z)
 {
 	GLint xyz[3] = {x, y, z};
 
 	Uniform3iv(location, 1, (GLint*)&xyz);
 }
 
-void Uniform4fv(GLint location, GLsizei count, const GLfloat* v)
+void GL_APIENTRY Uniform4fv(GLint location, GLsizei count, const GLfloat* v)
 {
 	TRACE("(GLint location = %d, GLsizei count = %d, const GLfloat* v = %p)", location, count, v);
 
@@ -5212,14 +5212,14 @@
 	}
 }
 
-void Uniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+void GL_APIENTRY Uniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
 {
 	GLfloat xyzw[4] = {x, y, z, w};
 
 	Uniform4fv(location, 1, (GLfloat*)&xyzw);
 }
 
-void Uniform4iv(GLint location, GLsizei count, const GLint* v)
+void GL_APIENTRY Uniform4iv(GLint location, GLsizei count, const GLint* v)
 {
 	TRACE("(GLint location = %d, GLsizei count = %d, const GLint* v = %p)", location, count, v);
 
@@ -5251,14 +5251,14 @@
 	}
 }
 
-void Uniform4i(GLint location, GLint x, GLint y, GLint z, GLint w)
+void GL_APIENTRY 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)
+void GL_APIENTRY UniformMatrix2fv(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);
@@ -5291,7 +5291,7 @@
 	}
 }
 
-void UniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
+void GL_APIENTRY UniformMatrix3fv(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);
@@ -5324,7 +5324,7 @@
 	}
 }
 
-void UniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
+void GL_APIENTRY UniformMatrix4fv(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);
@@ -5357,7 +5357,7 @@
 	}
 }
 
-void UseProgram(GLuint program)
+void GL_APIENTRY UseProgram(GLuint program)
 {
 	TRACE("(GLuint program = %d)", program);
 
@@ -5394,7 +5394,7 @@
 	}
 }
 
-void ValidateProgram(GLuint program)
+void GL_APIENTRY ValidateProgram(GLuint program)
 {
 	TRACE("(GLuint program = %d)", program);
 
@@ -5420,7 +5420,7 @@
 	}
 }
 
-void VertexAttrib1f(GLuint index, GLfloat x)
+void GL_APIENTRY VertexAttrib1f(GLuint index, GLfloat x)
 {
 	TRACE("(GLuint index = %d, GLfloat x = %f)", index, x);
 
@@ -5438,7 +5438,7 @@
 	}
 }
 
-void VertexAttrib1fv(GLuint index, const GLfloat* values)
+void GL_APIENTRY VertexAttrib1fv(GLuint index, const GLfloat* values)
 {
 	TRACE("(GLuint index = %d, const GLfloat* values = %p)", index, values);
 
@@ -5456,7 +5456,7 @@
 	}
 }
 
-void VertexAttrib2f(GLuint index, GLfloat x, GLfloat y)
+void GL_APIENTRY VertexAttrib2f(GLuint index, GLfloat x, GLfloat y)
 {
 	TRACE("(GLuint index = %d, GLfloat x = %f, GLfloat y = %f)", index, x, y);
 
@@ -5474,7 +5474,7 @@
 	}
 }
 
-void VertexAttrib2fv(GLuint index, const GLfloat* values)
+void GL_APIENTRY VertexAttrib2fv(GLuint index, const GLfloat* values)
 {
 	TRACE("(GLuint index = %d, const GLfloat* values = %p)", index, values);
 
@@ -5492,7 +5492,7 @@
 	}
 }
 
-void VertexAttrib3f(GLuint index, GLfloat x, GLfloat y, GLfloat z)
+void GL_APIENTRY VertexAttrib3f(GLuint index, GLfloat x, GLfloat y, GLfloat z)
 {
 	TRACE("(GLuint index = %d, GLfloat x = %f, GLfloat y = %f, GLfloat z = %f)", index, x, y, z);
 
@@ -5510,7 +5510,7 @@
 	}
 }
 
-void VertexAttrib3fv(GLuint index, const GLfloat* values)
+void GL_APIENTRY VertexAttrib3fv(GLuint index, const GLfloat* values)
 {
 	TRACE("(GLuint index = %d, const GLfloat* values = %p)", index, values);
 
@@ -5528,7 +5528,7 @@
 	}
 }
 
-void VertexAttrib4f(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+void GL_APIENTRY VertexAttrib4f(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
 {
 	TRACE("(GLuint index = %d, GLfloat x = %f, GLfloat y = %f, GLfloat z = %f, GLfloat w = %f)", index, x, y, z, w);
 
@@ -5546,7 +5546,7 @@
 	}
 }
 
-void VertexAttrib4fv(GLuint index, const GLfloat* values)
+void GL_APIENTRY VertexAttrib4fv(GLuint index, const GLfloat* values)
 {
 	TRACE("(GLuint index = %d, const GLfloat* values = %p)", index, values);
 
@@ -5563,7 +5563,7 @@
 	}
 }
 
-void VertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr)
+void GL_APIENTRY VertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr)
 {
 	TRACE("(GLuint index = %d, GLint size = %d, GLenum type = 0x%X, "
 	      "GLboolean normalized = %d, GLsizei stride = %d, const GLvoid* ptr = %p)",
@@ -5624,7 +5624,7 @@
 	}
 }
 
-void Viewport(GLint x, GLint y, GLsizei width, GLsizei height)
+void GL_APIENTRY Viewport(GLint x, GLint y, GLsizei width, GLsizei height)
 {
 	TRACE("(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d)", x, y, width, height);
 
@@ -5641,7 +5641,7 @@
 	}
 }
 
-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)
+static void GL_APIENTRY 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, "
@@ -5675,13 +5675,13 @@
 	}
 }
 
-void BlitFramebufferNV(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)
+void GL_APIENTRY BlitFramebufferNV(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)
 {
 	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,
-                          GLbitfield mask, GLenum filter)
+void GL_APIENTRY BlitFramebufferANGLE(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
+                                      GLbitfield mask, GLenum filter)
 {
 	if(srcX1 - srcX0 != dstX1 - dstX0 || srcY1 - srcY0 != dstY1 - dstY0)
 	{
@@ -5692,8 +5692,8 @@
 	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,
-                   GLint border, GLenum format, GLenum type, const GLvoid* data)
+void GL_APIENTRY TexImage3DOES(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth,
+                               GLint border, GLenum format, GLenum type, const GLvoid* 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, "
@@ -5765,7 +5765,7 @@
 	}
 }
 
-void TexSubImage3DOES(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data)
+void GL_APIENTRY TexSubImage3DOES(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, "
@@ -5812,7 +5812,7 @@
 	}
 }
 
-void CopyTexSubImage3DOES(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+void GL_APIENTRY CopyTexSubImage3DOES(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)",
@@ -5861,7 +5861,7 @@
 	}
 }
 
-void CompressedTexImage3DOES(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data)
+void GL_APIENTRY CompressedTexImage3DOES(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)",
@@ -5918,7 +5918,7 @@
 	}
 }
 
-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 GL_APIENTRY CompressedTexSubImage3DOES(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, "
@@ -5974,7 +5974,7 @@
 	}
 }
 
-void FramebufferTexture3DOES(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset)
+void GL_APIENTRY FramebufferTexture3DOES(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset)
 {
 	TRACE("(GLenum target = 0x%X, GLenum attachment = 0x%X, GLenum textarget = 0x%X, "
 	      "GLuint texture = %d, GLint level = %d, GLint zoffset = %d)", target, attachment, textarget, texture, level, zoffset);
@@ -6063,7 +6063,7 @@
 	}
 }
 
-void EGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image)
+void GL_APIENTRY EGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image)
 {
 	if(egl::getClientVersion() == 1)
 	{
@@ -6104,89 +6104,89 @@
 	}
 }
 
-void EGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImageOES image)
+void GL_APIENTRY EGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImageOES image)
 {
 	TRACE("(GLenum target = 0x%X, GLeglImageOES image = %p)", target, image);
 
 	UNIMPLEMENTED();
 }
 
-GLboolean IsRenderbufferOES(GLuint renderbuffer)
+GLboolean GL_APIENTRY IsRenderbufferOES(GLuint renderbuffer)
 {
 	return IsRenderbuffer(renderbuffer);
 }
 
-void BindRenderbufferOES(GLenum target, GLuint renderbuffer)
+void GL_APIENTRY BindRenderbufferOES(GLenum target, GLuint renderbuffer)
 {
 	BindRenderbuffer(target, renderbuffer);
 }
 
-void DeleteRenderbuffersOES(GLsizei n, const GLuint* renderbuffers)
+void GL_APIENTRY DeleteRenderbuffersOES(GLsizei n, const GLuint* renderbuffers)
 {
 	DeleteRenderbuffers(n, renderbuffers);
 }
 
-void GenRenderbuffersOES(GLsizei n, GLuint* renderbuffers)
+void GL_APIENTRY GenRenderbuffersOES(GLsizei n, GLuint* renderbuffers)
 {
 	GenRenderbuffers(n, renderbuffers);
 }
 
-void RenderbufferStorageOES(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
+void GL_APIENTRY RenderbufferStorageOES(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
 {
 	RenderbufferStorage(target, internalformat, width, height);
 }
 
-void GetRenderbufferParameterivOES(GLenum target, GLenum pname, GLint* params)
+void GL_APIENTRY GetRenderbufferParameterivOES(GLenum target, GLenum pname, GLint* params)
 {
 	GetRenderbufferParameteriv(target, pname, params);
 }
 
-GLboolean IsFramebufferOES(GLuint framebuffer)
+GLboolean GL_APIENTRY IsFramebufferOES(GLuint framebuffer)
 {
 	return IsFramebuffer(framebuffer);
 }
 
-void BindFramebufferOES(GLenum target, GLuint framebuffer)
+void GL_APIENTRY BindFramebufferOES(GLenum target, GLuint framebuffer)
 {
 	BindFramebuffer(target, framebuffer);
 }
 
-void DeleteFramebuffersOES(GLsizei n, const GLuint* framebuffers)
+void GL_APIENTRY DeleteFramebuffersOES(GLsizei n, const GLuint* framebuffers)
 {
 	DeleteFramebuffers(n, framebuffers);
 }
 
-void GenFramebuffersOES(GLsizei n, GLuint* framebuffers)
+void GL_APIENTRY GenFramebuffersOES(GLsizei n, GLuint* framebuffers)
 {
 	GenFramebuffers(n, framebuffers);
 }
 
-GLenum CheckFramebufferStatusOES(GLenum target)
+GLenum GL_APIENTRY CheckFramebufferStatusOES(GLenum target)
 {
 	return CheckFramebufferStatus(target);
 }
 
-void FramebufferRenderbufferOES(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
+void GL_APIENTRY FramebufferRenderbufferOES(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
 {
 	FramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);
 }
 
-void FramebufferTexture2DOES(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
+void GL_APIENTRY FramebufferTexture2DOES(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
 {
 	FramebufferTexture2D(target, attachment, textarget, texture, level);
 }
 
-void GetFramebufferAttachmentParameterivOES(GLenum target, GLenum attachment, GLenum pname, GLint* params)
+void GL_APIENTRY GetFramebufferAttachmentParameterivOES(GLenum target, GLenum attachment, GLenum pname, GLint* params)
 {
 	GetFramebufferAttachmentParameteriv(target, attachment, pname, params);
 }
 
-void GenerateMipmapOES(GLenum target)
+void GL_APIENTRY GenerateMipmapOES(GLenum target)
 {
 	GenerateMipmap(target);
 }
 
-void DrawBuffersEXT(GLsizei n, const GLenum *bufs)
+void GL_APIENTRY DrawBuffersEXT(GLsizei n, const GLenum *bufs)
 {
 	TRACE("(GLsizei n = %d, const GLenum *bufs = %p)", n, bufs);
 
diff --git a/src/OpenGL/libGLESv2/libGLESv2.hpp b/src/OpenGL/libGLESv2/libGLESv2.hpp
index e6ebe9a..e8f956e 100644
--- a/src/OpenGL/libGLESv2/libGLESv2.hpp
+++ b/src/OpenGL/libGLESv2/libGLESv2.hpp
@@ -41,207 +41,207 @@
 public:
 	LibGLESv2exports();
 
-	void (*glActiveTexture)(GLenum texture);
-	void (*glAttachShader)(GLuint program, GLuint shader);
-	void (*glBeginQueryEXT)(GLenum target, GLuint name);
-	void (*glBindAttribLocation)(GLuint program, GLuint index, const GLchar* name);
-	void (*glBindBuffer)(GLenum target, GLuint buffer);
-	void (*glBindFramebuffer)(GLenum target, GLuint framebuffer);
-	void (*glBindRenderbuffer)(GLenum target, GLuint renderbuffer);
-	void (*glBindTexture)(GLenum target, GLuint texture);
-	void (*glBlendColor)(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
-	void (*glBlendEquation)(GLenum mode);
-	void (*glBlendEquationSeparate)(GLenum modeRGB, GLenum modeAlpha);
-	void (*glBlendFunc)(GLenum sfactor, GLenum dfactor);
-	void (*glBlendFuncSeparate)(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
-	void (*glBufferData)(GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage);
-	void (*glBufferSubData)(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data);
-	GLenum (*glCheckFramebufferStatus)(GLenum target);
-	void (*glClear)(GLbitfield mask);
-	void (*glClearColor)(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
-	void (*glClearDepthf)(GLclampf depth);
-	void (*glClearStencil)(GLint s);
-	void (*glColorMask)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
-	void (*glCompileShader)(GLuint shader);
-	void (*glCompressedTexImage2D)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height,
-	                               GLint border, GLsizei imageSize, const GLvoid* data);
-	void (*glCompressedTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
-	                                  GLenum format, GLsizei imageSize, const GLvoid* data);
-	void (*glCopyTexImage2D)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
-	void (*glCopyTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
-	GLuint (*glCreateProgram)(void);
-	GLuint (*glCreateShader)(GLenum type);
-	void (*glCullFace)(GLenum mode);
-	void (*glDeleteBuffers)(GLsizei n, const GLuint* buffers);
-	void (*glDeleteFencesNV)(GLsizei n, const GLuint* fences);
-	void (*glDeleteFramebuffers)(GLsizei n, const GLuint* framebuffers);
-	void (*glDeleteProgram)(GLuint program);
-	void (*glDeleteQueriesEXT)(GLsizei n, const GLuint *ids);
-	void (*glDeleteRenderbuffers)(GLsizei n, const GLuint* renderbuffers);
-	void (*glDeleteShader)(GLuint shader);
-	void (*glDeleteTextures)(GLsizei n, const GLuint* textures);
-	void (*glDepthFunc)(GLenum func);
-	void (*glDepthMask)(GLboolean flag);
-	void (*glDepthRangef)(GLclampf zNear, GLclampf zFar);
-	void (*glDetachShader)(GLuint program, GLuint shader);
-	void (*glDisable)(GLenum cap);
-	void (*glDisableVertexAttribArray)(GLuint index);
-	void (*glDrawArrays)(GLenum mode, GLint first, GLsizei count);
-	void (*glDrawElements)(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices);
-	void (*glDrawArraysInstancedEXT)(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount);
-	void (*glDrawElementsInstancedEXT)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instanceCount);
-	void (*glVertexAttribDivisorEXT)(GLuint index, GLuint divisor);
-	void (*glDrawArraysInstancedANGLE)(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount);
-	void (*glDrawElementsInstancedANGLE)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instanceCount);
-	void (*glVertexAttribDivisorANGLE)(GLuint index, GLuint divisor);
-	void (*glEnable)(GLenum cap);
-	void (*glEnableVertexAttribArray)(GLuint index);
-	void (*glEndQueryEXT)(GLenum target);
-	void (*glFinishFenceNV)(GLuint fence);
-	void (*glFinish)(void);
-	void (*glFlush)(void);
-	void (*glFramebufferRenderbuffer)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
-	void (*glFramebufferTexture2D)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
-	void (*glFrontFace)(GLenum mode);
-	void (*glGenBuffers)(GLsizei n, GLuint* buffers);
-	void (*glGenerateMipmap)(GLenum target);
-	void (*glGenFencesNV)(GLsizei n, GLuint* fences);
-	void (*glGenFramebuffers)(GLsizei n, GLuint* framebuffers);
-	void (*glGenQueriesEXT)(GLsizei n, GLuint* ids);
-	void (*glGenRenderbuffers)(GLsizei n, GLuint* renderbuffers);
-	void (*glGenTextures)(GLsizei n, GLuint* textures);
-	void (*glGetActiveAttrib)(GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
-	void (*glGetActiveUniform)(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name);
-	void (*glGetAttachedShaders)(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders);
-	int (*glGetAttribLocation)(GLuint program, const GLchar* name);
-	void (*glGetBooleanv)(GLenum pname, GLboolean* params);
-	void (*glGetBufferParameteriv)(GLenum target, GLenum pname, GLint* params);
-	GLenum (*glGetError)(void);
-	void (*glGetFenceivNV)(GLuint fence, GLenum pname, GLint *params);
-	void (*glGetFloatv)(GLenum pname, GLfloat* params);
-	void (*glGetFramebufferAttachmentParameteriv)(GLenum target, GLenum attachment, GLenum pname, GLint* params);
-	GLenum (*glGetGraphicsResetStatusEXT)(void);
-	void (*glGetIntegerv)(GLenum pname, GLint* params);
-	void (*glGetProgramiv)(GLuint program, GLenum pname, GLint* params);
-	void (*glGetProgramInfoLog)(GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog);
-	void (*glGetQueryivEXT)(GLenum target, GLenum pname, GLint *params);
-	void (*glGetQueryObjectuivEXT)(GLuint name, GLenum pname, GLuint *params);
-	void (*glGetRenderbufferParameteriv)(GLenum target, GLenum pname, GLint* params);
-	void (*glGetShaderiv)(GLuint shader, GLenum pname, GLint* params);
-	void (*glGetShaderInfoLog)(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog);
-	void (*glGetShaderPrecisionFormat)(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision);
-	void (*glGetShaderSource)(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source);
-	const GLubyte* (*glGetString)(GLenum name);
-	void (*glGetTexParameterfv)(GLenum target, GLenum pname, GLfloat* params);
-	void (*glGetTexParameteriv)(GLenum target, GLenum pname, GLint* params);
-	void (*glGetnUniformfvEXT)(GLuint program, GLint location, GLsizei bufSize, GLfloat* params);
-	void (*glGetUniformfv)(GLuint program, GLint location, GLfloat* params);
-	void (*glGetnUniformivEXT)(GLuint program, GLint location, GLsizei bufSize, GLint* params);
-	void (*glGetUniformiv)(GLuint program, GLint location, GLint* params);
-	int (*glGetUniformLocation)(GLuint program, const GLchar* name);
-	void (*glGetVertexAttribfv)(GLuint index, GLenum pname, GLfloat* params);
-	void (*glGetVertexAttribiv)(GLuint index, GLenum pname, GLint* params);
-	void (*glGetVertexAttribPointerv)(GLuint index, GLenum pname, GLvoid** pointer);
-	void (*glHint)(GLenum target, GLenum mode);
-	GLboolean (*glIsBuffer)(GLuint buffer);
-	GLboolean (*glIsEnabled)(GLenum cap);
-	GLboolean (*glIsFenceNV)(GLuint fence);
-	GLboolean (*glIsFramebuffer)(GLuint framebuffer);
-	GLboolean (*glIsProgram)(GLuint program);
-	GLboolean (*glIsQueryEXT)(GLuint name);
-	GLboolean (*glIsRenderbuffer)(GLuint renderbuffer);
-	GLboolean (*glIsShader)(GLuint shader);
-	GLboolean (*glIsTexture)(GLuint texture);
-	void (*glLineWidth)(GLfloat width);
-	void (*glLinkProgram)(GLuint program);
-	void (*glPixelStorei)(GLenum pname, GLint param);
-	void (*glPolygonOffset)(GLfloat factor, GLfloat units);
-	void (*glReadnPixelsEXT)(GLint x, GLint y, GLsizei width, GLsizei height,
-	                         GLenum format, GLenum type, GLsizei bufSize, GLvoid *data);
-	void (*glReadPixels)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels);
-	void (*glReleaseShaderCompiler)(void);
-	void (*glRenderbufferStorageMultisample)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
-	void (*glRenderbufferStorageMultisampleANGLE)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
-	void (*glRenderbufferStorage)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
-	void (*glSampleCoverage)(GLclampf value, GLboolean invert);
-	void (*glSetFenceNV)(GLuint fence, GLenum condition);
-	void (*glScissor)(GLint x, GLint y, GLsizei width, GLsizei height);
-	void (*glShaderBinary)(GLsizei n, const GLuint* shaders, GLenum binaryformat, const GLvoid* binary, GLsizei length);
-	void (*glShaderSource)(GLuint shader, GLsizei count, const GLchar *const *string, const GLint *length);
-	void (*glStencilFunc)(GLenum func, GLint ref, GLuint mask);
-	void (*glStencilFuncSeparate)(GLenum face, GLenum func, GLint ref, GLuint mask);
-	void (*glStencilMask)(GLuint mask);
-	void (*glStencilMaskSeparate)(GLenum face, GLuint mask);
-	void (*glStencilOp)(GLenum fail, GLenum zfail, GLenum zpass);
-	void (*glStencilOpSeparate)(GLenum face, GLenum fail, GLenum zfail, GLenum zpass);
-	GLboolean (*glTestFenceNV)(GLuint fence);
-	void (*glTexImage2D)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
-	                     GLint border, GLenum format, GLenum type, const GLvoid* pixels);
-	void (*glTexParameterf)(GLenum target, GLenum pname, GLfloat param);
-	void (*glTexParameterfv)(GLenum target, GLenum pname, const GLfloat* params);
-	void (*glTexParameteri)(GLenum target, GLenum pname, GLint param);
-	void (*glTexParameteriv)(GLenum target, GLenum pname, const GLint* params);
-	void (*glTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
-	                        GLenum format, GLenum type, const GLvoid* pixels);
-	void (*glUniform1f)(GLint location, GLfloat x);
-	void (*glUniform1fv)(GLint location, GLsizei count, const GLfloat* v);
-	void (*glUniform1i)(GLint location, GLint x);
-	void (*glUniform1iv)(GLint location, GLsizei count, const GLint* v);
-	void (*glUniform2f)(GLint location, GLfloat x, GLfloat y);
-	void (*glUniform2fv)(GLint location, GLsizei count, const GLfloat* v);
-	void (*glUniform2i)(GLint location, GLint x, GLint y);
-	void (*glUniform2iv)(GLint location, GLsizei count, const GLint* v);
-	void (*glUniform3f)(GLint location, GLfloat x, GLfloat y, GLfloat z);
-	void (*glUniform3fv)(GLint location, GLsizei count, const GLfloat* v);
-	void (*glUniform3i)(GLint location, GLint x, GLint y, GLint z);
-	void (*glUniform3iv)(GLint location, GLsizei count, const GLint* v);
-	void (*glUniform4f)(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
-	void (*glUniform4fv)(GLint location, GLsizei count, const GLfloat* v);
-	void (*glUniform4i)(GLint location, GLint x, GLint y, GLint z, GLint w);
-	void (*glUniform4iv)(GLint location, GLsizei count, const GLint* v);
-	void (*glUniformMatrix2fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
-	void (*glUniformMatrix3fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
-	void (*glUniformMatrix4fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
-	void (*glUseProgram)(GLuint program);
-	void (*glValidateProgram)(GLuint program);
-	void (*glVertexAttrib1f)(GLuint index, GLfloat x);
-	void (*glVertexAttrib1fv)(GLuint index, const GLfloat* values);
-	void (*glVertexAttrib2f)(GLuint index, GLfloat x, GLfloat y);
-	void (*glVertexAttrib2fv)(GLuint index, const GLfloat* values);
-	void (*glVertexAttrib3f)(GLuint index, GLfloat x, GLfloat y, GLfloat z);
-	void (*glVertexAttrib3fv)(GLuint index, const GLfloat* values);
-	void (*glVertexAttrib4f)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
-	void (*glVertexAttrib4fv)(GLuint index, const GLfloat* values);
-	void (*glVertexAttribPointer)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr);
-	void (*glViewport)(GLint x, GLint y, GLsizei width, GLsizei height);
-	void (*glBlitFramebufferNV)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
-	void (*glBlitFramebufferANGLE)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
-	                               GLbitfield mask, GLenum filter);
-	void (*glTexImage3DOES)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth,
-	                        GLint border, GLenum format, GLenum type, const GLvoid* pixels);
-	void (*glTexSubImage3DOES)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
-	void (*glCopyTexSubImage3DOES)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
-	void (*glCompressedTexImage3DOES)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data);
-	void (*glCompressedTexSubImage3DOES)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data);
-	void (*glFramebufferTexture3DOES)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
-	void (*glEGLImageTargetTexture2DOES)(GLenum target, GLeglImageOES image);
-	void (*glEGLImageTargetRenderbufferStorageOES)(GLenum target, GLeglImageOES image);
-	GLboolean (*glIsRenderbufferOES)(GLuint renderbuffer);
-	void (*glBindRenderbufferOES)(GLenum target, GLuint renderbuffer);
-	void (*glDeleteRenderbuffersOES)(GLsizei n, const GLuint* renderbuffers);
-	void (*glGenRenderbuffersOES)(GLsizei n, GLuint* renderbuffers);
-	void (*glRenderbufferStorageOES)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
-	void (*glGetRenderbufferParameterivOES)(GLenum target, GLenum pname, GLint* params);
-	GLboolean (*glIsFramebufferOES)(GLuint framebuffer);
-	void (*glBindFramebufferOES)(GLenum target, GLuint framebuffer);
-	void (*glDeleteFramebuffersOES)(GLsizei n, const GLuint* framebuffers);
-	void (*glGenFramebuffersOES)(GLsizei n, GLuint* framebuffers);
-	GLenum (*glCheckFramebufferStatusOES)(GLenum target);
-	void (*glFramebufferRenderbufferOES)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
-	void (*glFramebufferTexture2DOES)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
-	void (*glGetFramebufferAttachmentParameterivOES)(GLenum target, GLenum attachment, GLenum pname, GLint* params);
-	void (*glGenerateMipmapOES)(GLenum target);
-	void (*glDrawBuffersEXT)(GLsizei n, const GLenum *bufs);
+	void (GL_APIENTRY *glActiveTexture)(GLenum texture);
+	void (GL_APIENTRY *glAttachShader)(GLuint program, GLuint shader);
+	void (GL_APIENTRY *glBeginQueryEXT)(GLenum target, GLuint name);
+	void (GL_APIENTRY *glBindAttribLocation)(GLuint program, GLuint index, const GLchar* name);
+	void (GL_APIENTRY *glBindBuffer)(GLenum target, GLuint buffer);
+	void (GL_APIENTRY *glBindFramebuffer)(GLenum target, GLuint framebuffer);
+	void (GL_APIENTRY *glBindRenderbuffer)(GLenum target, GLuint renderbuffer);
+	void (GL_APIENTRY *glBindTexture)(GLenum target, GLuint texture);
+	void (GL_APIENTRY *glBlendColor)(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
+	void (GL_APIENTRY *glBlendEquation)(GLenum mode);
+	void (GL_APIENTRY *glBlendEquationSeparate)(GLenum modeRGB, GLenum modeAlpha);
+	void (GL_APIENTRY *glBlendFunc)(GLenum sfactor, GLenum dfactor);
+	void (GL_APIENTRY *glBlendFuncSeparate)(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+	void (GL_APIENTRY *glBufferData)(GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage);
+	void (GL_APIENTRY *glBufferSubData)(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data);
+	GLenum (GL_APIENTRY *glCheckFramebufferStatus)(GLenum target);
+	void (GL_APIENTRY *glClear)(GLbitfield mask);
+	void (GL_APIENTRY *glClearColor)(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
+	void (GL_APIENTRY *glClearDepthf)(GLclampf depth);
+	void (GL_APIENTRY *glClearStencil)(GLint s);
+	void (GL_APIENTRY *glColorMask)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+	void (GL_APIENTRY *glCompileShader)(GLuint shader);
+	void (GL_APIENTRY *glCompressedTexImage2D)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height,
+	                                           GLint border, GLsizei imageSize, const GLvoid* data);
+	void (GL_APIENTRY *glCompressedTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
+	                                              GLenum format, GLsizei imageSize, const GLvoid* data);
+	void (GL_APIENTRY *glCopyTexImage2D)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+	void (GL_APIENTRY *glCopyTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+	GLuint (GL_APIENTRY *glCreateProgram)(void);
+	GLuint (GL_APIENTRY *glCreateShader)(GLenum type);
+	void (GL_APIENTRY *glCullFace)(GLenum mode);
+	void (GL_APIENTRY *glDeleteBuffers)(GLsizei n, const GLuint* buffers);
+	void (GL_APIENTRY *glDeleteFencesNV)(GLsizei n, const GLuint* fences);
+	void (GL_APIENTRY *glDeleteFramebuffers)(GLsizei n, const GLuint* framebuffers);
+	void (GL_APIENTRY *glDeleteProgram)(GLuint program);
+	void (GL_APIENTRY *glDeleteQueriesEXT)(GLsizei n, const GLuint *ids);
+	void (GL_APIENTRY *glDeleteRenderbuffers)(GLsizei n, const GLuint* renderbuffers);
+	void (GL_APIENTRY *glDeleteShader)(GLuint shader);
+	void (GL_APIENTRY *glDeleteTextures)(GLsizei n, const GLuint* textures);
+	void (GL_APIENTRY *glDepthFunc)(GLenum func);
+	void (GL_APIENTRY *glDepthMask)(GLboolean flag);
+	void (GL_APIENTRY *glDepthRangef)(GLclampf zNear, GLclampf zFar);
+	void (GL_APIENTRY *glDetachShader)(GLuint program, GLuint shader);
+	void (GL_APIENTRY *glDisable)(GLenum cap);
+	void (GL_APIENTRY *glDisableVertexAttribArray)(GLuint index);
+	void (GL_APIENTRY *glDrawArrays)(GLenum mode, GLint first, GLsizei count);
+	void (GL_APIENTRY *glDrawElements)(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices);
+	void (GL_APIENTRY *glDrawArraysInstancedEXT)(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount);
+	void (GL_APIENTRY *glDrawElementsInstancedEXT)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instanceCount);
+	void (GL_APIENTRY *glVertexAttribDivisorEXT)(GLuint index, GLuint divisor);
+	void (GL_APIENTRY *glDrawArraysInstancedANGLE)(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount);
+	void (GL_APIENTRY *glDrawElementsInstancedANGLE)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instanceCount);
+	void (GL_APIENTRY *glVertexAttribDivisorANGLE)(GLuint index, GLuint divisor);
+	void (GL_APIENTRY *glEnable)(GLenum cap);
+	void (GL_APIENTRY *glEnableVertexAttribArray)(GLuint index);
+	void (GL_APIENTRY *glEndQueryEXT)(GLenum target);
+	void (GL_APIENTRY *glFinishFenceNV)(GLuint fence);
+	void (GL_APIENTRY *glFinish)(void);
+	void (GL_APIENTRY *glFlush)(void);
+	void (GL_APIENTRY *glFramebufferRenderbuffer)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+	void (GL_APIENTRY *glFramebufferTexture2D)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+	void (GL_APIENTRY *glFrontFace)(GLenum mode);
+	void (GL_APIENTRY *glGenBuffers)(GLsizei n, GLuint* buffers);
+	void (GL_APIENTRY *glGenerateMipmap)(GLenum target);
+	void (GL_APIENTRY *glGenFencesNV)(GLsizei n, GLuint* fences);
+	void (GL_APIENTRY *glGenFramebuffers)(GLsizei n, GLuint* framebuffers);
+	void (GL_APIENTRY *glGenQueriesEXT)(GLsizei n, GLuint* ids);
+	void (GL_APIENTRY *glGenRenderbuffers)(GLsizei n, GLuint* renderbuffers);
+	void (GL_APIENTRY *glGenTextures)(GLsizei n, GLuint* textures);
+	void (GL_APIENTRY *glGetActiveAttrib)(GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+	void (GL_APIENTRY *glGetActiveUniform)(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name);
+	void (GL_APIENTRY *glGetAttachedShaders)(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders);
+	int (GL_APIENTRY *glGetAttribLocation)(GLuint program, const GLchar* name);
+	void (GL_APIENTRY *glGetBooleanv)(GLenum pname, GLboolean* params);
+	void (GL_APIENTRY *glGetBufferParameteriv)(GLenum target, GLenum pname, GLint* params);
+	GLenum (GL_APIENTRY *glGetError)(void);
+	void (GL_APIENTRY *glGetFenceivNV)(GLuint fence, GLenum pname, GLint *params);
+	void (GL_APIENTRY *glGetFloatv)(GLenum pname, GLfloat* params);
+	void (GL_APIENTRY *glGetFramebufferAttachmentParameteriv)(GLenum target, GLenum attachment, GLenum pname, GLint* params);
+	GLenum (GL_APIENTRY *glGetGraphicsResetStatusEXT)(void);
+	void (GL_APIENTRY *glGetIntegerv)(GLenum pname, GLint* params);
+	void (GL_APIENTRY *glGetProgramiv)(GLuint program, GLenum pname, GLint* params);
+	void (GL_APIENTRY *glGetProgramInfoLog)(GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog);
+	void (GL_APIENTRY *glGetQueryivEXT)(GLenum target, GLenum pname, GLint *params);
+	void (GL_APIENTRY *glGetQueryObjectuivEXT)(GLuint name, GLenum pname, GLuint *params);
+	void (GL_APIENTRY *glGetRenderbufferParameteriv)(GLenum target, GLenum pname, GLint* params);
+	void (GL_APIENTRY *glGetShaderiv)(GLuint shader, GLenum pname, GLint* params);
+	void (GL_APIENTRY *glGetShaderInfoLog)(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog);
+	void (GL_APIENTRY *glGetShaderPrecisionFormat)(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision);
+	void (GL_APIENTRY *glGetShaderSource)(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source);
+	const GLubyte* (GL_APIENTRY *glGetString)(GLenum name);
+	void (GL_APIENTRY *glGetTexParameterfv)(GLenum target, GLenum pname, GLfloat* params);
+	void (GL_APIENTRY *glGetTexParameteriv)(GLenum target, GLenum pname, GLint* params);
+	void (GL_APIENTRY *glGetnUniformfvEXT)(GLuint program, GLint location, GLsizei bufSize, GLfloat* params);
+	void (GL_APIENTRY *glGetUniformfv)(GLuint program, GLint location, GLfloat* params);
+	void (GL_APIENTRY *glGetnUniformivEXT)(GLuint program, GLint location, GLsizei bufSize, GLint* params);
+	void (GL_APIENTRY *glGetUniformiv)(GLuint program, GLint location, GLint* params);
+	int (GL_APIENTRY *glGetUniformLocation)(GLuint program, const GLchar* name);
+	void (GL_APIENTRY *glGetVertexAttribfv)(GLuint index, GLenum pname, GLfloat* params);
+	void (GL_APIENTRY *glGetVertexAttribiv)(GLuint index, GLenum pname, GLint* params);
+	void (GL_APIENTRY *glGetVertexAttribPointerv)(GLuint index, GLenum pname, GLvoid** pointer);
+	void (GL_APIENTRY *glHint)(GLenum target, GLenum mode);
+	GLboolean (GL_APIENTRY *glIsBuffer)(GLuint buffer);
+	GLboolean (GL_APIENTRY *glIsEnabled)(GLenum cap);
+	GLboolean (GL_APIENTRY *glIsFenceNV)(GLuint fence);
+	GLboolean (GL_APIENTRY *glIsFramebuffer)(GLuint framebuffer);
+	GLboolean (GL_APIENTRY *glIsProgram)(GLuint program);
+	GLboolean (GL_APIENTRY *glIsQueryEXT)(GLuint name);
+	GLboolean (GL_APIENTRY *glIsRenderbuffer)(GLuint renderbuffer);
+	GLboolean (GL_APIENTRY *glIsShader)(GLuint shader);
+	GLboolean (GL_APIENTRY *glIsTexture)(GLuint texture);
+	void (GL_APIENTRY *glLineWidth)(GLfloat width);
+	void (GL_APIENTRY *glLinkProgram)(GLuint program);
+	void (GL_APIENTRY *glPixelStorei)(GLenum pname, GLint param);
+	void (GL_APIENTRY *glPolygonOffset)(GLfloat factor, GLfloat units);
+	void (GL_APIENTRY *glReadnPixelsEXT)(GLint x, GLint y, GLsizei width, GLsizei height,
+	                                     GLenum format, GLenum type, GLsizei bufSize, GLvoid *data);
+	void (GL_APIENTRY *glReadPixels)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels);
+	void (GL_APIENTRY *glReleaseShaderCompiler)(void);
+	void (GL_APIENTRY *glRenderbufferStorageMultisample)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+	void (GL_APIENTRY *glRenderbufferStorageMultisampleANGLE)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+	void (GL_APIENTRY *glRenderbufferStorage)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+	void (GL_APIENTRY *glSampleCoverage)(GLclampf value, GLboolean invert);
+	void (GL_APIENTRY *glSetFenceNV)(GLuint fence, GLenum condition);
+	void (GL_APIENTRY *glScissor)(GLint x, GLint y, GLsizei width, GLsizei height);
+	void (GL_APIENTRY *glShaderBinary)(GLsizei n, const GLuint* shaders, GLenum binaryformat, const GLvoid* binary, GLsizei length);
+	void (GL_APIENTRY *glShaderSource)(GLuint shader, GLsizei count, const GLchar *const *string, const GLint *length);
+	void (GL_APIENTRY *glStencilFunc)(GLenum func, GLint ref, GLuint mask);
+	void (GL_APIENTRY *glStencilFuncSeparate)(GLenum face, GLenum func, GLint ref, GLuint mask);
+	void (GL_APIENTRY *glStencilMask)(GLuint mask);
+	void (GL_APIENTRY *glStencilMaskSeparate)(GLenum face, GLuint mask);
+	void (GL_APIENTRY *glStencilOp)(GLenum fail, GLenum zfail, GLenum zpass);
+	void (GL_APIENTRY *glStencilOpSeparate)(GLenum face, GLenum fail, GLenum zfail, GLenum zpass);
+	GLboolean (GL_APIENTRY *glTestFenceNV)(GLuint fence);
+	void (GL_APIENTRY *glTexImage2D)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
+	                                 GLint border, GLenum format, GLenum type, const GLvoid* pixels);
+	void (GL_APIENTRY *glTexParameterf)(GLenum target, GLenum pname, GLfloat param);
+	void (GL_APIENTRY *glTexParameterfv)(GLenum target, GLenum pname, const GLfloat* params);
+	void (GL_APIENTRY *glTexParameteri)(GLenum target, GLenum pname, GLint param);
+	void (GL_APIENTRY *glTexParameteriv)(GLenum target, GLenum pname, const GLint* params);
+	void (GL_APIENTRY *glTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
+	                                    GLenum format, GLenum type, const GLvoid* pixels);
+	void (GL_APIENTRY *glUniform1f)(GLint location, GLfloat x);
+	void (GL_APIENTRY *glUniform1fv)(GLint location, GLsizei count, const GLfloat* v);
+	void (GL_APIENTRY *glUniform1i)(GLint location, GLint x);
+	void (GL_APIENTRY *glUniform1iv)(GLint location, GLsizei count, const GLint* v);
+	void (GL_APIENTRY *glUniform2f)(GLint location, GLfloat x, GLfloat y);
+	void (GL_APIENTRY *glUniform2fv)(GLint location, GLsizei count, const GLfloat* v);
+	void (GL_APIENTRY *glUniform2i)(GLint location, GLint x, GLint y);
+	void (GL_APIENTRY *glUniform2iv)(GLint location, GLsizei count, const GLint* v);
+	void (GL_APIENTRY *glUniform3f)(GLint location, GLfloat x, GLfloat y, GLfloat z);
+	void (GL_APIENTRY *glUniform3fv)(GLint location, GLsizei count, const GLfloat* v);
+	void (GL_APIENTRY *glUniform3i)(GLint location, GLint x, GLint y, GLint z);
+	void (GL_APIENTRY *glUniform3iv)(GLint location, GLsizei count, const GLint* v);
+	void (GL_APIENTRY *glUniform4f)(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+	void (GL_APIENTRY *glUniform4fv)(GLint location, GLsizei count, const GLfloat* v);
+	void (GL_APIENTRY *glUniform4i)(GLint location, GLint x, GLint y, GLint z, GLint w);
+	void (GL_APIENTRY *glUniform4iv)(GLint location, GLsizei count, const GLint* v);
+	void (GL_APIENTRY *glUniformMatrix2fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+	void (GL_APIENTRY *glUniformMatrix3fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+	void (GL_APIENTRY *glUniformMatrix4fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+	void (GL_APIENTRY *glUseProgram)(GLuint program);
+	void (GL_APIENTRY *glValidateProgram)(GLuint program);
+	void (GL_APIENTRY *glVertexAttrib1f)(GLuint index, GLfloat x);
+	void (GL_APIENTRY *glVertexAttrib1fv)(GLuint index, const GLfloat* values);
+	void (GL_APIENTRY *glVertexAttrib2f)(GLuint index, GLfloat x, GLfloat y);
+	void (GL_APIENTRY *glVertexAttrib2fv)(GLuint index, const GLfloat* values);
+	void (GL_APIENTRY *glVertexAttrib3f)(GLuint index, GLfloat x, GLfloat y, GLfloat z);
+	void (GL_APIENTRY *glVertexAttrib3fv)(GLuint index, const GLfloat* values);
+	void (GL_APIENTRY *glVertexAttrib4f)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+	void (GL_APIENTRY *glVertexAttrib4fv)(GLuint index, const GLfloat* values);
+	void (GL_APIENTRY *glVertexAttribPointer)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr);
+	void (GL_APIENTRY *glViewport)(GLint x, GLint y, GLsizei width, GLsizei height);
+	void (GL_APIENTRY *glBlitFramebufferNV)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+	void (GL_APIENTRY *glBlitFramebufferANGLE)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
+	                                           GLbitfield mask, GLenum filter);
+	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);
+	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);
+	void (GL_APIENTRY *glCopyTexSubImage3DOES)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+	void (GL_APIENTRY *glCompressedTexImage3DOES)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data);
+	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);
+	void (GL_APIENTRY *glFramebufferTexture3DOES)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
+	void (GL_APIENTRY *glEGLImageTargetTexture2DOES)(GLenum target, GLeglImageOES image);
+	void (GL_APIENTRY *glEGLImageTargetRenderbufferStorageOES)(GLenum target, GLeglImageOES image);
+	GLboolean (GL_APIENTRY *glIsRenderbufferOES)(GLuint renderbuffer);
+	void (GL_APIENTRY *glBindRenderbufferOES)(GLenum target, GLuint renderbuffer);
+	void (GL_APIENTRY *glDeleteRenderbuffersOES)(GLsizei n, const GLuint* renderbuffers);
+	void (GL_APIENTRY *glGenRenderbuffersOES)(GLsizei n, GLuint* renderbuffers);
+	void (GL_APIENTRY *glRenderbufferStorageOES)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+	void (GL_APIENTRY *glGetRenderbufferParameterivOES)(GLenum target, GLenum pname, GLint* params);
+	GLboolean (GL_APIENTRY *glIsFramebufferOES)(GLuint framebuffer);
+	void (GL_APIENTRY *glBindFramebufferOES)(GLenum target, GLuint framebuffer);
+	void (GL_APIENTRY *glDeleteFramebuffersOES)(GLsizei n, const GLuint* framebuffers);
+	void (GL_APIENTRY *glGenFramebuffersOES)(GLsizei n, GLuint* framebuffers);
+	GLenum (GL_APIENTRY *glCheckFramebufferStatusOES)(GLenum target);
+	void (GL_APIENTRY *glFramebufferRenderbufferOES)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+	void (GL_APIENTRY *glFramebufferTexture2DOES)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+	void (GL_APIENTRY *glGetFramebufferAttachmentParameterivOES)(GLenum target, GLenum attachment, GLenum pname, GLint* params);
+	void (GL_APIENTRY *glGenerateMipmapOES)(GLenum target);
+	void (GL_APIENTRY *glDrawBuffersEXT)(GLsizei n, const GLenum *bufs);
 
 	egl::Context *(*es2CreateContext)(egl::Display *display, const egl::Context *shareContext, const egl::Config *config);
 	__eglMustCastToProperFunctionPointerType (*es2GetProcAddress)(const char *procname);
diff --git a/src/OpenGL/libGLESv2/libGLESv3.cpp b/src/OpenGL/libGLESv2/libGLESv3.cpp
index e12ea4d..bdfce54 100644
--- a/src/OpenGL/libGLESv2/libGLESv3.cpp
+++ b/src/OpenGL/libGLESv2/libGLESv3.cpp
@@ -212,7 +212,7 @@
 namespace gl
 {
 
-void ReadBuffer(GLenum src)
+void GL_APIENTRY ReadBuffer(GLenum src)
 {
 	TRACE("(GLenum src = 0x%X)", src);
 
@@ -285,7 +285,7 @@
 	}
 }
 
-void DrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices)
+void GL_APIENTRY 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)",
@@ -334,7 +334,7 @@
 	}
 }
 
-void TexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *data)
+void GL_APIENTRY 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, "
@@ -394,7 +394,7 @@
 	}
 }
 
-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 GL_APIENTRY 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, "
@@ -442,7 +442,7 @@
 	}
 }
 
-void CopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+void GL_APIENTRY 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)",
@@ -505,7 +505,7 @@
 	}
 }
 
-void CompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data)
+void GL_APIENTRY 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)",
@@ -562,7 +562,7 @@
 	}
 }
 
-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 GL_APIENTRY 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, "
@@ -659,7 +659,7 @@
 	}
 }
 
-void GenQueries(GLsizei n, GLuint *ids)
+void GL_APIENTRY GenQueries(GLsizei n, GLuint *ids)
 {
 	TRACE("(GLsizei n = %d, GLuint* ids = %p)", n, ids);
 
@@ -679,7 +679,7 @@
 	}
 }
 
-void DeleteQueries(GLsizei n, const GLuint *ids)
+void GL_APIENTRY DeleteQueries(GLsizei n, const GLuint *ids)
 {
 	TRACE("(GLsizei n = %d, GLuint* ids = %p)", n, ids);
 
@@ -699,7 +699,7 @@
 	}
 }
 
-GLboolean IsQuery(GLuint id)
+GLboolean GL_APIENTRY IsQuery(GLuint id)
 {
 	TRACE("(GLuint id = %d)", id);
 
@@ -723,7 +723,7 @@
 	return GL_FALSE;
 }
 
-void BeginQuery(GLenum target, GLuint id)
+void GL_APIENTRY BeginQuery(GLenum target, GLuint id)
 {
 	TRACE("(GLenum target = 0x%X, GLuint id = %d)", target, id);
 
@@ -745,7 +745,7 @@
 	}
 }
 
-void EndQuery(GLenum target)
+void GL_APIENTRY EndQuery(GLenum target)
 {
 	TRACE("(GLenum target = 0x%X)", target);
 
@@ -762,7 +762,7 @@
 	}
 }
 
-void GetQueryiv(GLenum target, GLenum pname, GLint *params)
+void GL_APIENTRY GetQueryiv(GLenum target, GLenum pname, GLint *params)
 {
 	TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint *params = %p)",
 		  target, pname, params);
@@ -780,7 +780,7 @@
 	}
 }
 
-void GetQueryObjectuiv(GLuint id, GLenum pname, GLuint *params)
+void GL_APIENTRY GetQueryObjectuiv(GLuint id, GLenum pname, GLuint *params)
 {
 	TRACE("(GLuint id = %d, GLenum pname = 0x%X, GLint *params = %p)",
 	      id, pname, params);
@@ -824,7 +824,7 @@
 	}
 }
 
-GLboolean UnmapBuffer(GLenum target)
+GLboolean GL_APIENTRY UnmapBuffer(GLenum target)
 {
 	TRACE("(GLenum target = 0x%X)", target);
 
@@ -856,7 +856,7 @@
 	return GL_TRUE;
 }
 
-void GetBufferPointerv(GLenum target, GLenum pname, void **params)
+void GL_APIENTRY GetBufferPointerv(GLenum target, GLenum pname, void **params)
 {
 	TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint *params = %p)",
 	      target, pname, params);
@@ -886,7 +886,7 @@
 	}
 }
 
-void DrawBuffers(GLsizei n, const GLenum *bufs)
+void GL_APIENTRY DrawBuffers(GLsizei n, const GLenum *bufs)
 {
 	TRACE("(GLsizei n = %d, const GLenum *bufs = %p)", n, bufs);
 
@@ -978,7 +978,7 @@
 	}
 }
 
-void UniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+void GL_APIENTRY 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);
 
@@ -1010,7 +1010,7 @@
 	}
 }
 
-void UniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+void GL_APIENTRY 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);
 
@@ -1042,7 +1042,7 @@
 	}
 }
 
-void UniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+void GL_APIENTRY 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);
 
@@ -1074,7 +1074,7 @@
 	}
 }
 
-void UniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+void GL_APIENTRY 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);
 
@@ -1106,7 +1106,7 @@
 	}
 }
 
-void UniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+void GL_APIENTRY 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);
 
@@ -1138,7 +1138,7 @@
 	}
 }
 
-void UniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+void GL_APIENTRY 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);
 
@@ -1170,7 +1170,7 @@
 	}
 }
 
-void BlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)
+void GL_APIENTRY 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, "
@@ -1210,7 +1210,7 @@
 	}
 }
 
-void FramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer)
+void GL_APIENTRY 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);
@@ -1323,7 +1323,7 @@
 	}
 }
 
-void *MapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access)
+void *GL_APIENTRY 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);
@@ -1393,7 +1393,7 @@
 	return nullptr;
 }
 
-void FlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length)
+void GL_APIENTRY FlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length)
 {
 	TRACE("(GLenum target = 0x%X,  GLintptr offset = %d, GLsizeiptr length = %d)",
 	      target, offset, length);
@@ -1441,7 +1441,7 @@
 	}
 }
 
-void BindVertexArray(GLuint array)
+void GL_APIENTRY BindVertexArray(GLuint array)
 {
 	TRACE("(GLuint array = %d)", array);
 
@@ -1458,12 +1458,12 @@
 	}
 }
 
-void BindVertexArrayOES(GLuint array)
+void GL_APIENTRY BindVertexArrayOES(GLuint array)
 {
 	BindVertexArray(array);
 }
 
-void DeleteVertexArrays(GLsizei n, const GLuint *arrays)
+void GL_APIENTRY DeleteVertexArrays(GLsizei n, const GLuint *arrays)
 {
 	TRACE("(GLsizei n = %d, const GLuint *arrays = %p)", n, arrays);
 
@@ -1486,12 +1486,12 @@
 	}
 }
 
-void DeleteVertexArraysOES(GLsizei n, const GLuint *arrays)
+void GL_APIENTRY DeleteVertexArraysOES(GLsizei n, const GLuint *arrays)
 {
 	DeleteVertexArrays(n, arrays);
 }
 
-void GenVertexArrays(GLsizei n, GLuint *arrays)
+void GL_APIENTRY GenVertexArrays(GLsizei n, GLuint *arrays)
 {
 	TRACE("(GLsizei n = %d, const GLuint *arrays = %p)", n, arrays);
 
@@ -1511,12 +1511,12 @@
 	}
 }
 
-void GenVertexArraysOES(GLsizei n, GLuint *arrays)
+void GL_APIENTRY GenVertexArraysOES(GLsizei n, GLuint *arrays)
 {
 	GenVertexArrays(n, arrays);
 }
 
-GLboolean IsVertexArray(GLuint array)
+GLboolean GL_APIENTRY IsVertexArray(GLuint array)
 {
 	TRACE("(GLuint array = %d)", array);
 
@@ -1540,12 +1540,12 @@
 	return GL_FALSE;
 }
 
-GLboolean IsVertexArrayOES(GLuint array)
+GLboolean GL_APIENTRY IsVertexArrayOES(GLuint array)
 {
 	return IsVertexArray(array);
 }
 
-void GetIntegeri_v(GLenum target, GLuint index, GLint *data)
+void GL_APIENTRY GetIntegeri_v(GLenum target, GLuint index, GLint *data)
 {
 	TRACE("(GLenum target = 0x%X, GLuint index = %d, GLint* data = %p)",
 	      target, index, data);
@@ -1605,7 +1605,7 @@
 	}
 }
 
-void BeginTransformFeedback(GLenum primitiveMode)
+void GL_APIENTRY BeginTransformFeedback(GLenum primitiveMode)
 {
 	TRACE("(GLenum primitiveMode = 0x%X)", primitiveMode);
 
@@ -1640,7 +1640,7 @@
 	}
 }
 
-void EndTransformFeedback(void)
+void GL_APIENTRY EndTransformFeedback(void)
 {
 	TRACE("()");
 
@@ -1665,7 +1665,7 @@
 	}
 }
 
-void BindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size)
+void GL_APIENTRY 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);
@@ -1711,7 +1711,7 @@
 	}
 }
 
-void BindBufferBase(GLenum target, GLuint index, GLuint buffer)
+void GL_APIENTRY BindBufferBase(GLenum target, GLuint index, GLuint buffer)
 {
 	TRACE("(GLenum target = 0x%X, GLuint index = %d, GLuint buffer = %d)",
 	      target, index, buffer);
@@ -1744,7 +1744,7 @@
 	}
 }
 
-void TransformFeedbackVaryings(GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode)
+void GL_APIENTRY 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);
@@ -1777,7 +1777,7 @@
 	}
 }
 
-void GetTransformFeedbackVarying(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name)
+void GL_APIENTRY 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);
@@ -1807,7 +1807,7 @@
 	}
 }
 
-void VertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer)
+void GL_APIENTRY 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);
@@ -1851,7 +1851,7 @@
 	}
 }
 
-void GetVertexAttribIiv(GLuint index, GLenum pname, GLint *params)
+void GL_APIENTRY GetVertexAttribIiv(GLuint index, GLenum pname, GLint *params)
 {
 	TRACE("(GLuint index = %d, GLenum pname = 0x%X, GLint *params = %p)",
 	      index, pname, params);
@@ -1907,7 +1907,7 @@
 	}
 }
 
-void GetVertexAttribIuiv(GLuint index, GLenum pname, GLuint *params)
+void GL_APIENTRY GetVertexAttribIuiv(GLuint index, GLenum pname, GLuint *params)
 {
 	TRACE("(GLuint index = %d, GLenum pname = 0x%X, GLuint *params = %p)",
 		index, pname, params);
@@ -1963,7 +1963,7 @@
 	}
 }
 
-void VertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w)
+void GL_APIENTRY 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);
@@ -1982,7 +1982,7 @@
 	}
 }
 
-void VertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w)
+void GL_APIENTRY 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);
@@ -2001,7 +2001,7 @@
 	}
 }
 
-void VertexAttribI4iv(GLuint index, const GLint *v)
+void GL_APIENTRY VertexAttribI4iv(GLuint index, const GLint *v)
 {
 	TRACE("(GLuint index = %d, GLint *v = %p)", index, v);
 
@@ -2018,7 +2018,7 @@
 	}
 }
 
-void VertexAttribI4uiv(GLuint index, const GLuint *v)
+void GL_APIENTRY VertexAttribI4uiv(GLuint index, const GLuint *v)
 {
 	TRACE("(GLuint index = %d, GLint *v = %p)", index, v);
 
@@ -2035,7 +2035,7 @@
 	}
 }
 
-void GetUniformuiv(GLuint program, GLint location, GLuint *params)
+void GL_APIENTRY GetUniformuiv(GLuint program, GLint location, GLuint *params)
 {
 	TRACE("(GLuint program = %d, GLint location = %d, GLuint *params = %p)",
 	      program, location, params);
@@ -2070,7 +2070,7 @@
 	}
 }
 
-GLint GetFragDataLocation(GLuint program, const GLchar *name)
+GLint GL_APIENTRY GetFragDataLocation(GLuint program, const GLchar *name)
 {
 	TRACE("(GLuint program = %d, const GLchar *name = %p)", program, name);
 
@@ -2103,7 +2103,7 @@
 	return -1;
 }
 
-void Uniform1uiv(GLint location, GLsizei count, const GLuint *value)
+void GL_APIENTRY Uniform1uiv(GLint location, GLsizei count, const GLuint *value)
 {
 	TRACE("(GLint location = %d, GLsizei count = %d, const GLuint *value = %p)",
 	      location, count, value);
@@ -2136,7 +2136,7 @@
 	}
 }
 
-void Uniform2uiv(GLint location, GLsizei count, const GLuint *value)
+void GL_APIENTRY Uniform2uiv(GLint location, GLsizei count, const GLuint *value)
 {
 	TRACE("(GLint location = %d, GLsizei count = %d, const GLuint *value = %p)",
 	      location, count, value);
@@ -2169,7 +2169,7 @@
 	}
 }
 
-void Uniform3uiv(GLint location, GLsizei count, const GLuint *value)
+void GL_APIENTRY Uniform3uiv(GLint location, GLsizei count, const GLuint *value)
 {
 	TRACE("(GLint location = %d, GLsizei count = %d, const GLuint *value = %p)",
 	      location, count, value);
@@ -2202,7 +2202,7 @@
 	}
 }
 
-void Uniform4uiv(GLint location, GLsizei count, const GLuint *value)
+void GL_APIENTRY Uniform4uiv(GLint location, GLsizei count, const GLuint *value)
 {
 	TRACE("(GLint location = %d, GLsizei count = %d, const GLuint *value = %p)",
 	      location, count, value);
@@ -2235,33 +2235,33 @@
 	}
 }
 
-void Uniform1ui(GLint location, GLuint v0)
+void GL_APIENTRY Uniform1ui(GLint location, GLuint v0)
 {
 	Uniform1uiv(location, 1, &v0);
 }
 
-void Uniform2ui(GLint location, GLuint v0, GLuint v1)
+void GL_APIENTRY 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)
+void GL_APIENTRY 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)
+void GL_APIENTRY 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)
+void GL_APIENTRY ClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint *value)
 {
 	TRACE("(GLenum buffer = 0x%X, GLint drawbuffer = %d, const GLint *value = %p)",
 	      buffer, drawbuffer, value);
@@ -2298,7 +2298,7 @@
 	}
 }
 
-void ClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint *value)
+void GL_APIENTRY ClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint *value)
 {
 	TRACE("(GLenum buffer = 0x%X, GLint drawbuffer = %d, const GLuint *value = %p)",
 	      buffer, drawbuffer, value);
@@ -2325,7 +2325,7 @@
 	}
 }
 
-void ClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat *value)
+void GL_APIENTRY ClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat *value)
 {
 	TRACE("(GLenum buffer = 0x%X, GLint drawbuffer = %d, const GLfloat *value = %p)",
 	      buffer, drawbuffer, value);
@@ -2362,7 +2362,7 @@
 	}
 }
 
-void ClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil)
+void GL_APIENTRY 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);
@@ -2390,7 +2390,7 @@
 	}
 }
 
-const GLubyte *GetStringi(GLenum name, GLuint index)
+const GLubyte *GL_APIENTRY GetStringi(GLenum name, GLuint index)
 {
 	TRACE("(GLenum name = 0x%X, GLuint index = %d)", name, index);
 
@@ -2417,7 +2417,7 @@
 	return (GLubyte*)nullptr;
 }
 
-void CopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size)
+void GL_APIENTRY 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);
@@ -2460,7 +2460,7 @@
 	}
 }
 
-void GetUniformIndices(GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices)
+void GL_APIENTRY 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);
@@ -2505,7 +2505,7 @@
 	}
 }
 
-void GetActiveUniformsiv(GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params)
+void GL_APIENTRY 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);
@@ -2566,7 +2566,7 @@
 	}
 }
 
-GLuint GetUniformBlockIndex(GLuint program, const GLchar *uniformBlockName)
+GLuint GL_APIENTRY GetUniformBlockIndex(GLuint program, const GLchar *uniformBlockName)
 {
 	TRACE("(GLuint program = %d, const GLchar *uniformBlockName = %p)",
 	      program, uniformBlockName);
@@ -2595,7 +2595,7 @@
 	return GL_INVALID_INDEX;
 }
 
-void GetActiveUniformBlockiv(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params)
+void GL_APIENTRY 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);
@@ -2635,7 +2635,7 @@
 	}
 }
 
-void GetActiveUniformBlockName(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName)
+void GL_APIENTRY 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);
@@ -2665,7 +2665,7 @@
 	}
 }
 
-void UniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding)
+void GL_APIENTRY UniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding)
 {
 	TRACE("(GLuint program = %d, GLuint uniformBlockIndex = %d, GLuint uniformBlockBinding = %d)",
 	      program, uniformBlockIndex, uniformBlockBinding);
@@ -2695,7 +2695,7 @@
 	}
 }
 
-void DrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount)
+void GL_APIENTRY 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);
@@ -2733,7 +2733,7 @@
 	}
 }
 
-void DrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instanceCount)
+void GL_APIENTRY 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);
@@ -2781,7 +2781,7 @@
 	}
 }
 
-GLsync FenceSync(GLenum condition, GLbitfield flags)
+GLsync GL_APIENTRY FenceSync(GLenum condition, GLbitfield flags)
 {
 	TRACE("(GLenum condition = 0x%X, GLbitfield flags = %X)", condition, flags);
 
@@ -2808,7 +2808,7 @@
 	return nullptr;
 }
 
-GLboolean IsSync(GLsync sync)
+GLboolean GL_APIENTRY IsSync(GLsync sync)
 {
 	TRACE("(GLsync sync = %p)", sync);
 
@@ -2827,7 +2827,7 @@
 	return GL_FALSE;
 }
 
-void DeleteSync(GLsync sync)
+void GL_APIENTRY DeleteSync(GLsync sync)
 {
 	TRACE("(GLsync sync = %p)", sync);
 
@@ -2849,7 +2849,7 @@
 	}
 }
 
-GLenum ClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
+GLenum GL_APIENTRY ClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
 {
 	TRACE("(GLsync sync = %p, GLbitfield flags = %X, GLuint64 timeout = %llu)", sync, flags, timeout);
 
@@ -2877,7 +2877,7 @@
 	return GL_FALSE;
 }
 
-void WaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
+void GL_APIENTRY WaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
 {
 	TRACE("(GLsync sync = %p, GLbitfield flags = %X, GLuint64 timeout = %llu)", sync, flags, timeout);
 
@@ -2908,7 +2908,7 @@
 	}
 }
 
-void GetInteger64v(GLenum pname, GLint64 *data)
+void GL_APIENTRY GetInteger64v(GLenum pname, GLint64 *data)
 {
 	TRACE("(GLenum pname = 0x%X, GLint64 *data = %p)", pname, data);
 
@@ -2965,7 +2965,7 @@
 	}
 }
 
-void GetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values)
+void GL_APIENTRY 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);
@@ -2989,7 +2989,7 @@
 	}
 }
 
-void GetInteger64i_v(GLenum target, GLuint index, GLint64 *data)
+void GL_APIENTRY GetInteger64i_v(GLenum target, GLuint index, GLint64 *data)
 {
 	TRACE("(GLenum target = 0x%X, GLuint index = %d, GLint64 *data = %p)", target, index, data);
 
@@ -3048,7 +3048,7 @@
 	}
 }
 
-void GetBufferParameteri64v(GLenum target, GLenum pname, GLint64 *params)
+void GL_APIENTRY GetBufferParameteri64v(GLenum target, GLenum pname, GLint64 *params)
 {
 	TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint64 *params = %p)", target, pname, params);
 
@@ -3095,7 +3095,7 @@
 	}
 }
 
-void GenSamplers(GLsizei count, GLuint *samplers)
+void GL_APIENTRY GenSamplers(GLsizei count, GLuint *samplers)
 {
 	TRACE("(GLsizei count = %d, GLuint *samplers = %p)", count, samplers);
 
@@ -3115,7 +3115,7 @@
 	}
 }
 
-void DeleteSamplers(GLsizei count, const GLuint *samplers)
+void GL_APIENTRY DeleteSamplers(GLsizei count, const GLuint *samplers)
 {
 	TRACE("(GLsizei count = %d, GLuint *samplers = %p)", count, samplers);
 
@@ -3135,7 +3135,7 @@
 	}
 }
 
-GLboolean IsSampler(GLuint sampler)
+GLboolean GL_APIENTRY IsSampler(GLuint sampler)
 {
 	TRACE("(GLuint sampler = %d)", sampler);
 
@@ -3157,7 +3157,7 @@
 	return GL_FALSE;
 }
 
-void BindSampler(GLuint unit, GLuint sampler)
+void GL_APIENTRY BindSampler(GLuint unit, GLuint sampler)
 {
 	TRACE("(GLuint unit = %d, GLuint sampler = %d)", unit, sampler);
 
@@ -3179,7 +3179,7 @@
 	}
 }
 
-void SamplerParameteriv(GLuint sampler, GLenum pname, const GLint *param)
+void GL_APIENTRY SamplerParameteriv(GLuint sampler, GLenum pname, const GLint *param)
 {
 	TRACE("(GLuint sampler = %d, GLenum pname = 0x%X, const GLint *param = %p)",
 	      sampler, pname, param);
@@ -3207,7 +3207,7 @@
 	}
 }
 
-void SamplerParameteri(GLuint sampler, GLenum pname, GLint param)
+void GL_APIENTRY SamplerParameteri(GLuint sampler, GLenum pname, GLint param)
 {
 	TRACE("(GLuint sampler = %d, GLenum pname = 0x%X, GLint param = %d)",
 	      sampler, pname, param);
@@ -3215,7 +3215,7 @@
 	SamplerParameteriv(sampler, pname, &param);
 }
 
-void SamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat *param)
+void GL_APIENTRY SamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat *param)
 {
 	TRACE("(GLuint sampler = %d, GLenum pname = 0x%X, const GLfloat *param = %p)",
 	      sampler, pname, param);
@@ -3241,7 +3241,7 @@
 	}
 }
 
-void SamplerParameterf(GLuint sampler, GLenum pname, GLfloat param)
+void GL_APIENTRY SamplerParameterf(GLuint sampler, GLenum pname, GLfloat param)
 {
 	TRACE("(GLuint sampler = %d, GLenum pname = 0x%X, GLfloat param = %f)",
 	      sampler, pname, param);
@@ -3249,7 +3249,7 @@
 	SamplerParameterfv(sampler, pname, &param);
 }
 
-void GetSamplerParameteriv(GLuint sampler, GLenum pname, GLint *params)
+void GL_APIENTRY GetSamplerParameteriv(GLuint sampler, GLenum pname, GLint *params)
 {
 	TRACE("(GLuint sampler = %d, GLenum pname = 0x%X, GLint *params = %p)",
 	      sampler, pname, params);
@@ -3272,7 +3272,7 @@
 	}
 }
 
-void GetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat *params)
+void GL_APIENTRY GetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat *params)
 {
 	TRACE("(GLuint sampler = %d, GLenum pname = 0x%X, GLfloat *params = %p)",
 	      sampler, pname, params);
@@ -3295,7 +3295,7 @@
 	}
 }
 
-void VertexAttribDivisor(GLuint index, GLuint divisor)
+void GL_APIENTRY VertexAttribDivisor(GLuint index, GLuint divisor)
 {
 	TRACE("(GLuint index = %d, GLuint divisor = %d)", index, divisor);
 
@@ -3312,7 +3312,7 @@
 	}
 }
 
-void BindTransformFeedback(GLenum target, GLuint id)
+void GL_APIENTRY BindTransformFeedback(GLenum target, GLuint id)
 {
 	TRACE("(GLenum target = 0x%X, GLuint id = %d)", target, id);
 
@@ -3341,7 +3341,7 @@
 	}
 }
 
-void DeleteTransformFeedbacks(GLsizei n, const GLuint *ids)
+void GL_APIENTRY DeleteTransformFeedbacks(GLsizei n, const GLuint *ids)
 {
 	TRACE("(GLsizei n = %d, const GLuint *ids = %p)", n, ids);
 
@@ -3371,7 +3371,7 @@
 	}
 }
 
-void GenTransformFeedbacks(GLsizei n, GLuint *ids)
+void GL_APIENTRY GenTransformFeedbacks(GLsizei n, GLuint *ids)
 {
 	TRACE("(GLsizei n = %d, const GLuint *ids = %p)", n, ids);
 
@@ -3391,7 +3391,7 @@
 	}
 }
 
-GLboolean IsTransformFeedback(GLuint id)
+GLboolean GL_APIENTRY IsTransformFeedback(GLuint id)
 {
 	TRACE("(GLuint id = %d)", id);
 
@@ -3415,7 +3415,7 @@
 	return GL_FALSE;
 }
 
-void PauseTransformFeedback(void)
+void GL_APIENTRY PauseTransformFeedback(void)
 {
 	TRACE("()");
 
@@ -3436,7 +3436,7 @@
 	}
 }
 
-void ResumeTransformFeedback(void)
+void GL_APIENTRY ResumeTransformFeedback(void)
 {
 	TRACE("()");
 
@@ -3457,7 +3457,7 @@
 	}
 }
 
-void GetProgramBinary(GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary)
+void GL_APIENTRY 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);
@@ -3483,7 +3483,7 @@
 	return error(GL_INVALID_OPERATION);
 }
 
-void ProgramBinary(GLuint program, GLenum binaryFormat, const void *binary, GLsizei length)
+void GL_APIENTRY 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);
@@ -3509,7 +3509,7 @@
 	return error(GL_INVALID_ENUM);
 }
 
-void ProgramParameteri(GLuint program, GLenum pname, GLint value)
+void GL_APIENTRY ProgramParameteri(GLuint program, GLenum pname, GLint value)
 {
 	TRACE("(GLuint program = %d, GLenum pname = 0x%X, GLint value = %d)",
 	      program, pname, value);
@@ -3540,7 +3540,7 @@
 	}
 }
 
-void InvalidateSubFramebuffer(GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height)
+void GL_APIENTRY 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);
@@ -3608,7 +3608,7 @@
 	}
 }
 
-void InvalidateFramebuffer(GLenum target, GLsizei numAttachments, const GLenum *attachments)
+void GL_APIENTRY InvalidateFramebuffer(GLenum target, GLsizei numAttachments, const GLenum *attachments)
 {
 	TRACE("(GLenum target = 0x%X, GLsizei numAttachments = %d, const GLenum *attachments = %p)",
 	      target, numAttachments, attachments);
@@ -3616,7 +3616,7 @@
 	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)
+void GL_APIENTRY 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);
@@ -3704,7 +3704,7 @@
 	}
 }
 
-void TexStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth)
+void GL_APIENTRY 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);
@@ -3777,7 +3777,7 @@
 	}
 }
 
-void GetInternalformativ(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params)
+void GL_APIENTRY 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);
