Add a wrapper for SwiftShader EGL, GLESv1_CM and GLESv3.

SwiftShader has problems with multithreaded use of the EGL and GL ES
APIs. Until this is fixed properly, disallow multiple threads being
inside the library by wrapping it with libraries that share a mutex
locking each API entry point.

Bug: 76027192
Bug: 74573450
Bug: 74572414
Bug: 74571771
Bug: 73780279
Test: this change is completely untested
Change-Id: I2c5fd3e2b4c716b467a22dbd63547c5f0d32a25a
Merged-In: I2c5fd3e2b4c716b467a22dbd63547c5f0d32a25a
(cherry picked from commit 0fca81c7143bfcceb81c2fb977d7ceab959f8e74)
(cherry picked from commit 7cd21da58ea0f369cfc90c8e3f5f19e2e9d3f71b)
diff --git a/guest/libs/eglwrapper/Android.mk b/guest/libs/eglwrapper/Android.mk
new file mode 100644
index 0000000..09dd112
--- /dev/null
+++ b/guest/libs/eglwrapper/Android.mk
@@ -0,0 +1,100 @@
+# Copyright (C) 2018 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# These modules use the _a name to ensure they are listed first in the
+# directory they are installed into so they are picked up before other
+# drivers.
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := libEGL_a_wrapper
+LOCAL_MODULE_TAGS := optional
+LOCAL_SRC_FILES := \
+    egl.cpp \
+    egl_wrapper_context.cpp \
+    egl_wrapper_entry.cpp
+LOCAL_CFLAGS := -Wall -Werror
+LOCAL_C_INCLUDES := frameworks/native/opengl/include
+LOCAL_SHARED_LIBRARIES := libdl
+
+LOCAL_VENDOR_MODULE := true
+
+ifeq (0, $(shell test $(PLATFORM_SDK_VERSION) -ge 21; echo $$?))
+LOCAL_MODULE_RELATIVE_PATH := egl
+else
+LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/egl
+endif
+
+# See b/67109557
+ifeq (true, $(TARGET_TRANSLATE_2ND_ARCH))
+LOCAL_MULTILIB := first
+endif
+
+include $(BUILD_SHARED_LIBRARY)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := libGLESv1_CM_a_wrapper
+LOCAL_MODULE_TAGS := optional
+LOCAL_SRC_FILES := \
+    gles1.cpp \
+    gles1_wrapper_context.cpp \
+    gles1_wrapper_entry.cpp
+LOCAL_CFLAGS := -Wall -Werror
+LOCAL_C_INCLUDES := frameworks/native/opengl/include
+LOCAL_SHARED_LIBRARIES := libdl
+
+LOCAL_VENDOR_MODULE := true
+
+ifeq (0, $(shell test $(PLATFORM_SDK_VERSION) -ge 21; echo $$?))
+LOCAL_MODULE_RELATIVE_PATH := egl
+else
+LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/egl
+endif
+
+# See b/67109557
+ifeq (true, $(TARGET_TRANSLATE_2ND_ARCH))
+LOCAL_MULTILIB := first
+endif
+
+include $(BUILD_SHARED_LIBRARY)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := libGLESv2_a_wrapper
+LOCAL_MODULE_TAGS := optional
+LOCAL_SRC_FILES := \
+    gles3.cpp \
+    gles3_wrapper_context.cpp \
+    gles3_wrapper_entry.cpp
+LOCAL_CFLAGS := -Wall -Werror
+LOCAL_C_INCLUDES := frameworks/native/opengl/include
+LOCAL_SHARED_LIBRARIES := libdl
+
+LOCAL_VENDOR_MODULE := true
+
+ifeq (0, $(shell test $(PLATFORM_SDK_VERSION) -ge 21; echo $$?))
+LOCAL_MODULE_RELATIVE_PATH := egl
+else
+LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/egl
+endif
+
+# See b/67109557
+ifeq (true, $(TARGET_TRANSLATE_2ND_ARCH))
+LOCAL_MULTILIB := first
+endif
+
+include $(BUILD_SHARED_LIBRARY)
diff --git a/guest/libs/eglwrapper/egl.attrib b/guest/libs/eglwrapper/egl.attrib
new file mode 100644
index 0000000..14b257c
--- /dev/null
+++ b/guest/libs/eglwrapper/egl.attrib
@@ -0,0 +1 @@
+GLOBAL
diff --git a/guest/libs/eglwrapper/egl.cpp b/guest/libs/eglwrapper/egl.cpp
new file mode 100644
index 0000000..efc1e17
--- /dev/null
+++ b/guest/libs/eglwrapper/egl.cpp
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "egl_wrapper_context.h"
+#undef GET_CONTEXT
+
+#include <dlfcn.h>
+
+egl_wrapper_context_t* (*getEGLContext)(void) = NULL;
+
+static egl_wrapper_context_t g_egl_wrapper_context;
+
+static egl_wrapper_context_t *egl(void) {
+	return &g_egl_wrapper_context;
+}
+
+void egl_wrapper_context_t::setContextAccessor(egl_wrapper_context_t* (*f)(void)) {
+	getEGLContext = f;
+}
+
+std::mutex g_context_mutex;
+
+static void *getProc(const char *name, void *userData) {
+	return dlsym(userData, name);
+}
+
+__attribute__((constructor)) void setup() {
+	void *egl_handle = dlopen("/system/vendor/lib/egl/libEGL_swiftshader.so", RTLD_NOW);
+	g_egl_wrapper_context.initDispatchByName(getProc, egl_handle);
+	g_egl_wrapper_context.setContextAccessor(egl);
+}
diff --git a/guest/libs/eglwrapper/egl.in b/guest/libs/eglwrapper/egl.in
new file mode 100644
index 0000000..7d1c13c
--- /dev/null
+++ b/guest/libs/eglwrapper/egl.in
@@ -0,0 +1,45 @@
+# egl 1.4 core
+
+GL_ENTRY(EGLBoolean, eglChooseConfig, EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config)
+GL_ENTRY(EGLBoolean, eglCopyBuffers, EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target)
+GL_ENTRY(EGLContext, eglCreateContext, EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list)
+GL_ENTRY(EGLSurface, eglCreatePbufferSurface, EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list)
+GL_ENTRY(EGLSurface, eglCreatePixmapSurface, EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint *attrib_list)
+GL_ENTRY(EGLSurface, eglCreateWindowSurface, EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint *attrib_list)
+GL_ENTRY(EGLBoolean, eglDestroyContext, EGLDisplay dpy, EGLContext context)
+GL_ENTRY(EGLBoolean, eglDestroySurface, EGLDisplay dpy, EGLSurface surface)
+GL_ENTRY(EGLBoolean, eglGetConfigAttrib, EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value)
+GL_ENTRY(EGLBoolean, eglGetConfigs, EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config)
+GL_ENTRY(EGLDisplay, eglGetCurrentDisplay, void)
+GL_ENTRY(EGLSurface, eglGetCurrentSurface, EGLint readdraw)
+GL_ENTRY(EGLDisplay, eglGetDisplay, EGLNativeDisplayType display_id)
+GL_ENTRY(EGLint, eglGetError, void)
+GL_ENTRY(__eglMustCastToProperFunctionPointerType, eglGetProcAddress, const char *procname)
+GL_ENTRY(EGLBoolean, eglInitialize, EGLDisplay dpy, EGLint *major, EGLint *minor)
+GL_ENTRY(EGLBoolean, eglMakeCurrent, EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext context)
+GL_ENTRY(EGLBoolean, eglQueryContext, EGLDisplay dpy, EGLContext context, EGLint attribute, EGLint *value)
+GL_ENTRY(EGLconstcharptr, eglQueryString, EGLDisplay dpy, EGLint name)
+GL_ENTRY(EGLBoolean, eglQuerySurface, EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value)
+GL_ENTRY(EGLBoolean, eglSwapBuffers, EGLDisplay dpy, EGLSurface surface)
+GL_ENTRY(EGLBoolean, eglTerminate, EGLDisplay dpy)
+GL_ENTRY(EGLBoolean, eglWaitGL, void)
+GL_ENTRY(EGLBoolean, eglWaitNative, EGLint engine)
+GL_ENTRY(EGLBoolean, eglBindTexImage, EGLDisplay dpy, EGLSurface surface, EGLint buffer)
+GL_ENTRY(EGLBoolean, eglReleaseTexImage, EGLDisplay dpy, EGLSurface surface, EGLint buffer)
+GL_ENTRY(EGLBoolean, eglSurfaceAttrib, EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value)
+GL_ENTRY(EGLBoolean, eglSwapInterval, EGLDisplay dpy, EGLint interval)
+GL_ENTRY(EGLBoolean, eglBindAPI, EGLenum api)
+GL_ENTRY(EGLenum, eglQueryAPI, void)
+GL_ENTRY(EGLSurface, eglCreatePbufferFromClientBuffer, EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint *attrib_list)
+GL_ENTRY(EGLBoolean, eglReleaseThread, void)
+GL_ENTRY(EGLBoolean, eglWaitClient, void)
+GL_ENTRY(EGLContext, eglGetCurrentContext, void)
+
+# egl 1.4 extensions
+
+GL_ENTRY(EGLSyncKHR, eglCreateSyncKHR, EGLDisplay dpy, EGLenum type, const EGLint *attrib_list)
+GL_ENTRY(EGLBoolean, eglDestroySyncKHR, EGLDisplay dpy, EGLSyncKHR sync)
+GL_ENTRY(EGLint, eglClientWaitSyncKHR, EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout)
+GL_ENTRY(EGLBoolean, eglGetSyncAttribKHR, EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value)
+GL_ENTRY(EGLImageKHR, eglCreateImageKHR, EGLDisplay dpy, EGLContext context, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list)
+GL_ENTRY(EGLBoolean, eglDestroyImageKHR, EGLDisplay dpy, EGLImageKHR image)
diff --git a/guest/libs/eglwrapper/egl.lds b/guest/libs/eglwrapper/egl.lds
new file mode 100644
index 0000000..fded5e2
--- /dev/null
+++ b/guest/libs/eglwrapper/egl.lds
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+{
+global:
+	# EGL 1.4 API
+	eglBindAPI;
+	eglBindTexImage;
+	eglChooseConfig;
+	eglClientWaitSyncKHR;
+	eglCopyBuffers;
+	eglCreateContext;
+	eglCreateImageKHR;
+	eglCreatePbufferFromClientBuffer;
+	eglCreatePbufferSurface;
+	eglCreatePixmapSurface;
+	eglCreateSyncKHR;
+	eglCreateWindowSurface;
+	eglDestroyContext;
+	eglDestroyImageKHR;
+	eglDestroySurface;
+	eglDestroySyncKHR;
+	eglGetConfigAttrib;
+	eglGetConfigs;
+	eglGetCurrentContext;
+	eglGetCurrentDisplay;
+	eglGetCurrentSurface;
+	eglGetDisplay;
+	eglGetError;
+	eglGetProcAddress;
+	eglGetSyncAttribKHR;
+	eglInitialize;
+	eglMakeCurrent;
+	eglQueryAPI;
+	eglQueryContext;
+	eglQueryString;
+	eglQuerySurface;
+	eglReleaseTexImage;
+	eglReleaseThread;
+	eglSurfaceAttrib;
+	eglSwapBuffers;
+	eglSwapInterval;
+	eglTerminate;
+	eglWaitClient;
+	eglWaitGL;
+	eglWaitNative;
+
+	# Type-strings and type-infos required by sanitizers
+	_ZTS*;
+	_ZTI*;
+
+local:
+	*;
+};
diff --git a/guest/libs/eglwrapper/egl.types b/guest/libs/eglwrapper/egl.types
new file mode 100644
index 0000000..4a8a529
--- /dev/null
+++ b/guest/libs/eglwrapper/egl.types
@@ -0,0 +1,23 @@
+char* 32 0x%08x
+void* 32 0x%08x
+
+EGLconstcharptr 32 0x%08x
+EGLenum 32 0x%08x
+EGLint 32 %d
+EGLint* 32 0x%08x
+
+EGLBoolean 8 %d
+EGLClientBuffer 32 0x%08x
+EGLConfig 32 0x%08x
+EGLConfig* 32 0x%08x
+EGLContext 32 0x%08x
+EGLDisplay 32 0x%08x
+EGLImageKHR 32 0x%08x
+EGLNativeDisplayType 32 0x%08x
+EGLNativePixmapType 32 0x%08x
+EGLNativeWindowType 32 0x%08x
+EGLSurface 32 0x%08x
+EGLSyncKHR 32 0x%08x
+EGLTimeKHR 64 %llu
+
+__eglMustCastToProperFunctionPointerType 32 0x%08x
diff --git a/guest/libs/eglwrapper/egl_server_proc.h b/guest/libs/eglwrapper/egl_server_proc.h
new file mode 100644
index 0000000..c3dae5c
--- /dev/null
+++ b/guest/libs/eglwrapper/egl_server_proc.h
@@ -0,0 +1,6 @@
+#ifndef __egl_server_proc_t_h
+#define __egl_server_proc_t_h
+
+#include "egl_wrapper_proc.h"
+
+#endif
diff --git a/guest/libs/eglwrapper/egl_types.h b/guest/libs/eglwrapper/egl_types.h
new file mode 100644
index 0000000..7a22e5f
--- /dev/null
+++ b/guest/libs/eglwrapper/egl_types.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __egl_types_h
+#define __egl_types_h
+
+typedef const char* EGLconstcharptr;
+
+#include <EGL/egl.h>
+#include <EGL/eglext.h>
+
+#include <mutex>
+
+extern std::mutex g_context_mutex;
+
+struct egl_wrapper_context_t;
+extern egl_wrapper_context_t* (*getEGLContext)(void);
+
+#define GET_CONTEXT \
+	std::lock_guard<std::mutex> lock(g_context_mutex); \
+	egl_wrapper_context_t *ctx = getEGLContext()
+
+#endif
diff --git a/guest/libs/eglwrapper/egl_wrapper_context.cpp b/guest/libs/eglwrapper/egl_wrapper_context.cpp
new file mode 100644
index 0000000..5e8f96c
--- /dev/null
+++ b/guest/libs/eglwrapper/egl_wrapper_context.cpp
@@ -0,0 +1,55 @@
+// Generated Code - DO NOT EDIT !!
+// generated by 'emugen'
+
+
+#include <string.h>
+#include "egl_wrapper_context.h"
+
+
+#include <stdio.h>
+
+int egl_wrapper_context_t::initDispatchByName(void *(*getProc)(const char *, void *userData), void *userData)
+{
+	eglChooseConfig = (eglChooseConfig_wrapper_proc_t) getProc("eglChooseConfig", userData);
+	eglCopyBuffers = (eglCopyBuffers_wrapper_proc_t) getProc("eglCopyBuffers", userData);
+	eglCreateContext = (eglCreateContext_wrapper_proc_t) getProc("eglCreateContext", userData);
+	eglCreatePbufferSurface = (eglCreatePbufferSurface_wrapper_proc_t) getProc("eglCreatePbufferSurface", userData);
+	eglCreatePixmapSurface = (eglCreatePixmapSurface_wrapper_proc_t) getProc("eglCreatePixmapSurface", userData);
+	eglCreateWindowSurface = (eglCreateWindowSurface_wrapper_proc_t) getProc("eglCreateWindowSurface", userData);
+	eglDestroyContext = (eglDestroyContext_wrapper_proc_t) getProc("eglDestroyContext", userData);
+	eglDestroySurface = (eglDestroySurface_wrapper_proc_t) getProc("eglDestroySurface", userData);
+	eglGetConfigAttrib = (eglGetConfigAttrib_wrapper_proc_t) getProc("eglGetConfigAttrib", userData);
+	eglGetConfigs = (eglGetConfigs_wrapper_proc_t) getProc("eglGetConfigs", userData);
+	eglGetCurrentDisplay = (eglGetCurrentDisplay_wrapper_proc_t) getProc("eglGetCurrentDisplay", userData);
+	eglGetCurrentSurface = (eglGetCurrentSurface_wrapper_proc_t) getProc("eglGetCurrentSurface", userData);
+	eglGetDisplay = (eglGetDisplay_wrapper_proc_t) getProc("eglGetDisplay", userData);
+	eglGetError = (eglGetError_wrapper_proc_t) getProc("eglGetError", userData);
+	eglGetProcAddress = (eglGetProcAddress_wrapper_proc_t) getProc("eglGetProcAddress", userData);
+	eglInitialize = (eglInitialize_wrapper_proc_t) getProc("eglInitialize", userData);
+	eglMakeCurrent = (eglMakeCurrent_wrapper_proc_t) getProc("eglMakeCurrent", userData);
+	eglQueryContext = (eglQueryContext_wrapper_proc_t) getProc("eglQueryContext", userData);
+	eglQueryString = (eglQueryString_wrapper_proc_t) getProc("eglQueryString", userData);
+	eglQuerySurface = (eglQuerySurface_wrapper_proc_t) getProc("eglQuerySurface", userData);
+	eglSwapBuffers = (eglSwapBuffers_wrapper_proc_t) getProc("eglSwapBuffers", userData);
+	eglTerminate = (eglTerminate_wrapper_proc_t) getProc("eglTerminate", userData);
+	eglWaitGL = (eglWaitGL_wrapper_proc_t) getProc("eglWaitGL", userData);
+	eglWaitNative = (eglWaitNative_wrapper_proc_t) getProc("eglWaitNative", userData);
+	eglBindTexImage = (eglBindTexImage_wrapper_proc_t) getProc("eglBindTexImage", userData);
+	eglReleaseTexImage = (eglReleaseTexImage_wrapper_proc_t) getProc("eglReleaseTexImage", userData);
+	eglSurfaceAttrib = (eglSurfaceAttrib_wrapper_proc_t) getProc("eglSurfaceAttrib", userData);
+	eglSwapInterval = (eglSwapInterval_wrapper_proc_t) getProc("eglSwapInterval", userData);
+	eglBindAPI = (eglBindAPI_wrapper_proc_t) getProc("eglBindAPI", userData);
+	eglQueryAPI = (eglQueryAPI_wrapper_proc_t) getProc("eglQueryAPI", userData);
+	eglCreatePbufferFromClientBuffer = (eglCreatePbufferFromClientBuffer_wrapper_proc_t) getProc("eglCreatePbufferFromClientBuffer", userData);
+	eglReleaseThread = (eglReleaseThread_wrapper_proc_t) getProc("eglReleaseThread", userData);
+	eglWaitClient = (eglWaitClient_wrapper_proc_t) getProc("eglWaitClient", userData);
+	eglGetCurrentContext = (eglGetCurrentContext_wrapper_proc_t) getProc("eglGetCurrentContext", userData);
+	eglCreateSyncKHR = (eglCreateSyncKHR_wrapper_proc_t) getProc("eglCreateSyncKHR", userData);
+	eglDestroySyncKHR = (eglDestroySyncKHR_wrapper_proc_t) getProc("eglDestroySyncKHR", userData);
+	eglClientWaitSyncKHR = (eglClientWaitSyncKHR_wrapper_proc_t) getProc("eglClientWaitSyncKHR", userData);
+	eglGetSyncAttribKHR = (eglGetSyncAttribKHR_wrapper_proc_t) getProc("eglGetSyncAttribKHR", userData);
+	eglCreateImageKHR = (eglCreateImageKHR_wrapper_proc_t) getProc("eglCreateImageKHR", userData);
+	eglDestroyImageKHR = (eglDestroyImageKHR_wrapper_proc_t) getProc("eglDestroyImageKHR", userData);
+	return 0;
+}
+
diff --git a/guest/libs/eglwrapper/egl_wrapper_context.h b/guest/libs/eglwrapper/egl_wrapper_context.h
new file mode 100644
index 0000000..52a74ea
--- /dev/null
+++ b/guest/libs/eglwrapper/egl_wrapper_context.h
@@ -0,0 +1,60 @@
+// Generated Code - DO NOT EDIT !!
+// generated by 'emugen'
+#ifndef __egl_wrapper_context_t_h
+#define __egl_wrapper_context_t_h
+
+#include "egl_server_proc.h"
+
+#include "egl_types.h"
+
+
+struct egl_wrapper_context_t {
+
+	eglChooseConfig_wrapper_proc_t eglChooseConfig;
+	eglCopyBuffers_wrapper_proc_t eglCopyBuffers;
+	eglCreateContext_wrapper_proc_t eglCreateContext;
+	eglCreatePbufferSurface_wrapper_proc_t eglCreatePbufferSurface;
+	eglCreatePixmapSurface_wrapper_proc_t eglCreatePixmapSurface;
+	eglCreateWindowSurface_wrapper_proc_t eglCreateWindowSurface;
+	eglDestroyContext_wrapper_proc_t eglDestroyContext;
+	eglDestroySurface_wrapper_proc_t eglDestroySurface;
+	eglGetConfigAttrib_wrapper_proc_t eglGetConfigAttrib;
+	eglGetConfigs_wrapper_proc_t eglGetConfigs;
+	eglGetCurrentDisplay_wrapper_proc_t eglGetCurrentDisplay;
+	eglGetCurrentSurface_wrapper_proc_t eglGetCurrentSurface;
+	eglGetDisplay_wrapper_proc_t eglGetDisplay;
+	eglGetError_wrapper_proc_t eglGetError;
+	eglGetProcAddress_wrapper_proc_t eglGetProcAddress;
+	eglInitialize_wrapper_proc_t eglInitialize;
+	eglMakeCurrent_wrapper_proc_t eglMakeCurrent;
+	eglQueryContext_wrapper_proc_t eglQueryContext;
+	eglQueryString_wrapper_proc_t eglQueryString;
+	eglQuerySurface_wrapper_proc_t eglQuerySurface;
+	eglSwapBuffers_wrapper_proc_t eglSwapBuffers;
+	eglTerminate_wrapper_proc_t eglTerminate;
+	eglWaitGL_wrapper_proc_t eglWaitGL;
+	eglWaitNative_wrapper_proc_t eglWaitNative;
+	eglBindTexImage_wrapper_proc_t eglBindTexImage;
+	eglReleaseTexImage_wrapper_proc_t eglReleaseTexImage;
+	eglSurfaceAttrib_wrapper_proc_t eglSurfaceAttrib;
+	eglSwapInterval_wrapper_proc_t eglSwapInterval;
+	eglBindAPI_wrapper_proc_t eglBindAPI;
+	eglQueryAPI_wrapper_proc_t eglQueryAPI;
+	eglCreatePbufferFromClientBuffer_wrapper_proc_t eglCreatePbufferFromClientBuffer;
+	eglReleaseThread_wrapper_proc_t eglReleaseThread;
+	eglWaitClient_wrapper_proc_t eglWaitClient;
+	eglGetCurrentContext_wrapper_proc_t eglGetCurrentContext;
+	eglCreateSyncKHR_wrapper_proc_t eglCreateSyncKHR;
+	eglDestroySyncKHR_wrapper_proc_t eglDestroySyncKHR;
+	eglClientWaitSyncKHR_wrapper_proc_t eglClientWaitSyncKHR;
+	eglGetSyncAttribKHR_wrapper_proc_t eglGetSyncAttribKHR;
+	eglCreateImageKHR_wrapper_proc_t eglCreateImageKHR;
+	eglDestroyImageKHR_wrapper_proc_t eglDestroyImageKHR;
+	virtual ~egl_wrapper_context_t() {}
+
+	typedef egl_wrapper_context_t *CONTEXT_ACCESSOR_TYPE(void);
+	static void setContextAccessor(CONTEXT_ACCESSOR_TYPE *f);
+	int initDispatchByName( void *(*getProc)(const char *name, void *userData), void *userData);
+};
+
+#endif
diff --git a/guest/libs/eglwrapper/egl_wrapper_entry.cpp b/guest/libs/eglwrapper/egl_wrapper_entry.cpp
new file mode 100644
index 0000000..e520b1d
--- /dev/null
+++ b/guest/libs/eglwrapper/egl_wrapper_entry.cpp
@@ -0,0 +1,295 @@
+// Generated Code - DO NOT EDIT !!
+// generated by 'emugen'
+#include <stdio.h>
+#include <stdlib.h>
+#include "egl_wrapper_context.h"
+
+extern "C" {
+	EGLBoolean eglChooseConfig(EGLDisplay dpy, const EGLint* attrib_list, EGLConfig* configs, EGLint config_size, EGLint* num_config);
+	EGLBoolean eglCopyBuffers(EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target);
+	EGLContext eglCreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_context, 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);
+	EGLSurface eglCreateWindowSurface(EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint* attrib_list);
+	EGLBoolean eglDestroyContext(EGLDisplay dpy, EGLContext context);
+	EGLBoolean eglDestroySurface(EGLDisplay dpy, EGLSurface surface);
+	EGLBoolean eglGetConfigAttrib(EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint* value);
+	EGLBoolean eglGetConfigs(EGLDisplay dpy, EGLConfig* configs, EGLint config_size, EGLint* num_config);
+	EGLDisplay eglGetCurrentDisplay();
+	EGLSurface eglGetCurrentSurface(EGLint readdraw);
+	EGLDisplay eglGetDisplay(EGLNativeDisplayType display_id);
+	EGLint eglGetError();
+	__eglMustCastToProperFunctionPointerType eglGetProcAddress(const char* procname);
+	EGLBoolean eglInitialize(EGLDisplay dpy, EGLint* major, EGLint* minor);
+	EGLBoolean eglMakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext context);
+	EGLBoolean eglQueryContext(EGLDisplay dpy, EGLContext context, EGLint attribute, EGLint* value);
+	EGLconstcharptr eglQueryString(EGLDisplay dpy, EGLint name);
+	EGLBoolean eglQuerySurface(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint* value);
+	EGLBoolean eglSwapBuffers(EGLDisplay dpy, EGLSurface surface);
+	EGLBoolean eglTerminate(EGLDisplay dpy);
+	EGLBoolean eglWaitGL();
+	EGLBoolean eglWaitNative(EGLint engine);
+	EGLBoolean eglBindTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer);
+	EGLBoolean eglReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer);
+	EGLBoolean eglSurfaceAttrib(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value);
+	EGLBoolean eglSwapInterval(EGLDisplay dpy, EGLint interval);
+	EGLBoolean eglBindAPI(EGLenum api);
+	EGLenum eglQueryAPI();
+	EGLSurface eglCreatePbufferFromClientBuffer(EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint* attrib_list);
+	EGLBoolean eglReleaseThread();
+	EGLBoolean eglWaitClient();
+	EGLContext eglGetCurrentContext();
+	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);
+	EGLImageKHR eglCreateImageKHR(EGLDisplay dpy, EGLContext context, EGLenum target, EGLClientBuffer buffer, const EGLint* attrib_list);
+	EGLBoolean eglDestroyImageKHR(EGLDisplay dpy, EGLImageKHR image);
+};
+
+#ifndef GET_CONTEXT
+static egl_wrapper_context_t::CONTEXT_ACCESSOR_TYPE *getCurrentContext = NULL;
+void egl_wrapper_context_t::setContextAccessor(CONTEXT_ACCESSOR_TYPE *f) { getCurrentContext = f; }
+#define GET_CONTEXT egl_wrapper_context_t * ctx = getCurrentContext()
+#endif
+
+EGLBoolean eglChooseConfig(EGLDisplay dpy, const EGLint* attrib_list, EGLConfig* configs, EGLint config_size, EGLint* num_config)
+{
+	GET_CONTEXT;
+	return ctx->eglChooseConfig( dpy, attrib_list, configs, config_size, num_config);
+}
+
+EGLBoolean eglCopyBuffers(EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target)
+{
+	GET_CONTEXT;
+	return ctx->eglCopyBuffers( dpy, surface, target);
+}
+
+EGLContext eglCreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint* attrib_list)
+{
+	GET_CONTEXT;
+	return ctx->eglCreateContext( dpy, config, share_context, attrib_list);
+}
+
+EGLSurface eglCreatePbufferSurface(EGLDisplay dpy, EGLConfig config, const EGLint* attrib_list)
+{
+	GET_CONTEXT;
+	return ctx->eglCreatePbufferSurface( dpy, config, attrib_list);
+}
+
+EGLSurface eglCreatePixmapSurface(EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint* attrib_list)
+{
+	GET_CONTEXT;
+	return ctx->eglCreatePixmapSurface( dpy, config, pixmap, attrib_list);
+}
+
+EGLSurface eglCreateWindowSurface(EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint* attrib_list)
+{
+	GET_CONTEXT;
+	return ctx->eglCreateWindowSurface( dpy, config, win, attrib_list);
+}
+
+EGLBoolean eglDestroyContext(EGLDisplay dpy, EGLContext context)
+{
+	GET_CONTEXT;
+	return ctx->eglDestroyContext( dpy, context);
+}
+
+EGLBoolean eglDestroySurface(EGLDisplay dpy, EGLSurface surface)
+{
+	GET_CONTEXT;
+	return ctx->eglDestroySurface( dpy, surface);
+}
+
+EGLBoolean eglGetConfigAttrib(EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint* value)
+{
+	GET_CONTEXT;
+	return ctx->eglGetConfigAttrib( dpy, config, attribute, value);
+}
+
+EGLBoolean eglGetConfigs(EGLDisplay dpy, EGLConfig* configs, EGLint config_size, EGLint* num_config)
+{
+	GET_CONTEXT;
+	return ctx->eglGetConfigs( dpy, configs, config_size, num_config);
+}
+
+EGLDisplay eglGetCurrentDisplay()
+{
+	GET_CONTEXT;
+	return ctx->eglGetCurrentDisplay();
+}
+
+EGLSurface eglGetCurrentSurface(EGLint readdraw)
+{
+	GET_CONTEXT;
+	return ctx->eglGetCurrentSurface( readdraw);
+}
+
+EGLDisplay eglGetDisplay(EGLNativeDisplayType display_id)
+{
+	GET_CONTEXT;
+	return ctx->eglGetDisplay( display_id);
+}
+
+EGLint eglGetError()
+{
+	GET_CONTEXT;
+	return ctx->eglGetError();
+}
+
+__eglMustCastToProperFunctionPointerType eglGetProcAddress(const char* procname)
+{
+	GET_CONTEXT;
+	return ctx->eglGetProcAddress( procname);
+}
+
+EGLBoolean eglInitialize(EGLDisplay dpy, EGLint* major, EGLint* minor)
+{
+	GET_CONTEXT;
+	return ctx->eglInitialize( dpy, major, minor);
+}
+
+EGLBoolean eglMakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext context)
+{
+	GET_CONTEXT;
+	return ctx->eglMakeCurrent( dpy, draw, read, context);
+}
+
+EGLBoolean eglQueryContext(EGLDisplay dpy, EGLContext context, EGLint attribute, EGLint* value)
+{
+	GET_CONTEXT;
+	return ctx->eglQueryContext( dpy, context, attribute, value);
+}
+
+EGLconstcharptr eglQueryString(EGLDisplay dpy, EGLint name)
+{
+	GET_CONTEXT;
+	return ctx->eglQueryString( dpy, name);
+}
+
+EGLBoolean eglQuerySurface(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint* value)
+{
+	GET_CONTEXT;
+	return ctx->eglQuerySurface( dpy, surface, attribute, value);
+}
+
+EGLBoolean eglSwapBuffers(EGLDisplay dpy, EGLSurface surface)
+{
+	GET_CONTEXT;
+	return ctx->eglSwapBuffers( dpy, surface);
+}
+
+EGLBoolean eglTerminate(EGLDisplay dpy)
+{
+	GET_CONTEXT;
+	return ctx->eglTerminate( dpy);
+}
+
+EGLBoolean eglWaitGL()
+{
+	GET_CONTEXT;
+	return ctx->eglWaitGL();
+}
+
+EGLBoolean eglWaitNative(EGLint engine)
+{
+	GET_CONTEXT;
+	return ctx->eglWaitNative( engine);
+}
+
+EGLBoolean eglBindTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer)
+{
+	GET_CONTEXT;
+	return ctx->eglBindTexImage( dpy, surface, buffer);
+}
+
+EGLBoolean eglReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer)
+{
+	GET_CONTEXT;
+	return ctx->eglReleaseTexImage( dpy, surface, buffer);
+}
+
+EGLBoolean eglSurfaceAttrib(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value)
+{
+	GET_CONTEXT;
+	return ctx->eglSurfaceAttrib( dpy, surface, attribute, value);
+}
+
+EGLBoolean eglSwapInterval(EGLDisplay dpy, EGLint interval)
+{
+	GET_CONTEXT;
+	return ctx->eglSwapInterval( dpy, interval);
+}
+
+EGLBoolean eglBindAPI(EGLenum api)
+{
+	GET_CONTEXT;
+	return ctx->eglBindAPI( api);
+}
+
+EGLenum eglQueryAPI()
+{
+	GET_CONTEXT;
+	return ctx->eglQueryAPI();
+}
+
+EGLSurface eglCreatePbufferFromClientBuffer(EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint* attrib_list)
+{
+	GET_CONTEXT;
+	return ctx->eglCreatePbufferFromClientBuffer( dpy, buftype, buffer, config, attrib_list);
+}
+
+EGLBoolean eglReleaseThread()
+{
+	GET_CONTEXT;
+	return ctx->eglReleaseThread();
+}
+
+EGLBoolean eglWaitClient()
+{
+	GET_CONTEXT;
+	return ctx->eglWaitClient();
+}
+
+EGLContext eglGetCurrentContext()
+{
+	GET_CONTEXT;
+	return ctx->eglGetCurrentContext();
+}
+
+EGLSyncKHR eglCreateSyncKHR(EGLDisplay dpy, EGLenum type, const EGLint* attrib_list)
+{
+	GET_CONTEXT;
+	return ctx->eglCreateSyncKHR( dpy, type, attrib_list);
+}
+
+EGLBoolean eglDestroySyncKHR(EGLDisplay dpy, EGLSyncKHR sync)
+{
+	GET_CONTEXT;
+	return ctx->eglDestroySyncKHR( dpy, sync);
+}
+
+EGLint eglClientWaitSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout)
+{
+	GET_CONTEXT;
+	return ctx->eglClientWaitSyncKHR( dpy, sync, flags, timeout);
+}
+
+EGLBoolean eglGetSyncAttribKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint* value)
+{
+	GET_CONTEXT;
+	return ctx->eglGetSyncAttribKHR( dpy, sync, attribute, value);
+}
+
+EGLImageKHR eglCreateImageKHR(EGLDisplay dpy, EGLContext context, EGLenum target, EGLClientBuffer buffer, const EGLint* attrib_list)
+{
+	GET_CONTEXT;
+	return ctx->eglCreateImageKHR( dpy, context, target, buffer, attrib_list);
+}
+
+EGLBoolean eglDestroyImageKHR(EGLDisplay dpy, EGLImageKHR image)
+{
+	GET_CONTEXT;
+	return ctx->eglDestroyImageKHR( dpy, image);
+}
+
diff --git a/guest/libs/eglwrapper/egl_wrapper_proc.h b/guest/libs/eglwrapper/egl_wrapper_proc.h
new file mode 100644
index 0000000..d79a6eb
--- /dev/null
+++ b/guest/libs/eglwrapper/egl_wrapper_proc.h
@@ -0,0 +1,54 @@
+// Generated Code - DO NOT EDIT !!
+// generated by 'emugen'
+#ifndef __egl_wrapper_proc_t_h
+#define __egl_wrapper_proc_t_h
+
+
+
+#include "egl_types.h"
+#ifndef egl_APIENTRY
+#define egl_APIENTRY 
+#endif
+typedef EGLBoolean (egl_APIENTRY *eglChooseConfig_wrapper_proc_t) (EGLDisplay, const EGLint*, EGLConfig*, EGLint, EGLint*);
+typedef EGLBoolean (egl_APIENTRY *eglCopyBuffers_wrapper_proc_t) (EGLDisplay, EGLSurface, EGLNativePixmapType);
+typedef EGLContext (egl_APIENTRY *eglCreateContext_wrapper_proc_t) (EGLDisplay, EGLConfig, EGLContext, const EGLint*);
+typedef EGLSurface (egl_APIENTRY *eglCreatePbufferSurface_wrapper_proc_t) (EGLDisplay, EGLConfig, const EGLint*);
+typedef EGLSurface (egl_APIENTRY *eglCreatePixmapSurface_wrapper_proc_t) (EGLDisplay, EGLConfig, EGLNativePixmapType, const EGLint*);
+typedef EGLSurface (egl_APIENTRY *eglCreateWindowSurface_wrapper_proc_t) (EGLDisplay, EGLConfig, EGLNativeWindowType, const EGLint*);
+typedef EGLBoolean (egl_APIENTRY *eglDestroyContext_wrapper_proc_t) (EGLDisplay, EGLContext);
+typedef EGLBoolean (egl_APIENTRY *eglDestroySurface_wrapper_proc_t) (EGLDisplay, EGLSurface);
+typedef EGLBoolean (egl_APIENTRY *eglGetConfigAttrib_wrapper_proc_t) (EGLDisplay, EGLConfig, EGLint, EGLint*);
+typedef EGLBoolean (egl_APIENTRY *eglGetConfigs_wrapper_proc_t) (EGLDisplay, EGLConfig*, EGLint, EGLint*);
+typedef EGLDisplay (egl_APIENTRY *eglGetCurrentDisplay_wrapper_proc_t) ();
+typedef EGLSurface (egl_APIENTRY *eglGetCurrentSurface_wrapper_proc_t) (EGLint);
+typedef EGLDisplay (egl_APIENTRY *eglGetDisplay_wrapper_proc_t) (EGLNativeDisplayType);
+typedef EGLint (egl_APIENTRY *eglGetError_wrapper_proc_t) ();
+typedef __eglMustCastToProperFunctionPointerType (egl_APIENTRY *eglGetProcAddress_wrapper_proc_t) (const char*);
+typedef EGLBoolean (egl_APIENTRY *eglInitialize_wrapper_proc_t) (EGLDisplay, EGLint*, EGLint*);
+typedef EGLBoolean (egl_APIENTRY *eglMakeCurrent_wrapper_proc_t) (EGLDisplay, EGLSurface, EGLSurface, EGLContext);
+typedef EGLBoolean (egl_APIENTRY *eglQueryContext_wrapper_proc_t) (EGLDisplay, EGLContext, EGLint, EGLint*);
+typedef EGLconstcharptr (egl_APIENTRY *eglQueryString_wrapper_proc_t) (EGLDisplay, EGLint);
+typedef EGLBoolean (egl_APIENTRY *eglQuerySurface_wrapper_proc_t) (EGLDisplay, EGLSurface, EGLint, EGLint*);
+typedef EGLBoolean (egl_APIENTRY *eglSwapBuffers_wrapper_proc_t) (EGLDisplay, EGLSurface);
+typedef EGLBoolean (egl_APIENTRY *eglTerminate_wrapper_proc_t) (EGLDisplay);
+typedef EGLBoolean (egl_APIENTRY *eglWaitGL_wrapper_proc_t) ();
+typedef EGLBoolean (egl_APIENTRY *eglWaitNative_wrapper_proc_t) (EGLint);
+typedef EGLBoolean (egl_APIENTRY *eglBindTexImage_wrapper_proc_t) (EGLDisplay, EGLSurface, EGLint);
+typedef EGLBoolean (egl_APIENTRY *eglReleaseTexImage_wrapper_proc_t) (EGLDisplay, EGLSurface, EGLint);
+typedef EGLBoolean (egl_APIENTRY *eglSurfaceAttrib_wrapper_proc_t) (EGLDisplay, EGLSurface, EGLint, EGLint);
+typedef EGLBoolean (egl_APIENTRY *eglSwapInterval_wrapper_proc_t) (EGLDisplay, EGLint);
+typedef EGLBoolean (egl_APIENTRY *eglBindAPI_wrapper_proc_t) (EGLenum);
+typedef EGLenum (egl_APIENTRY *eglQueryAPI_wrapper_proc_t) ();
+typedef EGLSurface (egl_APIENTRY *eglCreatePbufferFromClientBuffer_wrapper_proc_t) (EGLDisplay, EGLenum, EGLClientBuffer, EGLConfig, const EGLint*);
+typedef EGLBoolean (egl_APIENTRY *eglReleaseThread_wrapper_proc_t) ();
+typedef EGLBoolean (egl_APIENTRY *eglWaitClient_wrapper_proc_t) ();
+typedef EGLContext (egl_APIENTRY *eglGetCurrentContext_wrapper_proc_t) ();
+typedef EGLSyncKHR (egl_APIENTRY *eglCreateSyncKHR_wrapper_proc_t) (EGLDisplay, EGLenum, const EGLint*);
+typedef EGLBoolean (egl_APIENTRY *eglDestroySyncKHR_wrapper_proc_t) (EGLDisplay, EGLSyncKHR);
+typedef EGLint (egl_APIENTRY *eglClientWaitSyncKHR_wrapper_proc_t) (EGLDisplay, EGLSyncKHR, EGLint, EGLTimeKHR);
+typedef EGLBoolean (egl_APIENTRY *eglGetSyncAttribKHR_wrapper_proc_t) (EGLDisplay, EGLSyncKHR, EGLint, EGLint*);
+typedef EGLImageKHR (egl_APIENTRY *eglCreateImageKHR_wrapper_proc_t) (EGLDisplay, EGLContext, EGLenum, EGLClientBuffer, const EGLint*);
+typedef EGLBoolean (egl_APIENTRY *eglDestroyImageKHR_wrapper_proc_t) (EGLDisplay, EGLImageKHR);
+
+
+#endif
diff --git a/guest/libs/eglwrapper/gles1.attrib b/guest/libs/eglwrapper/gles1.attrib
new file mode 100644
index 0000000..14b257c
--- /dev/null
+++ b/guest/libs/eglwrapper/gles1.attrib
@@ -0,0 +1 @@
+GLOBAL
diff --git a/guest/libs/eglwrapper/gles1.cpp b/guest/libs/eglwrapper/gles1.cpp
new file mode 100644
index 0000000..ca9df13
--- /dev/null
+++ b/guest/libs/eglwrapper/gles1.cpp
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "gles1_wrapper_context.h"
+#undef GET_CONTEXT
+
+#include <dlfcn.h>
+
+gles1_wrapper_context_t* (*getGLES1Context)(void) = NULL;
+
+static gles1_wrapper_context_t g_gles1_wrapper_context;
+
+static gles1_wrapper_context_t *gles1(void) {
+	return &g_gles1_wrapper_context;
+}
+
+void gles1_wrapper_context_t::setContextAccessor(gles1_wrapper_context_t* (*f)(void)) {
+	getGLES1Context = f;
+}
+
+std::mutex g_context_mutex;
+
+static void *getProc(const char *name, void *userData) {
+	return dlsym(userData, name);
+}
+
+__attribute__((constructor)) void setup() {
+	void *gles1_handle = dlopen("/system/vendor/lib/egl/libGLESv1_CM_swiftshader.so", RTLD_NOW);
+	g_gles1_wrapper_context.initDispatchByName(getProc, gles1_handle);
+	g_gles1_wrapper_context.setContextAccessor(gles1);
+}
diff --git a/guest/libs/eglwrapper/gles1.in b/guest/libs/eglwrapper/gles1.in
new file mode 100644
index 0000000..74d5454
--- /dev/null
+++ b/guest/libs/eglwrapper/gles1.in
@@ -0,0 +1,298 @@
+GL_ENTRY(void, glAlphaFunc, GLenum func, GLclampf ref)
+GL_ENTRY(void, glClearColor, GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
+GL_ENTRY(void, glClearDepthf, GLclampf depth)
+GL_ENTRY(void, glClipPlanef, GLenum plane, const GLfloat *equation)
+GL_ENTRY(void, glColor4f, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+GL_ENTRY(void, glDepthRangef, GLclampf zNear, GLclampf zFar)
+GL_ENTRY(void, glFogf, GLenum pname, GLfloat param)
+GL_ENTRY(void, glFogfv, GLenum pname, const GLfloat *params)
+GL_ENTRY(void, glFrustumf, GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)
+GL_ENTRY(void, glGetClipPlanef, GLenum pname, GLfloat* eqn)
+GL_ENTRY(void, glGetFloatv, GLenum pname, GLfloat *params)
+GL_ENTRY(void, glGetLightfv, GLenum light, GLenum pname, GLfloat *params)
+GL_ENTRY(void, glGetMaterialfv, GLenum face, GLenum pname, GLfloat *params)
+GL_ENTRY(void, glGetTexEnvfv, GLenum env, GLenum pname, GLfloat *params)
+GL_ENTRY(void, glGetTexParameterfv, GLenum target, GLenum pname, GLfloat *params)
+GL_ENTRY(void, glLightModelf, GLenum pname, GLfloat param)
+GL_ENTRY(void, glLightModelfv, GLenum pname, const GLfloat *params)
+GL_ENTRY(void, glLightf, GLenum light, GLenum pname, GLfloat param)
+GL_ENTRY(void, glLightfv, GLenum light, GLenum pname, const GLfloat *params)
+GL_ENTRY(void, glLineWidth, GLfloat width)
+GL_ENTRY(void, glLoadMatrixf, const GLfloat *m)
+GL_ENTRY(void, glMaterialf, GLenum face, GLenum pname, GLfloat param)
+GL_ENTRY(void, glMaterialfv, GLenum face, GLenum pname, const GLfloat *params)
+GL_ENTRY(void, glMultMatrixf, const GLfloat *m)
+GL_ENTRY(void, glMultiTexCoord4f, GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q)
+GL_ENTRY(void, glNormal3f, GLfloat nx, GLfloat ny, GLfloat nz)
+GL_ENTRY(void, glOrthof, GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)
+GL_ENTRY(void, glPointParameterf, GLenum pname, GLfloat param)
+GL_ENTRY(void, glPointParameterfv, GLenum pname, const GLfloat *params)
+GL_ENTRY(void, glPointSize, GLfloat size)
+GL_ENTRY(void, glPolygonOffset, GLfloat factor, GLfloat units)
+GL_ENTRY(void, glRotatef, GLfloat angle, GLfloat x, GLfloat y, GLfloat z)
+GL_ENTRY(void, glScalef, GLfloat x, GLfloat y, GLfloat z)
+GL_ENTRY(void, glTexEnvf, GLenum target, GLenum pname, GLfloat param)
+GL_ENTRY(void, glTexEnvfv, GLenum target, GLenum pname, const GLfloat *params)
+GL_ENTRY(void, glTexParameterf, GLenum target, GLenum pname, GLfloat param)
+GL_ENTRY(void, glTexParameterfv, GLenum target, GLenum pname, const GLfloat *params)
+GL_ENTRY(void, glTranslatef, GLfloat x, GLfloat y, GLfloat z)
+GL_ENTRY(void, glActiveTexture, GLenum texture)
+GL_ENTRY(void, glAlphaFuncx, GLenum func, GLclampx ref)
+GL_ENTRY(void, glBindBuffer, GLenum target, GLuint buffer)
+GL_ENTRY(void, glBindTexture, GLenum target, GLuint texture)
+GL_ENTRY(void, glBlendFunc, GLenum sfactor, GLenum dfactor)
+GL_ENTRY(void, glBufferData, GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage)
+GL_ENTRY(void, glBufferSubData, GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data)
+GL_ENTRY(void, glClear, GLbitfield mask)
+GL_ENTRY(void, glClearColorx, GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha)
+GL_ENTRY(void, glClearDepthx, GLclampx depth)
+GL_ENTRY(void, glClearStencil, GLint s)
+GL_ENTRY(void, glClientActiveTexture, GLenum texture)
+GL_ENTRY(void, glColor4ub, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha)
+GL_ENTRY(void, glColor4x, GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha)
+GL_ENTRY(void, glColorMask, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
+GL_ENTRY(void, glColorPointer, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)
+GL_ENTRY(void, glCompressedTexImage2D, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data)
+GL_ENTRY(void, glCompressedTexSubImage2D, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data)
+GL_ENTRY(void, glCopyTexImage2D, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
+GL_ENTRY(void, glCopyTexSubImage2D, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+GL_ENTRY(void, glCullFace, GLenum mode)
+GL_ENTRY(void, glDeleteBuffers, GLsizei n, const GLuint *buffers)
+GL_ENTRY(void, glDeleteTextures, GLsizei n, const GLuint *textures)
+GL_ENTRY(void, glDepthFunc, GLenum func)
+GL_ENTRY(void, glDepthMask, GLboolean flag)
+GL_ENTRY(void, glDepthRangex, GLclampx zNear, GLclampx zFar)
+GL_ENTRY(void, glDisable, GLenum cap)
+GL_ENTRY(void, glDisableClientState, GLenum array)
+GL_ENTRY(void, glDrawArrays, GLenum mode, GLint first, GLsizei count)
+GL_ENTRY(void, glDrawElements, GLenum mode, GLsizei count, GLenum type, const GLvoid *indices)
+GL_ENTRY(void, glEnable, GLenum cap)
+GL_ENTRY(void, glEnableClientState, GLenum array)
+GL_ENTRY(void, glFinish, void)
+GL_ENTRY(void, glFlush, void)
+GL_ENTRY(void, glFogx, GLenum pname, GLfixed param)
+GL_ENTRY(void, glFogxv, GLenum pname, const GLfixed *params)
+GL_ENTRY(void, glFrontFace, GLenum mode)
+GL_ENTRY(void, glFrustumx, GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar)
+GL_ENTRY(void, glGetBooleanv, GLenum pname, GLboolean *params)
+GL_ENTRY(void, glGetBufferParameteriv, GLenum target, GLenum pname, GLint *params)
+GL_ENTRY(void, glClipPlanex, GLenum pname, const GLfixed * eqn)
+GL_ENTRY(void, glGenBuffers, GLsizei n, GLuint *buffers)
+GL_ENTRY(void, glGenTextures, GLsizei n, GLuint *textures)
+GL_ENTRY(GLenum, glGetError, void)
+GL_ENTRY(void, glGetFixedv, GLenum pname, GLfixed *params)
+GL_ENTRY(void, glGetIntegerv, GLenum pname, GLint *params)
+GL_ENTRY(void, glGetLightxv, GLenum light, GLenum pname, GLfixed *params)
+GL_ENTRY(void, glGetMaterialxv, GLenum face, GLenum pname, GLfixed *params)
+GL_ENTRY(void, glGetPointerv, GLenum pname, GLvoid **params)
+GL_ENTRY(const GLubyte *, glGetString, GLenum name)
+GL_ENTRY(void, glGetTexEnviv, GLenum env, GLenum pname, GLint *params)
+GL_ENTRY(void, glGetTexEnvxv, GLenum env, GLenum pname, GLfixed *params)
+GL_ENTRY(void, glGetTexParameteriv, GLenum target, GLenum pname, GLint *params)
+GL_ENTRY(void, glGetTexParameterxv, GLenum target, GLenum pname, GLfixed *params)
+GL_ENTRY(void, glHint, GLenum target, GLenum mode)
+GL_ENTRY(GLboolean, glIsBuffer, GLuint buffer)
+GL_ENTRY(GLboolean, glIsEnabled, GLenum cap)
+GL_ENTRY(GLboolean, glIsTexture, GLuint texture)
+GL_ENTRY(void, glLightModelx, GLenum pname, GLfixed param)
+GL_ENTRY(void, glLightModelxv, GLenum pname, const GLfixed *params)
+GL_ENTRY(void, glLightx, GLenum light, GLenum pname, GLfixed param)
+GL_ENTRY(void, glLightxv, GLenum light, GLenum pname, const GLfixed *params)
+GL_ENTRY(void, glLineWidthx, GLfixed width)
+GL_ENTRY(void, glLoadIdentity, void)
+GL_ENTRY(void, glLoadMatrixx, const GLfixed *m)
+GL_ENTRY(void, glLogicOp, GLenum opcode)
+GL_ENTRY(void, glMaterialx, GLenum face, GLenum pname, GLfixed param)
+GL_ENTRY(void, glMaterialxv, GLenum face, GLenum pname, const GLfixed *params)
+GL_ENTRY(void, glMatrixMode, GLenum mode)
+GL_ENTRY(void, glMultMatrixx, const GLfixed *m)
+GL_ENTRY(void, glMultiTexCoord4x, GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q)
+GL_ENTRY(void, glNormal3x, GLfixed nx, GLfixed ny, GLfixed nz)
+GL_ENTRY(void, glNormalPointer, GLenum type, GLsizei stride, const GLvoid *pointer)
+GL_ENTRY(void, glOrthox, GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar)
+GL_ENTRY(void, glPixelStorei, GLenum pname, GLint param)
+GL_ENTRY(void, glPointParameterx, GLenum pname, GLfixed param)
+GL_ENTRY(void, glPointParameterxv, GLenum pname, const GLfixed *params)
+GL_ENTRY(void, glPointSizex, GLfixed size)
+GL_ENTRY(void, glPolygonOffsetx, GLfixed factor, GLfixed units)
+GL_ENTRY(void, glPopMatrix, void)
+GL_ENTRY(void, glPushMatrix, void)
+GL_ENTRY(void, glReadPixels, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels)
+GL_ENTRY(void, glRotatex, GLfixed angle, GLfixed x, GLfixed y, GLfixed z)
+GL_ENTRY(void, glSampleCoverage, GLclampf value, GLboolean invert)
+GL_ENTRY(void, glSampleCoveragex, GLclampx value, GLboolean invert)
+GL_ENTRY(void, glScalex, GLfixed x, GLfixed y, GLfixed z)
+GL_ENTRY(void, glScissor, GLint x, GLint y, GLsizei width, GLsizei height)
+GL_ENTRY(void, glShadeModel, GLenum mode)
+GL_ENTRY(void, glStencilFunc, GLenum func, GLint ref, GLuint mask)
+GL_ENTRY(void, glStencilMask, GLuint mask)
+GL_ENTRY(void, glStencilOp, GLenum fail, GLenum zfail, GLenum zpass)
+GL_ENTRY(void, glTexCoordPointer, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)
+GL_ENTRY(void, glTexEnvi, GLenum target, GLenum pname, GLint param)
+GL_ENTRY(void, glTexEnvx, GLenum target, GLenum pname, GLfixed param)
+GL_ENTRY(void, glTexEnviv, GLenum target, GLenum pname, const GLint *params)
+GL_ENTRY(void, glTexEnvxv, GLenum target, GLenum pname, const GLfixed *params)
+GL_ENTRY(void, glTexImage2D, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels)
+GL_ENTRY(void, glTexParameteri, GLenum target, GLenum pname, GLint param)
+GL_ENTRY(void, glTexParameterx, GLenum target, GLenum pname, GLfixed param)
+GL_ENTRY(void, glTexParameteriv, GLenum target, GLenum pname, const GLint *params)
+GL_ENTRY(void, glTexParameterxv, GLenum target, GLenum pname, const GLfixed *params)
+GL_ENTRY(void, glTexSubImage2D, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels)
+GL_ENTRY(void, glTranslatex, GLfixed x, GLfixed y, GLfixed z)
+GL_ENTRY(void, glVertexPointer, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)
+GL_ENTRY(void, glViewport, GLint x, GLint y, GLsizei width, GLsizei height)
+GL_ENTRY(void, glPointSizePointerOES, GLenum type, GLsizei stride, const GLvoid *pointer)
+
+GL_ENTRY(void, glVertexPointerOffset, GLint size, GLenum type, GLsizei stride,  GLuint offset)
+GL_ENTRY(void, glColorPointerOffset, GLint size, GLenum type, GLsizei stride,  GLuint offset)
+GL_ENTRY(void, glNormalPointerOffset, GLenum type, GLsizei stride,  GLuint offset)
+GL_ENTRY(void, glPointSizePointerOffset, GLenum type, GLsizei stride,  GLuint offset)
+GL_ENTRY(void, glTexCoordPointerOffset, GLint size, GLenum type, GLsizei stride,  GLuint offset)
+GL_ENTRY(void, glWeightPointerOffset, GLint size, GLenum type, GLsizei stride,  GLuint offset)
+GL_ENTRY(void, glMatrixIndexPointerOffset, GLint size, GLenum type, GLsizei stride,  GLuint offset)
+
+GL_ENTRY(void, glVertexPointerData, GLint size, GLenum type, GLsizei stride,  void * data, GLuint datalen)
+GL_ENTRY(void, glColorPointerData, GLint size, GLenum type, GLsizei stride,  void * data, GLuint datalen)
+GL_ENTRY(void, glNormalPointerData, GLenum type, GLsizei stride,  void * data, GLuint datalen)
+GL_ENTRY(void, glTexCoordPointerData, GLint unit, GLint size, GLenum type, GLsizei stride,  void * data, GLuint datalen)
+GL_ENTRY(void, glPointSizePointerData, GLenum type, GLsizei stride,  void * data, GLuint datalen)
+GL_ENTRY(void, glWeightPointerData, GLint size, GLenum type, GLsizei stride,  void * data, GLuint datalen)
+GL_ENTRY(void, glMatrixIndexPointerData, GLint size, GLenum type, GLsizei stride,  void * data, GLuint datalen)
+
+GL_ENTRY(void, glDrawElementsOffset, GLenum mode, GLsizei count, GLenum type, GLuint offset)
+GL_ENTRY(void, glDrawElementsData, GLenum mode, GLsizei count, GLenum type, void *data, GLuint datalen)
+GL_ENTRY(void, glGetCompressedTextureFormats, int count, GLint *formats);
+
+GL_ENTRY(int, glFinishRoundTrip, void)
+
+#opengl extensions
+
+GL_ENTRY(void, glBlendEquationSeparateOES, GLenum modeRGB, GLenum modeAlpha)
+GL_ENTRY(void, glBlendFuncSeparateOES, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
+GL_ENTRY(void, glBlendEquationOES, GLenum mode)
+GL_ENTRY(void, glDrawTexsOES, GLshort x, GLshort y, GLshort z, GLshort width, GLshort height)
+GL_ENTRY(void, glDrawTexiOES, GLint x, GLint y, GLint z, GLint width, GLint height)
+GL_ENTRY(void, glDrawTexxOES, GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height)
+GL_ENTRY(void, glDrawTexsvOES, const GLshort *coords)
+GL_ENTRY(void, glDrawTexivOES, const GLint *coords)
+GL_ENTRY(void, glDrawTexxvOES, const GLfixed *coords)
+GL_ENTRY(void, glDrawTexfOES, GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height)
+GL_ENTRY(void, glDrawTexfvOES, const GLfloat *coords)
+GL_ENTRY(void, glEGLImageTargetTexture2DOES, GLenum target, GLeglImageOES image)
+GL_ENTRY(void, glEGLImageTargetRenderbufferStorageOES, GLenum target, GLeglImageOES image)
+GL_ENTRY(void, glAlphaFuncxOES, GLenum func, GLclampx ref)
+GL_ENTRY(void, glClearColorxOES, GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha)
+GL_ENTRY(void, glClearDepthxOES, GLclampx depth)
+GL_ENTRY(void, glClipPlanexOES, GLenum plane, const GLfixed * equation)
+GL_ENTRY(void, glClipPlanexIMG, GLenum plane, const GLfixed * equation)
+GL_ENTRY(void, glColor4xOES, GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha)
+GL_ENTRY(void, glDepthRangexOES, GLclampx zNear, GLclampx zFar)
+GL_ENTRY(void, glFogxOES, GLenum pname, GLfixed param)
+GL_ENTRY(void, glFogxvOES, GLenum pname, const GLfixed *params)
+GL_ENTRY(void, glFrustumxOES, GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar)
+GL_ENTRY(void, glGetClipPlanexOES, GLenum pname, GLfixed* eqn)
+GL_ENTRY(void, glGetClipPlanex, GLenum pname, GLfixed* eqn)
+GL_ENTRY(void, glGetFixedvOES, GLenum pname, GLfixed *params)
+GL_ENTRY(void, glGetLightxvOES, GLenum light, GLenum pname, GLfixed *params)
+GL_ENTRY(void, glGetMaterialxvOES, GLenum face, GLenum pname, GLfixed *params)
+GL_ENTRY(void, glGetTexEnvxvOES, GLenum env, GLenum pname, GLfixed *params)
+GL_ENTRY(void, glGetTexParameterxvOES, GLenum target, GLenum pname, GLfixed *params)
+GL_ENTRY(void, glLightModelxOES, GLenum pname, GLfixed param)
+GL_ENTRY(void, glLightModelxvOES, GLenum pname, const GLfixed *params)
+GL_ENTRY(void, glLightxOES, GLenum light, GLenum pname, GLfixed param)
+GL_ENTRY(void, glLightxvOES, GLenum light, GLenum pname, const GLfixed *params)
+GL_ENTRY(void, glLineWidthxOES, GLfixed width)
+GL_ENTRY(void, glLoadMatrixxOES, const GLfixed *m)
+GL_ENTRY(void, glMaterialxOES, GLenum face, GLenum pname, GLfixed param)
+GL_ENTRY(void, glMaterialxvOES, GLenum face, GLenum pname, const GLfixed *params)
+GL_ENTRY(void, glMultMatrixxOES, const GLfixed *m)
+GL_ENTRY(void, glMultiTexCoord4xOES, GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q)
+GL_ENTRY(void, glNormal3xOES, GLfixed nx, GLfixed ny, GLfixed nz)
+GL_ENTRY(void, glOrthoxOES, GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar)
+GL_ENTRY(void, glPointParameterxOES, GLenum pname, GLfixed param)
+GL_ENTRY(void, glPointParameterxvOES, GLenum pname, const GLfixed *params)
+GL_ENTRY(void, glPointSizexOES, GLfixed size)
+GL_ENTRY(void, glPolygonOffsetxOES, GLfixed factor, GLfixed units)
+GL_ENTRY(void, glRotatexOES, GLfixed angle, GLfixed x, GLfixed y, GLfixed z)
+GL_ENTRY(void, glSampleCoveragexOES, GLclampx value, GLboolean invert)
+GL_ENTRY(void, glScalexOES, GLfixed x, GLfixed y, GLfixed z)
+GL_ENTRY(void, glTexEnvxOES, GLenum target, GLenum pname, GLfixed param)
+GL_ENTRY(void, glTexEnvxvOES, GLenum target, GLenum pname, const GLfixed *params)
+GL_ENTRY(void, glTexParameterxOES, GLenum target, GLenum pname, GLfixed param)
+GL_ENTRY(void, glTexParameterxvOES, GLenum target, GLenum pname, const GLfixed *params)
+GL_ENTRY(void, glTranslatexOES, GLfixed x, GLfixed y, GLfixed z)
+GL_ENTRY(GLboolean, glIsRenderbufferOES, GLuint renderbuffer)
+GL_ENTRY(void, glBindRenderbufferOES, GLenum target, GLuint renderbuffer)
+GL_ENTRY(void, glDeleteRenderbuffersOES, GLsizei n, const GLuint* renderbuffers)
+GL_ENTRY(void, glGenRenderbuffersOES, GLsizei n, GLuint* renderbuffers)
+GL_ENTRY(void, glRenderbufferStorageOES, GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
+GL_ENTRY(void, glGetRenderbufferParameterivOES, GLenum target, GLenum pname, GLint* params)
+GL_ENTRY(GLboolean, glIsFramebufferOES, GLuint framebuffer)
+GL_ENTRY(void, glBindFramebufferOES, GLenum target, GLuint framebuffer)
+GL_ENTRY(void, glDeleteFramebuffersOES, GLsizei n, const GLuint* framebuffers)
+GL_ENTRY(void, glGenFramebuffersOES, GLsizei n, GLuint* framebuffers)
+GL_ENTRY(GLenum, glCheckFramebufferStatusOES, GLenum target)
+GL_ENTRY(void, glFramebufferRenderbufferOES, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
+GL_ENTRY(void, glFramebufferTexture2DOES, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
+GL_ENTRY(void, glGetFramebufferAttachmentParameterivOES, GLenum target, GLenum attachment, GLenum pname, GLint* params)
+GL_ENTRY(void, glGenerateMipmapOES, GLenum target)
+GL_ENTRY(void*, glMapBufferOES, GLenum target, GLenum access)
+GL_ENTRY(GLboolean, glUnmapBufferOES, GLenum target)
+GL_ENTRY(void, glGetBufferPointervOES, GLenum target, GLenum pname, GLvoid* *params)
+GL_ENTRY(void, glCurrentPaletteMatrixOES, GLuint matrixpaletteindex)
+GL_ENTRY(void, glLoadPaletteFromModelViewMatrixOES, void)
+GL_ENTRY(void, glMatrixIndexPointerOES, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer)
+GL_ENTRY(void, glWeightPointerOES, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer)
+GL_ENTRY(GLbitfield, glQueryMatrixxOES, GLfixed * mantissa, GLint * exponent)
+GL_ENTRY(void, glDepthRangefOES, GLclampf zNear, GLclampf zFar)
+GL_ENTRY(void, glFrustumfOES, GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)
+GL_ENTRY(void, glOrthofOES, GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)
+GL_ENTRY(void, glClipPlanefOES, GLenum plane, const GLfloat *equation)
+GL_ENTRY(void, glClipPlanefIMG, GLenum plane, const GLfloat *equation)
+GL_ENTRY(void, glGetClipPlanefOES, GLenum pname, GLfloat * eqn)
+GL_ENTRY(void, glClearDepthfOES, GLclampf depth)
+GL_ENTRY(void, glTexGenfOES, GLenum coord, GLenum pname, GLfloat param)
+GL_ENTRY(void, glTexGenfvOES, GLenum coord, GLenum pname, const GLfloat *params)
+GL_ENTRY(void, glTexGeniOES, GLenum coord, GLenum pname, GLint param)
+GL_ENTRY(void, glTexGenivOES, GLenum coord, GLenum pname, const GLint *params)
+GL_ENTRY(void, glTexGenxOES, GLenum coord, GLenum pname, GLfixed param)
+GL_ENTRY(void, glTexGenxvOES, GLenum coord, GLenum pname, const GLfixed *params)
+GL_ENTRY(void, glGetTexGenfvOES, GLenum coord, GLenum pname, GLfloat *params)
+GL_ENTRY(void, glGetTexGenivOES, GLenum coord, GLenum pname, GLint *params)
+GL_ENTRY(void, glGetTexGenxvOES, GLenum coord, GLenum pname, GLfixed *params)
+GL_ENTRY(void, glBindVertexArrayOES, GLuint array)
+GL_ENTRY(void, glDeleteVertexArraysOES, GLsizei n, const GLuint *arrays)
+GL_ENTRY(void, glGenVertexArraysOES, GLsizei n, GLuint *arrays)
+GL_ENTRY(GLboolean, glIsVertexArrayOES, GLuint array)
+GL_ENTRY(void, glDiscardFramebufferEXT, GLenum target, GLsizei numAttachments, const GLenum *attachments)
+GL_ENTRY(void, glMultiDrawArraysEXT, GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount)
+GL_ENTRY(void, glMultiDrawElementsEXT, GLenum mode, const GLsizei *count, GLenum type, const GLvoid*const *indices, GLsizei primcount)
+GL_ENTRY(void, glMultiDrawArraysSUN, GLenum mode, GLint *first, GLsizei *count, GLsizei primcount)
+GL_ENTRY(void, glMultiDrawElementsSUN, GLenum mode, const GLsizei *count, GLenum type, const GLvoid **indices, GLsizei primcount)
+GL_ENTRY(void, glRenderbufferStorageMultisampleIMG, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
+GL_ENTRY(void, glFramebufferTexture2DMultisampleIMG, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples)
+GL_ENTRY(void, glDeleteFencesNV, GLsizei n, const GLuint *fences)
+GL_ENTRY(void, glGenFencesNV, GLsizei n, GLuint *fences)
+GL_ENTRY(GLboolean, glIsFenceNV, GLuint fence)
+GL_ENTRY(GLboolean, glTestFenceNV, GLuint fence)
+GL_ENTRY(void, glGetFenceivNV, GLuint fence, GLenum pname, GLint *params)
+GL_ENTRY(void, glFinishFenceNV, GLuint fence)
+GL_ENTRY(void, glSetFenceNV, GLuint fence, GLenum condition)
+GL_ENTRY(void, glGetDriverControlsQCOM, GLint *num, GLsizei size, GLuint *driverControls)
+GL_ENTRY(void, glGetDriverControlStringQCOM, GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString)
+GL_ENTRY(void, glEnableDriverControlQCOM, GLuint driverControl)
+GL_ENTRY(void, glDisableDriverControlQCOM, GLuint driverControl)
+GL_ENTRY(void, glExtGetTexturesQCOM, GLuint *textures, GLint maxTextures, GLint *numTextures)
+GL_ENTRY(void, glExtGetBuffersQCOM, GLuint *buffers, GLint maxBuffers, GLint *numBuffers)
+GL_ENTRY(void, glExtGetRenderbuffersQCOM, GLuint * renderbuffers, GLint maxRenderbuffers, GLint * numRenderbuffers)
+GL_ENTRY(void, glExtGetFramebuffersQCOM, GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers)
+GL_ENTRY(void, glExtGetTexLevelParameterivQCOM, GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params)
+GL_ENTRY(void, glExtTexObjectStateOverrideiQCOM, GLenum target, GLenum pname, GLint param)
+GL_ENTRY(void, glExtGetTexSubImageQCOM, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid *texels)
+GL_ENTRY(void, glExtGetBufferPointervQCOM, GLenum target, GLvoid* *params)
+GL_ENTRY(void, glExtGetShadersQCOM, GLuint *shaders, GLint maxShaders, GLint *numShaders)
+GL_ENTRY(void, glExtGetProgramsQCOM, GLuint *programs, GLint maxPrograms, GLint *numPrograms)
+GL_ENTRY(GLboolean, glExtIsProgramBinaryQCOM, GLuint program)
+GL_ENTRY(void, glExtGetProgramBinarySourceQCOM, GLuint program, GLenum shadertype, GLchar *source, GLint *length)
+GL_ENTRY(void, glStartTilingQCOM, GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask)
+GL_ENTRY(void, glEndTilingQCOM, GLbitfield preserveMask)
diff --git a/guest/libs/eglwrapper/gles1.lds b/guest/libs/eglwrapper/gles1.lds
new file mode 100644
index 0000000..0658207
--- /dev/null
+++ b/guest/libs/eglwrapper/gles1.lds
@@ -0,0 +1,302 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+{
+global:
+	# OpenGL ES 1.1 API
+	glActiveTexture;
+	glAlphaFunc;
+	glAlphaFuncx;
+	glAlphaFuncxOES;
+	glBindBuffer;
+	glBindFramebufferOES;
+	glBindRenderbufferOES;
+	glBindTexture;
+	glBindVertexArrayOES;
+	glBlendEquationOES;
+	glBlendEquationSeparateOES;
+	glBlendFunc;
+	glBlendFuncSeparateOES;
+	glBufferData;
+	glBufferSubData;
+	glCheckFramebufferStatusOES;
+	glClear;
+	glClearColor;
+	glClearColorx;
+	glClearColorxOES;
+	glClearDepthf;
+	glClearDepthfOES;
+	glClearDepthx;
+	glClearDepthxOES;
+	glClearStencil;
+	glClientActiveTexture;
+	glClipPlanef;
+	glClipPlanefIMG;
+	glClipPlanefOES;
+	glClipPlanex;
+	glClipPlanexIMG;
+	glClipPlanexOES;
+	glColor4f;
+	glColor4ub;
+	glColor4x;
+	glColor4xOES;
+	glColorMask;
+	glColorPointer;
+	glCompressedTexImage2D;
+	glCompressedTexSubImage2D;
+	glCopyTexImage2D;
+	glCopyTexSubImage2D;
+	glCullFace;
+	glCurrentPaletteMatrixOES;
+	glDeleteBuffers;
+	glDeleteFencesNV;
+	glDeleteFramebuffersOES;
+	glDeleteRenderbuffersOES;
+	glDeleteTextures;
+	glDeleteVertexArraysOES;
+	glDepthFunc;
+	glDepthMask;
+	glDepthRangef;
+	glDepthRangefOES;
+	glDepthRangex;
+	glDepthRangexOES;
+	glDisable;
+	glDisableClientState;
+	glDisableDriverControlQCOM;
+	glDiscardFramebufferEXT;
+	glDrawArrays;
+	glDrawElements;
+	glDrawTexfOES;
+	glDrawTexfvOES;
+	glDrawTexiOES;
+	glDrawTexivOES;
+	glDrawTexsOES;
+	glDrawTexsvOES;
+	glDrawTexxOES;
+	glDrawTexxvOES;
+	glEGLImageTargetRenderbufferStorageOES;
+	glEGLImageTargetTexture2DOES;
+	glEnable;
+	glEnableClientState;
+	glEnableDriverControlQCOM;
+	glEndTilingQCOM;
+	glExtGetBufferPointervQCOM;
+	glExtGetBuffersQCOM;
+	glExtGetFramebuffersQCOM;
+	glExtGetProgramBinarySourceQCOM;
+	glExtGetProgramsQCOM;
+	glExtGetRenderbuffersQCOM;
+	glExtGetShadersQCOM;
+	glExtGetTexLevelParameterivQCOM;
+	glExtGetTexSubImageQCOM;
+	glExtGetTexturesQCOM;
+	glExtIsProgramBinaryQCOM;
+	glExtTexObjectStateOverrideiQCOM;
+	glFinish;
+	glFinishFenceNV;
+	glFinishRoundTrip;
+	glFlush;
+	glFogf;
+	glFogfv;
+	glFogx;
+	glFogxOES;
+	glFogxv;
+	glFogxvOES;
+	glFramebufferRenderbufferOES;
+	glFramebufferTexture2DMultisampleIMG;
+	glFramebufferTexture2DOES;
+	glFrontFace;
+	glFrustumf;
+	glFrustumfOES;
+	glFrustumx;
+	glFrustumxOES;
+	glGenBuffers;
+	glGenerateMipmapOES;
+	glGenFencesNV;
+	glGenFramebuffersOES;
+	glGenRenderbuffersOES;
+	glGenTextures;
+	glGenVertexArraysOES;
+	glGetBooleanv;
+	glGetBufferParameteriv;
+	glGetBufferPointervOES;
+	glGetClipPlanef;
+	glGetClipPlanefOES;
+	glGetClipPlanex;
+	glGetClipPlanexOES;
+	glGetCompressedTextureFormats;
+	glGetDriverControlsQCOM;
+	glGetDriverControlStringQCOM;
+	glGetError;
+	glGetFenceivNV;
+	glGetFixedv;
+	glGetFixedvOES;
+	glGetFloatv;
+	glGetFramebufferAttachmentParameterivOES;
+	glGetIntegerv;
+	glGetLightfv;
+	glGetLightxv;
+	glGetLightxvOES;
+	glGetMaterialfv;
+	glGetMaterialxv;
+	glGetMaterialxvOES;
+	glGetPointerv;
+	glGetRenderbufferParameterivOES;
+	glGetString;
+	glGetTexEnvfv;
+	glGetTexEnviv;
+	glGetTexEnvxv;
+	glGetTexEnvxvOES;
+	glGetTexGenfvOES;
+	glGetTexGenivOES;
+	glGetTexGenxvOES;
+	glGetTexParameterfv;
+	glGetTexParameteriv;
+	glGetTexParameterxv;
+	glGetTexParameterxvOES;
+	glHint;
+	glIsBuffer;
+	glIsEnabled;
+	glIsFenceNV;
+	glIsFramebufferOES;
+	glIsRenderbufferOES;
+	glIsTexture;
+	glIsVertexArrayOES;
+	glLightf;
+	glLightfv;
+	glLightModelf;
+	glLightModelfv;
+	glLightModelx;
+	glLightModelxOES;
+	glLightModelxv;
+	glLightModelxvOES;
+	glLightx;
+	glLightxOES;
+	glLightxv;
+	glLightxvOES;
+	glLineWidth;
+	glLineWidthx;
+	glLineWidthxOES;
+	glLoadIdentity;
+	glLoadMatrixf;
+	glLoadMatrixx;
+	glLoadMatrixxOES;
+	glLoadPaletteFromModelViewMatrixOES;
+	glLogicOp;
+	glMapBufferOES;
+	glMaterialf;
+	glMaterialfv;
+	glMaterialx;
+	glMaterialxOES;
+	glMaterialxv;
+	glMaterialxvOES;
+	glMatrixIndexPointerOES;
+	glMatrixMode;
+	glMultiDrawArraysEXT;
+	glMultiDrawArraysSUN;
+	glMultiDrawElementsEXT;
+	glMultiDrawElementsSUN;
+	glMultiTexCoord4f;
+	glMultiTexCoord4x;
+	glMultiTexCoord4xOES;
+	glMultMatrixf;
+	glMultMatrixx;
+	glMultMatrixxOES;
+	glNormal3f;
+	glNormal3x;
+	glNormal3xOES;
+	glNormalPointer;
+	glOrthof;
+	glOrthofOES;
+	glOrthox;
+	glOrthoxOES;
+	glPixelStorei;
+	glPointParameterf;
+	glPointParameterfv;
+	glPointParameterx;
+	glPointParameterxOES;
+	glPointParameterxv;
+	glPointParameterxvOES;
+	glPointSize;
+	glPointSizePointerOES;
+	glPointSizex;
+	glPointSizexOES;
+	glPolygonOffset;
+	glPolygonOffsetx;
+	glPolygonOffsetxOES;
+	glPopMatrix;
+	glPushMatrix;
+	glQueryMatrixxOES;
+	glReadPixels;
+	glRenderbufferStorageMultisampleIMG;
+	glRenderbufferStorageOES;
+	glRotatef;
+	glRotatex;
+	glRotatexOES;
+	glSampleCoverage;
+	glSampleCoveragex;
+	glSampleCoveragexOES;
+	glScalef;
+	glScalex;
+	glScalexOES;
+	glScissor;
+	glSetFenceNV;
+	glShadeModel;
+	glStartTilingQCOM;
+	glStencilFunc;
+	glStencilMask;
+	glStencilOp;
+	glTestFenceNV;
+	glTexCoordPointer;
+	glTexEnvf;
+	glTexEnvfv;
+	glTexEnvi;
+	glTexEnviv;
+	glTexEnvx;
+	glTexEnvxOES;
+	glTexEnvxv;
+	glTexEnvxvOES;
+	glTexGenfOES;
+	glTexGenfvOES;
+	glTexGeniOES;
+	glTexGenivOES;
+	glTexGenxOES;
+	glTexGenxvOES;
+	glTexImage2D;
+	glTexParameterf;
+	glTexParameterfv;
+	glTexParameteri;
+	glTexParameteriv;
+	glTexParameterx;
+	glTexParameterxOES;
+	glTexParameterxv;
+	glTexParameterxvOES;
+	glTexSubImage2D;
+	glTranslatef;
+	glTranslatex;
+	glTranslatexOES;
+	glUnmapBufferOES;
+	glVertexPointer;
+	glViewport;
+	glWeightPointerOES;
+
+	# Type-strings and type-infos required by sanitizers
+	_ZTS*;
+	_ZTI*;
+
+local:
+	*;
+};
diff --git a/guest/libs/eglwrapper/gles1.types b/guest/libs/eglwrapper/gles1.types
new file mode 100644
index 0000000..05be29e
--- /dev/null
+++ b/guest/libs/eglwrapper/gles1.types
@@ -0,0 +1,34 @@
+GLbitfield 32 0x%08x
+GLboolean 8 %d
+GLclampf 32 %f
+GLclampx 32 0x%08x
+GLeglImageOES 32 %p
+GLenum 32 0x%08x
+GLfixed 32 0x%08x
+GLfloat 32 %f
+GLint 32 %d
+GLintptr 32 0x%08lx
+GLshort 16 %d
+GLsizei 32 %d
+GLsizeiptr 32 0x%08lx
+GLubyte 8 0x%02x
+GLuint 32 %u
+GLvoid 0 %x
+GLchar 8 %d
+GLenum* 32 0x%08x
+GLboolean* 32 0x%08x
+GLclampf* 32 0x%08x
+GLclampx* 32 0x%08x
+GLeglImageOES* 32 0x%08x
+GLfixed* 32 0x%08x
+GLfloat* 32 0x%08x
+GLint* 32 0x%08x
+GLshort* 32 0x%08x
+GLsizei* 32 0x%08x
+GLubyte* 32 0x%08x
+GLuint* 32 0x%08x
+GLvoid* 32 0x%08x
+GLchar* 32 0x%08x
+GLvoid** 32 0x%08x
+void* 32 0x%08x
+GLvoid*const* 32 0x%08x
diff --git a/guest/libs/eglwrapper/gles1_server_proc.h b/guest/libs/eglwrapper/gles1_server_proc.h
new file mode 100644
index 0000000..6bd3343
--- /dev/null
+++ b/guest/libs/eglwrapper/gles1_server_proc.h
@@ -0,0 +1,6 @@
+#ifndef __gles1_server_proc_t_h
+#define __gles1_server_proc_t_h
+
+#include "gles1_wrapper_proc.h"
+
+#endif
diff --git a/guest/libs/eglwrapper/gles1_types.h b/guest/libs/eglwrapper/gles1_types.h
new file mode 100644
index 0000000..2456f09
--- /dev/null
+++ b/guest/libs/eglwrapper/gles1_types.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __gles1_types_h
+#define __gles1_types_h
+
+#include <GLES/gl.h>
+#include <GLES/glext.h>
+
+#include <mutex>
+
+extern std::mutex g_context_mutex;
+
+struct gles1_wrapper_context_t;
+extern gles1_wrapper_context_t* (*getGLES1Context)(void);
+
+#define GET_CONTEXT \
+	std::lock_guard<std::mutex> lock(g_context_mutex); \
+	gles1_wrapper_context_t *ctx = getGLES1Context()
+
+#endif
diff --git a/guest/libs/eglwrapper/gles1_wrapper_context.cpp b/guest/libs/eglwrapper/gles1_wrapper_context.cpp
new file mode 100644
index 0000000..9ef859c
--- /dev/null
+++ b/guest/libs/eglwrapper/gles1_wrapper_context.cpp
@@ -0,0 +1,306 @@
+// Generated Code - DO NOT EDIT !!
+// generated by 'emugen'
+
+
+#include <string.h>
+#include "gles1_wrapper_context.h"
+
+
+#include <stdio.h>
+
+int gles1_wrapper_context_t::initDispatchByName(void *(*getProc)(const char *, void *userData), void *userData)
+{
+	glAlphaFunc = (glAlphaFunc_wrapper_proc_t) getProc("glAlphaFunc", userData);
+	glClearColor = (glClearColor_wrapper_proc_t) getProc("glClearColor", userData);
+	glClearDepthf = (glClearDepthf_wrapper_proc_t) getProc("glClearDepthf", userData);
+	glClipPlanef = (glClipPlanef_wrapper_proc_t) getProc("glClipPlanef", userData);
+	glColor4f = (glColor4f_wrapper_proc_t) getProc("glColor4f", userData);
+	glDepthRangef = (glDepthRangef_wrapper_proc_t) getProc("glDepthRangef", userData);
+	glFogf = (glFogf_wrapper_proc_t) getProc("glFogf", userData);
+	glFogfv = (glFogfv_wrapper_proc_t) getProc("glFogfv", userData);
+	glFrustumf = (glFrustumf_wrapper_proc_t) getProc("glFrustumf", userData);
+	glGetClipPlanef = (glGetClipPlanef_wrapper_proc_t) getProc("glGetClipPlanef", userData);
+	glGetFloatv = (glGetFloatv_wrapper_proc_t) getProc("glGetFloatv", userData);
+	glGetLightfv = (glGetLightfv_wrapper_proc_t) getProc("glGetLightfv", userData);
+	glGetMaterialfv = (glGetMaterialfv_wrapper_proc_t) getProc("glGetMaterialfv", userData);
+	glGetTexEnvfv = (glGetTexEnvfv_wrapper_proc_t) getProc("glGetTexEnvfv", userData);
+	glGetTexParameterfv = (glGetTexParameterfv_wrapper_proc_t) getProc("glGetTexParameterfv", userData);
+	glLightModelf = (glLightModelf_wrapper_proc_t) getProc("glLightModelf", userData);
+	glLightModelfv = (glLightModelfv_wrapper_proc_t) getProc("glLightModelfv", userData);
+	glLightf = (glLightf_wrapper_proc_t) getProc("glLightf", userData);
+	glLightfv = (glLightfv_wrapper_proc_t) getProc("glLightfv", userData);
+	glLineWidth = (glLineWidth_wrapper_proc_t) getProc("glLineWidth", userData);
+	glLoadMatrixf = (glLoadMatrixf_wrapper_proc_t) getProc("glLoadMatrixf", userData);
+	glMaterialf = (glMaterialf_wrapper_proc_t) getProc("glMaterialf", userData);
+	glMaterialfv = (glMaterialfv_wrapper_proc_t) getProc("glMaterialfv", userData);
+	glMultMatrixf = (glMultMatrixf_wrapper_proc_t) getProc("glMultMatrixf", userData);
+	glMultiTexCoord4f = (glMultiTexCoord4f_wrapper_proc_t) getProc("glMultiTexCoord4f", userData);
+	glNormal3f = (glNormal3f_wrapper_proc_t) getProc("glNormal3f", userData);
+	glOrthof = (glOrthof_wrapper_proc_t) getProc("glOrthof", userData);
+	glPointParameterf = (glPointParameterf_wrapper_proc_t) getProc("glPointParameterf", userData);
+	glPointParameterfv = (glPointParameterfv_wrapper_proc_t) getProc("glPointParameterfv", userData);
+	glPointSize = (glPointSize_wrapper_proc_t) getProc("glPointSize", userData);
+	glPolygonOffset = (glPolygonOffset_wrapper_proc_t) getProc("glPolygonOffset", userData);
+	glRotatef = (glRotatef_wrapper_proc_t) getProc("glRotatef", userData);
+	glScalef = (glScalef_wrapper_proc_t) getProc("glScalef", userData);
+	glTexEnvf = (glTexEnvf_wrapper_proc_t) getProc("glTexEnvf", userData);
+	glTexEnvfv = (glTexEnvfv_wrapper_proc_t) getProc("glTexEnvfv", userData);
+	glTexParameterf = (glTexParameterf_wrapper_proc_t) getProc("glTexParameterf", userData);
+	glTexParameterfv = (glTexParameterfv_wrapper_proc_t) getProc("glTexParameterfv", userData);
+	glTranslatef = (glTranslatef_wrapper_proc_t) getProc("glTranslatef", userData);
+	glActiveTexture = (glActiveTexture_wrapper_proc_t) getProc("glActiveTexture", userData);
+	glAlphaFuncx = (glAlphaFuncx_wrapper_proc_t) getProc("glAlphaFuncx", userData);
+	glBindBuffer = (glBindBuffer_wrapper_proc_t) getProc("glBindBuffer", userData);
+	glBindTexture = (glBindTexture_wrapper_proc_t) getProc("glBindTexture", userData);
+	glBlendFunc = (glBlendFunc_wrapper_proc_t) getProc("glBlendFunc", userData);
+	glBufferData = (glBufferData_wrapper_proc_t) getProc("glBufferData", userData);
+	glBufferSubData = (glBufferSubData_wrapper_proc_t) getProc("glBufferSubData", userData);
+	glClear = (glClear_wrapper_proc_t) getProc("glClear", userData);
+	glClearColorx = (glClearColorx_wrapper_proc_t) getProc("glClearColorx", userData);
+	glClearDepthx = (glClearDepthx_wrapper_proc_t) getProc("glClearDepthx", userData);
+	glClearStencil = (glClearStencil_wrapper_proc_t) getProc("glClearStencil", userData);
+	glClientActiveTexture = (glClientActiveTexture_wrapper_proc_t) getProc("glClientActiveTexture", userData);
+	glColor4ub = (glColor4ub_wrapper_proc_t) getProc("glColor4ub", userData);
+	glColor4x = (glColor4x_wrapper_proc_t) getProc("glColor4x", userData);
+	glColorMask = (glColorMask_wrapper_proc_t) getProc("glColorMask", userData);
+	glColorPointer = (glColorPointer_wrapper_proc_t) getProc("glColorPointer", userData);
+	glCompressedTexImage2D = (glCompressedTexImage2D_wrapper_proc_t) getProc("glCompressedTexImage2D", userData);
+	glCompressedTexSubImage2D = (glCompressedTexSubImage2D_wrapper_proc_t) getProc("glCompressedTexSubImage2D", userData);
+	glCopyTexImage2D = (glCopyTexImage2D_wrapper_proc_t) getProc("glCopyTexImage2D", userData);
+	glCopyTexSubImage2D = (glCopyTexSubImage2D_wrapper_proc_t) getProc("glCopyTexSubImage2D", userData);
+	glCullFace = (glCullFace_wrapper_proc_t) getProc("glCullFace", userData);
+	glDeleteBuffers = (glDeleteBuffers_wrapper_proc_t) getProc("glDeleteBuffers", userData);
+	glDeleteTextures = (glDeleteTextures_wrapper_proc_t) getProc("glDeleteTextures", userData);
+	glDepthFunc = (glDepthFunc_wrapper_proc_t) getProc("glDepthFunc", userData);
+	glDepthMask = (glDepthMask_wrapper_proc_t) getProc("glDepthMask", userData);
+	glDepthRangex = (glDepthRangex_wrapper_proc_t) getProc("glDepthRangex", userData);
+	glDisable = (glDisable_wrapper_proc_t) getProc("glDisable", userData);
+	glDisableClientState = (glDisableClientState_wrapper_proc_t) getProc("glDisableClientState", userData);
+	glDrawArrays = (glDrawArrays_wrapper_proc_t) getProc("glDrawArrays", userData);
+	glDrawElements = (glDrawElements_wrapper_proc_t) getProc("glDrawElements", userData);
+	glEnable = (glEnable_wrapper_proc_t) getProc("glEnable", userData);
+	glEnableClientState = (glEnableClientState_wrapper_proc_t) getProc("glEnableClientState", userData);
+	glFinish = (glFinish_wrapper_proc_t) getProc("glFinish", userData);
+	glFlush = (glFlush_wrapper_proc_t) getProc("glFlush", userData);
+	glFogx = (glFogx_wrapper_proc_t) getProc("glFogx", userData);
+	glFogxv = (glFogxv_wrapper_proc_t) getProc("glFogxv", userData);
+	glFrontFace = (glFrontFace_wrapper_proc_t) getProc("glFrontFace", userData);
+	glFrustumx = (glFrustumx_wrapper_proc_t) getProc("glFrustumx", userData);
+	glGetBooleanv = (glGetBooleanv_wrapper_proc_t) getProc("glGetBooleanv", userData);
+	glGetBufferParameteriv = (glGetBufferParameteriv_wrapper_proc_t) getProc("glGetBufferParameteriv", userData);
+	glClipPlanex = (glClipPlanex_wrapper_proc_t) getProc("glClipPlanex", userData);
+	glGenBuffers = (glGenBuffers_wrapper_proc_t) getProc("glGenBuffers", userData);
+	glGenTextures = (glGenTextures_wrapper_proc_t) getProc("glGenTextures", userData);
+	glGetError = (glGetError_wrapper_proc_t) getProc("glGetError", userData);
+	glGetFixedv = (glGetFixedv_wrapper_proc_t) getProc("glGetFixedv", userData);
+	glGetIntegerv = (glGetIntegerv_wrapper_proc_t) getProc("glGetIntegerv", userData);
+	glGetLightxv = (glGetLightxv_wrapper_proc_t) getProc("glGetLightxv", userData);
+	glGetMaterialxv = (glGetMaterialxv_wrapper_proc_t) getProc("glGetMaterialxv", userData);
+	glGetPointerv = (glGetPointerv_wrapper_proc_t) getProc("glGetPointerv", userData);
+	glGetString = (glGetString_wrapper_proc_t) getProc("glGetString", userData);
+	glGetTexEnviv = (glGetTexEnviv_wrapper_proc_t) getProc("glGetTexEnviv", userData);
+	glGetTexEnvxv = (glGetTexEnvxv_wrapper_proc_t) getProc("glGetTexEnvxv", userData);
+	glGetTexParameteriv = (glGetTexParameteriv_wrapper_proc_t) getProc("glGetTexParameteriv", userData);
+	glGetTexParameterxv = (glGetTexParameterxv_wrapper_proc_t) getProc("glGetTexParameterxv", userData);
+	glHint = (glHint_wrapper_proc_t) getProc("glHint", userData);
+	glIsBuffer = (glIsBuffer_wrapper_proc_t) getProc("glIsBuffer", userData);
+	glIsEnabled = (glIsEnabled_wrapper_proc_t) getProc("glIsEnabled", userData);
+	glIsTexture = (glIsTexture_wrapper_proc_t) getProc("glIsTexture", userData);
+	glLightModelx = (glLightModelx_wrapper_proc_t) getProc("glLightModelx", userData);
+	glLightModelxv = (glLightModelxv_wrapper_proc_t) getProc("glLightModelxv", userData);
+	glLightx = (glLightx_wrapper_proc_t) getProc("glLightx", userData);
+	glLightxv = (glLightxv_wrapper_proc_t) getProc("glLightxv", userData);
+	glLineWidthx = (glLineWidthx_wrapper_proc_t) getProc("glLineWidthx", userData);
+	glLoadIdentity = (glLoadIdentity_wrapper_proc_t) getProc("glLoadIdentity", userData);
+	glLoadMatrixx = (glLoadMatrixx_wrapper_proc_t) getProc("glLoadMatrixx", userData);
+	glLogicOp = (glLogicOp_wrapper_proc_t) getProc("glLogicOp", userData);
+	glMaterialx = (glMaterialx_wrapper_proc_t) getProc("glMaterialx", userData);
+	glMaterialxv = (glMaterialxv_wrapper_proc_t) getProc("glMaterialxv", userData);
+	glMatrixMode = (glMatrixMode_wrapper_proc_t) getProc("glMatrixMode", userData);
+	glMultMatrixx = (glMultMatrixx_wrapper_proc_t) getProc("glMultMatrixx", userData);
+	glMultiTexCoord4x = (glMultiTexCoord4x_wrapper_proc_t) getProc("glMultiTexCoord4x", userData);
+	glNormal3x = (glNormal3x_wrapper_proc_t) getProc("glNormal3x", userData);
+	glNormalPointer = (glNormalPointer_wrapper_proc_t) getProc("glNormalPointer", userData);
+	glOrthox = (glOrthox_wrapper_proc_t) getProc("glOrthox", userData);
+	glPixelStorei = (glPixelStorei_wrapper_proc_t) getProc("glPixelStorei", userData);
+	glPointParameterx = (glPointParameterx_wrapper_proc_t) getProc("glPointParameterx", userData);
+	glPointParameterxv = (glPointParameterxv_wrapper_proc_t) getProc("glPointParameterxv", userData);
+	glPointSizex = (glPointSizex_wrapper_proc_t) getProc("glPointSizex", userData);
+	glPolygonOffsetx = (glPolygonOffsetx_wrapper_proc_t) getProc("glPolygonOffsetx", userData);
+	glPopMatrix = (glPopMatrix_wrapper_proc_t) getProc("glPopMatrix", userData);
+	glPushMatrix = (glPushMatrix_wrapper_proc_t) getProc("glPushMatrix", userData);
+	glReadPixels = (glReadPixels_wrapper_proc_t) getProc("glReadPixels", userData);
+	glRotatex = (glRotatex_wrapper_proc_t) getProc("glRotatex", userData);
+	glSampleCoverage = (glSampleCoverage_wrapper_proc_t) getProc("glSampleCoverage", userData);
+	glSampleCoveragex = (glSampleCoveragex_wrapper_proc_t) getProc("glSampleCoveragex", userData);
+	glScalex = (glScalex_wrapper_proc_t) getProc("glScalex", userData);
+	glScissor = (glScissor_wrapper_proc_t) getProc("glScissor", userData);
+	glShadeModel = (glShadeModel_wrapper_proc_t) getProc("glShadeModel", userData);
+	glStencilFunc = (glStencilFunc_wrapper_proc_t) getProc("glStencilFunc", userData);
+	glStencilMask = (glStencilMask_wrapper_proc_t) getProc("glStencilMask", userData);
+	glStencilOp = (glStencilOp_wrapper_proc_t) getProc("glStencilOp", userData);
+	glTexCoordPointer = (glTexCoordPointer_wrapper_proc_t) getProc("glTexCoordPointer", userData);
+	glTexEnvi = (glTexEnvi_wrapper_proc_t) getProc("glTexEnvi", userData);
+	glTexEnvx = (glTexEnvx_wrapper_proc_t) getProc("glTexEnvx", userData);
+	glTexEnviv = (glTexEnviv_wrapper_proc_t) getProc("glTexEnviv", userData);
+	glTexEnvxv = (glTexEnvxv_wrapper_proc_t) getProc("glTexEnvxv", userData);
+	glTexImage2D = (glTexImage2D_wrapper_proc_t) getProc("glTexImage2D", userData);
+	glTexParameteri = (glTexParameteri_wrapper_proc_t) getProc("glTexParameteri", userData);
+	glTexParameterx = (glTexParameterx_wrapper_proc_t) getProc("glTexParameterx", userData);
+	glTexParameteriv = (glTexParameteriv_wrapper_proc_t) getProc("glTexParameteriv", userData);
+	glTexParameterxv = (glTexParameterxv_wrapper_proc_t) getProc("glTexParameterxv", userData);
+	glTexSubImage2D = (glTexSubImage2D_wrapper_proc_t) getProc("glTexSubImage2D", userData);
+	glTranslatex = (glTranslatex_wrapper_proc_t) getProc("glTranslatex", userData);
+	glVertexPointer = (glVertexPointer_wrapper_proc_t) getProc("glVertexPointer", userData);
+	glViewport = (glViewport_wrapper_proc_t) getProc("glViewport", userData);
+	glPointSizePointerOES = (glPointSizePointerOES_wrapper_proc_t) getProc("glPointSizePointerOES", userData);
+	glVertexPointerOffset = (glVertexPointerOffset_wrapper_proc_t) getProc("glVertexPointerOffset", userData);
+	glColorPointerOffset = (glColorPointerOffset_wrapper_proc_t) getProc("glColorPointerOffset", userData);
+	glNormalPointerOffset = (glNormalPointerOffset_wrapper_proc_t) getProc("glNormalPointerOffset", userData);
+	glPointSizePointerOffset = (glPointSizePointerOffset_wrapper_proc_t) getProc("glPointSizePointerOffset", userData);
+	glTexCoordPointerOffset = (glTexCoordPointerOffset_wrapper_proc_t) getProc("glTexCoordPointerOffset", userData);
+	glWeightPointerOffset = (glWeightPointerOffset_wrapper_proc_t) getProc("glWeightPointerOffset", userData);
+	glMatrixIndexPointerOffset = (glMatrixIndexPointerOffset_wrapper_proc_t) getProc("glMatrixIndexPointerOffset", userData);
+	glVertexPointerData = (glVertexPointerData_wrapper_proc_t) getProc("glVertexPointerData", userData);
+	glColorPointerData = (glColorPointerData_wrapper_proc_t) getProc("glColorPointerData", userData);
+	glNormalPointerData = (glNormalPointerData_wrapper_proc_t) getProc("glNormalPointerData", userData);
+	glTexCoordPointerData = (glTexCoordPointerData_wrapper_proc_t) getProc("glTexCoordPointerData", userData);
+	glPointSizePointerData = (glPointSizePointerData_wrapper_proc_t) getProc("glPointSizePointerData", userData);
+	glWeightPointerData = (glWeightPointerData_wrapper_proc_t) getProc("glWeightPointerData", userData);
+	glMatrixIndexPointerData = (glMatrixIndexPointerData_wrapper_proc_t) getProc("glMatrixIndexPointerData", userData);
+	glDrawElementsOffset = (glDrawElementsOffset_wrapper_proc_t) getProc("glDrawElementsOffset", userData);
+	glDrawElementsData = (glDrawElementsData_wrapper_proc_t) getProc("glDrawElementsData", userData);
+	glGetCompressedTextureFormats = (glGetCompressedTextureFormats_wrapper_proc_t) getProc("glGetCompressedTextureFormats", userData);
+	glFinishRoundTrip = (glFinishRoundTrip_wrapper_proc_t) getProc("glFinishRoundTrip", userData);
+	glBlendEquationSeparateOES = (glBlendEquationSeparateOES_wrapper_proc_t) getProc("glBlendEquationSeparateOES", userData);
+	glBlendFuncSeparateOES = (glBlendFuncSeparateOES_wrapper_proc_t) getProc("glBlendFuncSeparateOES", userData);
+	glBlendEquationOES = (glBlendEquationOES_wrapper_proc_t) getProc("glBlendEquationOES", userData);
+	glDrawTexsOES = (glDrawTexsOES_wrapper_proc_t) getProc("glDrawTexsOES", userData);
+	glDrawTexiOES = (glDrawTexiOES_wrapper_proc_t) getProc("glDrawTexiOES", userData);
+	glDrawTexxOES = (glDrawTexxOES_wrapper_proc_t) getProc("glDrawTexxOES", userData);
+	glDrawTexsvOES = (glDrawTexsvOES_wrapper_proc_t) getProc("glDrawTexsvOES", userData);
+	glDrawTexivOES = (glDrawTexivOES_wrapper_proc_t) getProc("glDrawTexivOES", userData);
+	glDrawTexxvOES = (glDrawTexxvOES_wrapper_proc_t) getProc("glDrawTexxvOES", userData);
+	glDrawTexfOES = (glDrawTexfOES_wrapper_proc_t) getProc("glDrawTexfOES", userData);
+	glDrawTexfvOES = (glDrawTexfvOES_wrapper_proc_t) getProc("glDrawTexfvOES", userData);
+	glEGLImageTargetTexture2DOES = (glEGLImageTargetTexture2DOES_wrapper_proc_t) getProc("glEGLImageTargetTexture2DOES", userData);
+	glEGLImageTargetRenderbufferStorageOES = (glEGLImageTargetRenderbufferStorageOES_wrapper_proc_t) getProc("glEGLImageTargetRenderbufferStorageOES", userData);
+	glAlphaFuncxOES = (glAlphaFuncxOES_wrapper_proc_t) getProc("glAlphaFuncxOES", userData);
+	glClearColorxOES = (glClearColorxOES_wrapper_proc_t) getProc("glClearColorxOES", userData);
+	glClearDepthxOES = (glClearDepthxOES_wrapper_proc_t) getProc("glClearDepthxOES", userData);
+	glClipPlanexOES = (glClipPlanexOES_wrapper_proc_t) getProc("glClipPlanexOES", userData);
+	glClipPlanexIMG = (glClipPlanexIMG_wrapper_proc_t) getProc("glClipPlanexIMG", userData);
+	glColor4xOES = (glColor4xOES_wrapper_proc_t) getProc("glColor4xOES", userData);
+	glDepthRangexOES = (glDepthRangexOES_wrapper_proc_t) getProc("glDepthRangexOES", userData);
+	glFogxOES = (glFogxOES_wrapper_proc_t) getProc("glFogxOES", userData);
+	glFogxvOES = (glFogxvOES_wrapper_proc_t) getProc("glFogxvOES", userData);
+	glFrustumxOES = (glFrustumxOES_wrapper_proc_t) getProc("glFrustumxOES", userData);
+	glGetClipPlanexOES = (glGetClipPlanexOES_wrapper_proc_t) getProc("glGetClipPlanexOES", userData);
+	glGetClipPlanex = (glGetClipPlanex_wrapper_proc_t) getProc("glGetClipPlanex", userData);
+	glGetFixedvOES = (glGetFixedvOES_wrapper_proc_t) getProc("glGetFixedvOES", userData);
+	glGetLightxvOES = (glGetLightxvOES_wrapper_proc_t) getProc("glGetLightxvOES", userData);
+	glGetMaterialxvOES = (glGetMaterialxvOES_wrapper_proc_t) getProc("glGetMaterialxvOES", userData);
+	glGetTexEnvxvOES = (glGetTexEnvxvOES_wrapper_proc_t) getProc("glGetTexEnvxvOES", userData);
+	glGetTexParameterxvOES = (glGetTexParameterxvOES_wrapper_proc_t) getProc("glGetTexParameterxvOES", userData);
+	glLightModelxOES = (glLightModelxOES_wrapper_proc_t) getProc("glLightModelxOES", userData);
+	glLightModelxvOES = (glLightModelxvOES_wrapper_proc_t) getProc("glLightModelxvOES", userData);
+	glLightxOES = (glLightxOES_wrapper_proc_t) getProc("glLightxOES", userData);
+	glLightxvOES = (glLightxvOES_wrapper_proc_t) getProc("glLightxvOES", userData);
+	glLineWidthxOES = (glLineWidthxOES_wrapper_proc_t) getProc("glLineWidthxOES", userData);
+	glLoadMatrixxOES = (glLoadMatrixxOES_wrapper_proc_t) getProc("glLoadMatrixxOES", userData);
+	glMaterialxOES = (glMaterialxOES_wrapper_proc_t) getProc("glMaterialxOES", userData);
+	glMaterialxvOES = (glMaterialxvOES_wrapper_proc_t) getProc("glMaterialxvOES", userData);
+	glMultMatrixxOES = (glMultMatrixxOES_wrapper_proc_t) getProc("glMultMatrixxOES", userData);
+	glMultiTexCoord4xOES = (glMultiTexCoord4xOES_wrapper_proc_t) getProc("glMultiTexCoord4xOES", userData);
+	glNormal3xOES = (glNormal3xOES_wrapper_proc_t) getProc("glNormal3xOES", userData);
+	glOrthoxOES = (glOrthoxOES_wrapper_proc_t) getProc("glOrthoxOES", userData);
+	glPointParameterxOES = (glPointParameterxOES_wrapper_proc_t) getProc("glPointParameterxOES", userData);
+	glPointParameterxvOES = (glPointParameterxvOES_wrapper_proc_t) getProc("glPointParameterxvOES", userData);
+	glPointSizexOES = (glPointSizexOES_wrapper_proc_t) getProc("glPointSizexOES", userData);
+	glPolygonOffsetxOES = (glPolygonOffsetxOES_wrapper_proc_t) getProc("glPolygonOffsetxOES", userData);
+	glRotatexOES = (glRotatexOES_wrapper_proc_t) getProc("glRotatexOES", userData);
+	glSampleCoveragexOES = (glSampleCoveragexOES_wrapper_proc_t) getProc("glSampleCoveragexOES", userData);
+	glScalexOES = (glScalexOES_wrapper_proc_t) getProc("glScalexOES", userData);
+	glTexEnvxOES = (glTexEnvxOES_wrapper_proc_t) getProc("glTexEnvxOES", userData);
+	glTexEnvxvOES = (glTexEnvxvOES_wrapper_proc_t) getProc("glTexEnvxvOES", userData);
+	glTexParameterxOES = (glTexParameterxOES_wrapper_proc_t) getProc("glTexParameterxOES", userData);
+	glTexParameterxvOES = (glTexParameterxvOES_wrapper_proc_t) getProc("glTexParameterxvOES", userData);
+	glTranslatexOES = (glTranslatexOES_wrapper_proc_t) getProc("glTranslatexOES", userData);
+	glIsRenderbufferOES = (glIsRenderbufferOES_wrapper_proc_t) getProc("glIsRenderbufferOES", userData);
+	glBindRenderbufferOES = (glBindRenderbufferOES_wrapper_proc_t) getProc("glBindRenderbufferOES", userData);
+	glDeleteRenderbuffersOES = (glDeleteRenderbuffersOES_wrapper_proc_t) getProc("glDeleteRenderbuffersOES", userData);
+	glGenRenderbuffersOES = (glGenRenderbuffersOES_wrapper_proc_t) getProc("glGenRenderbuffersOES", userData);
+	glRenderbufferStorageOES = (glRenderbufferStorageOES_wrapper_proc_t) getProc("glRenderbufferStorageOES", userData);
+	glGetRenderbufferParameterivOES = (glGetRenderbufferParameterivOES_wrapper_proc_t) getProc("glGetRenderbufferParameterivOES", userData);
+	glIsFramebufferOES = (glIsFramebufferOES_wrapper_proc_t) getProc("glIsFramebufferOES", userData);
+	glBindFramebufferOES = (glBindFramebufferOES_wrapper_proc_t) getProc("glBindFramebufferOES", userData);
+	glDeleteFramebuffersOES = (glDeleteFramebuffersOES_wrapper_proc_t) getProc("glDeleteFramebuffersOES", userData);
+	glGenFramebuffersOES = (glGenFramebuffersOES_wrapper_proc_t) getProc("glGenFramebuffersOES", userData);
+	glCheckFramebufferStatusOES = (glCheckFramebufferStatusOES_wrapper_proc_t) getProc("glCheckFramebufferStatusOES", userData);
+	glFramebufferRenderbufferOES = (glFramebufferRenderbufferOES_wrapper_proc_t) getProc("glFramebufferRenderbufferOES", userData);
+	glFramebufferTexture2DOES = (glFramebufferTexture2DOES_wrapper_proc_t) getProc("glFramebufferTexture2DOES", userData);
+	glGetFramebufferAttachmentParameterivOES = (glGetFramebufferAttachmentParameterivOES_wrapper_proc_t) getProc("glGetFramebufferAttachmentParameterivOES", userData);
+	glGenerateMipmapOES = (glGenerateMipmapOES_wrapper_proc_t) getProc("glGenerateMipmapOES", userData);
+	glMapBufferOES = (glMapBufferOES_wrapper_proc_t) getProc("glMapBufferOES", userData);
+	glUnmapBufferOES = (glUnmapBufferOES_wrapper_proc_t) getProc("glUnmapBufferOES", userData);
+	glGetBufferPointervOES = (glGetBufferPointervOES_wrapper_proc_t) getProc("glGetBufferPointervOES", userData);
+	glCurrentPaletteMatrixOES = (glCurrentPaletteMatrixOES_wrapper_proc_t) getProc("glCurrentPaletteMatrixOES", userData);
+	glLoadPaletteFromModelViewMatrixOES = (glLoadPaletteFromModelViewMatrixOES_wrapper_proc_t) getProc("glLoadPaletteFromModelViewMatrixOES", userData);
+	glMatrixIndexPointerOES = (glMatrixIndexPointerOES_wrapper_proc_t) getProc("glMatrixIndexPointerOES", userData);
+	glWeightPointerOES = (glWeightPointerOES_wrapper_proc_t) getProc("glWeightPointerOES", userData);
+	glQueryMatrixxOES = (glQueryMatrixxOES_wrapper_proc_t) getProc("glQueryMatrixxOES", userData);
+	glDepthRangefOES = (glDepthRangefOES_wrapper_proc_t) getProc("glDepthRangefOES", userData);
+	glFrustumfOES = (glFrustumfOES_wrapper_proc_t) getProc("glFrustumfOES", userData);
+	glOrthofOES = (glOrthofOES_wrapper_proc_t) getProc("glOrthofOES", userData);
+	glClipPlanefOES = (glClipPlanefOES_wrapper_proc_t) getProc("glClipPlanefOES", userData);
+	glClipPlanefIMG = (glClipPlanefIMG_wrapper_proc_t) getProc("glClipPlanefIMG", userData);
+	glGetClipPlanefOES = (glGetClipPlanefOES_wrapper_proc_t) getProc("glGetClipPlanefOES", userData);
+	glClearDepthfOES = (glClearDepthfOES_wrapper_proc_t) getProc("glClearDepthfOES", userData);
+	glTexGenfOES = (glTexGenfOES_wrapper_proc_t) getProc("glTexGenfOES", userData);
+	glTexGenfvOES = (glTexGenfvOES_wrapper_proc_t) getProc("glTexGenfvOES", userData);
+	glTexGeniOES = (glTexGeniOES_wrapper_proc_t) getProc("glTexGeniOES", userData);
+	glTexGenivOES = (glTexGenivOES_wrapper_proc_t) getProc("glTexGenivOES", userData);
+	glTexGenxOES = (glTexGenxOES_wrapper_proc_t) getProc("glTexGenxOES", userData);
+	glTexGenxvOES = (glTexGenxvOES_wrapper_proc_t) getProc("glTexGenxvOES", userData);
+	glGetTexGenfvOES = (glGetTexGenfvOES_wrapper_proc_t) getProc("glGetTexGenfvOES", userData);
+	glGetTexGenivOES = (glGetTexGenivOES_wrapper_proc_t) getProc("glGetTexGenivOES", userData);
+	glGetTexGenxvOES = (glGetTexGenxvOES_wrapper_proc_t) getProc("glGetTexGenxvOES", userData);
+	glBindVertexArrayOES = (glBindVertexArrayOES_wrapper_proc_t) getProc("glBindVertexArrayOES", userData);
+	glDeleteVertexArraysOES = (glDeleteVertexArraysOES_wrapper_proc_t) getProc("glDeleteVertexArraysOES", userData);
+	glGenVertexArraysOES = (glGenVertexArraysOES_wrapper_proc_t) getProc("glGenVertexArraysOES", userData);
+	glIsVertexArrayOES = (glIsVertexArrayOES_wrapper_proc_t) getProc("glIsVertexArrayOES", userData);
+	glDiscardFramebufferEXT = (glDiscardFramebufferEXT_wrapper_proc_t) getProc("glDiscardFramebufferEXT", userData);
+	glMultiDrawArraysEXT = (glMultiDrawArraysEXT_wrapper_proc_t) getProc("glMultiDrawArraysEXT", userData);
+	glMultiDrawElementsEXT = (glMultiDrawElementsEXT_wrapper_proc_t) getProc("glMultiDrawElementsEXT", userData);
+	glMultiDrawArraysSUN = (glMultiDrawArraysSUN_wrapper_proc_t) getProc("glMultiDrawArraysSUN", userData);
+	glMultiDrawElementsSUN = (glMultiDrawElementsSUN_wrapper_proc_t) getProc("glMultiDrawElementsSUN", userData);
+	glRenderbufferStorageMultisampleIMG = (glRenderbufferStorageMultisampleIMG_wrapper_proc_t) getProc("glRenderbufferStorageMultisampleIMG", userData);
+	glFramebufferTexture2DMultisampleIMG = (glFramebufferTexture2DMultisampleIMG_wrapper_proc_t) getProc("glFramebufferTexture2DMultisampleIMG", userData);
+	glDeleteFencesNV = (glDeleteFencesNV_wrapper_proc_t) getProc("glDeleteFencesNV", userData);
+	glGenFencesNV = (glGenFencesNV_wrapper_proc_t) getProc("glGenFencesNV", userData);
+	glIsFenceNV = (glIsFenceNV_wrapper_proc_t) getProc("glIsFenceNV", userData);
+	glTestFenceNV = (glTestFenceNV_wrapper_proc_t) getProc("glTestFenceNV", userData);
+	glGetFenceivNV = (glGetFenceivNV_wrapper_proc_t) getProc("glGetFenceivNV", userData);
+	glFinishFenceNV = (glFinishFenceNV_wrapper_proc_t) getProc("glFinishFenceNV", userData);
+	glSetFenceNV = (glSetFenceNV_wrapper_proc_t) getProc("glSetFenceNV", userData);
+	glGetDriverControlsQCOM = (glGetDriverControlsQCOM_wrapper_proc_t) getProc("glGetDriverControlsQCOM", userData);
+	glGetDriverControlStringQCOM = (glGetDriverControlStringQCOM_wrapper_proc_t) getProc("glGetDriverControlStringQCOM", userData);
+	glEnableDriverControlQCOM = (glEnableDriverControlQCOM_wrapper_proc_t) getProc("glEnableDriverControlQCOM", userData);
+	glDisableDriverControlQCOM = (glDisableDriverControlQCOM_wrapper_proc_t) getProc("glDisableDriverControlQCOM", userData);
+	glExtGetTexturesQCOM = (glExtGetTexturesQCOM_wrapper_proc_t) getProc("glExtGetTexturesQCOM", userData);
+	glExtGetBuffersQCOM = (glExtGetBuffersQCOM_wrapper_proc_t) getProc("glExtGetBuffersQCOM", userData);
+	glExtGetRenderbuffersQCOM = (glExtGetRenderbuffersQCOM_wrapper_proc_t) getProc("glExtGetRenderbuffersQCOM", userData);
+	glExtGetFramebuffersQCOM = (glExtGetFramebuffersQCOM_wrapper_proc_t) getProc("glExtGetFramebuffersQCOM", userData);
+	glExtGetTexLevelParameterivQCOM = (glExtGetTexLevelParameterivQCOM_wrapper_proc_t) getProc("glExtGetTexLevelParameterivQCOM", userData);
+	glExtTexObjectStateOverrideiQCOM = (glExtTexObjectStateOverrideiQCOM_wrapper_proc_t) getProc("glExtTexObjectStateOverrideiQCOM", userData);
+	glExtGetTexSubImageQCOM = (glExtGetTexSubImageQCOM_wrapper_proc_t) getProc("glExtGetTexSubImageQCOM", userData);
+	glExtGetBufferPointervQCOM = (glExtGetBufferPointervQCOM_wrapper_proc_t) getProc("glExtGetBufferPointervQCOM", userData);
+	glExtGetShadersQCOM = (glExtGetShadersQCOM_wrapper_proc_t) getProc("glExtGetShadersQCOM", userData);
+	glExtGetProgramsQCOM = (glExtGetProgramsQCOM_wrapper_proc_t) getProc("glExtGetProgramsQCOM", userData);
+	glExtIsProgramBinaryQCOM = (glExtIsProgramBinaryQCOM_wrapper_proc_t) getProc("glExtIsProgramBinaryQCOM", userData);
+	glExtGetProgramBinarySourceQCOM = (glExtGetProgramBinarySourceQCOM_wrapper_proc_t) getProc("glExtGetProgramBinarySourceQCOM", userData);
+	glStartTilingQCOM = (glStartTilingQCOM_wrapper_proc_t) getProc("glStartTilingQCOM", userData);
+	glEndTilingQCOM = (glEndTilingQCOM_wrapper_proc_t) getProc("glEndTilingQCOM", userData);
+	return 0;
+}
+
diff --git a/guest/libs/eglwrapper/gles1_wrapper_context.h b/guest/libs/eglwrapper/gles1_wrapper_context.h
new file mode 100644
index 0000000..03639f1
--- /dev/null
+++ b/guest/libs/eglwrapper/gles1_wrapper_context.h
@@ -0,0 +1,311 @@
+// Generated Code - DO NOT EDIT !!
+// generated by 'emugen'
+#ifndef __gles1_wrapper_context_t_h
+#define __gles1_wrapper_context_t_h
+
+#include "gles1_server_proc.h"
+
+#include "gles1_types.h"
+
+
+struct gles1_wrapper_context_t {
+
+	glAlphaFunc_wrapper_proc_t glAlphaFunc;
+	glClearColor_wrapper_proc_t glClearColor;
+	glClearDepthf_wrapper_proc_t glClearDepthf;
+	glClipPlanef_wrapper_proc_t glClipPlanef;
+	glColor4f_wrapper_proc_t glColor4f;
+	glDepthRangef_wrapper_proc_t glDepthRangef;
+	glFogf_wrapper_proc_t glFogf;
+	glFogfv_wrapper_proc_t glFogfv;
+	glFrustumf_wrapper_proc_t glFrustumf;
+	glGetClipPlanef_wrapper_proc_t glGetClipPlanef;
+	glGetFloatv_wrapper_proc_t glGetFloatv;
+	glGetLightfv_wrapper_proc_t glGetLightfv;
+	glGetMaterialfv_wrapper_proc_t glGetMaterialfv;
+	glGetTexEnvfv_wrapper_proc_t glGetTexEnvfv;
+	glGetTexParameterfv_wrapper_proc_t glGetTexParameterfv;
+	glLightModelf_wrapper_proc_t glLightModelf;
+	glLightModelfv_wrapper_proc_t glLightModelfv;
+	glLightf_wrapper_proc_t glLightf;
+	glLightfv_wrapper_proc_t glLightfv;
+	glLineWidth_wrapper_proc_t glLineWidth;
+	glLoadMatrixf_wrapper_proc_t glLoadMatrixf;
+	glMaterialf_wrapper_proc_t glMaterialf;
+	glMaterialfv_wrapper_proc_t glMaterialfv;
+	glMultMatrixf_wrapper_proc_t glMultMatrixf;
+	glMultiTexCoord4f_wrapper_proc_t glMultiTexCoord4f;
+	glNormal3f_wrapper_proc_t glNormal3f;
+	glOrthof_wrapper_proc_t glOrthof;
+	glPointParameterf_wrapper_proc_t glPointParameterf;
+	glPointParameterfv_wrapper_proc_t glPointParameterfv;
+	glPointSize_wrapper_proc_t glPointSize;
+	glPolygonOffset_wrapper_proc_t glPolygonOffset;
+	glRotatef_wrapper_proc_t glRotatef;
+	glScalef_wrapper_proc_t glScalef;
+	glTexEnvf_wrapper_proc_t glTexEnvf;
+	glTexEnvfv_wrapper_proc_t glTexEnvfv;
+	glTexParameterf_wrapper_proc_t glTexParameterf;
+	glTexParameterfv_wrapper_proc_t glTexParameterfv;
+	glTranslatef_wrapper_proc_t glTranslatef;
+	glActiveTexture_wrapper_proc_t glActiveTexture;
+	glAlphaFuncx_wrapper_proc_t glAlphaFuncx;
+	glBindBuffer_wrapper_proc_t glBindBuffer;
+	glBindTexture_wrapper_proc_t glBindTexture;
+	glBlendFunc_wrapper_proc_t glBlendFunc;
+	glBufferData_wrapper_proc_t glBufferData;
+	glBufferSubData_wrapper_proc_t glBufferSubData;
+	glClear_wrapper_proc_t glClear;
+	glClearColorx_wrapper_proc_t glClearColorx;
+	glClearDepthx_wrapper_proc_t glClearDepthx;
+	glClearStencil_wrapper_proc_t glClearStencil;
+	glClientActiveTexture_wrapper_proc_t glClientActiveTexture;
+	glColor4ub_wrapper_proc_t glColor4ub;
+	glColor4x_wrapper_proc_t glColor4x;
+	glColorMask_wrapper_proc_t glColorMask;
+	glColorPointer_wrapper_proc_t glColorPointer;
+	glCompressedTexImage2D_wrapper_proc_t glCompressedTexImage2D;
+	glCompressedTexSubImage2D_wrapper_proc_t glCompressedTexSubImage2D;
+	glCopyTexImage2D_wrapper_proc_t glCopyTexImage2D;
+	glCopyTexSubImage2D_wrapper_proc_t glCopyTexSubImage2D;
+	glCullFace_wrapper_proc_t glCullFace;
+	glDeleteBuffers_wrapper_proc_t glDeleteBuffers;
+	glDeleteTextures_wrapper_proc_t glDeleteTextures;
+	glDepthFunc_wrapper_proc_t glDepthFunc;
+	glDepthMask_wrapper_proc_t glDepthMask;
+	glDepthRangex_wrapper_proc_t glDepthRangex;
+	glDisable_wrapper_proc_t glDisable;
+	glDisableClientState_wrapper_proc_t glDisableClientState;
+	glDrawArrays_wrapper_proc_t glDrawArrays;
+	glDrawElements_wrapper_proc_t glDrawElements;
+	glEnable_wrapper_proc_t glEnable;
+	glEnableClientState_wrapper_proc_t glEnableClientState;
+	glFinish_wrapper_proc_t glFinish;
+	glFlush_wrapper_proc_t glFlush;
+	glFogx_wrapper_proc_t glFogx;
+	glFogxv_wrapper_proc_t glFogxv;
+	glFrontFace_wrapper_proc_t glFrontFace;
+	glFrustumx_wrapper_proc_t glFrustumx;
+	glGetBooleanv_wrapper_proc_t glGetBooleanv;
+	glGetBufferParameteriv_wrapper_proc_t glGetBufferParameteriv;
+	glClipPlanex_wrapper_proc_t glClipPlanex;
+	glGenBuffers_wrapper_proc_t glGenBuffers;
+	glGenTextures_wrapper_proc_t glGenTextures;
+	glGetError_wrapper_proc_t glGetError;
+	glGetFixedv_wrapper_proc_t glGetFixedv;
+	glGetIntegerv_wrapper_proc_t glGetIntegerv;
+	glGetLightxv_wrapper_proc_t glGetLightxv;
+	glGetMaterialxv_wrapper_proc_t glGetMaterialxv;
+	glGetPointerv_wrapper_proc_t glGetPointerv;
+	glGetString_wrapper_proc_t glGetString;
+	glGetTexEnviv_wrapper_proc_t glGetTexEnviv;
+	glGetTexEnvxv_wrapper_proc_t glGetTexEnvxv;
+	glGetTexParameteriv_wrapper_proc_t glGetTexParameteriv;
+	glGetTexParameterxv_wrapper_proc_t glGetTexParameterxv;
+	glHint_wrapper_proc_t glHint;
+	glIsBuffer_wrapper_proc_t glIsBuffer;
+	glIsEnabled_wrapper_proc_t glIsEnabled;
+	glIsTexture_wrapper_proc_t glIsTexture;
+	glLightModelx_wrapper_proc_t glLightModelx;
+	glLightModelxv_wrapper_proc_t glLightModelxv;
+	glLightx_wrapper_proc_t glLightx;
+	glLightxv_wrapper_proc_t glLightxv;
+	glLineWidthx_wrapper_proc_t glLineWidthx;
+	glLoadIdentity_wrapper_proc_t glLoadIdentity;
+	glLoadMatrixx_wrapper_proc_t glLoadMatrixx;
+	glLogicOp_wrapper_proc_t glLogicOp;
+	glMaterialx_wrapper_proc_t glMaterialx;
+	glMaterialxv_wrapper_proc_t glMaterialxv;
+	glMatrixMode_wrapper_proc_t glMatrixMode;
+	glMultMatrixx_wrapper_proc_t glMultMatrixx;
+	glMultiTexCoord4x_wrapper_proc_t glMultiTexCoord4x;
+	glNormal3x_wrapper_proc_t glNormal3x;
+	glNormalPointer_wrapper_proc_t glNormalPointer;
+	glOrthox_wrapper_proc_t glOrthox;
+	glPixelStorei_wrapper_proc_t glPixelStorei;
+	glPointParameterx_wrapper_proc_t glPointParameterx;
+	glPointParameterxv_wrapper_proc_t glPointParameterxv;
+	glPointSizex_wrapper_proc_t glPointSizex;
+	glPolygonOffsetx_wrapper_proc_t glPolygonOffsetx;
+	glPopMatrix_wrapper_proc_t glPopMatrix;
+	glPushMatrix_wrapper_proc_t glPushMatrix;
+	glReadPixels_wrapper_proc_t glReadPixels;
+	glRotatex_wrapper_proc_t glRotatex;
+	glSampleCoverage_wrapper_proc_t glSampleCoverage;
+	glSampleCoveragex_wrapper_proc_t glSampleCoveragex;
+	glScalex_wrapper_proc_t glScalex;
+	glScissor_wrapper_proc_t glScissor;
+	glShadeModel_wrapper_proc_t glShadeModel;
+	glStencilFunc_wrapper_proc_t glStencilFunc;
+	glStencilMask_wrapper_proc_t glStencilMask;
+	glStencilOp_wrapper_proc_t glStencilOp;
+	glTexCoordPointer_wrapper_proc_t glTexCoordPointer;
+	glTexEnvi_wrapper_proc_t glTexEnvi;
+	glTexEnvx_wrapper_proc_t glTexEnvx;
+	glTexEnviv_wrapper_proc_t glTexEnviv;
+	glTexEnvxv_wrapper_proc_t glTexEnvxv;
+	glTexImage2D_wrapper_proc_t glTexImage2D;
+	glTexParameteri_wrapper_proc_t glTexParameteri;
+	glTexParameterx_wrapper_proc_t glTexParameterx;
+	glTexParameteriv_wrapper_proc_t glTexParameteriv;
+	glTexParameterxv_wrapper_proc_t glTexParameterxv;
+	glTexSubImage2D_wrapper_proc_t glTexSubImage2D;
+	glTranslatex_wrapper_proc_t glTranslatex;
+	glVertexPointer_wrapper_proc_t glVertexPointer;
+	glViewport_wrapper_proc_t glViewport;
+	glPointSizePointerOES_wrapper_proc_t glPointSizePointerOES;
+	glVertexPointerOffset_wrapper_proc_t glVertexPointerOffset;
+	glColorPointerOffset_wrapper_proc_t glColorPointerOffset;
+	glNormalPointerOffset_wrapper_proc_t glNormalPointerOffset;
+	glPointSizePointerOffset_wrapper_proc_t glPointSizePointerOffset;
+	glTexCoordPointerOffset_wrapper_proc_t glTexCoordPointerOffset;
+	glWeightPointerOffset_wrapper_proc_t glWeightPointerOffset;
+	glMatrixIndexPointerOffset_wrapper_proc_t glMatrixIndexPointerOffset;
+	glVertexPointerData_wrapper_proc_t glVertexPointerData;
+	glColorPointerData_wrapper_proc_t glColorPointerData;
+	glNormalPointerData_wrapper_proc_t glNormalPointerData;
+	glTexCoordPointerData_wrapper_proc_t glTexCoordPointerData;
+	glPointSizePointerData_wrapper_proc_t glPointSizePointerData;
+	glWeightPointerData_wrapper_proc_t glWeightPointerData;
+	glMatrixIndexPointerData_wrapper_proc_t glMatrixIndexPointerData;
+	glDrawElementsOffset_wrapper_proc_t glDrawElementsOffset;
+	glDrawElementsData_wrapper_proc_t glDrawElementsData;
+	glGetCompressedTextureFormats_wrapper_proc_t glGetCompressedTextureFormats;
+	glFinishRoundTrip_wrapper_proc_t glFinishRoundTrip;
+	glBlendEquationSeparateOES_wrapper_proc_t glBlendEquationSeparateOES;
+	glBlendFuncSeparateOES_wrapper_proc_t glBlendFuncSeparateOES;
+	glBlendEquationOES_wrapper_proc_t glBlendEquationOES;
+	glDrawTexsOES_wrapper_proc_t glDrawTexsOES;
+	glDrawTexiOES_wrapper_proc_t glDrawTexiOES;
+	glDrawTexxOES_wrapper_proc_t glDrawTexxOES;
+	glDrawTexsvOES_wrapper_proc_t glDrawTexsvOES;
+	glDrawTexivOES_wrapper_proc_t glDrawTexivOES;
+	glDrawTexxvOES_wrapper_proc_t glDrawTexxvOES;
+	glDrawTexfOES_wrapper_proc_t glDrawTexfOES;
+	glDrawTexfvOES_wrapper_proc_t glDrawTexfvOES;
+	glEGLImageTargetTexture2DOES_wrapper_proc_t glEGLImageTargetTexture2DOES;
+	glEGLImageTargetRenderbufferStorageOES_wrapper_proc_t glEGLImageTargetRenderbufferStorageOES;
+	glAlphaFuncxOES_wrapper_proc_t glAlphaFuncxOES;
+	glClearColorxOES_wrapper_proc_t glClearColorxOES;
+	glClearDepthxOES_wrapper_proc_t glClearDepthxOES;
+	glClipPlanexOES_wrapper_proc_t glClipPlanexOES;
+	glClipPlanexIMG_wrapper_proc_t glClipPlanexIMG;
+	glColor4xOES_wrapper_proc_t glColor4xOES;
+	glDepthRangexOES_wrapper_proc_t glDepthRangexOES;
+	glFogxOES_wrapper_proc_t glFogxOES;
+	glFogxvOES_wrapper_proc_t glFogxvOES;
+	glFrustumxOES_wrapper_proc_t glFrustumxOES;
+	glGetClipPlanexOES_wrapper_proc_t glGetClipPlanexOES;
+	glGetClipPlanex_wrapper_proc_t glGetClipPlanex;
+	glGetFixedvOES_wrapper_proc_t glGetFixedvOES;
+	glGetLightxvOES_wrapper_proc_t glGetLightxvOES;
+	glGetMaterialxvOES_wrapper_proc_t glGetMaterialxvOES;
+	glGetTexEnvxvOES_wrapper_proc_t glGetTexEnvxvOES;
+	glGetTexParameterxvOES_wrapper_proc_t glGetTexParameterxvOES;
+	glLightModelxOES_wrapper_proc_t glLightModelxOES;
+	glLightModelxvOES_wrapper_proc_t glLightModelxvOES;
+	glLightxOES_wrapper_proc_t glLightxOES;
+	glLightxvOES_wrapper_proc_t glLightxvOES;
+	glLineWidthxOES_wrapper_proc_t glLineWidthxOES;
+	glLoadMatrixxOES_wrapper_proc_t glLoadMatrixxOES;
+	glMaterialxOES_wrapper_proc_t glMaterialxOES;
+	glMaterialxvOES_wrapper_proc_t glMaterialxvOES;
+	glMultMatrixxOES_wrapper_proc_t glMultMatrixxOES;
+	glMultiTexCoord4xOES_wrapper_proc_t glMultiTexCoord4xOES;
+	glNormal3xOES_wrapper_proc_t glNormal3xOES;
+	glOrthoxOES_wrapper_proc_t glOrthoxOES;
+	glPointParameterxOES_wrapper_proc_t glPointParameterxOES;
+	glPointParameterxvOES_wrapper_proc_t glPointParameterxvOES;
+	glPointSizexOES_wrapper_proc_t glPointSizexOES;
+	glPolygonOffsetxOES_wrapper_proc_t glPolygonOffsetxOES;
+	glRotatexOES_wrapper_proc_t glRotatexOES;
+	glSampleCoveragexOES_wrapper_proc_t glSampleCoveragexOES;
+	glScalexOES_wrapper_proc_t glScalexOES;
+	glTexEnvxOES_wrapper_proc_t glTexEnvxOES;
+	glTexEnvxvOES_wrapper_proc_t glTexEnvxvOES;
+	glTexParameterxOES_wrapper_proc_t glTexParameterxOES;
+	glTexParameterxvOES_wrapper_proc_t glTexParameterxvOES;
+	glTranslatexOES_wrapper_proc_t glTranslatexOES;
+	glIsRenderbufferOES_wrapper_proc_t glIsRenderbufferOES;
+	glBindRenderbufferOES_wrapper_proc_t glBindRenderbufferOES;
+	glDeleteRenderbuffersOES_wrapper_proc_t glDeleteRenderbuffersOES;
+	glGenRenderbuffersOES_wrapper_proc_t glGenRenderbuffersOES;
+	glRenderbufferStorageOES_wrapper_proc_t glRenderbufferStorageOES;
+	glGetRenderbufferParameterivOES_wrapper_proc_t glGetRenderbufferParameterivOES;
+	glIsFramebufferOES_wrapper_proc_t glIsFramebufferOES;
+	glBindFramebufferOES_wrapper_proc_t glBindFramebufferOES;
+	glDeleteFramebuffersOES_wrapper_proc_t glDeleteFramebuffersOES;
+	glGenFramebuffersOES_wrapper_proc_t glGenFramebuffersOES;
+	glCheckFramebufferStatusOES_wrapper_proc_t glCheckFramebufferStatusOES;
+	glFramebufferRenderbufferOES_wrapper_proc_t glFramebufferRenderbufferOES;
+	glFramebufferTexture2DOES_wrapper_proc_t glFramebufferTexture2DOES;
+	glGetFramebufferAttachmentParameterivOES_wrapper_proc_t glGetFramebufferAttachmentParameterivOES;
+	glGenerateMipmapOES_wrapper_proc_t glGenerateMipmapOES;
+	glMapBufferOES_wrapper_proc_t glMapBufferOES;
+	glUnmapBufferOES_wrapper_proc_t glUnmapBufferOES;
+	glGetBufferPointervOES_wrapper_proc_t glGetBufferPointervOES;
+	glCurrentPaletteMatrixOES_wrapper_proc_t glCurrentPaletteMatrixOES;
+	glLoadPaletteFromModelViewMatrixOES_wrapper_proc_t glLoadPaletteFromModelViewMatrixOES;
+	glMatrixIndexPointerOES_wrapper_proc_t glMatrixIndexPointerOES;
+	glWeightPointerOES_wrapper_proc_t glWeightPointerOES;
+	glQueryMatrixxOES_wrapper_proc_t glQueryMatrixxOES;
+	glDepthRangefOES_wrapper_proc_t glDepthRangefOES;
+	glFrustumfOES_wrapper_proc_t glFrustumfOES;
+	glOrthofOES_wrapper_proc_t glOrthofOES;
+	glClipPlanefOES_wrapper_proc_t glClipPlanefOES;
+	glClipPlanefIMG_wrapper_proc_t glClipPlanefIMG;
+	glGetClipPlanefOES_wrapper_proc_t glGetClipPlanefOES;
+	glClearDepthfOES_wrapper_proc_t glClearDepthfOES;
+	glTexGenfOES_wrapper_proc_t glTexGenfOES;
+	glTexGenfvOES_wrapper_proc_t glTexGenfvOES;
+	glTexGeniOES_wrapper_proc_t glTexGeniOES;
+	glTexGenivOES_wrapper_proc_t glTexGenivOES;
+	glTexGenxOES_wrapper_proc_t glTexGenxOES;
+	glTexGenxvOES_wrapper_proc_t glTexGenxvOES;
+	glGetTexGenfvOES_wrapper_proc_t glGetTexGenfvOES;
+	glGetTexGenivOES_wrapper_proc_t glGetTexGenivOES;
+	glGetTexGenxvOES_wrapper_proc_t glGetTexGenxvOES;
+	glBindVertexArrayOES_wrapper_proc_t glBindVertexArrayOES;
+	glDeleteVertexArraysOES_wrapper_proc_t glDeleteVertexArraysOES;
+	glGenVertexArraysOES_wrapper_proc_t glGenVertexArraysOES;
+	glIsVertexArrayOES_wrapper_proc_t glIsVertexArrayOES;
+	glDiscardFramebufferEXT_wrapper_proc_t glDiscardFramebufferEXT;
+	glMultiDrawArraysEXT_wrapper_proc_t glMultiDrawArraysEXT;
+	glMultiDrawElementsEXT_wrapper_proc_t glMultiDrawElementsEXT;
+	glMultiDrawArraysSUN_wrapper_proc_t glMultiDrawArraysSUN;
+	glMultiDrawElementsSUN_wrapper_proc_t glMultiDrawElementsSUN;
+	glRenderbufferStorageMultisampleIMG_wrapper_proc_t glRenderbufferStorageMultisampleIMG;
+	glFramebufferTexture2DMultisampleIMG_wrapper_proc_t glFramebufferTexture2DMultisampleIMG;
+	glDeleteFencesNV_wrapper_proc_t glDeleteFencesNV;
+	glGenFencesNV_wrapper_proc_t glGenFencesNV;
+	glIsFenceNV_wrapper_proc_t glIsFenceNV;
+	glTestFenceNV_wrapper_proc_t glTestFenceNV;
+	glGetFenceivNV_wrapper_proc_t glGetFenceivNV;
+	glFinishFenceNV_wrapper_proc_t glFinishFenceNV;
+	glSetFenceNV_wrapper_proc_t glSetFenceNV;
+	glGetDriverControlsQCOM_wrapper_proc_t glGetDriverControlsQCOM;
+	glGetDriverControlStringQCOM_wrapper_proc_t glGetDriverControlStringQCOM;
+	glEnableDriverControlQCOM_wrapper_proc_t glEnableDriverControlQCOM;
+	glDisableDriverControlQCOM_wrapper_proc_t glDisableDriverControlQCOM;
+	glExtGetTexturesQCOM_wrapper_proc_t glExtGetTexturesQCOM;
+	glExtGetBuffersQCOM_wrapper_proc_t glExtGetBuffersQCOM;
+	glExtGetRenderbuffersQCOM_wrapper_proc_t glExtGetRenderbuffersQCOM;
+	glExtGetFramebuffersQCOM_wrapper_proc_t glExtGetFramebuffersQCOM;
+	glExtGetTexLevelParameterivQCOM_wrapper_proc_t glExtGetTexLevelParameterivQCOM;
+	glExtTexObjectStateOverrideiQCOM_wrapper_proc_t glExtTexObjectStateOverrideiQCOM;
+	glExtGetTexSubImageQCOM_wrapper_proc_t glExtGetTexSubImageQCOM;
+	glExtGetBufferPointervQCOM_wrapper_proc_t glExtGetBufferPointervQCOM;
+	glExtGetShadersQCOM_wrapper_proc_t glExtGetShadersQCOM;
+	glExtGetProgramsQCOM_wrapper_proc_t glExtGetProgramsQCOM;
+	glExtIsProgramBinaryQCOM_wrapper_proc_t glExtIsProgramBinaryQCOM;
+	glExtGetProgramBinarySourceQCOM_wrapper_proc_t glExtGetProgramBinarySourceQCOM;
+	glStartTilingQCOM_wrapper_proc_t glStartTilingQCOM;
+	glEndTilingQCOM_wrapper_proc_t glEndTilingQCOM;
+	virtual ~gles1_wrapper_context_t() {}
+
+	typedef gles1_wrapper_context_t *CONTEXT_ACCESSOR_TYPE(void);
+	static void setContextAccessor(CONTEXT_ACCESSOR_TYPE *f);
+	int initDispatchByName( void *(*getProc)(const char *name, void *userData), void *userData);
+};
+
+#endif
diff --git a/guest/libs/eglwrapper/gles1_wrapper_entry.cpp b/guest/libs/eglwrapper/gles1_wrapper_entry.cpp
new file mode 100644
index 0000000..f3232a0
--- /dev/null
+++ b/guest/libs/eglwrapper/gles1_wrapper_entry.cpp
@@ -0,0 +1,2052 @@
+// Generated Code - DO NOT EDIT !!
+// generated by 'emugen'
+#include <stdio.h>
+#include <stdlib.h>
+#include "gles1_wrapper_context.h"
+
+extern "C" {
+	void glAlphaFunc(GLenum func, GLclampf ref);
+	void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
+	void glClearDepthf(GLclampf depth);
+	void glClipPlanef(GLenum plane, const GLfloat* equation);
+	void glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+	void glDepthRangef(GLclampf zNear, GLclampf zFar);
+	void glFogf(GLenum pname, GLfloat param);
+	void glFogfv(GLenum pname, const GLfloat* params);
+	void glFrustumf(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar);
+	void glGetClipPlanef(GLenum pname, GLfloat* eqn);
+	void glGetFloatv(GLenum pname, GLfloat* params);
+	void glGetLightfv(GLenum light, GLenum pname, GLfloat* params);
+	void glGetMaterialfv(GLenum face, GLenum pname, GLfloat* params);
+	void glGetTexEnvfv(GLenum env, GLenum pname, GLfloat* params);
+	void glGetTexParameterfv(GLenum target, GLenum pname, GLfloat* params);
+	void glLightModelf(GLenum pname, GLfloat param);
+	void glLightModelfv(GLenum pname, const GLfloat* params);
+	void glLightf(GLenum light, GLenum pname, GLfloat param);
+	void glLightfv(GLenum light, GLenum pname, const GLfloat* params);
+	void glLineWidth(GLfloat width);
+	void glLoadMatrixf(const GLfloat* m);
+	void glMaterialf(GLenum face, GLenum pname, GLfloat param);
+	void glMaterialfv(GLenum face, GLenum pname, const GLfloat* params);
+	void glMultMatrixf(const GLfloat* m);
+	void glMultiTexCoord4f(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
+	void glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz);
+	void glOrthof(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar);
+	void glPointParameterf(GLenum pname, GLfloat param);
+	void glPointParameterfv(GLenum pname, const GLfloat* params);
+	void glPointSize(GLfloat size);
+	void glPolygonOffset(GLfloat factor, GLfloat units);
+	void glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
+	void glScalef(GLfloat x, GLfloat y, GLfloat z);
+	void glTexEnvf(GLenum target, GLenum pname, GLfloat param);
+	void glTexEnvfv(GLenum target, GLenum pname, const GLfloat* params);
+	void glTexParameterf(GLenum target, GLenum pname, GLfloat param);
+	void glTexParameterfv(GLenum target, GLenum pname, const GLfloat* params);
+	void glTranslatef(GLfloat x, GLfloat y, GLfloat z);
+	void glActiveTexture(GLenum texture);
+	void glAlphaFuncx(GLenum func, GLclampx ref);
+	void glBindBuffer(GLenum target, GLuint buffer);
+	void glBindTexture(GLenum target, GLuint texture);
+	void glBlendFunc(GLenum sfactor, GLenum dfactor);
+	void glBufferData(GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage);
+	void glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data);
+	void glClear(GLbitfield mask);
+	void glClearColorx(GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha);
+	void glClearDepthx(GLclampx depth);
+	void glClearStencil(GLint s);
+	void glClientActiveTexture(GLenum texture);
+	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 glDeleteTextures(GLsizei n, const GLuint* textures);
+	void glDepthFunc(GLenum func);
+	void glDepthMask(GLboolean flag);
+	void glDepthRangex(GLclampx zNear, GLclampx 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 glFlush();
+	void glFogx(GLenum pname, GLfixed param);
+	void glFogxv(GLenum pname, const GLfixed* params);
+	void glFrontFace(GLenum mode);
+	void glFrustumx(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar);
+	void glGetBooleanv(GLenum pname, GLboolean* params);
+	void glGetBufferParameteriv(GLenum target, GLenum pname, GLint* params);
+	void glClipPlanex(GLenum pname, const GLfixed* eqn);
+	void glGenBuffers(GLsizei n, GLuint* buffers);
+	void glGenTextures(GLsizei n, GLuint* textures);
+	GLenum glGetError();
+	void glGetFixedv(GLenum pname, GLfixed* params);
+	void glGetIntegerv(GLenum pname, GLint* params);
+	void glGetLightxv(GLenum light, GLenum pname, GLfixed* params);
+	void glGetMaterialxv(GLenum face, GLenum pname, GLfixed* params);
+	void glGetPointerv(GLenum pname, GLvoid** params);
+	const GLubyte* glGetString(GLenum name);
+	void glGetTexEnviv(GLenum env, GLenum pname, GLint* params);
+	void glGetTexEnvxv(GLenum env, GLenum pname, GLfixed* params);
+	void glGetTexParameteriv(GLenum target, GLenum pname, GLint* params);
+	void glGetTexParameterxv(GLenum target, GLenum pname, GLfixed* params);
+	void glHint(GLenum target, GLenum mode);
+	GLboolean glIsBuffer(GLuint buffer);
+	GLboolean glIsEnabled(GLenum cap);
+	GLboolean glIsTexture(GLuint texture);
+	void glLightModelx(GLenum pname, GLfixed param);
+	void glLightModelxv(GLenum pname, const GLfixed* params);
+	void glLightx(GLenum light, GLenum pname, GLfixed param);
+	void glLightxv(GLenum light, GLenum pname, const GLfixed* params);
+	void glLineWidthx(GLfixed width);
+	void glLoadIdentity();
+	void glLoadMatrixx(const GLfixed* m);
+	void glLogicOp(GLenum opcode);
+	void glMaterialx(GLenum face, GLenum pname, GLfixed param);
+	void glMaterialxv(GLenum face, GLenum pname, const GLfixed* params);
+	void glMatrixMode(GLenum mode);
+	void glMultMatrixx(const GLfixed* m);
+	void glMultiTexCoord4x(GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q);
+	void glNormal3x(GLfixed nx, GLfixed ny, GLfixed nz);
+	void glNormalPointer(GLenum type, GLsizei stride, const GLvoid* pointer);
+	void glOrthox(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar);
+	void glPixelStorei(GLenum pname, GLint param);
+	void glPointParameterx(GLenum pname, GLfixed param);
+	void glPointParameterxv(GLenum pname, const GLfixed* params);
+	void glPointSizex(GLfixed size);
+	void glPolygonOffsetx(GLfixed factor, GLfixed units);
+	void glPopMatrix();
+	void glPushMatrix();
+	void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels);
+	void glRotatex(GLfixed angle, GLfixed x, GLfixed y, GLfixed z);
+	void glSampleCoverage(GLclampf value, GLboolean invert);
+	void glSampleCoveragex(GLclampx value, GLboolean invert);
+	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 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 glTexParameteri(GLenum target, GLenum pname, GLint param);
+	void glTexParameterx(GLenum target, GLenum pname, GLfixed param);
+	void glTexParameteriv(GLenum target, GLenum pname, const GLint* params);
+	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 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 glPointSizePointerOES(GLenum type, GLsizei stride, const GLvoid* pointer);
+	void glVertexPointerOffset(GLint size, GLenum type, GLsizei stride, GLuint offset);
+	void glColorPointerOffset(GLint size, GLenum type, GLsizei stride, GLuint offset);
+	void glNormalPointerOffset(GLenum type, GLsizei stride, GLuint offset);
+	void glPointSizePointerOffset(GLenum type, GLsizei stride, GLuint offset);
+	void glTexCoordPointerOffset(GLint size, GLenum type, GLsizei stride, GLuint offset);
+	void glWeightPointerOffset(GLint size, GLenum type, GLsizei stride, GLuint offset);
+	void glMatrixIndexPointerOffset(GLint size, GLenum type, GLsizei stride, GLuint offset);
+	void glVertexPointerData(GLint size, GLenum type, GLsizei stride, void* data, GLuint datalen);
+	void glColorPointerData(GLint size, GLenum type, GLsizei stride, void* data, GLuint datalen);
+	void glNormalPointerData(GLenum type, GLsizei stride, void* data, GLuint datalen);
+	void glTexCoordPointerData(GLint unit, GLint size, GLenum type, GLsizei stride, void* data, GLuint datalen);
+	void glPointSizePointerData(GLenum type, GLsizei stride, void* data, GLuint datalen);
+	void glWeightPointerData(GLint size, GLenum type, GLsizei stride, void* data, GLuint datalen);
+	void glMatrixIndexPointerData(GLint size, GLenum type, GLsizei stride, void* data, GLuint datalen);
+	void glDrawElementsOffset(GLenum mode, GLsizei count, GLenum type, GLuint offset);
+	void glDrawElementsData(GLenum mode, GLsizei count, GLenum type, void* data, GLuint datalen);
+	void glGetCompressedTextureFormats(int count, GLint* formats);
+	int glFinishRoundTrip();
+	void glBlendEquationSeparateOES(GLenum modeRGB, GLenum modeAlpha);
+	void glBlendFuncSeparateOES(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+	void glBlendEquationOES(GLenum mode);
+	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 glEGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image);
+	void glEGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImageOES image);
+	void glAlphaFuncxOES(GLenum func, GLclampx ref);
+	void glClearColorxOES(GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha);
+	void glClearDepthxOES(GLclampx depth);
+	void glClipPlanexOES(GLenum plane, const GLfixed* equation);
+	void glClipPlanexIMG(GLenum plane, const GLfixed* equation);
+	void glColor4xOES(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
+	void glDepthRangexOES(GLclampx zNear, GLclampx zFar);
+	void glFogxOES(GLenum pname, GLfixed param);
+	void glFogxvOES(GLenum pname, const GLfixed* params);
+	void glFrustumxOES(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar);
+	void glGetClipPlanexOES(GLenum pname, GLfixed* eqn);
+	void glGetClipPlanex(GLenum pname, GLfixed* eqn);
+	void glGetFixedvOES(GLenum pname, GLfixed* params);
+	void glGetLightxvOES(GLenum light, GLenum pname, GLfixed* params);
+	void glGetMaterialxvOES(GLenum face, GLenum pname, GLfixed* params);
+	void glGetTexEnvxvOES(GLenum env, GLenum pname, GLfixed* params);
+	void glGetTexParameterxvOES(GLenum target, GLenum pname, GLfixed* params);
+	void glLightModelxOES(GLenum pname, GLfixed param);
+	void glLightModelxvOES(GLenum pname, const GLfixed* params);
+	void glLightxOES(GLenum light, GLenum pname, GLfixed param);
+	void glLightxvOES(GLenum light, GLenum pname, const GLfixed* params);
+	void glLineWidthxOES(GLfixed width);
+	void glLoadMatrixxOES(const GLfixed* m);
+	void glMaterialxOES(GLenum face, GLenum pname, GLfixed param);
+	void glMaterialxvOES(GLenum face, GLenum pname, const GLfixed* params);
+	void glMultMatrixxOES(const GLfixed* m);
+	void glMultiTexCoord4xOES(GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q);
+	void glNormal3xOES(GLfixed nx, GLfixed ny, GLfixed nz);
+	void glOrthoxOES(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar);
+	void glPointParameterxOES(GLenum pname, GLfixed param);
+	void glPointParameterxvOES(GLenum pname, const GLfixed* params);
+	void glPointSizexOES(GLfixed size);
+	void glPolygonOffsetxOES(GLfixed factor, GLfixed units);
+	void glRotatexOES(GLfixed angle, GLfixed x, GLfixed y, GLfixed z);
+	void glSampleCoveragexOES(GLclampx value, GLboolean invert);
+	void glScalexOES(GLfixed x, GLfixed y, GLfixed z);
+	void glTexEnvxOES(GLenum target, GLenum pname, GLfixed param);
+	void glTexEnvxvOES(GLenum target, GLenum pname, const GLfixed* params);
+	void glTexParameterxOES(GLenum target, GLenum pname, GLfixed param);
+	void glTexParameterxvOES(GLenum target, GLenum pname, const GLfixed* params);
+	void glTranslatexOES(GLfixed x, GLfixed y, GLfixed z);
+	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* glMapBufferOES(GLenum target, GLenum access);
+	GLboolean glUnmapBufferOES(GLenum target);
+	void glGetBufferPointervOES(GLenum target, GLenum pname, GLvoid** params);
+	void glCurrentPaletteMatrixOES(GLuint matrixpaletteindex);
+	void glLoadPaletteFromModelViewMatrixOES();
+	void glMatrixIndexPointerOES(GLint size, GLenum type, GLsizei stride, const GLvoid* pointer);
+	void glWeightPointerOES(GLint size, GLenum type, GLsizei stride, const GLvoid* pointer);
+	GLbitfield glQueryMatrixxOES(GLfixed* mantissa, GLint* exponent);
+	void glDepthRangefOES(GLclampf zNear, GLclampf zFar);
+	void glFrustumfOES(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar);
+	void glOrthofOES(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar);
+	void glClipPlanefOES(GLenum plane, const GLfloat* equation);
+	void glClipPlanefIMG(GLenum plane, const GLfloat* equation);
+	void glGetClipPlanefOES(GLenum pname, GLfloat* eqn);
+	void glClearDepthfOES(GLclampf depth);
+	void glTexGenfOES(GLenum coord, GLenum pname, GLfloat param);
+	void glTexGenfvOES(GLenum coord, GLenum pname, const GLfloat* params);
+	void glTexGeniOES(GLenum coord, GLenum pname, GLint param);
+	void glTexGenivOES(GLenum coord, GLenum pname, const GLint* params);
+	void glTexGenxOES(GLenum coord, GLenum pname, GLfixed param);
+	void glTexGenxvOES(GLenum coord, GLenum pname, const GLfixed* params);
+	void glGetTexGenfvOES(GLenum coord, GLenum pname, GLfloat* params);
+	void glGetTexGenivOES(GLenum coord, GLenum pname, GLint* params);
+	void glGetTexGenxvOES(GLenum coord, GLenum pname, GLfixed* params);
+	void glBindVertexArrayOES(GLuint array);
+	void glDeleteVertexArraysOES(GLsizei n, const GLuint* arrays);
+	void glGenVertexArraysOES(GLsizei n, GLuint* arrays);
+	GLboolean glIsVertexArrayOES(GLuint array);
+	void glDiscardFramebufferEXT(GLenum target, GLsizei numAttachments, const GLenum* attachments);
+	void glMultiDrawArraysEXT(GLenum mode, const GLint* first, const GLsizei* count, GLsizei primcount);
+	void glMultiDrawElementsEXT(GLenum mode, const GLsizei* count, GLenum type, const GLvoid* const* indices, GLsizei primcount);
+	void glMultiDrawArraysSUN(GLenum mode, GLint* first, GLsizei* count, GLsizei primcount);
+	void glMultiDrawElementsSUN(GLenum mode, const GLsizei* count, GLenum type, const GLvoid** indices, GLsizei primcount);
+	void glRenderbufferStorageMultisampleIMG(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+	void glFramebufferTexture2DMultisampleIMG(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples);
+	void glDeleteFencesNV(GLsizei n, const GLuint* fences);
+	void glGenFencesNV(GLsizei n, GLuint* fences);
+	GLboolean glIsFenceNV(GLuint fence);
+	GLboolean glTestFenceNV(GLuint fence);
+	void glGetFenceivNV(GLuint fence, GLenum pname, GLint* params);
+	void glFinishFenceNV(GLuint fence);
+	void glSetFenceNV(GLuint fence, GLenum condition);
+	void glGetDriverControlsQCOM(GLint* num, GLsizei size, GLuint* driverControls);
+	void glGetDriverControlStringQCOM(GLuint driverControl, GLsizei bufSize, GLsizei* length, GLchar* driverControlString);
+	void glEnableDriverControlQCOM(GLuint driverControl);
+	void glDisableDriverControlQCOM(GLuint driverControl);
+	void glExtGetTexturesQCOM(GLuint* textures, GLint maxTextures, GLint* numTextures);
+	void glExtGetBuffersQCOM(GLuint* buffers, GLint maxBuffers, GLint* numBuffers);
+	void glExtGetRenderbuffersQCOM(GLuint* renderbuffers, GLint maxRenderbuffers, GLint* numRenderbuffers);
+	void glExtGetFramebuffersQCOM(GLuint* framebuffers, GLint maxFramebuffers, GLint* numFramebuffers);
+	void glExtGetTexLevelParameterivQCOM(GLuint texture, GLenum face, GLint level, GLenum pname, GLint* params);
+	void glExtTexObjectStateOverrideiQCOM(GLenum target, GLenum pname, GLint param);
+	void glExtGetTexSubImageQCOM(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid* texels);
+	void glExtGetBufferPointervQCOM(GLenum target, GLvoid** params);
+	void glExtGetShadersQCOM(GLuint* shaders, GLint maxShaders, GLint* numShaders);
+	void glExtGetProgramsQCOM(GLuint* programs, GLint maxPrograms, GLint* numPrograms);
+	GLboolean glExtIsProgramBinaryQCOM(GLuint program);
+	void glExtGetProgramBinarySourceQCOM(GLuint program, GLenum shadertype, GLchar* source, GLint* length);
+	void glStartTilingQCOM(GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask);
+	void glEndTilingQCOM(GLbitfield preserveMask);
+};
+
+#ifndef GET_CONTEXT
+static gles1_wrapper_context_t::CONTEXT_ACCESSOR_TYPE *getCurrentContext = NULL;
+void gles1_wrapper_context_t::setContextAccessor(CONTEXT_ACCESSOR_TYPE *f) { getCurrentContext = f; }
+#define GET_CONTEXT gles1_wrapper_context_t * ctx = getCurrentContext()
+#endif
+
+void glAlphaFunc(GLenum func, GLclampf ref)
+{
+	GET_CONTEXT;
+	ctx->glAlphaFunc( func, ref);
+}
+
+void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
+{
+	GET_CONTEXT;
+	ctx->glClearColor( red, green, blue, alpha);
+}
+
+void glClearDepthf(GLclampf depth)
+{
+	GET_CONTEXT;
+	ctx->glClearDepthf( depth);
+}
+
+void glClipPlanef(GLenum plane, const GLfloat* equation)
+{
+	GET_CONTEXT;
+	ctx->glClipPlanef( plane, equation);
+}
+
+void glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
+{
+	GET_CONTEXT;
+	ctx->glColor4f( red, green, blue, alpha);
+}
+
+void glDepthRangef(GLclampf zNear, GLclampf zFar)
+{
+	GET_CONTEXT;
+	ctx->glDepthRangef( zNear, zFar);
+}
+
+void glFogf(GLenum pname, GLfloat param)
+{
+	GET_CONTEXT;
+	ctx->glFogf( pname, param);
+}
+
+void glFogfv(GLenum pname, const GLfloat* params)
+{
+	GET_CONTEXT;
+	ctx->glFogfv( pname, params);
+}
+
+void glFrustumf(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)
+{
+	GET_CONTEXT;
+	ctx->glFrustumf( left, right, bottom, top, zNear, zFar);
+}
+
+void glGetClipPlanef(GLenum pname, GLfloat* eqn)
+{
+	GET_CONTEXT;
+	ctx->glGetClipPlanef( pname, eqn);
+}
+
+void glGetFloatv(GLenum pname, GLfloat* params)
+{
+	GET_CONTEXT;
+	ctx->glGetFloatv( pname, params);
+}
+
+void glGetLightfv(GLenum light, GLenum pname, GLfloat* params)
+{
+	GET_CONTEXT;
+	ctx->glGetLightfv( light, pname, params);
+}
+
+void glGetMaterialfv(GLenum face, GLenum pname, GLfloat* params)
+{
+	GET_CONTEXT;
+	ctx->glGetMaterialfv( face, pname, params);
+}
+
+void glGetTexEnvfv(GLenum env, GLenum pname, GLfloat* params)
+{
+	GET_CONTEXT;
+	ctx->glGetTexEnvfv( env, pname, params);
+}
+
+void glGetTexParameterfv(GLenum target, GLenum pname, GLfloat* params)
+{
+	GET_CONTEXT;
+	ctx->glGetTexParameterfv( target, pname, params);
+}
+
+void glLightModelf(GLenum pname, GLfloat param)
+{
+	GET_CONTEXT;
+	ctx->glLightModelf( pname, param);
+}
+
+void glLightModelfv(GLenum pname, const GLfloat* params)
+{
+	GET_CONTEXT;
+	ctx->glLightModelfv( pname, params);
+}
+
+void glLightf(GLenum light, GLenum pname, GLfloat param)
+{
+	GET_CONTEXT;
+	ctx->glLightf( light, pname, param);
+}
+
+void glLightfv(GLenum light, GLenum pname, const GLfloat* params)
+{
+	GET_CONTEXT;
+	ctx->glLightfv( light, pname, params);
+}
+
+void glLineWidth(GLfloat width)
+{
+	GET_CONTEXT;
+	ctx->glLineWidth( width);
+}
+
+void glLoadMatrixf(const GLfloat* m)
+{
+	GET_CONTEXT;
+	ctx->glLoadMatrixf( m);
+}
+
+void glMaterialf(GLenum face, GLenum pname, GLfloat param)
+{
+	GET_CONTEXT;
+	ctx->glMaterialf( face, pname, param);
+}
+
+void glMaterialfv(GLenum face, GLenum pname, const GLfloat* params)
+{
+	GET_CONTEXT;
+	ctx->glMaterialfv( face, pname, params);
+}
+
+void glMultMatrixf(const GLfloat* m)
+{
+	GET_CONTEXT;
+	ctx->glMultMatrixf( m);
+}
+
+void glMultiTexCoord4f(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q)
+{
+	GET_CONTEXT;
+	ctx->glMultiTexCoord4f( target, s, t, r, q);
+}
+
+void glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz)
+{
+	GET_CONTEXT;
+	ctx->glNormal3f( nx, ny, nz);
+}
+
+void glOrthof(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)
+{
+	GET_CONTEXT;
+	ctx->glOrthof( left, right, bottom, top, zNear, zFar);
+}
+
+void glPointParameterf(GLenum pname, GLfloat param)
+{
+	GET_CONTEXT;
+	ctx->glPointParameterf( pname, param);
+}
+
+void glPointParameterfv(GLenum pname, const GLfloat* params)
+{
+	GET_CONTEXT;
+	ctx->glPointParameterfv( pname, params);
+}
+
+void glPointSize(GLfloat size)
+{
+	GET_CONTEXT;
+	ctx->glPointSize( size);
+}
+
+void glPolygonOffset(GLfloat factor, GLfloat units)
+{
+	GET_CONTEXT;
+	ctx->glPolygonOffset( factor, units);
+}
+
+void glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z)
+{
+	GET_CONTEXT;
+	ctx->glRotatef( angle, x, y, z);
+}
+
+void glScalef(GLfloat x, GLfloat y, GLfloat z)
+{
+	GET_CONTEXT;
+	ctx->glScalef( x, y, z);
+}
+
+void glTexEnvf(GLenum target, GLenum pname, GLfloat param)
+{
+	GET_CONTEXT;
+	ctx->glTexEnvf( target, pname, param);
+}
+
+void glTexEnvfv(GLenum target, GLenum pname, const GLfloat* params)
+{
+	GET_CONTEXT;
+	ctx->glTexEnvfv( target, pname, params);
+}
+
+void glTexParameterf(GLenum target, GLenum pname, GLfloat param)
+{
+	GET_CONTEXT;
+	ctx->glTexParameterf( target, pname, param);
+}
+
+void glTexParameterfv(GLenum target, GLenum pname, const GLfloat* params)
+{
+	GET_CONTEXT;
+	ctx->glTexParameterfv( target, pname, params);
+}
+
+void glTranslatef(GLfloat x, GLfloat y, GLfloat z)
+{
+	GET_CONTEXT;
+	ctx->glTranslatef( x, y, z);
+}
+
+void glActiveTexture(GLenum texture)
+{
+	GET_CONTEXT;
+	ctx->glActiveTexture( texture);
+}
+
+void glAlphaFuncx(GLenum func, GLclampx ref)
+{
+	GET_CONTEXT;
+	ctx->glAlphaFuncx( func, ref);
+}
+
+void glBindBuffer(GLenum target, GLuint buffer)
+{
+	GET_CONTEXT;
+	ctx->glBindBuffer( target, buffer);
+}
+
+void glBindTexture(GLenum target, GLuint texture)
+{
+	GET_CONTEXT;
+	ctx->glBindTexture( target, texture);
+}
+
+void glBlendFunc(GLenum sfactor, GLenum dfactor)
+{
+	GET_CONTEXT;
+	ctx->glBlendFunc( sfactor, dfactor);
+}
+
+void glBufferData(GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage)
+{
+	GET_CONTEXT;
+	ctx->glBufferData( target, size, data, usage);
+}
+
+void glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data)
+{
+	GET_CONTEXT;
+	ctx->glBufferSubData( target, offset, size, data);
+}
+
+void glClear(GLbitfield mask)
+{
+	GET_CONTEXT;
+	ctx->glClear( mask);
+}
+
+void glClearColorx(GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha)
+{
+	GET_CONTEXT;
+	ctx->glClearColorx( red, green, blue, alpha);
+}
+
+void glClearDepthx(GLclampx depth)
+{
+	GET_CONTEXT;
+	ctx->glClearDepthx( depth);
+}
+
+void glClearStencil(GLint s)
+{
+	GET_CONTEXT;
+	ctx->glClearStencil( s);
+}
+
+void glClientActiveTexture(GLenum texture)
+{
+	GET_CONTEXT;
+	ctx->glClientActiveTexture( texture);
+}
+
+void glColor4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha)
+{
+	GET_CONTEXT;
+	ctx->glColor4ub( red, green, blue, alpha);
+}
+
+void glColor4x(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha)
+{
+	GET_CONTEXT;
+	ctx->glColor4x( red, green, blue, alpha);
+}
+
+void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
+{
+	GET_CONTEXT;
+	ctx->glColorMask( red, green, blue, alpha);
+}
+
+void glColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid* pointer)
+{
+	GET_CONTEXT;
+	ctx->glColorPointer( size, type, stride, pointer);
+}
+
+void glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data)
+{
+	GET_CONTEXT;
+	ctx->glCompressedTexImage2D( target, level, internalformat, width, height, border, imageSize, data);
+}
+
+void glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data)
+{
+	GET_CONTEXT;
+	ctx->glCompressedTexSubImage2D( target, level, xoffset, yoffset, width, height, format, imageSize, data);
+}
+
+void glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
+{
+	GET_CONTEXT;
+	ctx->glCopyTexImage2D( target, level, internalformat, x, y, width, height, border);
+}
+
+void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+{
+	GET_CONTEXT;
+	ctx->glCopyTexSubImage2D( target, level, xoffset, yoffset, x, y, width, height);
+}
+
+void glCullFace(GLenum mode)
+{
+	GET_CONTEXT;
+	ctx->glCullFace( mode);
+}
+
+void glDeleteBuffers(GLsizei n, const GLuint* buffers)
+{
+	GET_CONTEXT;
+	ctx->glDeleteBuffers( n, buffers);
+}
+
+void glDeleteTextures(GLsizei n, const GLuint* textures)
+{
+	GET_CONTEXT;
+	ctx->glDeleteTextures( n, textures);
+}
+
+void glDepthFunc(GLenum func)
+{
+	GET_CONTEXT;
+	ctx->glDepthFunc( func);
+}
+
+void glDepthMask(GLboolean flag)
+{
+	GET_CONTEXT;
+	ctx->glDepthMask( flag);
+}
+
+void glDepthRangex(GLclampx zNear, GLclampx zFar)
+{
+	GET_CONTEXT;
+	ctx->glDepthRangex( zNear, zFar);
+}
+
+void glDisable(GLenum cap)
+{
+	GET_CONTEXT;
+	ctx->glDisable( cap);
+}
+
+void glDisableClientState(GLenum array)
+{
+	GET_CONTEXT;
+	ctx->glDisableClientState( array);
+}
+
+void glDrawArrays(GLenum mode, GLint first, GLsizei count)
+{
+	GET_CONTEXT;
+	ctx->glDrawArrays( mode, first, count);
+}
+
+void glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices)
+{
+	GET_CONTEXT;
+	ctx->glDrawElements( mode, count, type, indices);
+}
+
+void glEnable(GLenum cap)
+{
+	GET_CONTEXT;
+	ctx->glEnable( cap);
+}
+
+void glEnableClientState(GLenum array)
+{
+	GET_CONTEXT;
+	ctx->glEnableClientState( array);
+}
+
+void glFinish()
+{
+	GET_CONTEXT;
+	ctx->glFinish();
+}
+
+void glFlush()
+{
+	GET_CONTEXT;
+	ctx->glFlush();
+}
+
+void glFogx(GLenum pname, GLfixed param)
+{
+	GET_CONTEXT;
+	ctx->glFogx( pname, param);
+}
+
+void glFogxv(GLenum pname, const GLfixed* params)
+{
+	GET_CONTEXT;
+	ctx->glFogxv( pname, params);
+}
+
+void glFrontFace(GLenum mode)
+{
+	GET_CONTEXT;
+	ctx->glFrontFace( mode);
+}
+
+void glFrustumx(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar)
+{
+	GET_CONTEXT;
+	ctx->glFrustumx( left, right, bottom, top, zNear, zFar);
+}
+
+void glGetBooleanv(GLenum pname, GLboolean* params)
+{
+	GET_CONTEXT;
+	ctx->glGetBooleanv( pname, params);
+}
+
+void glGetBufferParameteriv(GLenum target, GLenum pname, GLint* params)
+{
+	GET_CONTEXT;
+	ctx->glGetBufferParameteriv( target, pname, params);
+}
+
+void glClipPlanex(GLenum pname, const GLfixed* eqn)
+{
+	GET_CONTEXT;
+	ctx->glClipPlanex( pname, eqn);
+}
+
+void glGenBuffers(GLsizei n, GLuint* buffers)
+{
+	GET_CONTEXT;
+	ctx->glGenBuffers( n, buffers);
+}
+
+void glGenTextures(GLsizei n, GLuint* textures)
+{
+	GET_CONTEXT;
+	ctx->glGenTextures( n, textures);
+}
+
+GLenum glGetError()
+{
+	GET_CONTEXT;
+	return ctx->glGetError();
+}
+
+void glGetFixedv(GLenum pname, GLfixed* params)
+{
+	GET_CONTEXT;
+	ctx->glGetFixedv( pname, params);
+}
+
+void glGetIntegerv(GLenum pname, GLint* params)
+{
+	GET_CONTEXT;
+	ctx->glGetIntegerv( pname, params);
+}
+
+void glGetLightxv(GLenum light, GLenum pname, GLfixed* params)
+{
+	GET_CONTEXT;
+	ctx->glGetLightxv( light, pname, params);
+}
+
+void glGetMaterialxv(GLenum face, GLenum pname, GLfixed* params)
+{
+	GET_CONTEXT;
+	ctx->glGetMaterialxv( face, pname, params);
+}
+
+void glGetPointerv(GLenum pname, GLvoid** params)
+{
+	GET_CONTEXT;
+	ctx->glGetPointerv( pname, params);
+}
+
+const GLubyte* glGetString(GLenum name)
+{
+	GET_CONTEXT;
+	return ctx->glGetString( name);
+}
+
+void glGetTexEnviv(GLenum env, GLenum pname, GLint* params)
+{
+	GET_CONTEXT;
+	ctx->glGetTexEnviv( env, pname, params);
+}
+
+void glGetTexEnvxv(GLenum env, GLenum pname, GLfixed* params)
+{
+	GET_CONTEXT;
+	ctx->glGetTexEnvxv( env, pname, params);
+}
+
+void glGetTexParameteriv(GLenum target, GLenum pname, GLint* params)
+{
+	GET_CONTEXT;
+	ctx->glGetTexParameteriv( target, pname, params);
+}
+
+void glGetTexParameterxv(GLenum target, GLenum pname, GLfixed* params)
+{
+	GET_CONTEXT;
+	ctx->glGetTexParameterxv( target, pname, params);
+}
+
+void glHint(GLenum target, GLenum mode)
+{
+	GET_CONTEXT;
+	ctx->glHint( target, mode);
+}
+
+GLboolean glIsBuffer(GLuint buffer)
+{
+	GET_CONTEXT;
+	return ctx->glIsBuffer( buffer);
+}
+
+GLboolean glIsEnabled(GLenum cap)
+{
+	GET_CONTEXT;
+	return ctx->glIsEnabled( cap);
+}
+
+GLboolean glIsTexture(GLuint texture)
+{
+	GET_CONTEXT;
+	return ctx->glIsTexture( texture);
+}
+
+void glLightModelx(GLenum pname, GLfixed param)
+{
+	GET_CONTEXT;
+	ctx->glLightModelx( pname, param);
+}
+
+void glLightModelxv(GLenum pname, const GLfixed* params)
+{
+	GET_CONTEXT;
+	ctx->glLightModelxv( pname, params);
+}
+
+void glLightx(GLenum light, GLenum pname, GLfixed param)
+{
+	GET_CONTEXT;
+	ctx->glLightx( light, pname, param);
+}
+
+void glLightxv(GLenum light, GLenum pname, const GLfixed* params)
+{
+	GET_CONTEXT;
+	ctx->glLightxv( light, pname, params);
+}
+
+void glLineWidthx(GLfixed width)
+{
+	GET_CONTEXT;
+	ctx->glLineWidthx( width);
+}
+
+void glLoadIdentity()
+{
+	GET_CONTEXT;
+	ctx->glLoadIdentity();
+}
+
+void glLoadMatrixx(const GLfixed* m)
+{
+	GET_CONTEXT;
+	ctx->glLoadMatrixx( m);
+}
+
+void glLogicOp(GLenum opcode)
+{
+	GET_CONTEXT;
+	ctx->glLogicOp( opcode);
+}
+
+void glMaterialx(GLenum face, GLenum pname, GLfixed param)
+{
+	GET_CONTEXT;
+	ctx->glMaterialx( face, pname, param);
+}
+
+void glMaterialxv(GLenum face, GLenum pname, const GLfixed* params)
+{
+	GET_CONTEXT;
+	ctx->glMaterialxv( face, pname, params);
+}
+
+void glMatrixMode(GLenum mode)
+{
+	GET_CONTEXT;
+	ctx->glMatrixMode( mode);
+}
+
+void glMultMatrixx(const GLfixed* m)
+{
+	GET_CONTEXT;
+	ctx->glMultMatrixx( m);
+}
+
+void glMultiTexCoord4x(GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q)
+{
+	GET_CONTEXT;
+	ctx->glMultiTexCoord4x( target, s, t, r, q);
+}
+
+void glNormal3x(GLfixed nx, GLfixed ny, GLfixed nz)
+{
+	GET_CONTEXT;
+	ctx->glNormal3x( nx, ny, nz);
+}
+
+void glNormalPointer(GLenum type, GLsizei stride, const GLvoid* pointer)
+{
+	GET_CONTEXT;
+	ctx->glNormalPointer( type, stride, pointer);
+}
+
+void glOrthox(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar)
+{
+	GET_CONTEXT;
+	ctx->glOrthox( left, right, bottom, top, zNear, zFar);
+}
+
+void glPixelStorei(GLenum pname, GLint param)
+{
+	GET_CONTEXT;
+	ctx->glPixelStorei( pname, param);
+}
+
+void glPointParameterx(GLenum pname, GLfixed param)
+{
+	GET_CONTEXT;
+	ctx->glPointParameterx( pname, param);
+}
+
+void glPointParameterxv(GLenum pname, const GLfixed* params)
+{
+	GET_CONTEXT;
+	ctx->glPointParameterxv( pname, params);
+}
+
+void glPointSizex(GLfixed size)
+{
+	GET_CONTEXT;
+	ctx->glPointSizex( size);
+}
+
+void glPolygonOffsetx(GLfixed factor, GLfixed units)
+{
+	GET_CONTEXT;
+	ctx->glPolygonOffsetx( factor, units);
+}
+
+void glPopMatrix()
+{
+	GET_CONTEXT;
+	ctx->glPopMatrix();
+}
+
+void glPushMatrix()
+{
+	GET_CONTEXT;
+	ctx->glPushMatrix();
+}
+
+void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels)
+{
+	GET_CONTEXT;
+	ctx->glReadPixels( x, y, width, height, format, type, pixels);
+}
+
+void glRotatex(GLfixed angle, GLfixed x, GLfixed y, GLfixed z)
+{
+	GET_CONTEXT;
+	ctx->glRotatex( angle, x, y, z);
+}
+
+void glSampleCoverage(GLclampf value, GLboolean invert)
+{
+	GET_CONTEXT;
+	ctx->glSampleCoverage( value, invert);
+}
+
+void glSampleCoveragex(GLclampx value, GLboolean invert)
+{
+	GET_CONTEXT;
+	ctx->glSampleCoveragex( value, invert);
+}
+
+void glScalex(GLfixed x, GLfixed y, GLfixed z)
+{
+	GET_CONTEXT;
+	ctx->glScalex( x, y, z);
+}
+
+void glScissor(GLint x, GLint y, GLsizei width, GLsizei height)
+{
+	GET_CONTEXT;
+	ctx->glScissor( x, y, width, height);
+}
+
+void glShadeModel(GLenum mode)
+{
+	GET_CONTEXT;
+	ctx->glShadeModel( mode);
+}
+
+void glStencilFunc(GLenum func, GLint ref, GLuint mask)
+{
+	GET_CONTEXT;
+	ctx->glStencilFunc( func, ref, mask);
+}
+
+void glStencilMask(GLuint mask)
+{
+	GET_CONTEXT;
+	ctx->glStencilMask( mask);
+}
+
+void glStencilOp(GLenum fail, GLenum zfail, GLenum zpass)
+{
+	GET_CONTEXT;
+	ctx->glStencilOp( fail, zfail, zpass);
+}
+
+void glTexCoordPointer(GLint size, GLenum type, GLsizei stride, const GLvoid* pointer)
+{
+	GET_CONTEXT;
+	ctx->glTexCoordPointer( size, type, stride, pointer);
+}
+
+void glTexEnvi(GLenum target, GLenum pname, GLint param)
+{
+	GET_CONTEXT;
+	ctx->glTexEnvi( target, pname, param);
+}
+
+void glTexEnvx(GLenum target, GLenum pname, GLfixed param)
+{
+	GET_CONTEXT;
+	ctx->glTexEnvx( target, pname, param);
+}
+
+void glTexEnviv(GLenum target, GLenum pname, const GLint* params)
+{
+	GET_CONTEXT;
+	ctx->glTexEnviv( target, pname, params);
+}
+
+void glTexEnvxv(GLenum target, GLenum pname, const GLfixed* params)
+{
+	GET_CONTEXT;
+	ctx->glTexEnvxv( target, pname, params);
+}
+
+void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels)
+{
+	GET_CONTEXT;
+	ctx->glTexImage2D( target, level, internalformat, width, height, border, format, type, pixels);
+}
+
+void glTexParameteri(GLenum target, GLenum pname, GLint param)
+{
+	GET_CONTEXT;
+	ctx->glTexParameteri( target, pname, param);
+}
+
+void glTexParameterx(GLenum target, GLenum pname, GLfixed param)
+{
+	GET_CONTEXT;
+	ctx->glTexParameterx( target, pname, param);
+}
+
+void glTexParameteriv(GLenum target, GLenum pname, const GLint* params)
+{
+	GET_CONTEXT;
+	ctx->glTexParameteriv( target, pname, params);
+}
+
+void glTexParameterxv(GLenum target, GLenum pname, const GLfixed* params)
+{
+	GET_CONTEXT;
+	ctx->glTexParameterxv( target, pname, params);
+}
+
+void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels)
+{
+	GET_CONTEXT;
+	ctx->glTexSubImage2D( target, level, xoffset, yoffset, width, height, format, type, pixels);
+}
+
+void glTranslatex(GLfixed x, GLfixed y, GLfixed z)
+{
+	GET_CONTEXT;
+	ctx->glTranslatex( x, y, z);
+}
+
+void glVertexPointer(GLint size, GLenum type, GLsizei stride, const GLvoid* pointer)
+{
+	GET_CONTEXT;
+	ctx->glVertexPointer( size, type, stride, pointer);
+}
+
+void glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
+{
+	GET_CONTEXT;
+	ctx->glViewport( x, y, width, height);
+}
+
+void glPointSizePointerOES(GLenum type, GLsizei stride, const GLvoid* pointer)
+{
+	GET_CONTEXT;
+	ctx->glPointSizePointerOES( type, stride, pointer);
+}
+
+void glVertexPointerOffset(GLint size, GLenum type, GLsizei stride, GLuint offset)
+{
+	GET_CONTEXT;
+	ctx->glVertexPointerOffset( size, type, stride, offset);
+}
+
+void glColorPointerOffset(GLint size, GLenum type, GLsizei stride, GLuint offset)
+{
+	GET_CONTEXT;
+	ctx->glColorPointerOffset( size, type, stride, offset);
+}
+
+void glNormalPointerOffset(GLenum type, GLsizei stride, GLuint offset)
+{
+	GET_CONTEXT;
+	ctx->glNormalPointerOffset( type, stride, offset);
+}
+
+void glPointSizePointerOffset(GLenum type, GLsizei stride, GLuint offset)
+{
+	GET_CONTEXT;
+	ctx->glPointSizePointerOffset( type, stride, offset);
+}
+
+void glTexCoordPointerOffset(GLint size, GLenum type, GLsizei stride, GLuint offset)
+{
+	GET_CONTEXT;
+	ctx->glTexCoordPointerOffset( size, type, stride, offset);
+}
+
+void glWeightPointerOffset(GLint size, GLenum type, GLsizei stride, GLuint offset)
+{
+	GET_CONTEXT;
+	ctx->glWeightPointerOffset( size, type, stride, offset);
+}
+
+void glMatrixIndexPointerOffset(GLint size, GLenum type, GLsizei stride, GLuint offset)
+{
+	GET_CONTEXT;
+	ctx->glMatrixIndexPointerOffset( size, type, stride, offset);
+}
+
+void glVertexPointerData(GLint size, GLenum type, GLsizei stride, void* data, GLuint datalen)
+{
+	GET_CONTEXT;
+	ctx->glVertexPointerData( size, type, stride, data, datalen);
+}
+
+void glColorPointerData(GLint size, GLenum type, GLsizei stride, void* data, GLuint datalen)
+{
+	GET_CONTEXT;
+	ctx->glColorPointerData( size, type, stride, data, datalen);
+}
+
+void glNormalPointerData(GLenum type, GLsizei stride, void* data, GLuint datalen)
+{
+	GET_CONTEXT;
+	ctx->glNormalPointerData( type, stride, data, datalen);
+}
+
+void glTexCoordPointerData(GLint unit, GLint size, GLenum type, GLsizei stride, void* data, GLuint datalen)
+{
+	GET_CONTEXT;
+	ctx->glTexCoordPointerData( unit, size, type, stride, data, datalen);
+}
+
+void glPointSizePointerData(GLenum type, GLsizei stride, void* data, GLuint datalen)
+{
+	GET_CONTEXT;
+	ctx->glPointSizePointerData( type, stride, data, datalen);
+}
+
+void glWeightPointerData(GLint size, GLenum type, GLsizei stride, void* data, GLuint datalen)
+{
+	GET_CONTEXT;
+	ctx->glWeightPointerData( size, type, stride, data, datalen);
+}
+
+void glMatrixIndexPointerData(GLint size, GLenum type, GLsizei stride, void* data, GLuint datalen)
+{
+	GET_CONTEXT;
+	ctx->glMatrixIndexPointerData( size, type, stride, data, datalen);
+}
+
+void glDrawElementsOffset(GLenum mode, GLsizei count, GLenum type, GLuint offset)
+{
+	GET_CONTEXT;
+	ctx->glDrawElementsOffset( mode, count, type, offset);
+}
+
+void glDrawElementsData(GLenum mode, GLsizei count, GLenum type, void* data, GLuint datalen)
+{
+	GET_CONTEXT;
+	ctx->glDrawElementsData( mode, count, type, data, datalen);
+}
+
+void glGetCompressedTextureFormats(int count, GLint* formats)
+{
+	GET_CONTEXT;
+	ctx->glGetCompressedTextureFormats( count, formats);
+}
+
+int glFinishRoundTrip()
+{
+	GET_CONTEXT;
+	return ctx->glFinishRoundTrip();
+}
+
+void glBlendEquationSeparateOES(GLenum modeRGB, GLenum modeAlpha)
+{
+	GET_CONTEXT;
+	ctx->glBlendEquationSeparateOES( modeRGB, modeAlpha);
+}
+
+void glBlendFuncSeparateOES(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
+{
+	GET_CONTEXT;
+	ctx->glBlendFuncSeparateOES( srcRGB, dstRGB, srcAlpha, dstAlpha);
+}
+
+void glBlendEquationOES(GLenum mode)
+{
+	GET_CONTEXT;
+	ctx->glBlendEquationOES( mode);
+}
+
+void glDrawTexsOES(GLshort x, GLshort y, GLshort z, GLshort width, GLshort height)
+{
+	GET_CONTEXT;
+	ctx->glDrawTexsOES( x, y, z, width, height);
+}
+
+void glDrawTexiOES(GLint x, GLint y, GLint z, GLint width, GLint height)
+{
+	GET_CONTEXT;
+	ctx->glDrawTexiOES( x, y, z, width, height);
+}
+
+void glDrawTexxOES(GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height)
+{
+	GET_CONTEXT;
+	ctx->glDrawTexxOES( x, y, z, width, height);
+}
+
+void glDrawTexsvOES(const GLshort* coords)
+{
+	GET_CONTEXT;
+	ctx->glDrawTexsvOES( coords);
+}
+
+void glDrawTexivOES(const GLint* coords)
+{
+	GET_CONTEXT;
+	ctx->glDrawTexivOES( coords);
+}
+
+void glDrawTexxvOES(const GLfixed* coords)
+{
+	GET_CONTEXT;
+	ctx->glDrawTexxvOES( coords);
+}
+
+void glDrawTexfOES(GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height)
+{
+	GET_CONTEXT;
+	ctx->glDrawTexfOES( x, y, z, width, height);
+}
+
+void glDrawTexfvOES(const GLfloat* coords)
+{
+	GET_CONTEXT;
+	ctx->glDrawTexfvOES( coords);
+}
+
+void glEGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image)
+{
+	GET_CONTEXT;
+	ctx->glEGLImageTargetTexture2DOES( target, image);
+}
+
+void glEGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImageOES image)
+{
+	GET_CONTEXT;
+	ctx->glEGLImageTargetRenderbufferStorageOES( target, image);
+}
+
+void glAlphaFuncxOES(GLenum func, GLclampx ref)
+{
+	GET_CONTEXT;
+	ctx->glAlphaFuncxOES( func, ref);
+}
+
+void glClearColorxOES(GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha)
+{
+	GET_CONTEXT;
+	ctx->glClearColorxOES( red, green, blue, alpha);
+}
+
+void glClearDepthxOES(GLclampx depth)
+{
+	GET_CONTEXT;
+	ctx->glClearDepthxOES( depth);
+}
+
+void glClipPlanexOES(GLenum plane, const GLfixed* equation)
+{
+	GET_CONTEXT;
+	ctx->glClipPlanexOES( plane, equation);
+}
+
+void glClipPlanexIMG(GLenum plane, const GLfixed* equation)
+{
+	GET_CONTEXT;
+	ctx->glClipPlanexIMG( plane, equation);
+}
+
+void glColor4xOES(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha)
+{
+	GET_CONTEXT;
+	ctx->glColor4xOES( red, green, blue, alpha);
+}
+
+void glDepthRangexOES(GLclampx zNear, GLclampx zFar)
+{
+	GET_CONTEXT;
+	ctx->glDepthRangexOES( zNear, zFar);
+}
+
+void glFogxOES(GLenum pname, GLfixed param)
+{
+	GET_CONTEXT;
+	ctx->glFogxOES( pname, param);
+}
+
+void glFogxvOES(GLenum pname, const GLfixed* params)
+{
+	GET_CONTEXT;
+	ctx->glFogxvOES( pname, params);
+}
+
+void glFrustumxOES(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar)
+{
+	GET_CONTEXT;
+	ctx->glFrustumxOES( left, right, bottom, top, zNear, zFar);
+}
+
+void glGetClipPlanexOES(GLenum pname, GLfixed* eqn)
+{
+	GET_CONTEXT;
+	ctx->glGetClipPlanexOES( pname, eqn);
+}
+
+void glGetClipPlanex(GLenum pname, GLfixed* eqn)
+{
+	GET_CONTEXT;
+	ctx->glGetClipPlanex( pname, eqn);
+}
+
+void glGetFixedvOES(GLenum pname, GLfixed* params)
+{
+	GET_CONTEXT;
+	ctx->glGetFixedvOES( pname, params);
+}
+
+void glGetLightxvOES(GLenum light, GLenum pname, GLfixed* params)
+{
+	GET_CONTEXT;
+	ctx->glGetLightxvOES( light, pname, params);
+}
+
+void glGetMaterialxvOES(GLenum face, GLenum pname, GLfixed* params)
+{
+	GET_CONTEXT;
+	ctx->glGetMaterialxvOES( face, pname, params);
+}
+
+void glGetTexEnvxvOES(GLenum env, GLenum pname, GLfixed* params)
+{
+	GET_CONTEXT;
+	ctx->glGetTexEnvxvOES( env, pname, params);
+}
+
+void glGetTexParameterxvOES(GLenum target, GLenum pname, GLfixed* params)
+{
+	GET_CONTEXT;
+	ctx->glGetTexParameterxvOES( target, pname, params);
+}
+
+void glLightModelxOES(GLenum pname, GLfixed param)
+{
+	GET_CONTEXT;
+	ctx->glLightModelxOES( pname, param);
+}
+
+void glLightModelxvOES(GLenum pname, const GLfixed* params)
+{
+	GET_CONTEXT;
+	ctx->glLightModelxvOES( pname, params);
+}
+
+void glLightxOES(GLenum light, GLenum pname, GLfixed param)
+{
+	GET_CONTEXT;
+	ctx->glLightxOES( light, pname, param);
+}
+
+void glLightxvOES(GLenum light, GLenum pname, const GLfixed* params)
+{
+	GET_CONTEXT;
+	ctx->glLightxvOES( light, pname, params);
+}
+
+void glLineWidthxOES(GLfixed width)
+{
+	GET_CONTEXT;
+	ctx->glLineWidthxOES( width);
+}
+
+void glLoadMatrixxOES(const GLfixed* m)
+{
+	GET_CONTEXT;
+	ctx->glLoadMatrixxOES( m);
+}
+
+void glMaterialxOES(GLenum face, GLenum pname, GLfixed param)
+{
+	GET_CONTEXT;
+	ctx->glMaterialxOES( face, pname, param);
+}
+
+void glMaterialxvOES(GLenum face, GLenum pname, const GLfixed* params)
+{
+	GET_CONTEXT;
+	ctx->glMaterialxvOES( face, pname, params);
+}
+
+void glMultMatrixxOES(const GLfixed* m)
+{
+	GET_CONTEXT;
+	ctx->glMultMatrixxOES( m);
+}
+
+void glMultiTexCoord4xOES(GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q)
+{
+	GET_CONTEXT;
+	ctx->glMultiTexCoord4xOES( target, s, t, r, q);
+}
+
+void glNormal3xOES(GLfixed nx, GLfixed ny, GLfixed nz)
+{
+	GET_CONTEXT;
+	ctx->glNormal3xOES( nx, ny, nz);
+}
+
+void glOrthoxOES(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar)
+{
+	GET_CONTEXT;
+	ctx->glOrthoxOES( left, right, bottom, top, zNear, zFar);
+}
+
+void glPointParameterxOES(GLenum pname, GLfixed param)
+{
+	GET_CONTEXT;
+	ctx->glPointParameterxOES( pname, param);
+}
+
+void glPointParameterxvOES(GLenum pname, const GLfixed* params)
+{
+	GET_CONTEXT;
+	ctx->glPointParameterxvOES( pname, params);
+}
+
+void glPointSizexOES(GLfixed size)
+{
+	GET_CONTEXT;
+	ctx->glPointSizexOES( size);
+}
+
+void glPolygonOffsetxOES(GLfixed factor, GLfixed units)
+{
+	GET_CONTEXT;
+	ctx->glPolygonOffsetxOES( factor, units);
+}
+
+void glRotatexOES(GLfixed angle, GLfixed x, GLfixed y, GLfixed z)
+{
+	GET_CONTEXT;
+	ctx->glRotatexOES( angle, x, y, z);
+}
+
+void glSampleCoveragexOES(GLclampx value, GLboolean invert)
+{
+	GET_CONTEXT;
+	ctx->glSampleCoveragexOES( value, invert);
+}
+
+void glScalexOES(GLfixed x, GLfixed y, GLfixed z)
+{
+	GET_CONTEXT;
+	ctx->glScalexOES( x, y, z);
+}
+
+void glTexEnvxOES(GLenum target, GLenum pname, GLfixed param)
+{
+	GET_CONTEXT;
+	ctx->glTexEnvxOES( target, pname, param);
+}
+
+void glTexEnvxvOES(GLenum target, GLenum pname, const GLfixed* params)
+{
+	GET_CONTEXT;
+	ctx->glTexEnvxvOES( target, pname, params);
+}
+
+void glTexParameterxOES(GLenum target, GLenum pname, GLfixed param)
+{
+	GET_CONTEXT;
+	ctx->glTexParameterxOES( target, pname, param);
+}
+
+void glTexParameterxvOES(GLenum target, GLenum pname, const GLfixed* params)
+{
+	GET_CONTEXT;
+	ctx->glTexParameterxvOES( target, pname, params);
+}
+
+void glTranslatexOES(GLfixed x, GLfixed y, GLfixed z)
+{
+	GET_CONTEXT;
+	ctx->glTranslatexOES( x, y, z);
+}
+
+GLboolean glIsRenderbufferOES(GLuint renderbuffer)
+{
+	GET_CONTEXT;
+	return ctx->glIsRenderbufferOES( renderbuffer);
+}
+
+void glBindRenderbufferOES(GLenum target, GLuint renderbuffer)
+{
+	GET_CONTEXT;
+	ctx->glBindRenderbufferOES( target, renderbuffer);
+}
+
+void glDeleteRenderbuffersOES(GLsizei n, const GLuint* renderbuffers)
+{
+	GET_CONTEXT;
+	ctx->glDeleteRenderbuffersOES( n, renderbuffers);
+}
+
+void glGenRenderbuffersOES(GLsizei n, GLuint* renderbuffers)
+{
+	GET_CONTEXT;
+	ctx->glGenRenderbuffersOES( n, renderbuffers);
+}
+
+void glRenderbufferStorageOES(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
+{
+	GET_CONTEXT;
+	ctx->glRenderbufferStorageOES( target, internalformat, width, height);
+}
+
+void glGetRenderbufferParameterivOES(GLenum target, GLenum pname, GLint* params)
+{
+	GET_CONTEXT;
+	ctx->glGetRenderbufferParameterivOES( target, pname, params);
+}
+
+GLboolean glIsFramebufferOES(GLuint framebuffer)
+{
+	GET_CONTEXT;
+	return ctx->glIsFramebufferOES( framebuffer);
+}
+
+void glBindFramebufferOES(GLenum target, GLuint framebuffer)
+{
+	GET_CONTEXT;
+	ctx->glBindFramebufferOES( target, framebuffer);
+}
+
+void glDeleteFramebuffersOES(GLsizei n, const GLuint* framebuffers)
+{
+	GET_CONTEXT;
+	ctx->glDeleteFramebuffersOES( n, framebuffers);
+}
+
+void glGenFramebuffersOES(GLsizei n, GLuint* framebuffers)
+{
+	GET_CONTEXT;
+	ctx->glGenFramebuffersOES( n, framebuffers);
+}
+
+GLenum glCheckFramebufferStatusOES(GLenum target)
+{
+	GET_CONTEXT;
+	return ctx->glCheckFramebufferStatusOES( target);
+}
+
+void glFramebufferRenderbufferOES(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
+{
+	GET_CONTEXT;
+	ctx->glFramebufferRenderbufferOES( target, attachment, renderbuffertarget, renderbuffer);
+}
+
+void glFramebufferTexture2DOES(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
+{
+	GET_CONTEXT;
+	ctx->glFramebufferTexture2DOES( target, attachment, textarget, texture, level);
+}
+
+void glGetFramebufferAttachmentParameterivOES(GLenum target, GLenum attachment, GLenum pname, GLint* params)
+{
+	GET_CONTEXT;
+	ctx->glGetFramebufferAttachmentParameterivOES( target, attachment, pname, params);
+}
+
+void glGenerateMipmapOES(GLenum target)
+{
+	GET_CONTEXT;
+	ctx->glGenerateMipmapOES( target);
+}
+
+void* glMapBufferOES(GLenum target, GLenum access)
+{
+	GET_CONTEXT;
+	return ctx->glMapBufferOES( target, access);
+}
+
+GLboolean glUnmapBufferOES(GLenum target)
+{
+	GET_CONTEXT;
+	return ctx->glUnmapBufferOES( target);
+}
+
+void glGetBufferPointervOES(GLenum target, GLenum pname, GLvoid** params)
+{
+	GET_CONTEXT;
+	ctx->glGetBufferPointervOES( target, pname, params);
+}
+
+void glCurrentPaletteMatrixOES(GLuint matrixpaletteindex)
+{
+	GET_CONTEXT;
+	ctx->glCurrentPaletteMatrixOES( matrixpaletteindex);
+}
+
+void glLoadPaletteFromModelViewMatrixOES()
+{
+	GET_CONTEXT;
+	ctx->glLoadPaletteFromModelViewMatrixOES();
+}
+
+void glMatrixIndexPointerOES(GLint size, GLenum type, GLsizei stride, const GLvoid* pointer)
+{
+	GET_CONTEXT;
+	ctx->glMatrixIndexPointerOES( size, type, stride, pointer);
+}
+
+void glWeightPointerOES(GLint size, GLenum type, GLsizei stride, const GLvoid* pointer)
+{
+	GET_CONTEXT;
+	ctx->glWeightPointerOES( size, type, stride, pointer);
+}
+
+GLbitfield glQueryMatrixxOES(GLfixed* mantissa, GLint* exponent)
+{
+	GET_CONTEXT;
+	return ctx->glQueryMatrixxOES( mantissa, exponent);
+}
+
+void glDepthRangefOES(GLclampf zNear, GLclampf zFar)
+{
+	GET_CONTEXT;
+	ctx->glDepthRangefOES( zNear, zFar);
+}
+
+void glFrustumfOES(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)
+{
+	GET_CONTEXT;
+	ctx->glFrustumfOES( left, right, bottom, top, zNear, zFar);
+}
+
+void glOrthofOES(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)
+{
+	GET_CONTEXT;
+	ctx->glOrthofOES( left, right, bottom, top, zNear, zFar);
+}
+
+void glClipPlanefOES(GLenum plane, const GLfloat* equation)
+{
+	GET_CONTEXT;
+	ctx->glClipPlanefOES( plane, equation);
+}
+
+void glClipPlanefIMG(GLenum plane, const GLfloat* equation)
+{
+	GET_CONTEXT;
+	ctx->glClipPlanefIMG( plane, equation);
+}
+
+void glGetClipPlanefOES(GLenum pname, GLfloat* eqn)
+{
+	GET_CONTEXT;
+	ctx->glGetClipPlanefOES( pname, eqn);
+}
+
+void glClearDepthfOES(GLclampf depth)
+{
+	GET_CONTEXT;
+	ctx->glClearDepthfOES( depth);
+}
+
+void glTexGenfOES(GLenum coord, GLenum pname, GLfloat param)
+{
+	GET_CONTEXT;
+	ctx->glTexGenfOES( coord, pname, param);
+}
+
+void glTexGenfvOES(GLenum coord, GLenum pname, const GLfloat* params)
+{
+	GET_CONTEXT;
+	ctx->glTexGenfvOES( coord, pname, params);
+}
+
+void glTexGeniOES(GLenum coord, GLenum pname, GLint param)
+{
+	GET_CONTEXT;
+	ctx->glTexGeniOES( coord, pname, param);
+}
+
+void glTexGenivOES(GLenum coord, GLenum pname, const GLint* params)
+{
+	GET_CONTEXT;
+	ctx->glTexGenivOES( coord, pname, params);
+}
+
+void glTexGenxOES(GLenum coord, GLenum pname, GLfixed param)
+{
+	GET_CONTEXT;
+	ctx->glTexGenxOES( coord, pname, param);
+}
+
+void glTexGenxvOES(GLenum coord, GLenum pname, const GLfixed* params)
+{
+	GET_CONTEXT;
+	ctx->glTexGenxvOES( coord, pname, params);
+}
+
+void glGetTexGenfvOES(GLenum coord, GLenum pname, GLfloat* params)
+{
+	GET_CONTEXT;
+	ctx->glGetTexGenfvOES( coord, pname, params);
+}
+
+void glGetTexGenivOES(GLenum coord, GLenum pname, GLint* params)
+{
+	GET_CONTEXT;
+	ctx->glGetTexGenivOES( coord, pname, params);
+}
+
+void glGetTexGenxvOES(GLenum coord, GLenum pname, GLfixed* params)
+{
+	GET_CONTEXT;
+	ctx->glGetTexGenxvOES( coord, pname, params);
+}
+
+void glBindVertexArrayOES(GLuint array)
+{
+	GET_CONTEXT;
+	ctx->glBindVertexArrayOES( array);
+}
+
+void glDeleteVertexArraysOES(GLsizei n, const GLuint* arrays)
+{
+	GET_CONTEXT;
+	ctx->glDeleteVertexArraysOES( n, arrays);
+}
+
+void glGenVertexArraysOES(GLsizei n, GLuint* arrays)
+{
+	GET_CONTEXT;
+	ctx->glGenVertexArraysOES( n, arrays);
+}
+
+GLboolean glIsVertexArrayOES(GLuint array)
+{
+	GET_CONTEXT;
+	return ctx->glIsVertexArrayOES( array);
+}
+
+void glDiscardFramebufferEXT(GLenum target, GLsizei numAttachments, const GLenum* attachments)
+{
+	GET_CONTEXT;
+	ctx->glDiscardFramebufferEXT( target, numAttachments, attachments);
+}
+
+void glMultiDrawArraysEXT(GLenum mode, const GLint* first, const GLsizei* count, GLsizei primcount)
+{
+	GET_CONTEXT;
+	ctx->glMultiDrawArraysEXT( mode, first, count, primcount);
+}
+
+void glMultiDrawElementsEXT(GLenum mode, const GLsizei* count, GLenum type, const GLvoid* const* indices, GLsizei primcount)
+{
+	GET_CONTEXT;
+	ctx->glMultiDrawElementsEXT( mode, count, type, indices, primcount);
+}
+
+void glMultiDrawArraysSUN(GLenum mode, GLint* first, GLsizei* count, GLsizei primcount)
+{
+	GET_CONTEXT;
+	ctx->glMultiDrawArraysSUN( mode, first, count, primcount);
+}
+
+void glMultiDrawElementsSUN(GLenum mode, const GLsizei* count, GLenum type, const GLvoid** indices, GLsizei primcount)
+{
+	GET_CONTEXT;
+	ctx->glMultiDrawElementsSUN( mode, count, type, indices, primcount);
+}
+
+void glRenderbufferStorageMultisampleIMG(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
+{
+	GET_CONTEXT;
+	ctx->glRenderbufferStorageMultisampleIMG( target, samples, internalformat, width, height);
+}
+
+void glFramebufferTexture2DMultisampleIMG(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples)
+{
+	GET_CONTEXT;
+	ctx->glFramebufferTexture2DMultisampleIMG( target, attachment, textarget, texture, level, samples);
+}
+
+void glDeleteFencesNV(GLsizei n, const GLuint* fences)
+{
+	GET_CONTEXT;
+	ctx->glDeleteFencesNV( n, fences);
+}
+
+void glGenFencesNV(GLsizei n, GLuint* fences)
+{
+	GET_CONTEXT;
+	ctx->glGenFencesNV( n, fences);
+}
+
+GLboolean glIsFenceNV(GLuint fence)
+{
+	GET_CONTEXT;
+	return ctx->glIsFenceNV( fence);
+}
+
+GLboolean glTestFenceNV(GLuint fence)
+{
+	GET_CONTEXT;
+	return ctx->glTestFenceNV( fence);
+}
+
+void glGetFenceivNV(GLuint fence, GLenum pname, GLint* params)
+{
+	GET_CONTEXT;
+	ctx->glGetFenceivNV( fence, pname, params);
+}
+
+void glFinishFenceNV(GLuint fence)
+{
+	GET_CONTEXT;
+	ctx->glFinishFenceNV( fence);
+}
+
+void glSetFenceNV(GLuint fence, GLenum condition)
+{
+	GET_CONTEXT;
+	ctx->glSetFenceNV( fence, condition);
+}
+
+void glGetDriverControlsQCOM(GLint* num, GLsizei size, GLuint* driverControls)
+{
+	GET_CONTEXT;
+	ctx->glGetDriverControlsQCOM( num, size, driverControls);
+}
+
+void glGetDriverControlStringQCOM(GLuint driverControl, GLsizei bufSize, GLsizei* length, GLchar* driverControlString)
+{
+	GET_CONTEXT;
+	ctx->glGetDriverControlStringQCOM( driverControl, bufSize, length, driverControlString);
+}
+
+void glEnableDriverControlQCOM(GLuint driverControl)
+{
+	GET_CONTEXT;
+	ctx->glEnableDriverControlQCOM( driverControl);
+}
+
+void glDisableDriverControlQCOM(GLuint driverControl)
+{
+	GET_CONTEXT;
+	ctx->glDisableDriverControlQCOM( driverControl);
+}
+
+void glExtGetTexturesQCOM(GLuint* textures, GLint maxTextures, GLint* numTextures)
+{
+	GET_CONTEXT;
+	ctx->glExtGetTexturesQCOM( textures, maxTextures, numTextures);
+}
+
+void glExtGetBuffersQCOM(GLuint* buffers, GLint maxBuffers, GLint* numBuffers)
+{
+	GET_CONTEXT;
+	ctx->glExtGetBuffersQCOM( buffers, maxBuffers, numBuffers);
+}
+
+void glExtGetRenderbuffersQCOM(GLuint* renderbuffers, GLint maxRenderbuffers, GLint* numRenderbuffers)
+{
+	GET_CONTEXT;
+	ctx->glExtGetRenderbuffersQCOM( renderbuffers, maxRenderbuffers, numRenderbuffers);
+}
+
+void glExtGetFramebuffersQCOM(GLuint* framebuffers, GLint maxFramebuffers, GLint* numFramebuffers)
+{
+	GET_CONTEXT;
+	ctx->glExtGetFramebuffersQCOM( framebuffers, maxFramebuffers, numFramebuffers);
+}
+
+void glExtGetTexLevelParameterivQCOM(GLuint texture, GLenum face, GLint level, GLenum pname, GLint* params)
+{
+	GET_CONTEXT;
+	ctx->glExtGetTexLevelParameterivQCOM( texture, face, level, pname, params);
+}
+
+void glExtTexObjectStateOverrideiQCOM(GLenum target, GLenum pname, GLint param)
+{
+	GET_CONTEXT;
+	ctx->glExtTexObjectStateOverrideiQCOM( target, pname, param);
+}
+
+void glExtGetTexSubImageQCOM(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid* texels)
+{
+	GET_CONTEXT;
+	ctx->glExtGetTexSubImageQCOM( target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, texels);
+}
+
+void glExtGetBufferPointervQCOM(GLenum target, GLvoid** params)
+{
+	GET_CONTEXT;
+	ctx->glExtGetBufferPointervQCOM( target, params);
+}
+
+void glExtGetShadersQCOM(GLuint* shaders, GLint maxShaders, GLint* numShaders)
+{
+	GET_CONTEXT;
+	ctx->glExtGetShadersQCOM( shaders, maxShaders, numShaders);
+}
+
+void glExtGetProgramsQCOM(GLuint* programs, GLint maxPrograms, GLint* numPrograms)
+{
+	GET_CONTEXT;
+	ctx->glExtGetProgramsQCOM( programs, maxPrograms, numPrograms);
+}
+
+GLboolean glExtIsProgramBinaryQCOM(GLuint program)
+{
+	GET_CONTEXT;
+	return ctx->glExtIsProgramBinaryQCOM( program);
+}
+
+void glExtGetProgramBinarySourceQCOM(GLuint program, GLenum shadertype, GLchar* source, GLint* length)
+{
+	GET_CONTEXT;
+	ctx->glExtGetProgramBinarySourceQCOM( program, shadertype, source, length);
+}
+
+void glStartTilingQCOM(GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask)
+{
+	GET_CONTEXT;
+	ctx->glStartTilingQCOM( x, y, width, height, preserveMask);
+}
+
+void glEndTilingQCOM(GLbitfield preserveMask)
+{
+	GET_CONTEXT;
+	ctx->glEndTilingQCOM( preserveMask);
+}
+
diff --git a/guest/libs/eglwrapper/gles1_wrapper_proc.h b/guest/libs/eglwrapper/gles1_wrapper_proc.h
new file mode 100644
index 0000000..e3a522b
--- /dev/null
+++ b/guest/libs/eglwrapper/gles1_wrapper_proc.h
@@ -0,0 +1,305 @@
+// Generated Code - DO NOT EDIT !!
+// generated by 'emugen'
+#ifndef __gles1_wrapper_proc_t_h
+#define __gles1_wrapper_proc_t_h
+
+
+
+#include "gles1_types.h"
+#ifndef gles1_APIENTRY
+#define gles1_APIENTRY 
+#endif
+typedef void (gles1_APIENTRY *glAlphaFunc_wrapper_proc_t) (GLenum, GLclampf);
+typedef void (gles1_APIENTRY *glClearColor_wrapper_proc_t) (GLclampf, GLclampf, GLclampf, GLclampf);
+typedef void (gles1_APIENTRY *glClearDepthf_wrapper_proc_t) (GLclampf);
+typedef void (gles1_APIENTRY *glClipPlanef_wrapper_proc_t) (GLenum, const GLfloat*);
+typedef void (gles1_APIENTRY *glColor4f_wrapper_proc_t) (GLfloat, GLfloat, GLfloat, GLfloat);
+typedef void (gles1_APIENTRY *glDepthRangef_wrapper_proc_t) (GLclampf, GLclampf);
+typedef void (gles1_APIENTRY *glFogf_wrapper_proc_t) (GLenum, GLfloat);
+typedef void (gles1_APIENTRY *glFogfv_wrapper_proc_t) (GLenum, const GLfloat*);
+typedef void (gles1_APIENTRY *glFrustumf_wrapper_proc_t) (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+typedef void (gles1_APIENTRY *glGetClipPlanef_wrapper_proc_t) (GLenum, GLfloat*);
+typedef void (gles1_APIENTRY *glGetFloatv_wrapper_proc_t) (GLenum, GLfloat*);
+typedef void (gles1_APIENTRY *glGetLightfv_wrapper_proc_t) (GLenum, GLenum, GLfloat*);
+typedef void (gles1_APIENTRY *glGetMaterialfv_wrapper_proc_t) (GLenum, GLenum, GLfloat*);
+typedef void (gles1_APIENTRY *glGetTexEnvfv_wrapper_proc_t) (GLenum, GLenum, GLfloat*);
+typedef void (gles1_APIENTRY *glGetTexParameterfv_wrapper_proc_t) (GLenum, GLenum, GLfloat*);
+typedef void (gles1_APIENTRY *glLightModelf_wrapper_proc_t) (GLenum, GLfloat);
+typedef void (gles1_APIENTRY *glLightModelfv_wrapper_proc_t) (GLenum, const GLfloat*);
+typedef void (gles1_APIENTRY *glLightf_wrapper_proc_t) (GLenum, GLenum, GLfloat);
+typedef void (gles1_APIENTRY *glLightfv_wrapper_proc_t) (GLenum, GLenum, const GLfloat*);
+typedef void (gles1_APIENTRY *glLineWidth_wrapper_proc_t) (GLfloat);
+typedef void (gles1_APIENTRY *glLoadMatrixf_wrapper_proc_t) (const GLfloat*);
+typedef void (gles1_APIENTRY *glMaterialf_wrapper_proc_t) (GLenum, GLenum, GLfloat);
+typedef void (gles1_APIENTRY *glMaterialfv_wrapper_proc_t) (GLenum, GLenum, const GLfloat*);
+typedef void (gles1_APIENTRY *glMultMatrixf_wrapper_proc_t) (const GLfloat*);
+typedef void (gles1_APIENTRY *glMultiTexCoord4f_wrapper_proc_t) (GLenum, GLfloat, GLfloat, GLfloat, GLfloat);
+typedef void (gles1_APIENTRY *glNormal3f_wrapper_proc_t) (GLfloat, GLfloat, GLfloat);
+typedef void (gles1_APIENTRY *glOrthof_wrapper_proc_t) (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+typedef void (gles1_APIENTRY *glPointParameterf_wrapper_proc_t) (GLenum, GLfloat);
+typedef void (gles1_APIENTRY *glPointParameterfv_wrapper_proc_t) (GLenum, const GLfloat*);
+typedef void (gles1_APIENTRY *glPointSize_wrapper_proc_t) (GLfloat);
+typedef void (gles1_APIENTRY *glPolygonOffset_wrapper_proc_t) (GLfloat, GLfloat);
+typedef void (gles1_APIENTRY *glRotatef_wrapper_proc_t) (GLfloat, GLfloat, GLfloat, GLfloat);
+typedef void (gles1_APIENTRY *glScalef_wrapper_proc_t) (GLfloat, GLfloat, GLfloat);
+typedef void (gles1_APIENTRY *glTexEnvf_wrapper_proc_t) (GLenum, GLenum, GLfloat);
+typedef void (gles1_APIENTRY *glTexEnvfv_wrapper_proc_t) (GLenum, GLenum, const GLfloat*);
+typedef void (gles1_APIENTRY *glTexParameterf_wrapper_proc_t) (GLenum, GLenum, GLfloat);
+typedef void (gles1_APIENTRY *glTexParameterfv_wrapper_proc_t) (GLenum, GLenum, const GLfloat*);
+typedef void (gles1_APIENTRY *glTranslatef_wrapper_proc_t) (GLfloat, GLfloat, GLfloat);
+typedef void (gles1_APIENTRY *glActiveTexture_wrapper_proc_t) (GLenum);
+typedef void (gles1_APIENTRY *glAlphaFuncx_wrapper_proc_t) (GLenum, GLclampx);
+typedef void (gles1_APIENTRY *glBindBuffer_wrapper_proc_t) (GLenum, GLuint);
+typedef void (gles1_APIENTRY *glBindTexture_wrapper_proc_t) (GLenum, GLuint);
+typedef void (gles1_APIENTRY *glBlendFunc_wrapper_proc_t) (GLenum, GLenum);
+typedef void (gles1_APIENTRY *glBufferData_wrapper_proc_t) (GLenum, GLsizeiptr, const GLvoid*, GLenum);
+typedef void (gles1_APIENTRY *glBufferSubData_wrapper_proc_t) (GLenum, GLintptr, GLsizeiptr, const GLvoid*);
+typedef void (gles1_APIENTRY *glClear_wrapper_proc_t) (GLbitfield);
+typedef void (gles1_APIENTRY *glClearColorx_wrapper_proc_t) (GLclampx, GLclampx, GLclampx, GLclampx);
+typedef void (gles1_APIENTRY *glClearDepthx_wrapper_proc_t) (GLclampx);
+typedef void (gles1_APIENTRY *glClearStencil_wrapper_proc_t) (GLint);
+typedef void (gles1_APIENTRY *glClientActiveTexture_wrapper_proc_t) (GLenum);
+typedef void (gles1_APIENTRY *glColor4ub_wrapper_proc_t) (GLubyte, GLubyte, GLubyte, GLubyte);
+typedef void (gles1_APIENTRY *glColor4x_wrapper_proc_t) (GLfixed, GLfixed, GLfixed, GLfixed);
+typedef void (gles1_APIENTRY *glColorMask_wrapper_proc_t) (GLboolean, GLboolean, GLboolean, GLboolean);
+typedef void (gles1_APIENTRY *glColorPointer_wrapper_proc_t) (GLint, GLenum, GLsizei, const GLvoid*);
+typedef void (gles1_APIENTRY *glCompressedTexImage2D_wrapper_proc_t) (GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const GLvoid*);
+typedef void (gles1_APIENTRY *glCompressedTexSubImage2D_wrapper_proc_t) (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid*);
+typedef void (gles1_APIENTRY *glCopyTexImage2D_wrapper_proc_t) (GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLsizei, GLint);
+typedef void (gles1_APIENTRY *glCopyTexSubImage2D_wrapper_proc_t) (GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei);
+typedef void (gles1_APIENTRY *glCullFace_wrapper_proc_t) (GLenum);
+typedef void (gles1_APIENTRY *glDeleteBuffers_wrapper_proc_t) (GLsizei, const GLuint*);
+typedef void (gles1_APIENTRY *glDeleteTextures_wrapper_proc_t) (GLsizei, const GLuint*);
+typedef void (gles1_APIENTRY *glDepthFunc_wrapper_proc_t) (GLenum);
+typedef void (gles1_APIENTRY *glDepthMask_wrapper_proc_t) (GLboolean);
+typedef void (gles1_APIENTRY *glDepthRangex_wrapper_proc_t) (GLclampx, GLclampx);
+typedef void (gles1_APIENTRY *glDisable_wrapper_proc_t) (GLenum);
+typedef void (gles1_APIENTRY *glDisableClientState_wrapper_proc_t) (GLenum);
+typedef void (gles1_APIENTRY *glDrawArrays_wrapper_proc_t) (GLenum, GLint, GLsizei);
+typedef void (gles1_APIENTRY *glDrawElements_wrapper_proc_t) (GLenum, GLsizei, GLenum, const GLvoid*);
+typedef void (gles1_APIENTRY *glEnable_wrapper_proc_t) (GLenum);
+typedef void (gles1_APIENTRY *glEnableClientState_wrapper_proc_t) (GLenum);
+typedef void (gles1_APIENTRY *glFinish_wrapper_proc_t) ();
+typedef void (gles1_APIENTRY *glFlush_wrapper_proc_t) ();
+typedef void (gles1_APIENTRY *glFogx_wrapper_proc_t) (GLenum, GLfixed);
+typedef void (gles1_APIENTRY *glFogxv_wrapper_proc_t) (GLenum, const GLfixed*);
+typedef void (gles1_APIENTRY *glFrontFace_wrapper_proc_t) (GLenum);
+typedef void (gles1_APIENTRY *glFrustumx_wrapper_proc_t) (GLfixed, GLfixed, GLfixed, GLfixed, GLfixed, GLfixed);
+typedef void (gles1_APIENTRY *glGetBooleanv_wrapper_proc_t) (GLenum, GLboolean*);
+typedef void (gles1_APIENTRY *glGetBufferParameteriv_wrapper_proc_t) (GLenum, GLenum, GLint*);
+typedef void (gles1_APIENTRY *glClipPlanex_wrapper_proc_t) (GLenum, const GLfixed*);
+typedef void (gles1_APIENTRY *glGenBuffers_wrapper_proc_t) (GLsizei, GLuint*);
+typedef void (gles1_APIENTRY *glGenTextures_wrapper_proc_t) (GLsizei, GLuint*);
+typedef GLenum (gles1_APIENTRY *glGetError_wrapper_proc_t) ();
+typedef void (gles1_APIENTRY *glGetFixedv_wrapper_proc_t) (GLenum, GLfixed*);
+typedef void (gles1_APIENTRY *glGetIntegerv_wrapper_proc_t) (GLenum, GLint*);
+typedef void (gles1_APIENTRY *glGetLightxv_wrapper_proc_t) (GLenum, GLenum, GLfixed*);
+typedef void (gles1_APIENTRY *glGetMaterialxv_wrapper_proc_t) (GLenum, GLenum, GLfixed*);
+typedef void (gles1_APIENTRY *glGetPointerv_wrapper_proc_t) (GLenum, GLvoid**);
+typedef const GLubyte* (gles1_APIENTRY *glGetString_wrapper_proc_t) (GLenum);
+typedef void (gles1_APIENTRY *glGetTexEnviv_wrapper_proc_t) (GLenum, GLenum, GLint*);
+typedef void (gles1_APIENTRY *glGetTexEnvxv_wrapper_proc_t) (GLenum, GLenum, GLfixed*);
+typedef void (gles1_APIENTRY *glGetTexParameteriv_wrapper_proc_t) (GLenum, GLenum, GLint*);
+typedef void (gles1_APIENTRY *glGetTexParameterxv_wrapper_proc_t) (GLenum, GLenum, GLfixed*);
+typedef void (gles1_APIENTRY *glHint_wrapper_proc_t) (GLenum, GLenum);
+typedef GLboolean (gles1_APIENTRY *glIsBuffer_wrapper_proc_t) (GLuint);
+typedef GLboolean (gles1_APIENTRY *glIsEnabled_wrapper_proc_t) (GLenum);
+typedef GLboolean (gles1_APIENTRY *glIsTexture_wrapper_proc_t) (GLuint);
+typedef void (gles1_APIENTRY *glLightModelx_wrapper_proc_t) (GLenum, GLfixed);
+typedef void (gles1_APIENTRY *glLightModelxv_wrapper_proc_t) (GLenum, const GLfixed*);
+typedef void (gles1_APIENTRY *glLightx_wrapper_proc_t) (GLenum, GLenum, GLfixed);
+typedef void (gles1_APIENTRY *glLightxv_wrapper_proc_t) (GLenum, GLenum, const GLfixed*);
+typedef void (gles1_APIENTRY *glLineWidthx_wrapper_proc_t) (GLfixed);
+typedef void (gles1_APIENTRY *glLoadIdentity_wrapper_proc_t) ();
+typedef void (gles1_APIENTRY *glLoadMatrixx_wrapper_proc_t) (const GLfixed*);
+typedef void (gles1_APIENTRY *glLogicOp_wrapper_proc_t) (GLenum);
+typedef void (gles1_APIENTRY *glMaterialx_wrapper_proc_t) (GLenum, GLenum, GLfixed);
+typedef void (gles1_APIENTRY *glMaterialxv_wrapper_proc_t) (GLenum, GLenum, const GLfixed*);
+typedef void (gles1_APIENTRY *glMatrixMode_wrapper_proc_t) (GLenum);
+typedef void (gles1_APIENTRY *glMultMatrixx_wrapper_proc_t) (const GLfixed*);
+typedef void (gles1_APIENTRY *glMultiTexCoord4x_wrapper_proc_t) (GLenum, GLfixed, GLfixed, GLfixed, GLfixed);
+typedef void (gles1_APIENTRY *glNormal3x_wrapper_proc_t) (GLfixed, GLfixed, GLfixed);
+typedef void (gles1_APIENTRY *glNormalPointer_wrapper_proc_t) (GLenum, GLsizei, const GLvoid*);
+typedef void (gles1_APIENTRY *glOrthox_wrapper_proc_t) (GLfixed, GLfixed, GLfixed, GLfixed, GLfixed, GLfixed);
+typedef void (gles1_APIENTRY *glPixelStorei_wrapper_proc_t) (GLenum, GLint);
+typedef void (gles1_APIENTRY *glPointParameterx_wrapper_proc_t) (GLenum, GLfixed);
+typedef void (gles1_APIENTRY *glPointParameterxv_wrapper_proc_t) (GLenum, const GLfixed*);
+typedef void (gles1_APIENTRY *glPointSizex_wrapper_proc_t) (GLfixed);
+typedef void (gles1_APIENTRY *glPolygonOffsetx_wrapper_proc_t) (GLfixed, GLfixed);
+typedef void (gles1_APIENTRY *glPopMatrix_wrapper_proc_t) ();
+typedef void (gles1_APIENTRY *glPushMatrix_wrapper_proc_t) ();
+typedef void (gles1_APIENTRY *glReadPixels_wrapper_proc_t) (GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, GLvoid*);
+typedef void (gles1_APIENTRY *glRotatex_wrapper_proc_t) (GLfixed, GLfixed, GLfixed, GLfixed);
+typedef void (gles1_APIENTRY *glSampleCoverage_wrapper_proc_t) (GLclampf, GLboolean);
+typedef void (gles1_APIENTRY *glSampleCoveragex_wrapper_proc_t) (GLclampx, GLboolean);
+typedef void (gles1_APIENTRY *glScalex_wrapper_proc_t) (GLfixed, GLfixed, GLfixed);
+typedef void (gles1_APIENTRY *glScissor_wrapper_proc_t) (GLint, GLint, GLsizei, GLsizei);
+typedef void (gles1_APIENTRY *glShadeModel_wrapper_proc_t) (GLenum);
+typedef void (gles1_APIENTRY *glStencilFunc_wrapper_proc_t) (GLenum, GLint, GLuint);
+typedef void (gles1_APIENTRY *glStencilMask_wrapper_proc_t) (GLuint);
+typedef void (gles1_APIENTRY *glStencilOp_wrapper_proc_t) (GLenum, GLenum, GLenum);
+typedef void (gles1_APIENTRY *glTexCoordPointer_wrapper_proc_t) (GLint, GLenum, GLsizei, const GLvoid*);
+typedef void (gles1_APIENTRY *glTexEnvi_wrapper_proc_t) (GLenum, GLenum, GLint);
+typedef void (gles1_APIENTRY *glTexEnvx_wrapper_proc_t) (GLenum, GLenum, GLfixed);
+typedef void (gles1_APIENTRY *glTexEnviv_wrapper_proc_t) (GLenum, GLenum, const GLint*);
+typedef void (gles1_APIENTRY *glTexEnvxv_wrapper_proc_t) (GLenum, GLenum, const GLfixed*);
+typedef void (gles1_APIENTRY *glTexImage2D_wrapper_proc_t) (GLenum, GLint, GLint, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid*);
+typedef void (gles1_APIENTRY *glTexParameteri_wrapper_proc_t) (GLenum, GLenum, GLint);
+typedef void (gles1_APIENTRY *glTexParameterx_wrapper_proc_t) (GLenum, GLenum, GLfixed);
+typedef void (gles1_APIENTRY *glTexParameteriv_wrapper_proc_t) (GLenum, GLenum, const GLint*);
+typedef void (gles1_APIENTRY *glTexParameterxv_wrapper_proc_t) (GLenum, GLenum, const GLfixed*);
+typedef void (gles1_APIENTRY *glTexSubImage2D_wrapper_proc_t) (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, const GLvoid*);
+typedef void (gles1_APIENTRY *glTranslatex_wrapper_proc_t) (GLfixed, GLfixed, GLfixed);
+typedef void (gles1_APIENTRY *glVertexPointer_wrapper_proc_t) (GLint, GLenum, GLsizei, const GLvoid*);
+typedef void (gles1_APIENTRY *glViewport_wrapper_proc_t) (GLint, GLint, GLsizei, GLsizei);
+typedef void (gles1_APIENTRY *glPointSizePointerOES_wrapper_proc_t) (GLenum, GLsizei, const GLvoid*);
+typedef void (gles1_APIENTRY *glVertexPointerOffset_wrapper_proc_t) (GLint, GLenum, GLsizei, GLuint);
+typedef void (gles1_APIENTRY *glColorPointerOffset_wrapper_proc_t) (GLint, GLenum, GLsizei, GLuint);
+typedef void (gles1_APIENTRY *glNormalPointerOffset_wrapper_proc_t) (GLenum, GLsizei, GLuint);
+typedef void (gles1_APIENTRY *glPointSizePointerOffset_wrapper_proc_t) (GLenum, GLsizei, GLuint);
+typedef void (gles1_APIENTRY *glTexCoordPointerOffset_wrapper_proc_t) (GLint, GLenum, GLsizei, GLuint);
+typedef void (gles1_APIENTRY *glWeightPointerOffset_wrapper_proc_t) (GLint, GLenum, GLsizei, GLuint);
+typedef void (gles1_APIENTRY *glMatrixIndexPointerOffset_wrapper_proc_t) (GLint, GLenum, GLsizei, GLuint);
+typedef void (gles1_APIENTRY *glVertexPointerData_wrapper_proc_t) (GLint, GLenum, GLsizei, void*, GLuint);
+typedef void (gles1_APIENTRY *glColorPointerData_wrapper_proc_t) (GLint, GLenum, GLsizei, void*, GLuint);
+typedef void (gles1_APIENTRY *glNormalPointerData_wrapper_proc_t) (GLenum, GLsizei, void*, GLuint);
+typedef void (gles1_APIENTRY *glTexCoordPointerData_wrapper_proc_t) (GLint, GLint, GLenum, GLsizei, void*, GLuint);
+typedef void (gles1_APIENTRY *glPointSizePointerData_wrapper_proc_t) (GLenum, GLsizei, void*, GLuint);
+typedef void (gles1_APIENTRY *glWeightPointerData_wrapper_proc_t) (GLint, GLenum, GLsizei, void*, GLuint);
+typedef void (gles1_APIENTRY *glMatrixIndexPointerData_wrapper_proc_t) (GLint, GLenum, GLsizei, void*, GLuint);
+typedef void (gles1_APIENTRY *glDrawElementsOffset_wrapper_proc_t) (GLenum, GLsizei, GLenum, GLuint);
+typedef void (gles1_APIENTRY *glDrawElementsData_wrapper_proc_t) (GLenum, GLsizei, GLenum, void*, GLuint);
+typedef void (gles1_APIENTRY *glGetCompressedTextureFormats_wrapper_proc_t) (int, GLint*);
+typedef int (gles1_APIENTRY *glFinishRoundTrip_wrapper_proc_t) ();
+typedef void (gles1_APIENTRY *glBlendEquationSeparateOES_wrapper_proc_t) (GLenum, GLenum);
+typedef void (gles1_APIENTRY *glBlendFuncSeparateOES_wrapper_proc_t) (GLenum, GLenum, GLenum, GLenum);
+typedef void (gles1_APIENTRY *glBlendEquationOES_wrapper_proc_t) (GLenum);
+typedef void (gles1_APIENTRY *glDrawTexsOES_wrapper_proc_t) (GLshort, GLshort, GLshort, GLshort, GLshort);
+typedef void (gles1_APIENTRY *glDrawTexiOES_wrapper_proc_t) (GLint, GLint, GLint, GLint, GLint);
+typedef void (gles1_APIENTRY *glDrawTexxOES_wrapper_proc_t) (GLfixed, GLfixed, GLfixed, GLfixed, GLfixed);
+typedef void (gles1_APIENTRY *glDrawTexsvOES_wrapper_proc_t) (const GLshort*);
+typedef void (gles1_APIENTRY *glDrawTexivOES_wrapper_proc_t) (const GLint*);
+typedef void (gles1_APIENTRY *glDrawTexxvOES_wrapper_proc_t) (const GLfixed*);
+typedef void (gles1_APIENTRY *glDrawTexfOES_wrapper_proc_t) (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+typedef void (gles1_APIENTRY *glDrawTexfvOES_wrapper_proc_t) (const GLfloat*);
+typedef void (gles1_APIENTRY *glEGLImageTargetTexture2DOES_wrapper_proc_t) (GLenum, GLeglImageOES);
+typedef void (gles1_APIENTRY *glEGLImageTargetRenderbufferStorageOES_wrapper_proc_t) (GLenum, GLeglImageOES);
+typedef void (gles1_APIENTRY *glAlphaFuncxOES_wrapper_proc_t) (GLenum, GLclampx);
+typedef void (gles1_APIENTRY *glClearColorxOES_wrapper_proc_t) (GLclampx, GLclampx, GLclampx, GLclampx);
+typedef void (gles1_APIENTRY *glClearDepthxOES_wrapper_proc_t) (GLclampx);
+typedef void (gles1_APIENTRY *glClipPlanexOES_wrapper_proc_t) (GLenum, const GLfixed*);
+typedef void (gles1_APIENTRY *glClipPlanexIMG_wrapper_proc_t) (GLenum, const GLfixed*);
+typedef void (gles1_APIENTRY *glColor4xOES_wrapper_proc_t) (GLfixed, GLfixed, GLfixed, GLfixed);
+typedef void (gles1_APIENTRY *glDepthRangexOES_wrapper_proc_t) (GLclampx, GLclampx);
+typedef void (gles1_APIENTRY *glFogxOES_wrapper_proc_t) (GLenum, GLfixed);
+typedef void (gles1_APIENTRY *glFogxvOES_wrapper_proc_t) (GLenum, const GLfixed*);
+typedef void (gles1_APIENTRY *glFrustumxOES_wrapper_proc_t) (GLfixed, GLfixed, GLfixed, GLfixed, GLfixed, GLfixed);
+typedef void (gles1_APIENTRY *glGetClipPlanexOES_wrapper_proc_t) (GLenum, GLfixed*);
+typedef void (gles1_APIENTRY *glGetClipPlanex_wrapper_proc_t) (GLenum, GLfixed*);
+typedef void (gles1_APIENTRY *glGetFixedvOES_wrapper_proc_t) (GLenum, GLfixed*);
+typedef void (gles1_APIENTRY *glGetLightxvOES_wrapper_proc_t) (GLenum, GLenum, GLfixed*);
+typedef void (gles1_APIENTRY *glGetMaterialxvOES_wrapper_proc_t) (GLenum, GLenum, GLfixed*);
+typedef void (gles1_APIENTRY *glGetTexEnvxvOES_wrapper_proc_t) (GLenum, GLenum, GLfixed*);
+typedef void (gles1_APIENTRY *glGetTexParameterxvOES_wrapper_proc_t) (GLenum, GLenum, GLfixed*);
+typedef void (gles1_APIENTRY *glLightModelxOES_wrapper_proc_t) (GLenum, GLfixed);
+typedef void (gles1_APIENTRY *glLightModelxvOES_wrapper_proc_t) (GLenum, const GLfixed*);
+typedef void (gles1_APIENTRY *glLightxOES_wrapper_proc_t) (GLenum, GLenum, GLfixed);
+typedef void (gles1_APIENTRY *glLightxvOES_wrapper_proc_t) (GLenum, GLenum, const GLfixed*);
+typedef void (gles1_APIENTRY *glLineWidthxOES_wrapper_proc_t) (GLfixed);
+typedef void (gles1_APIENTRY *glLoadMatrixxOES_wrapper_proc_t) (const GLfixed*);
+typedef void (gles1_APIENTRY *glMaterialxOES_wrapper_proc_t) (GLenum, GLenum, GLfixed);
+typedef void (gles1_APIENTRY *glMaterialxvOES_wrapper_proc_t) (GLenum, GLenum, const GLfixed*);
+typedef void (gles1_APIENTRY *glMultMatrixxOES_wrapper_proc_t) (const GLfixed*);
+typedef void (gles1_APIENTRY *glMultiTexCoord4xOES_wrapper_proc_t) (GLenum, GLfixed, GLfixed, GLfixed, GLfixed);
+typedef void (gles1_APIENTRY *glNormal3xOES_wrapper_proc_t) (GLfixed, GLfixed, GLfixed);
+typedef void (gles1_APIENTRY *glOrthoxOES_wrapper_proc_t) (GLfixed, GLfixed, GLfixed, GLfixed, GLfixed, GLfixed);
+typedef void (gles1_APIENTRY *glPointParameterxOES_wrapper_proc_t) (GLenum, GLfixed);
+typedef void (gles1_APIENTRY *glPointParameterxvOES_wrapper_proc_t) (GLenum, const GLfixed*);
+typedef void (gles1_APIENTRY *glPointSizexOES_wrapper_proc_t) (GLfixed);
+typedef void (gles1_APIENTRY *glPolygonOffsetxOES_wrapper_proc_t) (GLfixed, GLfixed);
+typedef void (gles1_APIENTRY *glRotatexOES_wrapper_proc_t) (GLfixed, GLfixed, GLfixed, GLfixed);
+typedef void (gles1_APIENTRY *glSampleCoveragexOES_wrapper_proc_t) (GLclampx, GLboolean);
+typedef void (gles1_APIENTRY *glScalexOES_wrapper_proc_t) (GLfixed, GLfixed, GLfixed);
+typedef void (gles1_APIENTRY *glTexEnvxOES_wrapper_proc_t) (GLenum, GLenum, GLfixed);
+typedef void (gles1_APIENTRY *glTexEnvxvOES_wrapper_proc_t) (GLenum, GLenum, const GLfixed*);
+typedef void (gles1_APIENTRY *glTexParameterxOES_wrapper_proc_t) (GLenum, GLenum, GLfixed);
+typedef void (gles1_APIENTRY *glTexParameterxvOES_wrapper_proc_t) (GLenum, GLenum, const GLfixed*);
+typedef void (gles1_APIENTRY *glTranslatexOES_wrapper_proc_t) (GLfixed, GLfixed, GLfixed);
+typedef GLboolean (gles1_APIENTRY *glIsRenderbufferOES_wrapper_proc_t) (GLuint);
+typedef void (gles1_APIENTRY *glBindRenderbufferOES_wrapper_proc_t) (GLenum, GLuint);
+typedef void (gles1_APIENTRY *glDeleteRenderbuffersOES_wrapper_proc_t) (GLsizei, const GLuint*);
+typedef void (gles1_APIENTRY *glGenRenderbuffersOES_wrapper_proc_t) (GLsizei, GLuint*);
+typedef void (gles1_APIENTRY *glRenderbufferStorageOES_wrapper_proc_t) (GLenum, GLenum, GLsizei, GLsizei);
+typedef void (gles1_APIENTRY *glGetRenderbufferParameterivOES_wrapper_proc_t) (GLenum, GLenum, GLint*);
+typedef GLboolean (gles1_APIENTRY *glIsFramebufferOES_wrapper_proc_t) (GLuint);
+typedef void (gles1_APIENTRY *glBindFramebufferOES_wrapper_proc_t) (GLenum, GLuint);
+typedef void (gles1_APIENTRY *glDeleteFramebuffersOES_wrapper_proc_t) (GLsizei, const GLuint*);
+typedef void (gles1_APIENTRY *glGenFramebuffersOES_wrapper_proc_t) (GLsizei, GLuint*);
+typedef GLenum (gles1_APIENTRY *glCheckFramebufferStatusOES_wrapper_proc_t) (GLenum);
+typedef void (gles1_APIENTRY *glFramebufferRenderbufferOES_wrapper_proc_t) (GLenum, GLenum, GLenum, GLuint);
+typedef void (gles1_APIENTRY *glFramebufferTexture2DOES_wrapper_proc_t) (GLenum, GLenum, GLenum, GLuint, GLint);
+typedef void (gles1_APIENTRY *glGetFramebufferAttachmentParameterivOES_wrapper_proc_t) (GLenum, GLenum, GLenum, GLint*);
+typedef void (gles1_APIENTRY *glGenerateMipmapOES_wrapper_proc_t) (GLenum);
+typedef void* (gles1_APIENTRY *glMapBufferOES_wrapper_proc_t) (GLenum, GLenum);
+typedef GLboolean (gles1_APIENTRY *glUnmapBufferOES_wrapper_proc_t) (GLenum);
+typedef void (gles1_APIENTRY *glGetBufferPointervOES_wrapper_proc_t) (GLenum, GLenum, GLvoid**);
+typedef void (gles1_APIENTRY *glCurrentPaletteMatrixOES_wrapper_proc_t) (GLuint);
+typedef void (gles1_APIENTRY *glLoadPaletteFromModelViewMatrixOES_wrapper_proc_t) ();
+typedef void (gles1_APIENTRY *glMatrixIndexPointerOES_wrapper_proc_t) (GLint, GLenum, GLsizei, const GLvoid*);
+typedef void (gles1_APIENTRY *glWeightPointerOES_wrapper_proc_t) (GLint, GLenum, GLsizei, const GLvoid*);
+typedef GLbitfield (gles1_APIENTRY *glQueryMatrixxOES_wrapper_proc_t) (GLfixed*, GLint*);
+typedef void (gles1_APIENTRY *glDepthRangefOES_wrapper_proc_t) (GLclampf, GLclampf);
+typedef void (gles1_APIENTRY *glFrustumfOES_wrapper_proc_t) (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+typedef void (gles1_APIENTRY *glOrthofOES_wrapper_proc_t) (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+typedef void (gles1_APIENTRY *glClipPlanefOES_wrapper_proc_t) (GLenum, const GLfloat*);
+typedef void (gles1_APIENTRY *glClipPlanefIMG_wrapper_proc_t) (GLenum, const GLfloat*);
+typedef void (gles1_APIENTRY *glGetClipPlanefOES_wrapper_proc_t) (GLenum, GLfloat*);
+typedef void (gles1_APIENTRY *glClearDepthfOES_wrapper_proc_t) (GLclampf);
+typedef void (gles1_APIENTRY *glTexGenfOES_wrapper_proc_t) (GLenum, GLenum, GLfloat);
+typedef void (gles1_APIENTRY *glTexGenfvOES_wrapper_proc_t) (GLenum, GLenum, const GLfloat*);
+typedef void (gles1_APIENTRY *glTexGeniOES_wrapper_proc_t) (GLenum, GLenum, GLint);
+typedef void (gles1_APIENTRY *glTexGenivOES_wrapper_proc_t) (GLenum, GLenum, const GLint*);
+typedef void (gles1_APIENTRY *glTexGenxOES_wrapper_proc_t) (GLenum, GLenum, GLfixed);
+typedef void (gles1_APIENTRY *glTexGenxvOES_wrapper_proc_t) (GLenum, GLenum, const GLfixed*);
+typedef void (gles1_APIENTRY *glGetTexGenfvOES_wrapper_proc_t) (GLenum, GLenum, GLfloat*);
+typedef void (gles1_APIENTRY *glGetTexGenivOES_wrapper_proc_t) (GLenum, GLenum, GLint*);
+typedef void (gles1_APIENTRY *glGetTexGenxvOES_wrapper_proc_t) (GLenum, GLenum, GLfixed*);
+typedef void (gles1_APIENTRY *glBindVertexArrayOES_wrapper_proc_t) (GLuint);
+typedef void (gles1_APIENTRY *glDeleteVertexArraysOES_wrapper_proc_t) (GLsizei, const GLuint*);
+typedef void (gles1_APIENTRY *glGenVertexArraysOES_wrapper_proc_t) (GLsizei, GLuint*);
+typedef GLboolean (gles1_APIENTRY *glIsVertexArrayOES_wrapper_proc_t) (GLuint);
+typedef void (gles1_APIENTRY *glDiscardFramebufferEXT_wrapper_proc_t) (GLenum, GLsizei, const GLenum*);
+typedef void (gles1_APIENTRY *glMultiDrawArraysEXT_wrapper_proc_t) (GLenum, const GLint*, const GLsizei*, GLsizei);
+typedef void (gles1_APIENTRY *glMultiDrawElementsEXT_wrapper_proc_t) (GLenum, const GLsizei*, GLenum, const GLvoid* const*, GLsizei);
+typedef void (gles1_APIENTRY *glMultiDrawArraysSUN_wrapper_proc_t) (GLenum, GLint*, GLsizei*, GLsizei);
+typedef void (gles1_APIENTRY *glMultiDrawElementsSUN_wrapper_proc_t) (GLenum, const GLsizei*, GLenum, const GLvoid**, GLsizei);
+typedef void (gles1_APIENTRY *glRenderbufferStorageMultisampleIMG_wrapper_proc_t) (GLenum, GLsizei, GLenum, GLsizei, GLsizei);
+typedef void (gles1_APIENTRY *glFramebufferTexture2DMultisampleIMG_wrapper_proc_t) (GLenum, GLenum, GLenum, GLuint, GLint, GLsizei);
+typedef void (gles1_APIENTRY *glDeleteFencesNV_wrapper_proc_t) (GLsizei, const GLuint*);
+typedef void (gles1_APIENTRY *glGenFencesNV_wrapper_proc_t) (GLsizei, GLuint*);
+typedef GLboolean (gles1_APIENTRY *glIsFenceNV_wrapper_proc_t) (GLuint);
+typedef GLboolean (gles1_APIENTRY *glTestFenceNV_wrapper_proc_t) (GLuint);
+typedef void (gles1_APIENTRY *glGetFenceivNV_wrapper_proc_t) (GLuint, GLenum, GLint*);
+typedef void (gles1_APIENTRY *glFinishFenceNV_wrapper_proc_t) (GLuint);
+typedef void (gles1_APIENTRY *glSetFenceNV_wrapper_proc_t) (GLuint, GLenum);
+typedef void (gles1_APIENTRY *glGetDriverControlsQCOM_wrapper_proc_t) (GLint*, GLsizei, GLuint*);
+typedef void (gles1_APIENTRY *glGetDriverControlStringQCOM_wrapper_proc_t) (GLuint, GLsizei, GLsizei*, GLchar*);
+typedef void (gles1_APIENTRY *glEnableDriverControlQCOM_wrapper_proc_t) (GLuint);
+typedef void (gles1_APIENTRY *glDisableDriverControlQCOM_wrapper_proc_t) (GLuint);
+typedef void (gles1_APIENTRY *glExtGetTexturesQCOM_wrapper_proc_t) (GLuint*, GLint, GLint*);
+typedef void (gles1_APIENTRY *glExtGetBuffersQCOM_wrapper_proc_t) (GLuint*, GLint, GLint*);
+typedef void (gles1_APIENTRY *glExtGetRenderbuffersQCOM_wrapper_proc_t) (GLuint*, GLint, GLint*);
+typedef void (gles1_APIENTRY *glExtGetFramebuffersQCOM_wrapper_proc_t) (GLuint*, GLint, GLint*);
+typedef void (gles1_APIENTRY *glExtGetTexLevelParameterivQCOM_wrapper_proc_t) (GLuint, GLenum, GLint, GLenum, GLint*);
+typedef void (gles1_APIENTRY *glExtTexObjectStateOverrideiQCOM_wrapper_proc_t) (GLenum, GLenum, GLint);
+typedef void (gles1_APIENTRY *glExtGetTexSubImageQCOM_wrapper_proc_t) (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, GLvoid*);
+typedef void (gles1_APIENTRY *glExtGetBufferPointervQCOM_wrapper_proc_t) (GLenum, GLvoid**);
+typedef void (gles1_APIENTRY *glExtGetShadersQCOM_wrapper_proc_t) (GLuint*, GLint, GLint*);
+typedef void (gles1_APIENTRY *glExtGetProgramsQCOM_wrapper_proc_t) (GLuint*, GLint, GLint*);
+typedef GLboolean (gles1_APIENTRY *glExtIsProgramBinaryQCOM_wrapper_proc_t) (GLuint);
+typedef void (gles1_APIENTRY *glExtGetProgramBinarySourceQCOM_wrapper_proc_t) (GLuint, GLenum, GLchar*, GLint*);
+typedef void (gles1_APIENTRY *glStartTilingQCOM_wrapper_proc_t) (GLuint, GLuint, GLuint, GLuint, GLbitfield);
+typedef void (gles1_APIENTRY *glEndTilingQCOM_wrapper_proc_t) (GLbitfield);
+
+
+#endif
diff --git a/guest/libs/eglwrapper/gles3.attrib b/guest/libs/eglwrapper/gles3.attrib
new file mode 100644
index 0000000..14b257c
--- /dev/null
+++ b/guest/libs/eglwrapper/gles3.attrib
@@ -0,0 +1 @@
+GLOBAL
diff --git a/guest/libs/eglwrapper/gles3.cpp b/guest/libs/eglwrapper/gles3.cpp
new file mode 100644
index 0000000..7a9690a
--- /dev/null
+++ b/guest/libs/eglwrapper/gles3.cpp
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "gles3_wrapper_context.h"
+#undef GET_CONTEXT
+
+#include <dlfcn.h>
+
+gles3_wrapper_context_t* (*getGLES3Context)(void) = NULL;
+
+static gles3_wrapper_context_t g_gles3_wrapper_context;
+
+static gles3_wrapper_context_t *gles3(void) {
+	return &g_gles3_wrapper_context;
+}
+
+void gles3_wrapper_context_t::setContextAccessor(gles3_wrapper_context_t* (*f)(void)) {
+	getGLES3Context = f;
+}
+
+std::mutex g_context_mutex;
+
+static void *getProc(const char *name, void *userData) {
+	return dlsym(userData, name);
+}
+
+__attribute__((constructor)) void setup() {
+	void *gles3_handle = dlopen("/system/vendor/lib/egl/libGLESv2_swiftshader.so", RTLD_NOW);
+	g_gles3_wrapper_context.initDispatchByName(getProc, gles3_handle);
+	g_gles3_wrapper_context.setContextAccessor(gles3);
+}
diff --git a/guest/libs/eglwrapper/gles3.in b/guest/libs/eglwrapper/gles3.in
new file mode 100644
index 0000000..a0801a3
--- /dev/null
+++ b/guest/libs/eglwrapper/gles3.in
@@ -0,0 +1,559 @@
+GL_ENTRY(void, glActiveTexture, GLenum texture)
+GL_ENTRY(void, glAttachShader, GLuint program, GLuint shader)
+GL_ENTRY(void, glBindAttribLocation, GLuint program, GLuint index, const GLchar* name)
+GL_ENTRY(void, glBindBuffer, GLenum target, GLuint buffer)
+GL_ENTRY(void, glBindFramebuffer, GLenum target, GLuint framebuffer)
+GL_ENTRY(void, glBindRenderbuffer, GLenum target, GLuint renderbuffer)
+GL_ENTRY(void, glBindTexture, GLenum target, GLuint texture)
+GL_ENTRY(void, glBlendColor, GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
+GL_ENTRY(void, glBlendEquation,  GLenum mode )
+GL_ENTRY(void, glBlendEquationSeparate, GLenum modeRGB, GLenum modeAlpha)
+GL_ENTRY(void, glBlendFunc, GLenum sfactor, GLenum dfactor)
+GL_ENTRY(void, glBlendFuncSeparate, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
+GL_ENTRY(void, glBufferData, GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage)
+GL_ENTRY(void, glBufferSubData, GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data)
+GL_ENTRY(GLenum, glCheckFramebufferStatus, GLenum target)
+GL_ENTRY(void, glClear, GLbitfield mask)
+GL_ENTRY(void, glClearColor, GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
+GL_ENTRY(void, glClearDepthf, GLclampf depth)
+GL_ENTRY(void, glClearStencil, GLint s)
+GL_ENTRY(void, glColorMask, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
+GL_ENTRY(void, glCompileShader, GLuint shader)
+GL_ENTRY(void, glCompressedTexImage2D, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data)
+GL_ENTRY(void, glCompressedTexSubImage2D, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data)
+GL_ENTRY(void, glCopyTexImage2D, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
+GL_ENTRY(void, glCopyTexSubImage2D, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+GL_ENTRY(GLuint, glCreateProgram, void)
+GL_ENTRY(GLuint, glCreateShader, GLenum type)
+GL_ENTRY(void, glCullFace, GLenum mode)
+GL_ENTRY(void, glDeleteBuffers, GLsizei n, const GLuint* buffers)
+GL_ENTRY(void, glDeleteFramebuffers, GLsizei n, const GLuint* framebuffers)
+GL_ENTRY(void, glDeleteProgram, GLuint program)
+GL_ENTRY(void, glDeleteRenderbuffers, GLsizei n, const GLuint* renderbuffers)
+GL_ENTRY(void, glDeleteShader, GLuint shader)
+GL_ENTRY(void, glDeleteTextures, GLsizei n, const GLuint* textures)
+GL_ENTRY(void, glDepthFunc, GLenum func)
+GL_ENTRY(void, glDepthMask, GLboolean flag)
+GL_ENTRY(void, glDepthRangef, GLclampf zNear, GLclampf zFar)
+GL_ENTRY(void, glDetachShader, GLuint program, GLuint shader)
+GL_ENTRY(void, glDisable, GLenum cap)
+GL_ENTRY(void, glDisableVertexAttribArray, GLuint index)
+GL_ENTRY(void, glDrawArrays, GLenum mode, GLint first, GLsizei count)
+GL_ENTRY(void, glDrawElements, GLenum mode, GLsizei count, GLenum type, const GLvoid* indices)
+GL_ENTRY(void, glEnable, GLenum cap)
+GL_ENTRY(void, glEnableVertexAttribArray, GLuint index)
+GL_ENTRY(void, glFinish, void)
+GL_ENTRY(void, glFlush, void)
+GL_ENTRY(void, glFramebufferRenderbuffer, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
+GL_ENTRY(void, glFramebufferTexture2D, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
+GL_ENTRY(void, glFrontFace, GLenum mode)
+GL_ENTRY(void, glGenBuffers, GLsizei n, GLuint* buffers)
+GL_ENTRY(void, glGenerateMipmap, GLenum target)
+GL_ENTRY(void, glGenFramebuffers, GLsizei n, GLuint* framebuffers)
+GL_ENTRY(void, glGenRenderbuffers, GLsizei n, GLuint* renderbuffers)
+GL_ENTRY(void, glGenTextures, GLsizei n, GLuint* textures)
+GL_ENTRY(void, glGetActiveAttrib, GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name)
+GL_ENTRY(void, glGetActiveUniform, GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name)
+GL_ENTRY(void, glGetAttachedShaders, GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders)
+GL_ENTRY(int, glGetAttribLocation, GLuint program, const GLchar* name)
+GL_ENTRY(void, glGetBooleanv, GLenum pname, GLboolean* params)
+GL_ENTRY(void, glGetBufferParameteriv, GLenum target, GLenum pname, GLint* params)
+GL_ENTRY(GLenum, glGetError, void)
+GL_ENTRY(void, glGetFloatv, GLenum pname, GLfloat* params)
+GL_ENTRY(void, glGetFramebufferAttachmentParameteriv, GLenum target, GLenum attachment, GLenum pname, GLint* params)
+GL_ENTRY(void, glGetIntegerv, GLenum pname, GLint* params)
+GL_ENTRY(void, glGetProgramiv, GLuint program, GLenum pname, GLint* params)
+GL_ENTRY(void, glGetProgramInfoLog, GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog)
+GL_ENTRY(void, glGetRenderbufferParameteriv, GLenum target, GLenum pname, GLint* params)
+GL_ENTRY(void, glGetShaderiv, GLuint shader, GLenum pname, GLint* params)
+GL_ENTRY(void, glGetShaderInfoLog, GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog)
+GL_ENTRY(void, glGetShaderPrecisionFormat, GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision)
+GL_ENTRY(void, glGetShaderSource, GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source)
+GL_ENTRY(const GLubyte*, glGetString, GLenum name)
+GL_ENTRY(void, glGetTexParameterfv, GLenum target, GLenum pname, GLfloat* params)
+GL_ENTRY(void, glGetTexParameteriv, GLenum target, GLenum pname, GLint* params)
+GL_ENTRY(void, glGetUniformfv, GLuint program, GLint location, GLfloat* params)
+GL_ENTRY(void, glGetUniformiv, GLuint program, GLint location, GLint* params)
+GL_ENTRY(int, glGetUniformLocation, GLuint program, const GLchar* name)
+GL_ENTRY(void, glGetVertexAttribfv, GLuint index, GLenum pname, GLfloat* params)
+GL_ENTRY(void, glGetVertexAttribiv, GLuint index, GLenum pname, GLint* params)
+GL_ENTRY(void, glGetVertexAttribPointerv, GLuint index, GLenum pname, GLvoid** pointer)
+GL_ENTRY(void, glHint, GLenum target, GLenum mode)
+GL_ENTRY(GLboolean, glIsBuffer, GLuint buffer)
+GL_ENTRY(GLboolean, glIsEnabled, GLenum cap)
+GL_ENTRY(GLboolean, glIsFramebuffer, GLuint framebuffer)
+GL_ENTRY(GLboolean, glIsProgram, GLuint program)
+GL_ENTRY(GLboolean, glIsRenderbuffer, GLuint renderbuffer)
+GL_ENTRY(GLboolean, glIsShader, GLuint shader)
+GL_ENTRY(GLboolean, glIsTexture, GLuint texture)
+GL_ENTRY(void, glLineWidth, GLfloat width)
+GL_ENTRY(void, glLinkProgram, GLuint program)
+GL_ENTRY(void, glPixelStorei, GLenum pname, GLint param)
+GL_ENTRY(void, glPolygonOffset, GLfloat factor, GLfloat units)
+GL_ENTRY(void, glReadPixels, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels)
+GL_ENTRY(void, glReleaseShaderCompiler, void)
+GL_ENTRY(void, glRenderbufferStorage, GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
+GL_ENTRY(void, glSampleCoverage, GLclampf value, GLboolean invert)
+GL_ENTRY(void, glScissor, GLint x, GLint y, GLsizei width, GLsizei height)
+GL_ENTRY(void, glShaderBinary, GLsizei n, const GLuint* shaders, GLenum binaryformat, const GLvoid* binary, GLsizei length)
+GL_ENTRY(void, glShaderSource, GLuint shader, GLsizei count, const GLchar*const* string, const GLint* length)
+GL_ENTRY(void, glStencilFunc, GLenum func, GLint ref, GLuint mask)
+GL_ENTRY(void, glStencilFuncSeparate, GLenum face, GLenum func, GLint ref, GLuint mask)
+GL_ENTRY(void, glStencilMask, GLuint mask)
+GL_ENTRY(void, glStencilMaskSeparate, GLenum face, GLuint mask)
+GL_ENTRY(void, glStencilOp, GLenum fail, GLenum zfail, GLenum zpass)
+GL_ENTRY(void, glStencilOpSeparate, GLenum face, GLenum fail, GLenum zfail, GLenum zpass)
+GL_ENTRY(void, glTexImage2D, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels)
+GL_ENTRY(void, glTexParameterf, GLenum target, GLenum pname, GLfloat param)
+GL_ENTRY(void, glTexParameterfv, GLenum target, GLenum pname, const GLfloat* params)
+GL_ENTRY(void, glTexParameteri, GLenum target, GLenum pname, GLint param)
+GL_ENTRY(void, glTexParameteriv, GLenum target, GLenum pname, const GLint* params)
+GL_ENTRY(void, glTexSubImage2D, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels)
+GL_ENTRY(void, glUniform1f, GLint location, GLfloat x)
+GL_ENTRY(void, glUniform1fv, GLint location, GLsizei count, const GLfloat* v)
+GL_ENTRY(void, glUniform1i, GLint location, GLint x)
+GL_ENTRY(void, glUniform1iv, GLint location, GLsizei count, const GLint* v)
+GL_ENTRY(void, glUniform2f, GLint location, GLfloat x, GLfloat y)
+GL_ENTRY(void, glUniform2fv, GLint location, GLsizei count, const GLfloat* v)
+GL_ENTRY(void, glUniform2i, GLint location, GLint x, GLint y)
+GL_ENTRY(void, glUniform2iv, GLint location, GLsizei count, const GLint* v)
+GL_ENTRY(void, glUniform3f, GLint location, GLfloat x, GLfloat y, GLfloat z)
+GL_ENTRY(void, glUniform3fv, GLint location, GLsizei count, const GLfloat* v)
+GL_ENTRY(void, glUniform3i, GLint location, GLint x, GLint y, GLint z)
+GL_ENTRY(void, glUniform3iv, GLint location, GLsizei count, const GLint* v)
+GL_ENTRY(void, glUniform4f, GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+GL_ENTRY(void, glUniform4fv, GLint location, GLsizei count, const GLfloat* v)
+GL_ENTRY(void, glUniform4i, GLint location, GLint x, GLint y, GLint z, GLint w)
+GL_ENTRY(void, glUniform4iv, GLint location, GLsizei count, const GLint* v)
+GL_ENTRY(void, glUniformMatrix2fv, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
+GL_ENTRY(void, glUniformMatrix3fv, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
+GL_ENTRY(void, glUniformMatrix4fv, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
+GL_ENTRY(void, glUseProgram, GLuint program)
+GL_ENTRY(void, glValidateProgram, GLuint program)
+GL_ENTRY(void, glVertexAttrib1f, GLuint indx, GLfloat x)
+GL_ENTRY(void, glVertexAttrib1fv, GLuint indx, const GLfloat* values)
+GL_ENTRY(void, glVertexAttrib2f, GLuint indx, GLfloat x, GLfloat y)
+GL_ENTRY(void, glVertexAttrib2fv, GLuint indx, const GLfloat* values)
+GL_ENTRY(void, glVertexAttrib3f, GLuint indx, GLfloat x, GLfloat y, GLfloat z)
+GL_ENTRY(void, glVertexAttrib3fv, GLuint indx, const GLfloat* values)
+GL_ENTRY(void, glVertexAttrib4f, GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+GL_ENTRY(void, glVertexAttrib4fv, GLuint indx, const GLfloat* values)
+GL_ENTRY(void, glVertexAttribPointer, GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr)
+GL_ENTRY(void, glViewport, GLint x, GLint y, GLsizei width, GLsizei height)
+GL_ENTRY(void, glEGLImageTargetTexture2DOES, GLenum target, GLeglImageOES image)
+GL_ENTRY(void, glEGLImageTargetRenderbufferStorageOES, GLenum target, GLeglImageOES image)
+GL_ENTRY(void, glGetProgramBinaryOES, GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary)
+GL_ENTRY(void, glProgramBinaryOES, GLuint program, GLenum binaryFormat, const GLvoid *binary, GLint length)
+GL_ENTRY(void*, glMapBufferOES, GLenum target, GLenum access)
+GL_ENTRY(GLboolean, glUnmapBufferOES, GLenum target)
+#GL_ENTRY(void, glGetBufferPointervOES, GLenum target, GLenum pname, GLvoid** params)
+GL_ENTRY(void, glTexImage3DOES, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels)
+GL_ENTRY(void, glTexSubImage3DOES, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* pixels)
+GL_ENTRY(void, glCopyTexSubImage3DOES, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+GL_ENTRY(void, glCompressedTexImage3DOES, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data)
+GL_ENTRY(void, glCompressedTexSubImage3DOES, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data)
+GL_ENTRY(void, glFramebufferTexture3DOES, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset)
+GL_ENTRY(void, glBindVertexArrayOES, GLuint array)
+GL_ENTRY(void, glDeleteVertexArraysOES, GLsizei n, const GLuint *arrays)
+GL_ENTRY(void, glGenVertexArraysOES, GLsizei n, GLuint *arrays)
+GL_ENTRY(GLboolean, glIsVertexArrayOES, GLuint array)
+GL_ENTRY(void, glDiscardFramebufferEXT, GLenum target, GLsizei numAttachments, const GLenum *attachments)
+GL_ENTRY(void, glMultiDrawArraysEXT, GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount)
+GL_ENTRY(void, glMultiDrawElementsEXT, GLenum mode, const GLsizei *count, GLenum type, const GLvoid*const* indices, GLsizei primcount)
+
+#not supported
+GL_ENTRY(void, glGetPerfMonitorGroupsAMD, GLint *numGroups, GLsizei groupsSize, GLuint *groups)
+GL_ENTRY(void, glGetPerfMonitorCountersAMD, GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters)
+GL_ENTRY(void, glGetPerfMonitorGroupStringAMD, GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString)
+GL_ENTRY(void, glGetPerfMonitorCounterStringAMD, GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString)
+GL_ENTRY(void, glGetPerfMonitorCounterInfoAMD, GLuint group, GLuint counter, GLenum pname, GLvoid *data)
+GL_ENTRY(void, glGenPerfMonitorsAMD, GLsizei n, GLuint *monitors)
+GL_ENTRY(void, glDeletePerfMonitorsAMD, GLsizei n, GLuint *monitors)
+GL_ENTRY(void, glSelectPerfMonitorCountersAMD, GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *countersList)
+GL_ENTRY(void, glBeginPerfMonitorAMD, GLuint monitor)
+GL_ENTRY(void, glEndPerfMonitorAMD, GLuint monitor)
+GL_ENTRY(void, glGetPerfMonitorCounterDataAMD, GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten)
+
+GL_ENTRY(void, glRenderbufferStorageMultisampleIMG, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
+GL_ENTRY(void, glFramebufferTexture2DMultisampleIMG, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples)
+GL_ENTRY(void, glDeleteFencesNV, GLsizei n, const GLuint *fences)
+GL_ENTRY(void, glGenFencesNV, GLsizei n, GLuint *fences)
+GL_ENTRY(GLboolean, glIsFenceNV, GLuint fence)
+GL_ENTRY(GLboolean, glTestFenceNV, GLuint fence)
+GL_ENTRY(void, glGetFenceivNV, GLuint fence, GLenum pname, GLint *params)
+GL_ENTRY(void, glFinishFenceNV, GLuint fence)
+GL_ENTRY(void, glSetFenceNV, GLuint fence, GLenum condition)
+GL_ENTRY(void, glCoverageMaskNV, GLboolean mask)
+GL_ENTRY(void, glCoverageOperationNV, GLenum operation)
+GL_ENTRY(void, glGetDriverControlsQCOM, GLint *num, GLsizei size, GLuint *driverControls)
+GL_ENTRY(void, glGetDriverControlStringQCOM, GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString)
+GL_ENTRY(void, glEnableDriverControlQCOM, GLuint driverControl)
+GL_ENTRY(void, glDisableDriverControlQCOM, GLuint driverControl)
+GL_ENTRY(void, glExtGetTexturesQCOM, GLuint *textures, GLint maxTextures, GLint *numTextures)
+GL_ENTRY(void, glExtGetBuffersQCOM, GLuint *buffers, GLint maxBuffers, GLint *numBuffers)
+GL_ENTRY(void, glExtGetRenderbuffersQCOM, GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers)
+GL_ENTRY(void, glExtGetFramebuffersQCOM, GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers)
+GL_ENTRY(void, glExtGetTexLevelParameterivQCOM, GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params)
+GL_ENTRY(void, glExtTexObjectStateOverrideiQCOM, GLenum target, GLenum pname, GLint param)
+GL_ENTRY(void, glExtGetTexSubImageQCOM, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid *texels)
+GL_ENTRY(void, glExtGetBufferPointervQCOM, GLenum target, GLvoidptr *params)
+GL_ENTRY(void, glExtGetShadersQCOM, GLuint *shaders, GLint maxShaders, GLint *numShaders)
+GL_ENTRY(void, glExtGetProgramsQCOM, GLuint *programs, GLint maxPrograms, GLint *numPrograms)
+GL_ENTRY(GLboolean, glExtIsProgramBinaryQCOM, GLuint program)
+GL_ENTRY(void, glExtGetProgramBinarySourceQCOM, GLuint program, GLenum shadertype, GLchar *source, GLint *length)
+GL_ENTRY(void, glStartTilingQCOM, GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask)
+GL_ENTRY(void, glEndTilingQCOM, GLbitfield preserveMask)
+
+# add-ons for GLES 2
+GL_ENTRY(void, glVertexAttribPointerData, GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride,  void * data, GLuint datalen)
+GL_ENTRY(void, glVertexAttribPointerOffset, GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride,  GLuint offset)
+GL_ENTRY(void, glDrawElementsOffset, GLenum mode, GLsizei count, GLenum type, GLuint offset)
+GL_ENTRY(void, glDrawElementsData, GLenum mode, GLsizei count, GLenum type, void *data, GLuint datalen)
+GL_ENTRY(void, glGetCompressedTextureFormats, int count, GLint *formats)
+GL_ENTRY(void, glShaderString, GLuint shader, const GLchar* string, GLsizei len)
+GL_ENTRY(int, glFinishRoundTrip, void)
+
+# GLES 3.0 ApiGen .in
+
+# Changes to existing API:
+
+## New formats: Need to update all validation code to handle GLES 3.x-specific formats.
+## Primitive restart (close to already implemented in guest encoder, but can be tricky to validate in the middle of all the other draw validation going on)
+## Texture compression with ETC2 (already implemented)
+
+# New API calls - listed in approximate decreasing order of complexity
+
+# Vertex Array Objects
+## Before anything else, move GL calls out of sendVertexAttributes() in encoder,
+## or we will get this wrong, as we currently delay glEnableVertexAttribArray/ glVertexAttribPointer
+## until right before glDrawElements/Arrays.
+## This means moving those attribpointer calls out,
+## AND preserving the index range validation behavior that happens
+## just before glDrawElements/Arrays.
+GL_ENTRY(void, glGenVertexArrays, GLsizei n, GLuint* arrays)
+GL_ENTRY(void, glBindVertexArray, GLuint array)
+GL_ENTRY(void, glDeleteVertexArrays, GLsizei n, const GLuint *arrays)
+GL_ENTRY(GLboolean, glIsVertexArray, GLuint array)
+
+# New buffer operationarrays Mapping needs different encoding interface: copy from host on map, and copy to host (and host GPU pointer) on unmap or flush.
+## Proposed:
+GL_ENTRY(void*, glMapBufferRange, GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access)
+GL_ENTRY(GLboolean, glUnmapBuffer, GLenum target)
+GL_ENTRY(void, glFlushMappedBufferRange, GLenum target, GLintptr offset, GLsizeiptr length)
+GL_ENTRY(void, glMapBufferRangeAEMU, GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access, void* mapped)
+GL_ENTRY(void, glUnmapBufferAEMU, GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access, void* guest_buffer, GLboolean* out_res)
+GL_ENTRY(void, glFlushMappedBufferRangeAEMU, GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access, void* guest_buffer)
+## It seems we can use glUnmapBuffer and glFlushMappedBufferRange as synchronization points
+## to update the host with the new buffer contents:
+## glMapBufferRange / glUnmapBuffer:
+## Guest:                    | Encoder:                           | Host:
+## void* x = glMapBuffer...  |                                    |          
+##                           | glMapBufferRangeAEMU_enc...        |                                             
+##                           |                                    | void* hostptr = glMapBufferRange...
+##                           |                                    | memcpy(mapped, hostptr, sz)
+##                           | stream->readback(mapped, sz)       |                            
+##                           | glMapBufferRangeAEMU_enc exit      |                            
+## x holds host GPU contents |                                    |          
+## <operations on x>         |                                    |           
+## glUnmapBuffer...          |                                    |           
+##                           | glUnmapBufferAEMU_enc...           |           
+##                           | stream->writeFully(x, sz)          |           
+##                           |                                    | memcpy(hostptr, x, sz)
+##                           |                                    | glUnmapBuffer
+## glMapBufferRange / glFlushMappedBufferRange:
+## Guest:                    | Encoder:                           | Host:
+## void* x = glMapBuffer...  |                                    |          
+##                           | glMapBufferRangeAEMU_enc...        |                                             
+##                           |                                    | void* hostptr = glMapBufferRange...
+##                           |                                    | memcpy(mapped, hostptr, sz)
+##                           | stream->readback(mapped, sz)       |                            
+##                           | glMapBufferRangeAEMU_enc exit      |                            
+## x holds host GPU contents |                                    |          
+## <operations on x>         |                                    |           
+## glFlushMappedBufferRange..|                                    |           
+##                           | glFlushMappedBufferRangeAEMU...    |           
+##                           | stream->writeFully(flushedrange... |           
+##                           |                                    | memcpy(hostptr + offset, flushedrange, length)
+##                           |                                    | glFlushMappedBufferRange
+## Make sure to store the binded range when mapped, I bet there is some dEQP test that checks this sort of thing :)
+
+## PBOs need to be delivered differently to the host.
+GL_ENTRY(void, glReadPixelsOffsetAEMU, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLuint offset)
+GL_ENTRY(void, glCompressedTexImage2DOffsetAEMU, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, GLuint offset)
+GL_ENTRY(void, glCompressedTexSubImage2DOffsetAEMU, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, GLuint offset)
+GL_ENTRY(void, glTexImage2DOffsetAEMU, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, GLuint offset)
+GL_ENTRY(void, glTexSubImage2DOffsetAEMU, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLuint offset)
+
+GL_ENTRY(void, glBindBufferRange, GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size)
+GL_ENTRY(void, glBindBufferBase, GLenum target, GLuint index, GLuint buffer)
+## No need to consider mapped buffers here as that is a GL_INVALID_OPERATION :)
+GL_ENTRY(void, glCopyBufferSubData, GLenum readtarget, GLenum writetarget, GLintptr readoffset, GLintptr writeoffset, GLsizeiptr size);
+
+## These buffer clears don't involve anything that can be mapped, so we are OK.
+GL_ENTRY(void, glClearBufferiv, GLenum buffer, GLint drawBuffer, const GLint * value)
+GL_ENTRY(void, glClearBufferuiv, GLenum buffer, GLint drawBuffer, const GLuint * value)
+GL_ENTRY(void, glClearBufferfv, GLenum buffer, GLint drawBuffer, const GLfloat * value)
+GL_ENTRY(void, glClearBufferfi, GLenum buffer, GLint drawBuffer, GLfloat depth, GLint stencil)
+
+## Reads (not writes) mapped state only, so shouldn't be sent to host.
+GL_ENTRY(void, glGetBufferParameteri64v, GLenum target, GLenum value, GLint64 * data)
+
+# Get current mapped buffer pointer. Shouldn't be sent to host.
+GL_ENTRY(void, glGetBufferPointerv, GLenum target, GLenum pname, GLvoid** params)
+
+# UBOs
+## Share group processing needed for all of these, as the program is an argument.
+## Validation is bound (heh) to be tricky
+GL_ENTRY(void, glUniformBlockBinding, GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding)
+
+GL_ENTRY(GLuint, glGetUniformBlockIndex, GLuint program, const GLchar *uniformBlockName)
+
+# Assume uniformNames packed into 1 buffer on the guest.
+GL_ENTRY(void, glGetUniformIndices, GLuint program, GLsizei uniformCount, const GLchar*const* uniformNames, GLuint* uniformIndices)
+GL_ENTRY(void, glGetUniformIndicesAEMU, GLuint program, GLsizei uniformCount, const GLchar *packedUniformNames, GLsizei packedLen, GLuint *uniformIndices)
+
+GL_ENTRY(void, glGetActiveUniformBlockiv, GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params)
+GL_ENTRY(void, glGetActiveUniformBlockName, GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName)
+
+# More uniform setters
+GL_ENTRY(void, glUniform1ui, GLint location, GLuint v0)
+GL_ENTRY(void, glUniform2ui, GLint location, GLuint v0, GLuint v1)
+GL_ENTRY(void, glUniform3ui, GLint location, GLuint v0, GLuint v1, GLuint v2)
+GL_ENTRY(void, glUniform4ui, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
+GL_ENTRY(void, glUniform1uiv, GLint location, GLsizei count, const GLuint *value)
+GL_ENTRY(void, glUniform2uiv, GLint location, GLsizei count, const GLuint *value)
+GL_ENTRY(void, glUniform3uiv, GLint location, GLsizei count, const GLuint *value)
+GL_ENTRY(void, glUniform4uiv, GLint location, GLsizei count, const GLuint *value)
+GL_ENTRY(void, glUniformMatrix2x3fv, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+GL_ENTRY(void, glUniformMatrix3x2fv, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+GL_ENTRY(void, glUniformMatrix2x4fv, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+GL_ENTRY(void, glUniformMatrix4x2fv, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+GL_ENTRY(void, glUniformMatrix3x4fv, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+GL_ENTRY(void, glUniformMatrix4x3fv, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+
+# Need share group processing for these gets
+GL_ENTRY(void, glGetUniformuiv, GLuint program, GLint location, GLuint *params)
+GL_ENTRY(void, glGetActiveUniformsiv, GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params)
+
+# More vertex attribute setters / queries
+GL_ENTRY(void, glVertexAttribI4i, GLuint index, GLint v0, GLint v1, GLint v2, GLint v3)
+GL_ENTRY(void, glVertexAttribI4ui, GLuint index, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
+GL_ENTRY(void, glVertexAttribI4iv, GLuint index, const GLint *v)
+GL_ENTRY(void, glVertexAttribI4uiv, GLuint index, const GLuint *v)
+GL_ENTRY(void, glVertexAttribIPointer, GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid* pointer)
+GL_ENTRY(void, glVertexAttribIPointerOffsetAEMU, GLuint index, GLint size, GLenum type, GLsizei stride, GLuint offset)
+GL_ENTRY(void, glVertexAttribIPointerDataAEMU, GLuint index, GLint size, GLenum type, GLsizei stride, void* data, GLuint datalen)
+GL_ENTRY(void, glGetVertexAttribIiv, GLuint index, GLenum pname, GLint *params)
+GL_ENTRY(void, glGetVertexAttribIuiv, GLuint index, GLenum pname, GLuint *params)
+
+# Instanced draws
+GL_ENTRY(void, glVertexAttribDivisor, GLuint index, GLuint divisor)
+GL_ENTRY(void, glDrawArraysInstanced, GLenum mode, GLint first, GLsizei count, GLsizei primcount)
+
+GL_ENTRY(void, glDrawElementsInstanced, GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei primcount)
+GL_ENTRY(void, glDrawElementsInstancedDataAEMU, GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei primcount, GLsizei datalen)
+GL_ENTRY(void, glDrawElementsInstancedOffsetAEMU, GLenum mode, GLsizei count, GLenum type, GLuint offset, GLsizei primcount)
+
+
+# Draw with known index range
+GL_ENTRY(void, glDrawRangeElements, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid * indices)
+GL_ENTRY(void, glDrawRangeElementsDataAEMU, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid * indices, GLsizei datalen)
+GL_ENTRY(void, glDrawRangeElementsOffsetAEMU, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, GLuint offset)
+
+# Sync - mostly implemented on host, just need encoder part
+GL_ENTRY(GLsync, glFenceSync, GLenum condition, GLbitfield flags)
+GL_ENTRY(GLenum, glClientWaitSync, GLsync wait_on, GLbitfield flags, GLuint64 timeout)
+GL_ENTRY(void, glWaitSync, GLsync wait_on, GLbitfield flags, GLuint64 timeout)
+GL_ENTRY(void, glDeleteSync, GLsync to_delete)
+GL_ENTRY(GLboolean, glIsSync, GLsync sync)
+GL_ENTRY(void, glGetSynciv, GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values)
+
+GL_ENTRY(uint64_t, glFenceSyncAEMU, GLenum condition, GLbitfield flags)
+GL_ENTRY(GLenum, glClientWaitSyncAEMU, uint64_t wait_on, GLbitfield flags, GLuint64 timeout)
+GL_ENTRY(void, glWaitSyncAEMU, uint64_t wait_on, GLbitfield flags, GLuint64 timeout)
+GL_ENTRY(void, glDeleteSyncAEMU, uint64_t to_delete)
+GL_ENTRY(GLboolean, glIsSyncAEMU, uint64_t sync)
+GL_ENTRY(void, glGetSyncivAEMU, uint64_t sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values)
+
+# MRT / MSAA render buffer
+GL_ENTRY(void, glDrawBuffers, GLsizei n, const GLenum *bufs);
+GL_ENTRY(void, glReadBuffer, GLenum src);
+GL_ENTRY(void, glBlitFramebuffer, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+
+# Not even implemented in host driver if < OpenGL 4.3.
+# But we should call this anyway if the function is available.
+GL_ENTRY(void, glInvalidateFramebuffer, GLenum target, GLsizei numAttachments, const GLenum *attachments)
+GL_ENTRY(void, glInvalidateSubFramebuffer, GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height)
+
+GL_ENTRY(void, glFramebufferTextureLayer, GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+GL_ENTRY(void, glRenderbufferStorageMultisample, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+GL_ENTRY(void, glTexStorage2D, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+GL_ENTRY(void, glGetInternalformativ, GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params)
+
+# Transform feedback - share group processing in the last two
+GL_ENTRY(void, glBeginTransformFeedback, GLenum primitiveMode)
+GL_ENTRY(void, glEndTransformFeedback, void)
+GL_ENTRY(void, glGenTransformFeedbacks, GLsizei n, GLuint *ids)
+GL_ENTRY(void, glDeleteTransformFeedbacks, GLsizei n, const GLuint *ids)
+GL_ENTRY(void, glBindTransformFeedback, GLenum target, GLuint id)
+GL_ENTRY(void, glPauseTransformFeedback, void)
+GL_ENTRY(void, glResumeTransformFeedback, void)
+GL_ENTRY(GLboolean, glIsTransformFeedback, GLuint id)
+GL_ENTRY(void, glTransformFeedbackVaryings, GLuint program, GLsizei count, const GLchar*const* varyings, GLenum bufferMode)
+GL_ENTRY(void, glTransformFeedbackVaryingsAEMU, GLuint program, GLsizei count, const char* packedVaryings, GLuint packedVaryingsLen, GLenum bufferMode)
+GL_ENTRY(void, glGetTransformFeedbackVarying, GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, char * name)
+
+# Sampler objects
+GL_ENTRY(void, glGenSamplers, GLsizei n, GLuint *samplers)
+GL_ENTRY(void, glDeleteSamplers, GLsizei n, const GLuint * samplers)
+GL_ENTRY(void, glBindSampler, GLuint unit, GLuint sampler)
+GL_ENTRY(void, glSamplerParameterf, GLuint sampler, GLenum pname, GLfloat param)
+GL_ENTRY(void, glSamplerParameteri, GLuint sampler, GLenum pname, GLint param)
+GL_ENTRY(void, glSamplerParameterfv, GLuint sampler, GLenum pname, const GLfloat * params)
+GL_ENTRY(void, glSamplerParameteriv, GLuint sampler, GLenum pname, const GLint * params)
+GL_ENTRY(void, glGetSamplerParameterfv, GLuint sampler, GLenum pname, GLfloat * params)
+GL_ENTRY(void, glGetSamplerParameteriv, GLuint sampler, GLenum pname, GLint * params)
+GL_ENTRY(GLboolean, glIsSampler, GLuint sampler)
+
+# Query objects
+GL_ENTRY(void, glGenQueries, GLsizei n, GLuint * queries)
+GL_ENTRY(void, glDeleteQueries, GLsizei n, const GLuint * queries)
+GL_ENTRY(void, glBeginQuery, GLenum target, GLuint query)
+GL_ENTRY(void, glEndQuery, GLenum target)
+GL_ENTRY(void, glGetQueryiv, GLenum target, GLenum pname, GLint * params)
+GL_ENTRY(void, glGetQueryObjectuiv, GLuint query, GLenum pname, GLuint * params)
+GL_ENTRY(GLboolean, glIsQuery, GLuint query)
+
+# Shader binary objects - need share group processing
+GL_ENTRY(void, glProgramParameteri, GLuint program, GLenum pname, GLint value)
+GL_ENTRY(void, glProgramBinary, GLuint program, GLenum binaryFormat, const void *binary, GLsizei length)
+GL_ENTRY(void, glGetProgramBinary, GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary)
+
+# New glGets - need share group processing for program object
+GL_ENTRY(GLint, glGetFragDataLocation, GLuint program, const char * name)
+GL_ENTRY(void, glGetInteger64v, GLenum pname, GLint64 * data)
+GL_ENTRY(void, glGetIntegeri_v, GLenum target, GLuint index, GLint * data)
+GL_ENTRY(void, glGetInteger64i_v, GLenum target, GLuint index, GLint64 * data)
+
+# Array/3D textures
+GL_ENTRY(void, glTexImage3D, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid * data)
+GL_ENTRY(void, glTexImage3DOffsetAEMU, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, GLuint offset)
+GL_ENTRY(void, glTexStorage3D, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+GL_ENTRY(void, glTexSubImage3D, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid * data);
+GL_ENTRY(void, glTexSubImage3DOffsetAEMU, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLuint offset);
+GL_ENTRY(void, glCompressedTexImage3D, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid * data)
+GL_ENTRY(void, glCompressedTexImage3DOffsetAEMU, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, GLuint offset)
+GL_ENTRY(void, glCompressedTexSubImage3D, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid * data);
+GL_ENTRY(void, glCompressedTexSubImage3DOffsetAEMU, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, GLuint data);
+GL_ENTRY(void, glCopyTexSubImage3D, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+
+# glGetStringi
+GL_ENTRY(const GLubyte*, glGetStringi, GLenum name, GLuint index);
+
+# GLES 3.1:
+
+# New get
+GL_ENTRY(void, glGetBooleani_v, GLenum target, GLuint index, GLboolean * data)
+
+# Memory barriers
+GL_ENTRY(void, glMemoryBarrier, GLbitfield barriers);
+GL_ENTRY(void, glMemoryBarrierByRegion, GLbitfield barriers);
+
+# Program pipelines - may require adding a new shared object type!
+GL_ENTRY(void, glGenProgramPipelines, GLsizei n, GLuint *pipelines)
+GL_ENTRY(void, glDeleteProgramPipelines, GLsizei n, const GLuint *pipelines)
+GL_ENTRY(void, glBindProgramPipeline, GLuint pipeline)
+
+GL_ENTRY(void, glGetProgramPipelineiv, GLuint pipeline, GLenum pname, GLint *params)
+GL_ENTRY(void, glGetProgramPipelineInfoLog, GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog)
+
+GL_ENTRY(void, glValidateProgramPipeline, GLuint pipeline)
+GL_ENTRY(GLboolean, glIsProgramPipeline, GLuint pipeline);
+GL_ENTRY(void, glUseProgramStages, GLuint pipeline, GLbitfield stages, GLuint program)
+
+# Separable shader programs - may need to change how program objects are represented and shared!
+GL_ENTRY(void, glActiveShaderProgram, GLuint pipeline, GLuint program);
+GL_ENTRY(GLuint, glCreateShaderProgramv, GLenum type, GLsizei count, const char ** strings)
+GL_ENTRY(GLuint, glCreateShaderProgramvAEMU, GLenum type, GLsizei count, const char *packedStrings, GLuint packedLen)
+# Uniforms should work easily if any program object representation problems are solved.
+GL_ENTRY(void, glProgramUniform1f, GLuint program, GLint location, GLfloat v0)
+GL_ENTRY(void, glProgramUniform2f, GLuint program, GLint location, GLfloat v0, GLfloat v1)
+GL_ENTRY(void, glProgramUniform3f, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2)
+GL_ENTRY(void, glProgramUniform4f, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3)
+GL_ENTRY(void, glProgramUniform1i, GLuint program, GLint location, GLint v0)
+GL_ENTRY(void, glProgramUniform2i, GLuint program, GLint location, GLint v0, GLint v1)
+GL_ENTRY(void, glProgramUniform3i, GLuint program, GLint location, GLint v0, GLint v1, GLint v2)
+GL_ENTRY(void, glProgramUniform4i, GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3)
+GL_ENTRY(void, glProgramUniform1ui, GLuint program, GLint location, GLuint v0)
+GL_ENTRY(void, glProgramUniform2ui, GLuint program, GLint location, GLint v0, GLuint v1)
+GL_ENTRY(void, glProgramUniform3ui, GLuint program, GLint location, GLint v0, GLint v1, GLuint v2)
+GL_ENTRY(void, glProgramUniform4ui, GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLuint v3)
+GL_ENTRY(void, glProgramUniform1fv, GLuint program, GLint location, GLsizei count, const GLfloat *value)
+GL_ENTRY(void, glProgramUniform2fv, GLuint program, GLint location, GLsizei count, const GLfloat *value)
+GL_ENTRY(void, glProgramUniform3fv, GLuint program, GLint location, GLsizei count, const GLfloat *value)
+GL_ENTRY(void, glProgramUniform4fv, GLuint program, GLint location, GLsizei count, const GLfloat *value)
+GL_ENTRY(void, glProgramUniform1iv, GLuint program, GLint location, GLsizei count, const GLint *value)
+GL_ENTRY(void, glProgramUniform2iv, GLuint program, GLint location, GLsizei count, const GLint *value)
+GL_ENTRY(void, glProgramUniform3iv, GLuint program, GLint location, GLsizei count, const GLint *value)
+GL_ENTRY(void, glProgramUniform4iv, GLuint program, GLint location, GLsizei count, const GLint *value)
+GL_ENTRY(void, glProgramUniform1uiv, GLuint program, GLint location, GLsizei count, const GLuint *value)
+GL_ENTRY(void, glProgramUniform2uiv, GLuint program, GLint location, GLsizei count, const GLuint *value)
+GL_ENTRY(void, glProgramUniform3uiv, GLuint program, GLint location, GLsizei count, const GLuint *value)
+GL_ENTRY(void, glProgramUniform4uiv, GLuint program, GLint location, GLsizei count, const GLuint *value)
+GL_ENTRY(void, glProgramUniformMatrix2fv, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+GL_ENTRY(void, glProgramUniformMatrix3fv, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+GL_ENTRY(void, glProgramUniformMatrix4fv, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+GL_ENTRY(void, glProgramUniformMatrix2x3fv, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+GL_ENTRY(void, glProgramUniformMatrix3x2fv, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+GL_ENTRY(void, glProgramUniformMatrix2x4fv, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+GL_ENTRY(void, glProgramUniformMatrix4x2fv, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+GL_ENTRY(void, glProgramUniformMatrix3x4fv, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+GL_ENTRY(void, glProgramUniformMatrix4x3fv, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+
+# Depending on whether ANGLE shader translator supports ES 3.1, this might require us to enhance the ANGLE shader translator by a LOT.
+GL_ENTRY(void, glGetProgramInterfaceiv, GLuint program, GLenum programInterface, GLenum pname, GLint * params)
+GL_ENTRY(void, glGetProgramResourceiv, GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum * props, GLsizei bufSize, GLsizei * length, GLint * params)
+GL_ENTRY(GLuint, glGetProgramResourceIndex, GLuint program, GLenum programInterface, const char * name)
+GL_ENTRY(GLint, glGetProgramResourceLocation, GLuint program, GLenum programInterface, const char * name)
+GL_ENTRY(void, glGetProgramResourceName, GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei * length, char * name)
+ 
+# Compute shaders. Should just work if everything else does.
+GL_ENTRY(void, glBindImageTexture, GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format)
+GL_ENTRY(void, glDispatchCompute, GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z)
+
+### This is an indirect call and the |indirect| field could be a GPU pointer.
+### We will need to make sure that |indirect| is updated to the latest version if so,
+### and probably manage a running set of GPU pointers on the host
+### that the guest is using.
+GL_ENTRY(void, glDispatchComputeIndirect, GLintptr indirect)
+
+# Separate vertex format / buffer binding
+### Requires us tp really clean up how draws work in the encoder currently.
+GL_ENTRY(void, glBindVertexBuffer, GLuint bindingindex, GLuint buffer, GLintptr offset, GLintptr stride)
+GL_ENTRY(void, glVertexAttribBinding, GLuint attribindex, GLuint bindingindex);
+GL_ENTRY(void, glVertexAttribFormat, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset)
+GL_ENTRY(void, glVertexAttribIFormat, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset)
+GL_ENTRY(void, glVertexBindingDivisor, GLuint bindingindex, GLuint divisor)
+
+# Indirect draws
+### Again, if |indirect| is a GPU pointer, we need to synchronize it before calling.
+GL_ENTRY(void, glDrawArraysIndirect, GLenum mode, const void * indirect)
+GL_ENTRY(void, glDrawArraysIndirectDataAEMU, GLenum mode, const void *indirect, GLuint datalen)
+GL_ENTRY(void, glDrawArraysIndirectOffsetAEMU, GLenum mode, GLuint offset)
+GL_ENTRY(void, glDrawElementsIndirect, GLenum mode, GLenum type, const void * indirect)
+GL_ENTRY(void, glDrawElementsIndirectDataAEMU, GLenum mode, GLenum type, const void *indirect, GLuint datalen)
+GL_ENTRY(void, glDrawElementsIndirectOffsetAEMU, GLenum mode, GLenum type, GLuint offset)
+
+# Multisampling
+GL_ENTRY(void, glTexStorage2DMultisample, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations)
+GL_ENTRY(void, glSampleMaski, GLuint maskNumber, GLbitfield mask)
+GL_ENTRY(void, glGetMultisamplefv, GLenum pname, GLuint index, GLfloat *val)
+
+# New framebuffer parameters
+GL_ENTRY(void, glFramebufferParameteri, GLenum target, GLenum pname, GLint param)
+GL_ENTRY(void, glGetFramebufferParameteriv, GLenum target, GLenum pname, GLint * params)
+
+# Texture LOD queries    
+# Already used in Translator's validations, just need encoder.
+GL_ENTRY(void, glGetTexLevelParameterfv, GLenum target, GLint level, GLenum pname, GLfloat * params)
+GL_ENTRY(void, glGetTexLevelParameteriv, GLenum target, GLint level, GLenum pname, GLint * params)
diff --git a/guest/libs/eglwrapper/gles3.lds b/guest/libs/eglwrapper/gles3.lds
new file mode 100644
index 0000000..901c651
--- /dev/null
+++ b/guest/libs/eglwrapper/gles3.lds
@@ -0,0 +1,403 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+{
+global:
+	# OpenGL ES 3.0 API
+	glActiveShaderProgram;
+	glActiveTexture;
+	glAttachShader;
+	glBeginPerfMonitorAMD;
+	glBeginQuery;
+	glBeginTransformFeedback;
+	glBindAttribLocation;
+	glBindBuffer;
+	glBindBufferBase;
+	glBindBufferRange;
+	glBindFramebuffer;
+	glBindImageTexture;
+	glBindProgramPipeline;
+	glBindRenderbuffer;
+	glBindSampler;
+	glBindTexture;
+	glBindTransformFeedback;
+	glBindVertexArray;
+	glBindVertexArrayOES;
+	glBindVertexBuffer;
+	glBlendColor;
+	glBlendEquation;
+	glBlendEquationSeparate;
+	glBlendFunc;
+	glBlendFuncSeparate;
+	glBlitFramebuffer;
+	glBufferData;
+	glBufferSubData;
+	glCheckFramebufferStatus;
+	glClear;
+	glClearBufferfi;
+	glClearBufferfv;
+	glClearBufferiv;
+	glClearBufferuiv;
+	glClearColor;
+	glClearDepthf;
+	glClearStencil;
+	glClientWaitSync;
+	glColorMask;
+	glCompileShader;
+	glCompressedTexImage2D;
+	glCompressedTexImage3D;
+	glCompressedTexImage3DOES;
+	glCompressedTexSubImage2D;
+	glCompressedTexSubImage3D;
+	glCompressedTexSubImage3DOES;
+	glCopyBufferSubData;
+	glCopyTexImage2D;
+	glCopyTexSubImage2D;
+	glCopyTexSubImage3D;
+	glCopyTexSubImage3DOES;
+	glCoverageMaskNV;
+	glCoverageOperationNV;
+	glCreateProgram;
+	glCreateShader;
+	glCreateShaderProgramv;
+	glCullFace;
+	glDeleteBuffers;
+	glDeleteFencesNV;
+	glDeleteFramebuffers;
+	glDeletePerfMonitorsAMD;
+	glDeleteProgram;
+	glDeleteProgramPipelines;
+	glDeleteQueries;
+	glDeleteRenderbuffers;
+	glDeleteSamplers;
+	glDeleteShader;
+	glDeleteSync;
+	glDeleteTextures;
+	glDeleteTransformFeedbacks;
+	glDeleteVertexArrays;
+	glDeleteVertexArraysOES;
+	glDepthFunc;
+	glDepthMask;
+	glDepthRangef;
+	glDetachShader;
+	glDisable;
+	glDisableDriverControlQCOM;
+	glDisableVertexAttribArray;
+	glDiscardFramebufferEXT;
+	glDispatchCompute;
+	glDispatchComputeIndirect;
+	glDrawArrays;
+	glDrawArraysIndirect;
+	glDrawArraysInstanced;
+	glDrawBuffers;
+	glDrawElements;
+	glDrawElementsIndirect;
+	glDrawElementsInstanced;
+	glDrawRangeElements;
+	glEGLImageTargetRenderbufferStorageOES;
+	glEGLImageTargetTexture2DOES;
+	glEnable;
+	glEnableDriverControlQCOM;
+	glEnableVertexAttribArray;
+	glEndPerfMonitorAMD;
+	glEndQuery;
+	glEndTilingQCOM;
+	glEndTransformFeedback;
+	glExtGetBufferPointervQCOM;
+	glExtGetBuffersQCOM;
+	glExtGetFramebuffersQCOM;
+	glExtGetProgramBinarySourceQCOM;
+	glExtGetProgramsQCOM;
+	glExtGetRenderbuffersQCOM;
+	glExtGetShadersQCOM;
+	glExtGetTexLevelParameterivQCOM;
+	glExtGetTexSubImageQCOM;
+	glExtGetTexturesQCOM;
+	glExtIsProgramBinaryQCOM;
+	glExtTexObjectStateOverrideiQCOM;
+	glFenceSync;
+	glFinish;
+	glFinishFenceNV;
+	glFinishRoundTrip;
+	glFlush;
+	glFlushMappedBufferRange;
+	glFramebufferParameteri;
+	glFramebufferRenderbuffer;
+	glFramebufferTexture2D;
+	glFramebufferTexture2DMultisampleIMG;
+	glFramebufferTexture3DOES;
+	glFramebufferTextureLayer;
+	glFrontFace;
+	glGenBuffers;
+	glGenerateMipmap;
+	glGenFencesNV;
+	glGenFramebuffers;
+	glGenPerfMonitorsAMD;
+	glGenProgramPipelines;
+	glGenQueries;
+	glGenRenderbuffers;
+	glGenSamplers;
+	glGenTextures;
+	glGenTransformFeedbacks;
+	glGenVertexArrays;
+	glGenVertexArraysOES;
+	glGetActiveAttrib;
+	glGetActiveUniform;
+	glGetActiveUniformBlockiv;
+	glGetActiveUniformBlockName;
+	glGetActiveUniformsiv;
+	glGetAttachedShaders;
+	glGetAttribLocation;
+	glGetBooleani_v;
+	glGetBooleanv;
+	glGetBufferParameteri64v;
+	glGetBufferParameteriv;
+	glGetBufferPointerv;
+	glGetCompressedTextureFormats;
+	glGetDriverControlsQCOM;
+	glGetDriverControlStringQCOM;
+	glGetError;
+	glGetFenceivNV;
+	glGetFloatv;
+	glGetFragDataLocation;
+	glGetFramebufferAttachmentParameteriv;
+	glGetFramebufferParameteriv;
+	glGetInteger64i_v;
+	glGetInteger64v;
+	glGetIntegeri_v;
+	glGetIntegerv;
+	glGetInternalformativ;
+	glGetMultisamplefv;
+	glGetPerfMonitorCounterDataAMD;
+	glGetPerfMonitorCounterInfoAMD;
+	glGetPerfMonitorCountersAMD;
+	glGetPerfMonitorCounterStringAMD;
+	glGetPerfMonitorGroupsAMD;
+	glGetPerfMonitorGroupStringAMD;
+	glGetProgramBinary;
+	glGetProgramBinaryOES;
+	glGetProgramInfoLog;
+	glGetProgramInterfaceiv;
+	glGetProgramiv;
+	glGetProgramPipelineInfoLog;
+	glGetProgramPipelineiv;
+	glGetProgramResourceIndex;
+	glGetProgramResourceiv;
+	glGetProgramResourceLocation;
+	glGetProgramResourceName;
+	glGetQueryiv;
+	glGetQueryObjectuiv;
+	glGetRenderbufferParameteriv;
+	glGetSamplerParameterfv;
+	glGetSamplerParameteriv;
+	glGetShaderInfoLog;
+	glGetShaderiv;
+	glGetShaderPrecisionFormat;
+	glGetShaderSource;
+	glGetString;
+	glGetStringi;
+	glGetSynciv;
+	glGetTexLevelParameterfv;
+	glGetTexLevelParameteriv;
+	glGetTexParameterfv;
+	glGetTexParameteriv;
+	glGetTransformFeedbackVarying;
+	glGetUniformBlockIndex;
+	glGetUniformfv;
+	glGetUniformIndices;
+	glGetUniformiv;
+	glGetUniformLocation;
+	glGetUniformuiv;
+	glGetVertexAttribfv;
+	glGetVertexAttribIiv;
+	glGetVertexAttribIuiv;
+	glGetVertexAttribiv;
+	glGetVertexAttribPointerv;
+	glHint;
+	glInvalidateFramebuffer;
+	glInvalidateSubFramebuffer;
+	glIsBuffer;
+	glIsEnabled;
+	glIsFenceNV;
+	glIsFramebuffer;
+	glIsProgram;
+	glIsProgramPipeline;
+	glIsQuery;
+	glIsRenderbuffer;
+	glIsSampler;
+	glIsShader;
+	glIsSync;
+	glIsTexture;
+	glIsTransformFeedback;
+	glIsVertexArray;
+	glIsVertexArrayOES;
+	glLineWidth;
+	glLinkProgram;
+	glMapBufferOES;
+	glMapBufferRange;
+	glMemoryBarrier;
+	glMemoryBarrierByRegion;
+	glMultiDrawArraysEXT;
+	glMultiDrawElementsEXT;
+	glPauseTransformFeedback;
+	glPixelStorei;
+	glPolygonOffset;
+	glProgramBinary;
+	glProgramBinaryOES;
+	glProgramParameteri;
+	glProgramUniform1f;
+	glProgramUniform1fv;
+	glProgramUniform1i;
+	glProgramUniform1iv;
+	glProgramUniform1ui;
+	glProgramUniform1uiv;
+	glProgramUniform2f;
+	glProgramUniform2fv;
+	glProgramUniform2i;
+	glProgramUniform2iv;
+	glProgramUniform2ui;
+	glProgramUniform2uiv;
+	glProgramUniform3f;
+	glProgramUniform3fv;
+	glProgramUniform3i;
+	glProgramUniform3iv;
+	glProgramUniform3ui;
+	glProgramUniform3uiv;
+	glProgramUniform4f;
+	glProgramUniform4fv;
+	glProgramUniform4i;
+	glProgramUniform4iv;
+	glProgramUniform4ui;
+	glProgramUniform4uiv;
+	glProgramUniformMatrix2fv;
+	glProgramUniformMatrix2x3fv;
+	glProgramUniformMatrix2x4fv;
+	glProgramUniformMatrix3fv;
+	glProgramUniformMatrix3x2fv;
+	glProgramUniformMatrix3x4fv;
+	glProgramUniformMatrix4fv;
+	glProgramUniformMatrix4x2fv;
+	glProgramUniformMatrix4x3fv;
+	glReadBuffer;
+	glReadPixels;
+	glReleaseShaderCompiler;
+	glRenderbufferStorage;
+	glRenderbufferStorageMultisample;
+	glRenderbufferStorageMultisampleIMG;
+	glResumeTransformFeedback;
+	glSampleCoverage;
+	glSampleMaski;
+	glSamplerParameterf;
+	glSamplerParameterfv;
+	glSamplerParameteri;
+	glSamplerParameteriv;
+	glScissor;
+	glSelectPerfMonitorCountersAMD;
+	glSetFenceNV;
+	glShaderBinary;
+	glShaderSource;
+	glShaderString;
+	glStartTilingQCOM;
+	glStencilFunc;
+	glStencilFuncSeparate;
+	glStencilMask;
+	glStencilMaskSeparate;
+	glStencilOp;
+	glStencilOpSeparate;
+	glTestFenceNV;
+	glTexImage2D;
+	glTexImage3D;
+	glTexImage3DOES;
+	glTexParameterf;
+	glTexParameterfv;
+	glTexParameteri;
+	glTexParameteriv;
+	glTexStorage2D;
+	glTexStorage2DMultisample;
+	glTexStorage3D;
+	glTexSubImage2D;
+	glTexSubImage3D;
+	glTexSubImage3DOES;
+	glTransformFeedbackVaryings;
+	glUniform1f;
+	glUniform1fv;
+	glUniform1i;
+	glUniform1iv;
+	glUniform1ui;
+	glUniform1uiv;
+	glUniform2f;
+	glUniform2fv;
+	glUniform2i;
+	glUniform2iv;
+	glUniform2ui;
+	glUniform2uiv;
+	glUniform3f;
+	glUniform3fv;
+	glUniform3i;
+	glUniform3iv;
+	glUniform3ui;
+	glUniform3uiv;
+	glUniform4f;
+	glUniform4fv;
+	glUniform4i;
+	glUniform4iv;
+	glUniform4ui;
+	glUniform4uiv;
+	glUniformBlockBinding;
+	glUniformMatrix2fv;
+	glUniformMatrix2x3fv;
+	glUniformMatrix2x4fv;
+	glUniformMatrix3fv;
+	glUniformMatrix3x2fv;
+	glUniformMatrix3x4fv;
+	glUniformMatrix4fv;
+	glUniformMatrix4x2fv;
+	glUniformMatrix4x3fv;
+	glUnmapBuffer;
+	glUnmapBufferOES;
+	glUseProgram;
+	glUseProgramStages;
+	glValidateProgram;
+	glValidateProgramPipeline;
+	glVertexAttrib1f;
+	glVertexAttrib1fv;
+	glVertexAttrib2f;
+	glVertexAttrib2fv;
+	glVertexAttrib3f;
+	glVertexAttrib3fv;
+	glVertexAttrib4f;
+	glVertexAttrib4fv;
+	glVertexAttribBinding;
+	glVertexAttribDivisor;
+	glVertexAttribFormat;
+	glVertexAttribI4i;
+	glVertexAttribI4iv;
+	glVertexAttribI4ui;
+	glVertexAttribI4uiv;
+	glVertexAttribIFormat;
+	glVertexAttribIPointer;
+	glVertexAttribPointer;
+	glVertexBindingDivisor;
+	glViewport;
+	glWaitSync;
+
+	# Type-strings and type-infos required by sanitizers
+	_ZTS*;
+	_ZTI*;
+
+local:
+	*;
+};
diff --git a/guest/libs/eglwrapper/gles3.types b/guest/libs/eglwrapper/gles3.types
new file mode 100644
index 0000000..2b39b29
--- /dev/null
+++ b/guest/libs/eglwrapper/gles3.types
@@ -0,0 +1,50 @@
+GLbitfield 32 0x%08x
+GLboolean 8 %d
+GLclampf 32 %f
+GLclampx 32 0x%08x
+GLeglImageOES 32 %p
+GLenum 32 0x%08x
+GLfixed 32 0x%08x
+GLfloat 32 %f
+GLint 32 %d
+GLintptr 32 0x%08lx
+GLshort 16 %d
+GLsizei 32 %d
+GLsizeiptr 32 0x%08lx
+GLubyte 8 0x%02x
+GLuint 32 %u
+GLvoid 0 %x
+GLchar 8 %d
+GLenum* 32 0x%08x
+GLboolean* 32 0x%08x
+GLclampf* 32 0x%08x
+GLclampx* 32 0x%08x
+GLeglImageOES* 32 0x%08x
+GLfixed* 32 0x%08x
+GLfloat* 32 0x%08x
+GLint* 32 0x%08x
+GLshort* 32 0x%08x
+GLsizei* 32 0x%08x
+GLubyte* 32 0x%08x
+GLuint* 32 0x%08x
+GLvoid* 32 0x%08x
+GLchar* 32 0x%08x
+GLchar** 32 0x%08x
+GLvoid** 32 0x%08x
+void* 32 0x%08x
+GLstr* 32 0x%08x
+GLvoidptr* 32 0x%08x
+GLchar*const* 32 0x%08x
+GLvoid*const* 32 0x%08x
+GLsync 64 %p
+uint64_t 64 0x%016lx
+GLint32 32 0x%08x
+GLint32* 32 %p
+GLint64 64 0x%016lx
+GLint64* 32 %p
+GLuint32 32 0x%08x
+GLuint32* 32 %p
+GLuint64 64 0x%016lx
+GLuint64* 32 %p
+char* 32 0x%08x
+char** 32 0x%08x
diff --git a/guest/libs/eglwrapper/gles3_server_proc.h b/guest/libs/eglwrapper/gles3_server_proc.h
new file mode 100644
index 0000000..957a395
--- /dev/null
+++ b/guest/libs/eglwrapper/gles3_server_proc.h
@@ -0,0 +1,6 @@
+#ifndef __gles3_server_proc_t_h
+#define __gles3_server_proc_t_h
+
+#include "gles3_wrapper_proc.h"
+
+#endif
diff --git a/guest/libs/eglwrapper/gles3_types.h b/guest/libs/eglwrapper/gles3_types.h
new file mode 100644
index 0000000..4e33844
--- /dev/null
+++ b/guest/libs/eglwrapper/gles3_types.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __gles3_types_h
+#define __gles3_types_h
+
+typedef void* GLeglImageOES;
+typedef void* GLvoidptr;
+
+#include <GLES3/gl3.h>
+
+#include <mutex>
+
+extern std::mutex g_context_mutex;
+
+struct gles3_wrapper_context_t;
+extern gles3_wrapper_context_t* (*getGLES3Context)(void);
+
+#define GET_CONTEXT \
+	std::lock_guard<std::mutex> lock(g_context_mutex); \
+	gles3_wrapper_context_t *ctx = getGLES3Context()
+
+#endif
diff --git a/guest/libs/eglwrapper/gles3_wrapper_context.cpp b/guest/libs/eglwrapper/gles3_wrapper_context.cpp
new file mode 100644
index 0000000..a5b51b0
--- /dev/null
+++ b/guest/libs/eglwrapper/gles3_wrapper_context.cpp
@@ -0,0 +1,426 @@
+// Generated Code - DO NOT EDIT !!
+// generated by 'emugen'
+
+
+#include <string.h>
+#include "gles3_wrapper_context.h"
+
+
+#include <stdio.h>
+
+int gles3_wrapper_context_t::initDispatchByName(void *(*getProc)(const char *, void *userData), void *userData)
+{
+	glActiveTexture = (glActiveTexture_wrapper_proc_t) getProc("glActiveTexture", userData);
+	glAttachShader = (glAttachShader_wrapper_proc_t) getProc("glAttachShader", userData);
+	glBindAttribLocation = (glBindAttribLocation_wrapper_proc_t) getProc("glBindAttribLocation", userData);
+	glBindBuffer = (glBindBuffer_wrapper_proc_t) getProc("glBindBuffer", userData);
+	glBindFramebuffer = (glBindFramebuffer_wrapper_proc_t) getProc("glBindFramebuffer", userData);
+	glBindRenderbuffer = (glBindRenderbuffer_wrapper_proc_t) getProc("glBindRenderbuffer", userData);
+	glBindTexture = (glBindTexture_wrapper_proc_t) getProc("glBindTexture", userData);
+	glBlendColor = (glBlendColor_wrapper_proc_t) getProc("glBlendColor", userData);
+	glBlendEquation = (glBlendEquation_wrapper_proc_t) getProc("glBlendEquation", userData);
+	glBlendEquationSeparate = (glBlendEquationSeparate_wrapper_proc_t) getProc("glBlendEquationSeparate", userData);
+	glBlendFunc = (glBlendFunc_wrapper_proc_t) getProc("glBlendFunc", userData);
+	glBlendFuncSeparate = (glBlendFuncSeparate_wrapper_proc_t) getProc("glBlendFuncSeparate", userData);
+	glBufferData = (glBufferData_wrapper_proc_t) getProc("glBufferData", userData);
+	glBufferSubData = (glBufferSubData_wrapper_proc_t) getProc("glBufferSubData", userData);
+	glCheckFramebufferStatus = (glCheckFramebufferStatus_wrapper_proc_t) getProc("glCheckFramebufferStatus", userData);
+	glClear = (glClear_wrapper_proc_t) getProc("glClear", userData);
+	glClearColor = (glClearColor_wrapper_proc_t) getProc("glClearColor", userData);
+	glClearDepthf = (glClearDepthf_wrapper_proc_t) getProc("glClearDepthf", userData);
+	glClearStencil = (glClearStencil_wrapper_proc_t) getProc("glClearStencil", userData);
+	glColorMask = (glColorMask_wrapper_proc_t) getProc("glColorMask", userData);
+	glCompileShader = (glCompileShader_wrapper_proc_t) getProc("glCompileShader", userData);
+	glCompressedTexImage2D = (glCompressedTexImage2D_wrapper_proc_t) getProc("glCompressedTexImage2D", userData);
+	glCompressedTexSubImage2D = (glCompressedTexSubImage2D_wrapper_proc_t) getProc("glCompressedTexSubImage2D", userData);
+	glCopyTexImage2D = (glCopyTexImage2D_wrapper_proc_t) getProc("glCopyTexImage2D", userData);
+	glCopyTexSubImage2D = (glCopyTexSubImage2D_wrapper_proc_t) getProc("glCopyTexSubImage2D", userData);
+	glCreateProgram = (glCreateProgram_wrapper_proc_t) getProc("glCreateProgram", userData);
+	glCreateShader = (glCreateShader_wrapper_proc_t) getProc("glCreateShader", userData);
+	glCullFace = (glCullFace_wrapper_proc_t) getProc("glCullFace", userData);
+	glDeleteBuffers = (glDeleteBuffers_wrapper_proc_t) getProc("glDeleteBuffers", userData);
+	glDeleteFramebuffers = (glDeleteFramebuffers_wrapper_proc_t) getProc("glDeleteFramebuffers", userData);
+	glDeleteProgram = (glDeleteProgram_wrapper_proc_t) getProc("glDeleteProgram", userData);
+	glDeleteRenderbuffers = (glDeleteRenderbuffers_wrapper_proc_t) getProc("glDeleteRenderbuffers", userData);
+	glDeleteShader = (glDeleteShader_wrapper_proc_t) getProc("glDeleteShader", userData);
+	glDeleteTextures = (glDeleteTextures_wrapper_proc_t) getProc("glDeleteTextures", userData);
+	glDepthFunc = (glDepthFunc_wrapper_proc_t) getProc("glDepthFunc", userData);
+	glDepthMask = (glDepthMask_wrapper_proc_t) getProc("glDepthMask", userData);
+	glDepthRangef = (glDepthRangef_wrapper_proc_t) getProc("glDepthRangef", userData);
+	glDetachShader = (glDetachShader_wrapper_proc_t) getProc("glDetachShader", userData);
+	glDisable = (glDisable_wrapper_proc_t) getProc("glDisable", userData);
+	glDisableVertexAttribArray = (glDisableVertexAttribArray_wrapper_proc_t) getProc("glDisableVertexAttribArray", userData);
+	glDrawArrays = (glDrawArrays_wrapper_proc_t) getProc("glDrawArrays", userData);
+	glDrawElements = (glDrawElements_wrapper_proc_t) getProc("glDrawElements", userData);
+	glEnable = (glEnable_wrapper_proc_t) getProc("glEnable", userData);
+	glEnableVertexAttribArray = (glEnableVertexAttribArray_wrapper_proc_t) getProc("glEnableVertexAttribArray", userData);
+	glFinish = (glFinish_wrapper_proc_t) getProc("glFinish", userData);
+	glFlush = (glFlush_wrapper_proc_t) getProc("glFlush", userData);
+	glFramebufferRenderbuffer = (glFramebufferRenderbuffer_wrapper_proc_t) getProc("glFramebufferRenderbuffer", userData);
+	glFramebufferTexture2D = (glFramebufferTexture2D_wrapper_proc_t) getProc("glFramebufferTexture2D", userData);
+	glFrontFace = (glFrontFace_wrapper_proc_t) getProc("glFrontFace", userData);
+	glGenBuffers = (glGenBuffers_wrapper_proc_t) getProc("glGenBuffers", userData);
+	glGenerateMipmap = (glGenerateMipmap_wrapper_proc_t) getProc("glGenerateMipmap", userData);
+	glGenFramebuffers = (glGenFramebuffers_wrapper_proc_t) getProc("glGenFramebuffers", userData);
+	glGenRenderbuffers = (glGenRenderbuffers_wrapper_proc_t) getProc("glGenRenderbuffers", userData);
+	glGenTextures = (glGenTextures_wrapper_proc_t) getProc("glGenTextures", userData);
+	glGetActiveAttrib = (glGetActiveAttrib_wrapper_proc_t) getProc("glGetActiveAttrib", userData);
+	glGetActiveUniform = (glGetActiveUniform_wrapper_proc_t) getProc("glGetActiveUniform", userData);
+	glGetAttachedShaders = (glGetAttachedShaders_wrapper_proc_t) getProc("glGetAttachedShaders", userData);
+	glGetAttribLocation = (glGetAttribLocation_wrapper_proc_t) getProc("glGetAttribLocation", userData);
+	glGetBooleanv = (glGetBooleanv_wrapper_proc_t) getProc("glGetBooleanv", userData);
+	glGetBufferParameteriv = (glGetBufferParameteriv_wrapper_proc_t) getProc("glGetBufferParameteriv", userData);
+	glGetError = (glGetError_wrapper_proc_t) getProc("glGetError", userData);
+	glGetFloatv = (glGetFloatv_wrapper_proc_t) getProc("glGetFloatv", userData);
+	glGetFramebufferAttachmentParameteriv = (glGetFramebufferAttachmentParameteriv_wrapper_proc_t) getProc("glGetFramebufferAttachmentParameteriv", userData);
+	glGetIntegerv = (glGetIntegerv_wrapper_proc_t) getProc("glGetIntegerv", userData);
+	glGetProgramiv = (glGetProgramiv_wrapper_proc_t) getProc("glGetProgramiv", userData);
+	glGetProgramInfoLog = (glGetProgramInfoLog_wrapper_proc_t) getProc("glGetProgramInfoLog", userData);
+	glGetRenderbufferParameteriv = (glGetRenderbufferParameteriv_wrapper_proc_t) getProc("glGetRenderbufferParameteriv", userData);
+	glGetShaderiv = (glGetShaderiv_wrapper_proc_t) getProc("glGetShaderiv", userData);
+	glGetShaderInfoLog = (glGetShaderInfoLog_wrapper_proc_t) getProc("glGetShaderInfoLog", userData);
+	glGetShaderPrecisionFormat = (glGetShaderPrecisionFormat_wrapper_proc_t) getProc("glGetShaderPrecisionFormat", userData);
+	glGetShaderSource = (glGetShaderSource_wrapper_proc_t) getProc("glGetShaderSource", userData);
+	glGetString = (glGetString_wrapper_proc_t) getProc("glGetString", userData);
+	glGetTexParameterfv = (glGetTexParameterfv_wrapper_proc_t) getProc("glGetTexParameterfv", userData);
+	glGetTexParameteriv = (glGetTexParameteriv_wrapper_proc_t) getProc("glGetTexParameteriv", userData);
+	glGetUniformfv = (glGetUniformfv_wrapper_proc_t) getProc("glGetUniformfv", userData);
+	glGetUniformiv = (glGetUniformiv_wrapper_proc_t) getProc("glGetUniformiv", userData);
+	glGetUniformLocation = (glGetUniformLocation_wrapper_proc_t) getProc("glGetUniformLocation", userData);
+	glGetVertexAttribfv = (glGetVertexAttribfv_wrapper_proc_t) getProc("glGetVertexAttribfv", userData);
+	glGetVertexAttribiv = (glGetVertexAttribiv_wrapper_proc_t) getProc("glGetVertexAttribiv", userData);
+	glGetVertexAttribPointerv = (glGetVertexAttribPointerv_wrapper_proc_t) getProc("glGetVertexAttribPointerv", userData);
+	glHint = (glHint_wrapper_proc_t) getProc("glHint", userData);
+	glIsBuffer = (glIsBuffer_wrapper_proc_t) getProc("glIsBuffer", userData);
+	glIsEnabled = (glIsEnabled_wrapper_proc_t) getProc("glIsEnabled", userData);
+	glIsFramebuffer = (glIsFramebuffer_wrapper_proc_t) getProc("glIsFramebuffer", userData);
+	glIsProgram = (glIsProgram_wrapper_proc_t) getProc("glIsProgram", userData);
+	glIsRenderbuffer = (glIsRenderbuffer_wrapper_proc_t) getProc("glIsRenderbuffer", userData);
+	glIsShader = (glIsShader_wrapper_proc_t) getProc("glIsShader", userData);
+	glIsTexture = (glIsTexture_wrapper_proc_t) getProc("glIsTexture", userData);
+	glLineWidth = (glLineWidth_wrapper_proc_t) getProc("glLineWidth", userData);
+	glLinkProgram = (glLinkProgram_wrapper_proc_t) getProc("glLinkProgram", userData);
+	glPixelStorei = (glPixelStorei_wrapper_proc_t) getProc("glPixelStorei", userData);
+	glPolygonOffset = (glPolygonOffset_wrapper_proc_t) getProc("glPolygonOffset", userData);
+	glReadPixels = (glReadPixels_wrapper_proc_t) getProc("glReadPixels", userData);
+	glReleaseShaderCompiler = (glReleaseShaderCompiler_wrapper_proc_t) getProc("glReleaseShaderCompiler", userData);
+	glRenderbufferStorage = (glRenderbufferStorage_wrapper_proc_t) getProc("glRenderbufferStorage", userData);
+	glSampleCoverage = (glSampleCoverage_wrapper_proc_t) getProc("glSampleCoverage", userData);
+	glScissor = (glScissor_wrapper_proc_t) getProc("glScissor", userData);
+	glShaderBinary = (glShaderBinary_wrapper_proc_t) getProc("glShaderBinary", userData);
+	glShaderSource = (glShaderSource_wrapper_proc_t) getProc("glShaderSource", userData);
+	glStencilFunc = (glStencilFunc_wrapper_proc_t) getProc("glStencilFunc", userData);
+	glStencilFuncSeparate = (glStencilFuncSeparate_wrapper_proc_t) getProc("glStencilFuncSeparate", userData);
+	glStencilMask = (glStencilMask_wrapper_proc_t) getProc("glStencilMask", userData);
+	glStencilMaskSeparate = (glStencilMaskSeparate_wrapper_proc_t) getProc("glStencilMaskSeparate", userData);
+	glStencilOp = (glStencilOp_wrapper_proc_t) getProc("glStencilOp", userData);
+	glStencilOpSeparate = (glStencilOpSeparate_wrapper_proc_t) getProc("glStencilOpSeparate", userData);
+	glTexImage2D = (glTexImage2D_wrapper_proc_t) getProc("glTexImage2D", userData);
+	glTexParameterf = (glTexParameterf_wrapper_proc_t) getProc("glTexParameterf", userData);
+	glTexParameterfv = (glTexParameterfv_wrapper_proc_t) getProc("glTexParameterfv", userData);
+	glTexParameteri = (glTexParameteri_wrapper_proc_t) getProc("glTexParameteri", userData);
+	glTexParameteriv = (glTexParameteriv_wrapper_proc_t) getProc("glTexParameteriv", userData);
+	glTexSubImage2D = (glTexSubImage2D_wrapper_proc_t) getProc("glTexSubImage2D", userData);
+	glUniform1f = (glUniform1f_wrapper_proc_t) getProc("glUniform1f", userData);
+	glUniform1fv = (glUniform1fv_wrapper_proc_t) getProc("glUniform1fv", userData);
+	glUniform1i = (glUniform1i_wrapper_proc_t) getProc("glUniform1i", userData);
+	glUniform1iv = (glUniform1iv_wrapper_proc_t) getProc("glUniform1iv", userData);
+	glUniform2f = (glUniform2f_wrapper_proc_t) getProc("glUniform2f", userData);
+	glUniform2fv = (glUniform2fv_wrapper_proc_t) getProc("glUniform2fv", userData);
+	glUniform2i = (glUniform2i_wrapper_proc_t) getProc("glUniform2i", userData);
+	glUniform2iv = (glUniform2iv_wrapper_proc_t) getProc("glUniform2iv", userData);
+	glUniform3f = (glUniform3f_wrapper_proc_t) getProc("glUniform3f", userData);
+	glUniform3fv = (glUniform3fv_wrapper_proc_t) getProc("glUniform3fv", userData);
+	glUniform3i = (glUniform3i_wrapper_proc_t) getProc("glUniform3i", userData);
+	glUniform3iv = (glUniform3iv_wrapper_proc_t) getProc("glUniform3iv", userData);
+	glUniform4f = (glUniform4f_wrapper_proc_t) getProc("glUniform4f", userData);
+	glUniform4fv = (glUniform4fv_wrapper_proc_t) getProc("glUniform4fv", userData);
+	glUniform4i = (glUniform4i_wrapper_proc_t) getProc("glUniform4i", userData);
+	glUniform4iv = (glUniform4iv_wrapper_proc_t) getProc("glUniform4iv", userData);
+	glUniformMatrix2fv = (glUniformMatrix2fv_wrapper_proc_t) getProc("glUniformMatrix2fv", userData);
+	glUniformMatrix3fv = (glUniformMatrix3fv_wrapper_proc_t) getProc("glUniformMatrix3fv", userData);
+	glUniformMatrix4fv = (glUniformMatrix4fv_wrapper_proc_t) getProc("glUniformMatrix4fv", userData);
+	glUseProgram = (glUseProgram_wrapper_proc_t) getProc("glUseProgram", userData);
+	glValidateProgram = (glValidateProgram_wrapper_proc_t) getProc("glValidateProgram", userData);
+	glVertexAttrib1f = (glVertexAttrib1f_wrapper_proc_t) getProc("glVertexAttrib1f", userData);
+	glVertexAttrib1fv = (glVertexAttrib1fv_wrapper_proc_t) getProc("glVertexAttrib1fv", userData);
+	glVertexAttrib2f = (glVertexAttrib2f_wrapper_proc_t) getProc("glVertexAttrib2f", userData);
+	glVertexAttrib2fv = (glVertexAttrib2fv_wrapper_proc_t) getProc("glVertexAttrib2fv", userData);
+	glVertexAttrib3f = (glVertexAttrib3f_wrapper_proc_t) getProc("glVertexAttrib3f", userData);
+	glVertexAttrib3fv = (glVertexAttrib3fv_wrapper_proc_t) getProc("glVertexAttrib3fv", userData);
+	glVertexAttrib4f = (glVertexAttrib4f_wrapper_proc_t) getProc("glVertexAttrib4f", userData);
+	glVertexAttrib4fv = (glVertexAttrib4fv_wrapper_proc_t) getProc("glVertexAttrib4fv", userData);
+	glVertexAttribPointer = (glVertexAttribPointer_wrapper_proc_t) getProc("glVertexAttribPointer", userData);
+	glViewport = (glViewport_wrapper_proc_t) getProc("glViewport", userData);
+	glEGLImageTargetTexture2DOES = (glEGLImageTargetTexture2DOES_wrapper_proc_t) getProc("glEGLImageTargetTexture2DOES", userData);
+	glEGLImageTargetRenderbufferStorageOES = (glEGLImageTargetRenderbufferStorageOES_wrapper_proc_t) getProc("glEGLImageTargetRenderbufferStorageOES", userData);
+	glGetProgramBinaryOES = (glGetProgramBinaryOES_wrapper_proc_t) getProc("glGetProgramBinaryOES", userData);
+	glProgramBinaryOES = (glProgramBinaryOES_wrapper_proc_t) getProc("glProgramBinaryOES", userData);
+	glMapBufferOES = (glMapBufferOES_wrapper_proc_t) getProc("glMapBufferOES", userData);
+	glUnmapBufferOES = (glUnmapBufferOES_wrapper_proc_t) getProc("glUnmapBufferOES", userData);
+	glTexImage3DOES = (glTexImage3DOES_wrapper_proc_t) getProc("glTexImage3DOES", userData);
+	glTexSubImage3DOES = (glTexSubImage3DOES_wrapper_proc_t) getProc("glTexSubImage3DOES", userData);
+	glCopyTexSubImage3DOES = (glCopyTexSubImage3DOES_wrapper_proc_t) getProc("glCopyTexSubImage3DOES", userData);
+	glCompressedTexImage3DOES = (glCompressedTexImage3DOES_wrapper_proc_t) getProc("glCompressedTexImage3DOES", userData);
+	glCompressedTexSubImage3DOES = (glCompressedTexSubImage3DOES_wrapper_proc_t) getProc("glCompressedTexSubImage3DOES", userData);
+	glFramebufferTexture3DOES = (glFramebufferTexture3DOES_wrapper_proc_t) getProc("glFramebufferTexture3DOES", userData);
+	glBindVertexArrayOES = (glBindVertexArrayOES_wrapper_proc_t) getProc("glBindVertexArrayOES", userData);
+	glDeleteVertexArraysOES = (glDeleteVertexArraysOES_wrapper_proc_t) getProc("glDeleteVertexArraysOES", userData);
+	glGenVertexArraysOES = (glGenVertexArraysOES_wrapper_proc_t) getProc("glGenVertexArraysOES", userData);
+	glIsVertexArrayOES = (glIsVertexArrayOES_wrapper_proc_t) getProc("glIsVertexArrayOES", userData);
+	glDiscardFramebufferEXT = (glDiscardFramebufferEXT_wrapper_proc_t) getProc("glDiscardFramebufferEXT", userData);
+	glMultiDrawArraysEXT = (glMultiDrawArraysEXT_wrapper_proc_t) getProc("glMultiDrawArraysEXT", userData);
+	glMultiDrawElementsEXT = (glMultiDrawElementsEXT_wrapper_proc_t) getProc("glMultiDrawElementsEXT", userData);
+	glGetPerfMonitorGroupsAMD = (glGetPerfMonitorGroupsAMD_wrapper_proc_t) getProc("glGetPerfMonitorGroupsAMD", userData);
+	glGetPerfMonitorCountersAMD = (glGetPerfMonitorCountersAMD_wrapper_proc_t) getProc("glGetPerfMonitorCountersAMD", userData);
+	glGetPerfMonitorGroupStringAMD = (glGetPerfMonitorGroupStringAMD_wrapper_proc_t) getProc("glGetPerfMonitorGroupStringAMD", userData);
+	glGetPerfMonitorCounterStringAMD = (glGetPerfMonitorCounterStringAMD_wrapper_proc_t) getProc("glGetPerfMonitorCounterStringAMD", userData);
+	glGetPerfMonitorCounterInfoAMD = (glGetPerfMonitorCounterInfoAMD_wrapper_proc_t) getProc("glGetPerfMonitorCounterInfoAMD", userData);
+	glGenPerfMonitorsAMD = (glGenPerfMonitorsAMD_wrapper_proc_t) getProc("glGenPerfMonitorsAMD", userData);
+	glDeletePerfMonitorsAMD = (glDeletePerfMonitorsAMD_wrapper_proc_t) getProc("glDeletePerfMonitorsAMD", userData);
+	glSelectPerfMonitorCountersAMD = (glSelectPerfMonitorCountersAMD_wrapper_proc_t) getProc("glSelectPerfMonitorCountersAMD", userData);
+	glBeginPerfMonitorAMD = (glBeginPerfMonitorAMD_wrapper_proc_t) getProc("glBeginPerfMonitorAMD", userData);
+	glEndPerfMonitorAMD = (glEndPerfMonitorAMD_wrapper_proc_t) getProc("glEndPerfMonitorAMD", userData);
+	glGetPerfMonitorCounterDataAMD = (glGetPerfMonitorCounterDataAMD_wrapper_proc_t) getProc("glGetPerfMonitorCounterDataAMD", userData);
+	glRenderbufferStorageMultisampleIMG = (glRenderbufferStorageMultisampleIMG_wrapper_proc_t) getProc("glRenderbufferStorageMultisampleIMG", userData);
+	glFramebufferTexture2DMultisampleIMG = (glFramebufferTexture2DMultisampleIMG_wrapper_proc_t) getProc("glFramebufferTexture2DMultisampleIMG", userData);
+	glDeleteFencesNV = (glDeleteFencesNV_wrapper_proc_t) getProc("glDeleteFencesNV", userData);
+	glGenFencesNV = (glGenFencesNV_wrapper_proc_t) getProc("glGenFencesNV", userData);
+	glIsFenceNV = (glIsFenceNV_wrapper_proc_t) getProc("glIsFenceNV", userData);
+	glTestFenceNV = (glTestFenceNV_wrapper_proc_t) getProc("glTestFenceNV", userData);
+	glGetFenceivNV = (glGetFenceivNV_wrapper_proc_t) getProc("glGetFenceivNV", userData);
+	glFinishFenceNV = (glFinishFenceNV_wrapper_proc_t) getProc("glFinishFenceNV", userData);
+	glSetFenceNV = (glSetFenceNV_wrapper_proc_t) getProc("glSetFenceNV", userData);
+	glCoverageMaskNV = (glCoverageMaskNV_wrapper_proc_t) getProc("glCoverageMaskNV", userData);
+	glCoverageOperationNV = (glCoverageOperationNV_wrapper_proc_t) getProc("glCoverageOperationNV", userData);
+	glGetDriverControlsQCOM = (glGetDriverControlsQCOM_wrapper_proc_t) getProc("glGetDriverControlsQCOM", userData);
+	glGetDriverControlStringQCOM = (glGetDriverControlStringQCOM_wrapper_proc_t) getProc("glGetDriverControlStringQCOM", userData);
+	glEnableDriverControlQCOM = (glEnableDriverControlQCOM_wrapper_proc_t) getProc("glEnableDriverControlQCOM", userData);
+	glDisableDriverControlQCOM = (glDisableDriverControlQCOM_wrapper_proc_t) getProc("glDisableDriverControlQCOM", userData);
+	glExtGetTexturesQCOM = (glExtGetTexturesQCOM_wrapper_proc_t) getProc("glExtGetTexturesQCOM", userData);
+	glExtGetBuffersQCOM = (glExtGetBuffersQCOM_wrapper_proc_t) getProc("glExtGetBuffersQCOM", userData);
+	glExtGetRenderbuffersQCOM = (glExtGetRenderbuffersQCOM_wrapper_proc_t) getProc("glExtGetRenderbuffersQCOM", userData);
+	glExtGetFramebuffersQCOM = (glExtGetFramebuffersQCOM_wrapper_proc_t) getProc("glExtGetFramebuffersQCOM", userData);
+	glExtGetTexLevelParameterivQCOM = (glExtGetTexLevelParameterivQCOM_wrapper_proc_t) getProc("glExtGetTexLevelParameterivQCOM", userData);
+	glExtTexObjectStateOverrideiQCOM = (glExtTexObjectStateOverrideiQCOM_wrapper_proc_t) getProc("glExtTexObjectStateOverrideiQCOM", userData);
+	glExtGetTexSubImageQCOM = (glExtGetTexSubImageQCOM_wrapper_proc_t) getProc("glExtGetTexSubImageQCOM", userData);
+	glExtGetBufferPointervQCOM = (glExtGetBufferPointervQCOM_wrapper_proc_t) getProc("glExtGetBufferPointervQCOM", userData);
+	glExtGetShadersQCOM = (glExtGetShadersQCOM_wrapper_proc_t) getProc("glExtGetShadersQCOM", userData);
+	glExtGetProgramsQCOM = (glExtGetProgramsQCOM_wrapper_proc_t) getProc("glExtGetProgramsQCOM", userData);
+	glExtIsProgramBinaryQCOM = (glExtIsProgramBinaryQCOM_wrapper_proc_t) getProc("glExtIsProgramBinaryQCOM", userData);
+	glExtGetProgramBinarySourceQCOM = (glExtGetProgramBinarySourceQCOM_wrapper_proc_t) getProc("glExtGetProgramBinarySourceQCOM", userData);
+	glStartTilingQCOM = (glStartTilingQCOM_wrapper_proc_t) getProc("glStartTilingQCOM", userData);
+	glEndTilingQCOM = (glEndTilingQCOM_wrapper_proc_t) getProc("glEndTilingQCOM", userData);
+	glVertexAttribPointerData = (glVertexAttribPointerData_wrapper_proc_t) getProc("glVertexAttribPointerData", userData);
+	glVertexAttribPointerOffset = (glVertexAttribPointerOffset_wrapper_proc_t) getProc("glVertexAttribPointerOffset", userData);
+	glDrawElementsOffset = (glDrawElementsOffset_wrapper_proc_t) getProc("glDrawElementsOffset", userData);
+	glDrawElementsData = (glDrawElementsData_wrapper_proc_t) getProc("glDrawElementsData", userData);
+	glGetCompressedTextureFormats = (glGetCompressedTextureFormats_wrapper_proc_t) getProc("glGetCompressedTextureFormats", userData);
+	glShaderString = (glShaderString_wrapper_proc_t) getProc("glShaderString", userData);
+	glFinishRoundTrip = (glFinishRoundTrip_wrapper_proc_t) getProc("glFinishRoundTrip", userData);
+	glGenVertexArrays = (glGenVertexArrays_wrapper_proc_t) getProc("glGenVertexArrays", userData);
+	glBindVertexArray = (glBindVertexArray_wrapper_proc_t) getProc("glBindVertexArray", userData);
+	glDeleteVertexArrays = (glDeleteVertexArrays_wrapper_proc_t) getProc("glDeleteVertexArrays", userData);
+	glIsVertexArray = (glIsVertexArray_wrapper_proc_t) getProc("glIsVertexArray", userData);
+	glMapBufferRange = (glMapBufferRange_wrapper_proc_t) getProc("glMapBufferRange", userData);
+	glUnmapBuffer = (glUnmapBuffer_wrapper_proc_t) getProc("glUnmapBuffer", userData);
+	glFlushMappedBufferRange = (glFlushMappedBufferRange_wrapper_proc_t) getProc("glFlushMappedBufferRange", userData);
+	glMapBufferRangeAEMU = (glMapBufferRangeAEMU_wrapper_proc_t) getProc("glMapBufferRangeAEMU", userData);
+	glUnmapBufferAEMU = (glUnmapBufferAEMU_wrapper_proc_t) getProc("glUnmapBufferAEMU", userData);
+	glFlushMappedBufferRangeAEMU = (glFlushMappedBufferRangeAEMU_wrapper_proc_t) getProc("glFlushMappedBufferRangeAEMU", userData);
+	glReadPixelsOffsetAEMU = (glReadPixelsOffsetAEMU_wrapper_proc_t) getProc("glReadPixelsOffsetAEMU", userData);
+	glCompressedTexImage2DOffsetAEMU = (glCompressedTexImage2DOffsetAEMU_wrapper_proc_t) getProc("glCompressedTexImage2DOffsetAEMU", userData);
+	glCompressedTexSubImage2DOffsetAEMU = (glCompressedTexSubImage2DOffsetAEMU_wrapper_proc_t) getProc("glCompressedTexSubImage2DOffsetAEMU", userData);
+	glTexImage2DOffsetAEMU = (glTexImage2DOffsetAEMU_wrapper_proc_t) getProc("glTexImage2DOffsetAEMU", userData);
+	glTexSubImage2DOffsetAEMU = (glTexSubImage2DOffsetAEMU_wrapper_proc_t) getProc("glTexSubImage2DOffsetAEMU", userData);
+	glBindBufferRange = (glBindBufferRange_wrapper_proc_t) getProc("glBindBufferRange", userData);
+	glBindBufferBase = (glBindBufferBase_wrapper_proc_t) getProc("glBindBufferBase", userData);
+	glCopyBufferSubData = (glCopyBufferSubData_wrapper_proc_t) getProc("glCopyBufferSubData", userData);
+	glClearBufferiv = (glClearBufferiv_wrapper_proc_t) getProc("glClearBufferiv", userData);
+	glClearBufferuiv = (glClearBufferuiv_wrapper_proc_t) getProc("glClearBufferuiv", userData);
+	glClearBufferfv = (glClearBufferfv_wrapper_proc_t) getProc("glClearBufferfv", userData);
+	glClearBufferfi = (glClearBufferfi_wrapper_proc_t) getProc("glClearBufferfi", userData);
+	glGetBufferParameteri64v = (glGetBufferParameteri64v_wrapper_proc_t) getProc("glGetBufferParameteri64v", userData);
+	glGetBufferPointerv = (glGetBufferPointerv_wrapper_proc_t) getProc("glGetBufferPointerv", userData);
+	glUniformBlockBinding = (glUniformBlockBinding_wrapper_proc_t) getProc("glUniformBlockBinding", userData);
+	glGetUniformBlockIndex = (glGetUniformBlockIndex_wrapper_proc_t) getProc("glGetUniformBlockIndex", userData);
+	glGetUniformIndices = (glGetUniformIndices_wrapper_proc_t) getProc("glGetUniformIndices", userData);
+	glGetUniformIndicesAEMU = (glGetUniformIndicesAEMU_wrapper_proc_t) getProc("glGetUniformIndicesAEMU", userData);
+	glGetActiveUniformBlockiv = (glGetActiveUniformBlockiv_wrapper_proc_t) getProc("glGetActiveUniformBlockiv", userData);
+	glGetActiveUniformBlockName = (glGetActiveUniformBlockName_wrapper_proc_t) getProc("glGetActiveUniformBlockName", userData);
+	glUniform1ui = (glUniform1ui_wrapper_proc_t) getProc("glUniform1ui", userData);
+	glUniform2ui = (glUniform2ui_wrapper_proc_t) getProc("glUniform2ui", userData);
+	glUniform3ui = (glUniform3ui_wrapper_proc_t) getProc("glUniform3ui", userData);
+	glUniform4ui = (glUniform4ui_wrapper_proc_t) getProc("glUniform4ui", userData);
+	glUniform1uiv = (glUniform1uiv_wrapper_proc_t) getProc("glUniform1uiv", userData);
+	glUniform2uiv = (glUniform2uiv_wrapper_proc_t) getProc("glUniform2uiv", userData);
+	glUniform3uiv = (glUniform3uiv_wrapper_proc_t) getProc("glUniform3uiv", userData);
+	glUniform4uiv = (glUniform4uiv_wrapper_proc_t) getProc("glUniform4uiv", userData);
+	glUniformMatrix2x3fv = (glUniformMatrix2x3fv_wrapper_proc_t) getProc("glUniformMatrix2x3fv", userData);
+	glUniformMatrix3x2fv = (glUniformMatrix3x2fv_wrapper_proc_t) getProc("glUniformMatrix3x2fv", userData);
+	glUniformMatrix2x4fv = (glUniformMatrix2x4fv_wrapper_proc_t) getProc("glUniformMatrix2x4fv", userData);
+	glUniformMatrix4x2fv = (glUniformMatrix4x2fv_wrapper_proc_t) getProc("glUniformMatrix4x2fv", userData);
+	glUniformMatrix3x4fv = (glUniformMatrix3x4fv_wrapper_proc_t) getProc("glUniformMatrix3x4fv", userData);
+	glUniformMatrix4x3fv = (glUniformMatrix4x3fv_wrapper_proc_t) getProc("glUniformMatrix4x3fv", userData);
+	glGetUniformuiv = (glGetUniformuiv_wrapper_proc_t) getProc("glGetUniformuiv", userData);
+	glGetActiveUniformsiv = (glGetActiveUniformsiv_wrapper_proc_t) getProc("glGetActiveUniformsiv", userData);
+	glVertexAttribI4i = (glVertexAttribI4i_wrapper_proc_t) getProc("glVertexAttribI4i", userData);
+	glVertexAttribI4ui = (glVertexAttribI4ui_wrapper_proc_t) getProc("glVertexAttribI4ui", userData);
+	glVertexAttribI4iv = (glVertexAttribI4iv_wrapper_proc_t) getProc("glVertexAttribI4iv", userData);
+	glVertexAttribI4uiv = (glVertexAttribI4uiv_wrapper_proc_t) getProc("glVertexAttribI4uiv", userData);
+	glVertexAttribIPointer = (glVertexAttribIPointer_wrapper_proc_t) getProc("glVertexAttribIPointer", userData);
+	glVertexAttribIPointerOffsetAEMU = (glVertexAttribIPointerOffsetAEMU_wrapper_proc_t) getProc("glVertexAttribIPointerOffsetAEMU", userData);
+	glVertexAttribIPointerDataAEMU = (glVertexAttribIPointerDataAEMU_wrapper_proc_t) getProc("glVertexAttribIPointerDataAEMU", userData);
+	glGetVertexAttribIiv = (glGetVertexAttribIiv_wrapper_proc_t) getProc("glGetVertexAttribIiv", userData);
+	glGetVertexAttribIuiv = (glGetVertexAttribIuiv_wrapper_proc_t) getProc("glGetVertexAttribIuiv", userData);
+	glVertexAttribDivisor = (glVertexAttribDivisor_wrapper_proc_t) getProc("glVertexAttribDivisor", userData);
+	glDrawArraysInstanced = (glDrawArraysInstanced_wrapper_proc_t) getProc("glDrawArraysInstanced", userData);
+	glDrawElementsInstanced = (glDrawElementsInstanced_wrapper_proc_t) getProc("glDrawElementsInstanced", userData);
+	glDrawElementsInstancedDataAEMU = (glDrawElementsInstancedDataAEMU_wrapper_proc_t) getProc("glDrawElementsInstancedDataAEMU", userData);
+	glDrawElementsInstancedOffsetAEMU = (glDrawElementsInstancedOffsetAEMU_wrapper_proc_t) getProc("glDrawElementsInstancedOffsetAEMU", userData);
+	glDrawRangeElements = (glDrawRangeElements_wrapper_proc_t) getProc("glDrawRangeElements", userData);
+	glDrawRangeElementsDataAEMU = (glDrawRangeElementsDataAEMU_wrapper_proc_t) getProc("glDrawRangeElementsDataAEMU", userData);
+	glDrawRangeElementsOffsetAEMU = (glDrawRangeElementsOffsetAEMU_wrapper_proc_t) getProc("glDrawRangeElementsOffsetAEMU", userData);
+	glFenceSync = (glFenceSync_wrapper_proc_t) getProc("glFenceSync", userData);
+	glClientWaitSync = (glClientWaitSync_wrapper_proc_t) getProc("glClientWaitSync", userData);
+	glWaitSync = (glWaitSync_wrapper_proc_t) getProc("glWaitSync", userData);
+	glDeleteSync = (glDeleteSync_wrapper_proc_t) getProc("glDeleteSync", userData);
+	glIsSync = (glIsSync_wrapper_proc_t) getProc("glIsSync", userData);
+	glGetSynciv = (glGetSynciv_wrapper_proc_t) getProc("glGetSynciv", userData);
+	glFenceSyncAEMU = (glFenceSyncAEMU_wrapper_proc_t) getProc("glFenceSyncAEMU", userData);
+	glClientWaitSyncAEMU = (glClientWaitSyncAEMU_wrapper_proc_t) getProc("glClientWaitSyncAEMU", userData);
+	glWaitSyncAEMU = (glWaitSyncAEMU_wrapper_proc_t) getProc("glWaitSyncAEMU", userData);
+	glDeleteSyncAEMU = (glDeleteSyncAEMU_wrapper_proc_t) getProc("glDeleteSyncAEMU", userData);
+	glIsSyncAEMU = (glIsSyncAEMU_wrapper_proc_t) getProc("glIsSyncAEMU", userData);
+	glGetSyncivAEMU = (glGetSyncivAEMU_wrapper_proc_t) getProc("glGetSyncivAEMU", userData);
+	glDrawBuffers = (glDrawBuffers_wrapper_proc_t) getProc("glDrawBuffers", userData);
+	glReadBuffer = (glReadBuffer_wrapper_proc_t) getProc("glReadBuffer", userData);
+	glBlitFramebuffer = (glBlitFramebuffer_wrapper_proc_t) getProc("glBlitFramebuffer", userData);
+	glInvalidateFramebuffer = (glInvalidateFramebuffer_wrapper_proc_t) getProc("glInvalidateFramebuffer", userData);
+	glInvalidateSubFramebuffer = (glInvalidateSubFramebuffer_wrapper_proc_t) getProc("glInvalidateSubFramebuffer", userData);
+	glFramebufferTextureLayer = (glFramebufferTextureLayer_wrapper_proc_t) getProc("glFramebufferTextureLayer", userData);
+	glRenderbufferStorageMultisample = (glRenderbufferStorageMultisample_wrapper_proc_t) getProc("glRenderbufferStorageMultisample", userData);
+	glTexStorage2D = (glTexStorage2D_wrapper_proc_t) getProc("glTexStorage2D", userData);
+	glGetInternalformativ = (glGetInternalformativ_wrapper_proc_t) getProc("glGetInternalformativ", userData);
+	glBeginTransformFeedback = (glBeginTransformFeedback_wrapper_proc_t) getProc("glBeginTransformFeedback", userData);
+	glEndTransformFeedback = (glEndTransformFeedback_wrapper_proc_t) getProc("glEndTransformFeedback", userData);
+	glGenTransformFeedbacks = (glGenTransformFeedbacks_wrapper_proc_t) getProc("glGenTransformFeedbacks", userData);
+	glDeleteTransformFeedbacks = (glDeleteTransformFeedbacks_wrapper_proc_t) getProc("glDeleteTransformFeedbacks", userData);
+	glBindTransformFeedback = (glBindTransformFeedback_wrapper_proc_t) getProc("glBindTransformFeedback", userData);
+	glPauseTransformFeedback = (glPauseTransformFeedback_wrapper_proc_t) getProc("glPauseTransformFeedback", userData);
+	glResumeTransformFeedback = (glResumeTransformFeedback_wrapper_proc_t) getProc("glResumeTransformFeedback", userData);
+	glIsTransformFeedback = (glIsTransformFeedback_wrapper_proc_t) getProc("glIsTransformFeedback", userData);
+	glTransformFeedbackVaryings = (glTransformFeedbackVaryings_wrapper_proc_t) getProc("glTransformFeedbackVaryings", userData);
+	glTransformFeedbackVaryingsAEMU = (glTransformFeedbackVaryingsAEMU_wrapper_proc_t) getProc("glTransformFeedbackVaryingsAEMU", userData);
+	glGetTransformFeedbackVarying = (glGetTransformFeedbackVarying_wrapper_proc_t) getProc("glGetTransformFeedbackVarying", userData);
+	glGenSamplers = (glGenSamplers_wrapper_proc_t) getProc("glGenSamplers", userData);
+	glDeleteSamplers = (glDeleteSamplers_wrapper_proc_t) getProc("glDeleteSamplers", userData);
+	glBindSampler = (glBindSampler_wrapper_proc_t) getProc("glBindSampler", userData);
+	glSamplerParameterf = (glSamplerParameterf_wrapper_proc_t) getProc("glSamplerParameterf", userData);
+	glSamplerParameteri = (glSamplerParameteri_wrapper_proc_t) getProc("glSamplerParameteri", userData);
+	glSamplerParameterfv = (glSamplerParameterfv_wrapper_proc_t) getProc("glSamplerParameterfv", userData);
+	glSamplerParameteriv = (glSamplerParameteriv_wrapper_proc_t) getProc("glSamplerParameteriv", userData);
+	glGetSamplerParameterfv = (glGetSamplerParameterfv_wrapper_proc_t) getProc("glGetSamplerParameterfv", userData);
+	glGetSamplerParameteriv = (glGetSamplerParameteriv_wrapper_proc_t) getProc("glGetSamplerParameteriv", userData);
+	glIsSampler = (glIsSampler_wrapper_proc_t) getProc("glIsSampler", userData);
+	glGenQueries = (glGenQueries_wrapper_proc_t) getProc("glGenQueries", userData);
+	glDeleteQueries = (glDeleteQueries_wrapper_proc_t) getProc("glDeleteQueries", userData);
+	glBeginQuery = (glBeginQuery_wrapper_proc_t) getProc("glBeginQuery", userData);
+	glEndQuery = (glEndQuery_wrapper_proc_t) getProc("glEndQuery", userData);
+	glGetQueryiv = (glGetQueryiv_wrapper_proc_t) getProc("glGetQueryiv", userData);
+	glGetQueryObjectuiv = (glGetQueryObjectuiv_wrapper_proc_t) getProc("glGetQueryObjectuiv", userData);
+	glIsQuery = (glIsQuery_wrapper_proc_t) getProc("glIsQuery", userData);
+	glProgramParameteri = (glProgramParameteri_wrapper_proc_t) getProc("glProgramParameteri", userData);
+	glProgramBinary = (glProgramBinary_wrapper_proc_t) getProc("glProgramBinary", userData);
+	glGetProgramBinary = (glGetProgramBinary_wrapper_proc_t) getProc("glGetProgramBinary", userData);
+	glGetFragDataLocation = (glGetFragDataLocation_wrapper_proc_t) getProc("glGetFragDataLocation", userData);
+	glGetInteger64v = (glGetInteger64v_wrapper_proc_t) getProc("glGetInteger64v", userData);
+	glGetIntegeri_v = (glGetIntegeri_v_wrapper_proc_t) getProc("glGetIntegeri_v", userData);
+	glGetInteger64i_v = (glGetInteger64i_v_wrapper_proc_t) getProc("glGetInteger64i_v", userData);
+	glTexImage3D = (glTexImage3D_wrapper_proc_t) getProc("glTexImage3D", userData);
+	glTexImage3DOffsetAEMU = (glTexImage3DOffsetAEMU_wrapper_proc_t) getProc("glTexImage3DOffsetAEMU", userData);
+	glTexStorage3D = (glTexStorage3D_wrapper_proc_t) getProc("glTexStorage3D", userData);
+	glTexSubImage3D = (glTexSubImage3D_wrapper_proc_t) getProc("glTexSubImage3D", userData);
+	glTexSubImage3DOffsetAEMU = (glTexSubImage3DOffsetAEMU_wrapper_proc_t) getProc("glTexSubImage3DOffsetAEMU", userData);
+	glCompressedTexImage3D = (glCompressedTexImage3D_wrapper_proc_t) getProc("glCompressedTexImage3D", userData);
+	glCompressedTexImage3DOffsetAEMU = (glCompressedTexImage3DOffsetAEMU_wrapper_proc_t) getProc("glCompressedTexImage3DOffsetAEMU", userData);
+	glCompressedTexSubImage3D = (glCompressedTexSubImage3D_wrapper_proc_t) getProc("glCompressedTexSubImage3D", userData);
+	glCompressedTexSubImage3DOffsetAEMU = (glCompressedTexSubImage3DOffsetAEMU_wrapper_proc_t) getProc("glCompressedTexSubImage3DOffsetAEMU", userData);
+	glCopyTexSubImage3D = (glCopyTexSubImage3D_wrapper_proc_t) getProc("glCopyTexSubImage3D", userData);
+	glGetStringi = (glGetStringi_wrapper_proc_t) getProc("glGetStringi", userData);
+	glGetBooleani_v = (glGetBooleani_v_wrapper_proc_t) getProc("glGetBooleani_v", userData);
+	glMemoryBarrier = (glMemoryBarrier_wrapper_proc_t) getProc("glMemoryBarrier", userData);
+	glMemoryBarrierByRegion = (glMemoryBarrierByRegion_wrapper_proc_t) getProc("glMemoryBarrierByRegion", userData);
+	glGenProgramPipelines = (glGenProgramPipelines_wrapper_proc_t) getProc("glGenProgramPipelines", userData);
+	glDeleteProgramPipelines = (glDeleteProgramPipelines_wrapper_proc_t) getProc("glDeleteProgramPipelines", userData);
+	glBindProgramPipeline = (glBindProgramPipeline_wrapper_proc_t) getProc("glBindProgramPipeline", userData);
+	glGetProgramPipelineiv = (glGetProgramPipelineiv_wrapper_proc_t) getProc("glGetProgramPipelineiv", userData);
+	glGetProgramPipelineInfoLog = (glGetProgramPipelineInfoLog_wrapper_proc_t) getProc("glGetProgramPipelineInfoLog", userData);
+	glValidateProgramPipeline = (glValidateProgramPipeline_wrapper_proc_t) getProc("glValidateProgramPipeline", userData);
+	glIsProgramPipeline = (glIsProgramPipeline_wrapper_proc_t) getProc("glIsProgramPipeline", userData);
+	glUseProgramStages = (glUseProgramStages_wrapper_proc_t) getProc("glUseProgramStages", userData);
+	glActiveShaderProgram = (glActiveShaderProgram_wrapper_proc_t) getProc("glActiveShaderProgram", userData);
+	glCreateShaderProgramv = (glCreateShaderProgramv_wrapper_proc_t) getProc("glCreateShaderProgramv", userData);
+	glCreateShaderProgramvAEMU = (glCreateShaderProgramvAEMU_wrapper_proc_t) getProc("glCreateShaderProgramvAEMU", userData);
+	glProgramUniform1f = (glProgramUniform1f_wrapper_proc_t) getProc("glProgramUniform1f", userData);
+	glProgramUniform2f = (glProgramUniform2f_wrapper_proc_t) getProc("glProgramUniform2f", userData);
+	glProgramUniform3f = (glProgramUniform3f_wrapper_proc_t) getProc("glProgramUniform3f", userData);
+	glProgramUniform4f = (glProgramUniform4f_wrapper_proc_t) getProc("glProgramUniform4f", userData);
+	glProgramUniform1i = (glProgramUniform1i_wrapper_proc_t) getProc("glProgramUniform1i", userData);
+	glProgramUniform2i = (glProgramUniform2i_wrapper_proc_t) getProc("glProgramUniform2i", userData);
+	glProgramUniform3i = (glProgramUniform3i_wrapper_proc_t) getProc("glProgramUniform3i", userData);
+	glProgramUniform4i = (glProgramUniform4i_wrapper_proc_t) getProc("glProgramUniform4i", userData);
+	glProgramUniform1ui = (glProgramUniform1ui_wrapper_proc_t) getProc("glProgramUniform1ui", userData);
+	glProgramUniform2ui = (glProgramUniform2ui_wrapper_proc_t) getProc("glProgramUniform2ui", userData);
+	glProgramUniform3ui = (glProgramUniform3ui_wrapper_proc_t) getProc("glProgramUniform3ui", userData);
+	glProgramUniform4ui = (glProgramUniform4ui_wrapper_proc_t) getProc("glProgramUniform4ui", userData);
+	glProgramUniform1fv = (glProgramUniform1fv_wrapper_proc_t) getProc("glProgramUniform1fv", userData);
+	glProgramUniform2fv = (glProgramUniform2fv_wrapper_proc_t) getProc("glProgramUniform2fv", userData);
+	glProgramUniform3fv = (glProgramUniform3fv_wrapper_proc_t) getProc("glProgramUniform3fv", userData);
+	glProgramUniform4fv = (glProgramUniform4fv_wrapper_proc_t) getProc("glProgramUniform4fv", userData);
+	glProgramUniform1iv = (glProgramUniform1iv_wrapper_proc_t) getProc("glProgramUniform1iv", userData);
+	glProgramUniform2iv = (glProgramUniform2iv_wrapper_proc_t) getProc("glProgramUniform2iv", userData);
+	glProgramUniform3iv = (glProgramUniform3iv_wrapper_proc_t) getProc("glProgramUniform3iv", userData);
+	glProgramUniform4iv = (glProgramUniform4iv_wrapper_proc_t) getProc("glProgramUniform4iv", userData);
+	glProgramUniform1uiv = (glProgramUniform1uiv_wrapper_proc_t) getProc("glProgramUniform1uiv", userData);
+	glProgramUniform2uiv = (glProgramUniform2uiv_wrapper_proc_t) getProc("glProgramUniform2uiv", userData);
+	glProgramUniform3uiv = (glProgramUniform3uiv_wrapper_proc_t) getProc("glProgramUniform3uiv", userData);
+	glProgramUniform4uiv = (glProgramUniform4uiv_wrapper_proc_t) getProc("glProgramUniform4uiv", userData);
+	glProgramUniformMatrix2fv = (glProgramUniformMatrix2fv_wrapper_proc_t) getProc("glProgramUniformMatrix2fv", userData);
+	glProgramUniformMatrix3fv = (glProgramUniformMatrix3fv_wrapper_proc_t) getProc("glProgramUniformMatrix3fv", userData);
+	glProgramUniformMatrix4fv = (glProgramUniformMatrix4fv_wrapper_proc_t) getProc("glProgramUniformMatrix4fv", userData);
+	glProgramUniformMatrix2x3fv = (glProgramUniformMatrix2x3fv_wrapper_proc_t) getProc("glProgramUniformMatrix2x3fv", userData);
+	glProgramUniformMatrix3x2fv = (glProgramUniformMatrix3x2fv_wrapper_proc_t) getProc("glProgramUniformMatrix3x2fv", userData);
+	glProgramUniformMatrix2x4fv = (glProgramUniformMatrix2x4fv_wrapper_proc_t) getProc("glProgramUniformMatrix2x4fv", userData);
+	glProgramUniformMatrix4x2fv = (glProgramUniformMatrix4x2fv_wrapper_proc_t) getProc("glProgramUniformMatrix4x2fv", userData);
+	glProgramUniformMatrix3x4fv = (glProgramUniformMatrix3x4fv_wrapper_proc_t) getProc("glProgramUniformMatrix3x4fv", userData);
+	glProgramUniformMatrix4x3fv = (glProgramUniformMatrix4x3fv_wrapper_proc_t) getProc("glProgramUniformMatrix4x3fv", userData);
+	glGetProgramInterfaceiv = (glGetProgramInterfaceiv_wrapper_proc_t) getProc("glGetProgramInterfaceiv", userData);
+	glGetProgramResourceiv = (glGetProgramResourceiv_wrapper_proc_t) getProc("glGetProgramResourceiv", userData);
+	glGetProgramResourceIndex = (glGetProgramResourceIndex_wrapper_proc_t) getProc("glGetProgramResourceIndex", userData);
+	glGetProgramResourceLocation = (glGetProgramResourceLocation_wrapper_proc_t) getProc("glGetProgramResourceLocation", userData);
+	glGetProgramResourceName = (glGetProgramResourceName_wrapper_proc_t) getProc("glGetProgramResourceName", userData);
+	glBindImageTexture = (glBindImageTexture_wrapper_proc_t) getProc("glBindImageTexture", userData);
+	glDispatchCompute = (glDispatchCompute_wrapper_proc_t) getProc("glDispatchCompute", userData);
+	glDispatchComputeIndirect = (glDispatchComputeIndirect_wrapper_proc_t) getProc("glDispatchComputeIndirect", userData);
+	glBindVertexBuffer = (glBindVertexBuffer_wrapper_proc_t) getProc("glBindVertexBuffer", userData);
+	glVertexAttribBinding = (glVertexAttribBinding_wrapper_proc_t) getProc("glVertexAttribBinding", userData);
+	glVertexAttribFormat = (glVertexAttribFormat_wrapper_proc_t) getProc("glVertexAttribFormat", userData);
+	glVertexAttribIFormat = (glVertexAttribIFormat_wrapper_proc_t) getProc("glVertexAttribIFormat", userData);
+	glVertexBindingDivisor = (glVertexBindingDivisor_wrapper_proc_t) getProc("glVertexBindingDivisor", userData);
+	glDrawArraysIndirect = (glDrawArraysIndirect_wrapper_proc_t) getProc("glDrawArraysIndirect", userData);
+	glDrawArraysIndirectDataAEMU = (glDrawArraysIndirectDataAEMU_wrapper_proc_t) getProc("glDrawArraysIndirectDataAEMU", userData);
+	glDrawArraysIndirectOffsetAEMU = (glDrawArraysIndirectOffsetAEMU_wrapper_proc_t) getProc("glDrawArraysIndirectOffsetAEMU", userData);
+	glDrawElementsIndirect = (glDrawElementsIndirect_wrapper_proc_t) getProc("glDrawElementsIndirect", userData);
+	glDrawElementsIndirectDataAEMU = (glDrawElementsIndirectDataAEMU_wrapper_proc_t) getProc("glDrawElementsIndirectDataAEMU", userData);
+	glDrawElementsIndirectOffsetAEMU = (glDrawElementsIndirectOffsetAEMU_wrapper_proc_t) getProc("glDrawElementsIndirectOffsetAEMU", userData);
+	glTexStorage2DMultisample = (glTexStorage2DMultisample_wrapper_proc_t) getProc("glTexStorage2DMultisample", userData);
+	glSampleMaski = (glSampleMaski_wrapper_proc_t) getProc("glSampleMaski", userData);
+	glGetMultisamplefv = (glGetMultisamplefv_wrapper_proc_t) getProc("glGetMultisamplefv", userData);
+	glFramebufferParameteri = (glFramebufferParameteri_wrapper_proc_t) getProc("glFramebufferParameteri", userData);
+	glGetFramebufferParameteriv = (glGetFramebufferParameteriv_wrapper_proc_t) getProc("glGetFramebufferParameteriv", userData);
+	glGetTexLevelParameterfv = (glGetTexLevelParameterfv_wrapper_proc_t) getProc("glGetTexLevelParameterfv", userData);
+	glGetTexLevelParameteriv = (glGetTexLevelParameteriv_wrapper_proc_t) getProc("glGetTexLevelParameteriv", userData);
+	return 0;
+}
+
diff --git a/guest/libs/eglwrapper/gles3_wrapper_context.h b/guest/libs/eglwrapper/gles3_wrapper_context.h
new file mode 100644
index 0000000..c53c9c7
--- /dev/null
+++ b/guest/libs/eglwrapper/gles3_wrapper_context.h
@@ -0,0 +1,431 @@
+// Generated Code - DO NOT EDIT !!
+// generated by 'emugen'
+#ifndef __gles3_wrapper_context_t_h
+#define __gles3_wrapper_context_t_h
+
+#include "gles3_server_proc.h"
+
+#include "gles3_types.h"
+
+
+struct gles3_wrapper_context_t {
+
+	glActiveTexture_wrapper_proc_t glActiveTexture;
+	glAttachShader_wrapper_proc_t glAttachShader;
+	glBindAttribLocation_wrapper_proc_t glBindAttribLocation;
+	glBindBuffer_wrapper_proc_t glBindBuffer;
+	glBindFramebuffer_wrapper_proc_t glBindFramebuffer;
+	glBindRenderbuffer_wrapper_proc_t glBindRenderbuffer;
+	glBindTexture_wrapper_proc_t glBindTexture;
+	glBlendColor_wrapper_proc_t glBlendColor;
+	glBlendEquation_wrapper_proc_t glBlendEquation;
+	glBlendEquationSeparate_wrapper_proc_t glBlendEquationSeparate;
+	glBlendFunc_wrapper_proc_t glBlendFunc;
+	glBlendFuncSeparate_wrapper_proc_t glBlendFuncSeparate;
+	glBufferData_wrapper_proc_t glBufferData;
+	glBufferSubData_wrapper_proc_t glBufferSubData;
+	glCheckFramebufferStatus_wrapper_proc_t glCheckFramebufferStatus;
+	glClear_wrapper_proc_t glClear;
+	glClearColor_wrapper_proc_t glClearColor;
+	glClearDepthf_wrapper_proc_t glClearDepthf;
+	glClearStencil_wrapper_proc_t glClearStencil;
+	glColorMask_wrapper_proc_t glColorMask;
+	glCompileShader_wrapper_proc_t glCompileShader;
+	glCompressedTexImage2D_wrapper_proc_t glCompressedTexImage2D;
+	glCompressedTexSubImage2D_wrapper_proc_t glCompressedTexSubImage2D;
+	glCopyTexImage2D_wrapper_proc_t glCopyTexImage2D;
+	glCopyTexSubImage2D_wrapper_proc_t glCopyTexSubImage2D;
+	glCreateProgram_wrapper_proc_t glCreateProgram;
+	glCreateShader_wrapper_proc_t glCreateShader;
+	glCullFace_wrapper_proc_t glCullFace;
+	glDeleteBuffers_wrapper_proc_t glDeleteBuffers;
+	glDeleteFramebuffers_wrapper_proc_t glDeleteFramebuffers;
+	glDeleteProgram_wrapper_proc_t glDeleteProgram;
+	glDeleteRenderbuffers_wrapper_proc_t glDeleteRenderbuffers;
+	glDeleteShader_wrapper_proc_t glDeleteShader;
+	glDeleteTextures_wrapper_proc_t glDeleteTextures;
+	glDepthFunc_wrapper_proc_t glDepthFunc;
+	glDepthMask_wrapper_proc_t glDepthMask;
+	glDepthRangef_wrapper_proc_t glDepthRangef;
+	glDetachShader_wrapper_proc_t glDetachShader;
+	glDisable_wrapper_proc_t glDisable;
+	glDisableVertexAttribArray_wrapper_proc_t glDisableVertexAttribArray;
+	glDrawArrays_wrapper_proc_t glDrawArrays;
+	glDrawElements_wrapper_proc_t glDrawElements;
+	glEnable_wrapper_proc_t glEnable;
+	glEnableVertexAttribArray_wrapper_proc_t glEnableVertexAttribArray;
+	glFinish_wrapper_proc_t glFinish;
+	glFlush_wrapper_proc_t glFlush;
+	glFramebufferRenderbuffer_wrapper_proc_t glFramebufferRenderbuffer;
+	glFramebufferTexture2D_wrapper_proc_t glFramebufferTexture2D;
+	glFrontFace_wrapper_proc_t glFrontFace;
+	glGenBuffers_wrapper_proc_t glGenBuffers;
+	glGenerateMipmap_wrapper_proc_t glGenerateMipmap;
+	glGenFramebuffers_wrapper_proc_t glGenFramebuffers;
+	glGenRenderbuffers_wrapper_proc_t glGenRenderbuffers;
+	glGenTextures_wrapper_proc_t glGenTextures;
+	glGetActiveAttrib_wrapper_proc_t glGetActiveAttrib;
+	glGetActiveUniform_wrapper_proc_t glGetActiveUniform;
+	glGetAttachedShaders_wrapper_proc_t glGetAttachedShaders;
+	glGetAttribLocation_wrapper_proc_t glGetAttribLocation;
+	glGetBooleanv_wrapper_proc_t glGetBooleanv;
+	glGetBufferParameteriv_wrapper_proc_t glGetBufferParameteriv;
+	glGetError_wrapper_proc_t glGetError;
+	glGetFloatv_wrapper_proc_t glGetFloatv;
+	glGetFramebufferAttachmentParameteriv_wrapper_proc_t glGetFramebufferAttachmentParameteriv;
+	glGetIntegerv_wrapper_proc_t glGetIntegerv;
+	glGetProgramiv_wrapper_proc_t glGetProgramiv;
+	glGetProgramInfoLog_wrapper_proc_t glGetProgramInfoLog;
+	glGetRenderbufferParameteriv_wrapper_proc_t glGetRenderbufferParameteriv;
+	glGetShaderiv_wrapper_proc_t glGetShaderiv;
+	glGetShaderInfoLog_wrapper_proc_t glGetShaderInfoLog;
+	glGetShaderPrecisionFormat_wrapper_proc_t glGetShaderPrecisionFormat;
+	glGetShaderSource_wrapper_proc_t glGetShaderSource;
+	glGetString_wrapper_proc_t glGetString;
+	glGetTexParameterfv_wrapper_proc_t glGetTexParameterfv;
+	glGetTexParameteriv_wrapper_proc_t glGetTexParameteriv;
+	glGetUniformfv_wrapper_proc_t glGetUniformfv;
+	glGetUniformiv_wrapper_proc_t glGetUniformiv;
+	glGetUniformLocation_wrapper_proc_t glGetUniformLocation;
+	glGetVertexAttribfv_wrapper_proc_t glGetVertexAttribfv;
+	glGetVertexAttribiv_wrapper_proc_t glGetVertexAttribiv;
+	glGetVertexAttribPointerv_wrapper_proc_t glGetVertexAttribPointerv;
+	glHint_wrapper_proc_t glHint;
+	glIsBuffer_wrapper_proc_t glIsBuffer;
+	glIsEnabled_wrapper_proc_t glIsEnabled;
+	glIsFramebuffer_wrapper_proc_t glIsFramebuffer;
+	glIsProgram_wrapper_proc_t glIsProgram;
+	glIsRenderbuffer_wrapper_proc_t glIsRenderbuffer;
+	glIsShader_wrapper_proc_t glIsShader;
+	glIsTexture_wrapper_proc_t glIsTexture;
+	glLineWidth_wrapper_proc_t glLineWidth;
+	glLinkProgram_wrapper_proc_t glLinkProgram;
+	glPixelStorei_wrapper_proc_t glPixelStorei;
+	glPolygonOffset_wrapper_proc_t glPolygonOffset;
+	glReadPixels_wrapper_proc_t glReadPixels;
+	glReleaseShaderCompiler_wrapper_proc_t glReleaseShaderCompiler;
+	glRenderbufferStorage_wrapper_proc_t glRenderbufferStorage;
+	glSampleCoverage_wrapper_proc_t glSampleCoverage;
+	glScissor_wrapper_proc_t glScissor;
+	glShaderBinary_wrapper_proc_t glShaderBinary;
+	glShaderSource_wrapper_proc_t glShaderSource;
+	glStencilFunc_wrapper_proc_t glStencilFunc;
+	glStencilFuncSeparate_wrapper_proc_t glStencilFuncSeparate;
+	glStencilMask_wrapper_proc_t glStencilMask;
+	glStencilMaskSeparate_wrapper_proc_t glStencilMaskSeparate;
+	glStencilOp_wrapper_proc_t glStencilOp;
+	glStencilOpSeparate_wrapper_proc_t glStencilOpSeparate;
+	glTexImage2D_wrapper_proc_t glTexImage2D;
+	glTexParameterf_wrapper_proc_t glTexParameterf;
+	glTexParameterfv_wrapper_proc_t glTexParameterfv;
+	glTexParameteri_wrapper_proc_t glTexParameteri;
+	glTexParameteriv_wrapper_proc_t glTexParameteriv;
+	glTexSubImage2D_wrapper_proc_t glTexSubImage2D;
+	glUniform1f_wrapper_proc_t glUniform1f;
+	glUniform1fv_wrapper_proc_t glUniform1fv;
+	glUniform1i_wrapper_proc_t glUniform1i;
+	glUniform1iv_wrapper_proc_t glUniform1iv;
+	glUniform2f_wrapper_proc_t glUniform2f;
+	glUniform2fv_wrapper_proc_t glUniform2fv;
+	glUniform2i_wrapper_proc_t glUniform2i;
+	glUniform2iv_wrapper_proc_t glUniform2iv;
+	glUniform3f_wrapper_proc_t glUniform3f;
+	glUniform3fv_wrapper_proc_t glUniform3fv;
+	glUniform3i_wrapper_proc_t glUniform3i;
+	glUniform3iv_wrapper_proc_t glUniform3iv;
+	glUniform4f_wrapper_proc_t glUniform4f;
+	glUniform4fv_wrapper_proc_t glUniform4fv;
+	glUniform4i_wrapper_proc_t glUniform4i;
+	glUniform4iv_wrapper_proc_t glUniform4iv;
+	glUniformMatrix2fv_wrapper_proc_t glUniformMatrix2fv;
+	glUniformMatrix3fv_wrapper_proc_t glUniformMatrix3fv;
+	glUniformMatrix4fv_wrapper_proc_t glUniformMatrix4fv;
+	glUseProgram_wrapper_proc_t glUseProgram;
+	glValidateProgram_wrapper_proc_t glValidateProgram;
+	glVertexAttrib1f_wrapper_proc_t glVertexAttrib1f;
+	glVertexAttrib1fv_wrapper_proc_t glVertexAttrib1fv;
+	glVertexAttrib2f_wrapper_proc_t glVertexAttrib2f;
+	glVertexAttrib2fv_wrapper_proc_t glVertexAttrib2fv;
+	glVertexAttrib3f_wrapper_proc_t glVertexAttrib3f;
+	glVertexAttrib3fv_wrapper_proc_t glVertexAttrib3fv;
+	glVertexAttrib4f_wrapper_proc_t glVertexAttrib4f;
+	glVertexAttrib4fv_wrapper_proc_t glVertexAttrib4fv;
+	glVertexAttribPointer_wrapper_proc_t glVertexAttribPointer;
+	glViewport_wrapper_proc_t glViewport;
+	glEGLImageTargetTexture2DOES_wrapper_proc_t glEGLImageTargetTexture2DOES;
+	glEGLImageTargetRenderbufferStorageOES_wrapper_proc_t glEGLImageTargetRenderbufferStorageOES;
+	glGetProgramBinaryOES_wrapper_proc_t glGetProgramBinaryOES;
+	glProgramBinaryOES_wrapper_proc_t glProgramBinaryOES;
+	glMapBufferOES_wrapper_proc_t glMapBufferOES;
+	glUnmapBufferOES_wrapper_proc_t glUnmapBufferOES;
+	glTexImage3DOES_wrapper_proc_t glTexImage3DOES;
+	glTexSubImage3DOES_wrapper_proc_t glTexSubImage3DOES;
+	glCopyTexSubImage3DOES_wrapper_proc_t glCopyTexSubImage3DOES;
+	glCompressedTexImage3DOES_wrapper_proc_t glCompressedTexImage3DOES;
+	glCompressedTexSubImage3DOES_wrapper_proc_t glCompressedTexSubImage3DOES;
+	glFramebufferTexture3DOES_wrapper_proc_t glFramebufferTexture3DOES;
+	glBindVertexArrayOES_wrapper_proc_t glBindVertexArrayOES;
+	glDeleteVertexArraysOES_wrapper_proc_t glDeleteVertexArraysOES;
+	glGenVertexArraysOES_wrapper_proc_t glGenVertexArraysOES;
+	glIsVertexArrayOES_wrapper_proc_t glIsVertexArrayOES;
+	glDiscardFramebufferEXT_wrapper_proc_t glDiscardFramebufferEXT;
+	glMultiDrawArraysEXT_wrapper_proc_t glMultiDrawArraysEXT;
+	glMultiDrawElementsEXT_wrapper_proc_t glMultiDrawElementsEXT;
+	glGetPerfMonitorGroupsAMD_wrapper_proc_t glGetPerfMonitorGroupsAMD;
+	glGetPerfMonitorCountersAMD_wrapper_proc_t glGetPerfMonitorCountersAMD;
+	glGetPerfMonitorGroupStringAMD_wrapper_proc_t glGetPerfMonitorGroupStringAMD;
+	glGetPerfMonitorCounterStringAMD_wrapper_proc_t glGetPerfMonitorCounterStringAMD;
+	glGetPerfMonitorCounterInfoAMD_wrapper_proc_t glGetPerfMonitorCounterInfoAMD;
+	glGenPerfMonitorsAMD_wrapper_proc_t glGenPerfMonitorsAMD;
+	glDeletePerfMonitorsAMD_wrapper_proc_t glDeletePerfMonitorsAMD;
+	glSelectPerfMonitorCountersAMD_wrapper_proc_t glSelectPerfMonitorCountersAMD;
+	glBeginPerfMonitorAMD_wrapper_proc_t glBeginPerfMonitorAMD;
+	glEndPerfMonitorAMD_wrapper_proc_t glEndPerfMonitorAMD;
+	glGetPerfMonitorCounterDataAMD_wrapper_proc_t glGetPerfMonitorCounterDataAMD;
+	glRenderbufferStorageMultisampleIMG_wrapper_proc_t glRenderbufferStorageMultisampleIMG;
+	glFramebufferTexture2DMultisampleIMG_wrapper_proc_t glFramebufferTexture2DMultisampleIMG;
+	glDeleteFencesNV_wrapper_proc_t glDeleteFencesNV;
+	glGenFencesNV_wrapper_proc_t glGenFencesNV;
+	glIsFenceNV_wrapper_proc_t glIsFenceNV;
+	glTestFenceNV_wrapper_proc_t glTestFenceNV;
+	glGetFenceivNV_wrapper_proc_t glGetFenceivNV;
+	glFinishFenceNV_wrapper_proc_t glFinishFenceNV;
+	glSetFenceNV_wrapper_proc_t glSetFenceNV;
+	glCoverageMaskNV_wrapper_proc_t glCoverageMaskNV;
+	glCoverageOperationNV_wrapper_proc_t glCoverageOperationNV;
+	glGetDriverControlsQCOM_wrapper_proc_t glGetDriverControlsQCOM;
+	glGetDriverControlStringQCOM_wrapper_proc_t glGetDriverControlStringQCOM;
+	glEnableDriverControlQCOM_wrapper_proc_t glEnableDriverControlQCOM;
+	glDisableDriverControlQCOM_wrapper_proc_t glDisableDriverControlQCOM;
+	glExtGetTexturesQCOM_wrapper_proc_t glExtGetTexturesQCOM;
+	glExtGetBuffersQCOM_wrapper_proc_t glExtGetBuffersQCOM;
+	glExtGetRenderbuffersQCOM_wrapper_proc_t glExtGetRenderbuffersQCOM;
+	glExtGetFramebuffersQCOM_wrapper_proc_t glExtGetFramebuffersQCOM;
+	glExtGetTexLevelParameterivQCOM_wrapper_proc_t glExtGetTexLevelParameterivQCOM;
+	glExtTexObjectStateOverrideiQCOM_wrapper_proc_t glExtTexObjectStateOverrideiQCOM;
+	glExtGetTexSubImageQCOM_wrapper_proc_t glExtGetTexSubImageQCOM;
+	glExtGetBufferPointervQCOM_wrapper_proc_t glExtGetBufferPointervQCOM;
+	glExtGetShadersQCOM_wrapper_proc_t glExtGetShadersQCOM;
+	glExtGetProgramsQCOM_wrapper_proc_t glExtGetProgramsQCOM;
+	glExtIsProgramBinaryQCOM_wrapper_proc_t glExtIsProgramBinaryQCOM;
+	glExtGetProgramBinarySourceQCOM_wrapper_proc_t glExtGetProgramBinarySourceQCOM;
+	glStartTilingQCOM_wrapper_proc_t glStartTilingQCOM;
+	glEndTilingQCOM_wrapper_proc_t glEndTilingQCOM;
+	glVertexAttribPointerData_wrapper_proc_t glVertexAttribPointerData;
+	glVertexAttribPointerOffset_wrapper_proc_t glVertexAttribPointerOffset;
+	glDrawElementsOffset_wrapper_proc_t glDrawElementsOffset;
+	glDrawElementsData_wrapper_proc_t glDrawElementsData;
+	glGetCompressedTextureFormats_wrapper_proc_t glGetCompressedTextureFormats;
+	glShaderString_wrapper_proc_t glShaderString;
+	glFinishRoundTrip_wrapper_proc_t glFinishRoundTrip;
+	glGenVertexArrays_wrapper_proc_t glGenVertexArrays;
+	glBindVertexArray_wrapper_proc_t glBindVertexArray;
+	glDeleteVertexArrays_wrapper_proc_t glDeleteVertexArrays;
+	glIsVertexArray_wrapper_proc_t glIsVertexArray;
+	glMapBufferRange_wrapper_proc_t glMapBufferRange;
+	glUnmapBuffer_wrapper_proc_t glUnmapBuffer;
+	glFlushMappedBufferRange_wrapper_proc_t glFlushMappedBufferRange;
+	glMapBufferRangeAEMU_wrapper_proc_t glMapBufferRangeAEMU;
+	glUnmapBufferAEMU_wrapper_proc_t glUnmapBufferAEMU;
+	glFlushMappedBufferRangeAEMU_wrapper_proc_t glFlushMappedBufferRangeAEMU;
+	glReadPixelsOffsetAEMU_wrapper_proc_t glReadPixelsOffsetAEMU;
+	glCompressedTexImage2DOffsetAEMU_wrapper_proc_t glCompressedTexImage2DOffsetAEMU;
+	glCompressedTexSubImage2DOffsetAEMU_wrapper_proc_t glCompressedTexSubImage2DOffsetAEMU;
+	glTexImage2DOffsetAEMU_wrapper_proc_t glTexImage2DOffsetAEMU;
+	glTexSubImage2DOffsetAEMU_wrapper_proc_t glTexSubImage2DOffsetAEMU;
+	glBindBufferRange_wrapper_proc_t glBindBufferRange;
+	glBindBufferBase_wrapper_proc_t glBindBufferBase;
+	glCopyBufferSubData_wrapper_proc_t glCopyBufferSubData;
+	glClearBufferiv_wrapper_proc_t glClearBufferiv;
+	glClearBufferuiv_wrapper_proc_t glClearBufferuiv;
+	glClearBufferfv_wrapper_proc_t glClearBufferfv;
+	glClearBufferfi_wrapper_proc_t glClearBufferfi;
+	glGetBufferParameteri64v_wrapper_proc_t glGetBufferParameteri64v;
+	glGetBufferPointerv_wrapper_proc_t glGetBufferPointerv;
+	glUniformBlockBinding_wrapper_proc_t glUniformBlockBinding;
+	glGetUniformBlockIndex_wrapper_proc_t glGetUniformBlockIndex;
+	glGetUniformIndices_wrapper_proc_t glGetUniformIndices;
+	glGetUniformIndicesAEMU_wrapper_proc_t glGetUniformIndicesAEMU;
+	glGetActiveUniformBlockiv_wrapper_proc_t glGetActiveUniformBlockiv;
+	glGetActiveUniformBlockName_wrapper_proc_t glGetActiveUniformBlockName;
+	glUniform1ui_wrapper_proc_t glUniform1ui;
+	glUniform2ui_wrapper_proc_t glUniform2ui;
+	glUniform3ui_wrapper_proc_t glUniform3ui;
+	glUniform4ui_wrapper_proc_t glUniform4ui;
+	glUniform1uiv_wrapper_proc_t glUniform1uiv;
+	glUniform2uiv_wrapper_proc_t glUniform2uiv;
+	glUniform3uiv_wrapper_proc_t glUniform3uiv;
+	glUniform4uiv_wrapper_proc_t glUniform4uiv;
+	glUniformMatrix2x3fv_wrapper_proc_t glUniformMatrix2x3fv;
+	glUniformMatrix3x2fv_wrapper_proc_t glUniformMatrix3x2fv;
+	glUniformMatrix2x4fv_wrapper_proc_t glUniformMatrix2x4fv;
+	glUniformMatrix4x2fv_wrapper_proc_t glUniformMatrix4x2fv;
+	glUniformMatrix3x4fv_wrapper_proc_t glUniformMatrix3x4fv;
+	glUniformMatrix4x3fv_wrapper_proc_t glUniformMatrix4x3fv;
+	glGetUniformuiv_wrapper_proc_t glGetUniformuiv;
+	glGetActiveUniformsiv_wrapper_proc_t glGetActiveUniformsiv;
+	glVertexAttribI4i_wrapper_proc_t glVertexAttribI4i;
+	glVertexAttribI4ui_wrapper_proc_t glVertexAttribI4ui;
+	glVertexAttribI4iv_wrapper_proc_t glVertexAttribI4iv;
+	glVertexAttribI4uiv_wrapper_proc_t glVertexAttribI4uiv;
+	glVertexAttribIPointer_wrapper_proc_t glVertexAttribIPointer;
+	glVertexAttribIPointerOffsetAEMU_wrapper_proc_t glVertexAttribIPointerOffsetAEMU;
+	glVertexAttribIPointerDataAEMU_wrapper_proc_t glVertexAttribIPointerDataAEMU;
+	glGetVertexAttribIiv_wrapper_proc_t glGetVertexAttribIiv;
+	glGetVertexAttribIuiv_wrapper_proc_t glGetVertexAttribIuiv;
+	glVertexAttribDivisor_wrapper_proc_t glVertexAttribDivisor;
+	glDrawArraysInstanced_wrapper_proc_t glDrawArraysInstanced;
+	glDrawElementsInstanced_wrapper_proc_t glDrawElementsInstanced;
+	glDrawElementsInstancedDataAEMU_wrapper_proc_t glDrawElementsInstancedDataAEMU;
+	glDrawElementsInstancedOffsetAEMU_wrapper_proc_t glDrawElementsInstancedOffsetAEMU;
+	glDrawRangeElements_wrapper_proc_t glDrawRangeElements;
+	glDrawRangeElementsDataAEMU_wrapper_proc_t glDrawRangeElementsDataAEMU;
+	glDrawRangeElementsOffsetAEMU_wrapper_proc_t glDrawRangeElementsOffsetAEMU;
+	glFenceSync_wrapper_proc_t glFenceSync;
+	glClientWaitSync_wrapper_proc_t glClientWaitSync;
+	glWaitSync_wrapper_proc_t glWaitSync;
+	glDeleteSync_wrapper_proc_t glDeleteSync;
+	glIsSync_wrapper_proc_t glIsSync;
+	glGetSynciv_wrapper_proc_t glGetSynciv;
+	glFenceSyncAEMU_wrapper_proc_t glFenceSyncAEMU;
+	glClientWaitSyncAEMU_wrapper_proc_t glClientWaitSyncAEMU;
+	glWaitSyncAEMU_wrapper_proc_t glWaitSyncAEMU;
+	glDeleteSyncAEMU_wrapper_proc_t glDeleteSyncAEMU;
+	glIsSyncAEMU_wrapper_proc_t glIsSyncAEMU;
+	glGetSyncivAEMU_wrapper_proc_t glGetSyncivAEMU;
+	glDrawBuffers_wrapper_proc_t glDrawBuffers;
+	glReadBuffer_wrapper_proc_t glReadBuffer;
+	glBlitFramebuffer_wrapper_proc_t glBlitFramebuffer;
+	glInvalidateFramebuffer_wrapper_proc_t glInvalidateFramebuffer;
+	glInvalidateSubFramebuffer_wrapper_proc_t glInvalidateSubFramebuffer;
+	glFramebufferTextureLayer_wrapper_proc_t glFramebufferTextureLayer;
+	glRenderbufferStorageMultisample_wrapper_proc_t glRenderbufferStorageMultisample;
+	glTexStorage2D_wrapper_proc_t glTexStorage2D;
+	glGetInternalformativ_wrapper_proc_t glGetInternalformativ;
+	glBeginTransformFeedback_wrapper_proc_t glBeginTransformFeedback;
+	glEndTransformFeedback_wrapper_proc_t glEndTransformFeedback;
+	glGenTransformFeedbacks_wrapper_proc_t glGenTransformFeedbacks;
+	glDeleteTransformFeedbacks_wrapper_proc_t glDeleteTransformFeedbacks;
+	glBindTransformFeedback_wrapper_proc_t glBindTransformFeedback;
+	glPauseTransformFeedback_wrapper_proc_t glPauseTransformFeedback;
+	glResumeTransformFeedback_wrapper_proc_t glResumeTransformFeedback;
+	glIsTransformFeedback_wrapper_proc_t glIsTransformFeedback;
+	glTransformFeedbackVaryings_wrapper_proc_t glTransformFeedbackVaryings;
+	glTransformFeedbackVaryingsAEMU_wrapper_proc_t glTransformFeedbackVaryingsAEMU;
+	glGetTransformFeedbackVarying_wrapper_proc_t glGetTransformFeedbackVarying;
+	glGenSamplers_wrapper_proc_t glGenSamplers;
+	glDeleteSamplers_wrapper_proc_t glDeleteSamplers;
+	glBindSampler_wrapper_proc_t glBindSampler;
+	glSamplerParameterf_wrapper_proc_t glSamplerParameterf;
+	glSamplerParameteri_wrapper_proc_t glSamplerParameteri;
+	glSamplerParameterfv_wrapper_proc_t glSamplerParameterfv;
+	glSamplerParameteriv_wrapper_proc_t glSamplerParameteriv;
+	glGetSamplerParameterfv_wrapper_proc_t glGetSamplerParameterfv;
+	glGetSamplerParameteriv_wrapper_proc_t glGetSamplerParameteriv;
+	glIsSampler_wrapper_proc_t glIsSampler;
+	glGenQueries_wrapper_proc_t glGenQueries;
+	glDeleteQueries_wrapper_proc_t glDeleteQueries;
+	glBeginQuery_wrapper_proc_t glBeginQuery;
+	glEndQuery_wrapper_proc_t glEndQuery;
+	glGetQueryiv_wrapper_proc_t glGetQueryiv;
+	glGetQueryObjectuiv_wrapper_proc_t glGetQueryObjectuiv;
+	glIsQuery_wrapper_proc_t glIsQuery;
+	glProgramParameteri_wrapper_proc_t glProgramParameteri;
+	glProgramBinary_wrapper_proc_t glProgramBinary;
+	glGetProgramBinary_wrapper_proc_t glGetProgramBinary;
+	glGetFragDataLocation_wrapper_proc_t glGetFragDataLocation;
+	glGetInteger64v_wrapper_proc_t glGetInteger64v;
+	glGetIntegeri_v_wrapper_proc_t glGetIntegeri_v;
+	glGetInteger64i_v_wrapper_proc_t glGetInteger64i_v;
+	glTexImage3D_wrapper_proc_t glTexImage3D;
+	glTexImage3DOffsetAEMU_wrapper_proc_t glTexImage3DOffsetAEMU;
+	glTexStorage3D_wrapper_proc_t glTexStorage3D;
+	glTexSubImage3D_wrapper_proc_t glTexSubImage3D;
+	glTexSubImage3DOffsetAEMU_wrapper_proc_t glTexSubImage3DOffsetAEMU;
+	glCompressedTexImage3D_wrapper_proc_t glCompressedTexImage3D;
+	glCompressedTexImage3DOffsetAEMU_wrapper_proc_t glCompressedTexImage3DOffsetAEMU;
+	glCompressedTexSubImage3D_wrapper_proc_t glCompressedTexSubImage3D;
+	glCompressedTexSubImage3DOffsetAEMU_wrapper_proc_t glCompressedTexSubImage3DOffsetAEMU;
+	glCopyTexSubImage3D_wrapper_proc_t glCopyTexSubImage3D;
+	glGetStringi_wrapper_proc_t glGetStringi;
+	glGetBooleani_v_wrapper_proc_t glGetBooleani_v;
+	glMemoryBarrier_wrapper_proc_t glMemoryBarrier;
+	glMemoryBarrierByRegion_wrapper_proc_t glMemoryBarrierByRegion;
+	glGenProgramPipelines_wrapper_proc_t glGenProgramPipelines;
+	glDeleteProgramPipelines_wrapper_proc_t glDeleteProgramPipelines;
+	glBindProgramPipeline_wrapper_proc_t glBindProgramPipeline;
+	glGetProgramPipelineiv_wrapper_proc_t glGetProgramPipelineiv;
+	glGetProgramPipelineInfoLog_wrapper_proc_t glGetProgramPipelineInfoLog;
+	glValidateProgramPipeline_wrapper_proc_t glValidateProgramPipeline;
+	glIsProgramPipeline_wrapper_proc_t glIsProgramPipeline;
+	glUseProgramStages_wrapper_proc_t glUseProgramStages;
+	glActiveShaderProgram_wrapper_proc_t glActiveShaderProgram;
+	glCreateShaderProgramv_wrapper_proc_t glCreateShaderProgramv;
+	glCreateShaderProgramvAEMU_wrapper_proc_t glCreateShaderProgramvAEMU;
+	glProgramUniform1f_wrapper_proc_t glProgramUniform1f;
+	glProgramUniform2f_wrapper_proc_t glProgramUniform2f;
+	glProgramUniform3f_wrapper_proc_t glProgramUniform3f;
+	glProgramUniform4f_wrapper_proc_t glProgramUniform4f;
+	glProgramUniform1i_wrapper_proc_t glProgramUniform1i;
+	glProgramUniform2i_wrapper_proc_t glProgramUniform2i;
+	glProgramUniform3i_wrapper_proc_t glProgramUniform3i;
+	glProgramUniform4i_wrapper_proc_t glProgramUniform4i;
+	glProgramUniform1ui_wrapper_proc_t glProgramUniform1ui;
+	glProgramUniform2ui_wrapper_proc_t glProgramUniform2ui;
+	glProgramUniform3ui_wrapper_proc_t glProgramUniform3ui;
+	glProgramUniform4ui_wrapper_proc_t glProgramUniform4ui;
+	glProgramUniform1fv_wrapper_proc_t glProgramUniform1fv;
+	glProgramUniform2fv_wrapper_proc_t glProgramUniform2fv;
+	glProgramUniform3fv_wrapper_proc_t glProgramUniform3fv;
+	glProgramUniform4fv_wrapper_proc_t glProgramUniform4fv;
+	glProgramUniform1iv_wrapper_proc_t glProgramUniform1iv;
+	glProgramUniform2iv_wrapper_proc_t glProgramUniform2iv;
+	glProgramUniform3iv_wrapper_proc_t glProgramUniform3iv;
+	glProgramUniform4iv_wrapper_proc_t glProgramUniform4iv;
+	glProgramUniform1uiv_wrapper_proc_t glProgramUniform1uiv;
+	glProgramUniform2uiv_wrapper_proc_t glProgramUniform2uiv;
+	glProgramUniform3uiv_wrapper_proc_t glProgramUniform3uiv;
+	glProgramUniform4uiv_wrapper_proc_t glProgramUniform4uiv;
+	glProgramUniformMatrix2fv_wrapper_proc_t glProgramUniformMatrix2fv;
+	glProgramUniformMatrix3fv_wrapper_proc_t glProgramUniformMatrix3fv;
+	glProgramUniformMatrix4fv_wrapper_proc_t glProgramUniformMatrix4fv;
+	glProgramUniformMatrix2x3fv_wrapper_proc_t glProgramUniformMatrix2x3fv;
+	glProgramUniformMatrix3x2fv_wrapper_proc_t glProgramUniformMatrix3x2fv;
+	glProgramUniformMatrix2x4fv_wrapper_proc_t glProgramUniformMatrix2x4fv;
+	glProgramUniformMatrix4x2fv_wrapper_proc_t glProgramUniformMatrix4x2fv;
+	glProgramUniformMatrix3x4fv_wrapper_proc_t glProgramUniformMatrix3x4fv;
+	glProgramUniformMatrix4x3fv_wrapper_proc_t glProgramUniformMatrix4x3fv;
+	glGetProgramInterfaceiv_wrapper_proc_t glGetProgramInterfaceiv;
+	glGetProgramResourceiv_wrapper_proc_t glGetProgramResourceiv;
+	glGetProgramResourceIndex_wrapper_proc_t glGetProgramResourceIndex;
+	glGetProgramResourceLocation_wrapper_proc_t glGetProgramResourceLocation;
+	glGetProgramResourceName_wrapper_proc_t glGetProgramResourceName;
+	glBindImageTexture_wrapper_proc_t glBindImageTexture;
+	glDispatchCompute_wrapper_proc_t glDispatchCompute;
+	glDispatchComputeIndirect_wrapper_proc_t glDispatchComputeIndirect;
+	glBindVertexBuffer_wrapper_proc_t glBindVertexBuffer;
+	glVertexAttribBinding_wrapper_proc_t glVertexAttribBinding;
+	glVertexAttribFormat_wrapper_proc_t glVertexAttribFormat;
+	glVertexAttribIFormat_wrapper_proc_t glVertexAttribIFormat;
+	glVertexBindingDivisor_wrapper_proc_t glVertexBindingDivisor;
+	glDrawArraysIndirect_wrapper_proc_t glDrawArraysIndirect;
+	glDrawArraysIndirectDataAEMU_wrapper_proc_t glDrawArraysIndirectDataAEMU;
+	glDrawArraysIndirectOffsetAEMU_wrapper_proc_t glDrawArraysIndirectOffsetAEMU;
+	glDrawElementsIndirect_wrapper_proc_t glDrawElementsIndirect;
+	glDrawElementsIndirectDataAEMU_wrapper_proc_t glDrawElementsIndirectDataAEMU;
+	glDrawElementsIndirectOffsetAEMU_wrapper_proc_t glDrawElementsIndirectOffsetAEMU;
+	glTexStorage2DMultisample_wrapper_proc_t glTexStorage2DMultisample;
+	glSampleMaski_wrapper_proc_t glSampleMaski;
+	glGetMultisamplefv_wrapper_proc_t glGetMultisamplefv;
+	glFramebufferParameteri_wrapper_proc_t glFramebufferParameteri;
+	glGetFramebufferParameteriv_wrapper_proc_t glGetFramebufferParameteriv;
+	glGetTexLevelParameterfv_wrapper_proc_t glGetTexLevelParameterfv;
+	glGetTexLevelParameteriv_wrapper_proc_t glGetTexLevelParameteriv;
+	virtual ~gles3_wrapper_context_t() {}
+
+	typedef gles3_wrapper_context_t *CONTEXT_ACCESSOR_TYPE(void);
+	static void setContextAccessor(CONTEXT_ACCESSOR_TYPE *f);
+	int initDispatchByName( void *(*getProc)(const char *name, void *userData), void *userData);
+};
+
+#endif
diff --git a/guest/libs/eglwrapper/gles3_wrapper_entry.cpp b/guest/libs/eglwrapper/gles3_wrapper_entry.cpp
new file mode 100644
index 0000000..190079f
--- /dev/null
+++ b/guest/libs/eglwrapper/gles3_wrapper_entry.cpp
@@ -0,0 +1,2892 @@
+// Generated Code - DO NOT EDIT !!
+// generated by 'emugen'
+#include <stdio.h>
+#include <stdlib.h>
+#include "gles3_wrapper_context.h"
+
+extern "C" {
+	void glActiveTexture(GLenum texture);
+	void glAttachShader(GLuint program, GLuint shader);
+	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();
+	GLuint glCreateShader(GLenum type);
+	void glCullFace(GLenum mode);
+	void glDeleteBuffers(GLsizei n, const GLuint* buffers);
+	void glDeleteFramebuffers(GLsizei n, const GLuint* framebuffers);
+	void glDeleteProgram(GLuint program);
+	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 glEnable(GLenum cap);
+	void glEnableVertexAttribArray(GLuint index);
+	void glFinish();
+	void glFlush();
+	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 glGenFramebuffers(GLsizei n, GLuint* framebuffers);
+	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 glGetFloatv(GLenum pname, GLfloat* params);
+	void glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint* params);
+	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 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 glGetUniformfv(GLuint program, GLint location, GLfloat* 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 glIsFramebuffer(GLuint framebuffer);
+	GLboolean glIsProgram(GLuint program);
+	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 glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels);
+	void glReleaseShaderCompiler();
+	void glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+	void glSampleCoverage(GLclampf value, GLboolean invert);
+	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);
+	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 indx, GLfloat x);
+	void glVertexAttrib1fv(GLuint indx, const GLfloat* values);
+	void glVertexAttrib2f(GLuint indx, GLfloat x, GLfloat y);
+	void glVertexAttrib2fv(GLuint indx, const GLfloat* values);
+	void glVertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z);
+	void glVertexAttrib3fv(GLuint indx, const GLfloat* values);
+	void glVertexAttrib4f(GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+	void glVertexAttrib4fv(GLuint indx, const GLfloat* values);
+	void glVertexAttribPointer(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr);
+	void glViewport(GLint x, GLint y, GLsizei width, GLsizei height);
+	void glEGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image);
+	void glEGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImageOES image);
+	void glGetProgramBinaryOES(GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, GLvoid* binary);
+	void glProgramBinaryOES(GLuint program, GLenum binaryFormat, const GLvoid* binary, GLint length);
+	void* glMapBufferOES(GLenum target, GLenum access);
+	GLboolean glUnmapBufferOES(GLenum target);
+	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 GLvoid* 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 GLvoid* data);
+	void glCompressedTexSubImage3DOES(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data);
+	void glFramebufferTexture3DOES(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
+	void glBindVertexArrayOES(GLuint array);
+	void glDeleteVertexArraysOES(GLsizei n, const GLuint* arrays);
+	void glGenVertexArraysOES(GLsizei n, GLuint* arrays);
+	GLboolean glIsVertexArrayOES(GLuint array);
+	void glDiscardFramebufferEXT(GLenum target, GLsizei numAttachments, const GLenum* attachments);
+	void glMultiDrawArraysEXT(GLenum mode, const GLint* first, const GLsizei* count, GLsizei primcount);
+	void glMultiDrawElementsEXT(GLenum mode, const GLsizei* count, GLenum type, const GLvoid* const* indices, GLsizei primcount);
+	void glGetPerfMonitorGroupsAMD(GLint* numGroups, GLsizei groupsSize, GLuint* groups);
+	void glGetPerfMonitorCountersAMD(GLuint group, GLint* numCounters, GLint* maxActiveCounters, GLsizei counterSize, GLuint* counters);
+	void glGetPerfMonitorGroupStringAMD(GLuint group, GLsizei bufSize, GLsizei* length, GLchar* groupString);
+	void glGetPerfMonitorCounterStringAMD(GLuint group, GLuint counter, GLsizei bufSize, GLsizei* length, GLchar* counterString);
+	void glGetPerfMonitorCounterInfoAMD(GLuint group, GLuint counter, GLenum pname, GLvoid* data);
+	void glGenPerfMonitorsAMD(GLsizei n, GLuint* monitors);
+	void glDeletePerfMonitorsAMD(GLsizei n, GLuint* monitors);
+	void glSelectPerfMonitorCountersAMD(GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint* countersList);
+	void glBeginPerfMonitorAMD(GLuint monitor);
+	void glEndPerfMonitorAMD(GLuint monitor);
+	void glGetPerfMonitorCounterDataAMD(GLuint monitor, GLenum pname, GLsizei dataSize, GLuint* data, GLint* bytesWritten);
+	void glRenderbufferStorageMultisampleIMG(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+	void glFramebufferTexture2DMultisampleIMG(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples);
+	void glDeleteFencesNV(GLsizei n, const GLuint* fences);
+	void glGenFencesNV(GLsizei n, GLuint* fences);
+	GLboolean glIsFenceNV(GLuint fence);
+	GLboolean glTestFenceNV(GLuint fence);
+	void glGetFenceivNV(GLuint fence, GLenum pname, GLint* params);
+	void glFinishFenceNV(GLuint fence);
+	void glSetFenceNV(GLuint fence, GLenum condition);
+	void glCoverageMaskNV(GLboolean mask);
+	void glCoverageOperationNV(GLenum operation);
+	void glGetDriverControlsQCOM(GLint* num, GLsizei size, GLuint* driverControls);
+	void glGetDriverControlStringQCOM(GLuint driverControl, GLsizei bufSize, GLsizei* length, GLchar* driverControlString);
+	void glEnableDriverControlQCOM(GLuint driverControl);
+	void glDisableDriverControlQCOM(GLuint driverControl);
+	void glExtGetTexturesQCOM(GLuint* textures, GLint maxTextures, GLint* numTextures);
+	void glExtGetBuffersQCOM(GLuint* buffers, GLint maxBuffers, GLint* numBuffers);
+	void glExtGetRenderbuffersQCOM(GLuint* renderbuffers, GLint maxRenderbuffers, GLint* numRenderbuffers);
+	void glExtGetFramebuffersQCOM(GLuint* framebuffers, GLint maxFramebuffers, GLint* numFramebuffers);
+	void glExtGetTexLevelParameterivQCOM(GLuint texture, GLenum face, GLint level, GLenum pname, GLint* params);
+	void glExtTexObjectStateOverrideiQCOM(GLenum target, GLenum pname, GLint param);
+	void glExtGetTexSubImageQCOM(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid* texels);
+	void glExtGetBufferPointervQCOM(GLenum target, GLvoidptr* params);
+	void glExtGetShadersQCOM(GLuint* shaders, GLint maxShaders, GLint* numShaders);
+	void glExtGetProgramsQCOM(GLuint* programs, GLint maxPrograms, GLint* numPrograms);
+	GLboolean glExtIsProgramBinaryQCOM(GLuint program);
+	void glExtGetProgramBinarySourceQCOM(GLuint program, GLenum shadertype, GLchar* source, GLint* length);
+	void glStartTilingQCOM(GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask);
+	void glEndTilingQCOM(GLbitfield preserveMask);
+	void glVertexAttribPointerData(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, void* data, GLuint datalen);
+	void glVertexAttribPointerOffset(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint offset);
+	void glDrawElementsOffset(GLenum mode, GLsizei count, GLenum type, GLuint offset);
+	void glDrawElementsData(GLenum mode, GLsizei count, GLenum type, void* data, GLuint datalen);
+	void glGetCompressedTextureFormats(int count, GLint* formats);
+	void glShaderString(GLuint shader, const GLchar* string, GLsizei len);
+	int glFinishRoundTrip();
+	void glGenVertexArrays(GLsizei n, GLuint* arrays);
+	void glBindVertexArray(GLuint array);
+	void glDeleteVertexArrays(GLsizei n, const GLuint* arrays);
+	GLboolean glIsVertexArray(GLuint array);
+	void* glMapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
+	GLboolean glUnmapBuffer(GLenum target);
+	void glFlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length);
+	void glMapBufferRangeAEMU(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access, void* mapped);
+	void glUnmapBufferAEMU(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access, void* guest_buffer, GLboolean* out_res);
+	void glFlushMappedBufferRangeAEMU(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access, void* guest_buffer);
+	void glReadPixelsOffsetAEMU(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLuint offset);
+	void glCompressedTexImage2DOffsetAEMU(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, GLuint offset);
+	void glCompressedTexSubImage2DOffsetAEMU(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, GLuint offset);
+	void glTexImage2DOffsetAEMU(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, GLuint offset);
+	void glTexSubImage2DOffsetAEMU(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLuint offset);
+	void glBindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+	void glBindBufferBase(GLenum target, GLuint index, GLuint buffer);
+	void glCopyBufferSubData(GLenum readtarget, GLenum writetarget, GLintptr readoffset, GLintptr writeoffset, GLsizeiptr size);
+	void glClearBufferiv(GLenum buffer, GLint drawBuffer, const GLint* value);
+	void glClearBufferuiv(GLenum buffer, GLint drawBuffer, const GLuint* value);
+	void glClearBufferfv(GLenum buffer, GLint drawBuffer, const GLfloat* value);
+	void glClearBufferfi(GLenum buffer, GLint drawBuffer, GLfloat depth, GLint stencil);
+	void glGetBufferParameteri64v(GLenum target, GLenum value, GLint64* data);
+	void glGetBufferPointerv(GLenum target, GLenum pname, GLvoid** params);
+	void glUniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
+	GLuint glGetUniformBlockIndex(GLuint program, const GLchar* uniformBlockName);
+	void glGetUniformIndices(GLuint program, GLsizei uniformCount, const GLchar* const* uniformNames, GLuint* uniformIndices);
+	void glGetUniformIndicesAEMU(GLuint program, GLsizei uniformCount, const GLchar* packedUniformNames, GLsizei packedLen, GLuint* uniformIndices);
+	void glGetActiveUniformBlockiv(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params);
+	void glGetActiveUniformBlockName(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName);
+	void glUniform1ui(GLint location, GLuint v0);
+	void glUniform2ui(GLint location, GLuint v0, GLuint v1);
+	void glUniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2);
+	void glUniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+	void glUniform1uiv(GLint location, GLsizei count, const GLuint* value);
+	void glUniform2uiv(GLint location, GLsizei count, const GLuint* value);
+	void glUniform3uiv(GLint location, GLsizei count, const GLuint* value);
+	void glUniform4uiv(GLint location, GLsizei count, const GLuint* value);
+	void glUniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+	void glUniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+	void glUniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+	void glUniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+	void glUniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+	void glUniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+	void glGetUniformuiv(GLuint program, GLint location, GLuint* params);
+	void glGetActiveUniformsiv(GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params);
+	void glVertexAttribI4i(GLuint index, GLint v0, GLint v1, GLint v2, GLint v3);
+	void glVertexAttribI4ui(GLuint index, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+	void glVertexAttribI4iv(GLuint index, const GLint* v);
+	void glVertexAttribI4uiv(GLuint index, const GLuint* v);
+	void glVertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid* pointer);
+	void glVertexAttribIPointerOffsetAEMU(GLuint index, GLint size, GLenum type, GLsizei stride, GLuint offset);
+	void glVertexAttribIPointerDataAEMU(GLuint index, GLint size, GLenum type, GLsizei stride, void* data, GLuint datalen);
+	void glGetVertexAttribIiv(GLuint index, GLenum pname, GLint* params);
+	void glGetVertexAttribIuiv(GLuint index, GLenum pname, GLuint* params);
+	void glVertexAttribDivisor(GLuint index, GLuint divisor);
+	void glDrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei primcount);
+	void glDrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, const void* indices, GLsizei primcount);
+	void glDrawElementsInstancedDataAEMU(GLenum mode, GLsizei count, GLenum type, const void* indices, GLsizei primcount, GLsizei datalen);
+	void glDrawElementsInstancedOffsetAEMU(GLenum mode, GLsizei count, GLenum type, GLuint offset, GLsizei primcount);
+	void glDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid* indices);
+	void glDrawRangeElementsDataAEMU(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid* indices, GLsizei datalen);
+	void glDrawRangeElementsOffsetAEMU(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, GLuint offset);
+	GLsync glFenceSync(GLenum condition, GLbitfield flags);
+	GLenum glClientWaitSync(GLsync wait_on, GLbitfield flags, GLuint64 timeout);
+	void glWaitSync(GLsync wait_on, GLbitfield flags, GLuint64 timeout);
+	void glDeleteSync(GLsync to_delete);
+	GLboolean glIsSync(GLsync sync);
+	void glGetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values);
+	uint64_t glFenceSyncAEMU(GLenum condition, GLbitfield flags);
+	GLenum glClientWaitSyncAEMU(uint64_t wait_on, GLbitfield flags, GLuint64 timeout);
+	void glWaitSyncAEMU(uint64_t wait_on, GLbitfield flags, GLuint64 timeout);
+	void glDeleteSyncAEMU(uint64_t to_delete);
+	GLboolean glIsSyncAEMU(uint64_t sync);
+	void glGetSyncivAEMU(uint64_t sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values);
+	void glDrawBuffers(GLsizei n, const GLenum* bufs);
+	void glReadBuffer(GLenum src);
+	void glBlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+	void glInvalidateFramebuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments);
+	void glInvalidateSubFramebuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments, GLint x, GLint y, GLsizei width, GLsizei height);
+	void glFramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+	void glRenderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+	void glTexStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+	void glGetInternalformativ(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint* params);
+	void glBeginTransformFeedback(GLenum primitiveMode);
+	void glEndTransformFeedback();
+	void glGenTransformFeedbacks(GLsizei n, GLuint* ids);
+	void glDeleteTransformFeedbacks(GLsizei n, const GLuint* ids);
+	void glBindTransformFeedback(GLenum target, GLuint id);
+	void glPauseTransformFeedback();
+	void glResumeTransformFeedback();
+	GLboolean glIsTransformFeedback(GLuint id);
+	void glTransformFeedbackVaryings(GLuint program, GLsizei count, const GLchar* const* varyings, GLenum bufferMode);
+	void glTransformFeedbackVaryingsAEMU(GLuint program, GLsizei count, const char* packedVaryings, GLuint packedVaryingsLen, GLenum bufferMode);
+	void glGetTransformFeedbackVarying(GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* type, char* name);
+	void glGenSamplers(GLsizei n, GLuint* samplers);
+	void glDeleteSamplers(GLsizei n, const GLuint* samplers);
+	void glBindSampler(GLuint unit, GLuint sampler);
+	void glSamplerParameterf(GLuint sampler, GLenum pname, GLfloat param);
+	void glSamplerParameteri(GLuint sampler, GLenum pname, GLint param);
+	void glSamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat* params);
+	void glSamplerParameteriv(GLuint sampler, GLenum pname, const GLint* params);
+	void glGetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat* params);
+	void glGetSamplerParameteriv(GLuint sampler, GLenum pname, GLint* params);
+	GLboolean glIsSampler(GLuint sampler);
+	void glGenQueries(GLsizei n, GLuint* queries);
+	void glDeleteQueries(GLsizei n, const GLuint* queries);
+	void glBeginQuery(GLenum target, GLuint query);
+	void glEndQuery(GLenum target);
+	void glGetQueryiv(GLenum target, GLenum pname, GLint* params);
+	void glGetQueryObjectuiv(GLuint query, GLenum pname, GLuint* params);
+	GLboolean glIsQuery(GLuint query);
+	void glProgramParameteri(GLuint program, GLenum pname, GLint value);
+	void glProgramBinary(GLuint program, GLenum binaryFormat, const void* binary, GLsizei length);
+	void glGetProgramBinary(GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, void* binary);
+	GLint glGetFragDataLocation(GLuint program, const char* name);
+	void glGetInteger64v(GLenum pname, GLint64* data);
+	void glGetIntegeri_v(GLenum target, GLuint index, GLint* data);
+	void glGetInteger64i_v(GLenum target, GLuint index, GLint64* data);
+	void glTexImage3D(GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* data);
+	void glTexImage3DOffsetAEMU(GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, GLuint offset);
+	void glTexStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+	void glTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* data);
+	void glTexSubImage3DOffsetAEMU(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLuint offset);
+	void glCompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data);
+	void glCompressedTexImage3DOffsetAEMU(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, GLuint offset);
+	void glCompressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data);
+	void glCompressedTexSubImage3DOffsetAEMU(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, GLuint data);
+	void glCopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+	const GLubyte* glGetStringi(GLenum name, GLuint index);
+	void glGetBooleani_v(GLenum target, GLuint index, GLboolean* data);
+	void glMemoryBarrier(GLbitfield barriers);
+	void glMemoryBarrierByRegion(GLbitfield barriers);
+	void glGenProgramPipelines(GLsizei n, GLuint* pipelines);
+	void glDeleteProgramPipelines(GLsizei n, const GLuint* pipelines);
+	void glBindProgramPipeline(GLuint pipeline);
+	void glGetProgramPipelineiv(GLuint pipeline, GLenum pname, GLint* params);
+	void glGetProgramPipelineInfoLog(GLuint pipeline, GLsizei bufSize, GLsizei* length, GLchar* infoLog);
+	void glValidateProgramPipeline(GLuint pipeline);
+	GLboolean glIsProgramPipeline(GLuint pipeline);
+	void glUseProgramStages(GLuint pipeline, GLbitfield stages, GLuint program);
+	void glActiveShaderProgram(GLuint pipeline, GLuint program);
+	GLuint glCreateShaderProgramv(GLenum type, GLsizei count, const char** strings);
+	GLuint glCreateShaderProgramvAEMU(GLenum type, GLsizei count, const char* packedStrings, GLuint packedLen);
+	void glProgramUniform1f(GLuint program, GLint location, GLfloat v0);
+	void glProgramUniform2f(GLuint program, GLint location, GLfloat v0, GLfloat v1);
+	void glProgramUniform3f(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+	void glProgramUniform4f(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+	void glProgramUniform1i(GLuint program, GLint location, GLint v0);
+	void glProgramUniform2i(GLuint program, GLint location, GLint v0, GLint v1);
+	void glProgramUniform3i(GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
+	void glProgramUniform4i(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+	void glProgramUniform1ui(GLuint program, GLint location, GLuint v0);
+	void glProgramUniform2ui(GLuint program, GLint location, GLint v0, GLuint v1);
+	void glProgramUniform3ui(GLuint program, GLint location, GLint v0, GLint v1, GLuint v2);
+	void glProgramUniform4ui(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLuint v3);
+	void glProgramUniform1fv(GLuint program, GLint location, GLsizei count, const GLfloat* value);
+	void glProgramUniform2fv(GLuint program, GLint location, GLsizei count, const GLfloat* value);
+	void glProgramUniform3fv(GLuint program, GLint location, GLsizei count, const GLfloat* value);
+	void glProgramUniform4fv(GLuint program, GLint location, GLsizei count, const GLfloat* value);
+	void glProgramUniform1iv(GLuint program, GLint location, GLsizei count, const GLint* value);
+	void glProgramUniform2iv(GLuint program, GLint location, GLsizei count, const GLint* value);
+	void glProgramUniform3iv(GLuint program, GLint location, GLsizei count, const GLint* value);
+	void glProgramUniform4iv(GLuint program, GLint location, GLsizei count, const GLint* value);
+	void glProgramUniform1uiv(GLuint program, GLint location, GLsizei count, const GLuint* value);
+	void glProgramUniform2uiv(GLuint program, GLint location, GLsizei count, const GLuint* value);
+	void glProgramUniform3uiv(GLuint program, GLint location, GLsizei count, const GLuint* value);
+	void glProgramUniform4uiv(GLuint program, GLint location, GLsizei count, const GLuint* value);
+	void glProgramUniformMatrix2fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+	void glProgramUniformMatrix3fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+	void glProgramUniformMatrix4fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+	void glProgramUniformMatrix2x3fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+	void glProgramUniformMatrix3x2fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+	void glProgramUniformMatrix2x4fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+	void glProgramUniformMatrix4x2fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+	void glProgramUniformMatrix3x4fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+	void glProgramUniformMatrix4x3fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
+	void glGetProgramInterfaceiv(GLuint program, GLenum programInterface, GLenum pname, GLint* params);
+	void glGetProgramResourceiv(GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum* props, GLsizei bufSize, GLsizei* length, GLint* params);
+	GLuint glGetProgramResourceIndex(GLuint program, GLenum programInterface, const char* name);
+	GLint glGetProgramResourceLocation(GLuint program, GLenum programInterface, const char* name);
+	void glGetProgramResourceName(GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei* length, char* name);
+	void glBindImageTexture(GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format);
+	void glDispatchCompute(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z);
+	void glDispatchComputeIndirect(GLintptr indirect);
+	void glBindVertexBuffer(GLuint bindingindex, GLuint buffer, GLintptr offset, GLintptr stride);
+	void glVertexAttribBinding(GLuint attribindex, GLuint bindingindex);
+	void glVertexAttribFormat(GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
+	void glVertexAttribIFormat(GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+	void glVertexBindingDivisor(GLuint bindingindex, GLuint divisor);
+	void glDrawArraysIndirect(GLenum mode, const void* indirect);
+	void glDrawArraysIndirectDataAEMU(GLenum mode, const void* indirect, GLuint datalen);
+	void glDrawArraysIndirectOffsetAEMU(GLenum mode, GLuint offset);
+	void glDrawElementsIndirect(GLenum mode, GLenum type, const void* indirect);
+	void glDrawElementsIndirectDataAEMU(GLenum mode, GLenum type, const void* indirect, GLuint datalen);
+	void glDrawElementsIndirectOffsetAEMU(GLenum mode, GLenum type, GLuint offset);
+	void glTexStorage2DMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+	void glSampleMaski(GLuint maskNumber, GLbitfield mask);
+	void glGetMultisamplefv(GLenum pname, GLuint index, GLfloat* val);
+	void glFramebufferParameteri(GLenum target, GLenum pname, GLint param);
+	void glGetFramebufferParameteriv(GLenum target, GLenum pname, GLint* params);
+	void glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat* params);
+	void glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint* params);
+};
+
+#ifndef GET_CONTEXT
+static gles3_wrapper_context_t::CONTEXT_ACCESSOR_TYPE *getCurrentContext = NULL;
+void gles3_wrapper_context_t::setContextAccessor(CONTEXT_ACCESSOR_TYPE *f) { getCurrentContext = f; }
+#define GET_CONTEXT gles3_wrapper_context_t * ctx = getCurrentContext()
+#endif
+
+void glActiveTexture(GLenum texture)
+{
+	GET_CONTEXT;
+	ctx->glActiveTexture( texture);
+}
+
+void glAttachShader(GLuint program, GLuint shader)
+{
+	GET_CONTEXT;
+	ctx->glAttachShader( program, shader);
+}
+
+void glBindAttribLocation(GLuint program, GLuint index, const GLchar* name)
+{
+	GET_CONTEXT;
+	ctx->glBindAttribLocation( program, index, name);
+}
+
+void glBindBuffer(GLenum target, GLuint buffer)
+{
+	GET_CONTEXT;
+	ctx->glBindBuffer( target, buffer);
+}
+
+void glBindFramebuffer(GLenum target, GLuint framebuffer)
+{
+	GET_CONTEXT;
+	ctx->glBindFramebuffer( target, framebuffer);
+}
+
+void glBindRenderbuffer(GLenum target, GLuint renderbuffer)
+{
+	GET_CONTEXT;
+	ctx->glBindRenderbuffer( target, renderbuffer);
+}
+
+void glBindTexture(GLenum target, GLuint texture)
+{
+	GET_CONTEXT;
+	ctx->glBindTexture( target, texture);
+}
+
+void glBlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
+{
+	GET_CONTEXT;
+	ctx->glBlendColor( red, green, blue, alpha);
+}
+
+void glBlendEquation(GLenum mode)
+{
+	GET_CONTEXT;
+	ctx->glBlendEquation( mode);
+}
+
+void glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha)
+{
+	GET_CONTEXT;
+	ctx->glBlendEquationSeparate( modeRGB, modeAlpha);
+}
+
+void glBlendFunc(GLenum sfactor, GLenum dfactor)
+{
+	GET_CONTEXT;
+	ctx->glBlendFunc( sfactor, dfactor);
+}
+
+void glBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
+{
+	GET_CONTEXT;
+	ctx->glBlendFuncSeparate( srcRGB, dstRGB, srcAlpha, dstAlpha);
+}
+
+void glBufferData(GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage)
+{
+	GET_CONTEXT;
+	ctx->glBufferData( target, size, data, usage);
+}
+
+void glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data)
+{
+	GET_CONTEXT;
+	ctx->glBufferSubData( target, offset, size, data);
+}
+
+GLenum glCheckFramebufferStatus(GLenum target)
+{
+	GET_CONTEXT;
+	return ctx->glCheckFramebufferStatus( target);
+}
+
+void glClear(GLbitfield mask)
+{
+	GET_CONTEXT;
+	ctx->glClear( mask);
+}
+
+void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)
+{
+	GET_CONTEXT;
+	ctx->glClearColor( red, green, blue, alpha);
+}
+
+void glClearDepthf(GLclampf depth)
+{
+	GET_CONTEXT;
+	ctx->glClearDepthf( depth);
+}
+
+void glClearStencil(GLint s)
+{
+	GET_CONTEXT;
+	ctx->glClearStencil( s);
+}
+
+void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
+{
+	GET_CONTEXT;
+	ctx->glColorMask( red, green, blue, alpha);
+}
+
+void glCompileShader(GLuint shader)
+{
+	GET_CONTEXT;
+	ctx->glCompileShader( shader);
+}
+
+void glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data)
+{
+	GET_CONTEXT;
+	ctx->glCompressedTexImage2D( target, level, internalformat, width, height, border, imageSize, data);
+}
+
+void glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data)
+{
+	GET_CONTEXT;
+	ctx->glCompressedTexSubImage2D( target, level, xoffset, yoffset, width, height, format, imageSize, data);
+}
+
+void glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
+{
+	GET_CONTEXT;
+	ctx->glCopyTexImage2D( target, level, internalformat, x, y, width, height, border);
+}
+
+void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+{
+	GET_CONTEXT;
+	ctx->glCopyTexSubImage2D( target, level, xoffset, yoffset, x, y, width, height);
+}
+
+GLuint glCreateProgram()
+{
+	GET_CONTEXT;
+	return ctx->glCreateProgram();
+}
+
+GLuint glCreateShader(GLenum type)
+{
+	GET_CONTEXT;
+	return ctx->glCreateShader( type);
+}
+
+void glCullFace(GLenum mode)
+{
+	GET_CONTEXT;
+	ctx->glCullFace( mode);
+}
+
+void glDeleteBuffers(GLsizei n, const GLuint* buffers)
+{
+	GET_CONTEXT;
+	ctx->glDeleteBuffers( n, buffers);
+}
+
+void glDeleteFramebuffers(GLsizei n, const GLuint* framebuffers)
+{
+	GET_CONTEXT;
+	ctx->glDeleteFramebuffers( n, framebuffers);
+}
+
+void glDeleteProgram(GLuint program)
+{
+	GET_CONTEXT;
+	ctx->glDeleteProgram( program);
+}
+
+void glDeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers)
+{
+	GET_CONTEXT;
+	ctx->glDeleteRenderbuffers( n, renderbuffers);
+}
+
+void glDeleteShader(GLuint shader)
+{
+	GET_CONTEXT;
+	ctx->glDeleteShader( shader);
+}
+
+void glDeleteTextures(GLsizei n, const GLuint* textures)
+{
+	GET_CONTEXT;
+	ctx->glDeleteTextures( n, textures);
+}
+
+void glDepthFunc(GLenum func)
+{
+	GET_CONTEXT;
+	ctx->glDepthFunc( func);
+}
+
+void glDepthMask(GLboolean flag)
+{
+	GET_CONTEXT;
+	ctx->glDepthMask( flag);
+}
+
+void glDepthRangef(GLclampf zNear, GLclampf zFar)
+{
+	GET_CONTEXT;
+	ctx->glDepthRangef( zNear, zFar);
+}
+
+void glDetachShader(GLuint program, GLuint shader)
+{
+	GET_CONTEXT;
+	ctx->glDetachShader( program, shader);
+}
+
+void glDisable(GLenum cap)
+{
+	GET_CONTEXT;
+	ctx->glDisable( cap);
+}
+
+void glDisableVertexAttribArray(GLuint index)
+{
+	GET_CONTEXT;
+	ctx->glDisableVertexAttribArray( index);
+}
+
+void glDrawArrays(GLenum mode, GLint first, GLsizei count)
+{
+	GET_CONTEXT;
+	ctx->glDrawArrays( mode, first, count);
+}
+
+void glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices)
+{
+	GET_CONTEXT;
+	ctx->glDrawElements( mode, count, type, indices);
+}
+
+void glEnable(GLenum cap)
+{
+	GET_CONTEXT;
+	ctx->glEnable( cap);
+}
+
+void glEnableVertexAttribArray(GLuint index)
+{
+	GET_CONTEXT;
+	ctx->glEnableVertexAttribArray( index);
+}
+
+void glFinish()
+{
+	GET_CONTEXT;
+	ctx->glFinish();
+}
+
+void glFlush()
+{
+	GET_CONTEXT;
+	ctx->glFlush();
+}
+
+void glFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
+{
+	GET_CONTEXT;
+	ctx->glFramebufferRenderbuffer( target, attachment, renderbuffertarget, renderbuffer);
+}
+
+void glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
+{
+	GET_CONTEXT;
+	ctx->glFramebufferTexture2D( target, attachment, textarget, texture, level);
+}
+
+void glFrontFace(GLenum mode)
+{
+	GET_CONTEXT;
+	ctx->glFrontFace( mode);
+}
+
+void glGenBuffers(GLsizei n, GLuint* buffers)
+{
+	GET_CONTEXT;
+	ctx->glGenBuffers( n, buffers);
+}
+
+void glGenerateMipmap(GLenum target)
+{
+	GET_CONTEXT;
+	ctx->glGenerateMipmap( target);
+}
+
+void glGenFramebuffers(GLsizei n, GLuint* framebuffers)
+{
+	GET_CONTEXT;
+	ctx->glGenFramebuffers( n, framebuffers);
+}
+
+void glGenRenderbuffers(GLsizei n, GLuint* renderbuffers)
+{
+	GET_CONTEXT;
+	ctx->glGenRenderbuffers( n, renderbuffers);
+}
+
+void glGenTextures(GLsizei n, GLuint* textures)
+{
+	GET_CONTEXT;
+	ctx->glGenTextures( n, textures);
+}
+
+void glGetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name)
+{
+	GET_CONTEXT;
+	ctx->glGetActiveAttrib( program, index, bufsize, length, size, type, name);
+}
+
+void glGetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name)
+{
+	GET_CONTEXT;
+	ctx->glGetActiveUniform( program, index, bufsize, length, size, type, name);
+}
+
+void glGetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders)
+{
+	GET_CONTEXT;
+	ctx->glGetAttachedShaders( program, maxcount, count, shaders);
+}
+
+int glGetAttribLocation(GLuint program, const GLchar* name)
+{
+	GET_CONTEXT;
+	return ctx->glGetAttribLocation( program, name);
+}
+
+void glGetBooleanv(GLenum pname, GLboolean* params)
+{
+	GET_CONTEXT;
+	ctx->glGetBooleanv( pname, params);
+}
+
+void glGetBufferParameteriv(GLenum target, GLenum pname, GLint* params)
+{
+	GET_CONTEXT;
+	ctx->glGetBufferParameteriv( target, pname, params);
+}
+
+GLenum glGetError()
+{
+	GET_CONTEXT;
+	return ctx->glGetError();
+}
+
+void glGetFloatv(GLenum pname, GLfloat* params)
+{
+	GET_CONTEXT;
+	ctx->glGetFloatv( pname, params);
+}
+
+void glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint* params)
+{
+	GET_CONTEXT;
+	ctx->glGetFramebufferAttachmentParameteriv( target, attachment, pname, params);
+}
+
+void glGetIntegerv(GLenum pname, GLint* params)
+{
+	GET_CONTEXT;
+	ctx->glGetIntegerv( pname, params);
+}
+
+void glGetProgramiv(GLuint program, GLenum pname, GLint* params)
+{
+	GET_CONTEXT;
+	ctx->glGetProgramiv( program, pname, params);
+}
+
+void glGetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog)
+{
+	GET_CONTEXT;
+	ctx->glGetProgramInfoLog( program, bufsize, length, infolog);
+}
+
+void glGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* params)
+{
+	GET_CONTEXT;
+	ctx->glGetRenderbufferParameteriv( target, pname, params);
+}
+
+void glGetShaderiv(GLuint shader, GLenum pname, GLint* params)
+{
+	GET_CONTEXT;
+	ctx->glGetShaderiv( shader, pname, params);
+}
+
+void glGetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog)
+{
+	GET_CONTEXT;
+	ctx->glGetShaderInfoLog( shader, bufsize, length, infolog);
+}
+
+void glGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision)
+{
+	GET_CONTEXT;
+	ctx->glGetShaderPrecisionFormat( shadertype, precisiontype, range, precision);
+}
+
+void glGetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source)
+{
+	GET_CONTEXT;
+	ctx->glGetShaderSource( shader, bufsize, length, source);
+}
+
+const GLubyte* glGetString(GLenum name)
+{
+	GET_CONTEXT;
+	return ctx->glGetString( name);
+}
+
+void glGetTexParameterfv(GLenum target, GLenum pname, GLfloat* params)
+{
+	GET_CONTEXT;
+	ctx->glGetTexParameterfv( target, pname, params);
+}
+
+void glGetTexParameteriv(GLenum target, GLenum pname, GLint* params)
+{
+	GET_CONTEXT;
+	ctx->glGetTexParameteriv( target, pname, params);
+}
+
+void glGetUniformfv(GLuint program, GLint location, GLfloat* params)
+{
+	GET_CONTEXT;
+	ctx->glGetUniformfv( program, location, params);
+}
+
+void glGetUniformiv(GLuint program, GLint location, GLint* params)
+{
+	GET_CONTEXT;
+	ctx->glGetUniformiv( program, location, params);
+}
+
+int glGetUniformLocation(GLuint program, const GLchar* name)
+{
+	GET_CONTEXT;
+	return ctx->glGetUniformLocation( program, name);
+}
+
+void glGetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params)
+{
+	GET_CONTEXT;
+	ctx->glGetVertexAttribfv( index, pname, params);
+}
+
+void glGetVertexAttribiv(GLuint index, GLenum pname, GLint* params)
+{
+	GET_CONTEXT;
+	ctx->glGetVertexAttribiv( index, pname, params);
+}
+
+void glGetVertexAttribPointerv(GLuint index, GLenum pname, GLvoid** pointer)
+{
+	GET_CONTEXT;
+	ctx->glGetVertexAttribPointerv( index, pname, pointer);
+}
+
+void glHint(GLenum target, GLenum mode)
+{
+	GET_CONTEXT;
+	ctx->glHint( target, mode);
+}
+
+GLboolean glIsBuffer(GLuint buffer)
+{
+	GET_CONTEXT;
+	return ctx->glIsBuffer( buffer);
+}
+
+GLboolean glIsEnabled(GLenum cap)
+{
+	GET_CONTEXT;
+	return ctx->glIsEnabled( cap);
+}
+
+GLboolean glIsFramebuffer(GLuint framebuffer)
+{
+	GET_CONTEXT;
+	return ctx->glIsFramebuffer( framebuffer);
+}
+
+GLboolean glIsProgram(GLuint program)
+{
+	GET_CONTEXT;
+	return ctx->glIsProgram( program);
+}
+
+GLboolean glIsRenderbuffer(GLuint renderbuffer)
+{
+	GET_CONTEXT;
+	return ctx->glIsRenderbuffer( renderbuffer);
+}
+
+GLboolean glIsShader(GLuint shader)
+{
+	GET_CONTEXT;
+	return ctx->glIsShader( shader);
+}
+
+GLboolean glIsTexture(GLuint texture)
+{
+	GET_CONTEXT;
+	return ctx->glIsTexture( texture);
+}
+
+void glLineWidth(GLfloat width)
+{
+	GET_CONTEXT;
+	ctx->glLineWidth( width);
+}
+
+void glLinkProgram(GLuint program)
+{
+	GET_CONTEXT;
+	ctx->glLinkProgram( program);
+}
+
+void glPixelStorei(GLenum pname, GLint param)
+{
+	GET_CONTEXT;
+	ctx->glPixelStorei( pname, param);
+}
+
+void glPolygonOffset(GLfloat factor, GLfloat units)
+{
+	GET_CONTEXT;
+	ctx->glPolygonOffset( factor, units);
+}
+
+void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels)
+{
+	GET_CONTEXT;
+	ctx->glReadPixels( x, y, width, height, format, type, pixels);
+}
+
+void glReleaseShaderCompiler()
+{
+	GET_CONTEXT;
+	ctx->glReleaseShaderCompiler();
+}
+
+void glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
+{
+	GET_CONTEXT;
+	ctx->glRenderbufferStorage( target, internalformat, width, height);
+}
+
+void glSampleCoverage(GLclampf value, GLboolean invert)
+{
+	GET_CONTEXT;
+	ctx->glSampleCoverage( value, invert);
+}
+
+void glScissor(GLint x, GLint y, GLsizei width, GLsizei height)
+{
+	GET_CONTEXT;
+	ctx->glScissor( x, y, width, height);
+}
+
+void glShaderBinary(GLsizei n, const GLuint* shaders, GLenum binaryformat, const GLvoid* binary, GLsizei length)
+{
+	GET_CONTEXT;
+	ctx->glShaderBinary( n, shaders, binaryformat, binary, length);
+}
+
+void glShaderSource(GLuint shader, GLsizei count, const GLchar* const* string, const GLint* length)
+{
+	GET_CONTEXT;
+	ctx->glShaderSource( shader, count, string, length);
+}
+
+void glStencilFunc(GLenum func, GLint ref, GLuint mask)
+{
+	GET_CONTEXT;
+	ctx->glStencilFunc( func, ref, mask);
+}
+
+void glStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask)
+{
+	GET_CONTEXT;
+	ctx->glStencilFuncSeparate( face, func, ref, mask);
+}
+
+void glStencilMask(GLuint mask)
+{
+	GET_CONTEXT;
+	ctx->glStencilMask( mask);
+}
+
+void glStencilMaskSeparate(GLenum face, GLuint mask)
+{
+	GET_CONTEXT;
+	ctx->glStencilMaskSeparate( face, mask);
+}
+
+void glStencilOp(GLenum fail, GLenum zfail, GLenum zpass)
+{
+	GET_CONTEXT;
+	ctx->glStencilOp( fail, zfail, zpass);
+}
+
+void glStencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass)
+{
+	GET_CONTEXT;
+	ctx->glStencilOpSeparate( face, fail, zfail, zpass);
+}
+
+void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels)
+{
+	GET_CONTEXT;
+	ctx->glTexImage2D( target, level, internalformat, width, height, border, format, type, pixels);
+}
+
+void glTexParameterf(GLenum target, GLenum pname, GLfloat param)
+{
+	GET_CONTEXT;
+	ctx->glTexParameterf( target, pname, param);
+}
+
+void glTexParameterfv(GLenum target, GLenum pname, const GLfloat* params)
+{
+	GET_CONTEXT;
+	ctx->glTexParameterfv( target, pname, params);
+}
+
+void glTexParameteri(GLenum target, GLenum pname, GLint param)
+{
+	GET_CONTEXT;
+	ctx->glTexParameteri( target, pname, param);
+}
+
+void glTexParameteriv(GLenum target, GLenum pname, const GLint* params)
+{
+	GET_CONTEXT;
+	ctx->glTexParameteriv( target, pname, params);
+}
+
+void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels)
+{
+	GET_CONTEXT;
+	ctx->glTexSubImage2D( target, level, xoffset, yoffset, width, height, format, type, pixels);
+}
+
+void glUniform1f(GLint location, GLfloat x)
+{
+	GET_CONTEXT;
+	ctx->glUniform1f( location, x);
+}
+
+void glUniform1fv(GLint location, GLsizei count, const GLfloat* v)
+{
+	GET_CONTEXT;
+	ctx->glUniform1fv( location, count, v);
+}
+
+void glUniform1i(GLint location, GLint x)
+{
+	GET_CONTEXT;
+	ctx->glUniform1i( location, x);
+}
+
+void glUniform1iv(GLint location, GLsizei count, const GLint* v)
+{
+	GET_CONTEXT;
+	ctx->glUniform1iv( location, count, v);
+}
+
+void glUniform2f(GLint location, GLfloat x, GLfloat y)
+{
+	GET_CONTEXT;
+	ctx->glUniform2f( location, x, y);
+}
+
+void glUniform2fv(GLint location, GLsizei count, const GLfloat* v)
+{
+	GET_CONTEXT;
+	ctx->glUniform2fv( location, count, v);
+}
+
+void glUniform2i(GLint location, GLint x, GLint y)
+{
+	GET_CONTEXT;
+	ctx->glUniform2i( location, x, y);
+}
+
+void glUniform2iv(GLint location, GLsizei count, const GLint* v)
+{
+	GET_CONTEXT;
+	ctx->glUniform2iv( location, count, v);
+}
+
+void glUniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z)
+{
+	GET_CONTEXT;
+	ctx->glUniform3f( location, x, y, z);
+}
+
+void glUniform3fv(GLint location, GLsizei count, const GLfloat* v)
+{
+	GET_CONTEXT;
+	ctx->glUniform3fv( location, count, v);
+}
+
+void glUniform3i(GLint location, GLint x, GLint y, GLint z)
+{
+	GET_CONTEXT;
+	ctx->glUniform3i( location, x, y, z);
+}
+
+void glUniform3iv(GLint location, GLsizei count, const GLint* v)
+{
+	GET_CONTEXT;
+	ctx->glUniform3iv( location, count, v);
+}
+
+void glUniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+{
+	GET_CONTEXT;
+	ctx->glUniform4f( location, x, y, z, w);
+}
+
+void glUniform4fv(GLint location, GLsizei count, const GLfloat* v)
+{
+	GET_CONTEXT;
+	ctx->glUniform4fv( location, count, v);
+}
+
+void glUniform4i(GLint location, GLint x, GLint y, GLint z, GLint w)
+{
+	GET_CONTEXT;
+	ctx->glUniform4i( location, x, y, z, w);
+}
+
+void glUniform4iv(GLint location, GLsizei count, const GLint* v)
+{
+	GET_CONTEXT;
+	ctx->glUniform4iv( location, count, v);
+}
+
+void glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
+{
+	GET_CONTEXT;
+	ctx->glUniformMatrix2fv( location, count, transpose, value);
+}
+
+void glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
+{
+	GET_CONTEXT;
+	ctx->glUniformMatrix3fv( location, count, transpose, value);
+}
+
+void glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
+{
+	GET_CONTEXT;
+	ctx->glUniformMatrix4fv( location, count, transpose, value);
+}
+
+void glUseProgram(GLuint program)
+{
+	GET_CONTEXT;
+	ctx->glUseProgram( program);
+}
+
+void glValidateProgram(GLuint program)
+{
+	GET_CONTEXT;
+	ctx->glValidateProgram( program);
+}
+
+void glVertexAttrib1f(GLuint indx, GLfloat x)
+{
+	GET_CONTEXT;
+	ctx->glVertexAttrib1f( indx, x);
+}
+
+void glVertexAttrib1fv(GLuint indx, const GLfloat* values)
+{
+	GET_CONTEXT;
+	ctx->glVertexAttrib1fv( indx, values);
+}
+
+void glVertexAttrib2f(GLuint indx, GLfloat x, GLfloat y)
+{
+	GET_CONTEXT;
+	ctx->glVertexAttrib2f( indx, x, y);
+}
+
+void glVertexAttrib2fv(GLuint indx, const GLfloat* values)
+{
+	GET_CONTEXT;
+	ctx->glVertexAttrib2fv( indx, values);
+}
+
+void glVertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z)
+{
+	GET_CONTEXT;
+	ctx->glVertexAttrib3f( indx, x, y, z);
+}
+
+void glVertexAttrib3fv(GLuint indx, const GLfloat* values)
+{
+	GET_CONTEXT;
+	ctx->glVertexAttrib3fv( indx, values);
+}
+
+void glVertexAttrib4f(GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w)
+{
+	GET_CONTEXT;
+	ctx->glVertexAttrib4f( indx, x, y, z, w);
+}
+
+void glVertexAttrib4fv(GLuint indx, const GLfloat* values)
+{
+	GET_CONTEXT;
+	ctx->glVertexAttrib4fv( indx, values);
+}
+
+void glVertexAttribPointer(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr)
+{
+	GET_CONTEXT;
+	ctx->glVertexAttribPointer( indx, size, type, normalized, stride, ptr);
+}
+
+void glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
+{
+	GET_CONTEXT;
+	ctx->glViewport( x, y, width, height);
+}
+
+void glEGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image)
+{
+	GET_CONTEXT;
+	ctx->glEGLImageTargetTexture2DOES( target, image);
+}
+
+void glEGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImageOES image)
+{
+	GET_CONTEXT;
+	ctx->glEGLImageTargetRenderbufferStorageOES( target, image);
+}
+
+void glGetProgramBinaryOES(GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, GLvoid* binary)
+{
+	GET_CONTEXT;
+	ctx->glGetProgramBinaryOES( program, bufSize, length, binaryFormat, binary);
+}
+
+void glProgramBinaryOES(GLuint program, GLenum binaryFormat, const GLvoid* binary, GLint length)
+{
+	GET_CONTEXT;
+	ctx->glProgramBinaryOES( program, binaryFormat, binary, length);
+}
+
+void* glMapBufferOES(GLenum target, GLenum access)
+{
+	GET_CONTEXT;
+	return ctx->glMapBufferOES( target, access);
+}
+
+GLboolean glUnmapBufferOES(GLenum target)
+{
+	GET_CONTEXT;
+	return ctx->glUnmapBufferOES( target);
+}
+
+void glTexImage3DOES(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels)
+{
+	GET_CONTEXT;
+	ctx->glTexImage3DOES( target, level, internalformat, width, height, depth, border, format, type, pixels);
+}
+
+void glTexSubImage3DOES(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* pixels)
+{
+	GET_CONTEXT;
+	ctx->glTexSubImage3DOES( target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);
+}
+
+void glCopyTexSubImage3DOES(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+{
+	GET_CONTEXT;
+	ctx->glCopyTexSubImage3DOES( target, level, xoffset, yoffset, zoffset, x, y, width, height);
+}
+
+void glCompressedTexImage3DOES(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data)
+{
+	GET_CONTEXT;
+	ctx->glCompressedTexImage3DOES( target, level, internalformat, width, height, depth, border, imageSize, data);
+}
+
+void glCompressedTexSubImage3DOES(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data)
+{
+	GET_CONTEXT;
+	ctx->glCompressedTexSubImage3DOES( target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data);
+}
+
+void glFramebufferTexture3DOES(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset)
+{
+	GET_CONTEXT;
+	ctx->glFramebufferTexture3DOES( target, attachment, textarget, texture, level, zoffset);
+}
+
+void glBindVertexArrayOES(GLuint array)
+{
+	GET_CONTEXT;
+	ctx->glBindVertexArrayOES( array);
+}
+
+void glDeleteVertexArraysOES(GLsizei n, const GLuint* arrays)
+{
+	GET_CONTEXT;
+	ctx->glDeleteVertexArraysOES( n, arrays);
+}
+
+void glGenVertexArraysOES(GLsizei n, GLuint* arrays)
+{
+	GET_CONTEXT;
+	ctx->glGenVertexArraysOES( n, arrays);
+}
+
+GLboolean glIsVertexArrayOES(GLuint array)
+{
+	GET_CONTEXT;
+	return ctx->glIsVertexArrayOES( array);
+}
+
+void glDiscardFramebufferEXT(GLenum target, GLsizei numAttachments, const GLenum* attachments)
+{
+	GET_CONTEXT;
+	ctx->glDiscardFramebufferEXT( target, numAttachments, attachments);
+}
+
+void glMultiDrawArraysEXT(GLenum mode, const GLint* first, const GLsizei* count, GLsizei primcount)
+{
+	GET_CONTEXT;
+	ctx->glMultiDrawArraysEXT( mode, first, count, primcount);
+}
+
+void glMultiDrawElementsEXT(GLenum mode, const GLsizei* count, GLenum type, const GLvoid* const* indices, GLsizei primcount)
+{
+	GET_CONTEXT;
+	ctx->glMultiDrawElementsEXT( mode, count, type, indices, primcount);
+}
+
+void glGetPerfMonitorGroupsAMD(GLint* numGroups, GLsizei groupsSize, GLuint* groups)
+{
+	GET_CONTEXT;
+	ctx->glGetPerfMonitorGroupsAMD( numGroups, groupsSize, groups);
+}
+
+void glGetPerfMonitorCountersAMD(GLuint group, GLint* numCounters, GLint* maxActiveCounters, GLsizei counterSize, GLuint* counters)
+{
+	GET_CONTEXT;
+	ctx->glGetPerfMonitorCountersAMD( group, numCounters, maxActiveCounters, counterSize, counters);
+}
+
+void glGetPerfMonitorGroupStringAMD(GLuint group, GLsizei bufSize, GLsizei* length, GLchar* groupString)
+{
+	GET_CONTEXT;
+	ctx->glGetPerfMonitorGroupStringAMD( group, bufSize, length, groupString);
+}
+
+void glGetPerfMonitorCounterStringAMD(GLuint group, GLuint counter, GLsizei bufSize, GLsizei* length, GLchar* counterString)
+{
+	GET_CONTEXT;
+	ctx->glGetPerfMonitorCounterStringAMD( group, counter, bufSize, length, counterString);
+}
+
+void glGetPerfMonitorCounterInfoAMD(GLuint group, GLuint counter, GLenum pname, GLvoid* data)
+{
+	GET_CONTEXT;
+	ctx->glGetPerfMonitorCounterInfoAMD( group, counter, pname, data);
+}
+
+void glGenPerfMonitorsAMD(GLsizei n, GLuint* monitors)
+{
+	GET_CONTEXT;
+	ctx->glGenPerfMonitorsAMD( n, monitors);
+}
+
+void glDeletePerfMonitorsAMD(GLsizei n, GLuint* monitors)
+{
+	GET_CONTEXT;
+	ctx->glDeletePerfMonitorsAMD( n, monitors);
+}
+
+void glSelectPerfMonitorCountersAMD(GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint* countersList)
+{
+	GET_CONTEXT;
+	ctx->glSelectPerfMonitorCountersAMD( monitor, enable, group, numCounters, countersList);
+}
+
+void glBeginPerfMonitorAMD(GLuint monitor)
+{
+	GET_CONTEXT;
+	ctx->glBeginPerfMonitorAMD( monitor);
+}
+
+void glEndPerfMonitorAMD(GLuint monitor)
+{
+	GET_CONTEXT;
+	ctx->glEndPerfMonitorAMD( monitor);
+}
+
+void glGetPerfMonitorCounterDataAMD(GLuint monitor, GLenum pname, GLsizei dataSize, GLuint* data, GLint* bytesWritten)
+{
+	GET_CONTEXT;
+	ctx->glGetPerfMonitorCounterDataAMD( monitor, pname, dataSize, data, bytesWritten);
+}
+
+void glRenderbufferStorageMultisampleIMG(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
+{
+	GET_CONTEXT;
+	ctx->glRenderbufferStorageMultisampleIMG( target, samples, internalformat, width, height);
+}
+
+void glFramebufferTexture2DMultisampleIMG(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples)
+{
+	GET_CONTEXT;
+	ctx->glFramebufferTexture2DMultisampleIMG( target, attachment, textarget, texture, level, samples);
+}
+
+void glDeleteFencesNV(GLsizei n, const GLuint* fences)
+{
+	GET_CONTEXT;
+	ctx->glDeleteFencesNV( n, fences);
+}
+
+void glGenFencesNV(GLsizei n, GLuint* fences)
+{
+	GET_CONTEXT;
+	ctx->glGenFencesNV( n, fences);
+}
+
+GLboolean glIsFenceNV(GLuint fence)
+{
+	GET_CONTEXT;
+	return ctx->glIsFenceNV( fence);
+}
+
+GLboolean glTestFenceNV(GLuint fence)
+{
+	GET_CONTEXT;
+	return ctx->glTestFenceNV( fence);
+}
+
+void glGetFenceivNV(GLuint fence, GLenum pname, GLint* params)
+{
+	GET_CONTEXT;
+	ctx->glGetFenceivNV( fence, pname, params);
+}
+
+void glFinishFenceNV(GLuint fence)
+{
+	GET_CONTEXT;
+	ctx->glFinishFenceNV( fence);
+}
+
+void glSetFenceNV(GLuint fence, GLenum condition)
+{
+	GET_CONTEXT;
+	ctx->glSetFenceNV( fence, condition);
+}
+
+void glCoverageMaskNV(GLboolean mask)
+{
+	GET_CONTEXT;
+	ctx->glCoverageMaskNV( mask);
+}
+
+void glCoverageOperationNV(GLenum operation)
+{
+	GET_CONTEXT;
+	ctx->glCoverageOperationNV( operation);
+}
+
+void glGetDriverControlsQCOM(GLint* num, GLsizei size, GLuint* driverControls)
+{
+	GET_CONTEXT;
+	ctx->glGetDriverControlsQCOM( num, size, driverControls);
+}
+
+void glGetDriverControlStringQCOM(GLuint driverControl, GLsizei bufSize, GLsizei* length, GLchar* driverControlString)
+{
+	GET_CONTEXT;
+	ctx->glGetDriverControlStringQCOM( driverControl, bufSize, length, driverControlString);
+}
+
+void glEnableDriverControlQCOM(GLuint driverControl)
+{
+	GET_CONTEXT;
+	ctx->glEnableDriverControlQCOM( driverControl);
+}
+
+void glDisableDriverControlQCOM(GLuint driverControl)
+{
+	GET_CONTEXT;
+	ctx->glDisableDriverControlQCOM( driverControl);
+}
+
+void glExtGetTexturesQCOM(GLuint* textures, GLint maxTextures, GLint* numTextures)
+{
+	GET_CONTEXT;
+	ctx->glExtGetTexturesQCOM( textures, maxTextures, numTextures);
+}
+
+void glExtGetBuffersQCOM(GLuint* buffers, GLint maxBuffers, GLint* numBuffers)
+{
+	GET_CONTEXT;
+	ctx->glExtGetBuffersQCOM( buffers, maxBuffers, numBuffers);
+}
+
+void glExtGetRenderbuffersQCOM(GLuint* renderbuffers, GLint maxRenderbuffers, GLint* numRenderbuffers)
+{
+	GET_CONTEXT;
+	ctx->glExtGetRenderbuffersQCOM( renderbuffers, maxRenderbuffers, numRenderbuffers);
+}
+
+void glExtGetFramebuffersQCOM(GLuint* framebuffers, GLint maxFramebuffers, GLint* numFramebuffers)
+{
+	GET_CONTEXT;
+	ctx->glExtGetFramebuffersQCOM( framebuffers, maxFramebuffers, numFramebuffers);
+}
+
+void glExtGetTexLevelParameterivQCOM(GLuint texture, GLenum face, GLint level, GLenum pname, GLint* params)
+{
+	GET_CONTEXT;
+	ctx->glExtGetTexLevelParameterivQCOM( texture, face, level, pname, params);
+}
+
+void glExtTexObjectStateOverrideiQCOM(GLenum target, GLenum pname, GLint param)
+{
+	GET_CONTEXT;
+	ctx->glExtTexObjectStateOverrideiQCOM( target, pname, param);
+}
+
+void glExtGetTexSubImageQCOM(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid* texels)
+{
+	GET_CONTEXT;
+	ctx->glExtGetTexSubImageQCOM( target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, texels);
+}
+
+void glExtGetBufferPointervQCOM(GLenum target, GLvoidptr* params)
+{
+	GET_CONTEXT;
+	ctx->glExtGetBufferPointervQCOM( target, params);
+}
+
+void glExtGetShadersQCOM(GLuint* shaders, GLint maxShaders, GLint* numShaders)
+{
+	GET_CONTEXT;
+	ctx->glExtGetShadersQCOM( shaders, maxShaders, numShaders);
+}
+
+void glExtGetProgramsQCOM(GLuint* programs, GLint maxPrograms, GLint* numPrograms)
+{
+	GET_CONTEXT;
+	ctx->glExtGetProgramsQCOM( programs, maxPrograms, numPrograms);
+}
+
+GLboolean glExtIsProgramBinaryQCOM(GLuint program)
+{
+	GET_CONTEXT;
+	return ctx->glExtIsProgramBinaryQCOM( program);
+}
+
+void glExtGetProgramBinarySourceQCOM(GLuint program, GLenum shadertype, GLchar* source, GLint* length)
+{
+	GET_CONTEXT;
+	ctx->glExtGetProgramBinarySourceQCOM( program, shadertype, source, length);
+}
+
+void glStartTilingQCOM(GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask)
+{
+	GET_CONTEXT;
+	ctx->glStartTilingQCOM( x, y, width, height, preserveMask);
+}
+
+void glEndTilingQCOM(GLbitfield preserveMask)
+{
+	GET_CONTEXT;
+	ctx->glEndTilingQCOM( preserveMask);
+}
+
+void glVertexAttribPointerData(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, void* data, GLuint datalen)
+{
+	GET_CONTEXT;
+	ctx->glVertexAttribPointerData( indx, size, type, normalized, stride, data, datalen);
+}
+
+void glVertexAttribPointerOffset(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint offset)
+{
+	GET_CONTEXT;
+	ctx->glVertexAttribPointerOffset( indx, size, type, normalized, stride, offset);
+}
+
+void glDrawElementsOffset(GLenum mode, GLsizei count, GLenum type, GLuint offset)
+{
+	GET_CONTEXT;
+	ctx->glDrawElementsOffset( mode, count, type, offset);
+}
+
+void glDrawElementsData(GLenum mode, GLsizei count, GLenum type, void* data, GLuint datalen)
+{
+	GET_CONTEXT;
+	ctx->glDrawElementsData( mode, count, type, data, datalen);
+}
+
+void glGetCompressedTextureFormats(int count, GLint* formats)
+{
+	GET_CONTEXT;
+	ctx->glGetCompressedTextureFormats( count, formats);
+}
+
+void glShaderString(GLuint shader, const GLchar* string, GLsizei len)
+{
+	GET_CONTEXT;
+	ctx->glShaderString( shader, string, len);
+}
+
+int glFinishRoundTrip()
+{
+	GET_CONTEXT;
+	return ctx->glFinishRoundTrip();
+}
+
+void glGenVertexArrays(GLsizei n, GLuint* arrays)
+{
+	GET_CONTEXT;
+	ctx->glGenVertexArrays( n, arrays);
+}
+
+void glBindVertexArray(GLuint array)
+{
+	GET_CONTEXT;
+	ctx->glBindVertexArray( array);
+}
+
+void glDeleteVertexArrays(GLsizei n, const GLuint* arrays)
+{
+	GET_CONTEXT;
+	ctx->glDeleteVertexArrays( n, arrays);
+}
+
+GLboolean glIsVertexArray(GLuint array)
+{
+	GET_CONTEXT;
+	return ctx->glIsVertexArray( array);
+}
+
+void* glMapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access)
+{
+	GET_CONTEXT;
+	return ctx->glMapBufferRange( target, offset, length, access);
+}
+
+GLboolean glUnmapBuffer(GLenum target)
+{
+	GET_CONTEXT;
+	return ctx->glUnmapBuffer( target);
+}
+
+void glFlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length)
+{
+	GET_CONTEXT;
+	ctx->glFlushMappedBufferRange( target, offset, length);
+}
+
+void glMapBufferRangeAEMU(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access, void* mapped)
+{
+	GET_CONTEXT;
+	ctx->glMapBufferRangeAEMU( target, offset, length, access, mapped);
+}
+
+void glUnmapBufferAEMU(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access, void* guest_buffer, GLboolean* out_res)
+{
+	GET_CONTEXT;
+	ctx->glUnmapBufferAEMU( target, offset, length, access, guest_buffer, out_res);
+}
+
+void glFlushMappedBufferRangeAEMU(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access, void* guest_buffer)
+{
+	GET_CONTEXT;
+	ctx->glFlushMappedBufferRangeAEMU( target, offset, length, access, guest_buffer);
+}
+
+void glReadPixelsOffsetAEMU(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLuint offset)
+{
+	GET_CONTEXT;
+	ctx->glReadPixelsOffsetAEMU( x, y, width, height, format, type, offset);
+}
+
+void glCompressedTexImage2DOffsetAEMU(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, GLuint offset)
+{
+	GET_CONTEXT;
+	ctx->glCompressedTexImage2DOffsetAEMU( target, level, internalformat, width, height, border, imageSize, offset);
+}
+
+void glCompressedTexSubImage2DOffsetAEMU(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, GLuint offset)
+{
+	GET_CONTEXT;
+	ctx->glCompressedTexSubImage2DOffsetAEMU( target, level, xoffset, yoffset, width, height, format, imageSize, offset);
+}
+
+void glTexImage2DOffsetAEMU(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, GLuint offset)
+{
+	GET_CONTEXT;
+	ctx->glTexImage2DOffsetAEMU( target, level, internalformat, width, height, border, format, type, offset);
+}
+
+void glTexSubImage2DOffsetAEMU(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLuint offset)
+{
+	GET_CONTEXT;
+	ctx->glTexSubImage2DOffsetAEMU( target, level, xoffset, yoffset, width, height, format, type, offset);
+}
+
+void glBindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size)
+{
+	GET_CONTEXT;
+	ctx->glBindBufferRange( target, index, buffer, offset, size);
+}
+
+void glBindBufferBase(GLenum target, GLuint index, GLuint buffer)
+{
+	GET_CONTEXT;
+	ctx->glBindBufferBase( target, index, buffer);
+}
+
+void glCopyBufferSubData(GLenum readtarget, GLenum writetarget, GLintptr readoffset, GLintptr writeoffset, GLsizeiptr size)
+{
+	GET_CONTEXT;
+	ctx->glCopyBufferSubData( readtarget, writetarget, readoffset, writeoffset, size);
+}
+
+void glClearBufferiv(GLenum buffer, GLint drawBuffer, const GLint* value)
+{
+	GET_CONTEXT;
+	ctx->glClearBufferiv( buffer, drawBuffer, value);
+}
+
+void glClearBufferuiv(GLenum buffer, GLint drawBuffer, const GLuint* value)
+{
+	GET_CONTEXT;
+	ctx->glClearBufferuiv( buffer, drawBuffer, value);
+}
+
+void glClearBufferfv(GLenum buffer, GLint drawBuffer, const GLfloat* value)
+{
+	GET_CONTEXT;
+	ctx->glClearBufferfv( buffer, drawBuffer, value);
+}
+
+void glClearBufferfi(GLenum buffer, GLint drawBuffer, GLfloat depth, GLint stencil)
+{
+	GET_CONTEXT;
+	ctx->glClearBufferfi( buffer, drawBuffer, depth, stencil);
+}
+
+void glGetBufferParameteri64v(GLenum target, GLenum value, GLint64* data)
+{
+	GET_CONTEXT;
+	ctx->glGetBufferParameteri64v( target, value, data);
+}
+
+void glGetBufferPointerv(GLenum target, GLenum pname, GLvoid** params)
+{
+	GET_CONTEXT;
+	ctx->glGetBufferPointerv( target, pname, params);
+}
+
+void glUniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding)
+{
+	GET_CONTEXT;
+	ctx->glUniformBlockBinding( program, uniformBlockIndex, uniformBlockBinding);
+}
+
+GLuint glGetUniformBlockIndex(GLuint program, const GLchar* uniformBlockName)
+{
+	GET_CONTEXT;
+	return ctx->glGetUniformBlockIndex( program, uniformBlockName);
+}
+
+void glGetUniformIndices(GLuint program, GLsizei uniformCount, const GLchar* const* uniformNames, GLuint* uniformIndices)
+{
+	GET_CONTEXT;
+	ctx->glGetUniformIndices( program, uniformCount, uniformNames, uniformIndices);
+}
+
+void glGetUniformIndicesAEMU(GLuint program, GLsizei uniformCount, const GLchar* packedUniformNames, GLsizei packedLen, GLuint* uniformIndices)
+{
+	GET_CONTEXT;
+	ctx->glGetUniformIndicesAEMU( program, uniformCount, packedUniformNames, packedLen, uniformIndices);
+}
+
+void glGetActiveUniformBlockiv(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params)
+{
+	GET_CONTEXT;
+	ctx->glGetActiveUniformBlockiv( program, uniformBlockIndex, pname, params);
+}
+
+void glGetActiveUniformBlockName(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName)
+{
+	GET_CONTEXT;
+	ctx->glGetActiveUniformBlockName( program, uniformBlockIndex, bufSize, length, uniformBlockName);
+}
+
+void glUniform1ui(GLint location, GLuint v0)
+{
+	GET_CONTEXT;
+	ctx->glUniform1ui( location, v0);
+}
+
+void glUniform2ui(GLint location, GLuint v0, GLuint v1)
+{
+	GET_CONTEXT;
+	ctx->glUniform2ui( location, v0, v1);
+}
+
+void glUniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2)
+{
+	GET_CONTEXT;
+	ctx->glUniform3ui( location, v0, v1, v2);
+}
+
+void glUniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
+{
+	GET_CONTEXT;
+	ctx->glUniform4ui( location, v0, v1, v2, v3);
+}
+
+void glUniform1uiv(GLint location, GLsizei count, const GLuint* value)
+{
+	GET_CONTEXT;
+	ctx->glUniform1uiv( location, count, value);
+}
+
+void glUniform2uiv(GLint location, GLsizei count, const GLuint* value)
+{
+	GET_CONTEXT;
+	ctx->glUniform2uiv( location, count, value);
+}
+
+void glUniform3uiv(GLint location, GLsizei count, const GLuint* value)
+{
+	GET_CONTEXT;
+	ctx->glUniform3uiv( location, count, value);
+}
+
+void glUniform4uiv(GLint location, GLsizei count, const GLuint* value)
+{
+	GET_CONTEXT;
+	ctx->glUniform4uiv( location, count, value);
+}
+
+void glUniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
+{
+	GET_CONTEXT;
+	ctx->glUniformMatrix2x3fv( location, count, transpose, value);
+}
+
+void glUniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
+{
+	GET_CONTEXT;
+	ctx->glUniformMatrix3x2fv( location, count, transpose, value);
+}
+
+void glUniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
+{
+	GET_CONTEXT;
+	ctx->glUniformMatrix2x4fv( location, count, transpose, value);
+}
+
+void glUniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
+{
+	GET_CONTEXT;
+	ctx->glUniformMatrix4x2fv( location, count, transpose, value);
+}
+
+void glUniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
+{
+	GET_CONTEXT;
+	ctx->glUniformMatrix3x4fv( location, count, transpose, value);
+}
+
+void glUniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
+{
+	GET_CONTEXT;
+	ctx->glUniformMatrix4x3fv( location, count, transpose, value);
+}
+
+void glGetUniformuiv(GLuint program, GLint location, GLuint* params)
+{
+	GET_CONTEXT;
+	ctx->glGetUniformuiv( program, location, params);
+}
+
+void glGetActiveUniformsiv(GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params)
+{
+	GET_CONTEXT;
+	ctx->glGetActiveUniformsiv( program, uniformCount, uniformIndices, pname, params);
+}
+
+void glVertexAttribI4i(GLuint index, GLint v0, GLint v1, GLint v2, GLint v3)
+{
+	GET_CONTEXT;
+	ctx->glVertexAttribI4i( index, v0, v1, v2, v3);
+}
+
+void glVertexAttribI4ui(GLuint index, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
+{
+	GET_CONTEXT;
+	ctx->glVertexAttribI4ui( index, v0, v1, v2, v3);
+}
+
+void glVertexAttribI4iv(GLuint index, const GLint* v)
+{
+	GET_CONTEXT;
+	ctx->glVertexAttribI4iv( index, v);
+}
+
+void glVertexAttribI4uiv(GLuint index, const GLuint* v)
+{
+	GET_CONTEXT;
+	ctx->glVertexAttribI4uiv( index, v);
+}
+
+void glVertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid* pointer)
+{
+	GET_CONTEXT;
+	ctx->glVertexAttribIPointer( index, size, type, stride, pointer);
+}
+
+void glVertexAttribIPointerOffsetAEMU(GLuint index, GLint size, GLenum type, GLsizei stride, GLuint offset)
+{
+	GET_CONTEXT;
+	ctx->glVertexAttribIPointerOffsetAEMU( index, size, type, stride, offset);
+}
+
+void glVertexAttribIPointerDataAEMU(GLuint index, GLint size, GLenum type, GLsizei stride, void* data, GLuint datalen)
+{
+	GET_CONTEXT;
+	ctx->glVertexAttribIPointerDataAEMU( index, size, type, stride, data, datalen);
+}
+
+void glGetVertexAttribIiv(GLuint index, GLenum pname, GLint* params)
+{
+	GET_CONTEXT;
+	ctx->glGetVertexAttribIiv( index, pname, params);
+}
+
+void glGetVertexAttribIuiv(GLuint index, GLenum pname, GLuint* params)
+{
+	GET_CONTEXT;
+	ctx->glGetVertexAttribIuiv( index, pname, params);
+}
+
+void glVertexAttribDivisor(GLuint index, GLuint divisor)
+{
+	GET_CONTEXT;
+	ctx->glVertexAttribDivisor( index, divisor);
+}
+
+void glDrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei primcount)
+{
+	GET_CONTEXT;
+	ctx->glDrawArraysInstanced( mode, first, count, primcount);
+}
+
+void glDrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, const void* indices, GLsizei primcount)
+{
+	GET_CONTEXT;
+	ctx->glDrawElementsInstanced( mode, count, type, indices, primcount);
+}
+
+void glDrawElementsInstancedDataAEMU(GLenum mode, GLsizei count, GLenum type, const void* indices, GLsizei primcount, GLsizei datalen)
+{
+	GET_CONTEXT;
+	ctx->glDrawElementsInstancedDataAEMU( mode, count, type, indices, primcount, datalen);
+}
+
+void glDrawElementsInstancedOffsetAEMU(GLenum mode, GLsizei count, GLenum type, GLuint offset, GLsizei primcount)
+{
+	GET_CONTEXT;
+	ctx->glDrawElementsInstancedOffsetAEMU( mode, count, type, offset, primcount);
+}
+
+void glDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid* indices)
+{
+	GET_CONTEXT;
+	ctx->glDrawRangeElements( mode, start, end, count, type, indices);
+}
+
+void glDrawRangeElementsDataAEMU(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid* indices, GLsizei datalen)
+{
+	GET_CONTEXT;
+	ctx->glDrawRangeElementsDataAEMU( mode, start, end, count, type, indices, datalen);
+}
+
+void glDrawRangeElementsOffsetAEMU(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, GLuint offset)
+{
+	GET_CONTEXT;
+	ctx->glDrawRangeElementsOffsetAEMU( mode, start, end, count, type, offset);
+}
+
+GLsync glFenceSync(GLenum condition, GLbitfield flags)
+{
+	GET_CONTEXT;
+	return ctx->glFenceSync( condition, flags);
+}
+
+GLenum glClientWaitSync(GLsync wait_on, GLbitfield flags, GLuint64 timeout)
+{
+	GET_CONTEXT;
+	return ctx->glClientWaitSync( wait_on, flags, timeout);
+}
+
+void glWaitSync(GLsync wait_on, GLbitfield flags, GLuint64 timeout)
+{
+	GET_CONTEXT;
+	ctx->glWaitSync( wait_on, flags, timeout);
+}
+
+void glDeleteSync(GLsync to_delete)
+{
+	GET_CONTEXT;
+	ctx->glDeleteSync( to_delete);
+}
+
+GLboolean glIsSync(GLsync sync)
+{
+	GET_CONTEXT;
+	return ctx->glIsSync( sync);
+}
+
+void glGetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values)
+{
+	GET_CONTEXT;
+	ctx->glGetSynciv( sync, pname, bufSize, length, values);
+}
+
+uint64_t glFenceSyncAEMU(GLenum condition, GLbitfield flags)
+{
+	GET_CONTEXT;
+	return ctx->glFenceSyncAEMU( condition, flags);
+}
+
+GLenum glClientWaitSyncAEMU(uint64_t wait_on, GLbitfield flags, GLuint64 timeout)
+{
+	GET_CONTEXT;
+	return ctx->glClientWaitSyncAEMU( wait_on, flags, timeout);
+}
+
+void glWaitSyncAEMU(uint64_t wait_on, GLbitfield flags, GLuint64 timeout)
+{
+	GET_CONTEXT;
+	ctx->glWaitSyncAEMU( wait_on, flags, timeout);
+}
+
+void glDeleteSyncAEMU(uint64_t to_delete)
+{
+	GET_CONTEXT;
+	ctx->glDeleteSyncAEMU( to_delete);
+}
+
+GLboolean glIsSyncAEMU(uint64_t sync)
+{
+	GET_CONTEXT;
+	return ctx->glIsSyncAEMU( sync);
+}
+
+void glGetSyncivAEMU(uint64_t sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values)
+{
+	GET_CONTEXT;
+	ctx->glGetSyncivAEMU( sync, pname, bufSize, length, values);
+}
+
+void glDrawBuffers(GLsizei n, const GLenum* bufs)
+{
+	GET_CONTEXT;
+	ctx->glDrawBuffers( n, bufs);
+}
+
+void glReadBuffer(GLenum src)
+{
+	GET_CONTEXT;
+	ctx->glReadBuffer( src);
+}
+
+void glBlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)
+{
+	GET_CONTEXT;
+	ctx->glBlitFramebuffer( srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
+}
+
+void glInvalidateFramebuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments)
+{
+	GET_CONTEXT;
+	ctx->glInvalidateFramebuffer( target, numAttachments, attachments);
+}
+
+void glInvalidateSubFramebuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments, GLint x, GLint y, GLsizei width, GLsizei height)
+{
+	GET_CONTEXT;
+	ctx->glInvalidateSubFramebuffer( target, numAttachments, attachments, x, y, width, height);
+}
+
+void glFramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer)
+{
+	GET_CONTEXT;
+	ctx->glFramebufferTextureLayer( target, attachment, texture, level, layer);
+}
+
+void glRenderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)
+{
+	GET_CONTEXT;
+	ctx->glRenderbufferStorageMultisample( target, samples, internalformat, width, height);
+}
+
+void glTexStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)
+{
+	GET_CONTEXT;
+	ctx->glTexStorage2D( target, levels, internalformat, width, height);
+}
+
+void glGetInternalformativ(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint* params)
+{
+	GET_CONTEXT;
+	ctx->glGetInternalformativ( target, internalformat, pname, bufSize, params);
+}
+
+void glBeginTransformFeedback(GLenum primitiveMode)
+{
+	GET_CONTEXT;
+	ctx->glBeginTransformFeedback( primitiveMode);
+}
+
+void glEndTransformFeedback()
+{
+	GET_CONTEXT;
+	ctx->glEndTransformFeedback();
+}
+
+void glGenTransformFeedbacks(GLsizei n, GLuint* ids)
+{
+	GET_CONTEXT;
+	ctx->glGenTransformFeedbacks( n, ids);
+}
+
+void glDeleteTransformFeedbacks(GLsizei n, const GLuint* ids)
+{
+	GET_CONTEXT;
+	ctx->glDeleteTransformFeedbacks( n, ids);
+}
+
+void glBindTransformFeedback(GLenum target, GLuint id)
+{
+	GET_CONTEXT;
+	ctx->glBindTransformFeedback( target, id);
+}
+
+void glPauseTransformFeedback()
+{
+	GET_CONTEXT;
+	ctx->glPauseTransformFeedback();
+}
+
+void glResumeTransformFeedback()
+{
+	GET_CONTEXT;
+	ctx->glResumeTransformFeedback();
+}
+
+GLboolean glIsTransformFeedback(GLuint id)
+{
+	GET_CONTEXT;
+	return ctx->glIsTransformFeedback( id);
+}
+
+void glTransformFeedbackVaryings(GLuint program, GLsizei count, const GLchar* const* varyings, GLenum bufferMode)
+{
+	GET_CONTEXT;
+	ctx->glTransformFeedbackVaryings( program, count, varyings, bufferMode);
+}
+
+void glTransformFeedbackVaryingsAEMU(GLuint program, GLsizei count, const char* packedVaryings, GLuint packedVaryingsLen, GLenum bufferMode)
+{
+	GET_CONTEXT;
+	ctx->glTransformFeedbackVaryingsAEMU( program, count, packedVaryings, packedVaryingsLen, bufferMode);
+}
+
+void glGetTransformFeedbackVarying(GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* type, char* name)
+{
+	GET_CONTEXT;
+	ctx->glGetTransformFeedbackVarying( program, index, bufSize, length, size, type, name);
+}
+
+void glGenSamplers(GLsizei n, GLuint* samplers)
+{
+	GET_CONTEXT;
+	ctx->glGenSamplers( n, samplers);
+}
+
+void glDeleteSamplers(GLsizei n, const GLuint* samplers)
+{
+	GET_CONTEXT;
+	ctx->glDeleteSamplers( n, samplers);
+}
+
+void glBindSampler(GLuint unit, GLuint sampler)
+{
+	GET_CONTEXT;
+	ctx->glBindSampler( unit, sampler);
+}
+
+void glSamplerParameterf(GLuint sampler, GLenum pname, GLfloat param)
+{
+	GET_CONTEXT;
+	ctx->glSamplerParameterf( sampler, pname, param);
+}
+
+void glSamplerParameteri(GLuint sampler, GLenum pname, GLint param)
+{
+	GET_CONTEXT;
+	ctx->glSamplerParameteri( sampler, pname, param);
+}
+
+void glSamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat* params)
+{
+	GET_CONTEXT;
+	ctx->glSamplerParameterfv( sampler, pname, params);
+}
+
+void glSamplerParameteriv(GLuint sampler, GLenum pname, const GLint* params)
+{
+	GET_CONTEXT;
+	ctx->glSamplerParameteriv( sampler, pname, params);
+}
+
+void glGetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat* params)
+{
+	GET_CONTEXT;
+	ctx->glGetSamplerParameterfv( sampler, pname, params);
+}
+
+void glGetSamplerParameteriv(GLuint sampler, GLenum pname, GLint* params)
+{
+	GET_CONTEXT;
+	ctx->glGetSamplerParameteriv( sampler, pname, params);
+}
+
+GLboolean glIsSampler(GLuint sampler)
+{
+	GET_CONTEXT;
+	return ctx->glIsSampler( sampler);
+}
+
+void glGenQueries(GLsizei n, GLuint* queries)
+{
+	GET_CONTEXT;
+	ctx->glGenQueries( n, queries);
+}
+
+void glDeleteQueries(GLsizei n, const GLuint* queries)
+{
+	GET_CONTEXT;
+	ctx->glDeleteQueries( n, queries);
+}
+
+void glBeginQuery(GLenum target, GLuint query)
+{
+	GET_CONTEXT;
+	ctx->glBeginQuery( target, query);
+}
+
+void glEndQuery(GLenum target)
+{
+	GET_CONTEXT;
+	ctx->glEndQuery( target);
+}
+
+void glGetQueryiv(GLenum target, GLenum pname, GLint* params)
+{
+	GET_CONTEXT;
+	ctx->glGetQueryiv( target, pname, params);
+}
+
+void glGetQueryObjectuiv(GLuint query, GLenum pname, GLuint* params)
+{
+	GET_CONTEXT;
+	ctx->glGetQueryObjectuiv( query, pname, params);
+}
+
+GLboolean glIsQuery(GLuint query)
+{
+	GET_CONTEXT;
+	return ctx->glIsQuery( query);
+}
+
+void glProgramParameteri(GLuint program, GLenum pname, GLint value)
+{
+	GET_CONTEXT;
+	ctx->glProgramParameteri( program, pname, value);
+}
+
+void glProgramBinary(GLuint program, GLenum binaryFormat, const void* binary, GLsizei length)
+{
+	GET_CONTEXT;
+	ctx->glProgramBinary( program, binaryFormat, binary, length);
+}
+
+void glGetProgramBinary(GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, void* binary)
+{
+	GET_CONTEXT;
+	ctx->glGetProgramBinary( program, bufSize, length, binaryFormat, binary);
+}
+
+GLint glGetFragDataLocation(GLuint program, const char* name)
+{
+	GET_CONTEXT;
+	return ctx->glGetFragDataLocation( program, name);
+}
+
+void glGetInteger64v(GLenum pname, GLint64* data)
+{
+	GET_CONTEXT;
+	ctx->glGetInteger64v( pname, data);
+}
+
+void glGetIntegeri_v(GLenum target, GLuint index, GLint* data)
+{
+	GET_CONTEXT;
+	ctx->glGetIntegeri_v( target, index, data);
+}
+
+void glGetInteger64i_v(GLenum target, GLuint index, GLint64* data)
+{
+	GET_CONTEXT;
+	ctx->glGetInteger64i_v( target, index, data);
+}
+
+void glTexImage3D(GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* data)
+{
+	GET_CONTEXT;
+	ctx->glTexImage3D( target, level, internalFormat, width, height, depth, border, format, type, data);
+}
+
+void glTexImage3DOffsetAEMU(GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, GLuint offset)
+{
+	GET_CONTEXT;
+	ctx->glTexImage3DOffsetAEMU( target, level, internalFormat, width, height, depth, border, format, type, offset);
+}
+
+void glTexStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth)
+{
+	GET_CONTEXT;
+	ctx->glTexStorage3D( target, levels, internalformat, width, height, depth);
+}
+
+void glTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* data)
+{
+	GET_CONTEXT;
+	ctx->glTexSubImage3D( target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, data);
+}
+
+void glTexSubImage3DOffsetAEMU(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLuint offset)
+{
+	GET_CONTEXT;
+	ctx->glTexSubImage3DOffsetAEMU( target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, offset);
+}
+
+void glCompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data)
+{
+	GET_CONTEXT;
+	ctx->glCompressedTexImage3D( target, level, internalformat, width, height, depth, border, imageSize, data);
+}
+
+void glCompressedTexImage3DOffsetAEMU(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, GLuint offset)
+{
+	GET_CONTEXT;
+	ctx->glCompressedTexImage3DOffsetAEMU( target, level, internalformat, width, height, depth, border, imageSize, offset);
+}
+
+void glCompressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data)
+{
+	GET_CONTEXT;
+	ctx->glCompressedTexSubImage3D( target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data);
+}
+
+void glCompressedTexSubImage3DOffsetAEMU(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, GLuint data)
+{
+	GET_CONTEXT;
+	ctx->glCompressedTexSubImage3DOffsetAEMU( target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data);
+}
+
+void glCopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height)
+{
+	GET_CONTEXT;
+	ctx->glCopyTexSubImage3D( target, level, xoffset, yoffset, zoffset, x, y, width, height);
+}
+
+const GLubyte* glGetStringi(GLenum name, GLuint index)
+{
+	GET_CONTEXT;
+	return ctx->glGetStringi( name, index);
+}
+
+void glGetBooleani_v(GLenum target, GLuint index, GLboolean* data)
+{
+	GET_CONTEXT;
+	ctx->glGetBooleani_v( target, index, data);
+}
+
+void glMemoryBarrier(GLbitfield barriers)
+{
+	GET_CONTEXT;
+	ctx->glMemoryBarrier( barriers);
+}
+
+void glMemoryBarrierByRegion(GLbitfield barriers)
+{
+	GET_CONTEXT;
+	ctx->glMemoryBarrierByRegion( barriers);
+}
+
+void glGenProgramPipelines(GLsizei n, GLuint* pipelines)
+{
+	GET_CONTEXT;
+	ctx->glGenProgramPipelines( n, pipelines);
+}
+
+void glDeleteProgramPipelines(GLsizei n, const GLuint* pipelines)
+{
+	GET_CONTEXT;
+	ctx->glDeleteProgramPipelines( n, pipelines);
+}
+
+void glBindProgramPipeline(GLuint pipeline)
+{
+	GET_CONTEXT;
+	ctx->glBindProgramPipeline( pipeline);
+}
+
+void glGetProgramPipelineiv(GLuint pipeline, GLenum pname, GLint* params)
+{
+	GET_CONTEXT;
+	ctx->glGetProgramPipelineiv( pipeline, pname, params);
+}
+
+void glGetProgramPipelineInfoLog(GLuint pipeline, GLsizei bufSize, GLsizei* length, GLchar* infoLog)
+{
+	GET_CONTEXT;
+	ctx->glGetProgramPipelineInfoLog( pipeline, bufSize, length, infoLog);
+}
+
+void glValidateProgramPipeline(GLuint pipeline)
+{
+	GET_CONTEXT;
+	ctx->glValidateProgramPipeline( pipeline);
+}
+
+GLboolean glIsProgramPipeline(GLuint pipeline)
+{
+	GET_CONTEXT;
+	return ctx->glIsProgramPipeline( pipeline);
+}
+
+void glUseProgramStages(GLuint pipeline, GLbitfield stages, GLuint program)
+{
+	GET_CONTEXT;
+	ctx->glUseProgramStages( pipeline, stages, program);
+}
+
+void glActiveShaderProgram(GLuint pipeline, GLuint program)
+{
+	GET_CONTEXT;
+	ctx->glActiveShaderProgram( pipeline, program);
+}
+
+GLuint glCreateShaderProgramv(GLenum type, GLsizei count, const char** strings)
+{
+	GET_CONTEXT;
+	return ctx->glCreateShaderProgramv( type, count, strings);
+}
+
+GLuint glCreateShaderProgramvAEMU(GLenum type, GLsizei count, const char* packedStrings, GLuint packedLen)
+{
+	GET_CONTEXT;
+	return ctx->glCreateShaderProgramvAEMU( type, count, packedStrings, packedLen);
+}
+
+void glProgramUniform1f(GLuint program, GLint location, GLfloat v0)
+{
+	GET_CONTEXT;
+	ctx->glProgramUniform1f( program, location, v0);
+}
+
+void glProgramUniform2f(GLuint program, GLint location, GLfloat v0, GLfloat v1)
+{
+	GET_CONTEXT;
+	ctx->glProgramUniform2f( program, location, v0, v1);
+}
+
+void glProgramUniform3f(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2)
+{
+	GET_CONTEXT;
+	ctx->glProgramUniform3f( program, location, v0, v1, v2);
+}
+
+void glProgramUniform4f(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3)
+{
+	GET_CONTEXT;
+	ctx->glProgramUniform4f( program, location, v0, v1, v2, v3);
+}
+
+void glProgramUniform1i(GLuint program, GLint location, GLint v0)
+{
+	GET_CONTEXT;
+	ctx->glProgramUniform1i( program, location, v0);
+}
+
+void glProgramUniform2i(GLuint program, GLint location, GLint v0, GLint v1)
+{
+	GET_CONTEXT;
+	ctx->glProgramUniform2i( program, location, v0, v1);
+}
+
+void glProgramUniform3i(GLuint program, GLint location, GLint v0, GLint v1, GLint v2)
+{
+	GET_CONTEXT;
+	ctx->glProgramUniform3i( program, location, v0, v1, v2);
+}
+
+void glProgramUniform4i(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3)
+{
+	GET_CONTEXT;
+	ctx->glProgramUniform4i( program, location, v0, v1, v2, v3);
+}
+
+void glProgramUniform1ui(GLuint program, GLint location, GLuint v0)
+{
+	GET_CONTEXT;
+	ctx->glProgramUniform1ui( program, location, v0);
+}
+
+void glProgramUniform2ui(GLuint program, GLint location, GLint v0, GLuint v1)
+{
+	GET_CONTEXT;
+	ctx->glProgramUniform2ui( program, location, v0, v1);
+}
+
+void glProgramUniform3ui(GLuint program, GLint location, GLint v0, GLint v1, GLuint v2)
+{
+	GET_CONTEXT;
+	ctx->glProgramUniform3ui( program, location, v0, v1, v2);
+}
+
+void glProgramUniform4ui(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLuint v3)
+{
+	GET_CONTEXT;
+	ctx->glProgramUniform4ui( program, location, v0, v1, v2, v3);
+}
+
+void glProgramUniform1fv(GLuint program, GLint location, GLsizei count, const GLfloat* value)
+{
+	GET_CONTEXT;
+	ctx->glProgramUniform1fv( program, location, count, value);
+}
+
+void glProgramUniform2fv(GLuint program, GLint location, GLsizei count, const GLfloat* value)
+{
+	GET_CONTEXT;
+	ctx->glProgramUniform2fv( program, location, count, value);
+}
+
+void glProgramUniform3fv(GLuint program, GLint location, GLsizei count, const GLfloat* value)
+{
+	GET_CONTEXT;
+	ctx->glProgramUniform3fv( program, location, count, value);
+}
+
+void glProgramUniform4fv(GLuint program, GLint location, GLsizei count, const GLfloat* value)
+{
+	GET_CONTEXT;
+	ctx->glProgramUniform4fv( program, location, count, value);
+}
+
+void glProgramUniform1iv(GLuint program, GLint location, GLsizei count, const GLint* value)
+{
+	GET_CONTEXT;
+	ctx->glProgramUniform1iv( program, location, count, value);
+}
+
+void glProgramUniform2iv(GLuint program, GLint location, GLsizei count, const GLint* value)
+{
+	GET_CONTEXT;
+	ctx->glProgramUniform2iv( program, location, count, value);
+}
+
+void glProgramUniform3iv(GLuint program, GLint location, GLsizei count, const GLint* value)
+{
+	GET_CONTEXT;
+	ctx->glProgramUniform3iv( program, location, count, value);
+}
+
+void glProgramUniform4iv(GLuint program, GLint location, GLsizei count, const GLint* value)
+{
+	GET_CONTEXT;
+	ctx->glProgramUniform4iv( program, location, count, value);
+}
+
+void glProgramUniform1uiv(GLuint program, GLint location, GLsizei count, const GLuint* value)
+{
+	GET_CONTEXT;
+	ctx->glProgramUniform1uiv( program, location, count, value);
+}
+
+void glProgramUniform2uiv(GLuint program, GLint location, GLsizei count, const GLuint* value)
+{
+	GET_CONTEXT;
+	ctx->glProgramUniform2uiv( program, location, count, value);
+}
+
+void glProgramUniform3uiv(GLuint program, GLint location, GLsizei count, const GLuint* value)
+{
+	GET_CONTEXT;
+	ctx->glProgramUniform3uiv( program, location, count, value);
+}
+
+void glProgramUniform4uiv(GLuint program, GLint location, GLsizei count, const GLuint* value)
+{
+	GET_CONTEXT;
+	ctx->glProgramUniform4uiv( program, location, count, value);
+}
+
+void glProgramUniformMatrix2fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
+{
+	GET_CONTEXT;
+	ctx->glProgramUniformMatrix2fv( program, location, count, transpose, value);
+}
+
+void glProgramUniformMatrix3fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
+{
+	GET_CONTEXT;
+	ctx->glProgramUniformMatrix3fv( program, location, count, transpose, value);
+}
+
+void glProgramUniformMatrix4fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
+{
+	GET_CONTEXT;
+	ctx->glProgramUniformMatrix4fv( program, location, count, transpose, value);
+}
+
+void glProgramUniformMatrix2x3fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
+{
+	GET_CONTEXT;
+	ctx->glProgramUniformMatrix2x3fv( program, location, count, transpose, value);
+}
+
+void glProgramUniformMatrix3x2fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
+{
+	GET_CONTEXT;
+	ctx->glProgramUniformMatrix3x2fv( program, location, count, transpose, value);
+}
+
+void glProgramUniformMatrix2x4fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
+{
+	GET_CONTEXT;
+	ctx->glProgramUniformMatrix2x4fv( program, location, count, transpose, value);
+}
+
+void glProgramUniformMatrix4x2fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
+{
+	GET_CONTEXT;
+	ctx->glProgramUniformMatrix4x2fv( program, location, count, transpose, value);
+}
+
+void glProgramUniformMatrix3x4fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
+{
+	GET_CONTEXT;
+	ctx->glProgramUniformMatrix3x4fv( program, location, count, transpose, value);
+}
+
+void glProgramUniformMatrix4x3fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)
+{
+	GET_CONTEXT;
+	ctx->glProgramUniformMatrix4x3fv( program, location, count, transpose, value);
+}
+
+void glGetProgramInterfaceiv(GLuint program, GLenum programInterface, GLenum pname, GLint* params)
+{
+	GET_CONTEXT;
+	ctx->glGetProgramInterfaceiv( program, programInterface, pname, params);
+}
+
+void glGetProgramResourceiv(GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum* props, GLsizei bufSize, GLsizei* length, GLint* params)
+{
+	GET_CONTEXT;
+	ctx->glGetProgramResourceiv( program, programInterface, index, propCount, props, bufSize, length, params);
+}
+
+GLuint glGetProgramResourceIndex(GLuint program, GLenum programInterface, const char* name)
+{
+	GET_CONTEXT;
+	return ctx->glGetProgramResourceIndex( program, programInterface, name);
+}
+
+GLint glGetProgramResourceLocation(GLuint program, GLenum programInterface, const char* name)
+{
+	GET_CONTEXT;
+	return ctx->glGetProgramResourceLocation( program, programInterface, name);
+}
+
+void glGetProgramResourceName(GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei* length, char* name)
+{
+	GET_CONTEXT;
+	ctx->glGetProgramResourceName( program, programInterface, index, bufSize, length, name);
+}
+
+void glBindImageTexture(GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format)
+{
+	GET_CONTEXT;
+	ctx->glBindImageTexture( unit, texture, level, layered, layer, access, format);
+}
+
+void glDispatchCompute(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z)
+{
+	GET_CONTEXT;
+	ctx->glDispatchCompute( num_groups_x, num_groups_y, num_groups_z);
+}
+
+void glDispatchComputeIndirect(GLintptr indirect)
+{
+	GET_CONTEXT;
+	ctx->glDispatchComputeIndirect( indirect);
+}
+
+void glBindVertexBuffer(GLuint bindingindex, GLuint buffer, GLintptr offset, GLintptr stride)
+{
+	GET_CONTEXT;
+	ctx->glBindVertexBuffer( bindingindex, buffer, offset, stride);
+}
+
+void glVertexAttribBinding(GLuint attribindex, GLuint bindingindex)
+{
+	GET_CONTEXT;
+	ctx->glVertexAttribBinding( attribindex, bindingindex);
+}
+
+void glVertexAttribFormat(GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset)
+{
+	GET_CONTEXT;
+	ctx->glVertexAttribFormat( attribindex, size, type, normalized, relativeoffset);
+}
+
+void glVertexAttribIFormat(GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset)
+{
+	GET_CONTEXT;
+	ctx->glVertexAttribIFormat( attribindex, size, type, relativeoffset);
+}
+
+void glVertexBindingDivisor(GLuint bindingindex, GLuint divisor)
+{
+	GET_CONTEXT;
+	ctx->glVertexBindingDivisor( bindingindex, divisor);
+}
+
+void glDrawArraysIndirect(GLenum mode, const void* indirect)
+{
+	GET_CONTEXT;
+	ctx->glDrawArraysIndirect( mode, indirect);
+}
+
+void glDrawArraysIndirectDataAEMU(GLenum mode, const void* indirect, GLuint datalen)
+{
+	GET_CONTEXT;
+	ctx->glDrawArraysIndirectDataAEMU( mode, indirect, datalen);
+}
+
+void glDrawArraysIndirectOffsetAEMU(GLenum mode, GLuint offset)
+{
+	GET_CONTEXT;
+	ctx->glDrawArraysIndirectOffsetAEMU( mode, offset);
+}
+
+void glDrawElementsIndirect(GLenum mode, GLenum type, const void* indirect)
+{
+	GET_CONTEXT;
+	ctx->glDrawElementsIndirect( mode, type, indirect);
+}
+
+void glDrawElementsIndirectDataAEMU(GLenum mode, GLenum type, const void* indirect, GLuint datalen)
+{
+	GET_CONTEXT;
+	ctx->glDrawElementsIndirectDataAEMU( mode, type, indirect, datalen);
+}
+
+void glDrawElementsIndirectOffsetAEMU(GLenum mode, GLenum type, GLuint offset)
+{
+	GET_CONTEXT;
+	ctx->glDrawElementsIndirectOffsetAEMU( mode, type, offset);
+}
+
+void glTexStorage2DMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations)
+{
+	GET_CONTEXT;
+	ctx->glTexStorage2DMultisample( target, samples, internalformat, width, height, fixedsamplelocations);
+}
+
+void glSampleMaski(GLuint maskNumber, GLbitfield mask)
+{
+	GET_CONTEXT;
+	ctx->glSampleMaski( maskNumber, mask);
+}
+
+void glGetMultisamplefv(GLenum pname, GLuint index, GLfloat* val)
+{
+	GET_CONTEXT;
+	ctx->glGetMultisamplefv( pname, index, val);
+}
+
+void glFramebufferParameteri(GLenum target, GLenum pname, GLint param)
+{
+	GET_CONTEXT;
+	ctx->glFramebufferParameteri( target, pname, param);
+}
+
+void glGetFramebufferParameteriv(GLenum target, GLenum pname, GLint* params)
+{
+	GET_CONTEXT;
+	ctx->glGetFramebufferParameteriv( target, pname, params);
+}
+
+void glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat* params)
+{
+	GET_CONTEXT;
+	ctx->glGetTexLevelParameterfv( target, level, pname, params);
+}
+
+void glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint* params)
+{
+	GET_CONTEXT;
+	ctx->glGetTexLevelParameteriv( target, level, pname, params);
+}
+
diff --git a/guest/libs/eglwrapper/gles3_wrapper_proc.h b/guest/libs/eglwrapper/gles3_wrapper_proc.h
new file mode 100644
index 0000000..546c29d
--- /dev/null
+++ b/guest/libs/eglwrapper/gles3_wrapper_proc.h
@@ -0,0 +1,425 @@
+// Generated Code - DO NOT EDIT !!
+// generated by 'emugen'
+#ifndef __gles3_wrapper_proc_t_h
+#define __gles3_wrapper_proc_t_h
+
+
+
+#include "gles3_types.h"
+#ifndef gles3_APIENTRY
+#define gles3_APIENTRY 
+#endif
+typedef void (gles3_APIENTRY *glActiveTexture_wrapper_proc_t) (GLenum);
+typedef void (gles3_APIENTRY *glAttachShader_wrapper_proc_t) (GLuint, GLuint);
+typedef void (gles3_APIENTRY *glBindAttribLocation_wrapper_proc_t) (GLuint, GLuint, const GLchar*);
+typedef void (gles3_APIENTRY *glBindBuffer_wrapper_proc_t) (GLenum, GLuint);
+typedef void (gles3_APIENTRY *glBindFramebuffer_wrapper_proc_t) (GLenum, GLuint);
+typedef void (gles3_APIENTRY *glBindRenderbuffer_wrapper_proc_t) (GLenum, GLuint);
+typedef void (gles3_APIENTRY *glBindTexture_wrapper_proc_t) (GLenum, GLuint);
+typedef void (gles3_APIENTRY *glBlendColor_wrapper_proc_t) (GLclampf, GLclampf, GLclampf, GLclampf);
+typedef void (gles3_APIENTRY *glBlendEquation_wrapper_proc_t) (GLenum);
+typedef void (gles3_APIENTRY *glBlendEquationSeparate_wrapper_proc_t) (GLenum, GLenum);
+typedef void (gles3_APIENTRY *glBlendFunc_wrapper_proc_t) (GLenum, GLenum);
+typedef void (gles3_APIENTRY *glBlendFuncSeparate_wrapper_proc_t) (GLenum, GLenum, GLenum, GLenum);
+typedef void (gles3_APIENTRY *glBufferData_wrapper_proc_t) (GLenum, GLsizeiptr, const GLvoid*, GLenum);
+typedef void (gles3_APIENTRY *glBufferSubData_wrapper_proc_t) (GLenum, GLintptr, GLsizeiptr, const GLvoid*);
+typedef GLenum (gles3_APIENTRY *glCheckFramebufferStatus_wrapper_proc_t) (GLenum);
+typedef void (gles3_APIENTRY *glClear_wrapper_proc_t) (GLbitfield);
+typedef void (gles3_APIENTRY *glClearColor_wrapper_proc_t) (GLclampf, GLclampf, GLclampf, GLclampf);
+typedef void (gles3_APIENTRY *glClearDepthf_wrapper_proc_t) (GLclampf);
+typedef void (gles3_APIENTRY *glClearStencil_wrapper_proc_t) (GLint);
+typedef void (gles3_APIENTRY *glColorMask_wrapper_proc_t) (GLboolean, GLboolean, GLboolean, GLboolean);
+typedef void (gles3_APIENTRY *glCompileShader_wrapper_proc_t) (GLuint);
+typedef void (gles3_APIENTRY *glCompressedTexImage2D_wrapper_proc_t) (GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const GLvoid*);
+typedef void (gles3_APIENTRY *glCompressedTexSubImage2D_wrapper_proc_t) (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid*);
+typedef void (gles3_APIENTRY *glCopyTexImage2D_wrapper_proc_t) (GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLsizei, GLint);
+typedef void (gles3_APIENTRY *glCopyTexSubImage2D_wrapper_proc_t) (GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei);
+typedef GLuint (gles3_APIENTRY *glCreateProgram_wrapper_proc_t) ();
+typedef GLuint (gles3_APIENTRY *glCreateShader_wrapper_proc_t) (GLenum);
+typedef void (gles3_APIENTRY *glCullFace_wrapper_proc_t) (GLenum);
+typedef void (gles3_APIENTRY *glDeleteBuffers_wrapper_proc_t) (GLsizei, const GLuint*);
+typedef void (gles3_APIENTRY *glDeleteFramebuffers_wrapper_proc_t) (GLsizei, const GLuint*);
+typedef void (gles3_APIENTRY *glDeleteProgram_wrapper_proc_t) (GLuint);
+typedef void (gles3_APIENTRY *glDeleteRenderbuffers_wrapper_proc_t) (GLsizei, const GLuint*);
+typedef void (gles3_APIENTRY *glDeleteShader_wrapper_proc_t) (GLuint);
+typedef void (gles3_APIENTRY *glDeleteTextures_wrapper_proc_t) (GLsizei, const GLuint*);
+typedef void (gles3_APIENTRY *glDepthFunc_wrapper_proc_t) (GLenum);
+typedef void (gles3_APIENTRY *glDepthMask_wrapper_proc_t) (GLboolean);
+typedef void (gles3_APIENTRY *glDepthRangef_wrapper_proc_t) (GLclampf, GLclampf);
+typedef void (gles3_APIENTRY *glDetachShader_wrapper_proc_t) (GLuint, GLuint);
+typedef void (gles3_APIENTRY *glDisable_wrapper_proc_t) (GLenum);
+typedef void (gles3_APIENTRY *glDisableVertexAttribArray_wrapper_proc_t) (GLuint);
+typedef void (gles3_APIENTRY *glDrawArrays_wrapper_proc_t) (GLenum, GLint, GLsizei);
+typedef void (gles3_APIENTRY *glDrawElements_wrapper_proc_t) (GLenum, GLsizei, GLenum, const GLvoid*);
+typedef void (gles3_APIENTRY *glEnable_wrapper_proc_t) (GLenum);
+typedef void (gles3_APIENTRY *glEnableVertexAttribArray_wrapper_proc_t) (GLuint);
+typedef void (gles3_APIENTRY *glFinish_wrapper_proc_t) ();
+typedef void (gles3_APIENTRY *glFlush_wrapper_proc_t) ();
+typedef void (gles3_APIENTRY *glFramebufferRenderbuffer_wrapper_proc_t) (GLenum, GLenum, GLenum, GLuint);
+typedef void (gles3_APIENTRY *glFramebufferTexture2D_wrapper_proc_t) (GLenum, GLenum, GLenum, GLuint, GLint);
+typedef void (gles3_APIENTRY *glFrontFace_wrapper_proc_t) (GLenum);
+typedef void (gles3_APIENTRY *glGenBuffers_wrapper_proc_t) (GLsizei, GLuint*);
+typedef void (gles3_APIENTRY *glGenerateMipmap_wrapper_proc_t) (GLenum);
+typedef void (gles3_APIENTRY *glGenFramebuffers_wrapper_proc_t) (GLsizei, GLuint*);
+typedef void (gles3_APIENTRY *glGenRenderbuffers_wrapper_proc_t) (GLsizei, GLuint*);
+typedef void (gles3_APIENTRY *glGenTextures_wrapper_proc_t) (GLsizei, GLuint*);
+typedef void (gles3_APIENTRY *glGetActiveAttrib_wrapper_proc_t) (GLuint, GLuint, GLsizei, GLsizei*, GLint*, GLenum*, GLchar*);
+typedef void (gles3_APIENTRY *glGetActiveUniform_wrapper_proc_t) (GLuint, GLuint, GLsizei, GLsizei*, GLint*, GLenum*, GLchar*);
+typedef void (gles3_APIENTRY *glGetAttachedShaders_wrapper_proc_t) (GLuint, GLsizei, GLsizei*, GLuint*);
+typedef int (gles3_APIENTRY *glGetAttribLocation_wrapper_proc_t) (GLuint, const GLchar*);
+typedef void (gles3_APIENTRY *glGetBooleanv_wrapper_proc_t) (GLenum, GLboolean*);
+typedef void (gles3_APIENTRY *glGetBufferParameteriv_wrapper_proc_t) (GLenum, GLenum, GLint*);
+typedef GLenum (gles3_APIENTRY *glGetError_wrapper_proc_t) ();
+typedef void (gles3_APIENTRY *glGetFloatv_wrapper_proc_t) (GLenum, GLfloat*);
+typedef void (gles3_APIENTRY *glGetFramebufferAttachmentParameteriv_wrapper_proc_t) (GLenum, GLenum, GLenum, GLint*);
+typedef void (gles3_APIENTRY *glGetIntegerv_wrapper_proc_t) (GLenum, GLint*);
+typedef void (gles3_APIENTRY *glGetProgramiv_wrapper_proc_t) (GLuint, GLenum, GLint*);
+typedef void (gles3_APIENTRY *glGetProgramInfoLog_wrapper_proc_t) (GLuint, GLsizei, GLsizei*, GLchar*);
+typedef void (gles3_APIENTRY *glGetRenderbufferParameteriv_wrapper_proc_t) (GLenum, GLenum, GLint*);
+typedef void (gles3_APIENTRY *glGetShaderiv_wrapper_proc_t) (GLuint, GLenum, GLint*);
+typedef void (gles3_APIENTRY *glGetShaderInfoLog_wrapper_proc_t) (GLuint, GLsizei, GLsizei*, GLchar*);
+typedef void (gles3_APIENTRY *glGetShaderPrecisionFormat_wrapper_proc_t) (GLenum, GLenum, GLint*, GLint*);
+typedef void (gles3_APIENTRY *glGetShaderSource_wrapper_proc_t) (GLuint, GLsizei, GLsizei*, GLchar*);
+typedef const GLubyte* (gles3_APIENTRY *glGetString_wrapper_proc_t) (GLenum);
+typedef void (gles3_APIENTRY *glGetTexParameterfv_wrapper_proc_t) (GLenum, GLenum, GLfloat*);
+typedef void (gles3_APIENTRY *glGetTexParameteriv_wrapper_proc_t) (GLenum, GLenum, GLint*);
+typedef void (gles3_APIENTRY *glGetUniformfv_wrapper_proc_t) (GLuint, GLint, GLfloat*);
+typedef void (gles3_APIENTRY *glGetUniformiv_wrapper_proc_t) (GLuint, GLint, GLint*);
+typedef int (gles3_APIENTRY *glGetUniformLocation_wrapper_proc_t) (GLuint, const GLchar*);
+typedef void (gles3_APIENTRY *glGetVertexAttribfv_wrapper_proc_t) (GLuint, GLenum, GLfloat*);
+typedef void (gles3_APIENTRY *glGetVertexAttribiv_wrapper_proc_t) (GLuint, GLenum, GLint*);
+typedef void (gles3_APIENTRY *glGetVertexAttribPointerv_wrapper_proc_t) (GLuint, GLenum, GLvoid**);
+typedef void (gles3_APIENTRY *glHint_wrapper_proc_t) (GLenum, GLenum);
+typedef GLboolean (gles3_APIENTRY *glIsBuffer_wrapper_proc_t) (GLuint);
+typedef GLboolean (gles3_APIENTRY *glIsEnabled_wrapper_proc_t) (GLenum);
+typedef GLboolean (gles3_APIENTRY *glIsFramebuffer_wrapper_proc_t) (GLuint);
+typedef GLboolean (gles3_APIENTRY *glIsProgram_wrapper_proc_t) (GLuint);
+typedef GLboolean (gles3_APIENTRY *glIsRenderbuffer_wrapper_proc_t) (GLuint);
+typedef GLboolean (gles3_APIENTRY *glIsShader_wrapper_proc_t) (GLuint);
+typedef GLboolean (gles3_APIENTRY *glIsTexture_wrapper_proc_t) (GLuint);
+typedef void (gles3_APIENTRY *glLineWidth_wrapper_proc_t) (GLfloat);
+typedef void (gles3_APIENTRY *glLinkProgram_wrapper_proc_t) (GLuint);
+typedef void (gles3_APIENTRY *glPixelStorei_wrapper_proc_t) (GLenum, GLint);
+typedef void (gles3_APIENTRY *glPolygonOffset_wrapper_proc_t) (GLfloat, GLfloat);
+typedef void (gles3_APIENTRY *glReadPixels_wrapper_proc_t) (GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, GLvoid*);
+typedef void (gles3_APIENTRY *glReleaseShaderCompiler_wrapper_proc_t) ();
+typedef void (gles3_APIENTRY *glRenderbufferStorage_wrapper_proc_t) (GLenum, GLenum, GLsizei, GLsizei);
+typedef void (gles3_APIENTRY *glSampleCoverage_wrapper_proc_t) (GLclampf, GLboolean);
+typedef void (gles3_APIENTRY *glScissor_wrapper_proc_t) (GLint, GLint, GLsizei, GLsizei);
+typedef void (gles3_APIENTRY *glShaderBinary_wrapper_proc_t) (GLsizei, const GLuint*, GLenum, const GLvoid*, GLsizei);
+typedef void (gles3_APIENTRY *glShaderSource_wrapper_proc_t) (GLuint, GLsizei, const GLchar* const*, const GLint*);
+typedef void (gles3_APIENTRY *glStencilFunc_wrapper_proc_t) (GLenum, GLint, GLuint);
+typedef void (gles3_APIENTRY *glStencilFuncSeparate_wrapper_proc_t) (GLenum, GLenum, GLint, GLuint);
+typedef void (gles3_APIENTRY *glStencilMask_wrapper_proc_t) (GLuint);
+typedef void (gles3_APIENTRY *glStencilMaskSeparate_wrapper_proc_t) (GLenum, GLuint);
+typedef void (gles3_APIENTRY *glStencilOp_wrapper_proc_t) (GLenum, GLenum, GLenum);
+typedef void (gles3_APIENTRY *glStencilOpSeparate_wrapper_proc_t) (GLenum, GLenum, GLenum, GLenum);
+typedef void (gles3_APIENTRY *glTexImage2D_wrapper_proc_t) (GLenum, GLint, GLint, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid*);
+typedef void (gles3_APIENTRY *glTexParameterf_wrapper_proc_t) (GLenum, GLenum, GLfloat);
+typedef void (gles3_APIENTRY *glTexParameterfv_wrapper_proc_t) (GLenum, GLenum, const GLfloat*);
+typedef void (gles3_APIENTRY *glTexParameteri_wrapper_proc_t) (GLenum, GLenum, GLint);
+typedef void (gles3_APIENTRY *glTexParameteriv_wrapper_proc_t) (GLenum, GLenum, const GLint*);
+typedef void (gles3_APIENTRY *glTexSubImage2D_wrapper_proc_t) (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, const GLvoid*);
+typedef void (gles3_APIENTRY *glUniform1f_wrapper_proc_t) (GLint, GLfloat);
+typedef void (gles3_APIENTRY *glUniform1fv_wrapper_proc_t) (GLint, GLsizei, const GLfloat*);
+typedef void (gles3_APIENTRY *glUniform1i_wrapper_proc_t) (GLint, GLint);
+typedef void (gles3_APIENTRY *glUniform1iv_wrapper_proc_t) (GLint, GLsizei, const GLint*);
+typedef void (gles3_APIENTRY *glUniform2f_wrapper_proc_t) (GLint, GLfloat, GLfloat);
+typedef void (gles3_APIENTRY *glUniform2fv_wrapper_proc_t) (GLint, GLsizei, const GLfloat*);
+typedef void (gles3_APIENTRY *glUniform2i_wrapper_proc_t) (GLint, GLint, GLint);
+typedef void (gles3_APIENTRY *glUniform2iv_wrapper_proc_t) (GLint, GLsizei, const GLint*);
+typedef void (gles3_APIENTRY *glUniform3f_wrapper_proc_t) (GLint, GLfloat, GLfloat, GLfloat);
+typedef void (gles3_APIENTRY *glUniform3fv_wrapper_proc_t) (GLint, GLsizei, const GLfloat*);
+typedef void (gles3_APIENTRY *glUniform3i_wrapper_proc_t) (GLint, GLint, GLint, GLint);
+typedef void (gles3_APIENTRY *glUniform3iv_wrapper_proc_t) (GLint, GLsizei, const GLint*);
+typedef void (gles3_APIENTRY *glUniform4f_wrapper_proc_t) (GLint, GLfloat, GLfloat, GLfloat, GLfloat);
+typedef void (gles3_APIENTRY *glUniform4fv_wrapper_proc_t) (GLint, GLsizei, const GLfloat*);
+typedef void (gles3_APIENTRY *glUniform4i_wrapper_proc_t) (GLint, GLint, GLint, GLint, GLint);
+typedef void (gles3_APIENTRY *glUniform4iv_wrapper_proc_t) (GLint, GLsizei, const GLint*);
+typedef void (gles3_APIENTRY *glUniformMatrix2fv_wrapper_proc_t) (GLint, GLsizei, GLboolean, const GLfloat*);
+typedef void (gles3_APIENTRY *glUniformMatrix3fv_wrapper_proc_t) (GLint, GLsizei, GLboolean, const GLfloat*);
+typedef void (gles3_APIENTRY *glUniformMatrix4fv_wrapper_proc_t) (GLint, GLsizei, GLboolean, const GLfloat*);
+typedef void (gles3_APIENTRY *glUseProgram_wrapper_proc_t) (GLuint);
+typedef void (gles3_APIENTRY *glValidateProgram_wrapper_proc_t) (GLuint);
+typedef void (gles3_APIENTRY *glVertexAttrib1f_wrapper_proc_t) (GLuint, GLfloat);
+typedef void (gles3_APIENTRY *glVertexAttrib1fv_wrapper_proc_t) (GLuint, const GLfloat*);
+typedef void (gles3_APIENTRY *glVertexAttrib2f_wrapper_proc_t) (GLuint, GLfloat, GLfloat);
+typedef void (gles3_APIENTRY *glVertexAttrib2fv_wrapper_proc_t) (GLuint, const GLfloat*);
+typedef void (gles3_APIENTRY *glVertexAttrib3f_wrapper_proc_t) (GLuint, GLfloat, GLfloat, GLfloat);
+typedef void (gles3_APIENTRY *glVertexAttrib3fv_wrapper_proc_t) (GLuint, const GLfloat*);
+typedef void (gles3_APIENTRY *glVertexAttrib4f_wrapper_proc_t) (GLuint, GLfloat, GLfloat, GLfloat, GLfloat);
+typedef void (gles3_APIENTRY *glVertexAttrib4fv_wrapper_proc_t) (GLuint, const GLfloat*);
+typedef void (gles3_APIENTRY *glVertexAttribPointer_wrapper_proc_t) (GLuint, GLint, GLenum, GLboolean, GLsizei, const GLvoid*);
+typedef void (gles3_APIENTRY *glViewport_wrapper_proc_t) (GLint, GLint, GLsizei, GLsizei);
+typedef void (gles3_APIENTRY *glEGLImageTargetTexture2DOES_wrapper_proc_t) (GLenum, GLeglImageOES);
+typedef void (gles3_APIENTRY *glEGLImageTargetRenderbufferStorageOES_wrapper_proc_t) (GLenum, GLeglImageOES);
+typedef void (gles3_APIENTRY *glGetProgramBinaryOES_wrapper_proc_t) (GLuint, GLsizei, GLsizei*, GLenum*, GLvoid*);
+typedef void (gles3_APIENTRY *glProgramBinaryOES_wrapper_proc_t) (GLuint, GLenum, const GLvoid*, GLint);
+typedef void* (gles3_APIENTRY *glMapBufferOES_wrapper_proc_t) (GLenum, GLenum);
+typedef GLboolean (gles3_APIENTRY *glUnmapBufferOES_wrapper_proc_t) (GLenum);
+typedef void (gles3_APIENTRY *glTexImage3DOES_wrapper_proc_t) (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid*);
+typedef void (gles3_APIENTRY *glTexSubImage3DOES_wrapper_proc_t) (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid*);
+typedef void (gles3_APIENTRY *glCopyTexSubImage3DOES_wrapper_proc_t) (GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei);
+typedef void (gles3_APIENTRY *glCompressedTexImage3DOES_wrapper_proc_t) (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, const GLvoid*);
+typedef void (gles3_APIENTRY *glCompressedTexSubImage3DOES_wrapper_proc_t) (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid*);
+typedef void (gles3_APIENTRY *glFramebufferTexture3DOES_wrapper_proc_t) (GLenum, GLenum, GLenum, GLuint, GLint, GLint);
+typedef void (gles3_APIENTRY *glBindVertexArrayOES_wrapper_proc_t) (GLuint);
+typedef void (gles3_APIENTRY *glDeleteVertexArraysOES_wrapper_proc_t) (GLsizei, const GLuint*);
+typedef void (gles3_APIENTRY *glGenVertexArraysOES_wrapper_proc_t) (GLsizei, GLuint*);
+typedef GLboolean (gles3_APIENTRY *glIsVertexArrayOES_wrapper_proc_t) (GLuint);
+typedef void (gles3_APIENTRY *glDiscardFramebufferEXT_wrapper_proc_t) (GLenum, GLsizei, const GLenum*);
+typedef void (gles3_APIENTRY *glMultiDrawArraysEXT_wrapper_proc_t) (GLenum, const GLint*, const GLsizei*, GLsizei);
+typedef void (gles3_APIENTRY *glMultiDrawElementsEXT_wrapper_proc_t) (GLenum, const GLsizei*, GLenum, const GLvoid* const*, GLsizei);
+typedef void (gles3_APIENTRY *glGetPerfMonitorGroupsAMD_wrapper_proc_t) (GLint*, GLsizei, GLuint*);
+typedef void (gles3_APIENTRY *glGetPerfMonitorCountersAMD_wrapper_proc_t) (GLuint, GLint*, GLint*, GLsizei, GLuint*);
+typedef void (gles3_APIENTRY *glGetPerfMonitorGroupStringAMD_wrapper_proc_t) (GLuint, GLsizei, GLsizei*, GLchar*);
+typedef void (gles3_APIENTRY *glGetPerfMonitorCounterStringAMD_wrapper_proc_t) (GLuint, GLuint, GLsizei, GLsizei*, GLchar*);
+typedef void (gles3_APIENTRY *glGetPerfMonitorCounterInfoAMD_wrapper_proc_t) (GLuint, GLuint, GLenum, GLvoid*);
+typedef void (gles3_APIENTRY *glGenPerfMonitorsAMD_wrapper_proc_t) (GLsizei, GLuint*);
+typedef void (gles3_APIENTRY *glDeletePerfMonitorsAMD_wrapper_proc_t) (GLsizei, GLuint*);
+typedef void (gles3_APIENTRY *glSelectPerfMonitorCountersAMD_wrapper_proc_t) (GLuint, GLboolean, GLuint, GLint, GLuint*);
+typedef void (gles3_APIENTRY *glBeginPerfMonitorAMD_wrapper_proc_t) (GLuint);
+typedef void (gles3_APIENTRY *glEndPerfMonitorAMD_wrapper_proc_t) (GLuint);
+typedef void (gles3_APIENTRY *glGetPerfMonitorCounterDataAMD_wrapper_proc_t) (GLuint, GLenum, GLsizei, GLuint*, GLint*);
+typedef void (gles3_APIENTRY *glRenderbufferStorageMultisampleIMG_wrapper_proc_t) (GLenum, GLsizei, GLenum, GLsizei, GLsizei);
+typedef void (gles3_APIENTRY *glFramebufferTexture2DMultisampleIMG_wrapper_proc_t) (GLenum, GLenum, GLenum, GLuint, GLint, GLsizei);
+typedef void (gles3_APIENTRY *glDeleteFencesNV_wrapper_proc_t) (GLsizei, const GLuint*);
+typedef void (gles3_APIENTRY *glGenFencesNV_wrapper_proc_t) (GLsizei, GLuint*);
+typedef GLboolean (gles3_APIENTRY *glIsFenceNV_wrapper_proc_t) (GLuint);
+typedef GLboolean (gles3_APIENTRY *glTestFenceNV_wrapper_proc_t) (GLuint);
+typedef void (gles3_APIENTRY *glGetFenceivNV_wrapper_proc_t) (GLuint, GLenum, GLint*);
+typedef void (gles3_APIENTRY *glFinishFenceNV_wrapper_proc_t) (GLuint);
+typedef void (gles3_APIENTRY *glSetFenceNV_wrapper_proc_t) (GLuint, GLenum);
+typedef void (gles3_APIENTRY *glCoverageMaskNV_wrapper_proc_t) (GLboolean);
+typedef void (gles3_APIENTRY *glCoverageOperationNV_wrapper_proc_t) (GLenum);
+typedef void (gles3_APIENTRY *glGetDriverControlsQCOM_wrapper_proc_t) (GLint*, GLsizei, GLuint*);
+typedef void (gles3_APIENTRY *glGetDriverControlStringQCOM_wrapper_proc_t) (GLuint, GLsizei, GLsizei*, GLchar*);
+typedef void (gles3_APIENTRY *glEnableDriverControlQCOM_wrapper_proc_t) (GLuint);
+typedef void (gles3_APIENTRY *glDisableDriverControlQCOM_wrapper_proc_t) (GLuint);
+typedef void (gles3_APIENTRY *glExtGetTexturesQCOM_wrapper_proc_t) (GLuint*, GLint, GLint*);
+typedef void (gles3_APIENTRY *glExtGetBuffersQCOM_wrapper_proc_t) (GLuint*, GLint, GLint*);
+typedef void (gles3_APIENTRY *glExtGetRenderbuffersQCOM_wrapper_proc_t) (GLuint*, GLint, GLint*);
+typedef void (gles3_APIENTRY *glExtGetFramebuffersQCOM_wrapper_proc_t) (GLuint*, GLint, GLint*);
+typedef void (gles3_APIENTRY *glExtGetTexLevelParameterivQCOM_wrapper_proc_t) (GLuint, GLenum, GLint, GLenum, GLint*);
+typedef void (gles3_APIENTRY *glExtTexObjectStateOverrideiQCOM_wrapper_proc_t) (GLenum, GLenum, GLint);
+typedef void (gles3_APIENTRY *glExtGetTexSubImageQCOM_wrapper_proc_t) (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, GLvoid*);
+typedef void (gles3_APIENTRY *glExtGetBufferPointervQCOM_wrapper_proc_t) (GLenum, GLvoidptr*);
+typedef void (gles3_APIENTRY *glExtGetShadersQCOM_wrapper_proc_t) (GLuint*, GLint, GLint*);
+typedef void (gles3_APIENTRY *glExtGetProgramsQCOM_wrapper_proc_t) (GLuint*, GLint, GLint*);
+typedef GLboolean (gles3_APIENTRY *glExtIsProgramBinaryQCOM_wrapper_proc_t) (GLuint);
+typedef void (gles3_APIENTRY *glExtGetProgramBinarySourceQCOM_wrapper_proc_t) (GLuint, GLenum, GLchar*, GLint*);
+typedef void (gles3_APIENTRY *glStartTilingQCOM_wrapper_proc_t) (GLuint, GLuint, GLuint, GLuint, GLbitfield);
+typedef void (gles3_APIENTRY *glEndTilingQCOM_wrapper_proc_t) (GLbitfield);
+typedef void (gles3_APIENTRY *glVertexAttribPointerData_wrapper_proc_t) (GLuint, GLint, GLenum, GLboolean, GLsizei, void*, GLuint);
+typedef void (gles3_APIENTRY *glVertexAttribPointerOffset_wrapper_proc_t) (GLuint, GLint, GLenum, GLboolean, GLsizei, GLuint);
+typedef void (gles3_APIENTRY *glDrawElementsOffset_wrapper_proc_t) (GLenum, GLsizei, GLenum, GLuint);
+typedef void (gles3_APIENTRY *glDrawElementsData_wrapper_proc_t) (GLenum, GLsizei, GLenum, void*, GLuint);
+typedef void (gles3_APIENTRY *glGetCompressedTextureFormats_wrapper_proc_t) (int, GLint*);
+typedef void (gles3_APIENTRY *glShaderString_wrapper_proc_t) (GLuint, const GLchar*, GLsizei);
+typedef int (gles3_APIENTRY *glFinishRoundTrip_wrapper_proc_t) ();
+typedef void (gles3_APIENTRY *glGenVertexArrays_wrapper_proc_t) (GLsizei, GLuint*);
+typedef void (gles3_APIENTRY *glBindVertexArray_wrapper_proc_t) (GLuint);
+typedef void (gles3_APIENTRY *glDeleteVertexArrays_wrapper_proc_t) (GLsizei, const GLuint*);
+typedef GLboolean (gles3_APIENTRY *glIsVertexArray_wrapper_proc_t) (GLuint);
+typedef void* (gles3_APIENTRY *glMapBufferRange_wrapper_proc_t) (GLenum, GLintptr, GLsizeiptr, GLbitfield);
+typedef GLboolean (gles3_APIENTRY *glUnmapBuffer_wrapper_proc_t) (GLenum);
+typedef void (gles3_APIENTRY *glFlushMappedBufferRange_wrapper_proc_t) (GLenum, GLintptr, GLsizeiptr);
+typedef void (gles3_APIENTRY *glMapBufferRangeAEMU_wrapper_proc_t) (GLenum, GLintptr, GLsizeiptr, GLbitfield, void*);
+typedef void (gles3_APIENTRY *glUnmapBufferAEMU_wrapper_proc_t) (GLenum, GLintptr, GLsizeiptr, GLbitfield, void*, GLboolean*);
+typedef void (gles3_APIENTRY *glFlushMappedBufferRangeAEMU_wrapper_proc_t) (GLenum, GLintptr, GLsizeiptr, GLbitfield, void*);
+typedef void (gles3_APIENTRY *glReadPixelsOffsetAEMU_wrapper_proc_t) (GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, GLuint);
+typedef void (gles3_APIENTRY *glCompressedTexImage2DOffsetAEMU_wrapper_proc_t) (GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, GLuint);
+typedef void (gles3_APIENTRY *glCompressedTexSubImage2DOffsetAEMU_wrapper_proc_t) (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, GLuint);
+typedef void (gles3_APIENTRY *glTexImage2DOffsetAEMU_wrapper_proc_t) (GLenum, GLint, GLint, GLsizei, GLsizei, GLint, GLenum, GLenum, GLuint);
+typedef void (gles3_APIENTRY *glTexSubImage2DOffsetAEMU_wrapper_proc_t) (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, GLuint);
+typedef void (gles3_APIENTRY *glBindBufferRange_wrapper_proc_t) (GLenum, GLuint, GLuint, GLintptr, GLsizeiptr);
+typedef void (gles3_APIENTRY *glBindBufferBase_wrapper_proc_t) (GLenum, GLuint, GLuint);
+typedef void (gles3_APIENTRY *glCopyBufferSubData_wrapper_proc_t) (GLenum, GLenum, GLintptr, GLintptr, GLsizeiptr);
+typedef void (gles3_APIENTRY *glClearBufferiv_wrapper_proc_t) (GLenum, GLint, const GLint*);
+typedef void (gles3_APIENTRY *glClearBufferuiv_wrapper_proc_t) (GLenum, GLint, const GLuint*);
+typedef void (gles3_APIENTRY *glClearBufferfv_wrapper_proc_t) (GLenum, GLint, const GLfloat*);
+typedef void (gles3_APIENTRY *glClearBufferfi_wrapper_proc_t) (GLenum, GLint, GLfloat, GLint);
+typedef void (gles3_APIENTRY *glGetBufferParameteri64v_wrapper_proc_t) (GLenum, GLenum, GLint64*);
+typedef void (gles3_APIENTRY *glGetBufferPointerv_wrapper_proc_t) (GLenum, GLenum, GLvoid**);
+typedef void (gles3_APIENTRY *glUniformBlockBinding_wrapper_proc_t) (GLuint, GLuint, GLuint);
+typedef GLuint (gles3_APIENTRY *glGetUniformBlockIndex_wrapper_proc_t) (GLuint, const GLchar*);
+typedef void (gles3_APIENTRY *glGetUniformIndices_wrapper_proc_t) (GLuint, GLsizei, const GLchar* const*, GLuint*);
+typedef void (gles3_APIENTRY *glGetUniformIndicesAEMU_wrapper_proc_t) (GLuint, GLsizei, const GLchar*, GLsizei, GLuint*);
+typedef void (gles3_APIENTRY *glGetActiveUniformBlockiv_wrapper_proc_t) (GLuint, GLuint, GLenum, GLint*);
+typedef void (gles3_APIENTRY *glGetActiveUniformBlockName_wrapper_proc_t) (GLuint, GLuint, GLsizei, GLsizei*, GLchar*);
+typedef void (gles3_APIENTRY *glUniform1ui_wrapper_proc_t) (GLint, GLuint);
+typedef void (gles3_APIENTRY *glUniform2ui_wrapper_proc_t) (GLint, GLuint, GLuint);
+typedef void (gles3_APIENTRY *glUniform3ui_wrapper_proc_t) (GLint, GLuint, GLuint, GLuint);
+typedef void (gles3_APIENTRY *glUniform4ui_wrapper_proc_t) (GLint, GLuint, GLuint, GLuint, GLuint);
+typedef void (gles3_APIENTRY *glUniform1uiv_wrapper_proc_t) (GLint, GLsizei, const GLuint*);
+typedef void (gles3_APIENTRY *glUniform2uiv_wrapper_proc_t) (GLint, GLsizei, const GLuint*);
+typedef void (gles3_APIENTRY *glUniform3uiv_wrapper_proc_t) (GLint, GLsizei, const GLuint*);
+typedef void (gles3_APIENTRY *glUniform4uiv_wrapper_proc_t) (GLint, GLsizei, const GLuint*);
+typedef void (gles3_APIENTRY *glUniformMatrix2x3fv_wrapper_proc_t) (GLint, GLsizei, GLboolean, const GLfloat*);
+typedef void (gles3_APIENTRY *glUniformMatrix3x2fv_wrapper_proc_t) (GLint, GLsizei, GLboolean, const GLfloat*);
+typedef void (gles3_APIENTRY *glUniformMatrix2x4fv_wrapper_proc_t) (GLint, GLsizei, GLboolean, const GLfloat*);
+typedef void (gles3_APIENTRY *glUniformMatrix4x2fv_wrapper_proc_t) (GLint, GLsizei, GLboolean, const GLfloat*);
+typedef void (gles3_APIENTRY *glUniformMatrix3x4fv_wrapper_proc_t) (GLint, GLsizei, GLboolean, const GLfloat*);
+typedef void (gles3_APIENTRY *glUniformMatrix4x3fv_wrapper_proc_t) (GLint, GLsizei, GLboolean, const GLfloat*);
+typedef void (gles3_APIENTRY *glGetUniformuiv_wrapper_proc_t) (GLuint, GLint, GLuint*);
+typedef void (gles3_APIENTRY *glGetActiveUniformsiv_wrapper_proc_t) (GLuint, GLsizei, const GLuint*, GLenum, GLint*);
+typedef void (gles3_APIENTRY *glVertexAttribI4i_wrapper_proc_t) (GLuint, GLint, GLint, GLint, GLint);
+typedef void (gles3_APIENTRY *glVertexAttribI4ui_wrapper_proc_t) (GLuint, GLuint, GLuint, GLuint, GLuint);
+typedef void (gles3_APIENTRY *glVertexAttribI4iv_wrapper_proc_t) (GLuint, const GLint*);
+typedef void (gles3_APIENTRY *glVertexAttribI4uiv_wrapper_proc_t) (GLuint, const GLuint*);
+typedef void (gles3_APIENTRY *glVertexAttribIPointer_wrapper_proc_t) (GLuint, GLint, GLenum, GLsizei, const GLvoid*);
+typedef void (gles3_APIENTRY *glVertexAttribIPointerOffsetAEMU_wrapper_proc_t) (GLuint, GLint, GLenum, GLsizei, GLuint);
+typedef void (gles3_APIENTRY *glVertexAttribIPointerDataAEMU_wrapper_proc_t) (GLuint, GLint, GLenum, GLsizei, void*, GLuint);
+typedef void (gles3_APIENTRY *glGetVertexAttribIiv_wrapper_proc_t) (GLuint, GLenum, GLint*);
+typedef void (gles3_APIENTRY *glGetVertexAttribIuiv_wrapper_proc_t) (GLuint, GLenum, GLuint*);
+typedef void (gles3_APIENTRY *glVertexAttribDivisor_wrapper_proc_t) (GLuint, GLuint);
+typedef void (gles3_APIENTRY *glDrawArraysInstanced_wrapper_proc_t) (GLenum, GLint, GLsizei, GLsizei);
+typedef void (gles3_APIENTRY *glDrawElementsInstanced_wrapper_proc_t) (GLenum, GLsizei, GLenum, const void*, GLsizei);
+typedef void (gles3_APIENTRY *glDrawElementsInstancedDataAEMU_wrapper_proc_t) (GLenum, GLsizei, GLenum, const void*, GLsizei, GLsizei);
+typedef void (gles3_APIENTRY *glDrawElementsInstancedOffsetAEMU_wrapper_proc_t) (GLenum, GLsizei, GLenum, GLuint, GLsizei);
+typedef void (gles3_APIENTRY *glDrawRangeElements_wrapper_proc_t) (GLenum, GLuint, GLuint, GLsizei, GLenum, const GLvoid*);
+typedef void (gles3_APIENTRY *glDrawRangeElementsDataAEMU_wrapper_proc_t) (GLenum, GLuint, GLuint, GLsizei, GLenum, const GLvoid*, GLsizei);
+typedef void (gles3_APIENTRY *glDrawRangeElementsOffsetAEMU_wrapper_proc_t) (GLenum, GLuint, GLuint, GLsizei, GLenum, GLuint);
+typedef GLsync (gles3_APIENTRY *glFenceSync_wrapper_proc_t) (GLenum, GLbitfield);
+typedef GLenum (gles3_APIENTRY *glClientWaitSync_wrapper_proc_t) (GLsync, GLbitfield, GLuint64);
+typedef void (gles3_APIENTRY *glWaitSync_wrapper_proc_t) (GLsync, GLbitfield, GLuint64);
+typedef void (gles3_APIENTRY *glDeleteSync_wrapper_proc_t) (GLsync);
+typedef GLboolean (gles3_APIENTRY *glIsSync_wrapper_proc_t) (GLsync);
+typedef void (gles3_APIENTRY *glGetSynciv_wrapper_proc_t) (GLsync, GLenum, GLsizei, GLsizei*, GLint*);
+typedef uint64_t (gles3_APIENTRY *glFenceSyncAEMU_wrapper_proc_t) (GLenum, GLbitfield);
+typedef GLenum (gles3_APIENTRY *glClientWaitSyncAEMU_wrapper_proc_t) (uint64_t, GLbitfield, GLuint64);
+typedef void (gles3_APIENTRY *glWaitSyncAEMU_wrapper_proc_t) (uint64_t, GLbitfield, GLuint64);
+typedef void (gles3_APIENTRY *glDeleteSyncAEMU_wrapper_proc_t) (uint64_t);
+typedef GLboolean (gles3_APIENTRY *glIsSyncAEMU_wrapper_proc_t) (uint64_t);
+typedef void (gles3_APIENTRY *glGetSyncivAEMU_wrapper_proc_t) (uint64_t, GLenum, GLsizei, GLsizei*, GLint*);
+typedef void (gles3_APIENTRY *glDrawBuffers_wrapper_proc_t) (GLsizei, const GLenum*);
+typedef void (gles3_APIENTRY *glReadBuffer_wrapper_proc_t) (GLenum);
+typedef void (gles3_APIENTRY *glBlitFramebuffer_wrapper_proc_t) (GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLbitfield, GLenum);
+typedef void (gles3_APIENTRY *glInvalidateFramebuffer_wrapper_proc_t) (GLenum, GLsizei, const GLenum*);
+typedef void (gles3_APIENTRY *glInvalidateSubFramebuffer_wrapper_proc_t) (GLenum, GLsizei, const GLenum*, GLint, GLint, GLsizei, GLsizei);
+typedef void (gles3_APIENTRY *glFramebufferTextureLayer_wrapper_proc_t) (GLenum, GLenum, GLuint, GLint, GLint);
+typedef void (gles3_APIENTRY *glRenderbufferStorageMultisample_wrapper_proc_t) (GLenum, GLsizei, GLenum, GLsizei, GLsizei);
+typedef void (gles3_APIENTRY *glTexStorage2D_wrapper_proc_t) (GLenum, GLsizei, GLenum, GLsizei, GLsizei);
+typedef void (gles3_APIENTRY *glGetInternalformativ_wrapper_proc_t) (GLenum, GLenum, GLenum, GLsizei, GLint*);
+typedef void (gles3_APIENTRY *glBeginTransformFeedback_wrapper_proc_t) (GLenum);
+typedef void (gles3_APIENTRY *glEndTransformFeedback_wrapper_proc_t) ();
+typedef void (gles3_APIENTRY *glGenTransformFeedbacks_wrapper_proc_t) (GLsizei, GLuint*);
+typedef void (gles3_APIENTRY *glDeleteTransformFeedbacks_wrapper_proc_t) (GLsizei, const GLuint*);
+typedef void (gles3_APIENTRY *glBindTransformFeedback_wrapper_proc_t) (GLenum, GLuint);
+typedef void (gles3_APIENTRY *glPauseTransformFeedback_wrapper_proc_t) ();
+typedef void (gles3_APIENTRY *glResumeTransformFeedback_wrapper_proc_t) ();
+typedef GLboolean (gles3_APIENTRY *glIsTransformFeedback_wrapper_proc_t) (GLuint);
+typedef void (gles3_APIENTRY *glTransformFeedbackVaryings_wrapper_proc_t) (GLuint, GLsizei, const GLchar* const*, GLenum);
+typedef void (gles3_APIENTRY *glTransformFeedbackVaryingsAEMU_wrapper_proc_t) (GLuint, GLsizei, const char*, GLuint, GLenum);
+typedef void (gles3_APIENTRY *glGetTransformFeedbackVarying_wrapper_proc_t) (GLuint, GLuint, GLsizei, GLsizei*, GLsizei*, GLenum*, char*);
+typedef void (gles3_APIENTRY *glGenSamplers_wrapper_proc_t) (GLsizei, GLuint*);
+typedef void (gles3_APIENTRY *glDeleteSamplers_wrapper_proc_t) (GLsizei, const GLuint*);
+typedef void (gles3_APIENTRY *glBindSampler_wrapper_proc_t) (GLuint, GLuint);
+typedef void (gles3_APIENTRY *glSamplerParameterf_wrapper_proc_t) (GLuint, GLenum, GLfloat);
+typedef void (gles3_APIENTRY *glSamplerParameteri_wrapper_proc_t) (GLuint, GLenum, GLint);
+typedef void (gles3_APIENTRY *glSamplerParameterfv_wrapper_proc_t) (GLuint, GLenum, const GLfloat*);
+typedef void (gles3_APIENTRY *glSamplerParameteriv_wrapper_proc_t) (GLuint, GLenum, const GLint*);
+typedef void (gles3_APIENTRY *glGetSamplerParameterfv_wrapper_proc_t) (GLuint, GLenum, GLfloat*);
+typedef void (gles3_APIENTRY *glGetSamplerParameteriv_wrapper_proc_t) (GLuint, GLenum, GLint*);
+typedef GLboolean (gles3_APIENTRY *glIsSampler_wrapper_proc_t) (GLuint);
+typedef void (gles3_APIENTRY *glGenQueries_wrapper_proc_t) (GLsizei, GLuint*);
+typedef void (gles3_APIENTRY *glDeleteQueries_wrapper_proc_t) (GLsizei, const GLuint*);
+typedef void (gles3_APIENTRY *glBeginQuery_wrapper_proc_t) (GLenum, GLuint);
+typedef void (gles3_APIENTRY *glEndQuery_wrapper_proc_t) (GLenum);
+typedef void (gles3_APIENTRY *glGetQueryiv_wrapper_proc_t) (GLenum, GLenum, GLint*);
+typedef void (gles3_APIENTRY *glGetQueryObjectuiv_wrapper_proc_t) (GLuint, GLenum, GLuint*);
+typedef GLboolean (gles3_APIENTRY *glIsQuery_wrapper_proc_t) (GLuint);
+typedef void (gles3_APIENTRY *glProgramParameteri_wrapper_proc_t) (GLuint, GLenum, GLint);
+typedef void (gles3_APIENTRY *glProgramBinary_wrapper_proc_t) (GLuint, GLenum, const void*, GLsizei);
+typedef void (gles3_APIENTRY *glGetProgramBinary_wrapper_proc_t) (GLuint, GLsizei, GLsizei*, GLenum*, void*);
+typedef GLint (gles3_APIENTRY *glGetFragDataLocation_wrapper_proc_t) (GLuint, const char*);
+typedef void (gles3_APIENTRY *glGetInteger64v_wrapper_proc_t) (GLenum, GLint64*);
+typedef void (gles3_APIENTRY *glGetIntegeri_v_wrapper_proc_t) (GLenum, GLuint, GLint*);
+typedef void (gles3_APIENTRY *glGetInteger64i_v_wrapper_proc_t) (GLenum, GLuint, GLint64*);
+typedef void (gles3_APIENTRY *glTexImage3D_wrapper_proc_t) (GLenum, GLint, GLint, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid*);
+typedef void (gles3_APIENTRY *glTexImage3DOffsetAEMU_wrapper_proc_t) (GLenum, GLint, GLint, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, GLuint);
+typedef void (gles3_APIENTRY *glTexStorage3D_wrapper_proc_t) (GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLsizei);
+typedef void (gles3_APIENTRY *glTexSubImage3D_wrapper_proc_t) (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid*);
+typedef void (gles3_APIENTRY *glTexSubImage3DOffsetAEMU_wrapper_proc_t) (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, GLuint);
+typedef void (gles3_APIENTRY *glCompressedTexImage3D_wrapper_proc_t) (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, const GLvoid*);
+typedef void (gles3_APIENTRY *glCompressedTexImage3DOffsetAEMU_wrapper_proc_t) (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, GLuint);
+typedef void (gles3_APIENTRY *glCompressedTexSubImage3D_wrapper_proc_t) (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid*);
+typedef void (gles3_APIENTRY *glCompressedTexSubImage3DOffsetAEMU_wrapper_proc_t) (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, GLuint);
+typedef void (gles3_APIENTRY *glCopyTexSubImage3D_wrapper_proc_t) (GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei);
+typedef const GLubyte* (gles3_APIENTRY *glGetStringi_wrapper_proc_t) (GLenum, GLuint);
+typedef void (gles3_APIENTRY *glGetBooleani_v_wrapper_proc_t) (GLenum, GLuint, GLboolean*);
+typedef void (gles3_APIENTRY *glMemoryBarrier_wrapper_proc_t) (GLbitfield);
+typedef void (gles3_APIENTRY *glMemoryBarrierByRegion_wrapper_proc_t) (GLbitfield);
+typedef void (gles3_APIENTRY *glGenProgramPipelines_wrapper_proc_t) (GLsizei, GLuint*);
+typedef void (gles3_APIENTRY *glDeleteProgramPipelines_wrapper_proc_t) (GLsizei, const GLuint*);
+typedef void (gles3_APIENTRY *glBindProgramPipeline_wrapper_proc_t) (GLuint);
+typedef void (gles3_APIENTRY *glGetProgramPipelineiv_wrapper_proc_t) (GLuint, GLenum, GLint*);
+typedef void (gles3_APIENTRY *glGetProgramPipelineInfoLog_wrapper_proc_t) (GLuint, GLsizei, GLsizei*, GLchar*);
+typedef void (gles3_APIENTRY *glValidateProgramPipeline_wrapper_proc_t) (GLuint);
+typedef GLboolean (gles3_APIENTRY *glIsProgramPipeline_wrapper_proc_t) (GLuint);
+typedef void (gles3_APIENTRY *glUseProgramStages_wrapper_proc_t) (GLuint, GLbitfield, GLuint);
+typedef void (gles3_APIENTRY *glActiveShaderProgram_wrapper_proc_t) (GLuint, GLuint);
+typedef GLuint (gles3_APIENTRY *glCreateShaderProgramv_wrapper_proc_t) (GLenum, GLsizei, const char**);
+typedef GLuint (gles3_APIENTRY *glCreateShaderProgramvAEMU_wrapper_proc_t) (GLenum, GLsizei, const char*, GLuint);
+typedef void (gles3_APIENTRY *glProgramUniform1f_wrapper_proc_t) (GLuint, GLint, GLfloat);
+typedef void (gles3_APIENTRY *glProgramUniform2f_wrapper_proc_t) (GLuint, GLint, GLfloat, GLfloat);
+typedef void (gles3_APIENTRY *glProgramUniform3f_wrapper_proc_t) (GLuint, GLint, GLfloat, GLfloat, GLfloat);
+typedef void (gles3_APIENTRY *glProgramUniform4f_wrapper_proc_t) (GLuint, GLint, GLfloat, GLfloat, GLfloat, GLfloat);
+typedef void (gles3_APIENTRY *glProgramUniform1i_wrapper_proc_t) (GLuint, GLint, GLint);
+typedef void (gles3_APIENTRY *glProgramUniform2i_wrapper_proc_t) (GLuint, GLint, GLint, GLint);
+typedef void (gles3_APIENTRY *glProgramUniform3i_wrapper_proc_t) (GLuint, GLint, GLint, GLint, GLint);
+typedef void (gles3_APIENTRY *glProgramUniform4i_wrapper_proc_t) (GLuint, GLint, GLint, GLint, GLint, GLint);
+typedef void (gles3_APIENTRY *glProgramUniform1ui_wrapper_proc_t) (GLuint, GLint, GLuint);
+typedef void (gles3_APIENTRY *glProgramUniform2ui_wrapper_proc_t) (GLuint, GLint, GLint, GLuint);
+typedef void (gles3_APIENTRY *glProgramUniform3ui_wrapper_proc_t) (GLuint, GLint, GLint, GLint, GLuint);
+typedef void (gles3_APIENTRY *glProgramUniform4ui_wrapper_proc_t) (GLuint, GLint, GLint, GLint, GLint, GLuint);
+typedef void (gles3_APIENTRY *glProgramUniform1fv_wrapper_proc_t) (GLuint, GLint, GLsizei, const GLfloat*);
+typedef void (gles3_APIENTRY *glProgramUniform2fv_wrapper_proc_t) (GLuint, GLint, GLsizei, const GLfloat*);
+typedef void (gles3_APIENTRY *glProgramUniform3fv_wrapper_proc_t) (GLuint, GLint, GLsizei, const GLfloat*);
+typedef void (gles3_APIENTRY *glProgramUniform4fv_wrapper_proc_t) (GLuint, GLint, GLsizei, const GLfloat*);
+typedef void (gles3_APIENTRY *glProgramUniform1iv_wrapper_proc_t) (GLuint, GLint, GLsizei, const GLint*);
+typedef void (gles3_APIENTRY *glProgramUniform2iv_wrapper_proc_t) (GLuint, GLint, GLsizei, const GLint*);
+typedef void (gles3_APIENTRY *glProgramUniform3iv_wrapper_proc_t) (GLuint, GLint, GLsizei, const GLint*);
+typedef void (gles3_APIENTRY *glProgramUniform4iv_wrapper_proc_t) (GLuint, GLint, GLsizei, const GLint*);
+typedef void (gles3_APIENTRY *glProgramUniform1uiv_wrapper_proc_t) (GLuint, GLint, GLsizei, const GLuint*);
+typedef void (gles3_APIENTRY *glProgramUniform2uiv_wrapper_proc_t) (GLuint, GLint, GLsizei, const GLuint*);
+typedef void (gles3_APIENTRY *glProgramUniform3uiv_wrapper_proc_t) (GLuint, GLint, GLsizei, const GLuint*);
+typedef void (gles3_APIENTRY *glProgramUniform4uiv_wrapper_proc_t) (GLuint, GLint, GLsizei, const GLuint*);
+typedef void (gles3_APIENTRY *glProgramUniformMatrix2fv_wrapper_proc_t) (GLuint, GLint, GLsizei, GLboolean, const GLfloat*);
+typedef void (gles3_APIENTRY *glProgramUniformMatrix3fv_wrapper_proc_t) (GLuint, GLint, GLsizei, GLboolean, const GLfloat*);
+typedef void (gles3_APIENTRY *glProgramUniformMatrix4fv_wrapper_proc_t) (GLuint, GLint, GLsizei, GLboolean, const GLfloat*);
+typedef void (gles3_APIENTRY *glProgramUniformMatrix2x3fv_wrapper_proc_t) (GLuint, GLint, GLsizei, GLboolean, const GLfloat*);
+typedef void (gles3_APIENTRY *glProgramUniformMatrix3x2fv_wrapper_proc_t) (GLuint, GLint, GLsizei, GLboolean, const GLfloat*);
+typedef void (gles3_APIENTRY *glProgramUniformMatrix2x4fv_wrapper_proc_t) (GLuint, GLint, GLsizei, GLboolean, const GLfloat*);
+typedef void (gles3_APIENTRY *glProgramUniformMatrix4x2fv_wrapper_proc_t) (GLuint, GLint, GLsizei, GLboolean, const GLfloat*);
+typedef void (gles3_APIENTRY *glProgramUniformMatrix3x4fv_wrapper_proc_t) (GLuint, GLint, GLsizei, GLboolean, const GLfloat*);
+typedef void (gles3_APIENTRY *glProgramUniformMatrix4x3fv_wrapper_proc_t) (GLuint, GLint, GLsizei, GLboolean, const GLfloat*);
+typedef void (gles3_APIENTRY *glGetProgramInterfaceiv_wrapper_proc_t) (GLuint, GLenum, GLenum, GLint*);
+typedef void (gles3_APIENTRY *glGetProgramResourceiv_wrapper_proc_t) (GLuint, GLenum, GLuint, GLsizei, const GLenum*, GLsizei, GLsizei*, GLint*);
+typedef GLuint (gles3_APIENTRY *glGetProgramResourceIndex_wrapper_proc_t) (GLuint, GLenum, const char*);
+typedef GLint (gles3_APIENTRY *glGetProgramResourceLocation_wrapper_proc_t) (GLuint, GLenum, const char*);
+typedef void (gles3_APIENTRY *glGetProgramResourceName_wrapper_proc_t) (GLuint, GLenum, GLuint, GLsizei, GLsizei*, char*);
+typedef void (gles3_APIENTRY *glBindImageTexture_wrapper_proc_t) (GLuint, GLuint, GLint, GLboolean, GLint, GLenum, GLenum);
+typedef void (gles3_APIENTRY *glDispatchCompute_wrapper_proc_t) (GLuint, GLuint, GLuint);
+typedef void (gles3_APIENTRY *glDispatchComputeIndirect_wrapper_proc_t) (GLintptr);
+typedef void (gles3_APIENTRY *glBindVertexBuffer_wrapper_proc_t) (GLuint, GLuint, GLintptr, GLintptr);
+typedef void (gles3_APIENTRY *glVertexAttribBinding_wrapper_proc_t) (GLuint, GLuint);
+typedef void (gles3_APIENTRY *glVertexAttribFormat_wrapper_proc_t) (GLuint, GLint, GLenum, GLboolean, GLuint);
+typedef void (gles3_APIENTRY *glVertexAttribIFormat_wrapper_proc_t) (GLuint, GLint, GLenum, GLuint);
+typedef void (gles3_APIENTRY *glVertexBindingDivisor_wrapper_proc_t) (GLuint, GLuint);
+typedef void (gles3_APIENTRY *glDrawArraysIndirect_wrapper_proc_t) (GLenum, const void*);
+typedef void (gles3_APIENTRY *glDrawArraysIndirectDataAEMU_wrapper_proc_t) (GLenum, const void*, GLuint);
+typedef void (gles3_APIENTRY *glDrawArraysIndirectOffsetAEMU_wrapper_proc_t) (GLenum, GLuint);
+typedef void (gles3_APIENTRY *glDrawElementsIndirect_wrapper_proc_t) (GLenum, GLenum, const void*);
+typedef void (gles3_APIENTRY *glDrawElementsIndirectDataAEMU_wrapper_proc_t) (GLenum, GLenum, const void*, GLuint);
+typedef void (gles3_APIENTRY *glDrawElementsIndirectOffsetAEMU_wrapper_proc_t) (GLenum, GLenum, GLuint);
+typedef void (gles3_APIENTRY *glTexStorage2DMultisample_wrapper_proc_t) (GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLboolean);
+typedef void (gles3_APIENTRY *glSampleMaski_wrapper_proc_t) (GLuint, GLbitfield);
+typedef void (gles3_APIENTRY *glGetMultisamplefv_wrapper_proc_t) (GLenum, GLuint, GLfloat*);
+typedef void (gles3_APIENTRY *glFramebufferParameteri_wrapper_proc_t) (GLenum, GLenum, GLint);
+typedef void (gles3_APIENTRY *glGetFramebufferParameteriv_wrapper_proc_t) (GLenum, GLenum, GLint*);
+typedef void (gles3_APIENTRY *glGetTexLevelParameterfv_wrapper_proc_t) (GLenum, GLint, GLenum, GLfloat*);
+typedef void (gles3_APIENTRY *glGetTexLevelParameteriv_wrapper_proc_t) (GLenum, GLint, GLenum, GLint*);
+
+
+#endif