OSDN Git Service

Eliminate exception handling.
authorNicolas Capens <capn@google.com>
Wed, 26 Nov 2014 16:58:23 +0000 (11:58 -0500)
committerNicolas Capens <nicolascapens@google.com>
Wed, 26 Nov 2014 19:20:05 +0000 (19:20 +0000)
BUG=18525426

Change-Id: I4ce127fe56e30046fc316276b856767a036d13a1
Reviewed-on: https://swiftshader-review.googlesource.com/1490
Reviewed-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Tested-by: Nicolas Capens <nicolascapens@google.com>
src/OpenGL/libEGL/libEGL.cpp
src/OpenGL/libGLES_CM/libGLES_CM.cpp
src/OpenGL/libGLESv2/libGLESv2.cpp
src/Reactor/Nucleus.hpp

index 1ac4661..c784893 100644 (file)
 \r
 static bool validateDisplay(egl::Display *display)\r
 {\r
-    if(display == EGL_NO_DISPLAY)\r
-    {\r
-        return error(EGL_BAD_DISPLAY, false);\r
-    }\r
+       if(display == EGL_NO_DISPLAY)\r
+       {\r
+               return error(EGL_BAD_DISPLAY, false);\r
+       }\r
 \r
-    if(!display->isInitialized())\r
-    {\r
-        return error(EGL_NOT_INITIALIZED, false);\r
-    }\r
+       if(!display->isInitialized())\r
+       {\r
+               return error(EGL_NOT_INITIALIZED, false);\r
+       }\r
 \r
-    return true;\r
+       return true;\r
 }\r
 \r
 static bool validateConfig(egl::Display *display, EGLConfig config)\r
 {\r
-    if(!validateDisplay(display))\r
-    {\r
-        return false;\r
-    }\r
+       if(!validateDisplay(display))\r
+       {\r
+               return false;\r
+       }\r
 \r
-    if(!display->isValidConfig(config))\r
-    {\r
-        return error(EGL_BAD_CONFIG, false);\r
-    }\r
+       if(!display->isValidConfig(config))\r
+       {\r
+               return error(EGL_BAD_CONFIG, false);\r
+       }\r
 \r
-    return true;\r
+       return true;\r
 }\r
 \r
 static bool validateContext(egl::Display *display, egl::Context *context)\r
 {\r
-    if(!validateDisplay(display))\r
-    {\r
-        return false;\r
-    }\r
+       if(!validateDisplay(display))\r
+       {\r
+               return false;\r
+       }\r
 \r
-    if(!display->isValidContext(context))\r
-    {\r
-        return error(EGL_BAD_CONTEXT, false);\r
-    }\r
+       if(!display->isValidContext(context))\r
+       {\r
+               return error(EGL_BAD_CONTEXT, false);\r
+       }\r
 \r
-    return true;\r
+       return true;\r
 }\r
 \r
 static bool validateSurface(egl::Display *display, egl::Surface *surface)\r
 {\r
-    if(!validateDisplay(display))\r
-    {\r
-        return false;\r
-    }\r
+       if(!validateDisplay(display))\r
+       {\r
+               return false;\r
+       }\r
 \r
-    if(!display->isValidSurface(surface))\r
-    {\r
-        return error(EGL_BAD_SURFACE, false);\r
-    }\r
+       if(!display->isValidSurface(surface))\r
+       {\r
+               return error(EGL_BAD_SURFACE, false);\r
+       }\r
 \r
-    return true;\r
+       return true;\r
 }\r
 \r
 extern "C"\r
 {\r
 EGLint EGLAPIENTRY eglGetError(void)\r
 {\r
-    TRACE("()");\r
+       TRACE("()");\r
 \r
-    EGLint error = egl::getCurrentError();\r
+       EGLint error = egl::getCurrentError();\r
 \r
-    if(error != EGL_SUCCESS)\r
-    {\r
-        egl::setCurrentError(EGL_SUCCESS);\r
-    }\r
+       if(error != EGL_SUCCESS)\r
+       {\r
+               egl::setCurrentError(EGL_SUCCESS);\r
+       }\r
 \r
-    return error;\r
+       return error;\r
 }\r
 \r
 EGLDisplay EGLAPIENTRY eglGetDisplay(EGLNativeDisplayType display_id)\r
 {\r
-    TRACE("(EGLNativeDisplayType display_id = 0x%0.8p)", display_id);\r
-\r
-    try\r
-    {\r
-        return egl::Display::getPlatformDisplay(EGL_UNKNOWN, display_id);\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(EGL_BAD_ALLOC, EGL_NO_DISPLAY);\r
-    }\r
-\r
-    return EGL_NO_DISPLAY;\r
+       TRACE("(EGLNativeDisplayType display_id = 0x%0.8p)", display_id);\r
+\r
+       return egl::Display::getPlatformDisplay(EGL_UNKNOWN, display_id);\r
 }\r
 \r
 EGLBoolean EGLAPIENTRY eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor)\r
 {\r
-    TRACE("(EGLDisplay dpy = 0x%0.8p, EGLint *major = 0x%0.8p, EGLint *minor = 0x%0.8p)",\r
-          dpy, major, minor);\r
-\r
-    try\r
-    {\r
-        if(dpy == EGL_NO_DISPLAY)\r
-        {\r
-            return error(EGL_BAD_DISPLAY, EGL_FALSE);\r
-        }\r
-\r
-        egl::Display *display = static_cast<egl::Display*>(dpy);\r
-\r
-        if(!display->initialize())\r
-        {\r
-            return error(EGL_NOT_INITIALIZED, EGL_FALSE);\r
-        }\r
-\r
-        if(major) *major = 1;\r
-        if(minor) *minor = 4;\r
-\r
-        return success(EGL_TRUE);\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(EGL_BAD_ALLOC, EGL_FALSE);\r
-    }\r
-\r
-    return EGL_FALSE;\r
+       TRACE("(EGLDisplay dpy = 0x%0.8p, EGLint *major = 0x%0.8p, EGLint *minor = 0x%0.8p)",\r
+                 dpy, major, minor);\r
+\r
+       if(dpy == EGL_NO_DISPLAY)\r
+       {\r
+               return error(EGL_BAD_DISPLAY, EGL_FALSE);\r
+       }\r
+\r
+       egl::Display *display = static_cast<egl::Display*>(dpy);\r
+\r
+       if(!display->initialize())\r
+       {\r
+               return error(EGL_NOT_INITIALIZED, EGL_FALSE);\r
+       }\r
+\r
+       if(major) *major = 1;\r
+       if(minor) *minor = 4;\r
+\r
+       return success(EGL_TRUE);\r
 }\r
 \r
 EGLBoolean EGLAPIENTRY eglTerminate(EGLDisplay dpy)\r
 {\r
-    TRACE("(EGLDisplay dpy = 0x%0.8p)", dpy);\r
+       TRACE("(EGLDisplay dpy = 0x%0.8p)", dpy);\r
 \r
-    try\r
-    {\r
-        if(dpy == EGL_NO_DISPLAY)\r
-        {\r
-            return error(EGL_BAD_DISPLAY, EGL_FALSE);\r
-        }\r
+       if(dpy == EGL_NO_DISPLAY)\r
+       {\r
+               return error(EGL_BAD_DISPLAY, EGL_FALSE);\r
+       }\r
 \r
-        egl::Display *display = static_cast<egl::Display*>(dpy);\r
+       egl::Display *display = static_cast<egl::Display*>(dpy);\r
 \r
-        display->terminate();\r
+       display->terminate();\r
 \r
-        return success(EGL_TRUE);\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(EGL_BAD_ALLOC, EGL_FALSE);\r
-    }\r
-\r
-    return EGL_FALSE;\r
+       return success(EGL_TRUE);\r
 }\r
 \r
 const char *EGLAPIENTRY eglQueryString(EGLDisplay dpy, EGLint name)\r
 {\r
-    TRACE("(EGLDisplay dpy = 0x%0.8p, EGLint name = %d)", dpy, name);\r
-\r
-    try\r
-    {\r
-        if(dpy == EGL_NO_DISPLAY && name == EGL_EXTENSIONS)\r
-        {\r
-            return success("EGL_KHR_platform_gbm "\r
-                           "EGL_KHR_platform_x11 "\r
-                           "EGL_EXT_client_extensions "\r
-                           "EGL_EXT_platform_base");\r
-        }\r
-\r
-        egl::Display *display = static_cast<egl::Display*>(dpy);\r
-\r
-        if(!validateDisplay(display))\r
-        {\r
-            return NULL;\r
-        }\r
-\r
-        switch(name)\r
-        {\r
-        case EGL_CLIENT_APIS:\r
-            return success("OpenGL_ES");\r
-        case EGL_EXTENSIONS:\r
-            return success("EGL_KHR_gl_texture_2D_image "\r
-                           "EGL_KHR_gl_texture_cubemap_image "\r
-                           "EGL_KHR_gl_renderbuffer_image "\r
-                           "EGL_KHR_image_base");\r
-        case EGL_VENDOR:\r
-            return success("TransGaming Inc.");\r
-        case EGL_VERSION:\r
-            return success("1.4 SwiftShader " VERSION_STRING);\r
-        }\r
-\r
-        return error(EGL_BAD_PARAMETER, (const char*)NULL);\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(EGL_BAD_ALLOC, (const char*)NULL);\r
-    }\r
-\r
-    return NULL;\r
+       TRACE("(EGLDisplay dpy = 0x%0.8p, EGLint name = %d)", dpy, name);\r
+\r
+       if(dpy == EGL_NO_DISPLAY && name == EGL_EXTENSIONS)\r
+       {\r
+               return success("EGL_KHR_platform_gbm "\r
+                                               "EGL_KHR_platform_x11 "\r
+                                               "EGL_EXT_client_extensions "\r
+                                               "EGL_EXT_platform_base");\r
+       }\r
+\r
+       egl::Display *display = static_cast<egl::Display*>(dpy);\r
+\r
+       if(!validateDisplay(display))\r
+       {\r
+               return NULL;\r
+       }\r
+\r
+       switch(name)\r
+       {\r
+       case EGL_CLIENT_APIS:\r
+               return success("OpenGL_ES");\r
+       case EGL_EXTENSIONS:\r
+               return success("EGL_KHR_gl_texture_2D_image "\r
+                                               "EGL_KHR_gl_texture_cubemap_image "\r
+                                               "EGL_KHR_gl_renderbuffer_image "\r
+                                               "EGL_KHR_image_base");\r
+       case EGL_VENDOR:\r
+               return success("TransGaming Inc.");\r
+       case EGL_VERSION:\r
+               return success("1.4 SwiftShader " VERSION_STRING);\r
+       }\r
+\r
+       return error(EGL_BAD_PARAMETER, (const char*)NULL);\r
 }\r
 \r
 EGLBoolean EGLAPIENTRY eglGetConfigs(EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config)\r
 {\r
-    TRACE("(EGLDisplay dpy = 0x%0.8p, EGLConfig *configs = 0x%0.8p, "\r
-          "EGLint config_size = %d, EGLint *num_config = 0x%0.8p)",\r
-          dpy, configs, config_size, num_config);\r
-\r
-    try\r
-    {\r
-        egl::Display *display = static_cast<egl::Display*>(dpy);\r
-\r
-        if(!validateDisplay(display))\r
-        {\r
-            return EGL_FALSE;\r
-        }\r
-\r
-        if(!num_config)\r
-        {\r
-            return error(EGL_BAD_PARAMETER, EGL_FALSE);\r
-        }\r
-\r
-        const EGLint attribList[] = {EGL_NONE};\r
-\r
-        if(!display->getConfigs(configs, attribList, config_size, num_config))\r
-        {\r
-            return error(EGL_BAD_ATTRIBUTE, EGL_FALSE);\r
-        }\r
-\r
-        return success(EGL_TRUE);\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(EGL_BAD_ALLOC, EGL_FALSE);\r
-    }\r
-\r
-    return EGL_FALSE;\r
+       TRACE("(EGLDisplay dpy = 0x%0.8p, EGLConfig *configs = 0x%0.8p, "\r
+                 "EGLint config_size = %d, EGLint *num_config = 0x%0.8p)",\r
+                 dpy, configs, config_size, num_config);\r
+\r
+       egl::Display *display = static_cast<egl::Display*>(dpy);\r
+\r
+       if(!validateDisplay(display))\r
+       {\r
+               return EGL_FALSE;\r
+       }\r
+\r
+       if(!num_config)\r
+       {\r
+               return error(EGL_BAD_PARAMETER, EGL_FALSE);\r
+       }\r
+\r
+       const EGLint attribList[] = {EGL_NONE};\r
+\r
+       if(!display->getConfigs(configs, attribList, config_size, num_config))\r
+       {\r
+               return error(EGL_BAD_ATTRIBUTE, EGL_FALSE);\r
+       }\r
+\r
+       return success(EGL_TRUE);\r
 }\r
 \r
 EGLBoolean EGLAPIENTRY eglChooseConfig(EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config)\r
 {\r
-    TRACE("(EGLDisplay dpy = 0x%0.8p, const EGLint *attrib_list = 0x%0.8p, "\r
-          "EGLConfig *configs = 0x%0.8p, EGLint config_size = %d, EGLint *num_config = 0x%0.8p)",\r
-          dpy, attrib_list, configs, config_size, num_config);\r
-\r
-    try\r
-    {\r
-        egl::Display *display = static_cast<egl::Display*>(dpy);\r
+       TRACE("(EGLDisplay dpy = 0x%0.8p, const EGLint *attrib_list = 0x%0.8p, "\r
+                 "EGLConfig *configs = 0x%0.8p, EGLint config_size = %d, EGLint *num_config = 0x%0.8p)",\r
+                 dpy, attrib_list, configs, config_size, num_config);\r
 \r
-        if(!validateDisplay(display))\r
-        {\r
-            return EGL_FALSE;\r
-        }\r
+       egl::Display *display = static_cast<egl::Display*>(dpy);\r
 \r
-        if(!num_config)\r
-        {\r
-            return error(EGL_BAD_PARAMETER, EGL_FALSE);\r
-        }\r
+       if(!validateDisplay(display))\r
+       {\r
+               return EGL_FALSE;\r
+       }\r
 \r
-        const EGLint attribList[] = {EGL_NONE};\r
+       if(!num_config)\r
+       {\r
+               return error(EGL_BAD_PARAMETER, EGL_FALSE);\r
+       }\r
 \r
-        if(!attrib_list)\r
-        {\r
-            attrib_list = attribList;\r
-        }\r
+       const EGLint attribList[] = {EGL_NONE};\r
 \r
-        display->getConfigs(configs, attrib_list, config_size, num_config);\r
+       if(!attrib_list)\r
+       {\r
+               attrib_list = attribList;\r
+       }\r
 \r
-        return success(EGL_TRUE);\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(EGL_BAD_ALLOC, EGL_FALSE);\r
-    }\r
+       display->getConfigs(configs, attrib_list, config_size, num_config);\r
 \r
-    return EGL_FALSE;\r
+       return success(EGL_TRUE);\r
 }\r
 \r
 EGLBoolean EGLAPIENTRY eglGetConfigAttrib(EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value)\r
 {\r
-    TRACE("(EGLDisplay dpy = 0x%0.8p, EGLConfig config = 0x%0.8p, EGLint attribute = %d, EGLint *value = 0x%0.8p)",\r
-          dpy, config, attribute, value);\r
-\r
-    try\r
-    {\r
-        egl::Display *display = static_cast<egl::Display*>(dpy);\r
-\r
-        if(!validateConfig(display, config))\r
-        {\r
-            return EGL_FALSE;\r
-        }\r
-\r
-        if(!display->getConfigAttrib(config, attribute, value))\r
-        {\r
-            return error(EGL_BAD_ATTRIBUTE, EGL_FALSE);\r
-        }\r
-\r
-        return success(EGL_TRUE);\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(EGL_BAD_ALLOC, EGL_FALSE);\r
-    }\r
-\r
-    return EGL_FALSE;\r
+       TRACE("(EGLDisplay dpy = 0x%0.8p, EGLConfig config = 0x%0.8p, EGLint attribute = %d, EGLint *value = 0x%0.8p)",\r
+                 dpy, config, attribute, value);\r
+\r
+       egl::Display *display = static_cast<egl::Display*>(dpy);\r
+\r
+       if(!validateConfig(display, config))\r
+       {\r
+               return EGL_FALSE;\r
+       }\r
+\r
+       if(!display->getConfigAttrib(config, attribute, value))\r
+       {\r
+               return error(EGL_BAD_ATTRIBUTE, EGL_FALSE);\r
+       }\r
+\r
+       return success(EGL_TRUE);\r
 }\r
 \r
 EGLSurface EGLAPIENTRY eglCreateWindowSurface(EGLDisplay dpy, EGLConfig config, EGLNativeWindowType window, const EGLint *attrib_list)\r
 {\r
-    TRACE("(EGLDisplay dpy = 0x%0.8p, EGLConfig config = 0x%0.8p, EGLNativeWindowType win = 0x%0.8p, "\r
-          "const EGLint *attrib_list = 0x%0.8p)", dpy, config, window, attrib_list);\r
+       TRACE("(EGLDisplay dpy = 0x%0.8p, EGLConfig config = 0x%0.8p, EGLNativeWindowType win = 0x%0.8p, "\r
+                 "const EGLint *attrib_list = 0x%0.8p)", dpy, config, window, attrib_list);\r
 \r
-    try\r
-    {\r
-        egl::Display *display = static_cast<egl::Display*>(dpy);\r
+       egl::Display *display = static_cast<egl::Display*>(dpy);\r
 \r
-        if(!validateConfig(display, config))\r
-        {\r
-            return EGL_NO_SURFACE;\r
-        }\r
+       if(!validateConfig(display, config))\r
+       {\r
+               return EGL_NO_SURFACE;\r
+       }\r
 \r
-               if(!display->isValidWindow(window))\r
-               {\r
-                       return error(EGL_BAD_NATIVE_WINDOW, EGL_NO_SURFACE);\r
-               }\r
-\r
-        return display->createWindowSurface(window, config, attrib_list);\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(EGL_BAD_ALLOC, EGL_NO_SURFACE);\r
-    }\r
+       if(!display->isValidWindow(window))\r
+       {\r
+               return error(EGL_BAD_NATIVE_WINDOW, EGL_NO_SURFACE);\r
+       }\r
 \r
-    return EGL_NO_SURFACE;\r
+       return display->createWindowSurface(window, config, attrib_list);\r
 }\r
 \r
 EGLSurface EGLAPIENTRY eglCreatePbufferSurface(EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list)\r
 {\r
-    TRACE("(EGLDisplay dpy = 0x%0.8p, EGLConfig config = 0x%0.8p, const EGLint *attrib_list = 0x%0.8p)",\r
-          dpy, config, attrib_list);\r
-\r
-    try\r
-    {\r
-        egl::Display *display = static_cast<egl::Display*>(dpy);\r
-\r
-        if(!validateConfig(display, config))\r
-        {\r
-            return EGL_NO_SURFACE;\r
-        }\r
-\r
-        return display->createOffscreenSurface(config, attrib_list);\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(EGL_BAD_ALLOC, EGL_NO_SURFACE);\r
-    }\r
-\r
-    return EGL_NO_SURFACE;\r
+       TRACE("(EGLDisplay dpy = 0x%0.8p, EGLConfig config = 0x%0.8p, const EGLint *attrib_list = 0x%0.8p)",\r
+                 dpy, config, attrib_list);\r
+\r
+       egl::Display *display = static_cast<egl::Display*>(dpy);\r
+\r
+       if(!validateConfig(display, config))\r
+       {\r
+               return EGL_NO_SURFACE;\r
+       }\r
+\r
+       return display->createOffscreenSurface(config, attrib_list);\r
 }\r
 \r
 EGLSurface EGLAPIENTRY eglCreatePixmapSurface(EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint *attrib_list)\r
 {\r
-    TRACE("(EGLDisplay dpy = 0x%0.8p, EGLConfig config = 0x%0.8p, EGLNativePixmapType pixmap = 0x%0.8p, "\r
-          "const EGLint *attrib_list = 0x%0.8p)", dpy, config, pixmap, attrib_list);\r
+       TRACE("(EGLDisplay dpy = 0x%0.8p, EGLConfig config = 0x%0.8p, EGLNativePixmapType pixmap = 0x%0.8p, "\r
+                 "const EGLint *attrib_list = 0x%0.8p)", dpy, config, pixmap, attrib_list);\r
 \r
-    try\r
-    {\r
-        egl::Display *display = static_cast<egl::Display*>(dpy);\r
+       egl::Display *display = static_cast<egl::Display*>(dpy);\r
 \r
-        if(!validateConfig(display, config))\r
-        {\r
-            return EGL_NO_SURFACE;\r
-        }\r
+       if(!validateConfig(display, config))\r
+       {\r
+               return EGL_NO_SURFACE;\r
+       }\r
 \r
-        UNIMPLEMENTED();   // FIXME\r
+       UNIMPLEMENTED();   // FIXME\r
 \r
-        return success(EGL_NO_SURFACE);\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(EGL_BAD_ALLOC, EGL_NO_SURFACE);\r
-    }\r
-\r
-    return EGL_NO_SURFACE;\r
+       return success(EGL_NO_SURFACE);\r
 }\r
 \r
 EGLBoolean EGLAPIENTRY eglDestroySurface(EGLDisplay dpy, EGLSurface surface)\r
 {\r
-    TRACE("(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p)", dpy, surface);\r
-\r
-    try\r
-    {\r
-        egl::Display *display = static_cast<egl::Display*>(dpy);\r
-        egl::Surface *eglSurface = static_cast<egl::Surface*>(surface);\r
+       TRACE("(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p)", dpy, surface);\r
 \r
-        if(!validateSurface(display, eglSurface))\r
-        {\r
-            return EGL_FALSE;\r
-        }\r
+       egl::Display *display = static_cast<egl::Display*>(dpy);\r
+       egl::Surface *eglSurface = static_cast<egl::Surface*>(surface);\r
 \r
-        if(surface == EGL_NO_SURFACE)\r
-        {\r
-            return error(EGL_BAD_SURFACE, EGL_FALSE);\r
-        }\r
+       if(!validateSurface(display, eglSurface))\r
+       {\r
+               return EGL_FALSE;\r
+       }\r
 \r
-        display->destroySurface((egl::Surface*)surface);\r
+       if(surface == EGL_NO_SURFACE)\r
+       {\r
+               return error(EGL_BAD_SURFACE, EGL_FALSE);\r
+       }\r
 \r
-        return success(EGL_TRUE);\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(EGL_BAD_ALLOC, EGL_FALSE);\r
-    }\r
+       display->destroySurface((egl::Surface*)surface);\r
 \r
-    return EGL_FALSE;\r
+       return success(EGL_TRUE);\r
 }\r
 \r
 EGLBoolean EGLAPIENTRY eglQuerySurface(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value)\r
 {\r
-    TRACE("(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p, EGLint attribute = %d, EGLint *value = 0x%0.8p)",\r
-          dpy, surface, attribute, value);\r
-\r
-    try\r
-    {\r
-        egl::Display *display = static_cast<egl::Display*>(dpy);\r
-        egl::Surface *eglSurface = (egl::Surface*)surface;\r
-\r
-        if(!validateSurface(display, eglSurface))\r
-        {\r
-            return EGL_FALSE;\r
-        }\r
-\r
-        if(surface == EGL_NO_SURFACE)\r
-        {\r
-            return error(EGL_BAD_SURFACE, EGL_FALSE);\r
-        }\r
-\r
-        switch(attribute)\r
-        {\r
-          case EGL_VG_ALPHA_FORMAT:\r
-            UNIMPLEMENTED();   // FIXME\r
-            break;\r
-          case EGL_VG_COLORSPACE:\r
-            UNIMPLEMENTED();   // FIXME\r
-            break;\r
-          case EGL_CONFIG_ID:\r
-            *value = eglSurface->getConfigID();\r
-            break;\r
-          case EGL_HEIGHT:\r
-            *value = eglSurface->getHeight();\r
-            break;\r
-          case EGL_HORIZONTAL_RESOLUTION:\r
-            UNIMPLEMENTED();   // FIXME\r
-            break;\r
-          case EGL_LARGEST_PBUFFER:\r
-            UNIMPLEMENTED();   // FIXME\r
-            break;\r
-          case EGL_MIPMAP_TEXTURE:\r
-            UNIMPLEMENTED();   // FIXME\r
-            break;\r
-          case EGL_MIPMAP_LEVEL:\r
-            UNIMPLEMENTED();   // FIXME\r
-            break;\r
-          case EGL_MULTISAMPLE_RESOLVE:\r
-            UNIMPLEMENTED();   // FIXME\r
-            break;\r
-          case EGL_PIXEL_ASPECT_RATIO:\r
-            *value = eglSurface->getPixelAspectRatio();\r
-            break;\r
-          case EGL_RENDER_BUFFER:\r
-            *value = eglSurface->getRenderBuffer();\r
-            break;\r
-          case EGL_SWAP_BEHAVIOR:\r
-            *value = eglSurface->getSwapBehavior();\r
-            break;\r
-          case EGL_TEXTURE_FORMAT:\r
-            *value = eglSurface->getTextureFormat();\r
-            break;\r
-          case EGL_TEXTURE_TARGET:\r
-            *value = eglSurface->getTextureTarget();\r
-            break;\r
-          case EGL_VERTICAL_RESOLUTION:\r
-            UNIMPLEMENTED();   // FIXME\r
-            break;\r
-          case EGL_WIDTH:\r
-            *value = eglSurface->getWidth();\r
-            break;\r
-          default:\r
-            return error(EGL_BAD_ATTRIBUTE, EGL_FALSE);\r
-        }\r
-\r
-        return success(EGL_TRUE);\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(EGL_BAD_ALLOC, EGL_FALSE);\r
-    }\r
-\r
-    return EGL_FALSE;\r
+       TRACE("(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p, EGLint attribute = %d, EGLint *value = 0x%0.8p)",\r
+                 dpy, surface, attribute, value);\r
+\r
+       egl::Display *display = static_cast<egl::Display*>(dpy);\r
+       egl::Surface *eglSurface = (egl::Surface*)surface;\r
+\r
+       if(!validateSurface(display, eglSurface))\r
+       {\r
+               return EGL_FALSE;\r
+       }\r
+\r
+       if(surface == EGL_NO_SURFACE)\r
+       {\r
+               return error(EGL_BAD_SURFACE, EGL_FALSE);\r
+       }\r
+\r
+       switch(attribute)\r
+       {\r
+       case EGL_VG_ALPHA_FORMAT:\r
+               UNIMPLEMENTED();   // FIXME\r
+               break;\r
+       case EGL_VG_COLORSPACE:\r
+               UNIMPLEMENTED();   // FIXME\r
+               break;\r
+       case EGL_CONFIG_ID:\r
+               *value = eglSurface->getConfigID();\r
+               break;\r
+       case EGL_HEIGHT:\r
+               *value = eglSurface->getHeight();\r
+               break;\r
+       case EGL_HORIZONTAL_RESOLUTION:\r
+               UNIMPLEMENTED();   // FIXME\r
+               break;\r
+       case EGL_LARGEST_PBUFFER:\r
+               UNIMPLEMENTED();   // FIXME\r
+               break;\r
+       case EGL_MIPMAP_TEXTURE:\r
+               UNIMPLEMENTED();   // FIXME\r
+               break;\r
+       case EGL_MIPMAP_LEVEL:\r
+               UNIMPLEMENTED();   // FIXME\r
+               break;\r
+       case EGL_MULTISAMPLE_RESOLVE:\r
+               UNIMPLEMENTED();   // FIXME\r
+               break;\r
+       case EGL_PIXEL_ASPECT_RATIO:\r
+               *value = eglSurface->getPixelAspectRatio();\r
+               break;\r
+       case EGL_RENDER_BUFFER:\r
+               *value = eglSurface->getRenderBuffer();\r
+               break;\r
+       case EGL_SWAP_BEHAVIOR:\r
+               *value = eglSurface->getSwapBehavior();\r
+               break;\r
+       case EGL_TEXTURE_FORMAT:\r
+               *value = eglSurface->getTextureFormat();\r
+               break;\r
+       case EGL_TEXTURE_TARGET:\r
+               *value = eglSurface->getTextureTarget();\r
+               break;\r
+       case EGL_VERTICAL_RESOLUTION:\r
+               UNIMPLEMENTED();   // FIXME\r
+               break;\r
+       case EGL_WIDTH:\r
+               *value = eglSurface->getWidth();\r
+               break;\r
+       default:\r
+               return error(EGL_BAD_ATTRIBUTE, EGL_FALSE);\r
+       }\r
+\r
+       return success(EGL_TRUE);\r
 }\r
 \r
 EGLBoolean EGLAPIENTRY eglBindAPI(EGLenum api)\r
 {\r
-    TRACE("(EGLenum api = 0x%X)", api);\r
-\r
-    try\r
-    {\r
-        switch (api)\r
-        {\r
-          case EGL_OPENGL_API:\r
-          case EGL_OPENVG_API:\r
-            return error(EGL_BAD_PARAMETER, EGL_FALSE);   // Not supported by this implementation\r
-          case EGL_OPENGL_ES_API:\r
-            break;\r
-          default:\r
-            return error(EGL_BAD_PARAMETER, EGL_FALSE);\r
-        }\r
-\r
-        egl::setCurrentAPI(api);\r
-\r
-        return success(EGL_TRUE);\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(EGL_BAD_ALLOC, EGL_FALSE);\r
-    }\r
-\r
-    return EGL_FALSE;\r
+       TRACE("(EGLenum api = 0x%X)", api);\r
+\r
+       switch(api)\r
+       {\r
+               case EGL_OPENGL_API:\r
+               case EGL_OPENVG_API:\r
+               return error(EGL_BAD_PARAMETER, EGL_FALSE);   // Not supported by this implementation\r
+               case EGL_OPENGL_ES_API:\r
+               break;\r
+               default:\r
+               return error(EGL_BAD_PARAMETER, EGL_FALSE);\r
+       }\r
+\r
+       egl::setCurrentAPI(api);\r
+\r
+       return success(EGL_TRUE);\r
 }\r
 \r
 EGLenum EGLAPIENTRY eglQueryAPI(void)\r
 {\r
-    TRACE("()");\r
-\r
-    try\r
-    {\r
-        EGLenum API = egl::getCurrentAPI();\r
+       TRACE("()");\r
 \r
-        return success(API);\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(EGL_BAD_ALLOC, EGL_FALSE);\r
-    }\r
+       EGLenum API = egl::getCurrentAPI();\r
 \r
-    return EGL_FALSE;\r
+       return success(API);\r
 }\r
 \r
 EGLBoolean EGLAPIENTRY eglWaitClient(void)\r
 {\r
-    TRACE("()");\r
+       TRACE("()");\r
 \r
-    try\r
-    {\r
-        UNIMPLEMENTED();   // FIXME\r
+       UNIMPLEMENTED();   // FIXME\r
 \r
-        return success(0);\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(EGL_BAD_ALLOC, EGL_FALSE);\r
-    }\r
-\r
-    return EGL_FALSE;\r
+       return success(EGL_FALSE);\r
 }\r
 \r
 EGLBoolean EGLAPIENTRY eglReleaseThread(void)\r
 {\r
-    TRACE("()");\r
-\r
-    try\r
-    {\r
-        eglMakeCurrent(EGL_NO_DISPLAY, EGL_NO_CONTEXT, EGL_NO_SURFACE, EGL_NO_SURFACE);\r
+       TRACE("()");\r
 \r
-        return success(EGL_TRUE);\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(EGL_BAD_ALLOC, EGL_FALSE);\r
-    }\r
+       eglMakeCurrent(EGL_NO_DISPLAY, EGL_NO_CONTEXT, EGL_NO_SURFACE, EGL_NO_SURFACE);\r
 \r
-    return EGL_FALSE;\r
+       return success(EGL_TRUE);\r
 }\r
 \r
 EGLSurface EGLAPIENTRY eglCreatePbufferFromClientBuffer(EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint *attrib_list)\r
 {\r
-    TRACE("(EGLDisplay dpy = 0x%0.8p, EGLenum buftype = 0x%X, EGLClientBuffer buffer = 0x%0.8p, "\r
-          "EGLConfig config = 0x%0.8p, const EGLint *attrib_list = 0x%0.8p)",\r
-          dpy, buftype, buffer, config, attrib_list);\r
+       TRACE("(EGLDisplay dpy = 0x%0.8p, EGLenum buftype = 0x%X, EGLClientBuffer buffer = 0x%0.8p, "\r
+                 "EGLConfig config = 0x%0.8p, const EGLint *attrib_list = 0x%0.8p)",\r
+                 dpy, buftype, buffer, config, attrib_list);\r
 \r
        UNIMPLEMENTED();\r
 \r
-    return error(EGL_BAD_PARAMETER, EGL_NO_SURFACE);\r
+       return error(EGL_BAD_PARAMETER, EGL_NO_SURFACE);\r
 }\r
 \r
 EGLBoolean EGLAPIENTRY eglSurfaceAttrib(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value)\r
 {\r
-    TRACE("(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p, EGLint attribute = %d, EGLint value = %d)",\r
-          dpy, surface, attribute, value);\r
-\r
-    try\r
-    {\r
-        egl::Display *display = static_cast<egl::Display*>(dpy);\r
-        egl::Surface *eglSurface = static_cast<egl::Surface*>(surface);\r
+       TRACE("(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p, EGLint attribute = %d, EGLint value = %d)",\r
+                 dpy, surface, attribute, value);\r
 \r
-        if(!validateSurface(display, eglSurface))\r
-        {\r
-            return EGL_FALSE;\r
-        }\r
+       egl::Display *display = static_cast<egl::Display*>(dpy);\r
+       egl::Surface *eglSurface = static_cast<egl::Surface*>(surface);\r
 \r
-        UNIMPLEMENTED();   // FIXME\r
+       if(!validateSurface(display, eglSurface))\r
+       {\r
+               return EGL_FALSE;\r
+       }\r
 \r
-        return success(EGL_TRUE);\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(EGL_BAD_ALLOC, EGL_FALSE);\r
-    }\r
+       UNIMPLEMENTED();   // FIXME\r
 \r
-    return EGL_FALSE;\r
+       return success(EGL_TRUE);\r
 }\r
 \r
 EGLBoolean EGLAPIENTRY eglBindTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer)\r
 {\r
-    TRACE("(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p, EGLint buffer = %d)", dpy, surface, buffer);\r
+       TRACE("(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p, EGLint buffer = %d)", dpy, surface, buffer);\r
 \r
-    try\r
-    {\r
-        egl::Display *display = static_cast<egl::Display*>(dpy);\r
-        egl::Surface *eglSurface = static_cast<egl::Surface*>(surface);\r
+       egl::Display *display = static_cast<egl::Display*>(dpy);\r
+       egl::Surface *eglSurface = static_cast<egl::Surface*>(surface);\r
 \r
-        if(!validateSurface(display, eglSurface))\r
-        {\r
-            return EGL_FALSE;\r
-        }\r
+       if(!validateSurface(display, eglSurface))\r
+       {\r
+               return EGL_FALSE;\r
+       }\r
 \r
-        if(buffer != EGL_BACK_BUFFER)\r
-        {\r
-            return error(EGL_BAD_PARAMETER, EGL_FALSE);\r
-        }\r
+       if(buffer != EGL_BACK_BUFFER)\r
+       {\r
+               return error(EGL_BAD_PARAMETER, EGL_FALSE);\r
+       }\r
 \r
-        if(surface == EGL_NO_SURFACE || eglSurface->getWindowHandle())\r
-        {\r
-            return error(EGL_BAD_SURFACE, EGL_FALSE);\r
-        }\r
+       if(surface == EGL_NO_SURFACE || eglSurface->getWindowHandle())\r
+       {\r
+               return error(EGL_BAD_SURFACE, EGL_FALSE);\r
+       }\r
 \r
-        if(eglSurface->getBoundTexture())\r
-        {\r
-            return error(EGL_BAD_ACCESS, EGL_FALSE);\r
-        }\r
+       if(eglSurface->getBoundTexture())\r
+       {\r
+               return error(EGL_BAD_ACCESS, EGL_FALSE);\r
+       }\r
 \r
-        if(eglSurface->getTextureFormat() == EGL_NO_TEXTURE)\r
-        {\r
-            return error(EGL_BAD_MATCH, EGL_FALSE);\r
-        }\r
+       if(eglSurface->getTextureFormat() == EGL_NO_TEXTURE)\r
+       {\r
+               return error(EGL_BAD_MATCH, EGL_FALSE);\r
+       }\r
 \r
-               egl::Context *context = static_cast<egl::Context*>(egl::getCurrentContext());\r
-\r
-               if(context)\r
-               {\r
-                       context->bindTexImage(eglSurface);\r
-               }\r
+       egl::Context *context = static_cast<egl::Context*>(egl::getCurrentContext());\r
 \r
-        return success(EGL_TRUE);\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(EGL_BAD_ALLOC, EGL_FALSE);\r
-    }\r
+       if(context)\r
+       {\r
+               context->bindTexImage(eglSurface);\r
+       }\r
 \r
-    return EGL_FALSE;\r
+       return success(EGL_TRUE);\r
 }\r
 \r
 EGLBoolean EGLAPIENTRY eglReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer)\r
 {\r
-    TRACE("(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p, EGLint buffer = %d)", dpy, surface, buffer);\r
-\r
-    try\r
-    {\r
-        egl::Display *display = static_cast<egl::Display*>(dpy);\r
-        egl::Surface *eglSurface = static_cast<egl::Surface*>(surface);\r
-\r
-        if(!validateSurface(display, eglSurface))\r
-        {\r
-            return EGL_FALSE;\r
-        }\r
-\r
-        if(buffer != EGL_BACK_BUFFER)\r
-        {\r
-            return error(EGL_BAD_PARAMETER, EGL_FALSE);\r
-        }\r
-\r
-        if(surface == EGL_NO_SURFACE || eglSurface->getWindowHandle())\r
-        {\r
-            return error(EGL_BAD_SURFACE, EGL_FALSE);\r
-        }\r
-\r
-        if(eglSurface->getTextureFormat() == EGL_NO_TEXTURE)\r
-        {\r
-            return error(EGL_BAD_MATCH, EGL_FALSE);\r
-        }\r
-\r
-        egl::Texture2D *texture = eglSurface->getBoundTexture();\r
-\r
-        if(texture)\r
-        {\r
-            texture->releaseTexImage();\r
-        }\r
-\r
-        return success(EGL_TRUE);\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(EGL_BAD_ALLOC, EGL_FALSE);\r
-    }\r
-\r
-    return EGL_FALSE;\r
+       TRACE("(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p, EGLint buffer = %d)", dpy, surface, buffer);\r
+\r
+       egl::Display *display = static_cast<egl::Display*>(dpy);\r
+       egl::Surface *eglSurface = static_cast<egl::Surface*>(surface);\r
+\r
+       if(!validateSurface(display, eglSurface))\r
+       {\r
+               return EGL_FALSE;\r
+       }\r
+\r
+       if(buffer != EGL_BACK_BUFFER)\r
+       {\r
+               return error(EGL_BAD_PARAMETER, EGL_FALSE);\r
+       }\r
+\r
+       if(surface == EGL_NO_SURFACE || eglSurface->getWindowHandle())\r
+       {\r
+               return error(EGL_BAD_SURFACE, EGL_FALSE);\r
+       }\r
+\r
+       if(eglSurface->getTextureFormat() == EGL_NO_TEXTURE)\r
+       {\r
+               return error(EGL_BAD_MATCH, EGL_FALSE);\r
+       }\r
+\r
+       egl::Texture2D *texture = eglSurface->getBoundTexture();\r
+\r
+       if(texture)\r
+       {\r
+               texture->releaseTexImage();\r
+       }\r
+\r
+       return success(EGL_TRUE);\r
 }\r
 \r
 EGLBoolean EGLAPIENTRY eglSwapInterval(EGLDisplay dpy, EGLint interval)\r
 {\r
-    TRACE("(EGLDisplay dpy = 0x%0.8p, EGLint interval = %d)", dpy, interval);\r
-\r
-    try\r
-    {\r
-        egl::Display *display = static_cast<egl::Display*>(dpy);\r
+       TRACE("(EGLDisplay dpy = 0x%0.8p, EGLint interval = %d)", dpy, interval);\r
 \r
-        if(!validateDisplay(display))\r
-        {\r
-            return EGL_FALSE;\r
-        }\r
+       egl::Display *display = static_cast<egl::Display*>(dpy);\r
 \r
-        egl::Surface *draw_surface = static_cast<egl::Surface*>(egl::getCurrentDrawSurface());\r
+       if(!validateDisplay(display))\r
+       {\r
+               return EGL_FALSE;\r
+       }\r
 \r
-        if(draw_surface == NULL)\r
-        {\r
-            return error(EGL_BAD_SURFACE, EGL_FALSE);\r
-        }\r
+       egl::Surface *draw_surface = static_cast<egl::Surface*>(egl::getCurrentDrawSurface());\r
 \r
-        draw_surface->setSwapInterval(interval);\r
+       if(draw_surface == NULL)\r
+       {\r
+               return error(EGL_BAD_SURFACE, EGL_FALSE);\r
+       }\r
 \r
-        return success(EGL_TRUE);\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(EGL_BAD_ALLOC, EGL_FALSE);\r
-    }\r
+       draw_surface->setSwapInterval(interval);\r
 \r
-    return EGL_FALSE;\r
+       return success(EGL_TRUE);\r
 }\r
 \r
 EGLContext EGLAPIENTRY eglCreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list)\r
 {\r
-    TRACE("(EGLDisplay dpy = 0x%0.8p, EGLConfig config = 0x%0.8p, EGLContext share_context = 0x%0.8p, "\r
-          "const EGLint *attrib_list = 0x%0.8p)", dpy, config, share_context, attrib_list);\r
-\r
-    try\r
-    {\r
-        EGLint clientVersion = 1;\r
-        if(attrib_list)\r
-        {\r
-            for(const EGLint* attribute = attrib_list; attribute[0] != EGL_NONE; attribute += 2)\r
-            {\r
-                if(attribute[0] == EGL_CONTEXT_CLIENT_VERSION)\r
-                {\r
-                    clientVersion = attribute[1];\r
-                }\r
-                else\r
-                {\r
-                    return error(EGL_BAD_ATTRIBUTE, EGL_NO_CONTEXT);\r
-                }\r
-            }\r
-        }\r
-\r
-        egl::Display *display = static_cast<egl::Display*>(dpy);\r
-\r
-        if(!validateConfig(display, config))\r
-        {\r
-            return EGL_NO_CONTEXT;\r
-        }\r
-\r
-        return display->createContext(config, static_cast<egl::Context*>(share_context), clientVersion);\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(EGL_BAD_ALLOC, EGL_NO_CONTEXT);\r
-    }\r
-\r
-    return EGL_NO_CONTEXT;\r
+       TRACE("(EGLDisplay dpy = 0x%0.8p, EGLConfig config = 0x%0.8p, EGLContext share_context = 0x%0.8p, "\r
+                 "const EGLint *attrib_list = 0x%0.8p)", dpy, config, share_context, attrib_list);\r
+\r
+       EGLint clientVersion = 1;\r
+       if(attrib_list)\r
+       {\r
+               for(const EGLint* attribute = attrib_list; attribute[0] != EGL_NONE; attribute += 2)\r
+               {\r
+                       if(attribute[0] == EGL_CONTEXT_CLIENT_VERSION)\r
+                       {\r
+                               clientVersion = attribute[1];\r
+                       }\r
+                       else\r
+                       {\r
+                               return error(EGL_BAD_ATTRIBUTE, EGL_NO_CONTEXT);\r
+                       }\r
+               }\r
+       }\r
+\r
+       egl::Display *display = static_cast<egl::Display*>(dpy);\r
+\r
+       if(!validateConfig(display, config))\r
+       {\r
+               return EGL_NO_CONTEXT;\r
+       }\r
+\r
+       return display->createContext(config, static_cast<egl::Context*>(share_context), clientVersion);\r
 }\r
 \r
 EGLBoolean EGLAPIENTRY eglDestroyContext(EGLDisplay dpy, EGLContext ctx)\r
 {\r
-    TRACE("(EGLDisplay dpy = 0x%0.8p, EGLContext ctx = 0x%0.8p)", dpy, ctx);\r
-\r
-    try\r
-    {\r
-        egl::Display *display = static_cast<egl::Display*>(dpy);\r
-        egl::Context *context = static_cast<egl::Context*>(ctx);\r
+       TRACE("(EGLDisplay dpy = 0x%0.8p, EGLContext ctx = 0x%0.8p)", dpy, ctx);\r
 \r
-        if(!validateContext(display, context))\r
-        {\r
-            return EGL_FALSE;\r
-        }\r
+       egl::Display *display = static_cast<egl::Display*>(dpy);\r
+       egl::Context *context = static_cast<egl::Context*>(ctx);\r
 \r
-        if(ctx == EGL_NO_CONTEXT)\r
-        {\r
-            return error(EGL_BAD_CONTEXT, EGL_FALSE);\r
-        }\r
+       if(!validateContext(display, context))\r
+       {\r
+               return EGL_FALSE;\r
+       }\r
 \r
-        display->destroyContext(context);\r
+       if(ctx == EGL_NO_CONTEXT)\r
+       {\r
+               return error(EGL_BAD_CONTEXT, EGL_FALSE);\r
+       }\r
 \r
-        return success(EGL_TRUE);\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(EGL_BAD_ALLOC, EGL_FALSE);\r
-    }\r
+       display->destroyContext(context);\r
 \r
-    return EGL_FALSE;\r
+       return success(EGL_TRUE);\r
 }\r
 \r
 EGLBoolean EGLAPIENTRY eglMakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx)\r
 {\r
-    TRACE("(EGLDisplay dpy = 0x%0.8p, EGLSurface draw = 0x%0.8p, EGLSurface read = 0x%0.8p, EGLContext ctx = 0x%0.8p)",\r
-          dpy, draw, read, ctx);\r
-\r
-    try\r
-    {\r
-        egl::Display *display = static_cast<egl::Display*>(dpy);\r
-        egl::Context *context = static_cast<egl::Context*>(ctx);\r
+       TRACE("(EGLDisplay dpy = 0x%0.8p, EGLSurface draw = 0x%0.8p, EGLSurface read = 0x%0.8p, EGLContext ctx = 0x%0.8p)",\r
+                 dpy, draw, read, ctx);\r
 \r
-               if(ctx != EGL_NO_CONTEXT || draw != EGL_NO_SURFACE || read != EGL_NO_SURFACE)\r
-               {\r
-                       if(!validateDisplay(display))\r
-                       {\r
-                               return EGL_FALSE;\r
-                       }\r
-               }\r
+       egl::Display *display = static_cast<egl::Display*>(dpy);\r
+       egl::Context *context = static_cast<egl::Context*>(ctx);\r
 \r
-               if(ctx == EGL_NO_CONTEXT && (draw != EGL_NO_SURFACE || read != EGL_NO_SURFACE))\r
+       if(ctx != EGL_NO_CONTEXT || draw != EGL_NO_SURFACE || read != EGL_NO_SURFACE)\r
+       {\r
+               if(!validateDisplay(display))\r
                {\r
-                       return error(EGL_BAD_MATCH, EGL_FALSE);\r
+                       return EGL_FALSE;\r
                }\r
+       }\r
 \r
-        if(ctx != EGL_NO_CONTEXT && !validateContext(display, context))\r
-        {\r
-            return EGL_FALSE;\r
-        }\r
+       if(ctx == EGL_NO_CONTEXT && (draw != EGL_NO_SURFACE || read != EGL_NO_SURFACE))\r
+       {\r
+               return error(EGL_BAD_MATCH, EGL_FALSE);\r
+       }\r
 \r
-        if((draw != EGL_NO_SURFACE && !validateSurface(display, static_cast<egl::Surface*>(draw))) ||\r
-           (read != EGL_NO_SURFACE && !validateSurface(display, static_cast<egl::Surface*>(read))))\r
-        {\r
-            return EGL_FALSE;\r
-        }\r
+       if(ctx != EGL_NO_CONTEXT && !validateContext(display, context))\r
+       {\r
+               return EGL_FALSE;\r
+       }\r
 \r
-               if((draw != EGL_NO_SURFACE) ^ (read != EGL_NO_SURFACE))\r
-               {\r
-                       return error(EGL_BAD_MATCH, EGL_FALSE);\r
-               }\r
+       if((draw != EGL_NO_SURFACE && !validateSurface(display, static_cast<egl::Surface*>(draw))) ||\r
+               (read != EGL_NO_SURFACE && !validateSurface(display, static_cast<egl::Surface*>(read))))\r
+       {\r
+               return EGL_FALSE;\r
+       }\r
 \r
-        if(draw != read)\r
-        {\r
-            UNIMPLEMENTED();   // FIXME\r
-        }\r
+       if((draw != EGL_NO_SURFACE) ^ (read != EGL_NO_SURFACE))\r
+       {\r
+               return error(EGL_BAD_MATCH, EGL_FALSE);\r
+       }\r
 \r
-        egl::setCurrentDisplay(dpy);\r
-        egl::setCurrentDrawSurface(draw);\r
-        egl::setCurrentReadSurface(read);\r
-               egl::setCurrentContext(ctx);\r
+       if(draw != read)\r
+       {\r
+               UNIMPLEMENTED();   // FIXME\r
+       }\r
 \r
-               if(context)\r
-               {\r
-                       context->makeCurrent(static_cast<egl::Surface*>(draw));\r
-               }\r
+       egl::setCurrentDisplay(dpy);\r
+       egl::setCurrentDrawSurface(draw);\r
+       egl::setCurrentReadSurface(read);\r
+       egl::setCurrentContext(ctx);\r
 \r
-        return success(EGL_TRUE);\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(EGL_BAD_ALLOC, EGL_FALSE);\r
-    }\r
+       if(context)\r
+       {\r
+               context->makeCurrent(static_cast<egl::Surface*>(draw));\r
+       }\r
 \r
-    return EGL_FALSE;\r
+       return success(EGL_TRUE);\r
 }\r
 \r
 EGLContext EGLAPIENTRY eglGetCurrentContext(void)\r
 {\r
-    TRACE("()");\r
-\r
-    try\r
-    {\r
-               EGLContext context = egl::getCurrentContext();\r
+       TRACE("()");\r
 \r
-               return success(context);\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(EGL_BAD_ALLOC, EGL_NO_CONTEXT);\r
-    }\r
+       EGLContext context = egl::getCurrentContext();\r
 \r
-    return EGL_NO_CONTEXT;\r
+       return success(context);\r
 }\r
 \r
 EGLSurface EGLAPIENTRY eglGetCurrentSurface(EGLint readdraw)\r
 {\r
-    TRACE("(EGLint readdraw = %d)", readdraw);\r
-\r
-    try\r
-    {\r
-        if(readdraw == EGL_READ)\r
-        {\r
-            EGLSurface read = egl::getCurrentReadSurface();\r
-            return success(read);\r
-        }\r
-        else if(readdraw == EGL_DRAW)\r
-        {\r
-            EGLSurface draw = egl::getCurrentDrawSurface();\r
-            return success(draw);\r
-        }\r
-        else\r
-        {\r
-            return error(EGL_BAD_PARAMETER, EGL_NO_SURFACE);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(EGL_BAD_ALLOC, EGL_NO_SURFACE);\r
-    }\r
-\r
-    return EGL_NO_SURFACE;\r
+       TRACE("(EGLint readdraw = %d)", readdraw);\r
+\r
+       if(readdraw == EGL_READ)\r
+       {\r
+               EGLSurface read = egl::getCurrentReadSurface();\r
+               return success(read);\r
+       }\r
+       else if(readdraw == EGL_DRAW)\r
+       {\r
+               EGLSurface draw = egl::getCurrentDrawSurface();\r
+               return success(draw);\r
+       }\r
+       else\r
+       {\r
+               return error(EGL_BAD_PARAMETER, EGL_NO_SURFACE);\r
+       }\r
 }\r
 \r
 EGLDisplay EGLAPIENTRY eglGetCurrentDisplay(void)\r
 {\r
-    TRACE("()");\r
-\r
-    try\r
-    {\r
-        EGLDisplay dpy = egl::getCurrentDisplay();\r
+       TRACE("()");\r
 \r
-        return success(dpy);\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(EGL_BAD_ALLOC, EGL_NO_DISPLAY);\r
-    }\r
+       EGLDisplay dpy = egl::getCurrentDisplay();\r
 \r
-    return EGL_NO_DISPLAY;\r
+       return success(dpy);\r
 }\r
 \r
 EGLBoolean EGLAPIENTRY eglQueryContext(EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value)\r
 {\r
-    TRACE("(EGLDisplay dpy = 0x%0.8p, EGLContext ctx = 0x%0.8p, EGLint attribute = %d, EGLint *value = 0x%0.8p)",\r
-          dpy, ctx, attribute, value);\r
-\r
-    try\r
-    {\r
-        egl::Display *display = static_cast<egl::Display*>(dpy);\r
-        egl::Context *context = static_cast<egl::Context*>(ctx);\r
+       TRACE("(EGLDisplay dpy = 0x%0.8p, EGLContext ctx = 0x%0.8p, EGLint attribute = %d, EGLint *value = 0x%0.8p)",\r
+                 dpy, ctx, attribute, value);\r
 \r
-        if(!validateContext(display, context))\r
-        {\r
-            return EGL_FALSE;\r
-        }\r
+       egl::Display *display = static_cast<egl::Display*>(dpy);\r
+       egl::Context *context = static_cast<egl::Context*>(ctx);\r
 \r
-        UNIMPLEMENTED();   // FIXME\r
+       if(!validateContext(display, context))\r
+       {\r
+               return EGL_FALSE;\r
+       }\r
 \r
-        return success(0);\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(EGL_BAD_ALLOC, EGL_FALSE);\r
-    }\r
+       UNIMPLEMENTED();   // FIXME\r
 \r
-    return EGL_FALSE;\r
+       return success(0);\r
 }\r
 \r
 EGLBoolean EGLAPIENTRY eglWaitGL(void)\r
 {\r
-    TRACE("()");\r
+       TRACE("()");\r
 \r
-    try\r
-    {\r
-        UNIMPLEMENTED();   // FIXME\r
+       UNIMPLEMENTED();   // FIXME\r
 \r
-        return success(0);\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(EGL_BAD_ALLOC, EGL_FALSE);\r
-    }\r
-\r
-    return EGL_FALSE;\r
+       return success(EGL_FALSE);\r
 }\r
 \r
 EGLBoolean EGLAPIENTRY eglWaitNative(EGLint engine)\r
 {\r
-    TRACE("(EGLint engine = %d)", engine);\r
-\r
-    try\r
-    {\r
-        UNIMPLEMENTED();   // FIXME\r
+       TRACE("(EGLint engine = %d)", engine);\r
 \r
-        return success(0);\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(EGL_BAD_ALLOC, EGL_FALSE);\r
-    }\r
+       UNIMPLEMENTED();   // FIXME\r
 \r
-    return EGL_FALSE;\r
+       return success(EGL_FALSE);\r
 }\r
 \r
 EGLBoolean EGLAPIENTRY eglSwapBuffers(EGLDisplay dpy, EGLSurface surface)\r
 {\r
-    TRACE("(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p)", dpy, surface);\r
-\r
-    try\r
-    {\r
-        egl::Display *display = static_cast<egl::Display*>(dpy);\r
-        egl::Surface *eglSurface = (egl::Surface*)surface;\r
+       TRACE("(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p)", dpy, surface);\r
 \r
-        if(!validateSurface(display, eglSurface))\r
-        {\r
-            return EGL_FALSE;\r
-        }\r
+       egl::Display *display = static_cast<egl::Display*>(dpy);\r
+       egl::Surface *eglSurface = (egl::Surface*)surface;\r
 \r
-        if(surface == EGL_NO_SURFACE)\r
-        {\r
-            return error(EGL_BAD_SURFACE, EGL_FALSE);\r
-        }\r
+       if(!validateSurface(display, eglSurface))\r
+       {\r
+               return EGL_FALSE;\r
+       }\r
 \r
-        eglSurface->swap();\r
+       if(surface == EGL_NO_SURFACE)\r
+       {\r
+               return error(EGL_BAD_SURFACE, EGL_FALSE);\r
+       }\r
 \r
-        return success(EGL_TRUE);\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(EGL_BAD_ALLOC, EGL_FALSE);\r
-    }\r
+       eglSurface->swap();\r
 \r
-    return EGL_FALSE;\r
+       return success(EGL_TRUE);\r
 }\r
 \r
 EGLBoolean EGLAPIENTRY eglCopyBuffers(EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target)\r
 {\r
-    TRACE("(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p, EGLNativePixmapType target = 0x%0.8p)", dpy, surface, target);\r
+       TRACE("(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p, EGLNativePixmapType target = 0x%0.8p)", dpy, surface, target);\r
 \r
-    try\r
-    {\r
-        egl::Display *display = static_cast<egl::Display*>(dpy);\r
-        egl::Surface *eglSurface = static_cast<egl::Surface*>(surface);\r
+       egl::Display *display = static_cast<egl::Display*>(dpy);\r
+       egl::Surface *eglSurface = static_cast<egl::Surface*>(surface);\r
 \r
-        if(!validateSurface(display, eglSurface))\r
-        {\r
-            return EGL_FALSE;\r
-        }\r
+       if(!validateSurface(display, eglSurface))\r
+       {\r
+               return EGL_FALSE;\r
+       }\r
 \r
-        UNIMPLEMENTED();   // FIXME\r
+       UNIMPLEMENTED();   // FIXME\r
 \r
-        return success(0);\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(EGL_BAD_ALLOC, EGL_FALSE);\r
-    }\r
-\r
-    return EGL_FALSE;\r
+       return success(EGL_FALSE);\r
 }\r
 \r
 EGLImageKHR EGLAPIENTRY eglCreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list)\r
 {\r
        TRACE("(EGLDisplay dpy = 0x%0.8p, EGLContext ctx = 0x%0.8p, EGLenum target = 0x%X, buffer = 0x%0.8p, const EGLint attrib_list = 0x%0.8p)", dpy, ctx, target, buffer, attrib_list);\r
 \r
-    try\r
-    {\r
-        egl::Display *display = static_cast<egl::Display*>(dpy);\r
-        egl::Context *context = static_cast<egl::Context*>(ctx);\r
-\r
-        if(!validateDisplay(display))\r
-        {\r
-            return error(EGL_BAD_DISPLAY, EGL_NO_IMAGE_KHR);\r
-        }\r
-\r
-        if(context != EGL_NO_CONTEXT && !display->isValidContext(context))\r
-        {\r
-            return error(EGL_BAD_CONTEXT, EGL_NO_IMAGE_KHR);\r
-        }\r
-\r
-        EGLenum imagePreserved = EGL_FALSE;\r
-        GLuint textureLevel = 0;\r
-        if(attrib_list)\r
-        {\r
-            for(const EGLint *attribute = attrib_list; attribute[0] != EGL_NONE; attribute += 2)\r
-            {\r
-                if(attribute[0] == EGL_IMAGE_PRESERVED_KHR)\r
-                {\r
-                    imagePreserved = attribute[1];\r
-                }\r
-                else if(attribute[0] == EGL_GL_TEXTURE_LEVEL_KHR)\r
-                {\r
-                    textureLevel = attribute[1];\r
-                }\r
-                else\r
-                {\r
-                    return error(EGL_BAD_ATTRIBUTE, EGL_NO_IMAGE_KHR);\r
-                }\r
-            }\r
-        }\r
-\r
-        GLuint name = reinterpret_cast<intptr_t>(buffer);\r
-\r
-        if(name == 0)\r
-        {\r
-            return error(EGL_BAD_PARAMETER, EGL_NO_IMAGE_KHR);\r
-        }\r
-\r
-               EGLenum validationResult = context->validateSharedImage(target, name, textureLevel);\r
-\r
-               if(validationResult != EGL_SUCCESS)\r
+       egl::Display *display = static_cast<egl::Display*>(dpy);\r
+       egl::Context *context = static_cast<egl::Context*>(ctx);\r
+\r
+       if(!validateDisplay(display))\r
+       {\r
+               return error(EGL_BAD_DISPLAY, EGL_NO_IMAGE_KHR);\r
+       }\r
+\r
+       if(context != EGL_NO_CONTEXT && !display->isValidContext(context))\r
+       {\r
+               return error(EGL_BAD_CONTEXT, EGL_NO_IMAGE_KHR);\r
+       }\r
+\r
+       EGLenum imagePreserved = EGL_FALSE;\r
+       GLuint textureLevel = 0;\r
+       if(attrib_list)\r
+       {\r
+               for(const EGLint *attribute = attrib_list; attribute[0] != EGL_NONE; attribute += 2)\r
                {\r
-                       return error(validationResult, EGL_NO_IMAGE_KHR);\r
+                       if(attribute[0] == EGL_IMAGE_PRESERVED_KHR)\r
+                       {\r
+                               imagePreserved = attribute[1];\r
+                       }\r
+                       else if(attribute[0] == EGL_GL_TEXTURE_LEVEL_KHR)\r
+                       {\r
+                               textureLevel = attribute[1];\r
+                       }\r
+                       else\r
+                       {\r
+                               return error(EGL_BAD_ATTRIBUTE, EGL_NO_IMAGE_KHR);\r
+                       }\r
                }\r
+       }\r
+\r
+       GLuint name = reinterpret_cast<intptr_t>(buffer);\r
+\r
+       if(name == 0)\r
+       {\r
+               return error(EGL_BAD_PARAMETER, EGL_NO_IMAGE_KHR);\r
+       }\r
 \r
-        egl::Image *image = context->createSharedImage(target, name, textureLevel);\r
+       EGLenum validationResult = context->validateSharedImage(target, name, textureLevel);\r
 \r
-        if(!image)\r
-        {\r
-            return error(EGL_BAD_MATCH, EGL_NO_IMAGE_KHR);\r
-        }\r
+       if(validationResult != EGL_SUCCESS)\r
+       {\r
+               return error(validationResult, EGL_NO_IMAGE_KHR);\r
+       }\r
 \r
-        if(image->getMultiSampleDepth() > 1)\r
-        {\r
-            return error(EGL_BAD_PARAMETER, EGL_NO_IMAGE_KHR);\r
-        }\r
+       egl::Image *image = context->createSharedImage(target, name, textureLevel);\r
 \r
-        return success((EGLImageKHR)image);\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(EGL_BAD_ALLOC, EGL_NO_IMAGE_KHR);\r
-    }\r
+       if(!image)\r
+       {\r
+               return error(EGL_BAD_MATCH, EGL_NO_IMAGE_KHR);\r
+       }\r
 \r
-    return EGL_NO_IMAGE_KHR;\r
+       if(image->getMultiSampleDepth() > 1)\r
+       {\r
+               return error(EGL_BAD_PARAMETER, EGL_NO_IMAGE_KHR);\r
+       }\r
+\r
+       return success((EGLImageKHR)image);\r
 }\r
 \r
 EGLBoolean EGLAPIENTRY eglDestroyImageKHR(EGLDisplay dpy, EGLImageKHR image)\r
 {\r
        TRACE("(EGLDisplay dpy = 0x%0.8p, EGLImageKHR image = 0x%0.8p)", dpy, image);\r
 \r
-    try\r
-    {\r
-        egl::Display *display = static_cast<egl::Display*>(dpy);\r
-\r
-        if(!validateDisplay(display))\r
-        {\r
-            return error(EGL_BAD_DISPLAY, EGL_FALSE);\r
-        }\r
+       egl::Display *display = static_cast<egl::Display*>(dpy);\r
 \r
-        if(!image)\r
-        {\r
-            return error(EGL_BAD_PARAMETER, EGL_FALSE);\r
-        }\r
+       if(!validateDisplay(display))\r
+       {\r
+               return error(EGL_BAD_DISPLAY, EGL_FALSE);\r
+       }\r
 \r
-        egl::Image *glImage = static_cast<egl::Image*>(image);\r
-        glImage->destroyShared();\r
+       if(!image)\r
+       {\r
+               return error(EGL_BAD_PARAMETER, EGL_FALSE);\r
+       }\r
 \r
-        return success(EGL_TRUE);\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(EGL_BAD_ALLOC, EGL_FALSE);\r
-    }\r
+       egl::Image *glImage = static_cast<egl::Image*>(image);\r
+       glImage->destroyShared();\r
 \r
-    return EGL_FALSE;\r
+       return success(EGL_TRUE);\r
 }\r
 \r
 EGLDisplay EGLAPIENTRY eglGetPlatformDisplayEXT(EGLenum platform, void *native_display, const EGLint *attrib_list)\r
 {\r
-    TRACE("(EGLenum platform = 0x%X, void *native_display = 0x%0.8p, const EGLint *attrib_list = 0x%0.8p)", platform, native_display, attrib_list);\r
-\r
-    try\r
-    {\r
-        return egl::Display::getPlatformDisplay(platform, (EGLNativeDisplayType)native_display);\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(EGL_BAD_ALLOC, EGL_NO_DISPLAY);\r
-    }\r
-\r
-    return EGL_NO_DISPLAY;\r
+       TRACE("(EGLenum platform = 0x%X, void *native_display = 0x%0.8p, const EGLint *attrib_list = 0x%0.8p)", platform, native_display, attrib_list);\r
+\r
+       return egl::Display::getPlatformDisplay(platform, (EGLNativeDisplayType)native_display);\r
 }\r
 \r
 EGLSurface EGLAPIENTRY eglCreatePlatformWindowSurfaceEXT(EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list)\r
 {\r
-    return eglCreateWindowSurface(dpy, config, (EGLNativeWindowType)native_window, attrib_list);\r
+       return eglCreateWindowSurface(dpy, config, (EGLNativeWindowType)native_window, attrib_list);\r
 }\r
 \r
 EGLSurface EGLAPIENTRY eglCreatePlatformPixmapSurfaceEXT(EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLint *attrib_list)\r
 {\r
-    return eglCreatePixmapSurface(dpy, config, (EGLNativePixmapType)native_pixmap, attrib_list);\r
+       return eglCreatePixmapSurface(dpy, config, (EGLNativePixmapType)native_pixmap, attrib_list);\r
 }\r
 \r
 __eglMustCastToProperFunctionPointerType EGLAPIENTRY eglGetProcAddress(const char *procname)\r
 {\r
-    TRACE("(const char *procname = \"%s\")", procname);\r
-\r
-    try\r
-    {\r
-        struct Extension\r
-        {\r
-            const char *name;\r
-            __eglMustCastToProperFunctionPointerType address;\r
-        };\r
-\r
-        static const Extension eglExtensions[] =\r
-        {\r
-                       #define EXTENSION(name) {#name, (__eglMustCastToProperFunctionPointerType)name}\r
-\r
-                       EXTENSION(eglCreateImageKHR),\r
-                       EXTENSION(eglDestroyImageKHR),\r
-            EXTENSION(eglGetPlatformDisplayEXT),\r
-            EXTENSION(eglCreatePlatformWindowSurfaceEXT),\r
-            EXTENSION(eglCreatePlatformPixmapSurfaceEXT),\r
-\r
-                       #undef EXTENSION\r
-               };\r
-\r
-        for(int ext = 0; ext < sizeof(eglExtensions) / sizeof(Extension); ext++)\r
-        {\r
-            if(strcmp(procname, eglExtensions[ext].name) == 0)\r
-            {\r
-                return (__eglMustCastToProperFunctionPointerType)eglExtensions[ext].address;\r
-            }\r
-        }\r
-\r
-               if(es2::getProcAddress != 0)\r
-               {\r
-                       __eglMustCastToProperFunctionPointerType proc = es2::getProcAddress(procname);\r
-                       if(proc) return proc;\r
-               }\r
+       TRACE("(const char *procname = \"%s\")", procname);\r
+\r
+       struct Extension\r
+       {\r
+               const char *name;\r
+               __eglMustCastToProperFunctionPointerType address;\r
+       };\r
 \r
-               if(es1::getProcAddress != 0)\r
+       static const Extension eglExtensions[] =\r
+       {\r
+               #define EXTENSION(name) {#name, (__eglMustCastToProperFunctionPointerType)name}\r
+\r
+               EXTENSION(eglCreateImageKHR),\r
+               EXTENSION(eglDestroyImageKHR),\r
+               EXTENSION(eglGetPlatformDisplayEXT),\r
+               EXTENSION(eglCreatePlatformWindowSurfaceEXT),\r
+               EXTENSION(eglCreatePlatformPixmapSurfaceEXT),\r
+\r
+               #undef EXTENSION\r
+       };\r
+\r
+       for(int ext = 0; ext < sizeof(eglExtensions) / sizeof(Extension); ext++)\r
+       {\r
+               if(strcmp(procname, eglExtensions[ext].name) == 0)\r
                {\r
-                       __eglMustCastToProperFunctionPointerType proc =  es1::getProcAddress(procname);\r
-                       if(proc) return proc;\r
+                       return (__eglMustCastToProperFunctionPointerType)eglExtensions[ext].address;\r
                }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(EGL_BAD_ALLOC, (__eglMustCastToProperFunctionPointerType)NULL);\r
-    }\r
+       }\r
+\r
+       if(es2::getProcAddress != 0)\r
+       {\r
+               __eglMustCastToProperFunctionPointerType proc = es2::getProcAddress(procname);\r
+               if(proc) return proc;\r
+       }\r
+\r
+       if(es1::getProcAddress != 0)\r
+       {\r
+               __eglMustCastToProperFunctionPointerType proc =  es1::getProcAddress(procname);\r
+               if(proc) return proc;\r
+       }\r
 \r
-    return NULL;\r
+       return NULL;\r
 }\r
 }\r
index 62359b9..8179195 100644 (file)
 \r
 static bool validImageSize(GLint level, GLsizei width, GLsizei height)\r
 {\r
-    if(level < 0 || level >= es1::IMPLEMENTATION_MAX_TEXTURE_LEVELS || width < 0 || height < 0)\r
-    {\r
-        return false;\r
-    }\r
+       if(level < 0 || level >= es1::IMPLEMENTATION_MAX_TEXTURE_LEVELS || width < 0 || height < 0)\r
+       {\r
+               return false;\r
+       }\r
 \r
-    return true;\r
+       return true;\r
 }\r
 \r
 static bool validateSubImageParams(bool compressed, GLsizei width, GLsizei height, GLint xoffset, GLint yoffset, GLenum target, GLint level, GLenum format, es1::Texture *texture)\r
 {\r
-    if(!texture)\r
-    {\r
-        return error(GL_INVALID_OPERATION, false);\r
-    }\r
-\r
-    if(compressed != texture->isCompressed(target, level))\r
-    {\r
-        return error(GL_INVALID_OPERATION, false);\r
-    }\r
-\r
-    if(format != GL_NONE_OES && format != texture->getFormat(target, level))\r
-    {\r
-        return error(GL_INVALID_OPERATION, false);\r
-    }\r
-\r
-    if(compressed)\r
-    {\r
-        if((width % 4 != 0 && width != texture->getWidth(target, 0)) ||\r
-           (height % 4 != 0 && height != texture->getHeight(target, 0)))\r
-        {\r
-            return error(GL_INVALID_OPERATION, false);\r
-        }\r
-    }\r
+       if(!texture)\r
+       {\r
+               return error(GL_INVALID_OPERATION, false);\r
+       }\r
+\r
+       if(compressed != texture->isCompressed(target, level))\r
+       {\r
+               return error(GL_INVALID_OPERATION, false);\r
+       }\r
+\r
+       if(format != GL_NONE_OES && format != texture->getFormat(target, level))\r
+       {\r
+               return error(GL_INVALID_OPERATION, false);\r
+       }\r
+\r
+       if(compressed)\r
+       {\r
+               if((width % 4 != 0 && width != texture->getWidth(target, 0)) ||\r
+                  (height % 4 != 0 && height != texture->getHeight(target, 0)))\r
+               {\r
+                       return error(GL_INVALID_OPERATION, false);\r
+               }\r
+       }\r
 \r
-    if(xoffset + width > texture->getWidth(target, level) ||\r
-       yoffset + height > texture->getHeight(target, level))\r
-    {\r
-        return error(GL_INVALID_VALUE, false);\r
-    }\r
+       if(xoffset + width > texture->getWidth(target, level) ||\r
+          yoffset + height > texture->getHeight(target, level))\r
+       {\r
+               return error(GL_INVALID_VALUE, false);\r
+       }\r
 \r
-    return true;\r
+       return true;\r
 }\r
 \r
 // Check for combinations of format and type that are valid for ReadPixels\r
 static bool validReadFormatType(GLenum format, GLenum type)\r
 {\r
-    switch(format)\r
-    {\r
-    case GL_RGBA:\r
-        switch (type)\r
-        {\r
-        case GL_UNSIGNED_BYTE:\r
-            break;\r
-        default:\r
-            return false;\r
-        }\r
-        break;\r
-    case GL_BGRA_EXT:\r
-        switch (type)\r
-        {\r
-        case GL_UNSIGNED_BYTE:\r
-        case GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT:\r
-        case GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT:\r
-            break;\r
-        default:\r
-            return false;\r
-        }\r
-        break;\r
-    case es1::IMPLEMENTATION_COLOR_READ_FORMAT:\r
-        switch (type)\r
-        {\r
-        case es1::IMPLEMENTATION_COLOR_READ_TYPE:\r
-            break;\r
-        default:\r
-            return false;\r
-        }\r
-        break;\r
-    default:\r
-        return false;\r
-    }\r
-\r
-    return true;\r
+       switch(format)\r
+       {\r
+       case GL_RGBA:\r
+               switch (type)\r
+               {\r
+               case GL_UNSIGNED_BYTE:\r
+                       break;\r
+               default:\r
+                       return false;\r
+               }\r
+               break;\r
+       case GL_BGRA_EXT:\r
+               switch (type)\r
+               {\r
+               case GL_UNSIGNED_BYTE:\r
+               case GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT:\r
+               case GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT:\r
+                       break;\r
+               default:\r
+                       return false;\r
+               }\r
+               break;\r
+       case es1::IMPLEMENTATION_COLOR_READ_FORMAT:\r
+               switch (type)\r
+               {\r
+               case es1::IMPLEMENTATION_COLOR_READ_TYPE:\r
+                       break;\r
+               default:\r
+                       return false;\r
+               }\r
+               break;\r
+       default:\r
+               return false;\r
+       }\r
+\r
+       return true;\r
 }\r
 \r
 extern "C"\r
@@ -132,85 +132,85 @@ EGLint EGLAPIENTRY eglGetError(void)
 \r
 EGLDisplay EGLAPIENTRY eglGetDisplay(EGLNativeDisplayType display_id)\r
 {\r
-    static auto eglGetDisplay = (EGLDisplay (EGLAPIENTRY*)(EGLNativeDisplayType display_id))getProcAddress(libEGL, "eglGetDisplay");\r
+       static auto eglGetDisplay = (EGLDisplay (EGLAPIENTRY*)(EGLNativeDisplayType display_id))getProcAddress(libEGL, "eglGetDisplay");\r
        return eglGetDisplay(display_id);\r
 }\r
 \r
 EGLBoolean EGLAPIENTRY eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor)\r
 {\r
-    static auto eglInitialize = (EGLBoolean (EGLAPIENTRY*)(EGLDisplay dpy, EGLint *major, EGLint *minor))getProcAddress(libEGL, "eglInitialize");\r
+       static auto eglInitialize = (EGLBoolean (EGLAPIENTRY*)(EGLDisplay dpy, EGLint *major, EGLint *minor))getProcAddress(libEGL, "eglInitialize");\r
        return eglInitialize(dpy, major, minor);\r
 }\r
 \r
 EGLBoolean EGLAPIENTRY eglTerminate(EGLDisplay dpy)\r
 {\r
-    static auto eglTerminate = (EGLBoolean (EGLAPIENTRY*)(EGLDisplay dpy))getProcAddress(libEGL, "eglTerminate");\r
+       static auto eglTerminate = (EGLBoolean (EGLAPIENTRY*)(EGLDisplay dpy))getProcAddress(libEGL, "eglTerminate");\r
        return eglTerminate(dpy);\r
 }\r
 \r
 const char *EGLAPIENTRY eglQueryString(EGLDisplay dpy, EGLint name)\r
 {\r
-    static auto eglQueryString = (const char *(EGLAPIENTRY*)(EGLDisplay dpy, EGLint name))getProcAddress(libEGL, "eglQueryString");\r
+       static auto eglQueryString = (const char *(EGLAPIENTRY*)(EGLDisplay dpy, EGLint name))getProcAddress(libEGL, "eglQueryString");\r
        return eglQueryString(dpy, name);\r
 }\r
 \r
 EGLBoolean EGLAPIENTRY eglGetConfigs(EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config)\r
 {\r
-    static auto eglGetConfigs = (EGLBoolean (EGLAPIENTRY*)(EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config))getProcAddress(libEGL, "eglGetConfigs");\r
+       static auto eglGetConfigs = (EGLBoolean (EGLAPIENTRY*)(EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config))getProcAddress(libEGL, "eglGetConfigs");\r
        return eglGetConfigs(dpy, configs, config_size, num_config);\r
 }\r
 \r
 EGLBoolean EGLAPIENTRY eglChooseConfig(EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config)\r
 {\r
-    static auto eglChooseConfig = (EGLBoolean (EGLAPIENTRY*)(EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config))getProcAddress(libEGL, "eglChooseConfig");\r
+       static auto eglChooseConfig = (EGLBoolean (EGLAPIENTRY*)(EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config))getProcAddress(libEGL, "eglChooseConfig");\r
        return eglChooseConfig(dpy, attrib_list, configs, config_size, num_config);\r
 }\r
 \r
 EGLBoolean EGLAPIENTRY eglGetConfigAttrib(EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value)\r
 {\r
-    static auto eglGetConfigAttrib = (EGLBoolean (EGLAPIENTRY*)(EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value))getProcAddress(libEGL, "eglGetConfigAttrib");\r
+       static auto eglGetConfigAttrib = (EGLBoolean (EGLAPIENTRY*)(EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value))getProcAddress(libEGL, "eglGetConfigAttrib");\r
        return eglGetConfigAttrib(dpy, config, attribute, value);\r
 }\r
 \r
 EGLSurface EGLAPIENTRY eglCreateWindowSurface(EGLDisplay dpy, EGLConfig config, EGLNativeWindowType window, const EGLint *attrib_list)\r
 {\r
-    static auto eglCreateWindowSurface = (EGLSurface (EGLAPIENTRY*)(EGLDisplay dpy, EGLConfig config, EGLNativeWindowType window, const EGLint *attrib_list))getProcAddress(libEGL, "eglCreateWindowSurface");\r
+       static auto eglCreateWindowSurface = (EGLSurface (EGLAPIENTRY*)(EGLDisplay dpy, EGLConfig config, EGLNativeWindowType window, const EGLint *attrib_list))getProcAddress(libEGL, "eglCreateWindowSurface");\r
        return eglCreateWindowSurface(dpy, config, window, attrib_list);\r
 }\r
 \r
 EGLSurface EGLAPIENTRY eglCreatePbufferSurface(EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list)\r
 {\r
-    static auto eglCreatePbufferSurface = (EGLSurface (EGLAPIENTRY*)(EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list))getProcAddress(libEGL, "eglCreatePbufferSurface");\r
+       static auto eglCreatePbufferSurface = (EGLSurface (EGLAPIENTRY*)(EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list))getProcAddress(libEGL, "eglCreatePbufferSurface");\r
        return eglCreatePbufferSurface(dpy, config, attrib_list);\r
 }\r
 \r
 EGLSurface EGLAPIENTRY eglCreatePixmapSurface(EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint *attrib_list)\r
 {\r
-    static auto eglCreatePixmapSurface = (EGLSurface (EGLAPIENTRY*)(EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint *attrib_list))getProcAddress(libEGL, "eglCreatePixmapSurface");\r
+       static auto eglCreatePixmapSurface = (EGLSurface (EGLAPIENTRY*)(EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint *attrib_list))getProcAddress(libEGL, "eglCreatePixmapSurface");\r
        return eglCreatePixmapSurface(dpy, config, pixmap, attrib_list);\r
 }\r
 \r
 EGLBoolean EGLAPIENTRY eglDestroySurface(EGLDisplay dpy, EGLSurface surface)\r
 {\r
-    static auto eglDestroySurface = (EGLBoolean (EGLAPIENTRY*)(EGLDisplay dpy, EGLSurface surface))getProcAddress(libEGL, "eglDestroySurface");\r
+       static auto eglDestroySurface = (EGLBoolean (EGLAPIENTRY*)(EGLDisplay dpy, EGLSurface surface))getProcAddress(libEGL, "eglDestroySurface");\r
        return eglDestroySurface(dpy, surface);\r
 }\r
 \r
 EGLBoolean EGLAPIENTRY eglQuerySurface(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value)\r
 {\r
-    static auto eglQuerySurface = (EGLBoolean (EGLAPIENTRY*)(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value))getProcAddress(libEGL, "eglQuerySurface");\r
+       static auto eglQuerySurface = (EGLBoolean (EGLAPIENTRY*)(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value))getProcAddress(libEGL, "eglQuerySurface");\r
        return eglQuerySurface(dpy, surface, attribute, value);\r
 }\r
 \r
 EGLBoolean EGLAPIENTRY eglBindAPI(EGLenum api)\r
 {\r
-    static auto eglBindAPI = (EGLBoolean (EGLAPIENTRY*)(EGLenum api))getProcAddress(libEGL, "eglBindAPI");\r
+       static auto eglBindAPI = (EGLBoolean (EGLAPIENTRY*)(EGLenum api))getProcAddress(libEGL, "eglBindAPI");\r
        return eglBindAPI(api);\r
 }\r
 \r
 EGLenum EGLAPIENTRY eglQueryAPI(void)\r
 {\r
-    static auto eglQueryAPI = (EGLenum (EGLAPIENTRY*)(void))getProcAddress(libEGL, "eglQueryAPI");\r
+       static auto eglQueryAPI = (EGLenum (EGLAPIENTRY*)(void))getProcAddress(libEGL, "eglQueryAPI");\r
        return eglQueryAPI();\r
 }\r
 \r
@@ -222,146 +222,139 @@ EGLBoolean EGLAPIENTRY eglWaitClient(void)
 \r
 EGLBoolean EGLAPIENTRY eglReleaseThread(void)\r
 {\r
-    static auto eglReleaseThread = (EGLBoolean (EGLAPIENTRY*)(void))getProcAddress(libEGL, "eglReleaseThread");\r
+       static auto eglReleaseThread = (EGLBoolean (EGLAPIENTRY*)(void))getProcAddress(libEGL, "eglReleaseThread");\r
        return eglReleaseThread();\r
 }\r
 \r
 EGLSurface EGLAPIENTRY eglCreatePbufferFromClientBuffer(EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint *attrib_list)\r
 {\r
-    static auto eglCreatePbufferFromClientBuffer = (EGLSurface (EGLAPIENTRY*)(EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint *attrib_list))getProcAddress(libEGL, "eglCreatePbufferFromClientBuffer");\r
+       static auto eglCreatePbufferFromClientBuffer = (EGLSurface (EGLAPIENTRY*)(EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint *attrib_list))getProcAddress(libEGL, "eglCreatePbufferFromClientBuffer");\r
        return eglCreatePbufferFromClientBuffer(dpy, buftype, buffer, config, attrib_list);\r
 }\r
 \r
 EGLBoolean EGLAPIENTRY eglSurfaceAttrib(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value)\r
 {\r
-    static auto eglSurfaceAttrib = (EGLBoolean (EGLAPIENTRY*)(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value))getProcAddress(libEGL, "eglSurfaceAttrib");\r
+       static auto eglSurfaceAttrib = (EGLBoolean (EGLAPIENTRY*)(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value))getProcAddress(libEGL, "eglSurfaceAttrib");\r
        return eglSurfaceAttrib(dpy, surface, attribute, value);\r
 }\r
 \r
 EGLBoolean EGLAPIENTRY eglBindTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer)\r
 {\r
-    static auto eglBindTexImage = (EGLBoolean (EGLAPIENTRY*)(EGLDisplay dpy, EGLSurface surface, EGLint buffer))getProcAddress(libEGL, "eglBindTexImage");\r
+       static auto eglBindTexImage = (EGLBoolean (EGLAPIENTRY*)(EGLDisplay dpy, EGLSurface surface, EGLint buffer))getProcAddress(libEGL, "eglBindTexImage");\r
        return eglBindTexImage(dpy, surface, buffer);\r
 }\r
 \r
 EGLBoolean EGLAPIENTRY eglReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer)\r
 {\r
-    static auto eglReleaseTexImage = (EGLBoolean (EGLAPIENTRY*)(EGLDisplay dpy, EGLSurface surface, EGLint buffer))getProcAddress(libEGL, "eglReleaseTexImage");\r
+       static auto eglReleaseTexImage = (EGLBoolean (EGLAPIENTRY*)(EGLDisplay dpy, EGLSurface surface, EGLint buffer))getProcAddress(libEGL, "eglReleaseTexImage");\r
        return eglReleaseTexImage(dpy, surface, buffer);\r
 }\r
 \r
 EGLBoolean EGLAPIENTRY eglSwapInterval(EGLDisplay dpy, EGLint interval)\r
 {\r
-    static auto eglSwapInterval = (EGLBoolean (EGLAPIENTRY*)(EGLDisplay dpy, EGLint interval))getProcAddress(libEGL, "eglSwapInterval");\r
+       static auto eglSwapInterval = (EGLBoolean (EGLAPIENTRY*)(EGLDisplay dpy, EGLint interval))getProcAddress(libEGL, "eglSwapInterval");\r
        return eglSwapInterval(dpy, interval);\r
 }\r
 \r
 EGLContext EGLAPIENTRY eglCreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list)\r
 {\r
-    static auto eglCreateContext = (EGLContext (EGLAPIENTRY*)(EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list))getProcAddress(libEGL, "eglCreateContext");\r
+       static auto eglCreateContext = (EGLContext (EGLAPIENTRY*)(EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list))getProcAddress(libEGL, "eglCreateContext");\r
        return eglCreateContext(dpy, config, share_context, attrib_list);\r
 }\r
 \r
 EGLBoolean EGLAPIENTRY eglDestroyContext(EGLDisplay dpy, EGLContext ctx)\r
 {\r
-    static auto eglDestroyContext = (EGLBoolean (EGLAPIENTRY*)(EGLDisplay dpy, EGLContext ctx))getProcAddress(libEGL, "eglDestroyContext");\r
+       static auto eglDestroyContext = (EGLBoolean (EGLAPIENTRY*)(EGLDisplay dpy, EGLContext ctx))getProcAddress(libEGL, "eglDestroyContext");\r
        return eglDestroyContext(dpy, ctx);\r
 }\r
 \r
 EGLBoolean EGLAPIENTRY eglMakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx)\r
 {\r
-    static auto eglMakeCurrent = (EGLBoolean (EGLAPIENTRY*)(EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx))getProcAddress(libEGL, "eglMakeCurrent");\r
+       static auto eglMakeCurrent = (EGLBoolean (EGLAPIENTRY*)(EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx))getProcAddress(libEGL, "eglMakeCurrent");\r
        return eglMakeCurrent(dpy, draw, read, ctx);\r
 }\r
 \r
 EGLContext EGLAPIENTRY eglGetCurrentContext(void)\r
 {\r
-    static auto eglGetCurrentContext = (EGLContext (EGLAPIENTRY*)(void))getProcAddress(libEGL, "eglGetCurrentContext");\r
+       static auto eglGetCurrentContext = (EGLContext (EGLAPIENTRY*)(void))getProcAddress(libEGL, "eglGetCurrentContext");\r
        return eglGetCurrentContext();\r
 }\r
 \r
 EGLSurface EGLAPIENTRY eglGetCurrentSurface(EGLint readdraw)\r
 {\r
-    static auto eglGetCurrentSurface = (EGLSurface (EGLAPIENTRY*)(EGLint readdraw))getProcAddress(libEGL, "eglGetCurrentSurface");\r
+       static auto eglGetCurrentSurface = (EGLSurface (EGLAPIENTRY*)(EGLint readdraw))getProcAddress(libEGL, "eglGetCurrentSurface");\r
        return eglGetCurrentSurface(readdraw);\r
 }\r
 \r
 EGLDisplay EGLAPIENTRY eglGetCurrentDisplay(void)\r
 {\r
-    static auto eglGetCurrentDisplay = (EGLDisplay (EGLAPIENTRY*)(void))getProcAddress(libEGL, "eglGetCurrentDisplay");\r
+       static auto eglGetCurrentDisplay = (EGLDisplay (EGLAPIENTRY*)(void))getProcAddress(libEGL, "eglGetCurrentDisplay");\r
        return eglGetCurrentDisplay();\r
 }\r
 \r
 EGLBoolean EGLAPIENTRY eglQueryContext(EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value)\r
 {\r
-    static auto eglQueryContext = (EGLBoolean (EGLAPIENTRY*)(EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value))getProcAddress(libEGL, "eglQueryContext");\r
+       static auto eglQueryContext = (EGLBoolean (EGLAPIENTRY*)(EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value))getProcAddress(libEGL, "eglQueryContext");\r
        return eglQueryContext(dpy, ctx, attribute, value);\r
 }\r
 \r
 EGLBoolean EGLAPIENTRY eglWaitGL(void)\r
 {\r
-    static auto eglWaitGL = (EGLBoolean (EGLAPIENTRY*)(void))getProcAddress(libEGL, "eglWaitGL");\r
+       static auto eglWaitGL = (EGLBoolean (EGLAPIENTRY*)(void))getProcAddress(libEGL, "eglWaitGL");\r
        return eglWaitGL();\r
 }\r
 \r
 EGLBoolean EGLAPIENTRY eglWaitNative(EGLint engine)\r
 {\r
-    static auto eglWaitNative = (EGLBoolean (EGLAPIENTRY*)(EGLint engine))getProcAddress(libEGL, "eglWaitNative");\r
+       static auto eglWaitNative = (EGLBoolean (EGLAPIENTRY*)(EGLint engine))getProcAddress(libEGL, "eglWaitNative");\r
        return eglWaitNative(engine);\r
 }\r
 \r
 EGLBoolean EGLAPIENTRY eglSwapBuffers(EGLDisplay dpy, EGLSurface surface)\r
 {\r
-    static auto eglSwapBuffers = (EGLBoolean (EGLAPIENTRY*)(EGLDisplay dpy, EGLSurface surface))getProcAddress(libEGL, "eglSwapBuffers");\r
+       static auto eglSwapBuffers = (EGLBoolean (EGLAPIENTRY*)(EGLDisplay dpy, EGLSurface surface))getProcAddress(libEGL, "eglSwapBuffers");\r
        return eglSwapBuffers(dpy, surface);\r
 }\r
 \r
 EGLBoolean EGLAPIENTRY eglCopyBuffers(EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target)\r
 {\r
-    static auto eglCopyBuffers = (EGLBoolean (EGLAPIENTRY*)(EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target))getProcAddress(libEGL, "eglCopyBuffers");\r
+       static auto eglCopyBuffers = (EGLBoolean (EGLAPIENTRY*)(EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target))getProcAddress(libEGL, "eglCopyBuffers");\r
        return eglCopyBuffers(dpy, surface, target);\r
 }\r
 \r
 EGLImageKHR EGLAPIENTRY eglCreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list)\r
 {\r
-    static auto eglCreateImageKHR = (EGLImageKHR (EGLAPIENTRY*)(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list))getProcAddress(libEGL, "eglCreateImageKHR");\r
+       static auto eglCreateImageKHR = (EGLImageKHR (EGLAPIENTRY*)(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list))getProcAddress(libEGL, "eglCreateImageKHR");\r
        return eglCreateImageKHR(dpy, ctx, target, buffer, attrib_list);\r
 }\r
 \r
 EGLBoolean EGLAPIENTRY eglDestroyImageKHR(EGLDisplay dpy, EGLImageKHR image)\r
 {\r
-    static auto eglDestroyImageKHR = (EGLBoolean (EGLAPIENTRY*)(EGLDisplay dpy, EGLImageKHR image))getProcAddress(libEGL, "eglDestroyImageKHR");\r
+       static auto eglDestroyImageKHR = (EGLBoolean (EGLAPIENTRY*)(EGLDisplay dpy, EGLImageKHR image))getProcAddress(libEGL, "eglDestroyImageKHR");\r
        return eglDestroyImageKHR(dpy, image);\r
 }\r
 \r
 __eglMustCastToProperFunctionPointerType EGLAPIENTRY eglGetProcAddress(const char *procname)\r
 {\r
-    static auto eglGetProcAddress = (__eglMustCastToProperFunctionPointerType (EGLAPIENTRY*)(const char*))getProcAddress(libEGL, "eglGetProcAddress");\r
+       static auto eglGetProcAddress = (__eglMustCastToProperFunctionPointerType (EGLAPIENTRY*)(const char*))getProcAddress(libEGL, "eglGetProcAddress");\r
        return eglGetProcAddress(procname);\r
 }\r
 \r
 void GL_APIENTRY glActiveTexture(GLenum texture)\r
 {\r
-    TRACE("(GLenum texture = 0x%X)", texture);\r
+       TRACE("(GLenum texture = 0x%X)", texture);\r
 \r
-    try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
+       es1::Context *context = es1::getContext();\r
 \r
-        if(context)\r
-        {\r
-            if(texture < GL_TEXTURE0 || texture > GL_TEXTURE0 + es1::MAX_TEXTURE_UNITS - 1)\r
-            {\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
+       if(context)\r
+       {\r
+               if(texture < GL_TEXTURE0 || texture > GL_TEXTURE0 + es1::MAX_TEXTURE_UNITS - 1)\r
+               {\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
 \r
-            context->setActiveSampler(texture - GL_TEXTURE0);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+               context->setActiveSampler(texture - GL_TEXTURE0);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glAlphaFunc(GLenum func, GLclampf ref)\r
@@ -376,475 +369,390 @@ void GL_APIENTRY glAlphaFuncx(GLenum func, GLclampx ref)
 \r
 void GL_APIENTRY glBindBuffer(GLenum target, GLuint buffer)\r
 {\r
-    TRACE("(GLenum target = 0x%X, GLuint buffer = %d)", target, buffer);\r
-\r
-    try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
-\r
-        if(context)\r
-        {\r
-            switch(target)\r
-            {\r
-              case GL_ARRAY_BUFFER:\r
-                context->bindArrayBuffer(buffer);\r
-                return;\r
-              case GL_ELEMENT_ARRAY_BUFFER:\r
-                context->bindElementArrayBuffer(buffer);\r
-                return;\r
-              default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLenum target = 0x%X, GLuint buffer = %d)", target, buffer);\r
+\r
+       es1::Context *context = es1::getContext();\r
+\r
+       if(context)\r
+       {\r
+               switch(target)\r
+               {\r
+                       case GL_ARRAY_BUFFER:\r
+                       context->bindArrayBuffer(buffer);\r
+                       return;\r
+                       case GL_ELEMENT_ARRAY_BUFFER:\r
+                       context->bindElementArrayBuffer(buffer);\r
+                       return;\r
+                       default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glBindFramebuffer(GLenum target, GLuint framebuffer)\r
 {\r
-    TRACE("(GLenum target = 0x%X, GLuint framebuffer = %d)", target, framebuffer);\r
+       TRACE("(GLenum target = 0x%X, GLuint framebuffer = %d)", target, framebuffer);\r
 \r
-    try\r
-    {\r
-        if(target != GL_FRAMEBUFFER_OES)\r
-        {\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
+       if(target != GL_FRAMEBUFFER_OES)\r
+       {\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
 \r
-        es1::Context *context = es1::getContext();\r
+       es1::Context *context = es1::getContext();\r
 \r
-        if(context)\r
-        {\r
-            context->bindFramebuffer(framebuffer);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               context->bindFramebuffer(framebuffer);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glBindFramebufferOES(GLenum target, GLuint framebuffer)\r
 {\r
-    TRACE("(GLenum target = 0x%X, GLuint framebuffer = %d)", target, framebuffer);\r
+       TRACE("(GLenum target = 0x%X, GLuint framebuffer = %d)", target, framebuffer);\r
 \r
-    try\r
-    {\r
-        if(target != GL_FRAMEBUFFER_OES)\r
-        {\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
+       if(target != GL_FRAMEBUFFER_OES)\r
+       {\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
 \r
-        es1::Context *context = es1::getContext();\r
+       es1::Context *context = es1::getContext();\r
 \r
-        if(context)\r
-        {\r
-            context->bindFramebuffer(framebuffer);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               context->bindFramebuffer(framebuffer);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glBindRenderbufferOES(GLenum target, GLuint renderbuffer)\r
 {\r
-    TRACE("(GLenum target = 0x%X, GLuint renderbuffer = %d)", target, renderbuffer);\r
-\r
-    try\r
-    {\r
-        if(target != GL_RENDERBUFFER_OES)\r
-        {\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        es1::Context *context = es1::getContext();\r
-\r
-        if(context)\r
-        {\r
-                       if (renderbuffer != 0 && !context->getRenderbuffer(renderbuffer))
-                       {
-                               // [OpenGL ES 2.0.25] Section 4.4.3 page 112\r
-                               // [OpenGL ES 3.0.2] Section 4.4.2 page 201\r
-                               // 'renderbuffer' must be either zero or the name of an existing renderbuffer object of\r
-                               // type 'renderbuffertarget', otherwise an INVALID_OPERATION error is generated.\r
-                               return error(GL_INVALID_OPERATION);
-                       }\r
+       TRACE("(GLenum target = 0x%X, GLuint renderbuffer = %d)", target, renderbuffer);\r
 \r
-            context->bindRenderbuffer(renderbuffer);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+       if(target != GL_RENDERBUFFER_OES)\r
+       {\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       es1::Context *context = es1::getContext();\r
+\r
+       if(context)\r
+       {\r
+               if (renderbuffer != 0 && !context->getRenderbuffer(renderbuffer))\r
+               {\r
+                       // [OpenGL ES 2.0.25] Section 4.4.3 page 112\r
+                       // [OpenGL ES 3.0.2] Section 4.4.2 page 201\r
+                       // 'renderbuffer' must be either zero or the name of an existing renderbuffer object of\r
+                       // type 'renderbuffertarget', otherwise an INVALID_OPERATION error is generated.\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
 \r
+               context->bindRenderbuffer(renderbuffer);\r
+       }\r
+}\r
 \r
 void GL_APIENTRY glBindTexture(GLenum target, GLuint texture)\r
 {\r
-    TRACE("(GLenum target = 0x%X, GLuint texture = %d)", target, texture);\r
-\r
-    try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
-\r
-        if(context)\r
-        {\r
-            es1::Texture *textureObject = context->getTexture(texture);\r
-\r
-            if(textureObject && textureObject->getTarget() != target && texture != 0)\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-\r
-            switch(target)\r
-            {\r
-            case GL_TEXTURE_2D:\r
-                context->bindTexture2D(texture);\r
-                return;\r
-            case GL_TEXTURE_EXTERNAL_OES:\r
-                context->bindTextureExternal(texture);\r
-                return;\r
-            default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLenum target = 0x%X, GLuint texture = %d)", target, texture);\r
+\r
+       es1::Context *context = es1::getContext();\r
+\r
+       if(context)\r
+       {\r
+               es1::Texture *textureObject = context->getTexture(texture);\r
+\r
+               if(textureObject && textureObject->getTarget() != target && texture != 0)\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
+\r
+               switch(target)\r
+               {\r
+               case GL_TEXTURE_2D:\r
+                       context->bindTexture2D(texture);\r
+                       return;\r
+               case GL_TEXTURE_EXTERNAL_OES:\r
+                       context->bindTextureExternal(texture);\r
+                       return;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glBlendEquationSeparateOES(GLenum modeRGB, GLenum modeAlpha);\r
 \r
 void GL_APIENTRY glBlendEquationOES(GLenum mode)\r
 {\r
-    glBlendEquationSeparateOES(mode, mode);\r
+       glBlendEquationSeparateOES(mode, mode);\r
 }\r
 \r
 void GL_APIENTRY glBlendEquationSeparateOES(GLenum modeRGB, GLenum modeAlpha)\r
 {\r
-    TRACE("(GLenum modeRGB = 0x%X, GLenum modeAlpha = 0x%X)", modeRGB, modeAlpha);\r
-\r
-    try\r
-    {\r
-        switch(modeRGB)\r
-        {\r
-        case GL_FUNC_ADD_OES:\r
-        case GL_FUNC_SUBTRACT_OES:\r
-        case GL_FUNC_REVERSE_SUBTRACT_OES:\r
-        case GL_MIN_EXT:\r
-        case GL_MAX_EXT:\r
-            break;\r
-        default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        switch(modeAlpha)\r
-        {\r
-        case GL_FUNC_ADD_OES:\r
-        case GL_FUNC_SUBTRACT_OES:\r
-        case GL_FUNC_REVERSE_SUBTRACT_OES:\r
-        case GL_MIN_EXT:\r
-        case GL_MAX_EXT:\r
-            break;\r
-        default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        es1::Context *context = es1::getContext();\r
-\r
-        if(context)\r
-        {\r
-            context->setBlendEquation(modeRGB, modeAlpha);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLenum modeRGB = 0x%X, GLenum modeAlpha = 0x%X)", modeRGB, modeAlpha);\r
+\r
+       switch(modeRGB)\r
+       {\r
+       case GL_FUNC_ADD_OES:\r
+       case GL_FUNC_SUBTRACT_OES:\r
+       case GL_FUNC_REVERSE_SUBTRACT_OES:\r
+       case GL_MIN_EXT:\r
+       case GL_MAX_EXT:\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       switch(modeAlpha)\r
+       {\r
+       case GL_FUNC_ADD_OES:\r
+       case GL_FUNC_SUBTRACT_OES:\r
+       case GL_FUNC_REVERSE_SUBTRACT_OES:\r
+       case GL_MIN_EXT:\r
+       case GL_MAX_EXT:\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       es1::Context *context = es1::getContext();\r
+\r
+       if(context)\r
+       {\r
+               context->setBlendEquation(modeRGB, modeAlpha);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glBlendFuncSeparateOES(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);\r
 \r
 void GL_APIENTRY glBlendFunc(GLenum sfactor, GLenum dfactor)\r
 {\r
-    glBlendFuncSeparateOES(sfactor, dfactor, sfactor, dfactor);\r
+       glBlendFuncSeparateOES(sfactor, dfactor, sfactor, dfactor);\r
 }\r
 \r
 void GL_APIENTRY glBlendFuncSeparateOES(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)\r
 {\r
-    TRACE("(GLenum srcRGB = 0x%X, GLenum dstRGB = 0x%X, GLenum srcAlpha = 0x%X, GLenum dstAlpha = 0x%X)",\r
-          srcRGB, dstRGB, srcAlpha, dstAlpha);\r
-\r
-    try\r
-    {\r
-        switch(srcRGB)\r
-        {\r
-          case GL_ZERO:\r
-          case GL_ONE:\r
-          case GL_SRC_COLOR:\r
-          case GL_ONE_MINUS_SRC_COLOR:\r
-          case GL_DST_COLOR:\r
-          case GL_ONE_MINUS_DST_COLOR:\r
-          case GL_SRC_ALPHA:\r
-          case GL_ONE_MINUS_SRC_ALPHA:\r
-          case GL_DST_ALPHA:\r
-          case GL_ONE_MINUS_DST_ALPHA:\r
-          case GL_SRC_ALPHA_SATURATE:\r
-            break;\r
-          default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        switch(dstRGB)\r
-        {\r
-          case GL_ZERO:\r
-          case GL_ONE:\r
-          case GL_SRC_COLOR:\r
-          case GL_ONE_MINUS_SRC_COLOR:\r
-          case GL_DST_COLOR:\r
-          case GL_ONE_MINUS_DST_COLOR:\r
-          case GL_SRC_ALPHA:\r
-          case GL_ONE_MINUS_SRC_ALPHA:\r
-          case GL_DST_ALPHA:\r
-          case GL_ONE_MINUS_DST_ALPHA:\r
-            break;\r
-          default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        switch(srcAlpha)\r
-        {\r
-          case GL_ZERO:\r
-          case GL_ONE:\r
-          case GL_SRC_COLOR:\r
-          case GL_ONE_MINUS_SRC_COLOR:\r
-          case GL_DST_COLOR:\r
-          case GL_ONE_MINUS_DST_COLOR:\r
-          case GL_SRC_ALPHA:\r
-          case GL_ONE_MINUS_SRC_ALPHA:\r
-          case GL_DST_ALPHA:\r
-          case GL_ONE_MINUS_DST_ALPHA:\r
-          case GL_SRC_ALPHA_SATURATE:\r
-            break;\r
-          default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        switch(dstAlpha)\r
-        {\r
-          case GL_ZERO:\r
-          case GL_ONE:\r
-          case GL_SRC_COLOR:\r
-          case GL_ONE_MINUS_SRC_COLOR:\r
-          case GL_DST_COLOR:\r
-          case GL_ONE_MINUS_DST_COLOR:\r
-          case GL_SRC_ALPHA:\r
-          case GL_ONE_MINUS_SRC_ALPHA:\r
-          case GL_DST_ALPHA:\r
-          case GL_ONE_MINUS_DST_ALPHA:\r
-            break;\r
-          default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        es1::Context *context = es1::getContext();\r
-\r
-        if(context)\r
-        {\r
-            context->setBlendFactors(srcRGB, dstRGB, srcAlpha, dstAlpha);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLenum srcRGB = 0x%X, GLenum dstRGB = 0x%X, GLenum srcAlpha = 0x%X, GLenum dstAlpha = 0x%X)",\r
+                 srcRGB, dstRGB, srcAlpha, dstAlpha);\r
+\r
+       switch(srcRGB)\r
+       {\r
+               case GL_ZERO:\r
+               case GL_ONE:\r
+               case GL_SRC_COLOR:\r
+               case GL_ONE_MINUS_SRC_COLOR:\r
+               case GL_DST_COLOR:\r
+               case GL_ONE_MINUS_DST_COLOR:\r
+               case GL_SRC_ALPHA:\r
+               case GL_ONE_MINUS_SRC_ALPHA:\r
+               case GL_DST_ALPHA:\r
+               case GL_ONE_MINUS_DST_ALPHA:\r
+               case GL_SRC_ALPHA_SATURATE:\r
+               break;\r
+               default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       switch(dstRGB)\r
+       {\r
+               case GL_ZERO:\r
+               case GL_ONE:\r
+               case GL_SRC_COLOR:\r
+               case GL_ONE_MINUS_SRC_COLOR:\r
+               case GL_DST_COLOR:\r
+               case GL_ONE_MINUS_DST_COLOR:\r
+               case GL_SRC_ALPHA:\r
+               case GL_ONE_MINUS_SRC_ALPHA:\r
+               case GL_DST_ALPHA:\r
+               case GL_ONE_MINUS_DST_ALPHA:\r
+               break;\r
+               default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       switch(srcAlpha)\r
+       {\r
+               case GL_ZERO:\r
+               case GL_ONE:\r
+               case GL_SRC_COLOR:\r
+               case GL_ONE_MINUS_SRC_COLOR:\r
+               case GL_DST_COLOR:\r
+               case GL_ONE_MINUS_DST_COLOR:\r
+               case GL_SRC_ALPHA:\r
+               case GL_ONE_MINUS_SRC_ALPHA:\r
+               case GL_DST_ALPHA:\r
+               case GL_ONE_MINUS_DST_ALPHA:\r
+               case GL_SRC_ALPHA_SATURATE:\r
+               break;\r
+               default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       switch(dstAlpha)\r
+       {\r
+               case GL_ZERO:\r
+               case GL_ONE:\r
+               case GL_SRC_COLOR:\r
+               case GL_ONE_MINUS_SRC_COLOR:\r
+               case GL_DST_COLOR:\r
+               case GL_ONE_MINUS_DST_COLOR:\r
+               case GL_SRC_ALPHA:\r
+               case GL_ONE_MINUS_SRC_ALPHA:\r
+               case GL_DST_ALPHA:\r
+               case GL_ONE_MINUS_DST_ALPHA:\r
+               break;\r
+               default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       es1::Context *context = es1::getContext();\r
+\r
+       if(context)\r
+       {\r
+               context->setBlendFactors(srcRGB, dstRGB, srcAlpha, dstAlpha);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glBufferData(GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage)\r
 {\r
-    TRACE("(GLenum target = 0x%X, GLsizeiptr size = %d, const GLvoid* data = 0x%0.8p, GLenum usage = %d)",\r
-          target, size, data, usage);\r
-\r
-    try\r
-    {\r
-        if(size < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        switch(usage)\r
-        {\r
-          case GL_STATIC_DRAW:\r
-          case GL_DYNAMIC_DRAW:\r
-            break;\r
-          default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        es1::Context *context = es1::getContext();\r
-\r
-        if(context)\r
-        {\r
-            es1::Buffer *buffer;\r
-\r
-            switch(target)\r
-            {\r
-              case GL_ARRAY_BUFFER:\r
-                buffer = context->getArrayBuffer();\r
-                break;\r
-              case GL_ELEMENT_ARRAY_BUFFER:\r
-                buffer = context->getElementArrayBuffer();\r
-                break;\r
-              default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-\r
-            if(!buffer)\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-\r
-            buffer->bufferData(data, size, usage);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLenum target = 0x%X, GLsizeiptr size = %d, const GLvoid* data = 0x%0.8p, GLenum usage = %d)",\r
+             target, size, data, usage);\r
+\r
+       if(size < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       switch(usage)\r
+       {\r
+               case GL_STATIC_DRAW:\r
+               case GL_DYNAMIC_DRAW:\r
+               break;\r
+               default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       es1::Context *context = es1::getContext();\r
+\r
+       if(context)\r
+       {\r
+               es1::Buffer *buffer;\r
+\r
+               switch(target)\r
+               {\r
+                       case GL_ARRAY_BUFFER:\r
+                       buffer = context->getArrayBuffer();\r
+                       break;\r
+                       case GL_ELEMENT_ARRAY_BUFFER:\r
+                       buffer = context->getElementArrayBuffer();\r
+                       break;\r
+                       default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+\r
+               if(!buffer)\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
+\r
+               buffer->bufferData(data, size, usage);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data)\r
 {\r
-    TRACE("(GLenum target = 0x%X, GLintptr offset = %d, GLsizeiptr size = %d, const GLvoid* data = 0x%0.8p)",\r
-          target, offset, size, data);\r
-\r
-    try\r
-    {\r
-        if(size < 0 || offset < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        if(data == NULL)\r
-        {\r
-            return;\r
-        }\r
-\r
-        es1::Context *context = es1::getContext();\r
-\r
-        if(context)\r
-        {\r
-            es1::Buffer *buffer;\r
-\r
-            switch(target)\r
-            {\r
-              case GL_ARRAY_BUFFER:\r
-                buffer = context->getArrayBuffer();\r
-                break;\r
-              case GL_ELEMENT_ARRAY_BUFFER:\r
-                buffer = context->getElementArrayBuffer();\r
-                break;\r
-              default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-\r
-            if(!buffer)\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-\r
-            if((size_t)size + offset > buffer->size())\r
-            {\r
-                return error(GL_INVALID_VALUE);\r
-            }\r
-\r
-            buffer->bufferSubData(data, size, offset);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLenum target = 0x%X, GLintptr offset = %d, GLsizeiptr size = %d, const GLvoid* data = 0x%0.8p)",\r
+             target, offset, size, data);\r
+\r
+       if(size < 0 || offset < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       if(data == NULL)\r
+       {\r
+               return;\r
+       }\r
+\r
+       es1::Context *context = es1::getContext();\r
+\r
+       if(context)\r
+       {\r
+               es1::Buffer *buffer;\r
+\r
+               switch(target)\r
+               {\r
+                       case GL_ARRAY_BUFFER:\r
+                       buffer = context->getArrayBuffer();\r
+                       break;\r
+                       case GL_ELEMENT_ARRAY_BUFFER:\r
+                       buffer = context->getElementArrayBuffer();\r
+                       break;\r
+                       default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+\r
+               if(!buffer)\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
+\r
+               if((size_t)size + offset > buffer->size())\r
+               {\r
+                       return error(GL_INVALID_VALUE);\r
+               }\r
+\r
+               buffer->bufferSubData(data, size, offset);\r
+       }\r
 }\r
 \r
 GLenum GL_APIENTRY glCheckFramebufferStatusOES(GLenum target)\r
 {\r
-    TRACE("(GLenum target = 0x%X)", target);\r
+       TRACE("(GLenum target = 0x%X)", target);\r
 \r
-    try\r
-    {\r
-        if(target != GL_FRAMEBUFFER_OES)\r
-        {\r
-            return error(GL_INVALID_ENUM, 0);\r
-        }\r
+       if(target != GL_FRAMEBUFFER_OES)\r
+       {\r
+               return error(GL_INVALID_ENUM, 0);\r
+       }\r
 \r
-        es1::Context *context = es1::getContext();\r
+       es1::Context *context = es1::getContext();\r
 \r
-        if(context)\r
-        {\r
-            es1::Framebuffer *framebuffer = context->getFramebuffer();\r
+       if(context)\r
+       {\r
+               es1::Framebuffer *framebuffer = context->getFramebuffer();\r
 \r
-            return framebuffer->completeness();\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY, 0);\r
-    }\r
+               return framebuffer->completeness();\r
+       }\r
 \r
-    return 0;\r
+       return 0;\r
 }\r
 \r
 void GL_APIENTRY glClear(GLbitfield mask)\r
 {\r
-    TRACE("(GLbitfield mask = %X)", mask);\r
+       TRACE("(GLbitfield mask = %X)", mask);\r
 \r
-    try\r
-    {\r
-               if((mask & ~(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT)) != 0)\r
-               {\r
-                       return error(GL_INVALID_VALUE);\r
-               }\r
+       if((mask & ~(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT)) != 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-        es1::Context *context = es1::getContext();\r
+       es1::Context *context = es1::getContext();\r
 \r
-        if(context)\r
-        {\r
-            context->clear(mask);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               context->clear(mask);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)\r
 {\r
-    TRACE("(GLclampf red = %f, GLclampf green = %f, GLclampf blue = %f, GLclampf alpha = %f)",\r
-          red, green, blue, alpha);\r
+       TRACE("(GLclampf red = %f, GLclampf green = %f, GLclampf blue = %f, GLclampf alpha = %f)",\r
+             red, green, blue, alpha);\r
 \r
-    try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
+       es1::Context *context = es1::getContext();\r
 \r
-        if(context)\r
-        {\r
-            context->setClearColor(red, green, blue, alpha);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               context->setClearColor(red, green, blue, alpha);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glClearColorx(GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha)\r
@@ -854,21 +762,14 @@ void GL_APIENTRY glClearColorx(GLclampx red, GLclampx green, GLclampx blue, GLcl
 \r
 void GL_APIENTRY glClearDepthf(GLclampf depth)\r
 {\r
-    TRACE("(GLclampf depth = %f)", depth);\r
+       TRACE("(GLclampf depth = %f)", depth);\r
 \r
-    try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
+       es1::Context *context = es1::getContext();\r
 \r
-        if(context)\r
-        {\r
-            context->setClearDepth(depth);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               context->setClearDepth(depth);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glClearDepthx(GLclampx depth)\r
@@ -878,49 +779,35 @@ void GL_APIENTRY glClearDepthx(GLclampx depth)
 \r
 void GL_APIENTRY glClearStencil(GLint s)\r
 {\r
-    TRACE("(GLint s = %d)", s);\r
+       TRACE("(GLint s = %d)", s);\r
 \r
-    try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
+       es1::Context *context = es1::getContext();\r
 \r
-        if(context)\r
-        {\r
-            context->setClearStencil(s);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               context->setClearStencil(s);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glClientActiveTexture(GLenum texture)\r
 {\r
        TRACE("(GLenum texture = 0x%X)", texture);\r
 \r
-       try\r
-    {\r
-               switch(texture)\r
-               {\r
-               case GL_TEXTURE0:\r
-               case GL_TEXTURE1:\r
-                       break;\r
-               default:\r
-                       return error(GL_INVALID_ENUM);\r
-               }\r
+       switch(texture)\r
+       {\r
+       case GL_TEXTURE0:\r
+       case GL_TEXTURE1:\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
 \r
-        es1::Context *context = es1::getContext();\r
+       es1::Context *context = es1::getContext();\r
 \r
-        if(context)\r
-        {\r
-            context->clientActiveTexture(texture);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               context->clientActiveTexture(texture);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glClipPlanef(GLenum plane, const GLfloat *equation)\r
@@ -950,71 +837,57 @@ void GL_APIENTRY glColor4x(GLfixed red, GLfixed green, GLfixed blue, GLfixed alp
 \r
 void GL_APIENTRY glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)\r
 {\r
-    TRACE("(GLboolean red = %d, GLboolean green = %d, GLboolean blue = %d, GLboolean alpha = %d)",\r
-          red, green, blue, alpha);\r
+       TRACE("(GLboolean red = %d, GLboolean green = %d, GLboolean blue = %d, GLboolean alpha = %d)",\r
+             red, green, blue, alpha);\r
 \r
-    try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
+       es1::Context *context = es1::getContext();\r
 \r
-        if(context)\r
-        {\r
-            context->setColorMask(red == GL_TRUE, green == GL_TRUE, blue == GL_TRUE, alpha == GL_TRUE);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               context->setColorMask(red == GL_TRUE, green == GL_TRUE, blue == GL_TRUE, alpha == GL_TRUE);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glVertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr)\r
 {\r
-    TRACE("(GLuint index = %d, GLint size = %d, GLenum type = 0x%X, "\r
-          "GLboolean normalized = %d, GLsizei stride = %d, const GLvoid* ptr = 0x%0.8p)",\r
-          index, size, type, normalized, stride, ptr);\r
-\r
-    try\r
-    {\r
-        if(index >= es1::MAX_VERTEX_ATTRIBS)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        if(size < 1 || size > 4)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        switch(type)\r
-        {\r
-        case GL_BYTE:\r
-        case GL_UNSIGNED_BYTE:\r
-        case GL_SHORT:\r
-        case GL_UNSIGNED_SHORT:\r
-        case GL_FIXED:\r
-        case GL_FLOAT:\r
-            break;\r
-        default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        if(stride < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        es1::Context *context = es1::getContext();\r
-\r
-        if(context)\r
-        {\r
-            context->setVertexAttribState(index, context->getArrayBuffer(), size, type, (normalized == GL_TRUE), stride, ptr);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLuint index = %d, GLint size = %d, GLenum type = 0x%X, "\r
+             "GLboolean normalized = %d, GLsizei stride = %d, const GLvoid* ptr = 0x%0.8p)",\r
+             index, size, type, normalized, stride, ptr);\r
+\r
+       if(index >= es1::MAX_VERTEX_ATTRIBS)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       if(size < 1 || size > 4)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       switch(type)\r
+       {\r
+       case GL_BYTE:\r
+       case GL_UNSIGNED_BYTE:\r
+       case GL_SHORT:\r
+       case GL_UNSIGNED_SHORT:\r
+       case GL_FIXED:\r
+       case GL_FLOAT:\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       if(stride < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       es1::Context *context = es1::getContext();\r
+\r
+       if(context)\r
+       {\r
+               context->setVertexAttribState(index, context->getArrayBuffer(), size, type, (normalized == GL_TRUE), stride, ptr);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)\r
@@ -1025,996 +898,848 @@ void GL_APIENTRY glColorPointer(GLint size, GLenum type, GLsizei stride, const G
 void GL_APIENTRY glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height,\r
                                         GLint border, GLsizei imageSize, const GLvoid* data)\r
 {\r
-    TRACE("(GLenum target = 0x%X, GLint level = %d, GLenum internalformat = 0x%X, GLsizei width = %d, "\r
-          "GLsizei height = %d, GLint border = %d, GLsizei imageSize = %d, const GLvoid* data = 0x%0.8p)",\r
-          target, level, internalformat, width, height, border, imageSize, data);\r
-\r
-    try\r
-    {\r
-        if(!validImageSize(level, width, height) || border != 0 || imageSize < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        switch(internalformat)\r
-        {\r
-        case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:\r
-        case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:\r
-                       if(!S3TC_SUPPORT)\r
-            {\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-            break;\r
-               case GL_DEPTH_COMPONENT16_OES:\r
-               case GL_DEPTH_COMPONENT32_OES:\r
-               case GL_DEPTH_STENCIL_OES:\r
-               case GL_DEPTH24_STENCIL8_OES:\r
-                       return error(GL_INVALID_OPERATION);\r
-        default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        if(border != 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        es1::Context *context = es1::getContext();\r
-\r
-        if(context)\r
-        {\r
-                       if(level > es1::IMPLEMENTATION_MAX_TEXTURE_LEVELS)\r
-            {\r
-                return error(GL_INVALID_VALUE);\r
-            }\r
-\r
-            switch(target)\r
-            {\r
-              case GL_TEXTURE_2D:\r
-                if(width > (es1::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level) ||\r
-                    height > (es1::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level))\r
-                {\r
-                    return error(GL_INVALID_VALUE);\r
-                }\r
-                break;\r
-              default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-\r
-            if(imageSize != es1::ComputeCompressedSize(width, height, internalformat))\r
-            {\r
-                return error(GL_INVALID_VALUE);\r
-            }\r
-\r
-            if(target == GL_TEXTURE_2D)\r
-            {\r
-                es1::Texture2D *texture = context->getTexture2D();\r
-\r
-                if(!texture)\r
-                {\r
-                    return error(GL_INVALID_OPERATION);\r
-                }\r
-\r
-                texture->setCompressedImage(level, internalformat, width, height, imageSize, data);\r
-            }\r
-            else UNREACHABLE();\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+       TRACE("(GLenum target = 0x%X, GLint level = %d, GLenum internalformat = 0x%X, GLsizei width = %d, "\r
+             "GLsizei height = %d, GLint border = %d, GLsizei imageSize = %d, const GLvoid* data = 0x%0.8p)",\r
+             target, level, internalformat, width, height, border, imageSize, data);\r
 \r
-void GL_APIENTRY glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,\r
-                                         GLenum format, GLsizei imageSize, const GLvoid* data)\r
-{\r
-    TRACE("(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "\r
-          "GLsizei width = %d, GLsizei height = %d, GLenum format = 0x%X, "\r
-          "GLsizei imageSize = %d, const GLvoid* data = 0x%0.8p)",\r
-          target, level, xoffset, yoffset, width, height, format, imageSize, data);\r
-\r
-    try\r
-    {\r
-        if(!es1::IsTextureTarget(target))\r
-        {\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        if(xoffset < 0 || yoffset < 0 || !validImageSize(level, width, height) || imageSize < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        switch(format)\r
-        {\r
-        case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:\r
-        case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:\r
-                       if(!S3TC_SUPPORT)\r
-            {\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-            break;\r
-        default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        if(width == 0 || height == 0 || data == NULL)\r
-        {\r
-            return;\r
-        }\r
-\r
-        es1::Context *context = es1::getContext();\r
-\r
-        if(context)\r
-        {\r
-            if(level > es1::IMPLEMENTATION_MAX_TEXTURE_LEVELS)\r
-            {\r
-                return error(GL_INVALID_VALUE);\r
-            }\r
-\r
-            if(imageSize != es1::ComputeCompressedSize(width, height, format))\r
-            {\r
-                return error(GL_INVALID_VALUE);\r
-            }\r
-\r
-            if(xoffset % 4 != 0 || yoffset % 4 != 0)\r
-            {\r
-                               // We wait to check the offsets until this point, because the multiple-of-four restriction does not exist unless DXT1 textures are supported\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-\r
-            if(target == GL_TEXTURE_2D)\r
-            {\r
-                es1::Texture2D *texture = context->getTexture2D();\r
-\r
-                if(validateSubImageParams(true, width, height, xoffset, yoffset, target, level, format, texture))\r
-                               {\r
-                                       texture->subImageCompressed(level, xoffset, yoffset, width, height, format, imageSize, data);\r
-                               }\r
-            }\r
-            else UNREACHABLE();\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+       if(!validImageSize(level, width, height) || border != 0 || imageSize < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-void GL_APIENTRY glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)\r
-{\r
-    TRACE("(GLenum target = 0x%X, GLint level = %d, GLenum internalformat = 0x%X, "\r
-          "GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d, GLint border = %d)",\r
-          target, level, internalformat, x, y, width, height, border);\r
-\r
-    try\r
-    {\r
-        if(!validImageSize(level, width, height))\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        if(border != 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        es1::Context *context = es1::getContext();\r
-\r
-        if(context)\r
-        {\r
-            switch(target)\r
-            {\r
-              case GL_TEXTURE_2D:\r
-                if(width > (es1::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level) ||\r
-                   height > (es1::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level))\r
-                {\r
-                    return error(GL_INVALID_VALUE);\r
-                }\r
-                break;\r
-              default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-\r
-            es1::Framebuffer *framebuffer = context->getFramebuffer();\r
-\r
-            if(framebuffer->completeness() != GL_FRAMEBUFFER_COMPLETE_OES)\r
-            {\r
-                return error(GL_INVALID_FRAMEBUFFER_OPERATION_OES);\r
-            }\r
-\r
-            if(context->getFramebufferHandle() != 0 && framebuffer->getColorbuffer()->getSamples() > 1)\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-\r
-            es1::Renderbuffer *source = framebuffer->getColorbuffer();\r
-            GLenum colorbufferFormat = source->getFormat();\r
-\r
-            // [OpenGL ES 2.0.24] table 3.9\r
-            switch(internalformat)\r
-            {\r
-            case GL_ALPHA:\r
-                if(colorbufferFormat != GL_ALPHA &&\r
-                   colorbufferFormat != GL_RGBA &&\r
-                   colorbufferFormat != GL_RGBA4_OES &&\r
-                   colorbufferFormat != GL_RGB5_A1_OES &&\r
-                   colorbufferFormat != GL_RGBA8_OES)\r
-                {\r
-                    return error(GL_INVALID_OPERATION);\r
-                }\r
-                break;\r
-            case GL_LUMINANCE:\r
-            case GL_RGB:\r
-                if(colorbufferFormat != GL_RGB &&\r
-                   colorbufferFormat != GL_RGB565_OES &&\r
-                   colorbufferFormat != GL_RGB8_OES &&\r
-                   colorbufferFormat != GL_RGBA &&\r
-                   colorbufferFormat != GL_RGBA4_OES &&\r
-                   colorbufferFormat != GL_RGB5_A1_OES &&\r
-                   colorbufferFormat != GL_RGBA8_OES)\r
-                {\r
-                    return error(GL_INVALID_OPERATION);\r
-                }\r
-                break;\r
-            case GL_LUMINANCE_ALPHA:\r
-            case GL_RGBA:\r
-                if(colorbufferFormat != GL_RGBA &&\r
-                   colorbufferFormat != GL_RGBA4_OES &&\r
-                   colorbufferFormat != GL_RGB5_A1_OES &&\r
-                   colorbufferFormat != GL_RGBA8_OES)\r
-                 {\r
-                     return error(GL_INVALID_OPERATION);\r
-                 }\r
-                 break;\r
-            case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:\r
-            case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:\r
-                if(S3TC_SUPPORT)\r
-                {\r
-                    return error(GL_INVALID_OPERATION);\r
-                }\r
-                else\r
-                {\r
-                    return error(GL_INVALID_ENUM);\r
-                }\r
-                break;\r
-            default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-\r
-            if(target == GL_TEXTURE_2D)\r
-            {\r
-                es1::Texture2D *texture = context->getTexture2D();\r
-\r
-                if(!texture)\r
-                {\r
-                    return error(GL_INVALID_OPERATION);\r
-                }\r
-\r
-                texture->copyImage(level, internalformat, x, y, width, height, framebuffer);\r
-            }\r
-            else UNREACHABLE();\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+       switch(internalformat)\r
+       {\r
+       case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:\r
+       case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:\r
+               if(!S3TC_SUPPORT)\r
+               {\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+               break;\r
+       case GL_DEPTH_COMPONENT16_OES:\r
+       case GL_DEPTH_COMPONENT32_OES:\r
+       case GL_DEPTH_STENCIL_OES:\r
+       case GL_DEPTH24_STENCIL8_OES:\r
+               return error(GL_INVALID_OPERATION);\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       if(border != 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       es1::Context *context = es1::getContext();\r
+\r
+       if(context)\r
+       {\r
+               if(level > es1::IMPLEMENTATION_MAX_TEXTURE_LEVELS)\r
+               {\r
+                       return error(GL_INVALID_VALUE);\r
+               }\r
 \r
-void GL_APIENTRY glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)\r
-{\r
-    TRACE("(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "\r
-          "GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d)",\r
-          target, level, xoffset, yoffset, x, y, width, height);\r
-\r
-    try\r
-    {\r
-        if(!es1::IsTextureTarget(target))\r
-        {\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        if(level < 0 || xoffset < 0 || yoffset < 0 || width < 0 || height < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        if(std::numeric_limits<GLsizei>::max() - xoffset < width || std::numeric_limits<GLsizei>::max() - yoffset < height)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        if(width == 0 || height == 0)\r
-        {\r
-            return;\r
-        }\r
-\r
-        es1::Context *context = es1::getContext();\r
-\r
-        if(context)\r
-        {\r
-            if(level > es1::IMPLEMENTATION_MAX_TEXTURE_LEVELS)\r
-            {\r
-                return error(GL_INVALID_VALUE);\r
-            }\r
-\r
-            es1::Framebuffer *framebuffer = context->getFramebuffer();\r
-\r
-            if(framebuffer->completeness() != GL_FRAMEBUFFER_COMPLETE_OES)\r
-            {\r
-                return error(GL_INVALID_FRAMEBUFFER_OPERATION_OES);\r
-            }\r
-\r
-            if(context->getFramebufferHandle() != 0 && framebuffer->getColorbuffer()->getSamples() > 1)\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-\r
-            es1::Renderbuffer *source = framebuffer->getColorbuffer();\r
-            GLenum colorbufferFormat = source->getFormat();\r
-            es1::Texture *texture = NULL;\r
-\r
-            if(target == GL_TEXTURE_2D)\r
-            {\r
-                texture = context->getTexture2D();\r
-            }\r
-            else UNREACHABLE();\r
-\r
-            if(!validateSubImageParams(false, width, height, xoffset, yoffset, target, level, GL_NONE_OES, texture))\r
+               switch(target)\r
+               {\r
+               case GL_TEXTURE_2D:\r
+                       if(width > (es1::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level) ||\r
+                               height > (es1::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level))\r
                        {\r
-                               return;\r
+                               return error(GL_INVALID_VALUE);\r
                        }\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
 \r
-            GLenum textureFormat = texture->getFormat(target, level);\r
-\r
-            // [OpenGL ES 2.0.24] table 3.9\r
-            switch(textureFormat)\r
-            {\r
-            case GL_ALPHA:\r
-                if(colorbufferFormat != GL_ALPHA &&\r
-                   colorbufferFormat != GL_RGBA &&\r
-                   colorbufferFormat != GL_RGBA4_OES &&\r
-                   colorbufferFormat != GL_RGB5_A1_OES &&\r
-                   colorbufferFormat != GL_RGBA8_OES)\r
-                {\r
-                    return error(GL_INVALID_OPERATION);\r
-                }\r
-                break;\r
-            case GL_LUMINANCE:\r
-            case GL_RGB:\r
-                if(colorbufferFormat != GL_RGB &&\r
-                   colorbufferFormat != GL_RGB565_OES &&\r
-                   colorbufferFormat != GL_RGB8_OES &&\r
-                   colorbufferFormat != GL_RGBA &&\r
-                   colorbufferFormat != GL_RGBA4_OES &&\r
-                   colorbufferFormat != GL_RGB5_A1_OES &&\r
-                   colorbufferFormat != GL_RGBA8_OES)\r
-                {\r
-                    return error(GL_INVALID_OPERATION);\r
-                }\r
-                break;\r
-            case GL_LUMINANCE_ALPHA:\r
-            case GL_RGBA:\r
-                if(colorbufferFormat != GL_RGBA &&\r
-                   colorbufferFormat != GL_RGBA4_OES &&\r
-                   colorbufferFormat != GL_RGB5_A1_OES &&\r
-                   colorbufferFormat != GL_RGBA8_OES)\r
-                {\r
-                    return error(GL_INVALID_OPERATION);\r
-                }\r
-                break;\r
-            case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:\r
-            case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:\r
-                return error(GL_INVALID_OPERATION);\r
-                       case GL_DEPTH_STENCIL_OES:\r
-                               return error(GL_INVALID_OPERATION);\r
-            default:\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
+               if(imageSize != es1::ComputeCompressedSize(width, height, internalformat))\r
+               {\r
+                       return error(GL_INVALID_VALUE);\r
+               }\r
 \r
-            texture->copySubImage(target, level, xoffset, yoffset, x, y, width, height, framebuffer);\r
-        }\r
-    }\r
+               if(target == GL_TEXTURE_2D)\r
+               {\r
+                       es1::Texture2D *texture = context->getTexture2D();\r
 \r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+                       if(!texture)\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
 \r
-void GL_APIENTRY glCullFace(GLenum mode)\r
-{\r
-    TRACE("(GLenum mode = 0x%X)", mode);\r
-\r
-    try\r
-    {\r
-        switch(mode)\r
-        {\r
-          case GL_FRONT:\r
-          case GL_BACK:\r
-          case GL_FRONT_AND_BACK:\r
-            {\r
-                es1::Context *context = es1::getContext();\r
-\r
-                if(context)\r
-                {\r
-                    context->setCullMode(mode);\r
-                }\r
-            }\r
-            break;\r
-          default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+                       texture->setCompressedImage(level, internalformat, width, height, imageSize, data);\r
+               }\r
+               else UNREACHABLE();\r
+       }\r
 }\r
 \r
-void GL_APIENTRY glDeleteBuffers(GLsizei n, const GLuint* buffers)\r
-{\r
-    TRACE("(GLsizei n = %d, const GLuint* buffers = 0x%0.8p)", n, buffers);\r
-\r
-    try\r
-    {\r
-        if(n < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        es1::Context *context = es1::getContext();\r
-\r
-        if(context)\r
-        {\r
-            for(int i = 0; i < n; i++)\r
-            {\r
-                context->deleteBuffer(buffers[i]);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+void GL_APIENTRY glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,\r
+                                           GLenum format, GLsizei imageSize, const GLvoid* data)\r
+{\r
+       TRACE("(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "\r
+             "GLsizei width = %d, GLsizei height = %d, GLenum format = 0x%X, "\r
+             "GLsizei imageSize = %d, const GLvoid* data = 0x%0.8p)",\r
+             target, level, xoffset, yoffset, width, height, format, imageSize, data);\r
+\r
+       if(!es1::IsTextureTarget(target))\r
+       {\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       if(xoffset < 0 || yoffset < 0 || !validImageSize(level, width, height) || imageSize < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       switch(format)\r
+       {\r
+       case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:\r
+       case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:\r
+               if(!S3TC_SUPPORT)\r
+               {\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
 \r
-void GL_APIENTRY glDeleteFramebuffersOES(GLsizei n, const GLuint* framebuffers)\r
-{\r
-    TRACE("(GLsizei n = %d, const GLuint* framebuffers = 0x%0.8p)", n, framebuffers);\r
-\r
-    try\r
-    {\r
-        if(n < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        es1::Context *context = es1::getContext();\r
-\r
-        if(context)\r
-        {\r
-            for(int i = 0; i < n; i++)\r
-            {\r
-                if(framebuffers[i] != 0)\r
-                {\r
-                    context->deleteFramebuffer(framebuffers[i]);\r
-                }\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+       if(width == 0 || height == 0 || data == NULL)\r
+       {\r
+               return;\r
+       }\r
 \r
-void GL_APIENTRY glDeleteRenderbuffersOES(GLsizei n, const GLuint* renderbuffers)\r
-{\r
-    TRACE("(GLsizei n = %d, const GLuint* renderbuffers = 0x%0.8p)", n, renderbuffers);\r
+       es1::Context *context = es1::getContext();\r
 \r
-    try\r
-    {\r
-        if(n < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+       if(context)\r
+       {\r
+               if(level > es1::IMPLEMENTATION_MAX_TEXTURE_LEVELS)\r
+               {\r
+                       return error(GL_INVALID_VALUE);\r
+               }\r
 \r
-        es1::Context *context = es1::getContext();\r
+               if(imageSize != es1::ComputeCompressedSize(width, height, format))\r
+               {\r
+                       return error(GL_INVALID_VALUE);\r
+               }\r
 \r
-        if(context)\r
-        {\r
-            for(int i = 0; i < n; i++)\r
-            {\r
-                context->deleteRenderbuffer(renderbuffers[i]);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+               if(xoffset % 4 != 0 || yoffset % 4 != 0)\r
+               {\r
+                       // We wait to check the offsets until this point, because the multiple-of-four restriction does not exist unless DXT1 textures are supported\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
 \r
-void GL_APIENTRY glDeleteTextures(GLsizei n, const GLuint* textures)\r
-{\r
-    TRACE("(GLsizei n = %d, const GLuint* textures = 0x%0.8p)", n, textures);\r
-\r
-    try\r
-    {\r
-        if(n < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        es1::Context *context = es1::getContext();\r
-\r
-        if(context)\r
-        {\r
-            for(int i = 0; i < n; i++)\r
-            {\r
-                if(textures[i] != 0)\r
-                {\r
-                    context->deleteTexture(textures[i]);\r
-                }\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+               if(target == GL_TEXTURE_2D)\r
+               {\r
+                       es1::Texture2D *texture = context->getTexture2D();\r
 \r
-void GL_APIENTRY glDepthFunc(GLenum func)\r
-{\r
-    TRACE("(GLenum func = 0x%X)", func);\r
-\r
-    try\r
-    {\r
-        switch(func)\r
-        {\r
-          case GL_NEVER:\r
-          case GL_ALWAYS:\r
-          case GL_LESS:\r
-          case GL_LEQUAL:\r
-          case GL_EQUAL:\r
-          case GL_GREATER:\r
-          case GL_GEQUAL:\r
-          case GL_NOTEQUAL:\r
-            break;\r
-          default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        es1::Context *context = es1::getContext();\r
-\r
-        if(context)\r
-        {\r
-            context->setDepthFunc(func);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+                       if(validateSubImageParams(true, width, height, xoffset, yoffset, target, level, format, texture))\r
+                       {\r
+                               texture->subImageCompressed(level, xoffset, yoffset, width, height, format, imageSize, data);\r
+                       }\r
+               }\r
+               else UNREACHABLE();\r
+       }\r
 }\r
 \r
-void GL_APIENTRY glDepthMask(GLboolean flag)\r
+void GL_APIENTRY glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)\r
 {\r
-    TRACE("(GLboolean flag = %d)", flag);\r
+       TRACE("(GLenum target = 0x%X, GLint level = %d, GLenum internalformat = 0x%X, "\r
+             "GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d, GLint border = %d)",\r
+             target, level, internalformat, x, y, width, height, border);\r
 \r
-    try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
-\r
-        if(context)\r
-        {\r
-            context->setDepthMask(flag != GL_FALSE);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+       if(!validImageSize(level, width, height))\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-void GL_APIENTRY glDepthRangex(GLclampx zNear, GLclampx zFar)\r
-{\r
-       UNIMPLEMENTED();\r
-}\r
+       if(border != 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-void GL_APIENTRY glDepthRangef(GLclampf zNear, GLclampf zFar)\r
-{\r
-    TRACE("(GLclampf zNear = %f, GLclampf zFar = %f)", zNear, zFar);\r
+       es1::Context *context = es1::getContext();\r
 \r
-    try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
+       if(context)\r
+       {\r
+               switch(target)\r
+               {\r
+               case GL_TEXTURE_2D:\r
+                       if(width > (es1::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level) ||\r
+                               height > (es1::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level))\r
+                       {\r
+                               return error(GL_INVALID_VALUE);\r
+                       }\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
 \r
-        if(context)\r
-        {\r
-            context->setDepthRange(zNear, zFar);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+               es1::Framebuffer *framebuffer = context->getFramebuffer();\r
 \r
-void GL_APIENTRY glDisable(GLenum cap)\r
-{\r
-    TRACE("(GLenum cap = 0x%X)", cap);\r
-\r
-    try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
-\r
-        if(context)\r
-        {\r
-            switch(cap)\r
-            {\r
-            case GL_CULL_FACE:                context->setCullFace(false);              break;\r
-            case GL_POLYGON_OFFSET_FILL:      context->setPolygonOffsetFill(false);     break;\r
-            case GL_SAMPLE_ALPHA_TO_COVERAGE: context->setSampleAlphaToCoverage(false); break;\r
-            case GL_SAMPLE_COVERAGE:          context->setSampleCoverage(false);        break;\r
-            case GL_SCISSOR_TEST:             context->setScissorTest(false);           break;\r
-            case GL_STENCIL_TEST:             context->setStencilTest(false);           break;\r
-            case GL_DEPTH_TEST:               context->setDepthTest(false);             break;\r
-            case GL_BLEND:                    context->setBlend(false);                 break;\r
-            case GL_DITHER:                   context->setDither(false);                break;\r
-                       case GL_LIGHTING:                 context->setLighting(false);              break;\r
-                       case GL_LIGHT0:                   context->setLight(0, false);              break;\r
-                       case GL_LIGHT1:                   context->setLight(1, false);              break;\r
-                   case GL_LIGHT2:                   context->setLight(2, false);              break;\r
-                       case GL_LIGHT3:                   context->setLight(3, false);              break;\r
-                       case GL_LIGHT4:                   context->setLight(4, false);              break;\r
-                       case GL_LIGHT5:                   context->setLight(5, false);              break;\r
-                       case GL_LIGHT6:                   context->setLight(6, false);              break;\r
-                       case GL_LIGHT7:                   context->setLight(7, false);              break;\r
-                       case GL_FOG:                      UNIMPLEMENTED(); break;\r
-                       case GL_TEXTURE_2D:               context->setTexture2D(false);             break;\r
-                       case GL_ALPHA_TEST:               UNIMPLEMENTED(); break;\r
-                       case GL_COLOR_LOGIC_OP:           UNIMPLEMENTED(); break;\r
-                       case GL_POINT_SMOOTH:             UNIMPLEMENTED(); break;\r
-                       case GL_LINE_SMOOTH:              UNIMPLEMENTED(); break;\r
-                       case GL_COLOR_MATERIAL:           UNIMPLEMENTED(); break;\r
-                       case GL_NORMALIZE:                UNIMPLEMENTED(); break;\r
-                       case GL_RESCALE_NORMAL:           UNIMPLEMENTED(); break;\r
-                       case GL_VERTEX_ARRAY:             UNIMPLEMENTED(); break;\r
-                       case GL_NORMAL_ARRAY:             UNIMPLEMENTED(); break;\r
-                       case GL_COLOR_ARRAY:              UNIMPLEMENTED(); break;\r
-                       case GL_TEXTURE_COORD_ARRAY:      UNIMPLEMENTED(); break;\r
-                       case GL_MULTISAMPLE:              UNIMPLEMENTED(); break;\r
-                       case GL_SAMPLE_ALPHA_TO_ONE:      UNIMPLEMENTED(); break;\r
-            default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+               if(framebuffer->completeness() != GL_FRAMEBUFFER_COMPLETE_OES)\r
+               {\r
+                       return error(GL_INVALID_FRAMEBUFFER_OPERATION_OES);\r
+               }\r
 \r
-void GL_APIENTRY glDisableClientState(GLenum array)\r
-{\r
-       UNIMPLEMENTED();\r
-}\r
+               if(context->getFramebufferHandle() != 0 && framebuffer->getColorbuffer()->getSamples() > 1)\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
 \r
-void GL_APIENTRY glDrawArrays(GLenum mode, GLint first, GLsizei count)\r
-{\r
-    TRACE("(GLenum mode = 0x%X, GLint first = %d, GLsizei count = %d)", mode, first, count);\r
+               es1::Renderbuffer *source = framebuffer->getColorbuffer();\r
+               GLenum colorbufferFormat = source->getFormat();\r
 \r
-    try\r
-    {\r
-        if(count < 0 || first < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+               // [OpenGL ES 2.0.24] table 3.9\r
+               switch(internalformat)\r
+               {\r
+               case GL_ALPHA:\r
+                       if(colorbufferFormat != GL_ALPHA &&\r
+                          colorbufferFormat != GL_RGBA &&\r
+                          colorbufferFormat != GL_RGBA4_OES &&\r
+                          colorbufferFormat != GL_RGB5_A1_OES &&\r
+                          colorbufferFormat != GL_RGBA8_OES)\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+                       break;\r
+               case GL_LUMINANCE:\r
+               case GL_RGB:\r
+                       if(colorbufferFormat != GL_RGB &&\r
+                          colorbufferFormat != GL_RGB565_OES &&\r
+                          colorbufferFormat != GL_RGB8_OES &&\r
+                          colorbufferFormat != GL_RGBA &&\r
+                          colorbufferFormat != GL_RGBA4_OES &&\r
+                          colorbufferFormat != GL_RGB5_A1_OES &&\r
+                          colorbufferFormat != GL_RGBA8_OES)\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+                       break;\r
+               case GL_LUMINANCE_ALPHA:\r
+               case GL_RGBA:\r
+                       if(colorbufferFormat != GL_RGBA &&\r
+                          colorbufferFormat != GL_RGBA4_OES &&\r
+                          colorbufferFormat != GL_RGB5_A1_OES &&\r
+                          colorbufferFormat != GL_RGBA8_OES)\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+                       break;\r
+               case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:\r
+               case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:\r
+                       if(S3TC_SUPPORT)\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+                       else\r
+                       {\r
+                               return error(GL_INVALID_ENUM);\r
+                       }\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
 \r
-        es1::Context *context = es1::getContext();\r
+               if(target == GL_TEXTURE_2D)\r
+               {\r
+                       es1::Texture2D *texture = context->getTexture2D();\r
 \r
-        if(context)\r
-        {\r
-            context->drawArrays(mode, first, count);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+                       if(!texture)\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
 \r
-void GL_APIENTRY glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices)\r
-{\r
-    TRACE("(GLenum mode = 0x%X, GLsizei count = %d, GLenum type = 0x%X, const GLvoid* indices = 0x%0.8p)",\r
-          mode, count, type, indices);\r
-\r
-    try\r
-    {\r
-        if(count < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        es1::Context *context = es1::getContext();\r
-\r
-        if(context)\r
-        {\r
-            switch(type)\r
-            {\r
-              case GL_UNSIGNED_BYTE:\r
-              case GL_UNSIGNED_SHORT:\r
-              case GL_UNSIGNED_INT:\r
-                break;\r
-              default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-\r
-            context->drawElements(mode, count, type, indices);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+                       texture->copyImage(level, internalformat, x, y, width, height, framebuffer);\r
+               }\r
+               else UNREACHABLE();\r
+       }\r
 }\r
 \r
-void GL_APIENTRY glEnable(GLenum cap)\r
+void GL_APIENTRY glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)\r
 {\r
-    TRACE("(GLenum cap = 0x%X)", cap);\r
-\r
-    try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
-\r
-        if(context)\r
-        {\r
-            switch(cap)\r
-            {\r
-            case GL_CULL_FACE:                context->setCullFace(true);              break;\r
-            case GL_POLYGON_OFFSET_FILL:      context->setPolygonOffsetFill(true);     break;\r
-            case GL_SAMPLE_ALPHA_TO_COVERAGE: context->setSampleAlphaToCoverage(true); break;\r
-            case GL_SAMPLE_COVERAGE:          context->setSampleCoverage(true);        break;\r
-            case GL_SCISSOR_TEST:             context->setScissorTest(true);           break;\r
-            case GL_STENCIL_TEST:             context->setStencilTest(true);           break;\r
-            case GL_DEPTH_TEST:               context->setDepthTest(true);             break;\r
-            case GL_BLEND:                    context->setBlend(true);                 break;\r
-            case GL_DITHER:                   context->setDither(true);                break;\r
-                       case GL_LIGHTING:                 context->setLighting(true);              break;\r
-                       case GL_LIGHT0:                   context->setLight(0, true);              break;\r
-                       case GL_LIGHT1:                   context->setLight(1, true);              break;\r
-                   case GL_LIGHT2:                   context->setLight(2, true);              break;\r
-                       case GL_LIGHT3:                   context->setLight(3, true);              break;\r
-                       case GL_LIGHT4:                   context->setLight(4, true);              break;\r
-                       case GL_LIGHT5:                   context->setLight(5, true);              break;\r
-                       case GL_LIGHT6:                   context->setLight(6, true);              break;\r
-                       case GL_LIGHT7:                   context->setLight(7, true);              break;\r
-                       case GL_FOG:                      UNIMPLEMENTED(); break;\r
-                       case GL_TEXTURE_2D:               context->setTexture2D(true);             break;\r
-                       case GL_ALPHA_TEST:               UNIMPLEMENTED(); break;\r
-                       case GL_COLOR_LOGIC_OP:           UNIMPLEMENTED(); break;\r
-                       case GL_POINT_SMOOTH:             UNIMPLEMENTED(); break;\r
-                       case GL_LINE_SMOOTH:              UNIMPLEMENTED(); break;\r
-                       case GL_COLOR_MATERIAL:           UNIMPLEMENTED(); break;\r
-                       case GL_NORMALIZE:                UNIMPLEMENTED(); break;\r
-                       case GL_RESCALE_NORMAL:           UNIMPLEMENTED(); break;\r
-                       case GL_VERTEX_ARRAY:             UNIMPLEMENTED(); break;\r
-                       case GL_NORMAL_ARRAY:             UNIMPLEMENTED(); break;\r
-                       case GL_COLOR_ARRAY:              UNIMPLEMENTED(); break;\r
-                       case GL_TEXTURE_COORD_ARRAY:      UNIMPLEMENTED(); break;\r
-                       case GL_MULTISAMPLE:              UNIMPLEMENTED(); break;\r
-                       case GL_SAMPLE_ALPHA_TO_ONE:      UNIMPLEMENTED(); break;\r
-                       default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+       TRACE("(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "\r
+             "GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d)",\r
+             target, level, xoffset, yoffset, x, y, width, height);\r
 \r
-void GL_APIENTRY glEnableClientState(GLenum array)\r
-{\r
-       TRACE("(GLenum array = 0x%X)", array);\r
+       if(!es1::IsTextureTarget(target))\r
+       {\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
 \r
-    try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
-\r
-        if(context)\r
-        {\r
-                       GLenum texture = context->getClientActiveTexture();\r
-\r
-            switch(array)\r
-            {\r
-            case GL_VERTEX_ARRAY:        context->setEnableVertexAttribArray(sw::Position, true);                            break;\r
-            case GL_COLOR_ARRAY:         context->setEnableVertexAttribArray(sw::Color0, true);                              break;\r
-            case GL_TEXTURE_COORD_ARRAY: context->setEnableVertexAttribArray(sw::TexCoord0 + (texture - GL_TEXTURE0), true); break;\r
-                       case GL_NORMAL_ARRAY:        context->setEnableVertexAttribArray(sw::Normal, true);                              break;\r
-            default:                     UNIMPLEMENTED();\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+       if(level < 0 || xoffset < 0 || yoffset < 0 || width < 0 || height < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-void GL_APIENTRY glFinish(void)\r
-{\r
-    TRACE("()");\r
+       if(std::numeric_limits<GLsizei>::max() - xoffset < width || std::numeric_limits<GLsizei>::max() - yoffset < height)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-    try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
+       if(width == 0 || height == 0)\r
+       {\r
+               return;\r
+       }\r
 \r
-        if(context)\r
-        {\r
-            context->finish();\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+       es1::Context *context = es1::getContext();\r
 \r
-void GL_APIENTRY glFlush(void)\r
-{\r
-    TRACE("()");\r
+       if(context)\r
+       {\r
+               if(level > es1::IMPLEMENTATION_MAX_TEXTURE_LEVELS)\r
+               {\r
+                       return error(GL_INVALID_VALUE);\r
+               }\r
 \r
-    try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
+               es1::Framebuffer *framebuffer = context->getFramebuffer();\r
 \r
-        if(context)\r
-        {\r
-            context->flush();\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+               if(framebuffer->completeness() != GL_FRAMEBUFFER_COMPLETE_OES)\r
+               {\r
+                       return error(GL_INVALID_FRAMEBUFFER_OPERATION_OES);\r
+               }\r
 \r
-void GL_APIENTRY glFramebufferRenderbufferOES(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)\r
+               if(context->getFramebufferHandle() != 0 && framebuffer->getColorbuffer()->getSamples() > 1)\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
+\r
+               es1::Renderbuffer *source = framebuffer->getColorbuffer();\r
+               GLenum colorbufferFormat = source->getFormat();\r
+               es1::Texture *texture = NULL;\r
+\r
+               if(target == GL_TEXTURE_2D)\r
+               {\r
+                       texture = context->getTexture2D();\r
+               }\r
+               else UNREACHABLE();\r
+\r
+               if(!validateSubImageParams(false, width, height, xoffset, yoffset, target, level, GL_NONE_OES, texture))\r
+               {\r
+                       return;\r
+               }\r
+\r
+               GLenum textureFormat = texture->getFormat(target, level);\r
+\r
+               // [OpenGL ES 2.0.24] table 3.9\r
+               switch(textureFormat)\r
+               {\r
+               case GL_ALPHA:\r
+                       if(colorbufferFormat != GL_ALPHA &&\r
+                          colorbufferFormat != GL_RGBA &&\r
+                          colorbufferFormat != GL_RGBA4_OES &&\r
+                          colorbufferFormat != GL_RGB5_A1_OES &&\r
+                          colorbufferFormat != GL_RGBA8_OES)\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+                       break;\r
+               case GL_LUMINANCE:\r
+               case GL_RGB:\r
+                       if(colorbufferFormat != GL_RGB &&\r
+                          colorbufferFormat != GL_RGB565_OES &&\r
+                          colorbufferFormat != GL_RGB8_OES &&\r
+                          colorbufferFormat != GL_RGBA &&\r
+                          colorbufferFormat != GL_RGBA4_OES &&\r
+                          colorbufferFormat != GL_RGB5_A1_OES &&\r
+                          colorbufferFormat != GL_RGBA8_OES)\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+                       break;\r
+               case GL_LUMINANCE_ALPHA:\r
+               case GL_RGBA:\r
+                       if(colorbufferFormat != GL_RGBA &&\r
+                          colorbufferFormat != GL_RGBA4_OES &&\r
+                          colorbufferFormat != GL_RGB5_A1_OES &&\r
+                          colorbufferFormat != GL_RGBA8_OES)\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+                       break;\r
+               case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:\r
+               case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:\r
+                       return error(GL_INVALID_OPERATION);\r
+               case GL_DEPTH_STENCIL_OES:\r
+                       return error(GL_INVALID_OPERATION);\r
+               default:\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
+\r
+               texture->copySubImage(target, level, xoffset, yoffset, x, y, width, height, framebuffer);\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glCullFace(GLenum mode)\r
+{\r
+       TRACE("(GLenum mode = 0x%X)", mode);\r
+\r
+       switch(mode)\r
+       {\r
+       case GL_FRONT:\r
+       case GL_BACK:\r
+       case GL_FRONT_AND_BACK:\r
+               {\r
+                       es1::Context *context = es1::getContext();\r
+\r
+                       if(context)\r
+                       {\r
+                               context->setCullMode(mode);\r
+                       }\r
+               }\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glDeleteBuffers(GLsizei n, const GLuint* buffers)\r
 {\r
-    TRACE("(GLenum target = 0x%X, GLenum attachment = 0x%X, GLenum renderbuffertarget = 0x%X, "\r
-          "GLuint renderbuffer = %d)", target, attachment, renderbuffertarget, renderbuffer);\r
-\r
-    try\r
-    {\r
-        if(target != GL_FRAMEBUFFER_OES || (renderbuffertarget != GL_RENDERBUFFER_OES && renderbuffer != 0))\r
-        {\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        es1::Context *context = es1::getContext();\r
-\r
-        if(context)\r
-        {\r
-            es1::Framebuffer *framebuffer = context->getFramebuffer();\r
-            GLuint framebufferHandle = context->getFramebufferHandle();\r
-\r
-            if(!framebuffer || (framebufferHandle == 0 && renderbuffer != 0))\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-\r
-            switch(attachment)\r
-            {\r
-            case GL_COLOR_ATTACHMENT0_OES:\r
-                framebuffer->setColorbuffer(GL_RENDERBUFFER_OES, renderbuffer);\r
-                break;\r
-            case GL_DEPTH_ATTACHMENT_OES:\r
-                framebuffer->setDepthbuffer(GL_RENDERBUFFER_OES, renderbuffer);\r
-                break;\r
-            case GL_STENCIL_ATTACHMENT_OES:\r
-                framebuffer->setStencilbuffer(GL_RENDERBUFFER_OES, renderbuffer);\r
-                break;\r
-              default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLsizei n = %d, const GLuint* buffers = 0x%0.8p)", n, buffers);\r
+\r
+       if(n < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       es1::Context *context = es1::getContext();\r
+\r
+       if(context)\r
+       {\r
+               for(int i = 0; i < n; i++)\r
+               {\r
+                       context->deleteBuffer(buffers[i]);\r
+               }\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glDeleteFramebuffersOES(GLsizei n, const GLuint* framebuffers)\r
+{\r
+       TRACE("(GLsizei n = %d, const GLuint* framebuffers = 0x%0.8p)", n, framebuffers);\r
+\r
+       if(n < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       es1::Context *context = es1::getContext();\r
+\r
+       if(context)\r
+       {\r
+               for(int i = 0; i < n; i++)\r
+               {\r
+                       if(framebuffers[i] != 0)\r
+                       {\r
+                               context->deleteFramebuffer(framebuffers[i]);\r
+                       }\r
+               }\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glDeleteRenderbuffersOES(GLsizei n, const GLuint* renderbuffers)\r
+{\r
+       TRACE("(GLsizei n = %d, const GLuint* renderbuffers = 0x%0.8p)", n, renderbuffers);\r
+\r
+       if(n < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       es1::Context *context = es1::getContext();\r
+\r
+       if(context)\r
+       {\r
+               for(int i = 0; i < n; i++)\r
+               {\r
+                       context->deleteRenderbuffer(renderbuffers[i]);\r
+               }\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glDeleteTextures(GLsizei n, const GLuint* textures)\r
+{\r
+       TRACE("(GLsizei n = %d, const GLuint* textures = 0x%0.8p)", n, textures);\r
+\r
+       if(n < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       es1::Context *context = es1::getContext();\r
+\r
+       if(context)\r
+       {\r
+               for(int i = 0; i < n; i++)\r
+               {\r
+                       if(textures[i] != 0)\r
+                       {\r
+                               context->deleteTexture(textures[i]);\r
+                       }\r
+               }\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glDepthFunc(GLenum func)\r
+{\r
+       TRACE("(GLenum func = 0x%X)", func);\r
+\r
+       switch(func)\r
+       {\r
+       case GL_NEVER:\r
+       case GL_ALWAYS:\r
+       case GL_LESS:\r
+       case GL_LEQUAL:\r
+       case GL_EQUAL:\r
+       case GL_GREATER:\r
+       case GL_GEQUAL:\r
+       case GL_NOTEQUAL:\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       es1::Context *context = es1::getContext();\r
+\r
+       if(context)\r
+       {\r
+               context->setDepthFunc(func);\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glDepthMask(GLboolean flag)\r
+{\r
+       TRACE("(GLboolean flag = %d)", flag);\r
+\r
+       es1::Context *context = es1::getContext();\r
+\r
+       if(context)\r
+       {\r
+               context->setDepthMask(flag != GL_FALSE);\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glDepthRangex(GLclampx zNear, GLclampx zFar)\r
+{\r
+       UNIMPLEMENTED();\r
+}\r
+\r
+void GL_APIENTRY glDepthRangef(GLclampf zNear, GLclampf zFar)\r
+{\r
+       TRACE("(GLclampf zNear = %f, GLclampf zFar = %f)", zNear, zFar);\r
+\r
+       es1::Context *context = es1::getContext();\r
+\r
+       if(context)\r
+       {\r
+               context->setDepthRange(zNear, zFar);\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glDisable(GLenum cap)\r
+{\r
+       TRACE("(GLenum cap = 0x%X)", cap);\r
+\r
+       es1::Context *context = es1::getContext();\r
+\r
+       if(context)\r
+       {\r
+               switch(cap)\r
+               {\r
+               case GL_CULL_FACE:                context->setCullFace(false);              break;\r
+               case GL_POLYGON_OFFSET_FILL:      context->setPolygonOffsetFill(false);     break;\r
+               case GL_SAMPLE_ALPHA_TO_COVERAGE: context->setSampleAlphaToCoverage(false); break;\r
+               case GL_SAMPLE_COVERAGE:          context->setSampleCoverage(false);        break;\r
+               case GL_SCISSOR_TEST:             context->setScissorTest(false);           break;\r
+               case GL_STENCIL_TEST:             context->setStencilTest(false);           break;\r
+               case GL_DEPTH_TEST:               context->setDepthTest(false);             break;\r
+               case GL_BLEND:                    context->setBlend(false);                 break;\r
+               case GL_DITHER:                   context->setDither(false);                break;\r
+               case GL_LIGHTING:                 context->setLighting(false);              break;\r
+               case GL_LIGHT0:                   context->setLight(0, false);              break;\r
+               case GL_LIGHT1:                   context->setLight(1, false);              break;\r
+               case GL_LIGHT2:                   context->setLight(2, false);              break;\r
+               case GL_LIGHT3:                   context->setLight(3, false);              break;\r
+               case GL_LIGHT4:                   context->setLight(4, false);              break;\r
+               case GL_LIGHT5:                   context->setLight(5, false);              break;\r
+               case GL_LIGHT6:                   context->setLight(6, false);              break;\r
+               case GL_LIGHT7:                   context->setLight(7, false);              break;\r
+               case GL_FOG:                      UNIMPLEMENTED(); break;\r
+               case GL_TEXTURE_2D:               context->setTexture2D(false);             break;\r
+               case GL_ALPHA_TEST:               UNIMPLEMENTED(); break;\r
+               case GL_COLOR_LOGIC_OP:           UNIMPLEMENTED(); break;\r
+               case GL_POINT_SMOOTH:             UNIMPLEMENTED(); break;\r
+               case GL_LINE_SMOOTH:              UNIMPLEMENTED(); break;\r
+               case GL_COLOR_MATERIAL:           UNIMPLEMENTED(); break;\r
+               case GL_NORMALIZE:                UNIMPLEMENTED(); break;\r
+               case GL_RESCALE_NORMAL:           UNIMPLEMENTED(); break;\r
+               case GL_VERTEX_ARRAY:             UNIMPLEMENTED(); break;\r
+               case GL_NORMAL_ARRAY:             UNIMPLEMENTED(); break;\r
+               case GL_COLOR_ARRAY:              UNIMPLEMENTED(); break;\r
+               case GL_TEXTURE_COORD_ARRAY:      UNIMPLEMENTED(); break;\r
+               case GL_MULTISAMPLE:              UNIMPLEMENTED(); break;\r
+               case GL_SAMPLE_ALPHA_TO_ONE:      UNIMPLEMENTED(); break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glDisableClientState(GLenum array)\r
+{\r
+       UNIMPLEMENTED();\r
+}\r
+\r
+void GL_APIENTRY glDrawArrays(GLenum mode, GLint first, GLsizei count)\r
+{\r
+       TRACE("(GLenum mode = 0x%X, GLint first = %d, GLsizei count = %d)", mode, first, count);\r
+\r
+       if(count < 0 || first < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       es1::Context *context = es1::getContext();\r
+\r
+       if(context)\r
+       {\r
+               context->drawArrays(mode, first, count);\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices)\r
+{\r
+       TRACE("(GLenum mode = 0x%X, GLsizei count = %d, GLenum type = 0x%X, const GLvoid* indices = 0x%0.8p)",\r
+             mode, count, type, indices);\r
+\r
+       if(count < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       es1::Context *context = es1::getContext();\r
+\r
+       if(context)\r
+       {\r
+               switch(type)\r
+               {\r
+               case GL_UNSIGNED_BYTE:\r
+               case GL_UNSIGNED_SHORT:\r
+               case GL_UNSIGNED_INT:\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+\r
+               context->drawElements(mode, count, type, indices);\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glEnable(GLenum cap)\r
+{\r
+       TRACE("(GLenum cap = 0x%X)", cap);\r
+\r
+       es1::Context *context = es1::getContext();\r
+\r
+       if(context)\r
+       {\r
+               switch(cap)\r
+               {\r
+               case GL_CULL_FACE:                context->setCullFace(true);              break;\r
+               case GL_POLYGON_OFFSET_FILL:      context->setPolygonOffsetFill(true);     break;\r
+               case GL_SAMPLE_ALPHA_TO_COVERAGE: context->setSampleAlphaToCoverage(true); break;\r
+               case GL_SAMPLE_COVERAGE:          context->setSampleCoverage(true);        break;\r
+               case GL_SCISSOR_TEST:             context->setScissorTest(true);           break;\r
+               case GL_STENCIL_TEST:             context->setStencilTest(true);           break;\r
+               case GL_DEPTH_TEST:               context->setDepthTest(true);             break;\r
+               case GL_BLEND:                    context->setBlend(true);                 break;\r
+               case GL_DITHER:                   context->setDither(true);                break;\r
+               case GL_LIGHTING:                 context->setLighting(true);              break;\r
+               case GL_LIGHT0:                   context->setLight(0, true);              break;\r
+               case GL_LIGHT1:                   context->setLight(1, true);              break;\r
+               case GL_LIGHT2:                   context->setLight(2, true);              break;\r
+               case GL_LIGHT3:                   context->setLight(3, true);              break;\r
+               case GL_LIGHT4:                   context->setLight(4, true);              break;\r
+               case GL_LIGHT5:                   context->setLight(5, true);              break;\r
+               case GL_LIGHT6:                   context->setLight(6, true);              break;\r
+               case GL_LIGHT7:                   context->setLight(7, true);              break;\r
+               case GL_FOG:                      UNIMPLEMENTED(); break;\r
+               case GL_TEXTURE_2D:               context->setTexture2D(true);             break;\r
+               case GL_ALPHA_TEST:               UNIMPLEMENTED(); break;\r
+               case GL_COLOR_LOGIC_OP:           UNIMPLEMENTED(); break;\r
+               case GL_POINT_SMOOTH:             UNIMPLEMENTED(); break;\r
+               case GL_LINE_SMOOTH:              UNIMPLEMENTED(); break;\r
+               case GL_COLOR_MATERIAL:           UNIMPLEMENTED(); break;\r
+               case GL_NORMALIZE:                UNIMPLEMENTED(); break;\r
+               case GL_RESCALE_NORMAL:           UNIMPLEMENTED(); break;\r
+               case GL_VERTEX_ARRAY:             UNIMPLEMENTED(); break;\r
+               case GL_NORMAL_ARRAY:             UNIMPLEMENTED(); break;\r
+               case GL_COLOR_ARRAY:              UNIMPLEMENTED(); break;\r
+               case GL_TEXTURE_COORD_ARRAY:      UNIMPLEMENTED(); break;\r
+               case GL_MULTISAMPLE:              UNIMPLEMENTED(); break;\r
+               case GL_SAMPLE_ALPHA_TO_ONE:      UNIMPLEMENTED(); break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glEnableClientState(GLenum array)\r
+{\r
+       TRACE("(GLenum array = 0x%X)", array);\r
+\r
+       es1::Context *context = es1::getContext();\r
+\r
+       if(context)\r
+       {\r
+               GLenum texture = context->getClientActiveTexture();\r
+\r
+               switch(array)\r
+               {\r
+               case GL_VERTEX_ARRAY:        context->setEnableVertexAttribArray(sw::Position, true);                            break;\r
+               case GL_COLOR_ARRAY:         context->setEnableVertexAttribArray(sw::Color0, true);                              break;\r
+               case GL_TEXTURE_COORD_ARRAY: context->setEnableVertexAttribArray(sw::TexCoord0 + (texture - GL_TEXTURE0), true); break;\r
+               case GL_NORMAL_ARRAY:        context->setEnableVertexAttribArray(sw::Normal, true);                              break;\r
+               default:                     UNIMPLEMENTED();\r
+               }\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glFinish(void)\r
+{\r
+       TRACE("()");\r
+\r
+       es1::Context *context = es1::getContext();\r
+\r
+       if(context)\r
+       {\r
+               context->finish();\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glFlush(void)\r
+{\r
+       TRACE("()");\r
+\r
+       es1::Context *context = es1::getContext();\r
+\r
+       if(context)\r
+       {\r
+               context->flush();\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glFramebufferRenderbufferOES(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)\r
+{\r
+       TRACE("(GLenum target = 0x%X, GLenum attachment = 0x%X, GLenum renderbuffertarget = 0x%X, "\r
+             "GLuint renderbuffer = %d)", target, attachment, renderbuffertarget, renderbuffer);\r
+\r
+       if(target != GL_FRAMEBUFFER_OES || (renderbuffertarget != GL_RENDERBUFFER_OES && renderbuffer != 0))\r
+       {\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       es1::Context *context = es1::getContext();\r
+\r
+       if(context)\r
+       {\r
+               es1::Framebuffer *framebuffer = context->getFramebuffer();\r
+               GLuint framebufferHandle = context->getFramebufferHandle();\r
+\r
+               if(!framebuffer || (framebufferHandle == 0 && renderbuffer != 0))\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
+\r
+               switch(attachment)\r
+               {\r
+               case GL_COLOR_ATTACHMENT0_OES:\r
+                       framebuffer->setColorbuffer(GL_RENDERBUFFER_OES, renderbuffer);\r
+                       break;\r
+               case GL_DEPTH_ATTACHMENT_OES:\r
+                       framebuffer->setDepthbuffer(GL_RENDERBUFFER_OES, renderbuffer);\r
+                       break;\r
+               case GL_STENCIL_ATTACHMENT_OES:\r
+                       framebuffer->setStencilbuffer(GL_RENDERBUFFER_OES, renderbuffer);\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glFramebufferTexture2DOES(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)\r
 {\r
-    TRACE("(GLenum target = 0x%X, GLenum attachment = 0x%X, GLenum textarget = 0x%X, "\r
-          "GLuint texture = %d, GLint level = %d)", target, attachment, textarget, texture, level);\r
-\r
-    try\r
-    {\r
-        if(target != GL_FRAMEBUFFER_OES)\r
-        {\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        switch(attachment)\r
-        {\r
-          case GL_COLOR_ATTACHMENT0_OES:\r
-          case GL_DEPTH_ATTACHMENT_OES:\r
-          case GL_STENCIL_ATTACHMENT_OES:\r
-            break;\r
-          default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        es1::Context *context = es1::getContext();\r
-\r
-        if(context)\r
-        {\r
-            if(texture == 0)\r
-            {\r
-                textarget = GL_NONE_OES;\r
-            }\r
-            else\r
-            {\r
-                es1::Texture *tex = context->getTexture(texture);\r
-\r
-                if(tex == NULL)\r
-                {\r
-                    return error(GL_INVALID_OPERATION);\r
-                }\r
-\r
-                if(tex->isCompressed(textarget, level))\r
-                {\r
-                    return error(GL_INVALID_OPERATION);\r
-                }\r
-\r
-                switch(textarget)\r
-                {\r
-                  case GL_TEXTURE_2D:\r
-                    if(tex->getTarget() != GL_TEXTURE_2D)\r
-                    {\r
-                        return error(GL_INVALID_OPERATION);\r
-                    }\r
-                    break;\r
-                  default:\r
-                    return error(GL_INVALID_ENUM);\r
-                }\r
-\r
-                if(level != 0)\r
-                {\r
-                    return error(GL_INVALID_VALUE);\r
-                }\r
-            }\r
-\r
-            es1::Framebuffer *framebuffer = context->getFramebuffer();\r
-            GLuint framebufferHandle = context->getFramebufferHandle();\r
-\r
-            if(framebufferHandle == 0 || !framebuffer)\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-\r
-            switch(attachment)\r
-            {\r
-            case GL_COLOR_ATTACHMENT0_OES:  framebuffer->setColorbuffer(textarget, texture);   break;\r
-            case GL_DEPTH_ATTACHMENT_OES:   framebuffer->setDepthbuffer(textarget, texture);   break;\r
-            case GL_STENCIL_ATTACHMENT_OES: framebuffer->setStencilbuffer(textarget, texture); break;\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLenum target = 0x%X, GLenum attachment = 0x%X, GLenum textarget = 0x%X, "\r
+             "GLuint texture = %d, GLint level = %d)", target, attachment, textarget, texture, level);\r
+\r
+       if(target != GL_FRAMEBUFFER_OES)\r
+       {\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       switch(attachment)\r
+       {\r
+       case GL_COLOR_ATTACHMENT0_OES:\r
+       case GL_DEPTH_ATTACHMENT_OES:\r
+       case GL_STENCIL_ATTACHMENT_OES:\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       es1::Context *context = es1::getContext();\r
+\r
+       if(context)\r
+       {\r
+               if(texture == 0)\r
+               {\r
+                       textarget = GL_NONE_OES;\r
+               }\r
+               else\r
+               {\r
+                       es1::Texture *tex = context->getTexture(texture);\r
+\r
+                       if(tex == NULL)\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+\r
+                       if(tex->isCompressed(textarget, level))\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+\r
+                       switch(textarget)\r
+                       {\r
+                       case GL_TEXTURE_2D:\r
+                               if(tex->getTarget() != GL_TEXTURE_2D)\r
+                               {\r
+                                       return error(GL_INVALID_OPERATION);\r
+                               }\r
+                               break;\r
+                       default:\r
+                               return error(GL_INVALID_ENUM);\r
+                       }\r
+\r
+                       if(level != 0)\r
+                       {\r
+                               return error(GL_INVALID_VALUE);\r
+                       }\r
+               }\r
+\r
+               es1::Framebuffer *framebuffer = context->getFramebuffer();\r
+               GLuint framebufferHandle = context->getFramebufferHandle();\r
+\r
+               if(framebufferHandle == 0 || !framebuffer)\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
+\r
+               switch(attachment)\r
+               {\r
+               case GL_COLOR_ATTACHMENT0_OES:  framebuffer->setColorbuffer(textarget, texture);   break;\r
+               case GL_DEPTH_ATTACHMENT_OES:   framebuffer->setDepthbuffer(textarget, texture);   break;\r
+               case GL_STENCIL_ATTACHMENT_OES: framebuffer->setStencilbuffer(textarget, texture); break;\r
+               }\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glFogf(GLenum pname, GLfloat param)\r
@@ -2039,31 +1764,24 @@ void GL_APIENTRY glFogxv(GLenum pname, const GLfixed *params)
 \r
 void GL_APIENTRY glFrontFace(GLenum mode)\r
 {\r
-    TRACE("(GLenum mode = 0x%X)", mode);\r
-\r
-    try\r
-    {\r
-        switch(mode)\r
-        {\r
-          case GL_CW:\r
-          case GL_CCW:\r
-            {\r
-                es1::Context *context = es1::getContext();\r
-\r
-                if(context)\r
-                {\r
-                    context->setFrontFace(mode);\r
-                }\r
-            }\r
-            break;\r
-          default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLenum mode = 0x%X)", mode);\r
+\r
+       switch(mode)\r
+       {\r
+       case GL_CW:\r
+       case GL_CCW:\r
+               {\r
+                       es1::Context *context = es1::getContext();\r
+\r
+                       if(context)\r
+                       {\r
+                               context->setFrontFace(mode);\r
+                       }\r
+               }\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glFrustumf(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)\r
@@ -2078,303 +1796,249 @@ void GL_APIENTRY glFrustumx(GLfixed left, GLfixed right, GLfixed bottom, GLfixed
 \r
 void GL_APIENTRY glGenerateMipmapOES(GLenum target)\r
 {\r
-    TRACE("(GLenum target = 0x%X)", target);\r
+       TRACE("(GLenum target = 0x%X)", target);\r
 \r
-    try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
+       es1::Context *context = es1::getContext();\r
 \r
-        if(context)\r
-        {\r
-            es1::Texture *texture;\r
+       if(context)\r
+       {\r
+               es1::Texture *texture;\r
 \r
-            switch(target)\r
-            {\r
-            case GL_TEXTURE_2D:\r
-                texture = context->getTexture2D();\r
-                break;\r
-            default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
+               switch(target)\r
+               {\r
+               case GL_TEXTURE_2D:\r
+                       texture = context->getTexture2D();\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
 \r
-            if(texture->isCompressed(target, 0) || texture->isDepth(target, 0))\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
+               if(texture->isCompressed(target, 0) || texture->isDepth(target, 0))\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
 \r
-            texture->generateMipmaps();\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+               texture->generateMipmaps();\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glGenBuffers(GLsizei n, GLuint* buffers)\r
 {\r
-    TRACE("(GLsizei n = %d, GLuint* buffers = 0x%0.8p)", n, buffers);\r
+       TRACE("(GLsizei n = %d, GLuint* buffers = 0x%0.8p)", n, buffers);\r
 \r
-    try\r
-    {\r
-        if(n < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+       if(n < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-        es1::Context *context = es1::getContext();\r
+       es1::Context *context = es1::getContext();\r
 \r
-        if(context)\r
-        {\r
-            for(int i = 0; i < n; i++)\r
-            {\r
-                buffers[i] = context->createBuffer();\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               for(int i = 0; i < n; i++)\r
+               {\r
+                       buffers[i] = context->createBuffer();\r
+               }\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glGenFramebuffersOES(GLsizei n, GLuint* framebuffers)\r
 {\r
-    TRACE("(GLsizei n = %d, GLuint* framebuffers = 0x%0.8p)", n, framebuffers);\r
+       TRACE("(GLsizei n = %d, GLuint* framebuffers = 0x%0.8p)", n, framebuffers);\r
 \r
-    try\r
-    {\r
-        if(n < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+       if(n < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-        es1::Context *context = es1::getContext();\r
+       es1::Context *context = es1::getContext();\r
 \r
-        if(context)\r
-        {\r
-            for(int i = 0; i < n; i++)\r
-            {\r
-                framebuffers[i] = context->createFramebuffer();\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               for(int i = 0; i < n; i++)\r
+               {\r
+                       framebuffers[i] = context->createFramebuffer();\r
+               }\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glGenRenderbuffersOES(GLsizei n, GLuint* renderbuffers)\r
 {\r
-    TRACE("(GLsizei n = %d, GLuint* renderbuffers = 0x%0.8p)", n, renderbuffers);\r
+       TRACE("(GLsizei n = %d, GLuint* renderbuffers = 0x%0.8p)", n, renderbuffers);\r
 \r
-    try\r
-    {\r
-        if(n < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+       if(n < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-        es1::Context *context = es1::getContext();\r
+       es1::Context *context = es1::getContext();\r
 \r
-        if(context)\r
-        {\r
-            for(int i = 0; i < n; i++)\r
-            {\r
-                renderbuffers[i] = context->createRenderbuffer();\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               for(int i = 0; i < n; i++)\r
+               {\r
+                       renderbuffers[i] = context->createRenderbuffer();\r
+               }\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glGenTextures(GLsizei n, GLuint* textures)\r
 {\r
-    TRACE("(GLsizei n = %d, GLuint* textures =  0x%0.8p)", n, textures);\r
+       TRACE("(GLsizei n = %d, GLuint* textures =  0x%0.8p)", n, textures);\r
 \r
-    try\r
-    {\r
-        if(n < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+       if(n < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-        es1::Context *context = es1::getContext();\r
+       es1::Context *context = es1::getContext();\r
 \r
-        if(context)\r
-        {\r
-            for(int i = 0; i < n; i++)\r
-            {\r
-                textures[i] = context->createTexture();\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               for(int i = 0; i < n; i++)\r
+               {\r
+                       textures[i] = context->createTexture();\r
+               }\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glGetRenderbufferParameterivOES(GLenum target, GLenum pname, GLint* params)\r
 {\r
-    TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint* params = 0x%0.8p)", target, pname, params);\r
-\r
-    try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
-\r
-        if(context)\r
-        {\r
-            if(target != GL_RENDERBUFFER_OES)\r
-            {\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-\r
-            if(context->getRenderbufferHandle() == 0)\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-\r
-            es1::Renderbuffer *renderbuffer = context->getRenderbuffer(context->getRenderbufferHandle());\r
-\r
-            switch(pname)\r
-            {\r
-            case GL_RENDERBUFFER_WIDTH_OES:           *params = renderbuffer->getWidth();       break;\r
-            case GL_RENDERBUFFER_HEIGHT_OES:          *params = renderbuffer->getHeight();      break;\r
-            case GL_RENDERBUFFER_INTERNAL_FORMAT_OES: *params = renderbuffer->getFormat();      break;\r
-            case GL_RENDERBUFFER_RED_SIZE_OES:        *params = renderbuffer->getRedSize();     break;\r
-            case GL_RENDERBUFFER_GREEN_SIZE_OES:      *params = renderbuffer->getGreenSize();   break;\r
-            case GL_RENDERBUFFER_BLUE_SIZE_OES:       *params = renderbuffer->getBlueSize();    break;\r
-            case GL_RENDERBUFFER_ALPHA_SIZE_OES:      *params = renderbuffer->getAlphaSize();   break;\r
-            case GL_RENDERBUFFER_DEPTH_SIZE_OES:      *params = renderbuffer->getDepthSize();   break;\r
-            case GL_RENDERBUFFER_STENCIL_SIZE_OES:    *params = renderbuffer->getStencilSize(); break;\r
-            default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint* params = 0x%0.8p)", target, pname, params);\r
+\r
+       es1::Context *context = es1::getContext();\r
+\r
+       if(context)\r
+       {\r
+               if(target != GL_RENDERBUFFER_OES)\r
+               {\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+\r
+               if(context->getRenderbufferHandle() == 0)\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
+\r
+               es1::Renderbuffer *renderbuffer = context->getRenderbuffer(context->getRenderbufferHandle());\r
+\r
+               switch(pname)\r
+               {\r
+               case GL_RENDERBUFFER_WIDTH_OES:           *params = renderbuffer->getWidth();       break;\r
+               case GL_RENDERBUFFER_HEIGHT_OES:          *params = renderbuffer->getHeight();      break;\r
+               case GL_RENDERBUFFER_INTERNAL_FORMAT_OES: *params = renderbuffer->getFormat();      break;\r
+               case GL_RENDERBUFFER_RED_SIZE_OES:        *params = renderbuffer->getRedSize();     break;\r
+               case GL_RENDERBUFFER_GREEN_SIZE_OES:      *params = renderbuffer->getGreenSize();   break;\r
+               case GL_RENDERBUFFER_BLUE_SIZE_OES:       *params = renderbuffer->getBlueSize();    break;\r
+               case GL_RENDERBUFFER_ALPHA_SIZE_OES:      *params = renderbuffer->getAlphaSize();   break;\r
+               case GL_RENDERBUFFER_DEPTH_SIZE_OES:      *params = renderbuffer->getDepthSize();   break;\r
+               case GL_RENDERBUFFER_STENCIL_SIZE_OES:    *params = renderbuffer->getStencilSize(); break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glGetBooleanv(GLenum pname, GLboolean* params)\r
 {\r
-    TRACE("(GLenum pname = 0x%X, GLboolean* params = 0x%0.8p)",  pname, params);\r
+       TRACE("(GLenum pname = 0x%X, GLboolean* params = 0x%0.8p)",  pname, params);\r
+\r
+       es1::Context *context = es1::getContext();\r
+\r
+       if(context)\r
+       {\r
+               if(!(context->getBooleanv(pname, params)))\r
+               {\r
+                       unsigned int numParams = context->getQueryParameterNum(pname);\r
+\r
+                       if(numParams < 0)\r
+                       {\r
+                               return error(GL_INVALID_ENUM);\r
+                       }\r
 \r
-    try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
+                       if(numParams == 0)\r
+                       {\r
+                               return;\r
+                       }\r
+\r
+                       if(context->isQueryParameterFloat(pname))\r
+                       {\r
+                               GLfloat *floatParams = NULL;\r
+                               floatParams = new GLfloat[numParams];\r
 \r
-        if(context)\r
-        {\r
-            if(!(context->getBooleanv(pname, params)))\r
-            {\r
-                unsigned int numParams = context->getQueryParameterNum(pname);\r
+                               context->getFloatv(pname, floatParams);\r
 \r
-                               if(numParams < 0)\r
+                               for(unsigned int i = 0; i < numParams; ++i)\r
                                {\r
-                                       return error(GL_INVALID_ENUM);\r
+                                       if(floatParams[i] == 0.0f)\r
+                                               params[i] = GL_FALSE;\r
+                                       else\r
+                                               params[i] = GL_TRUE;\r
                                }\r
 \r
-                               if(numParams == 0)\r
+                               delete [] floatParams;\r
+                       }\r
+                       else if(context->isQueryParameterInt(pname))\r
+                       {\r
+                               GLint *intParams = NULL;\r
+                               intParams = new GLint[numParams];\r
+\r
+                               context->getIntegerv(pname, intParams);\r
+\r
+                               for(unsigned int i = 0; i < numParams; ++i)\r
                                {\r
-                                       return;\r
+                                       if(intParams[i] == 0)\r
+                                               params[i] = GL_FALSE;\r
+                                       else\r
+                                               params[i] = GL_TRUE;\r
                                }\r
 \r
-                if(context->isQueryParameterFloat(pname))\r
-                {\r
-                    GLfloat *floatParams = NULL;\r
-                    floatParams = new GLfloat[numParams];\r
-\r
-                    context->getFloatv(pname, floatParams);\r
-\r
-                    for(unsigned int i = 0; i < numParams; ++i)\r
-                    {\r
-                        if(floatParams[i] == 0.0f)\r
-                            params[i] = GL_FALSE;\r
-                        else\r
-                            params[i] = GL_TRUE;\r
-                    }\r
-\r
-                    delete [] floatParams;\r
-                }\r
-                else if(context->isQueryParameterInt(pname))\r
-                {\r
-                    GLint *intParams = NULL;\r
-                    intParams = new GLint[numParams];\r
-\r
-                    context->getIntegerv(pname, intParams);\r
-\r
-                    for(unsigned int i = 0; i < numParams; ++i)\r
-                    {\r
-                        if(intParams[i] == 0)\r
-                            params[i] = GL_FALSE;\r
-                        else\r
-                            params[i] = GL_TRUE;\r
-                    }\r
-\r
-                    delete [] intParams;\r
-                }\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+                               delete [] intParams;\r
+                       }\r
+               }\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glGetBufferParameteriv(GLenum target, GLenum pname, GLint* params)\r
 {\r
-    TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint* params = 0x%0.8p)", target, pname, params);\r
-\r
-    try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
-\r
-        if(context)\r
-        {\r
-            es1::Buffer *buffer;\r
-\r
-            switch(target)\r
-            {\r
-              case GL_ARRAY_BUFFER:\r
-                buffer = context->getArrayBuffer();\r
-                break;\r
-              case GL_ELEMENT_ARRAY_BUFFER:\r
-                buffer = context->getElementArrayBuffer();\r
-                break;\r
-              default: return error(GL_INVALID_ENUM);\r
-            }\r
-\r
-            if(!buffer)\r
-            {\r
-                // A null buffer means that "0" is bound to the requested buffer target\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-\r
-            switch(pname)\r
-            {\r
-              case GL_BUFFER_USAGE:\r
-                *params = buffer->usage();\r
-                break;\r
-              case GL_BUFFER_SIZE:\r
-                *params = buffer->size();\r
-                break;\r
-              default: return error(GL_INVALID_ENUM);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint* params = 0x%0.8p)", target, pname, params);\r
+\r
+       es1::Context *context = es1::getContext();\r
+\r
+       if(context)\r
+       {\r
+               es1::Buffer *buffer;\r
+\r
+               switch(target)\r
+               {\r
+               case GL_ARRAY_BUFFER:\r
+                       buffer = context->getArrayBuffer();\r
+                       break;\r
+               case GL_ELEMENT_ARRAY_BUFFER:\r
+                       buffer = context->getElementArrayBuffer();\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+\r
+               if(!buffer)\r
+               {\r
+                       // A null buffer means that "0" is bound to the requested buffer target\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
+\r
+               switch(pname)\r
+               {\r
+               case GL_BUFFER_USAGE:\r
+                       *params = buffer->usage();\r
+                       break;\r
+               case GL_BUFFER_SIZE:\r
+                       *params = buffer->size();\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glGetClipPlanef(GLenum pname, GLfloat eqn[4])\r
@@ -2389,16 +2053,16 @@ void GL_APIENTRY glGetClipPlanex(GLenum pname, GLfixed eqn[4])
 \r
 GLenum GL_APIENTRY glGetError(void)\r
 {\r
-    TRACE("()");\r
+       TRACE("()");\r
 \r
-    es1::Context *context = es1::getContext();\r
+es1::Context *context = es1::getContext();\r
 \r
-    if(context)\r
-    {\r
-        return context->getError();\r
-    }\r
+if(context)\r
+{\r
+       return context->getError();\r
+}\r
 \r
-    return GL_NO_ERROR;\r
+return GL_NO_ERROR;\r
 }\r
 \r
 void GL_APIENTRY glGetFixedv(GLenum pname, GLfixed *params)\r
@@ -2408,225 +2072,206 @@ void GL_APIENTRY glGetFixedv(GLenum pname, GLfixed *params)
 \r
 void GL_APIENTRY glGetFloatv(GLenum pname, GLfloat* params)\r
 {\r
-    TRACE("(GLenum pname = 0x%X, GLfloat* params = 0x%0.8p)", pname, params);\r
+       TRACE("(GLenum pname = 0x%X, GLfloat* params = 0x%0.8p)", pname, params);\r
+\r
+       es1::Context *context = es1::getContext();\r
+\r
+       if(context)\r
+       {\r
+               if(!(context->getFloatv(pname, params)))\r
+               {\r
+                       unsigned int numParams = context->getQueryParameterNum(pname);\r
 \r
-    try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
+                       if(numParams < 0)\r
+                       {\r
+                               return error(GL_INVALID_ENUM);\r
+                       }\r
 \r
-        if(context)\r
-        {\r
-            if(!(context->getFloatv(pname, params)))\r
-            {\r
-                unsigned int numParams = context->getQueryParameterNum(pname);\r
+                       if(numParams == 0)\r
+                       {\r
+                               return;\r
+                       }\r
 \r
-                               if(numParams < 0)\r
+                       if(context->isQueryParameterBool(pname))\r
+                       {\r
+                               GLboolean *boolParams = NULL;\r
+                               boolParams = new GLboolean[numParams];\r
+\r
+                               context->getBooleanv(pname, boolParams);\r
+\r
+                               for(unsigned int i = 0; i < numParams; ++i)\r
                                {\r
-                                       return error(GL_INVALID_ENUM);\r
+                                       if(boolParams[i] == GL_FALSE)\r
+                                               params[i] = 0.0f;\r
+                                       else\r
+                                               params[i] = 1.0f;\r
                                }\r
 \r
-                               if(numParams == 0)\r
+                               delete [] boolParams;\r
+                       }\r
+                       else if(context->isQueryParameterInt(pname))\r
+                       {\r
+                               GLint *intParams = NULL;\r
+                               intParams = new GLint[numParams];\r
+\r
+                               context->getIntegerv(pname, intParams);\r
+\r
+                               for(unsigned int i = 0; i < numParams; ++i)\r
                                {\r
-                                       return;\r
+                                       params[i] = (GLfloat)intParams[i];\r
                                }\r
 \r
-                if(context->isQueryParameterBool(pname))\r
-                {\r
-                    GLboolean *boolParams = NULL;\r
-                    boolParams = new GLboolean[numParams];\r
-\r
-                    context->getBooleanv(pname, boolParams);\r
-\r
-                    for(unsigned int i = 0; i < numParams; ++i)\r
-                    {\r
-                        if(boolParams[i] == GL_FALSE)\r
-                            params[i] = 0.0f;\r
-                        else\r
-                            params[i] = 1.0f;\r
-                    }\r
-\r
-                    delete [] boolParams;\r
-                }\r
-                else if(context->isQueryParameterInt(pname))\r
-                {\r
-                    GLint *intParams = NULL;\r
-                    intParams = new GLint[numParams];\r
-\r
-                    context->getIntegerv(pname, intParams);\r
-\r
-                    for(unsigned int i = 0; i < numParams; ++i)\r
-                    {\r
-                        params[i] = (GLfloat)intParams[i];\r
-                    }\r
-\r
-                    delete [] intParams;\r
-                }\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+                               delete [] intParams;\r
+                       }\r
+               }\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glGetFramebufferAttachmentParameterivOES(GLenum target, GLenum attachment, GLenum pname, GLint* params)\r
 {\r
-    TRACE("(GLenum target = 0x%X, GLenum attachment = 0x%X, GLenum pname = 0x%X, GLint* params = 0x%0.8p)",\r
-          target, attachment, pname, params);\r
-\r
-    try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
-\r
-        if(context)\r
-        {\r
-            if(target != GL_FRAMEBUFFER_OES)\r
-            {\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-\r
-            if(context->getFramebufferHandle() == 0)\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-\r
-            es1::Framebuffer *framebuffer = context->getFramebuffer();\r
-\r
-            GLenum attachmentType;\r
-            GLuint attachmentHandle;\r
-            switch(attachment)\r
-            {\r
-            case GL_COLOR_ATTACHMENT0_OES:\r
-                attachmentType = framebuffer->getColorbufferType();\r
-                attachmentHandle = framebuffer->getColorbufferHandle();\r
-                break;\r
-            case GL_DEPTH_ATTACHMENT_OES:\r
-                attachmentType = framebuffer->getDepthbufferType();\r
-                attachmentHandle = framebuffer->getDepthbufferHandle();\r
-                break;\r
-            case GL_STENCIL_ATTACHMENT_OES:\r
-                attachmentType = framebuffer->getStencilbufferType();\r
-                attachmentHandle = framebuffer->getStencilbufferHandle();\r
-                break;\r
-            default:\r
+       TRACE("(GLenum target = 0x%X, GLenum attachment = 0x%X, GLenum pname = 0x%X, GLint* params = 0x%0.8p)",\r
+             target, attachment, pname, params);\r
+\r
+       es1::Context *context = es1::getContext();\r
+\r
+       if(context)\r
+       {\r
+               if(target != GL_FRAMEBUFFER_OES)\r
+               {\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+\r
+               if(context->getFramebufferHandle() == 0)\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
+\r
+               es1::Framebuffer *framebuffer = context->getFramebuffer();\r
+\r
+               GLenum attachmentType;\r
+               GLuint attachmentHandle;\r
+               switch(attachment)\r
+               {\r
+               case GL_COLOR_ATTACHMENT0_OES:\r
+                       attachmentType = framebuffer->getColorbufferType();\r
+                       attachmentHandle = framebuffer->getColorbufferHandle();\r
+                       break;\r
+               case GL_DEPTH_ATTACHMENT_OES:\r
+                       attachmentType = framebuffer->getDepthbufferType();\r
+                       attachmentHandle = framebuffer->getDepthbufferHandle();\r
+                       break;\r
+               case GL_STENCIL_ATTACHMENT_OES:\r
+                       attachmentType = framebuffer->getStencilbufferType();\r
+                       attachmentHandle = framebuffer->getStencilbufferHandle();\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+\r
+               GLenum attachmentObjectType;   // Type category\r
+               if(attachmentType == GL_NONE_OES || attachmentType == GL_RENDERBUFFER_OES)\r
+               {\r
+                       attachmentObjectType = attachmentType;\r
+               }\r
+               else if(es1::IsTextureTarget(attachmentType))\r
+               {\r
+                       attachmentObjectType = GL_TEXTURE;\r
+               }\r
+               else UNREACHABLE();\r
+\r
+               switch(pname)\r
+               {\r
+               case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES:\r
+                       *params = attachmentObjectType;\r
+                       break;\r
+               case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES:\r
+                       if(attachmentObjectType == GL_RENDERBUFFER_OES || attachmentObjectType == GL_TEXTURE)\r
+                       {\r
+                               *params = attachmentHandle;\r
+                       }\r
+                       else\r
+                       {\r
+                               return error(GL_INVALID_ENUM);\r
+                       }\r
+                       break;\r
+               case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_OES:\r
+                       if(attachmentObjectType == GL_TEXTURE)\r
+                       {\r
+                               *params = 0; // FramebufferTexture2D will not allow level to be set to anything else in GL ES 2.0\r
+                       }\r
+                       else\r
+                       {\r
                                return error(GL_INVALID_ENUM);\r
-            }\r
-\r
-            GLenum attachmentObjectType;   // Type category\r
-            if(attachmentType == GL_NONE_OES || attachmentType == GL_RENDERBUFFER_OES)\r
-            {\r
-                attachmentObjectType = attachmentType;\r
-            }\r
-            else if(es1::IsTextureTarget(attachmentType))\r
-            {\r
-                attachmentObjectType = GL_TEXTURE;\r
-            }\r
-            else UNREACHABLE();\r
-\r
-            switch(pname)\r
-            {\r
-            case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES:\r
-                *params = attachmentObjectType;\r
-                break;\r
-            case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES:\r
-                if(attachmentObjectType == GL_RENDERBUFFER_OES || attachmentObjectType == GL_TEXTURE)\r
-                {\r
-                    *params = attachmentHandle;\r
-                }\r
-                else\r
-                {\r
-                    return error(GL_INVALID_ENUM);\r
-                }\r
-                break;\r
-            case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_OES:\r
-                if(attachmentObjectType == GL_TEXTURE)\r
-                {\r
-                    *params = 0; // FramebufferTexture2D will not allow level to be set to anything else in GL ES 2.0\r
-                }\r
-                else\r
-                {\r
-                    return error(GL_INVALID_ENUM);\r
-                }\r
-                break;\r
-            default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+                       }\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glGetIntegerv(GLenum pname, GLint* params)\r
 {\r
-    TRACE("(GLenum pname = 0x%X, GLint* params = 0x%0.8p)", pname, params);\r
+       TRACE("(GLenum pname = 0x%X, GLint* params = 0x%0.8p)", pname, params);\r
+\r
+       es1::Context *context = es1::getContext();\r
+\r
+       if(context)\r
+       {\r
+               if(!(context->getIntegerv(pname, params)))\r
+               {\r
+                       unsigned int numParams = context->getQueryParameterNum(pname);\r
+\r
+                       if(numParams < 0)\r
+                       {\r
+                               return error(GL_INVALID_ENUM);\r
+                       }\r
+\r
+                       if(numParams == 0)\r
+                       {\r
+                               return;\r
+                       }\r
 \r
-    try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
+                       if(context->isQueryParameterBool(pname))\r
+                       {\r
+                               GLboolean *boolParams = NULL;\r
+                               boolParams = new GLboolean[numParams];\r
 \r
-        if(context)\r
-        {\r
-            if(!(context->getIntegerv(pname, params)))\r
-            {\r
-                unsigned int numParams = context->getQueryParameterNum(pname);\r
+                               context->getBooleanv(pname, boolParams);\r
 \r
-                               if(numParams < 0)\r
+                               for(unsigned int i = 0; i < numParams; ++i)\r
                                {\r
-                                       return error(GL_INVALID_ENUM);\r
+                                       if(boolParams[i] == GL_FALSE)\r
+                                               params[i] = 0;\r
+                                       else\r
+                                               params[i] = 1;\r
                                }\r
 \r
-                               if(numParams == 0)\r
+                               delete [] boolParams;\r
+                       }\r
+                       else if(context->isQueryParameterFloat(pname))\r
+                       {\r
+                               GLfloat *floatParams = NULL;\r
+                               floatParams = new GLfloat[numParams];\r
+\r
+                               context->getFloatv(pname, floatParams);\r
+\r
+                               for(unsigned int i = 0; i < numParams; ++i)\r
                                {\r
-                                       return;\r
+                                       if(pname == GL_DEPTH_RANGE || pname == GL_COLOR_CLEAR_VALUE || pname == GL_DEPTH_CLEAR_VALUE)\r
+                                       {\r
+                                               params[i] = (GLint)(((GLfloat)(0xFFFFFFFF) * floatParams[i] - 1.0f) / 2.0f);\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               params[i] = (GLint)(floatParams[i] > 0.0f ? floor(floatParams[i] + 0.5) : ceil(floatParams[i] - 0.5));\r
+                                       }\r
                                }\r
 \r
-                if(context->isQueryParameterBool(pname))\r
-                {\r
-                    GLboolean *boolParams = NULL;\r
-                    boolParams = new GLboolean[numParams];\r
-\r
-                    context->getBooleanv(pname, boolParams);\r
-\r
-                    for(unsigned int i = 0; i < numParams; ++i)\r
-                    {\r
-                        if(boolParams[i] == GL_FALSE)\r
-                            params[i] = 0;\r
-                        else\r
-                            params[i] = 1;\r
-                    }\r
-\r
-                    delete [] boolParams;\r
-                }\r
-                else if(context->isQueryParameterFloat(pname))\r
-                {\r
-                    GLfloat *floatParams = NULL;\r
-                    floatParams = new GLfloat[numParams];\r
-\r
-                    context->getFloatv(pname, floatParams);\r
-\r
-                    for(unsigned int i = 0; i < numParams; ++i)\r
-                    {\r
-                        if(pname == GL_DEPTH_RANGE || pname == GL_COLOR_CLEAR_VALUE || pname == GL_DEPTH_CLEAR_VALUE)\r
-                        {\r
-                            params[i] = (GLint)(((GLfloat)(0xFFFFFFFF) * floatParams[i] - 1.0f) / 2.0f);\r
-                        }\r
-                        else\r
-                            params[i] = (GLint)(floatParams[i] > 0.0f ? floor(floatParams[i] + 0.5) : ceil(floatParams[i] - 0.5));\r
-                    }\r
-\r
-                    delete [] floatParams;\r
-                }\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+                               delete [] floatParams;\r
+                       }\r
+               }\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glGetLightfv(GLenum light, GLenum pname, GLfloat *params)\r
@@ -2654,175 +2299,150 @@ void GL_APIENTRY glGetPointerv(GLenum pname, GLvoid **params)
        UNIMPLEMENTED();\r
 }\r
 \r
-const GLubyte* GL_APIENTRY glGetString(GLenum name)\r
+const GLubyte* GL_APIENTRY glGetString(GLenum name)\r
+{\r
+       TRACE("(GLenum name = 0x%X)", name);\r
+\r
+       switch(name)\r
+       {\r
+       case GL_VENDOR:\r
+               return (GLubyte*)"TransGaming Inc.";\r
+       case GL_RENDERER:\r
+               return (GLubyte*)"SwiftShader";\r
+       case GL_VERSION:\r
+               return (GLubyte*)"OpenGL ES 1.1 SwiftShader " VERSION_STRING;\r
+       case GL_EXTENSIONS:\r
+               // Keep list sorted in following order:\r
+               // OES extensions\r
+               // EXT extensions\r
+               // Vendor extensions\r
+               return (GLubyte*)\r
+                       "GL_OES_blend_equation_separate "\r
+                       "GL_OES_blend_func_separate "\r
+                       "GL_OES_blend_subtract "\r
+                       "GL_OES_depth_texture "\r
+                       "GL_OES_EGL_image "\r
+                       "GL_OES_EGL_image_external "\r
+                       "GL_OES_element_index_uint "\r
+                       "GL_OES_framebuffer_object "\r
+                       "GL_OES_packed_depth_stencil "\r
+                       "GL_OES_rgb8_rgba8 "\r
+                       "GL_OES_stencil8 "\r
+                       "GL_OES_stencil_wrap "\r
+                       "GL_OES_texture_float "\r
+                       "GL_OES_texture_float_linear "\r
+                       "GL_OES_texture_half_float "\r
+                       "GL_OES_texture_half_float_linear "\r
+                       "GL_OES_texture_mirrored_repeat "\r
+                       "GL_OES_texture_npot "\r
+                       "GL_EXT_blend_minmax "\r
+                       "GL_EXT_read_format_bgra "\r
+                       #if (S3TC_SUPPORT)\r
+                       "GL_EXT_texture_compression_dxt1 "\r
+                       "GL_ANGLE_texture_compression_dxt3 "\r
+                       "GL_ANGLE_texture_compression_dxt5 "\r
+                       #endif\r
+                       "GL_EXT_texture_filter_anisotropic "\r
+                       "GL_EXT_texture_format_BGRA8888";\r
+       default:\r
+               return error(GL_INVALID_ENUM, (GLubyte*)NULL);\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glGetTexParameterfv(GLenum target, GLenum pname, GLfloat* params)\r
+{\r
+       TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLfloat* params = 0x%0.8p)", target, pname, params);\r
+\r
+       es1::Context *context = es1::getContext();\r
+\r
+       if(context)\r
+       {\r
+               es1::Texture *texture;\r
+\r
+               switch(target)\r
+               {\r
+               case GL_TEXTURE_2D:\r
+                       texture = context->getTexture2D();\r
+                       break;\r
+               case GL_TEXTURE_EXTERNAL_OES:\r
+                       texture = context->getTextureExternal();\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+\r
+               switch(pname)\r
+               {\r
+               case GL_TEXTURE_MAG_FILTER:\r
+                       *params = (GLfloat)texture->getMagFilter();\r
+                       break;\r
+               case GL_TEXTURE_MIN_FILTER:\r
+                       *params = (GLfloat)texture->getMinFilter();\r
+                       break;\r
+               case GL_TEXTURE_WRAP_S:\r
+                       *params = (GLfloat)texture->getWrapS();\r
+                       break;\r
+               case GL_TEXTURE_WRAP_T:\r
+                       *params = (GLfloat)texture->getWrapT();\r
+                       break;\r
+               case GL_TEXTURE_MAX_ANISOTROPY_EXT:\r
+                       *params = texture->getMaxAnisotropy();\r
+                       break;\r
+               case GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES:\r
+                       *params = (GLfloat)1;\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glGetTexParameteriv(GLenum target, GLenum pname, GLint* params)\r
 {\r
-    TRACE("(GLenum name = 0x%X)", name);\r
-\r
-    try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
-\r
-        switch(name)\r
-        {\r
-        case GL_VENDOR:\r
-            return (GLubyte*)"TransGaming Inc.";\r
-        case GL_RENDERER:\r
-            return (GLubyte*)"SwiftShader";\r
-        case GL_VERSION:\r
-            return (GLubyte*)"OpenGL ES 1.1 SwiftShader " VERSION_STRING;\r
-        case GL_EXTENSIONS:\r
-            // Keep list sorted in following order:\r
-               // OES extensions\r
-               // EXT extensions\r
-               // Vendor extensions\r
-            return (GLubyte*)\r
-                               "GL_OES_blend_equation_separate "\r
-                               "GL_OES_blend_func_separate "\r
-                               "GL_OES_blend_subtract "\r
-                "GL_OES_depth_texture "\r
-                               "GL_OES_EGL_image "\r
-                "GL_OES_EGL_image_external "\r
-                "GL_OES_element_index_uint "\r
-                               "GL_OES_framebuffer_object "\r
-                "GL_OES_packed_depth_stencil "\r
-                "GL_OES_rgb8_rgba8 "\r
-                               "GL_OES_stencil8 "\r
-                               "GL_OES_stencil_wrap "\r
-                "GL_OES_texture_float "\r
-                "GL_OES_texture_float_linear "\r
-                "GL_OES_texture_half_float "\r
-                "GL_OES_texture_half_float_linear "\r
-                               "GL_OES_texture_mirrored_repeat "\r
-                "GL_OES_texture_npot "\r
-                "GL_EXT_blend_minmax "\r
-                "GL_EXT_read_format_bgra "\r
-                #if (S3TC_SUPPORT)\r
-                "GL_EXT_texture_compression_dxt1 "\r
-                "GL_ANGLE_texture_compression_dxt3 "\r
-                "GL_ANGLE_texture_compression_dxt5 "\r
-                #endif\r
-                "GL_EXT_texture_filter_anisotropic "\r
-                "GL_EXT_texture_format_BGRA8888";\r
-        default:\r
-            return error(GL_INVALID_ENUM, (GLubyte*)NULL);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY, (GLubyte*)NULL);\r
-    }\r
-\r
-    return NULL;\r
-}\r
+       TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint* params = 0x%0.8p)", target, pname, params);\r
 \r
-void GL_APIENTRY glGetTexParameterfv(GLenum target, GLenum pname, GLfloat* params)\r
-{\r
-    TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLfloat* params = 0x%0.8p)", target, pname, params);\r
-\r
-    try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
-\r
-        if(context)\r
-        {\r
-            es1::Texture *texture;\r
-\r
-            switch(target)\r
-            {\r
-            case GL_TEXTURE_2D:\r
-                texture = context->getTexture2D();\r
-                break;\r
-            case GL_TEXTURE_EXTERNAL_OES:\r
-                texture = context->getTextureExternal();\r
-                break;\r
-            default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-\r
-            switch(pname)\r
-            {\r
-            case GL_TEXTURE_MAG_FILTER:\r
-                *params = (GLfloat)texture->getMagFilter();\r
-                break;\r
-            case GL_TEXTURE_MIN_FILTER:\r
-                *params = (GLfloat)texture->getMinFilter();\r
-                break;\r
-            case GL_TEXTURE_WRAP_S:\r
-                *params = (GLfloat)texture->getWrapS();\r
-                break;\r
-            case GL_TEXTURE_WRAP_T:\r
-                *params = (GLfloat)texture->getWrapT();\r
-                break;\r
-                       case GL_TEXTURE_MAX_ANISOTROPY_EXT:\r
-                *params = texture->getMaxAnisotropy();\r
-                break;\r
-            case GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES:\r
-                *params = (GLfloat)1;\r
-                break;\r
-            default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+       es1::Context *context = es1::getContext();\r
 \r
-void GL_APIENTRY glGetTexParameteriv(GLenum target, GLenum pname, GLint* params)\r
-{\r
-    TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint* params = 0x%0.8p)", target, pname, params);\r
-\r
-    try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
-\r
-        if(context)\r
-        {\r
-            es1::Texture *texture;\r
-\r
-            switch(target)\r
-            {\r
-            case GL_TEXTURE_2D:\r
-                texture = context->getTexture2D();\r
-                break;\r
-            case GL_TEXTURE_EXTERNAL_OES:\r
-                texture = context->getTextureExternal();\r
-                break;\r
-            default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-\r
-            switch(pname)\r
-            {\r
-            case GL_TEXTURE_MAG_FILTER:\r
-                *params = texture->getMagFilter();\r
-                break;\r
-            case GL_TEXTURE_MIN_FILTER:\r
-                *params = texture->getMinFilter();\r
-                break;\r
-            case GL_TEXTURE_WRAP_S:\r
-                *params = texture->getWrapS();\r
-                break;\r
-            case GL_TEXTURE_WRAP_T:\r
-                *params = texture->getWrapT();\r
-                break;\r
-                   case GL_TEXTURE_MAX_ANISOTROPY_EXT:\r
-                *params = (GLint)texture->getMaxAnisotropy();\r
-                break;\r
-            case GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES:\r
-                *params = 1;\r
-                break;\r
-            default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               es1::Texture *texture;\r
+\r
+               switch(target)\r
+               {\r
+               case GL_TEXTURE_2D:\r
+                       texture = context->getTexture2D();\r
+                       break;\r
+               case GL_TEXTURE_EXTERNAL_OES:\r
+                       texture = context->getTextureExternal();\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+\r
+               switch(pname)\r
+               {\r
+               case GL_TEXTURE_MAG_FILTER:\r
+                       *params = texture->getMagFilter();\r
+                       break;\r
+               case GL_TEXTURE_MIN_FILTER:\r
+                       *params = texture->getMinFilter();\r
+                       break;\r
+               case GL_TEXTURE_WRAP_S:\r
+                       *params = texture->getWrapS();\r
+                       break;\r
+               case GL_TEXTURE_WRAP_T:\r
+                       *params = texture->getWrapT();\r
+                       break;\r
+               case GL_TEXTURE_MAX_ANISOTROPY_EXT:\r
+                       *params = (GLint)texture->getMaxAnisotropy();\r
+                       break;\r
+               case GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES:\r
+                       *params = 1;\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glGetTexEnvfv(GLenum env, GLenum pname, GLfloat *params)\r
@@ -2847,172 +2467,134 @@ void GL_APIENTRY glGetTexParameterxv(GLenum target, GLenum pname, GLfixed *param
 \r
 void GL_APIENTRY glHint(GLenum target, GLenum mode)\r
 {\r
-    TRACE("(GLenum target = 0x%X, GLenum mode = 0x%X)", target, mode);\r
-\r
-    try\r
-    {\r
-        switch(mode)\r
-        {\r
-          case GL_FASTEST:\r
-          case GL_NICEST:\r
-          case GL_DONT_CARE:\r
-            break;\r
-          default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        es1::Context *context = es1::getContext();\r
-        switch(target)\r
-        {\r
-          case GL_GENERATE_MIPMAP_HINT:\r
-            if(context) context->setGenerateMipmapHint(mode);\r
-            break;\r
-          default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLenum target = 0x%X, GLenum mode = 0x%X)", target, mode);\r
+\r
+       switch(mode)\r
+       {\r
+       case GL_FASTEST:\r
+       case GL_NICEST:\r
+       case GL_DONT_CARE:\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       es1::Context *context = es1::getContext();\r
+\r
+       if(context)\r
+       {\r
+               switch(target)\r
+               {\r
+               case GL_GENERATE_MIPMAP_HINT:\r
+                       context->setGenerateMipmapHint(mode);\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+       }\r
 }\r
 \r
 GLboolean GL_APIENTRY glIsBuffer(GLuint buffer)\r
 {\r
-    TRACE("(GLuint buffer = %d)", buffer);\r
+       TRACE("(GLuint buffer = %d)", buffer);\r
 \r
-    try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
+       es1::Context *context = es1::getContext();\r
 \r
-        if(context && buffer)\r
-        {\r
-            es1::Buffer *bufferObject = context->getBuffer(buffer);\r
+       if(context && buffer)\r
+       {\r
+               es1::Buffer *bufferObject = context->getBuffer(buffer);\r
 \r
-            if(bufferObject)\r
-            {\r
-                return GL_TRUE;\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY, GL_FALSE);\r
-    }\r
+               if(bufferObject)\r
+               {\r
+                       return GL_TRUE;\r
+               }\r
+       }\r
 \r
-    return GL_FALSE;\r
+       return GL_FALSE;\r
 }\r
 \r
 GLboolean GL_APIENTRY glIsEnabled(GLenum cap)\r
 {\r
-    TRACE("(GLenum cap = 0x%X)", cap);\r
-\r
-    try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
-\r
-        if(context)\r
-        {\r
-            switch(cap)\r
-            {\r
-              case GL_CULL_FACE:                return context->isCullFaceEnabled();\r
-              case GL_POLYGON_OFFSET_FILL:      return context->isPolygonOffsetFillEnabled();\r
-              case GL_SAMPLE_ALPHA_TO_COVERAGE: return context->isSampleAlphaToCoverageEnabled();\r
-              case GL_SAMPLE_COVERAGE:          return context->isSampleCoverageEnabled();\r
-              case GL_SCISSOR_TEST:             return context->isScissorTestEnabled();\r
-              case GL_STENCIL_TEST:             return context->isStencilTestEnabled();\r
-              case GL_DEPTH_TEST:               return context->isDepthTestEnabled();\r
-              case GL_BLEND:                    return context->isBlendEnabled();\r
-              case GL_DITHER:                   return context->isDitherEnabled();\r
-              default:\r
-                return error(GL_INVALID_ENUM, false);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY, false);\r
-    }\r
-\r
-    return false;\r
+       TRACE("(GLenum cap = 0x%X)", cap);\r
+\r
+       es1::Context *context = es1::getContext();\r
+\r
+       if(context)\r
+       {\r
+               switch(cap)\r
+               {\r
+               case GL_CULL_FACE:                return context->isCullFaceEnabled();\r
+               case GL_POLYGON_OFFSET_FILL:      return context->isPolygonOffsetFillEnabled();\r
+               case GL_SAMPLE_ALPHA_TO_COVERAGE: return context->isSampleAlphaToCoverageEnabled();\r
+               case GL_SAMPLE_COVERAGE:          return context->isSampleCoverageEnabled();\r
+               case GL_SCISSOR_TEST:             return context->isScissorTestEnabled();\r
+               case GL_STENCIL_TEST:             return context->isStencilTestEnabled();\r
+               case GL_DEPTH_TEST:               return context->isDepthTestEnabled();\r
+               case GL_BLEND:                    return context->isBlendEnabled();\r
+               case GL_DITHER:                   return context->isDitherEnabled();\r
+               default:\r
+                       return error(GL_INVALID_ENUM, GL_FALSE);\r
+               }\r
+       }\r
+\r
+       return GL_FALSE;\r
 }\r
 \r
 GLboolean GL_APIENTRY glIsFramebufferOES(GLuint framebuffer)\r
 {\r
-    TRACE("(GLuint framebuffer = %d)", framebuffer);\r
+       TRACE("(GLuint framebuffer = %d)", framebuffer);\r
 \r
-    try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
+       es1::Context *context = es1::getContext();\r
 \r
-        if(context && framebuffer)\r
-        {\r
-            es1::Framebuffer *framebufferObject = context->getFramebuffer(framebuffer);\r
+       if(context && framebuffer)\r
+       {\r
+               es1::Framebuffer *framebufferObject = context->getFramebuffer(framebuffer);\r
 \r
-            if(framebufferObject)\r
-            {\r
-                return GL_TRUE;\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY, GL_FALSE);\r
-    }\r
+               if(framebufferObject)\r
+               {\r
+                       return GL_TRUE;\r
+               }\r
+       }\r
 \r
-    return GL_FALSE;\r
+       return GL_FALSE;\r
 }\r
 \r
 GLboolean GL_APIENTRY glIsTexture(GLuint texture)\r
 {\r
-    TRACE("(GLuint texture = %d)", texture);\r
+       TRACE("(GLuint texture = %d)", texture);\r
 \r
-    try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
+       es1::Context *context = es1::getContext();\r
 \r
-        if(context && texture)\r
-        {\r
-            es1::Texture *textureObject = context->getTexture(texture);\r
+       if(context && texture)\r
+       {\r
+               es1::Texture *textureObject = context->getTexture(texture);\r
 \r
-            if(textureObject)\r
-            {\r
-                return GL_TRUE;\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY, GL_FALSE);\r
-    }\r
+               if(textureObject)\r
+               {\r
+                       return GL_TRUE;\r
+               }\r
+       }\r
 \r
-    return GL_FALSE;\r
+       return GL_FALSE;\r
 }\r
 \r
 GLboolean GL_APIENTRY glIsRenderbufferOES(GLuint renderbuffer)\r
 {\r
-    TRACE("(GLuint renderbuffer = %d)", renderbuffer);\r
+       TRACE("(GLuint renderbuffer = %d)", renderbuffer);\r
 \r
-    try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
+       es1::Context *context = es1::getContext();\r
 \r
-        if(context && renderbuffer)\r
-        {\r
-            es1::Renderbuffer *renderbufferObject = context->getRenderbuffer(renderbuffer);\r
+       if(context && renderbuffer)\r
+       {\r
+               es1::Renderbuffer *renderbufferObject = context->getRenderbuffer(renderbuffer);\r
 \r
-            if(renderbufferObject)\r
-            {\r
-                return GL_TRUE;\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY, GL_FALSE);\r
-    }\r
+               if(renderbufferObject)\r
+               {\r
+                       return GL_TRUE;\r
+               }\r
+       }\r
 \r
-    return GL_FALSE;\r
+       return GL_FALSE;\r
 }\r
 \r
 void GL_APIENTRY glLightModelf(GLenum pname, GLfloat param)\r
@@ -3044,40 +2626,33 @@ void GL_APIENTRY glLightfv(GLenum light, GLenum pname, const GLfloat *params)
 {\r
        TRACE("(GLenum light = 0x%X, GLenum pname = 0x%X, const GLint *params)", light, pname);\r
 \r
-       try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
+       es1::Context *context = es1::getContext();\r
 \r
-        if(context)\r
-        {\r
-                       int index = light - GL_LIGHT0;\r
+       if(context)\r
+       {\r
+               int index = light - GL_LIGHT0;\r
 \r
-                       if(index < 0 || index > es1::MAX_LIGHTS)\r
-                       {\r
-                               return error(GL_INVALID_ENUM);\r
-                       }\r
+               if(index < 0 || index > es1::MAX_LIGHTS)\r
+               {\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
 \r
-            switch(pname)\r
-                       {\r
-                       case GL_AMBIENT:               context->setLightAmbient(index, params[0], params[1], params[2], params[3]);  break;\r
-                       case GL_DIFFUSE:               context->setLightDiffuse(index, params[0], params[1], params[2], params[3]);  break;\r
-                       case GL_SPECULAR:              context->setLightSpecular(index, params[0], params[1], params[2], params[3]); break;\r
-                       case GL_POSITION:              context->setLightPosition(index, params[0], params[1], params[2], params[3]); break;\r
-                       case GL_SPOT_DIRECTION:        context->setLightDirection(index, params[0], params[1], params[2]);           break;\r
-                       case GL_SPOT_EXPONENT:         UNIMPLEMENTED(); break;\r
-                       case GL_SPOT_CUTOFF:           UNIMPLEMENTED(); break;\r
-                       case GL_CONSTANT_ATTENUATION:  context->setLightAttenuationConstant(index, params[0]);                       break;\r
-                       case GL_LINEAR_ATTENUATION:    context->setLightAttenuationLinear(index, params[0]);                         break;\r
-                       case GL_QUADRATIC_ATTENUATION: context->setLightAttenuationQuadratic(index, params[0]);                      break;\r
-                       default:\r
-                               return error(GL_INVALID_ENUM);\r
-                       }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+               switch(pname)\r
+               {\r
+               case GL_AMBIENT:               context->setLightAmbient(index, params[0], params[1], params[2], params[3]);  break;\r
+               case GL_DIFFUSE:               context->setLightDiffuse(index, params[0], params[1], params[2], params[3]);  break;\r
+               case GL_SPECULAR:              context->setLightSpecular(index, params[0], params[1], params[2], params[3]); break;\r
+               case GL_POSITION:              context->setLightPosition(index, params[0], params[1], params[2], params[3]); break;\r
+               case GL_SPOT_DIRECTION:        context->setLightDirection(index, params[0], params[1], params[2]);           break;\r
+               case GL_SPOT_EXPONENT:         UNIMPLEMENTED(); break;\r
+               case GL_SPOT_CUTOFF:           UNIMPLEMENTED(); break;\r
+               case GL_CONSTANT_ATTENUATION:  context->setLightAttenuationConstant(index, params[0]);                       break;\r
+               case GL_LINEAR_ATTENUATION:    context->setLightAttenuationLinear(index, params[0]);                         break;\r
+               case GL_QUADRATIC_ATTENUATION: context->setLightAttenuationQuadratic(index, params[0]);                      break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glLightx(GLenum light, GLenum pname, GLfixed param)\r
@@ -3092,26 +2667,19 @@ void GL_APIENTRY glLightxv(GLenum light, GLenum pname, const GLfixed *params)
 \r
 void GL_APIENTRY glLineWidth(GLfloat width)\r
 {\r
-    TRACE("(GLfloat width = %f)", width);\r
+       TRACE("(GLfloat width = %f)", width);\r
 \r
-    try\r
-    {\r
-        if(width <= 0.0f)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+       if(width <= 0.0f)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-        es1::Context *context = es1::getContext();\r
+       es1::Context *context = es1::getContext();\r
 \r
-        if(context)\r
-        {\r
-            context->setLineWidth(width);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               context->setLineWidth(width);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glLineWidthx(GLfixed width)\r
@@ -3123,38 +2691,24 @@ void GL_APIENTRY glLoadIdentity(void)
 {\r
        TRACE("()");\r
 \r
-    try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
+       es1::Context *context = es1::getContext();\r
 \r
-        if(context)\r
-        {\r
-            context->loadIdentity();\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               context->loadIdentity();\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glLoadMatrixf(const GLfloat *m)\r
 {\r
        TRACE("(const GLfloat *m)");\r
 \r
-    try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
+       es1::Context *context = es1::getContext();\r
 \r
-        if(context)\r
-        {\r
-            context->load(m);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               context->load(m);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glLoadMatrixx(const GLfixed *m)\r
@@ -3191,38 +2745,24 @@ void GL_APIENTRY glMatrixMode(GLenum mode)
 {\r
        TRACE("(GLenum mode = 0x%X)", mode);\r
 \r
-    try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
+       es1::Context *context = es1::getContext();\r
 \r
-        if(context)\r
-        {\r
-            context->setMatrixMode(mode);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               context->setMatrixMode(mode);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glMultMatrixf(const GLfloat *m)\r
 {\r
        TRACE("(const GLfloat *m)");\r
 \r
-    try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
+       es1::Context *context = es1::getContext();\r
 \r
-        if(context)\r
-        {\r
-            context->multiply(m);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               context->multiply(m);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glMultMatrixx(const GLfixed *m)\r
@@ -3254,26 +2794,19 @@ void GL_APIENTRY glNormalPointer(GLenum type, GLsizei stride, const GLvoid *poin
 {\r
        TRACE("(GLenum type = 0x%X, GLsizei stride = %d, const GLvoid *pointer = 0x%0.8p)", type, stride, pointer);\r
 \r
-       glVertexAttribPointer(sw::Normal, 3, type, false, stride, pointer);\r
+glVertexAttribPointer(sw::Normal, 3, type, false, stride, pointer);\r
 }\r
 \r
 void GL_APIENTRY glOrthof(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)\r
 {\r
        TRACE("(GLfloat left = %f, GLfloat right = %f, GLfloat bottom = %f, GLfloat top = %f, GLfloat zNear = %f, GLfloat zFar = %f)", left, right, bottom, top, zNear, zFar);\r
 \r
-    try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
+       es1::Context *context = es1::getContext();\r
 \r
-        if(context)\r
-        {\r
-            context->ortho(left, right, bottom, top, zNear, zFar);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               context->ortho(left, right, bottom, top, zNear, zFar);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glOrthox(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar)\r
@@ -3283,43 +2816,36 @@ void GL_APIENTRY glOrthox(GLfixed left, GLfixed right, GLfixed bottom, GLfixed t
 \r
 void GL_APIENTRY glPixelStorei(GLenum pname, GLint param)\r
 {\r
-    TRACE("(GLenum pname = 0x%X, GLint param = %d)", pname, param);\r
-\r
-    try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
-\r
-        if(context)\r
-        {\r
-            switch(pname)\r
-            {\r
-              case GL_UNPACK_ALIGNMENT:\r
-                if(param != 1 && param != 2 && param != 4 && param != 8)\r
-                {\r
-                    return error(GL_INVALID_VALUE);\r
-                }\r
-\r
-                context->setUnpackAlignment(param);\r
-                break;\r
-\r
-              case GL_PACK_ALIGNMENT:\r
-                if(param != 1 && param != 2 && param != 4 && param != 8)\r
-                {\r
-                    return error(GL_INVALID_VALUE);\r
-                }\r
-\r
-                context->setPackAlignment(param);\r
-                break;\r
-\r
-              default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLenum pname = 0x%X, GLint param = %d)", pname, param);\r
+\r
+       es1::Context *context = es1::getContext();\r
+\r
+       if(context)\r
+       {\r
+               switch(pname)\r
+               {\r
+                       case GL_UNPACK_ALIGNMENT:\r
+                       if(param != 1 && param != 2 && param != 4 && param != 8)\r
+                       {\r
+                               return error(GL_INVALID_VALUE);\r
+                       }\r
+\r
+                       context->setUnpackAlignment(param);\r
+                       break;\r
+\r
+                       case GL_PACK_ALIGNMENT:\r
+                       if(param != 1 && param != 2 && param != 4 && param != 8)\r
+                       {\r
+                               return error(GL_INVALID_VALUE);\r
+                       }\r
+\r
+                       context->setPackAlignment(param);\r
+                       break;\r
+\r
+                       default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glPointParameterf(GLenum pname, GLfloat param)\r
@@ -3359,21 +2885,14 @@ void GL_APIENTRY glPointSizex(GLfixed size)
 \r
 void GL_APIENTRY glPolygonOffset(GLfloat factor, GLfloat units)\r
 {\r
-    TRACE("(GLfloat factor = %f, GLfloat units = %f)", factor, units);\r
+       TRACE("(GLfloat factor = %f, GLfloat units = %f)", factor, units);\r
 \r
-    try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
+       es1::Context *context = es1::getContext();\r
 \r
-        if(context)\r
-        {\r
-            context->setPolygonOffsetParams(factor, units);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               context->setPolygonOffsetParams(factor, units);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glPolygonOffsetx(GLfixed factor, GLfixed units)\r
@@ -3385,158 +2904,123 @@ void GL_APIENTRY glPopMatrix(void)
 {\r
        TRACE("()");\r
 \r
-    try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
+       es1::Context *context = es1::getContext();\r
 \r
-        if(context)\r
-        {\r
-            context->popMatrix();\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               context->popMatrix();\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glPushMatrix(void)\r
 {\r
        TRACE("()");\r
 \r
-    try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
+       es1::Context *context = es1::getContext();\r
 \r
-        if(context)\r
-        {\r
-            context->pushMatrix();\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               context->pushMatrix();\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels)\r
 {\r
-    TRACE("(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d, "\r
-          "GLenum format = 0x%X, GLenum type = 0x%X, GLvoid* pixels = 0x%0.8p)",\r
-          x, y, width, height, format, type,  pixels);\r
+       TRACE("(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d, "\r
+             "GLenum format = 0x%X, GLenum type = 0x%X, GLvoid* pixels = 0x%0.8p)",\r
+             x, y, width, height, format, type,  pixels);\r
 \r
-    try\r
-    {\r
-        if(width < 0 || height < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+       if(width < 0 || height < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-        if(!validReadFormatType(format, type))\r
-        {\r
-            return error(GL_INVALID_OPERATION);\r
-        }\r
+       if(!validReadFormatType(format, type))\r
+       {\r
+               return error(GL_INVALID_OPERATION);\r
+       }\r
 \r
-        es1::Context *context = es1::getContext();\r
+       es1::Context *context = es1::getContext();\r
 \r
-        if(context)\r
-        {\r
-            context->readPixels(x, y, width, height, format, type, NULL, pixels);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               context->readPixels(x, y, width, height, format, type, NULL, pixels);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glRenderbufferStorageOES(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)\r
 {\r
-    TRACE("(GLenum target = 0x%X, GLenum internalformat = 0x%X, GLsizei width = %d, GLsizei height = %d)",\r
-          target, internalformat, width, height);\r
-\r
-    try\r
-    {\r
-        switch(target)\r
-        {\r
-        case GL_RENDERBUFFER_OES:\r
-            break;\r
-        default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        if(!es1::IsColorRenderable(internalformat) && !es1::IsDepthRenderable(internalformat) && !es1::IsStencilRenderable(internalformat))\r
-        {\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        if(width < 0 || height < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        es1::Context *context = es1::getContext();\r
-\r
-        if(context)\r
-        {\r
-            if(width > es1::IMPLEMENTATION_MAX_RENDERBUFFER_SIZE ||\r
-               height > es1::IMPLEMENTATION_MAX_RENDERBUFFER_SIZE)\r
-            {\r
-                return error(GL_INVALID_VALUE);\r
-            }\r
-\r
-            GLuint handle = context->getRenderbufferHandle();\r
-            if(handle == 0)\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-\r
-            switch(internalformat)\r
-            {\r
-            case GL_DEPTH_COMPONENT16_OES:\r
-                context->setRenderbufferStorage(new es1::Depthbuffer(width, height, 0));\r
-                break;\r
-            case GL_RGBA4_OES:\r
-            case GL_RGB5_A1_OES:\r
-            case GL_RGB565_OES:\r
-            case GL_RGB8_OES:\r
-            case GL_RGBA8_OES:\r
-                context->setRenderbufferStorage(new es1::Colorbuffer(width, height, internalformat, 0));\r
-                break;\r
-            case GL_STENCIL_INDEX8_OES:\r
-                context->setRenderbufferStorage(new es1::Stencilbuffer(width, height, 0));\r
-                break;\r
-            case GL_DEPTH24_STENCIL8_OES:\r
-                context->setRenderbufferStorage(new es1::DepthStencilbuffer(width, height, 0));\r
-                break;\r
-            default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLenum target = 0x%X, GLenum internalformat = 0x%X, GLsizei width = %d, GLsizei height = %d)",\r
+             target, internalformat, width, height);\r
+\r
+       switch(target)\r
+       {\r
+       case GL_RENDERBUFFER_OES:\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       if(!es1::IsColorRenderable(internalformat) && !es1::IsDepthRenderable(internalformat) && !es1::IsStencilRenderable(internalformat))\r
+       {\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       if(width < 0 || height < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       es1::Context *context = es1::getContext();\r
+\r
+       if(context)\r
+       {\r
+               if(width > es1::IMPLEMENTATION_MAX_RENDERBUFFER_SIZE ||\r
+                  height > es1::IMPLEMENTATION_MAX_RENDERBUFFER_SIZE)\r
+               {\r
+                       return error(GL_INVALID_VALUE);\r
+               }\r
+\r
+               GLuint handle = context->getRenderbufferHandle();\r
+               if(handle == 0)\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
+\r
+               switch(internalformat)\r
+               {\r
+               case GL_DEPTH_COMPONENT16_OES:\r
+                       context->setRenderbufferStorage(new es1::Depthbuffer(width, height, 0));\r
+                       break;\r
+               case GL_RGBA4_OES:\r
+               case GL_RGB5_A1_OES:\r
+               case GL_RGB565_OES:\r
+               case GL_RGB8_OES:\r
+               case GL_RGBA8_OES:\r
+                       context->setRenderbufferStorage(new es1::Colorbuffer(width, height, internalformat, 0));\r
+                       break;\r
+               case GL_STENCIL_INDEX8_OES:\r
+                       context->setRenderbufferStorage(new es1::Stencilbuffer(width, height, 0));\r
+                       break;\r
+               case GL_DEPTH24_STENCIL8_OES:\r
+                       context->setRenderbufferStorage(new es1::DepthStencilbuffer(width, height, 0));\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z)\r
 {\r
        TRACE("(GLfloat angle = %f, GLfloat x = %f, GLfloat y = %f, GLfloat z = %f)", angle, x, y, z);\r
 \r
-    try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
+       es1::Context *context = es1::getContext();\r
 \r
-        if(context)\r
-        {\r
-            context->rotate(angle, x, y, z);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               context->rotate(angle, x, y, z);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glRotatex(GLfixed angle, GLfixed x, GLfixed y, GLfixed z)\r
@@ -3546,21 +3030,14 @@ void GL_APIENTRY glRotatex(GLfixed angle, GLfixed x, GLfixed y, GLfixed z)
 \r
 void GL_APIENTRY glSampleCoverage(GLclampf value, GLboolean invert)\r
 {\r
-    TRACE("(GLclampf value = %f, GLboolean invert = %d)", value, invert);\r
+       TRACE("(GLclampf value = %f, GLboolean invert = %d)", value, invert);\r
 \r
-    try\r
-    {\r
-        es1::Context* context = es1::getContext();\r
+       es1::Context* context = es1::getContext();\r
 \r
-        if(context)\r
-        {\r
-            context->setSampleCoverageParams(es1::clamp01(value), invert == GL_TRUE);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               context->setSampleCoverageParams(es1::clamp01(value), invert == GL_TRUE);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glSampleCoveragex(GLclampx value, GLboolean invert)\r
@@ -3572,19 +3049,12 @@ void GL_APIENTRY glScalef(GLfloat x, GLfloat y, GLfloat z)
 {\r
        TRACE("(GLfloat x = %f, GLfloat y = %f, GLfloat z = %f)", x, y, z);\r
 \r
-    try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
+       es1::Context *context = es1::getContext();\r
 \r
-        if(context)\r
-        {\r
-            context->scale(x, y, z);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               context->scale(x, y, z);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glScalex(GLfixed x, GLfixed y, GLfixed z)\r
@@ -3594,26 +3064,19 @@ void GL_APIENTRY glScalex(GLfixed x, GLfixed y, GLfixed z)
 \r
 void GL_APIENTRY glScissor(GLint x, GLint y, GLsizei width, GLsizei height)\r
 {\r
-    TRACE("(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d)", x, y, width, height);\r
+       TRACE("(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d)", x, y, width, height);\r
 \r
-    try\r
-    {\r
-        if(width < 0 || height < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+       if(width < 0 || height < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-        es1::Context* context = es1::getContext();\r
+       es1::Context* context = es1::getContext();\r
 \r
-        if(context)\r
-        {\r
-            context->setScissorParams(x, y, width, height);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               context->setScissorParams(x, y, width, height);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glShadeModel(GLenum mode)\r
@@ -3623,140 +3086,112 @@ void GL_APIENTRY glShadeModel(GLenum mode)
 \r
 void GL_APIENTRY glStencilFunc(GLenum func, GLint ref, GLuint mask)\r
 {\r
-    TRACE("(GLenum func = 0x%X, GLint ref = %d, GLuint mask = %d)",  func, ref, mask);\r
-\r
-    try\r
-    {\r
-        switch(func)\r
-        {\r
-          case GL_NEVER:\r
-          case GL_ALWAYS:\r
-          case GL_LESS:\r
-          case GL_LEQUAL:\r
-          case GL_EQUAL:\r
-          case GL_GEQUAL:\r
-          case GL_GREATER:\r
-          case GL_NOTEQUAL:\r
-            break;\r
-          default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        es1::Context *context = es1::getContext();\r
-\r
-        if(context)\r
-        {\r
-            context->setStencilParams(func, ref, mask);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLenum func = 0x%X, GLint ref = %d, GLuint mask = %d)",  func, ref, mask);\r
+\r
+       switch(func)\r
+       {\r
+               case GL_NEVER:\r
+               case GL_ALWAYS:\r
+               case GL_LESS:\r
+               case GL_LEQUAL:\r
+               case GL_EQUAL:\r
+               case GL_GEQUAL:\r
+               case GL_GREATER:\r
+               case GL_NOTEQUAL:\r
+               break;\r
+               default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       es1::Context *context = es1::getContext();\r
+\r
+       if(context)\r
+       {\r
+               context->setStencilParams(func, ref, mask);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glStencilMask(GLuint mask)\r
 {\r
-    TRACE("(GLuint mask = %d)", mask);\r
+       TRACE("(GLuint mask = %d)", mask);\r
 \r
-    try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
+       es1::Context *context = es1::getContext();\r
 \r
-        if(context)\r
-        {\r
-            context->setStencilWritemask(mask);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               context->setStencilWritemask(mask);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glStencilOp(GLenum fail, GLenum zfail, GLenum zpass)\r
 {\r
-    TRACE("(GLenum fail = 0x%X, GLenum zfail = 0x%X, GLenum zpas = 0x%Xs)", fail, zfail, zpass);\r
-\r
-    try\r
-    {\r
-        switch(fail)\r
-        {\r
-          case GL_ZERO:\r
-          case GL_KEEP:\r
-          case GL_REPLACE:\r
-          case GL_INCR:\r
-          case GL_DECR:\r
-          case GL_INVERT:\r
-          case GL_INCR_WRAP_OES:\r
-          case GL_DECR_WRAP_OES:\r
-            break;\r
-          default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        switch(zfail)\r
-        {\r
-          case GL_ZERO:\r
-          case GL_KEEP:\r
-          case GL_REPLACE:\r
-          case GL_INCR:\r
-          case GL_DECR:\r
-          case GL_INVERT:\r
-          case GL_INCR_WRAP_OES:\r
-          case GL_DECR_WRAP_OES:\r
-            break;\r
-          default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        switch(zpass)\r
-        {\r
-          case GL_ZERO:\r
-          case GL_KEEP:\r
-          case GL_REPLACE:\r
-          case GL_INCR:\r
-          case GL_DECR:\r
-          case GL_INVERT:\r
-          case GL_INCR_WRAP_OES:\r
-          case GL_DECR_WRAP_OES:\r
-            break;\r
-          default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        es1::Context *context = es1::getContext();\r
-\r
-        if(context)\r
-        {\r
-            context->setStencilOperations(fail, zfail, zpass);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLenum fail = 0x%X, GLenum zfail = 0x%X, GLenum zpas = 0x%Xs)", fail, zfail, zpass);\r
+\r
+       switch(fail)\r
+       {\r
+               case GL_ZERO:\r
+               case GL_KEEP:\r
+               case GL_REPLACE:\r
+               case GL_INCR:\r
+               case GL_DECR:\r
+               case GL_INVERT:\r
+               case GL_INCR_WRAP_OES:\r
+               case GL_DECR_WRAP_OES:\r
+               break;\r
+               default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       switch(zfail)\r
+       {\r
+               case GL_ZERO:\r
+               case GL_KEEP:\r
+               case GL_REPLACE:\r
+               case GL_INCR:\r
+               case GL_DECR:\r
+               case GL_INVERT:\r
+               case GL_INCR_WRAP_OES:\r
+               case GL_DECR_WRAP_OES:\r
+               break;\r
+               default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       switch(zpass)\r
+       {\r
+               case GL_ZERO:\r
+               case GL_KEEP:\r
+               case GL_REPLACE:\r
+               case GL_INCR:\r
+               case GL_DECR:\r
+               case GL_INVERT:\r
+               case GL_INCR_WRAP_OES:\r
+               case GL_DECR_WRAP_OES:\r
+               break;\r
+               default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       es1::Context *context = es1::getContext();\r
+\r
+       if(context)\r
+       {\r
+               context->setStencilOperations(fail, zfail, zpass);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glTexCoordPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer)\r
 {\r
        TRACE("(GLint size = %d, GLenum type = 0x%X, GLsizei stride = %d, const GLvoid *pointer = 0x%0.8p)", size, type, stride, pointer);\r
 \r
-       try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
+       es1::Context *context = es1::getContext();\r
 \r
-        if(context)\r
-        {\r
-            GLenum texture = context->getClientActiveTexture();\r
+       if(context)\r
+       {\r
+               GLenum texture = context->getClientActiveTexture();\r
 \r
-                       glVertexAttribPointer(sw::TexCoord0 + (texture - GL_TEXTURE0), size, type, false, stride, pointer);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+               glVertexAttribPointer(sw::TexCoord0 + (texture - GL_TEXTURE0), size, type, false, stride, pointer);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glTexEnvf(GLenum target, GLenum pname, GLfloat param)\r
@@ -3792,284 +3227,263 @@ void GL_APIENTRY glTexEnvxv(GLenum target, GLenum pname, const GLfixed *params)
 void GL_APIENTRY glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,\r
                               GLint border, GLenum format, GLenum type, const GLvoid* pixels)\r
 {\r
-    TRACE("(GLenum target = 0x%X, GLint level = %d, GLint internalformat = %d, GLsizei width = %d, GLsizei height = %d, "\r
-          "GLint border = %d, GLenum format = 0x%X, GLenum type = 0x%X, const GLvoid* pixels =  0x%0.8p)",\r
-          target, level, internalformat, width, height, border, format, type, pixels);\r
-\r
-    try\r
-    {\r
-        if(!validImageSize(level, width, height))\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        if(internalformat != format)\r
-        {\r
-            return error(GL_INVALID_OPERATION);\r
-        }\r
-\r
-        switch(format)\r
-        {\r
-        case GL_ALPHA:\r
-        case GL_LUMINANCE:\r
-        case GL_LUMINANCE_ALPHA:\r
-            switch(type)\r
-            {\r
-            case GL_UNSIGNED_BYTE:\r
-            case GL_FLOAT:\r
-                break;\r
-            default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-            break;\r
-        case GL_RGB:\r
-            switch(type)\r
-            {\r
-            case GL_UNSIGNED_BYTE:\r
-            case GL_UNSIGNED_SHORT_5_6_5:\r
-            case GL_FLOAT:\r
-                break;\r
-            default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-            break;\r
-        case GL_RGBA:\r
-            switch(type)\r
-            {\r
-            case GL_UNSIGNED_BYTE:\r
-            case GL_UNSIGNED_SHORT_4_4_4_4:\r
-            case GL_UNSIGNED_SHORT_5_5_5_1:\r
-            case GL_FLOAT:\r
-                break;\r
-            default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-            break;\r
-        case GL_BGRA_EXT:\r
-            switch(type)\r
-            {\r
-            case GL_UNSIGNED_BYTE:\r
-                break;\r
-            default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-            break;\r
-        case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:  // error cases for compressed textures are handled below\r
-        case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:\r
-            break;\r
-               case GL_DEPTH_STENCIL_OES:\r
-                       switch(type)\r
+       TRACE("(GLenum target = 0x%X, GLint level = %d, GLint internalformat = %d, GLsizei width = %d, GLsizei height = %d, "\r
+             "GLint border = %d, GLenum format = 0x%X, GLenum type = 0x%X, const GLvoid* pixels =  0x%0.8p)",\r
+             target, level, internalformat, width, height, border, format, type, pixels);\r
+\r
+       if(!validImageSize(level, width, height))\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       if(internalformat != format)\r
+       {\r
+               return error(GL_INVALID_OPERATION);\r
+       }\r
+\r
+       switch(format)\r
+       {\r
+       case GL_ALPHA:\r
+       case GL_LUMINANCE:\r
+       case GL_LUMINANCE_ALPHA:\r
+               switch(type)\r
+               {\r
+               case GL_UNSIGNED_BYTE:\r
+               case GL_FLOAT:\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+               break;\r
+       case GL_RGB:\r
+               switch(type)\r
+               {\r
+               case GL_UNSIGNED_BYTE:\r
+               case GL_UNSIGNED_SHORT_5_6_5:\r
+               case GL_FLOAT:\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+               break;\r
+       case GL_RGBA:\r
+               switch(type)\r
+               {\r
+               case GL_UNSIGNED_BYTE:\r
+               case GL_UNSIGNED_SHORT_4_4_4_4:\r
+               case GL_UNSIGNED_SHORT_5_5_5_1:\r
+               case GL_FLOAT:\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+               break;\r
+       case GL_BGRA_EXT:\r
+               switch(type)\r
+               {\r
+               case GL_UNSIGNED_BYTE:\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+               break;\r
+       case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:  // error cases for compressed textures are handled below\r
+       case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:\r
+               break;\r
+       case GL_DEPTH_STENCIL_OES:\r
+               switch(type)\r
+               {\r
+               case GL_UNSIGNED_INT_24_8_OES:\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       if(border != 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       es1::Context *context = es1::getContext();\r
+\r
+       if(context)\r
+       {\r
+               switch(target)\r
+               {\r
+                       case GL_TEXTURE_2D:\r
+                       if(width > (es1::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level) ||\r
+                          height > (es1::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level))\r
                        {\r
-                       case GL_UNSIGNED_INT_24_8_OES:\r
-                               break;\r
+                               return error(GL_INVALID_VALUE);\r
+                       }\r
+                       break;\r
                        default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+\r
+               if(format == GL_COMPRESSED_RGB_S3TC_DXT1_EXT ||\r
+                  format == GL_COMPRESSED_RGBA_S3TC_DXT1_EXT)\r
+               {\r
+                       if(S3TC_SUPPORT)\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+                       else\r
+                       {\r
                                return error(GL_INVALID_ENUM);\r
                        }\r
-                       break;\r
-        default:\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        if(border != 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        es1::Context *context = es1::getContext();\r
-\r
-        if(context)\r
-        {\r
-            switch(target)\r
-            {\r
-              case GL_TEXTURE_2D:\r
-                if(width > (es1::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level) ||\r
-                   height > (es1::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level))\r
-                {\r
-                    return error(GL_INVALID_VALUE);\r
-                }\r
-                break;\r
-              default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-\r
-            if(format == GL_COMPRESSED_RGB_S3TC_DXT1_EXT ||\r
-               format == GL_COMPRESSED_RGBA_S3TC_DXT1_EXT)\r
-            {\r
-                if(S3TC_SUPPORT)\r
-                {\r
-                    return error(GL_INVALID_OPERATION);\r
-                }\r
-                else\r
-                {\r
-                    return error(GL_INVALID_ENUM);\r
-                }\r
-            }\r
-\r
-            if(target == GL_TEXTURE_2D)\r
-            {\r
-                es1::Texture2D *texture = context->getTexture2D();\r
-\r
-                if(!texture)\r
-                {\r
-                    return error(GL_INVALID_OPERATION);\r
-                }\r
-\r
-                texture->setImage(level, width, height, format, type, context->getUnpackAlignment(), pixels);\r
-            }\r
-            else UNREACHABLE();\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+               }\r
+\r
+               if(target == GL_TEXTURE_2D)\r
+               {\r
+                       es1::Texture2D *texture = context->getTexture2D();\r
+\r
+                       if(!texture)\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+\r
+                       texture->setImage(level, width, height, format, type, context->getUnpackAlignment(), pixels);\r
+               }\r
+               else UNREACHABLE();\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glTexParameterf(GLenum target, GLenum pname, GLfloat param)\r
 {\r
-    TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLfloat param = %f)", target, pname, param);\r
-\r
-    try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
-\r
-        if(context)\r
-        {\r
-            es1::Texture *texture;\r
-\r
-            switch(target)\r
-            {\r
-            case GL_TEXTURE_2D:\r
-                texture = context->getTexture2D();\r
-                break;\r
-            case GL_TEXTURE_EXTERNAL_OES:\r
-                texture = context->getTextureExternal();\r
-                break;\r
-            default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-\r
-            switch(pname)\r
-            {\r
-            case GL_TEXTURE_WRAP_S:\r
-                if(!texture->setWrapS((GLenum)param))\r
-                {\r
-                    return error(GL_INVALID_ENUM);\r
-                }\r
-                break;\r
-            case GL_TEXTURE_WRAP_T:\r
-                if(!texture->setWrapT((GLenum)param))\r
-                {\r
-                    return error(GL_INVALID_ENUM);\r
-                }\r
-                break;\r
-            case GL_TEXTURE_MIN_FILTER:\r
-                if(!texture->setMinFilter((GLenum)param))\r
-                {\r
-                    return error(GL_INVALID_ENUM);\r
-                }\r
-                break;\r
-            case GL_TEXTURE_MAG_FILTER:\r
-                if(!texture->setMagFilter((GLenum)param))\r
-                {\r
-                    return error(GL_INVALID_ENUM);\r
-                }\r
-                break;\r
-            case GL_TEXTURE_MAX_ANISOTROPY_EXT:\r
-                if(!texture->setMaxAnisotropy(param))\r
-                {\r
-                    return error(GL_INVALID_VALUE);\r
-                }\r
-                break;\r
-            default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLfloat param = %f)", target, pname, param);\r
+\r
+       es1::Context *context = es1::getContext();\r
+\r
+       if(context)\r
+       {\r
+               es1::Texture *texture;\r
+\r
+               switch(target)\r
+               {\r
+               case GL_TEXTURE_2D:\r
+                       texture = context->getTexture2D();\r
+                       break;\r
+               case GL_TEXTURE_EXTERNAL_OES:\r
+                       texture = context->getTextureExternal();\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+\r
+               switch(pname)\r
+               {\r
+               case GL_TEXTURE_WRAP_S:\r
+                       if(!texture->setWrapS((GLenum)param))\r
+                       {\r
+                               return error(GL_INVALID_ENUM);\r
+                       }\r
+                       break;\r
+               case GL_TEXTURE_WRAP_T:\r
+                       if(!texture->setWrapT((GLenum)param))\r
+                       {\r
+                               return error(GL_INVALID_ENUM);\r
+                       }\r
+                       break;\r
+               case GL_TEXTURE_MIN_FILTER:\r
+                       if(!texture->setMinFilter((GLenum)param))\r
+                       {\r
+                               return error(GL_INVALID_ENUM);\r
+                       }\r
+                       break;\r
+               case GL_TEXTURE_MAG_FILTER:\r
+                       if(!texture->setMagFilter((GLenum)param))\r
+                       {\r
+                               return error(GL_INVALID_ENUM);\r
+                       }\r
+                       break;\r
+               case GL_TEXTURE_MAX_ANISOTROPY_EXT:\r
+                       if(!texture->setMaxAnisotropy(param))\r
+                       {\r
+                               return error(GL_INVALID_VALUE);\r
+                       }\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glTexParameterfv(GLenum target, GLenum pname, const GLfloat* params)\r
 {\r
-    glTexParameterf(target, pname, *params);\r
+       glTexParameterf(target, pname, *params);\r
 }\r
 \r
 void GL_APIENTRY glTexParameteri(GLenum target, GLenum pname, GLint param)\r
 {\r
-    TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint param = %d)", target, pname, param);\r
-\r
-    try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
-\r
-        if(context)\r
-        {\r
-            es1::Texture *texture;\r
-\r
-            switch(target)\r
-            {\r
-            case GL_TEXTURE_2D:\r
-                texture = context->getTexture2D();\r
-                break;\r
-            case GL_TEXTURE_EXTERNAL_OES:\r
-                  texture = context->getTextureExternal();\r
-                  break;\r
-            default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-\r
-            switch(pname)\r
-            {\r
-            case GL_TEXTURE_WRAP_S:\r
-                if(!texture->setWrapS((GLenum)param))\r
-                {\r
-                    return error(GL_INVALID_ENUM);\r
-                }\r
-                break;\r
-            case GL_TEXTURE_WRAP_T:\r
-                if(!texture->setWrapT((GLenum)param))\r
-                {\r
-                    return error(GL_INVALID_ENUM);\r
-                }\r
-                break;\r
-            case GL_TEXTURE_MIN_FILTER:\r
-                if(!texture->setMinFilter((GLenum)param))\r
-                {\r
-                    return error(GL_INVALID_ENUM);\r
-                }\r
-                break;\r
-            case GL_TEXTURE_MAG_FILTER:\r
-                if(!texture->setMagFilter((GLenum)param))\r
-                {\r
-                    return error(GL_INVALID_ENUM);\r
-                }\r
-                break;\r
-                       case GL_TEXTURE_MAX_ANISOTROPY_EXT:\r
-                if(!texture->setMaxAnisotropy((GLfloat)param))\r
-                {\r
-                    return error(GL_INVALID_VALUE);\r
-                }\r
-                break;\r
-                       case GL_TEXTURE_CROP_RECT_OES:\r
-                               UNIMPLEMENTED();\r
+       TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint param = %d)", target, pname, param);\r
+\r
+       es1::Context *context = es1::getContext();\r
+\r
+       if(context)\r
+       {\r
+               es1::Texture *texture;\r
+\r
+               switch(target)\r
+               {\r
+               case GL_TEXTURE_2D:\r
+                       texture = context->getTexture2D();\r
+                       break;\r
+               case GL_TEXTURE_EXTERNAL_OES:\r
+                               texture = context->getTextureExternal();\r
                                break;\r
-            default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+\r
+               switch(pname)\r
+               {\r
+               case GL_TEXTURE_WRAP_S:\r
+                       if(!texture->setWrapS((GLenum)param))\r
+                       {\r
+                               return error(GL_INVALID_ENUM);\r
+                       }\r
+                       break;\r
+               case GL_TEXTURE_WRAP_T:\r
+                       if(!texture->setWrapT((GLenum)param))\r
+                       {\r
+                               return error(GL_INVALID_ENUM);\r
+                       }\r
+                       break;\r
+               case GL_TEXTURE_MIN_FILTER:\r
+                       if(!texture->setMinFilter((GLenum)param))\r
+                       {\r
+                               return error(GL_INVALID_ENUM);\r
+                       }\r
+                       break;\r
+               case GL_TEXTURE_MAG_FILTER:\r
+                       if(!texture->setMagFilter((GLenum)param))\r
+                       {\r
+                               return error(GL_INVALID_ENUM);\r
+                       }\r
+                       break;\r
+               case GL_TEXTURE_MAX_ANISOTROPY_EXT:\r
+                       if(!texture->setMaxAnisotropy((GLfloat)param))\r
+                       {\r
+                               return error(GL_INVALID_VALUE);\r
+                       }\r
+                       break;\r
+               case GL_TEXTURE_CROP_RECT_OES:\r
+                       UNIMPLEMENTED();\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glTexParameteriv(GLenum target, GLenum pname, const GLint* params)\r
 {\r
-    glTexParameteri(target, pname, *params);\r
+       glTexParameteri(target, pname, *params);\r
 }\r
 \r
 void GL_APIENTRY glTexParameterx(GLenum target, GLenum pname, GLfixed param)\r
@@ -4085,82 +3499,68 @@ void GL_APIENTRY glTexParameterxv(GLenum target, GLenum pname, const GLfixed *pa
 void GL_APIENTRY glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,\r
                                  GLenum format, GLenum type, const GLvoid* pixels)\r
 {\r
-    TRACE("(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "\r
-          "GLsizei width = %d, GLsizei height = %d, GLenum format = 0x%X, GLenum type = 0x%X, "\r
-          "const GLvoid* pixels = 0x%0.8p)",\r
-           target, level, xoffset, yoffset, width, height, format, type, pixels);\r
-\r
-    try\r
-    {\r
-        if(!es1::IsTextureTarget(target))\r
-        {\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        if(level < 0 || xoffset < 0 || yoffset < 0 || width < 0 || height < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        if(std::numeric_limits<GLsizei>::max() - xoffset < width || std::numeric_limits<GLsizei>::max() - yoffset < height)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        if(!es1::CheckTextureFormatType(format, type))\r
-        {\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        if(width == 0 || height == 0 || pixels == NULL)\r
-        {\r
-            return;\r
-        }\r
-\r
-        es1::Context *context = es1::getContext();\r
-\r
-        if(context)\r
-        {\r
-            if(level > es1::IMPLEMENTATION_MAX_TEXTURE_LEVELS)\r
-            {\r
-                return error(GL_INVALID_VALUE);\r
-            }\r
-\r
-            if(target == GL_TEXTURE_2D)\r
-            {\r
-                es1::Texture2D *texture = context->getTexture2D();\r
-\r
-                if(validateSubImageParams(false, width, height, xoffset, yoffset, target, level, format, texture))\r
-                               {\r
-                                       texture->subImage(level, xoffset, yoffset, width, height, format, type, context->getUnpackAlignment(), pixels);\r
-                               }\r
-            }\r
-            else UNREACHABLE();\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "\r
+             "GLsizei width = %d, GLsizei height = %d, GLenum format = 0x%X, GLenum type = 0x%X, "\r
+             "const GLvoid* pixels = 0x%0.8p)",\r
+             target, level, xoffset, yoffset, width, height, format, type, pixels);\r
+\r
+       if(!es1::IsTextureTarget(target))\r
+       {\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       if(level < 0 || xoffset < 0 || yoffset < 0 || width < 0 || height < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       if(std::numeric_limits<GLsizei>::max() - xoffset < width || std::numeric_limits<GLsizei>::max() - yoffset < height)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       if(!es1::CheckTextureFormatType(format, type))\r
+       {\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       if(width == 0 || height == 0 || pixels == NULL)\r
+       {\r
+               return;\r
+       }\r
+\r
+       es1::Context *context = es1::getContext();\r
+\r
+       if(context)\r
+       {\r
+               if(level > es1::IMPLEMENTATION_MAX_TEXTURE_LEVELS)\r
+               {\r
+                       return error(GL_INVALID_VALUE);\r
+               }\r
+\r
+               if(target == GL_TEXTURE_2D)\r
+               {\r
+                       es1::Texture2D *texture = context->getTexture2D();\r
+\r
+                       if(validateSubImageParams(false, width, height, xoffset, yoffset, target, level, format, texture))\r
+                       {\r
+                               texture->subImage(level, xoffset, yoffset, width, height, format, type, context->getUnpackAlignment(), pixels);\r
+                       }\r
+               }\r
+               else UNREACHABLE();\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glTranslatef(GLfloat x, GLfloat y, GLfloat z)\r
 {\r
        TRACE("(GLfloat x = %f, GLfloat y = %f, GLfloat z = %f)", x, y, z);\r
 \r
-    try\r
-    {\r
-        es1::Context *context = es1::getContext();\r
+       es1::Context *context = es1::getContext();\r
 \r
-        if(context)\r
-        {\r
-            context->translate(x, y, z);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               context->translate(x, y, z);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glTranslatex(GLfixed x, GLfixed y, GLfixed z)\r
@@ -4172,80 +3572,66 @@ void GL_APIENTRY glVertexPointer(GLint size, GLenum type, GLsizei stride, const
 {\r
        TRACE("(GLint size = %d, GLenum type = 0x%X, GLsizei stride = %d, const GLvoid *pointer = 0x%0.8p)", size, type, stride, pointer);\r
 \r
-    glVertexAttribPointer(sw::Position, size, type, false, stride, pointer);\r
+       glVertexAttribPointer(sw::Position, size, type, false, stride, pointer);\r
 }\r
 \r
 void GL_APIENTRY glViewport(GLint x, GLint y, GLsizei width, GLsizei height)\r
 {\r
-    TRACE("(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d)", x, y, width, height);\r
+       TRACE("(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d)", x, y, width, height);\r
 \r
-    try\r
-    {\r
-        if(width < 0 || height < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+       if(width < 0 || height < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-        es1::Context *context = es1::getContext();\r
+       es1::Context *context = es1::getContext();\r
 \r
-        if(context)\r
-        {\r
-            context->setViewportParams(x, y, width, height);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               context->setViewportParams(x, y, width, height);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glEGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image)\r
 {\r
-    TRACE("(GLenum target = 0x%X, GLeglImageOES image = 0x%0.8p)", target, image);\r
+       TRACE("(GLenum target = 0x%X, GLeglImageOES image = 0x%0.8p)", target, image);\r
 \r
-    try\r
-    {\r
-        switch(target)\r
-        {\r
-               case GL_TEXTURE_2D:\r
-        case GL_TEXTURE_EXTERNAL_OES:\r
-            break;\r
-        default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
+       switch(target)\r
+       {\r
+       case GL_TEXTURE_2D:\r
+       case GL_TEXTURE_EXTERNAL_OES:\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
 \r
-        if(!image)\r
-        {\r
-            return error(GL_INVALID_OPERATION);\r
-        }\r
+       if(!image)\r
+       {\r
+               return error(GL_INVALID_OPERATION);\r
+       }\r
 \r
-        es1::Context *context = es1::getContext();\r
+       es1::Context *context = es1::getContext();\r
 \r
-        if(context)\r
-        {\r
-            es1::Texture2D *texture = 0;\r
+       if(context)\r
+       {\r
+               es1::Texture2D *texture = 0;\r
 \r
-                       switch(target)\r
-                       {\r
-                       case GL_TEXTURE_2D:           texture = context->getTexture2D();       break;\r
-                       case GL_TEXTURE_EXTERNAL_OES: texture = context->getTextureExternal(); break;\r
-                       default:                      UNREACHABLE();\r
-                       }\r
+               switch(target)\r
+               {\r
+               case GL_TEXTURE_2D:           texture = context->getTexture2D();       break;\r
+               case GL_TEXTURE_EXTERNAL_OES: texture = context->getTextureExternal(); break;\r
+               default:                      UNREACHABLE();\r
+               }\r
 \r
-            if(!texture)\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
+               if(!texture)\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
 \r
-            egl::Image *glImage = static_cast<egl::Image*>(image);\r
+               egl::Image *glImage = static_cast<egl::Image*>(image);\r
 \r
-            texture->setImage(glImage);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+               texture->setImage(glImage);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glEGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImageOES image)\r
@@ -4257,54 +3643,54 @@ void GL_APIENTRY glEGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImag
 \r
 void GL_APIENTRY glDrawTexsOES(GLshort x, GLshort y, GLshort z, GLshort width, GLshort height)\r
 {\r
-    UNIMPLEMENTED();\r
+       UNIMPLEMENTED();\r
 }\r
 \r
 void GL_APIENTRY glDrawTexiOES(GLint x, GLint y, GLint z, GLint width, GLint height)\r
 {\r
-    UNIMPLEMENTED();\r
+       UNIMPLEMENTED();\r
 }\r
 \r
 void GL_APIENTRY glDrawTexxOES(GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height)\r
 {\r
-    UNIMPLEMENTED();\r
+       UNIMPLEMENTED();\r
 }\r
 \r
 void GL_APIENTRY glDrawTexsvOES(const GLshort *coords)\r
 {\r
-    UNIMPLEMENTED();\r
+       UNIMPLEMENTED();\r
 }\r
 \r
 void GL_APIENTRY glDrawTexivOES(const GLint *coords)\r
 {\r
-    UNIMPLEMENTED();\r
+       UNIMPLEMENTED();\r
 }\r
 \r
 void GL_APIENTRY glDrawTexxvOES(const GLfixed *coords)\r
 {\r
-    UNIMPLEMENTED();\r
+       UNIMPLEMENTED();\r
 }\r
 \r
 void GL_APIENTRY glDrawTexfOES(GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height)\r
 {\r
-    UNIMPLEMENTED();\r
+       UNIMPLEMENTED();\r
 }\r
 \r
 void GL_APIENTRY glDrawTexfvOES(const GLfloat *coords)\r
 {\r
-    UNIMPLEMENTED();\r
+       UNIMPLEMENTED();\r
 }\r
 \r
 __eglMustCastToProperFunctionPointerType glGetProcAddress(const char *procname)\r
 {\r
-    struct Extension\r
-    {\r
-        const char *name;\r
-        __eglMustCastToProperFunctionPointerType address;\r
-    };\r
+       struct Extension\r
+       {\r
+               const char *name;\r
+               __eglMustCastToProperFunctionPointerType address;\r
+       };\r
 \r
-    static const Extension glExtensions[] =\r
-    {\r
+       static const Extension glExtensions[] =\r
+       {\r
                #define EXTENSION(name) {#name, (__eglMustCastToProperFunctionPointerType)name}\r
 \r
                EXTENSION(glEGLImageTargetTexture2DOES),\r
@@ -4332,15 +3718,15 @@ __eglMustCastToProperFunctionPointerType glGetProcAddress(const char *procname)
                #undef EXTENSION\r
        };\r
 \r
-    for(int ext = 0; ext < sizeof(glExtensions) / sizeof(Extension); ext++)\r
-    {\r
-        if(strcmp(procname, glExtensions[ext].name) == 0)\r
-        {\r
-            return (__eglMustCastToProperFunctionPointerType)glExtensions[ext].address;\r
-        }\r
-    }\r
+       for(int ext = 0; ext < sizeof(glExtensions) / sizeof(Extension); ext++)\r
+       {\r
+               if(strcmp(procname, glExtensions[ext].name) == 0)\r
+               {\r
+                       return (__eglMustCastToProperFunctionPointerType)glExtensions[ext].address;\r
+               }\r
+       }\r
 \r
-    return NULL;\r
+       return NULL;\r
 }\r
 \r
 void GL_APIENTRY Register(const char *licenseKey)\r
index 83dea35..19629d5 100644 (file)
 \r
 static bool validImageSize(GLint level, GLsizei width, GLsizei height)\r
 {\r
-    if(level < 0 || level >= es2::IMPLEMENTATION_MAX_TEXTURE_LEVELS || width < 0 || height < 0)\r
-    {\r
-        return false;\r
-    }\r
+       if(level < 0 || level >= es2::IMPLEMENTATION_MAX_TEXTURE_LEVELS || width < 0 || height < 0)\r
+       {\r
+               return false;\r
+       }\r
 \r
-    return true;\r
+       return true;\r
 }\r
 \r
 static bool validateSubImageParams(bool compressed, GLsizei width, GLsizei height, GLint xoffset, GLint yoffset, GLenum target, GLint level, GLenum format, es2::Texture *texture)\r
 {\r
-    if(!texture)\r
-    {\r
-        return error(GL_INVALID_OPERATION, false);\r
-    }\r
+       if(!texture)\r
+       {\r
+               return error(GL_INVALID_OPERATION, false);\r
+       }\r
 \r
-    if(compressed != texture->isCompressed(target, level))\r
-    {\r
-        return error(GL_INVALID_OPERATION, false);\r
-    }\r
+       if(compressed != texture->isCompressed(target, level))\r
+       {\r
+               return error(GL_INVALID_OPERATION, false);\r
+       }\r
 \r
-    if(format != GL_NONE && format != texture->getFormat(target, level))\r
-    {\r
-        return error(GL_INVALID_OPERATION, false);\r
-    }\r
+       if(format != GL_NONE && format != texture->getFormat(target, level))\r
+       {\r
+               return error(GL_INVALID_OPERATION, false);\r
+       }\r
 \r
-    if(compressed)\r
-    {\r
-        if((width % 4 != 0 && width != texture->getWidth(target, 0)) ||\r
-           (height % 4 != 0 && height != texture->getHeight(target, 0)))\r
-        {\r
-            return error(GL_INVALID_OPERATION, false);\r
-        }\r
-    }\r
+       if(compressed)\r
+       {\r
+               if((width % 4 != 0 && width != texture->getWidth(target, 0)) ||\r
+                  (height % 4 != 0 && height != texture->getHeight(target, 0)))\r
+               {\r
+                       return error(GL_INVALID_OPERATION, false);\r
+               }\r
+       }\r
 \r
-    if(xoffset + width > texture->getWidth(target, level) ||\r
-       yoffset + height > texture->getHeight(target, level))\r
-    {\r
-        return error(GL_INVALID_VALUE, false);\r
-    }\r
+       if(xoffset + width > texture->getWidth(target, level) ||\r
+          yoffset + height > texture->getHeight(target, level))\r
+       {\r
+               return error(GL_INVALID_VALUE, false);\r
+       }\r
 \r
-    return true;\r
+       return true;\r
 }\r
 \r
 // Check for combinations of format and type that are valid for ReadPixels\r
 static bool validReadFormatType(GLenum format, GLenum type)\r
 {\r
-    switch(format)\r
-    {\r
-    case GL_RGBA:\r
-        switch (type)\r
-        {\r
-        case GL_UNSIGNED_BYTE:\r
-            break;\r
-        default:\r
-            return false;\r
-        }\r
-        break;\r
-    case GL_BGRA_EXT:\r
-        switch (type)\r
-        {\r
-        case GL_UNSIGNED_BYTE:\r
-        case GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT:\r
-        case GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT:\r
-            break;\r
-        default:\r
-            return false;\r
-        }\r
-        break;\r
-    case es2::IMPLEMENTATION_COLOR_READ_FORMAT:\r
-        switch (type)\r
-        {\r
-        case es2::IMPLEMENTATION_COLOR_READ_TYPE:\r
-            break;\r
-        default:\r
-            return false;\r
-        }\r
-        break;\r
-    default:\r
-        return false;\r
-    }\r
-\r
-    return true;\r
+       switch(format)\r
+       {\r
+       case GL_RGBA:\r
+               switch(type)\r
+               {\r
+               case GL_UNSIGNED_BYTE:\r
+                       break;\r
+               default:\r
+                       return false;\r
+               }\r
+               break;\r
+       case GL_BGRA_EXT:\r
+               switch(type)\r
+               {\r
+               case GL_UNSIGNED_BYTE:\r
+               case GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT:\r
+               case GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT:\r
+                       break;\r
+               default:\r
+                       return false;\r
+               }\r
+               break;\r
+       case es2::IMPLEMENTATION_COLOR_READ_FORMAT:\r
+               switch(type)\r
+               {\r
+               case es2::IMPLEMENTATION_COLOR_READ_TYPE:\r
+                       break;\r
+               default:\r
+                       return false;\r
+               }\r
+               break;\r
+       default:\r
+               return false;\r
+       }\r
+\r
+       return true;\r
 }\r
 \r
 extern "C"\r
@@ -124,5985 +124,4965 @@ extern "C"
 \r
 void GL_APIENTRY glActiveTexture(GLenum texture)\r
 {\r
-    TRACE("(GLenum texture = 0x%X)", texture);\r
+       TRACE("(GLenum texture = 0x%X)", texture);\r
 \r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-            if(texture < GL_TEXTURE0 || texture > GL_TEXTURE0 + es2::MAX_COMBINED_TEXTURE_IMAGE_UNITS - 1)\r
-            {\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
+       if(context)\r
+       {\r
+               if(texture < GL_TEXTURE0 || texture > GL_TEXTURE0 + es2::MAX_COMBINED_TEXTURE_IMAGE_UNITS - 1)\r
+               {\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
 \r
-            context->setActiveSampler(texture - GL_TEXTURE0);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+               context->setActiveSampler(texture - GL_TEXTURE0);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glAttachShader(GLuint program, GLuint shader)\r
 {\r
-    TRACE("(GLuint program = %d, GLuint shader = %d)", program, shader);\r
-\r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            es2::Program *programObject = context->getProgram(program);\r
-            es2::Shader *shaderObject = context->getShader(shader);\r
-\r
-            if(!programObject)\r
-            {\r
-                if(context->getShader(program))\r
-                {\r
-                    return error(GL_INVALID_OPERATION);\r
-                }\r
-                else\r
-                {\r
-                    return error(GL_INVALID_VALUE);\r
-                }\r
-            }\r
-\r
-            if(!shaderObject)\r
-            {\r
-                if(context->getProgram(shader))\r
-                {\r
-                    return error(GL_INVALID_OPERATION);\r
-                }\r
-                else\r
-                {\r
-                    return error(GL_INVALID_VALUE);\r
-                }\r
-            }\r
-\r
-            if(!programObject->attachShader(shaderObject))\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLuint program = %d, GLuint shader = %d)", program, shader);\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               es2::Program *programObject = context->getProgram(program);\r
+               es2::Shader *shaderObject = context->getShader(shader);\r
+\r
+               if(!programObject)\r
+               {\r
+                       if(context->getShader(program))\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+                       else\r
+                       {\r
+                               return error(GL_INVALID_VALUE);\r
+                       }\r
+               }\r
+\r
+               if(!shaderObject)\r
+               {\r
+                       if(context->getProgram(shader))\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+                       else\r
+                       {\r
+                               return error(GL_INVALID_VALUE);\r
+                       }\r
+               }\r
+\r
+               if(!programObject->attachShader(shaderObject))\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glBeginQueryEXT(GLenum target, GLuint id)\r
 {\r
-    TRACE("(GLenum target = 0x%X, GLuint %d)", target, id);\r
-\r
-    try\r
-    {\r
-        switch(target)\r
-        {\r
-        case GL_ANY_SAMPLES_PASSED_EXT:\r
-        case GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT:\r
-            break;\r
-        default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        if(id == 0)\r
-        {\r
-            return error(GL_INVALID_OPERATION);\r
-        }\r
-\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            context->beginQuery(target, id);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLenum target = 0x%X, GLuint %d)", target, id);\r
+\r
+       switch(target)\r
+       {\r
+       case GL_ANY_SAMPLES_PASSED_EXT:\r
+       case GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT:\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       if(id == 0)\r
+       {\r
+               return error(GL_INVALID_OPERATION);\r
+       }\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               context->beginQuery(target, id);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glBindAttribLocation(GLuint program, GLuint index, const GLchar* name)\r
 {\r
-    TRACE("(GLuint program = %d, GLuint index = %d, const GLchar* name = %s)", program, index, name);\r
-\r
-    try\r
-    {\r
-        if(index >= es2::MAX_VERTEX_ATTRIBS)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            es2::Program *programObject = context->getProgram(program);\r
-\r
-            if(!programObject)\r
-            {\r
-                if(context->getShader(program))\r
-                {\r
-                    return error(GL_INVALID_OPERATION);\r
-                }\r
-                else\r
-                {\r
-                    return error(GL_INVALID_VALUE);\r
-                }\r
-            }\r
-\r
-            if(strncmp(name, "gl_", 3) == 0)\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-\r
-            programObject->bindAttributeLocation(index, name);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLuint program = %d, GLuint index = %d, const GLchar* name = %s)", program, index, name);\r
+\r
+       if(index >= es2::MAX_VERTEX_ATTRIBS)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               es2::Program *programObject = context->getProgram(program);\r
+\r
+               if(!programObject)\r
+               {\r
+                       if(context->getShader(program))\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+                       else\r
+                       {\r
+                               return error(GL_INVALID_VALUE);\r
+                       }\r
+               }\r
+\r
+               if(strncmp(name, "gl_", 3) == 0)\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
+\r
+               programObject->bindAttributeLocation(index, name);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glBindBuffer(GLenum target, GLuint buffer)\r
 {\r
-    TRACE("(GLenum target = 0x%X, GLuint buffer = %d)", target, buffer);\r
-\r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            switch(target)\r
-            {\r
-              case GL_ARRAY_BUFFER:\r
-                context->bindArrayBuffer(buffer);\r
-                return;\r
-              case GL_ELEMENT_ARRAY_BUFFER:\r
-                context->bindElementArrayBuffer(buffer);\r
-                return;\r
-              default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLenum target = 0x%X, GLuint buffer = %d)", target, buffer);\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               switch(target)\r
+               {\r
+               case GL_ARRAY_BUFFER:\r
+                       context->bindArrayBuffer(buffer);\r
+                       return;\r
+               case GL_ELEMENT_ARRAY_BUFFER:\r
+                       context->bindElementArrayBuffer(buffer);\r
+                       return;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glBindFramebuffer(GLenum target, GLuint framebuffer)\r
 {\r
-    TRACE("(GLenum target = 0x%X, GLuint framebuffer = %d)", target, framebuffer);\r
+       TRACE("(GLenum target = 0x%X, GLuint framebuffer = %d)", target, framebuffer);\r
 \r
-    try\r
-    {\r
-        if(target != GL_FRAMEBUFFER && target != GL_DRAW_FRAMEBUFFER_ANGLE && target != GL_READ_FRAMEBUFFER_ANGLE)\r
-        {\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
+       if(target != GL_FRAMEBUFFER && target != GL_DRAW_FRAMEBUFFER_ANGLE && target != GL_READ_FRAMEBUFFER_ANGLE)\r
+       {\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
 \r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-            if(target == GL_READ_FRAMEBUFFER_ANGLE || target == GL_FRAMEBUFFER)\r
-            {\r
-                context->bindReadFramebuffer(framebuffer);\r
-            }\r
+       if(context)\r
+       {\r
+               if(target == GL_READ_FRAMEBUFFER_ANGLE || target == GL_FRAMEBUFFER)\r
+               {\r
+                       context->bindReadFramebuffer(framebuffer);\r
+               }\r
 \r
-            if(target == GL_DRAW_FRAMEBUFFER_ANGLE || target == GL_FRAMEBUFFER)\r
-            {\r
-                context->bindDrawFramebuffer(framebuffer);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+               if(target == GL_DRAW_FRAMEBUFFER_ANGLE || target == GL_FRAMEBUFFER)\r
+               {\r
+                       context->bindDrawFramebuffer(framebuffer);\r
+               }\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glBindRenderbuffer(GLenum target, GLuint renderbuffer)\r
 {\r
-    TRACE("(GLenum target = 0x%X, GLuint renderbuffer = %d)", target, renderbuffer);\r
+       TRACE("(GLenum target = 0x%X, GLuint renderbuffer = %d)", target, renderbuffer);\r
 \r
-    try\r
-    {\r
-        if(target != GL_RENDERBUFFER)\r
-        {\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
+       if(target != GL_RENDERBUFFER)\r
+       {\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
 \r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-                       if(renderbuffer != 0 && !context->getRenderbuffer(renderbuffer))\r
-                       {\r
-                               // [OpenGL ES 2.0.25] Section 4.4.3 page 112\r
-                               // [OpenGL ES 3.0.2] Section 4.4.2 page 201\r
-                               // 'renderbuffer' must be either zero or the name of an existing renderbuffer object of\r
-                               // type 'renderbuffertarget', otherwise an INVALID_OPERATION error is generated.\r
-                               return error(GL_INVALID_OPERATION);\r
-                       }\r
+       if(context)\r
+       {\r
+               if(renderbuffer != 0 && !context->getRenderbuffer(renderbuffer))\r
+               {\r
+                       // [OpenGL ES 2.0.25] Section 4.4.3 page 112\r
+                       // [OpenGL ES 3.0.2] Section 4.4.2 page 201\r
+                       // 'renderbuffer' must be either zero or the name of an existing renderbuffer object of\r
+                       // type 'renderbuffertarget', otherwise an INVALID_OPERATION error is generated.\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
 \r
-            context->bindRenderbuffer(renderbuffer);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+               context->bindRenderbuffer(renderbuffer);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glBindTexture(GLenum target, GLuint texture)\r
 {\r
-    TRACE("(GLenum target = 0x%X, GLuint texture = %d)", target, texture);\r
-\r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            es2::Texture *textureObject = context->getTexture(texture);\r
-\r
-            if(textureObject && textureObject->getTarget() != target && texture != 0)\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-\r
-            switch(target)\r
-            {\r
-            case GL_TEXTURE_2D:\r
-                context->bindTexture2D(texture);\r
-                return;\r
-            case GL_TEXTURE_CUBE_MAP:\r
-                context->bindTextureCubeMap(texture);\r
-                return;\r
-            case GL_TEXTURE_EXTERNAL_OES:\r
-                context->bindTextureExternal(texture);\r
-                return;\r
-            default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLenum target = 0x%X, GLuint texture = %d)", target, texture);\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               es2::Texture *textureObject = context->getTexture(texture);\r
+\r
+               if(textureObject && textureObject->getTarget() != target && texture != 0)\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
+\r
+               switch(target)\r
+               {\r
+               case GL_TEXTURE_2D:\r
+                       context->bindTexture2D(texture);\r
+                       return;\r
+               case GL_TEXTURE_CUBE_MAP:\r
+                       context->bindTextureCubeMap(texture);\r
+                       return;\r
+               case GL_TEXTURE_EXTERNAL_OES:\r
+                       context->bindTextureExternal(texture);\r
+                       return;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glBlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)\r
 {\r
-    TRACE("(GLclampf red = %f, GLclampf green = %f, GLclampf blue = %f, GLclampf alpha = %f)",\r
-          red, green, blue, alpha);\r
+       TRACE("(GLclampf red = %f, GLclampf green = %f, GLclampf blue = %f, GLclampf alpha = %f)",\r
+               red, green, blue, alpha);\r
 \r
-    try\r
-    {\r
-        es2::Context* context = es2::getContext();\r
+       es2::Context* context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-            context->setBlendColor(es2::clamp01(red), es2::clamp01(green), es2::clamp01(blue), es2::clamp01(alpha));\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               context->setBlendColor(es2::clamp01(red), es2::clamp01(green), es2::clamp01(blue), es2::clamp01(alpha));\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glBlendEquation(GLenum mode)\r
 {\r
-    glBlendEquationSeparate(mode, mode);\r
+       glBlendEquationSeparate(mode, mode);\r
 }\r
 \r
 void GL_APIENTRY glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha)\r
 {\r
-    TRACE("(GLenum modeRGB = 0x%X, GLenum modeAlpha = 0x%X)", modeRGB, modeAlpha);\r
-\r
-    try\r
-    {\r
-        switch(modeRGB)\r
-        {\r
-        case GL_FUNC_ADD:\r
-        case GL_FUNC_SUBTRACT:\r
-        case GL_FUNC_REVERSE_SUBTRACT:\r
-        case GL_MIN_EXT:\r
-        case GL_MAX_EXT:\r
-            break;\r
-        default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        switch(modeAlpha)\r
-        {\r
-        case GL_FUNC_ADD:\r
-        case GL_FUNC_SUBTRACT:\r
-        case GL_FUNC_REVERSE_SUBTRACT:\r
-        case GL_MIN_EXT:\r
-        case GL_MAX_EXT:\r
-            break;\r
-        default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            context->setBlendEquation(modeRGB, modeAlpha);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLenum modeRGB = 0x%X, GLenum modeAlpha = 0x%X)", modeRGB, modeAlpha);\r
+\r
+       switch(modeRGB)\r
+       {\r
+       case GL_FUNC_ADD:\r
+       case GL_FUNC_SUBTRACT:\r
+       case GL_FUNC_REVERSE_SUBTRACT:\r
+       case GL_MIN_EXT:\r
+       case GL_MAX_EXT:\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       switch(modeAlpha)\r
+       {\r
+       case GL_FUNC_ADD:\r
+       case GL_FUNC_SUBTRACT:\r
+       case GL_FUNC_REVERSE_SUBTRACT:\r
+       case GL_MIN_EXT:\r
+       case GL_MAX_EXT:\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               context->setBlendEquation(modeRGB, modeAlpha);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glBlendFunc(GLenum sfactor, GLenum dfactor)\r
 {\r
-    glBlendFuncSeparate(sfactor, dfactor, sfactor, dfactor);\r
+       glBlendFuncSeparate(sfactor, dfactor, sfactor, dfactor);\r
 }\r
 \r
 void GL_APIENTRY glBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)\r
 {\r
-    TRACE("(GLenum srcRGB = 0x%X, GLenum dstRGB = 0x%X, GLenum srcAlpha = 0x%X, GLenum dstAlpha = 0x%X)",\r
-          srcRGB, dstRGB, srcAlpha, dstAlpha);\r
-\r
-    try\r
-    {\r
-        switch(srcRGB)\r
-        {\r
-          case GL_ZERO:\r
-          case GL_ONE:\r
-          case GL_SRC_COLOR:\r
-          case GL_ONE_MINUS_SRC_COLOR:\r
-          case GL_DST_COLOR:\r
-          case GL_ONE_MINUS_DST_COLOR:\r
-          case GL_SRC_ALPHA:\r
-          case GL_ONE_MINUS_SRC_ALPHA:\r
-          case GL_DST_ALPHA:\r
-          case GL_ONE_MINUS_DST_ALPHA:\r
-          case GL_CONSTANT_COLOR:\r
-          case GL_ONE_MINUS_CONSTANT_COLOR:\r
-          case GL_CONSTANT_ALPHA:\r
-          case GL_ONE_MINUS_CONSTANT_ALPHA:\r
-          case GL_SRC_ALPHA_SATURATE:\r
-            break;\r
-          default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        switch(dstRGB)\r
-        {\r
-          case GL_ZERO:\r
-          case GL_ONE:\r
-          case GL_SRC_COLOR:\r
-          case GL_ONE_MINUS_SRC_COLOR:\r
-          case GL_DST_COLOR:\r
-          case GL_ONE_MINUS_DST_COLOR:\r
-          case GL_SRC_ALPHA:\r
-          case GL_ONE_MINUS_SRC_ALPHA:\r
-          case GL_DST_ALPHA:\r
-          case GL_ONE_MINUS_DST_ALPHA:\r
-          case GL_CONSTANT_COLOR:\r
-          case GL_ONE_MINUS_CONSTANT_COLOR:\r
-          case GL_CONSTANT_ALPHA:\r
-          case GL_ONE_MINUS_CONSTANT_ALPHA:\r
-            break;\r
-          default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        switch(srcAlpha)\r
-        {\r
-          case GL_ZERO:\r
-          case GL_ONE:\r
-          case GL_SRC_COLOR:\r
-          case GL_ONE_MINUS_SRC_COLOR:\r
-          case GL_DST_COLOR:\r
-          case GL_ONE_MINUS_DST_COLOR:\r
-          case GL_SRC_ALPHA:\r
-          case GL_ONE_MINUS_SRC_ALPHA:\r
-          case GL_DST_ALPHA:\r
-          case GL_ONE_MINUS_DST_ALPHA:\r
-          case GL_CONSTANT_COLOR:\r
-          case GL_ONE_MINUS_CONSTANT_COLOR:\r
-          case GL_CONSTANT_ALPHA:\r
-          case GL_ONE_MINUS_CONSTANT_ALPHA:\r
-          case GL_SRC_ALPHA_SATURATE:\r
-            break;\r
-          default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        switch(dstAlpha)\r
-        {\r
-          case GL_ZERO:\r
-          case GL_ONE:\r
-          case GL_SRC_COLOR:\r
-          case GL_ONE_MINUS_SRC_COLOR:\r
-          case GL_DST_COLOR:\r
-          case GL_ONE_MINUS_DST_COLOR:\r
-          case GL_SRC_ALPHA:\r
-          case GL_ONE_MINUS_SRC_ALPHA:\r
-          case GL_DST_ALPHA:\r
-          case GL_ONE_MINUS_DST_ALPHA:\r
-          case GL_CONSTANT_COLOR:\r
-          case GL_ONE_MINUS_CONSTANT_COLOR:\r
-          case GL_CONSTANT_ALPHA:\r
-          case GL_ONE_MINUS_CONSTANT_ALPHA:\r
-            break;\r
-          default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            context->setBlendFactors(srcRGB, dstRGB, srcAlpha, dstAlpha);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLenum srcRGB = 0x%X, GLenum dstRGB = 0x%X, GLenum srcAlpha = 0x%X, GLenum dstAlpha = 0x%X)",\r
+             srcRGB, dstRGB, srcAlpha, dstAlpha);\r
+\r
+       switch(srcRGB)\r
+       {\r
+       case GL_ZERO:\r
+       case GL_ONE:\r
+       case GL_SRC_COLOR:\r
+       case GL_ONE_MINUS_SRC_COLOR:\r
+       case GL_DST_COLOR:\r
+       case GL_ONE_MINUS_DST_COLOR:\r
+       case GL_SRC_ALPHA:\r
+       case GL_ONE_MINUS_SRC_ALPHA:\r
+       case GL_DST_ALPHA:\r
+       case GL_ONE_MINUS_DST_ALPHA:\r
+       case GL_CONSTANT_COLOR:\r
+       case GL_ONE_MINUS_CONSTANT_COLOR:\r
+       case GL_CONSTANT_ALPHA:\r
+       case GL_ONE_MINUS_CONSTANT_ALPHA:\r
+       case GL_SRC_ALPHA_SATURATE:\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       switch(dstRGB)\r
+       {\r
+       case GL_ZERO:\r
+       case GL_ONE:\r
+       case GL_SRC_COLOR:\r
+       case GL_ONE_MINUS_SRC_COLOR:\r
+       case GL_DST_COLOR:\r
+       case GL_ONE_MINUS_DST_COLOR:\r
+       case GL_SRC_ALPHA:\r
+       case GL_ONE_MINUS_SRC_ALPHA:\r
+       case GL_DST_ALPHA:\r
+       case GL_ONE_MINUS_DST_ALPHA:\r
+       case GL_CONSTANT_COLOR:\r
+       case GL_ONE_MINUS_CONSTANT_COLOR:\r
+       case GL_CONSTANT_ALPHA:\r
+       case GL_ONE_MINUS_CONSTANT_ALPHA:\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       switch(srcAlpha)\r
+       {\r
+       case GL_ZERO:\r
+       case GL_ONE:\r
+       case GL_SRC_COLOR:\r
+       case GL_ONE_MINUS_SRC_COLOR:\r
+       case GL_DST_COLOR:\r
+       case GL_ONE_MINUS_DST_COLOR:\r
+       case GL_SRC_ALPHA:\r
+       case GL_ONE_MINUS_SRC_ALPHA:\r
+       case GL_DST_ALPHA:\r
+       case GL_ONE_MINUS_DST_ALPHA:\r
+       case GL_CONSTANT_COLOR:\r
+       case GL_ONE_MINUS_CONSTANT_COLOR:\r
+       case GL_CONSTANT_ALPHA:\r
+       case GL_ONE_MINUS_CONSTANT_ALPHA:\r
+       case GL_SRC_ALPHA_SATURATE:\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       switch(dstAlpha)\r
+       {\r
+       case GL_ZERO:\r
+       case GL_ONE:\r
+       case GL_SRC_COLOR:\r
+       case GL_ONE_MINUS_SRC_COLOR:\r
+       case GL_DST_COLOR:\r
+       case GL_ONE_MINUS_DST_COLOR:\r
+       case GL_SRC_ALPHA:\r
+       case GL_ONE_MINUS_SRC_ALPHA:\r
+       case GL_DST_ALPHA:\r
+       case GL_ONE_MINUS_DST_ALPHA:\r
+       case GL_CONSTANT_COLOR:\r
+       case GL_ONE_MINUS_CONSTANT_COLOR:\r
+       case GL_CONSTANT_ALPHA:\r
+       case GL_ONE_MINUS_CONSTANT_ALPHA:\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               context->setBlendFactors(srcRGB, dstRGB, srcAlpha, dstAlpha);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glBufferData(GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage)\r
 {\r
-    TRACE("(GLenum target = 0x%X, GLsizeiptr size = %d, const GLvoid* data = 0x%0.8p, GLenum usage = %d)",\r
-          target, size, data, usage);\r
-\r
-    try\r
-    {\r
-        if(size < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        switch(usage)\r
-        {\r
-          case GL_STREAM_DRAW:\r
-          case GL_STATIC_DRAW:\r
-          case GL_DYNAMIC_DRAW:\r
-            break;\r
-          default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            es2::Buffer *buffer;\r
-\r
-            switch(target)\r
-            {\r
-              case GL_ARRAY_BUFFER:\r
-                buffer = context->getArrayBuffer();\r
-                break;\r
-              case GL_ELEMENT_ARRAY_BUFFER:\r
-                buffer = context->getElementArrayBuffer();\r
-                break;\r
-              default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-\r
-            if(!buffer)\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-\r
-            buffer->bufferData(data, size, usage);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLenum target = 0x%X, GLsizeiptr size = %d, const GLvoid* data = 0x%0.8p, GLenum usage = %d)",\r
+             target, size, data, usage);\r
+\r
+       if(size < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       switch(usage)\r
+       {\r
+       case GL_STREAM_DRAW:\r
+       case GL_STATIC_DRAW:\r
+       case GL_DYNAMIC_DRAW:\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               es2::Buffer *buffer;\r
+\r
+               switch(target)\r
+               {\r
+               case GL_ARRAY_BUFFER:\r
+                       buffer = context->getArrayBuffer();\r
+                       break;\r
+               case GL_ELEMENT_ARRAY_BUFFER:\r
+                       buffer = context->getElementArrayBuffer();\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+\r
+               if(!buffer)\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
+\r
+               buffer->bufferData(data, size, usage);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data)\r
 {\r
-    TRACE("(GLenum target = 0x%X, GLintptr offset = %d, GLsizeiptr size = %d, const GLvoid* data = 0x%0.8p)",\r
-          target, offset, size, data);\r
-\r
-    try\r
-    {\r
-        if(size < 0 || offset < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        if(data == NULL)\r
-        {\r
-            return;\r
-        }\r
-\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            es2::Buffer *buffer;\r
-\r
-            switch(target)\r
-            {\r
-              case GL_ARRAY_BUFFER:\r
-                buffer = context->getArrayBuffer();\r
-                break;\r
-              case GL_ELEMENT_ARRAY_BUFFER:\r
-                buffer = context->getElementArrayBuffer();\r
-                break;\r
-              default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-\r
-            if(!buffer)\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-\r
-            if((size_t)size + offset > buffer->size())\r
-            {\r
-                return error(GL_INVALID_VALUE);\r
-            }\r
-\r
-            buffer->bufferSubData(data, size, offset);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLenum target = 0x%X, GLintptr offset = %d, GLsizeiptr size = %d, const GLvoid* data = 0x%0.8p)",\r
+             target, offset, size, data);\r
+\r
+       if(size < 0 || offset < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       if(data == NULL)\r
+       {\r
+               return;\r
+       }\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               es2::Buffer *buffer;\r
+\r
+               switch(target)\r
+               {\r
+               case GL_ARRAY_BUFFER:\r
+                       buffer = context->getArrayBuffer();\r
+                       break;\r
+               case GL_ELEMENT_ARRAY_BUFFER:\r
+                       buffer = context->getElementArrayBuffer();\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+\r
+               if(!buffer)\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
+\r
+               if((size_t)size + offset > buffer->size())\r
+               {\r
+                       return error(GL_INVALID_VALUE);\r
+               }\r
+\r
+               buffer->bufferSubData(data, size, offset);\r
+       }\r
 }\r
 \r
 GLenum GL_APIENTRY glCheckFramebufferStatus(GLenum target)\r
 {\r
-    TRACE("(GLenum target = 0x%X)", target);\r
+       TRACE("(GLenum target = 0x%X)", target);\r
 \r
-    try\r
-    {\r
-        if(target != GL_FRAMEBUFFER && target != GL_DRAW_FRAMEBUFFER_ANGLE && target != GL_READ_FRAMEBUFFER_ANGLE)\r
-        {\r
-            return error(GL_INVALID_ENUM, 0);\r
-        }\r
+       if(target != GL_FRAMEBUFFER && target != GL_DRAW_FRAMEBUFFER_ANGLE && target != GL_READ_FRAMEBUFFER_ANGLE)\r
+       {\r
+               return error(GL_INVALID_ENUM, 0);\r
+       }\r
 \r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-            es2::Framebuffer *framebuffer = NULL;\r
-            if(target == GL_READ_FRAMEBUFFER_ANGLE)\r
-            {\r
-                framebuffer = context->getReadFramebuffer();\r
-            }\r
-            else\r
-            {\r
-                framebuffer = context->getDrawFramebuffer();\r
-            }\r
+       if(context)\r
+       {\r
+               es2::Framebuffer *framebuffer = NULL;\r
+               if(target == GL_READ_FRAMEBUFFER_ANGLE)\r
+               {\r
+                       framebuffer = context->getReadFramebuffer();\r
+               }\r
+               else\r
+               {\r
+                       framebuffer = context->getDrawFramebuffer();\r
+               }\r
 \r
-            return framebuffer->completeness();\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY, 0);\r
-    }\r
+               return framebuffer->completeness();\r
+       }\r
 \r
-    return 0;\r
+       return 0;\r
 }\r
 \r
 void GL_APIENTRY glClear(GLbitfield mask)\r
 {\r
-    TRACE("(GLbitfield mask = %X)", mask);\r
+       TRACE("(GLbitfield mask = %X)", mask);\r
 \r
-    try\r
-    {\r
-               if((mask & ~(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT)) != 0)\r
-               {\r
-                       return error(GL_INVALID_VALUE);\r
-               }\r
+       if((mask & ~(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT)) != 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-            context->clear(mask);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               context->clear(mask);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)\r
 {\r
-    TRACE("(GLclampf red = %f, GLclampf green = %f, GLclampf blue = %f, GLclampf alpha = %f)",\r
-          red, green, blue, alpha);\r
+       TRACE("(GLclampf red = %f, GLclampf green = %f, GLclampf blue = %f, GLclampf alpha = %f)",\r
+             red, green, blue, alpha);\r
 \r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-            context->setClearColor(red, green, blue, alpha);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               context->setClearColor(red, green, blue, alpha);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glClearDepthf(GLclampf depth)\r
 {\r
-    TRACE("(GLclampf depth = %f)", depth);\r
+       TRACE("(GLclampf depth = %f)", depth);\r
 \r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-            context->setClearDepth(depth);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               context->setClearDepth(depth);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glClearStencil(GLint s)\r
 {\r
-    TRACE("(GLint s = %d)", s);\r
+       TRACE("(GLint s = %d)", s);\r
 \r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-            context->setClearStencil(s);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               context->setClearStencil(s);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)\r
 {\r
-    TRACE("(GLboolean red = %d, GLboolean green = %d, GLboolean blue = %d, GLboolean alpha = %d)",\r
-          red, green, blue, alpha);\r
+       TRACE("(GLboolean red = %d, GLboolean green = %d, GLboolean blue = %d, GLboolean alpha = %d)",\r
+             red, green, blue, alpha);\r
 \r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-            context->setColorMask(red == GL_TRUE, green == GL_TRUE, blue == GL_TRUE, alpha == GL_TRUE);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               context->setColorMask(red == GL_TRUE, green == GL_TRUE, blue == GL_TRUE, alpha == GL_TRUE);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glCompileShader(GLuint shader)\r
 {\r
-    TRACE("(GLuint shader = %d)", shader);\r
-\r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            es2::Shader *shaderObject = context->getShader(shader);\r
-\r
-            if(!shaderObject)\r
-            {\r
-                if(context->getProgram(shader))\r
-                {\r
-                    return error(GL_INVALID_OPERATION);\r
-                }\r
-                else\r
-                {\r
-                    return error(GL_INVALID_VALUE);\r
-                }\r
-            }\r
-\r
-            shaderObject->compile();\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
-\r
-void GL_APIENTRY glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height,\r
-                                        GLint border, GLsizei imageSize, const GLvoid* data)\r
-{\r
-    TRACE("(GLenum target = 0x%X, GLint level = %d, GLenum internalformat = 0x%X, GLsizei width = %d, "\r
-          "GLsizei height = %d, GLint border = %d, GLsizei imageSize = %d, const GLvoid* data = 0x%0.8p)",\r
-          target, level, internalformat, width, height, border, imageSize, data);\r
-\r
-    try\r
-    {\r
-        if(!validImageSize(level, width, height) || border != 0 || imageSize < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        switch(internalformat)\r
-        {\r
-        case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:\r
-        case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:\r
-               case GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE:\r
-               case GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE:\r
-                       if(!S3TC_SUPPORT)\r
-            {\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-            break;\r
-               case GL_DEPTH_COMPONENT:\r
-               case GL_DEPTH_COMPONENT16:\r
-               case GL_DEPTH_COMPONENT32_OES:\r
-               case GL_DEPTH_STENCIL_OES:\r
-               case GL_DEPTH24_STENCIL8_OES:\r
-                       return error(GL_INVALID_OPERATION);\r
-        default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        if(border != 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-                       if(level > es2::IMPLEMENTATION_MAX_TEXTURE_LEVELS)\r
-            {\r
-                return error(GL_INVALID_VALUE);\r
-            }\r
-\r
-            switch(target)\r
-            {\r
-              case GL_TEXTURE_2D:\r
-                if(width > (es2::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level) ||\r
-                    height > (es2::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level))\r
-                {\r
-                    return error(GL_INVALID_VALUE);\r
-                }\r
-                break;\r
-              case GL_TEXTURE_CUBE_MAP_POSITIVE_X:\r
-              case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:\r
-              case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:\r
-              case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:\r
-              case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:\r
-              case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:\r
-                if(width != height)\r
-                {\r
-                    return error(GL_INVALID_VALUE);\r
-                }\r
-\r
-                if(width > (es2::IMPLEMENTATION_MAX_CUBE_MAP_TEXTURE_SIZE >> level) ||\r
-                   height > (es2::IMPLEMENTATION_MAX_CUBE_MAP_TEXTURE_SIZE >> level))\r
-                {\r
-                    return error(GL_INVALID_VALUE);\r
-                }\r
-                break;\r
-              default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-\r
-            if(imageSize != es2::ComputeCompressedSize(width, height, internalformat))\r
-            {\r
-                return error(GL_INVALID_VALUE);\r
-            }\r
-\r
-            if(target == GL_TEXTURE_2D)\r
-            {\r
-                es2::Texture2D *texture = context->getTexture2D();\r
-\r
-                if(!texture)\r
-                {\r
-                    return error(GL_INVALID_OPERATION);\r
-                }\r
-\r
-                texture->setCompressedImage(level, internalformat, width, height, imageSize, data);\r
-            }\r
-            else\r
-            {\r
-                es2::TextureCubeMap *texture = context->getTextureCubeMap();\r
-\r
-                if(!texture)\r
-                {\r
-                    return error(GL_INVALID_OPERATION);\r
-                }\r
-\r
-                switch(target)\r
-                {\r
-                  case GL_TEXTURE_CUBE_MAP_POSITIVE_X:\r
-                  case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:\r
-                  case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:\r
-                  case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:\r
-                  case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:\r
-                  case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:\r
-                    texture->setCompressedImage(target, level, internalformat, width, height, imageSize, data);\r
-                    break;\r
-                  default: UNREACHABLE();\r
-                }\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
-\r
-void GL_APIENTRY glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,\r
-                                         GLenum format, GLsizei imageSize, const GLvoid* data)\r
-{\r
-    TRACE("(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "\r
-          "GLsizei width = %d, GLsizei height = %d, GLenum format = 0x%X, "\r
-          "GLsizei imageSize = %d, const GLvoid* data = 0x%0.8p)",\r
-          target, level, xoffset, yoffset, width, height, format, imageSize, data);\r
-\r
-    try\r
-    {\r
-        if(!es2::IsTextureTarget(target))\r
-        {\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        if(xoffset < 0 || yoffset < 0 || !validImageSize(level, width, height) || imageSize < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        switch(format)\r
-        {\r
-        case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:\r
-        case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:\r
-               case GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE:\r
-               case GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE:\r
-                       if(!S3TC_SUPPORT)\r
-            {\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-            break;\r
-        default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        if(width == 0 || height == 0 || data == NULL)\r
-        {\r
-            return;\r
-        }\r
-\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            if(level > es2::IMPLEMENTATION_MAX_TEXTURE_LEVELS)\r
-            {\r
-                return error(GL_INVALID_VALUE);\r
-            }\r
-\r
-            if(imageSize != es2::ComputeCompressedSize(width, height, format))\r
-            {\r
-                return error(GL_INVALID_VALUE);\r
-            }\r
-\r
-            if(xoffset % 4 != 0 || yoffset % 4 != 0)\r
-            {\r
-                               // We wait to check the offsets until this point, because the multiple-of-four restriction does not exist unless DXT1 textures are supported\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-\r
-            if(target == GL_TEXTURE_2D)\r
-            {\r
-                es2::Texture2D *texture = context->getTexture2D();\r
-\r
-                if(validateSubImageParams(true, width, height, xoffset, yoffset, target, level, format, texture))\r
-                               {\r
-                                       texture->subImageCompressed(level, xoffset, yoffset, width, height, format, imageSize, data);\r
-                               }\r
-            }\r
-            else if(es2::IsCubemapTextureTarget(target))\r
-            {\r
-                es2::TextureCubeMap *texture = context->getTextureCubeMap();\r
+       TRACE("(GLuint shader = %d)", shader);\r
 \r
-                if(validateSubImageParams(true, width, height, xoffset, yoffset, target, level, format, texture))\r
-                               {\r
-                                       texture->subImageCompressed(target, level, xoffset, yoffset, width, height, format, imageSize, data);\r
-                               }\r
-            }\r
-            else\r
-            {\r
-                UNREACHABLE();\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+       es2::Context *context = es2::getContext();\r
 \r
-void GL_APIENTRY glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)\r
-{\r
-    TRACE("(GLenum target = 0x%X, GLint level = %d, GLenum internalformat = 0x%X, "\r
-          "GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d, GLint border = %d)",\r
-          target, level, internalformat, x, y, width, height, border);\r
-\r
-    try\r
-    {\r
-        if(!validImageSize(level, width, height))\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        if(border != 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            switch(target)\r
-            {\r
-              case GL_TEXTURE_2D:\r
-                if(width > (es2::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level) ||\r
-                   height > (es2::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level))\r
-                {\r
-                    return error(GL_INVALID_VALUE);\r
-                }\r
-                break;\r
-              case GL_TEXTURE_CUBE_MAP_POSITIVE_X:\r
-              case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:\r
-              case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:\r
-              case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:\r
-              case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:\r
-              case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:\r
-                if(width != height)\r
-                {\r
-                    return error(GL_INVALID_VALUE);\r
-                }\r
-\r
-                if(width > (es2::IMPLEMENTATION_MAX_CUBE_MAP_TEXTURE_SIZE >> level) ||\r
-                   height > (es2::IMPLEMENTATION_MAX_CUBE_MAP_TEXTURE_SIZE >> level))\r
-                {\r
-                    return error(GL_INVALID_VALUE);\r
-                }\r
-                break;\r
-              default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-\r
-            es2::Framebuffer *framebuffer = context->getReadFramebuffer();\r
-\r
-            if(framebuffer->completeness() != GL_FRAMEBUFFER_COMPLETE)\r
-            {\r
-                return error(GL_INVALID_FRAMEBUFFER_OPERATION);\r
-            }\r
-\r
-            if(context->getReadFramebufferHandle() != 0 && framebuffer->getColorbuffer()->getSamples() > 1)\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-\r
-            es2::Renderbuffer *source = framebuffer->getColorbuffer();\r
-            GLenum colorbufferFormat = source->getFormat();\r
-\r
-            // [OpenGL ES 2.0.24] table 3.9\r
-            switch(internalformat)\r
-            {\r
-            case GL_ALPHA:\r
-                if(colorbufferFormat != GL_ALPHA &&\r
-                   colorbufferFormat != GL_RGBA &&\r
-                   colorbufferFormat != GL_RGBA4 &&\r
-                   colorbufferFormat != GL_RGB5_A1 &&\r
-                   colorbufferFormat != GL_RGBA8_OES)\r
-                {\r
-                    return error(GL_INVALID_OPERATION);\r
-                }\r
-                break;\r
-            case GL_LUMINANCE:\r
-            case GL_RGB:\r
-                if(colorbufferFormat != GL_RGB &&\r
-                   colorbufferFormat != GL_RGB565 &&\r
-                   colorbufferFormat != GL_RGB8_OES &&\r
-                   colorbufferFormat != GL_RGBA &&\r
-                   colorbufferFormat != GL_RGBA4 &&\r
-                   colorbufferFormat != GL_RGB5_A1 &&\r
-                   colorbufferFormat != GL_RGBA8_OES)\r
-                {\r
-                    return error(GL_INVALID_OPERATION);\r
-                }\r
-                break;\r
-            case GL_LUMINANCE_ALPHA:\r
-            case GL_RGBA:\r
-                if(colorbufferFormat != GL_RGBA &&\r
-                   colorbufferFormat != GL_RGBA4 &&\r
-                   colorbufferFormat != GL_RGB5_A1 &&\r
-                   colorbufferFormat != GL_RGBA8_OES)\r
-                 {\r
-                     return error(GL_INVALID_OPERATION);\r
-                 }\r
-                 break;\r
-            case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:\r
-            case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:\r
-                       case GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE:\r
-                       case GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE:\r
-                if(S3TC_SUPPORT)\r
-                {\r
-                    return error(GL_INVALID_OPERATION);\r
-                }\r
-                else\r
-                {\r
-                    return error(GL_INVALID_ENUM);\r
-                }\r
-                break;\r
-            default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-\r
-            if(target == GL_TEXTURE_2D)\r
-            {\r
-                es2::Texture2D *texture = context->getTexture2D();\r
-\r
-                if(!texture)\r
-                {\r
-                    return error(GL_INVALID_OPERATION);\r
-                }\r
-\r
-                texture->copyImage(level, internalformat, x, y, width, height, framebuffer);\r
-            }\r
-            else if(es2::IsCubemapTextureTarget(target))\r
-            {\r
-                es2::TextureCubeMap *texture = context->getTextureCubeMap();\r
-\r
-                if(!texture)\r
-                {\r
-                    return error(GL_INVALID_OPERATION);\r
-                }\r
-\r
-                texture->copyImage(target, level, internalformat, x, y, width, height, framebuffer);\r
-            }\r
-            else UNREACHABLE();\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+       if(context)\r
+       {\r
+               es2::Shader *shaderObject = context->getShader(shader);\r
 \r
-void GL_APIENTRY glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)\r
-{\r
-    TRACE("(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "\r
-          "GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d)",\r
-          target, level, xoffset, yoffset, x, y, width, height);\r
-\r
-    try\r
-    {\r
-        if(!es2::IsTextureTarget(target))\r
-        {\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        if(level < 0 || xoffset < 0 || yoffset < 0 || width < 0 || height < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        if(std::numeric_limits<GLsizei>::max() - xoffset < width || std::numeric_limits<GLsizei>::max() - yoffset < height)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        if(width == 0 || height == 0)\r
-        {\r
-            return;\r
-        }\r
-\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            if(level > es2::IMPLEMENTATION_MAX_TEXTURE_LEVELS)\r
-            {\r
-                return error(GL_INVALID_VALUE);\r
-            }\r
-\r
-            es2::Framebuffer *framebuffer = context->getReadFramebuffer();\r
-\r
-            if(framebuffer->completeness() != GL_FRAMEBUFFER_COMPLETE)\r
-            {\r
-                return error(GL_INVALID_FRAMEBUFFER_OPERATION);\r
-            }\r
-\r
-            if(context->getReadFramebufferHandle() != 0 && framebuffer->getColorbuffer()->getSamples() > 1)\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-\r
-            es2::Renderbuffer *source = framebuffer->getColorbuffer();\r
-            GLenum colorbufferFormat = source->getFormat();\r
-            es2::Texture *texture = NULL;\r
-\r
-            if(target == GL_TEXTURE_2D)\r
-            {\r
-                texture = context->getTexture2D();\r
-            }\r
-            else if(es2::IsCubemapTextureTarget(target))\r
-            {\r
-                texture = context->getTextureCubeMap();\r
-            }\r
-            else UNREACHABLE();\r
-\r
-            if(!validateSubImageParams(false, width, height, xoffset, yoffset, target, level, GL_NONE, texture))\r
+               if(!shaderObject)\r
+               {\r
+                       if(context->getProgram(shader))\r
                        {\r
-                               return;\r
-                       }\r
-\r
-            GLenum textureFormat = texture->getFormat(target, level);\r
-\r
-            // [OpenGL ES 2.0.24] table 3.9\r
-            switch(textureFormat)\r
-            {\r
-            case GL_ALPHA:\r
-                if(colorbufferFormat != GL_ALPHA &&\r
-                   colorbufferFormat != GL_RGBA &&\r
-                   colorbufferFormat != GL_RGBA4 &&\r
-                   colorbufferFormat != GL_RGB5_A1 &&\r
-                   colorbufferFormat != GL_RGBA8_OES)\r
-                {\r
-                    return error(GL_INVALID_OPERATION);\r
-                }\r
-                break;\r
-            case GL_LUMINANCE:\r
-            case GL_RGB:\r
-                if(colorbufferFormat != GL_RGB &&\r
-                   colorbufferFormat != GL_RGB565 &&\r
-                   colorbufferFormat != GL_RGB8_OES &&\r
-                   colorbufferFormat != GL_RGBA &&\r
-                   colorbufferFormat != GL_RGBA4 &&\r
-                   colorbufferFormat != GL_RGB5_A1 &&\r
-                   colorbufferFormat != GL_RGBA8_OES)\r
-                {\r
-                    return error(GL_INVALID_OPERATION);\r
-                }\r
-                break;\r
-            case GL_LUMINANCE_ALPHA:\r
-            case GL_RGBA:\r
-                if(colorbufferFormat != GL_RGBA &&\r
-                   colorbufferFormat != GL_RGBA4 &&\r
-                   colorbufferFormat != GL_RGB5_A1 &&\r
-                   colorbufferFormat != GL_RGBA8_OES)\r
-                {\r
-                    return error(GL_INVALID_OPERATION);\r
-                }\r
-                break;\r
-            case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:\r
-            case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:\r
-                       case GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE:\r
-                       case GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE:\r
-                return error(GL_INVALID_OPERATION);\r
-                       case GL_DEPTH_COMPONENT:\r
-                       case GL_DEPTH_STENCIL_OES:\r
                                return error(GL_INVALID_OPERATION);\r
-            default:\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-\r
-            texture->copySubImage(target, level, xoffset, yoffset, x, y, width, height, framebuffer);\r
-        }\r
-    }\r
+                       }\r
+                       else\r
+                       {\r
+                               return error(GL_INVALID_VALUE);\r
+                       }\r
+               }\r
 \r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+               shaderObject->compile();\r
+       }\r
 }\r
 \r
-GLuint GL_APIENTRY glCreateProgram(void)\r
+void GL_APIENTRY glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height,\r
+                                        GLint border, GLsizei imageSize, const GLvoid* data)\r
 {\r
-    TRACE("()");\r
-\r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
+       TRACE("(GLenum target = 0x%X, GLint level = %d, GLenum internalformat = 0x%X, GLsizei width = %d, "\r
+             "GLsizei height = %d, GLint border = %d, GLsizei imageSize = %d, const GLvoid* data = 0x%0.8p)",\r
+             target, level, internalformat, width, height, border, imageSize, data);\r
 \r
-        if(context)\r
-        {\r
-            return context->createProgram();\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY, 0);\r
-    }\r
+       if(!validImageSize(level, width, height) || border != 0 || imageSize < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       switch(internalformat)\r
+       {\r
+       case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:\r
+       case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:\r
+       case GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE:\r
+       case GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE:\r
+               if(!S3TC_SUPPORT)\r
+               {\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+               break;\r
+       case GL_DEPTH_COMPONENT:\r
+       case GL_DEPTH_COMPONENT16:\r
+       case GL_DEPTH_COMPONENT32_OES:\r
+       case GL_DEPTH_STENCIL_OES:\r
+       case GL_DEPTH24_STENCIL8_OES:\r
+               return error(GL_INVALID_OPERATION);\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       if(border != 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               if(level > es2::IMPLEMENTATION_MAX_TEXTURE_LEVELS)\r
+               {\r
+                       return error(GL_INVALID_VALUE);\r
+               }\r
+\r
+               switch(target)\r
+               {\r
+               case GL_TEXTURE_2D:\r
+                       if(width > (es2::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level) ||\r
+                          height > (es2::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level))\r
+                       {\r
+                               return error(GL_INVALID_VALUE);\r
+                       }\r
+                       break;\r
+               case GL_TEXTURE_CUBE_MAP_POSITIVE_X:\r
+               case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:\r
+               case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:\r
+               case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:\r
+               case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:\r
+               case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:\r
+                       if(width != height)\r
+                       {\r
+                               return error(GL_INVALID_VALUE);\r
+                       }\r
+\r
+                       if(width > (es2::IMPLEMENTATION_MAX_CUBE_MAP_TEXTURE_SIZE >> level) ||\r
+                          height > (es2::IMPLEMENTATION_MAX_CUBE_MAP_TEXTURE_SIZE >> level))\r
+                       {\r
+                               return error(GL_INVALID_VALUE);\r
+                       }\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+\r
+               if(imageSize != es2::ComputeCompressedSize(width, height, internalformat))\r
+               {\r
+                       return error(GL_INVALID_VALUE);\r
+               }\r
+\r
+               if(target == GL_TEXTURE_2D)\r
+               {\r
+                       es2::Texture2D *texture = context->getTexture2D();\r
+\r
+                       if(!texture)\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+\r
+                       texture->setCompressedImage(level, internalformat, width, height, imageSize, data);\r
+               }\r
+               else\r
+               {\r
+                       es2::TextureCubeMap *texture = context->getTextureCubeMap();\r
+\r
+                       if(!texture)\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+\r
+                       switch(target)\r
+                       {\r
+                       case GL_TEXTURE_CUBE_MAP_POSITIVE_X:\r
+                       case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:\r
+                       case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:\r
+                       case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:\r
+                       case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:\r
+                       case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:\r
+                               texture->setCompressedImage(target, level, internalformat, width, height, imageSize, data);\r
+                               break;\r
+                       default: UNREACHABLE();\r
+                       }\r
+               }\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,\r
+                                           GLenum format, GLsizei imageSize, const GLvoid* data)\r
+{\r
+       TRACE("(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "\r
+             "GLsizei width = %d, GLsizei height = %d, GLenum format = 0x%X, "\r
+             "GLsizei imageSize = %d, const GLvoid* data = 0x%0.8p)",\r
+             target, level, xoffset, yoffset, width, height, format, imageSize, data);\r
+\r
+       if(!es2::IsTextureTarget(target))\r
+       {\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       if(xoffset < 0 || yoffset < 0 || !validImageSize(level, width, height) || imageSize < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       switch(format)\r
+       {\r
+       case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:\r
+       case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:\r
+       case GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE:\r
+       case GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE:\r
+               if(!S3TC_SUPPORT)\r
+               {\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       if(width == 0 || height == 0 || data == NULL)\r
+       {\r
+               return;\r
+       }\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               if(level > es2::IMPLEMENTATION_MAX_TEXTURE_LEVELS)\r
+               {\r
+                       return error(GL_INVALID_VALUE);\r
+               }\r
+\r
+               if(imageSize != es2::ComputeCompressedSize(width, height, format))\r
+               {\r
+                       return error(GL_INVALID_VALUE);\r
+               }\r
+\r
+               if(xoffset % 4 != 0 || yoffset % 4 != 0)\r
+               {\r
+                       // We wait to check the offsets until this point, because the multiple-of-four restriction does not exist unless DXT1 textures are supported\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
+\r
+               if(target == GL_TEXTURE_2D)\r
+               {\r
+                       es2::Texture2D *texture = context->getTexture2D();\r
+\r
+                       if(validateSubImageParams(true, width, height, xoffset, yoffset, target, level, format, texture))\r
+                       {\r
+                               texture->subImageCompressed(level, xoffset, yoffset, width, height, format, imageSize, data);\r
+                       }\r
+               }\r
+               else if(es2::IsCubemapTextureTarget(target))\r
+               {\r
+                       es2::TextureCubeMap *texture = context->getTextureCubeMap();\r
+\r
+                       if(validateSubImageParams(true, width, height, xoffset, yoffset, target, level, format, texture))\r
+                       {\r
+                               texture->subImageCompressed(target, level, xoffset, yoffset, width, height, format, imageSize, data);\r
+                       }\r
+               }\r
+               else\r
+               {\r
+                       UNREACHABLE();\r
+               }\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)\r
+{\r
+       TRACE("(GLenum target = 0x%X, GLint level = %d, GLenum internalformat = 0x%X, "\r
+             "GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d, GLint border = %d)",\r
+             target, level, internalformat, x, y, width, height, border);\r
+\r
+       if(!validImageSize(level, width, height))\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       if(border != 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               switch(target)\r
+               {\r
+               case GL_TEXTURE_2D:\r
+                       if(width > (es2::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level) ||\r
+                          height > (es2::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level))\r
+                       {\r
+                               return error(GL_INVALID_VALUE);\r
+                       }\r
+                       break;\r
+               case GL_TEXTURE_CUBE_MAP_POSITIVE_X:\r
+               case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:\r
+               case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:\r
+               case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:\r
+               case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:\r
+               case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:\r
+                       if(width != height)\r
+                       {\r
+                               return error(GL_INVALID_VALUE);\r
+                       }\r
+\r
+                       if(width > (es2::IMPLEMENTATION_MAX_CUBE_MAP_TEXTURE_SIZE >> level) ||\r
+                          height > (es2::IMPLEMENTATION_MAX_CUBE_MAP_TEXTURE_SIZE >> level))\r
+                       {\r
+                               return error(GL_INVALID_VALUE);\r
+                       }\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+\r
+               es2::Framebuffer *framebuffer = context->getReadFramebuffer();\r
+\r
+               if(framebuffer->completeness() != GL_FRAMEBUFFER_COMPLETE)\r
+               {\r
+                       return error(GL_INVALID_FRAMEBUFFER_OPERATION);\r
+               }\r
+\r
+               if(context->getReadFramebufferHandle() != 0 && framebuffer->getColorbuffer()->getSamples() > 1)\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
+\r
+               es2::Renderbuffer *source = framebuffer->getColorbuffer();\r
+               GLenum colorbufferFormat = source->getFormat();\r
+\r
+               // [OpenGL ES 2.0.24] table 3.9\r
+               switch(internalformat)\r
+               {\r
+               case GL_ALPHA:\r
+                       if(colorbufferFormat != GL_ALPHA &&\r
+                          colorbufferFormat != GL_RGBA &&\r
+                          colorbufferFormat != GL_RGBA4 &&\r
+                          colorbufferFormat != GL_RGB5_A1 &&\r
+                          colorbufferFormat != GL_RGBA8_OES)\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+                       break;\r
+               case GL_LUMINANCE:\r
+               case GL_RGB:\r
+                       if(colorbufferFormat != GL_RGB &&\r
+                          colorbufferFormat != GL_RGB565 &&\r
+                          colorbufferFormat != GL_RGB8_OES &&\r
+                          colorbufferFormat != GL_RGBA &&\r
+                          colorbufferFormat != GL_RGBA4 &&\r
+                          colorbufferFormat != GL_RGB5_A1 &&\r
+                          colorbufferFormat != GL_RGBA8_OES)\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+                       break;\r
+               case GL_LUMINANCE_ALPHA:\r
+               case GL_RGBA:\r
+                       if(colorbufferFormat != GL_RGBA &&\r
+                          colorbufferFormat != GL_RGBA4 &&\r
+                          colorbufferFormat != GL_RGB5_A1 &&\r
+                          colorbufferFormat != GL_RGBA8_OES)\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+                       break;\r
+               case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:\r
+               case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:\r
+               case GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE:\r
+               case GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE:\r
+                       if(S3TC_SUPPORT)\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+                       else\r
+                       {\r
+                               return error(GL_INVALID_ENUM);\r
+                       }\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+\r
+               if(target == GL_TEXTURE_2D)\r
+               {\r
+                       es2::Texture2D *texture = context->getTexture2D();\r
+\r
+                       if(!texture)\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+\r
+                       texture->copyImage(level, internalformat, x, y, width, height, framebuffer);\r
+               }\r
+               else if(es2::IsCubemapTextureTarget(target))\r
+               {\r
+                       es2::TextureCubeMap *texture = context->getTextureCubeMap();\r
+\r
+                       if(!texture)\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+\r
+                       texture->copyImage(target, level, internalformat, x, y, width, height, framebuffer);\r
+               }\r
+               else UNREACHABLE();\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)\r
+{\r
+       TRACE("(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "\r
+             "GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d)",\r
+             target, level, xoffset, yoffset, x, y, width, height);\r
+\r
+       if(!es2::IsTextureTarget(target))\r
+       {\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       if(level < 0 || xoffset < 0 || yoffset < 0 || width < 0 || height < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       if(std::numeric_limits<GLsizei>::max() - xoffset < width || std::numeric_limits<GLsizei>::max() - yoffset < height)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       if(width == 0 || height == 0)\r
+       {\r
+               return;\r
+       }\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               if(level > es2::IMPLEMENTATION_MAX_TEXTURE_LEVELS)\r
+               {\r
+                       return error(GL_INVALID_VALUE);\r
+               }\r
+\r
+               es2::Framebuffer *framebuffer = context->getReadFramebuffer();\r
+\r
+               if(framebuffer->completeness() != GL_FRAMEBUFFER_COMPLETE)\r
+               {\r
+                       return error(GL_INVALID_FRAMEBUFFER_OPERATION);\r
+               }\r
+\r
+               if(context->getReadFramebufferHandle() != 0 && framebuffer->getColorbuffer()->getSamples() > 1)\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
+\r
+               es2::Renderbuffer *source = framebuffer->getColorbuffer();\r
+               GLenum colorbufferFormat = source->getFormat();\r
+               es2::Texture *texture = NULL;\r
+\r
+               if(target == GL_TEXTURE_2D)\r
+               {\r
+                       texture = context->getTexture2D();\r
+               }\r
+               else if(es2::IsCubemapTextureTarget(target))\r
+               {\r
+                       texture = context->getTextureCubeMap();\r
+               }\r
+               else UNREACHABLE();\r
+\r
+               if(!validateSubImageParams(false, width, height, xoffset, yoffset, target, level, GL_NONE, texture))\r
+               {\r
+                       return;\r
+               }\r
+\r
+               GLenum textureFormat = texture->getFormat(target, level);\r
+\r
+               // [OpenGL ES 2.0.24] table 3.9\r
+               switch(textureFormat)\r
+               {\r
+               case GL_ALPHA:\r
+                       if(colorbufferFormat != GL_ALPHA &&\r
+                          colorbufferFormat != GL_RGBA &&\r
+                          colorbufferFormat != GL_RGBA4 &&\r
+                          colorbufferFormat != GL_RGB5_A1 &&\r
+                          colorbufferFormat != GL_RGBA8_OES)\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+                       break;\r
+               case GL_LUMINANCE:\r
+               case GL_RGB:\r
+                       if(colorbufferFormat != GL_RGB &&\r
+                          colorbufferFormat != GL_RGB565 &&\r
+                          colorbufferFormat != GL_RGB8_OES &&\r
+                          colorbufferFormat != GL_RGBA &&\r
+                          colorbufferFormat != GL_RGBA4 &&\r
+                          colorbufferFormat != GL_RGB5_A1 &&\r
+                          colorbufferFormat != GL_RGBA8_OES)\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+                       break;\r
+               case GL_LUMINANCE_ALPHA:\r
+               case GL_RGBA:\r
+                       if(colorbufferFormat != GL_RGBA &&\r
+                          colorbufferFormat != GL_RGBA4 &&\r
+                          colorbufferFormat != GL_RGB5_A1 &&\r
+                          colorbufferFormat != GL_RGBA8_OES)\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+                       break;\r
+               case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:\r
+               case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:\r
+               case GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE:\r
+               case GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE:\r
+                       return error(GL_INVALID_OPERATION);\r
+               case GL_DEPTH_COMPONENT:\r
+               case GL_DEPTH_STENCIL_OES:\r
+                       return error(GL_INVALID_OPERATION);\r
+               default:\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
+\r
+               texture->copySubImage(target, level, xoffset, yoffset, x, y, width, height, framebuffer);\r
+       }\r
+}\r
+\r
+GLuint GL_APIENTRY glCreateProgram(void)\r
+{\r
+       TRACE("()");\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               return context->createProgram();\r
+       }\r
+\r
+       return 0;\r
+}\r
+\r
+GLuint GL_APIENTRY glCreateShader(GLenum type)\r
+{\r
+       TRACE("(GLenum type = 0x%X)", type);\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               switch(type)\r
+               {\r
+               case GL_FRAGMENT_SHADER:\r
+               case GL_VERTEX_SHADER:\r
+                       return context->createShader(type);\r
+               default:\r
+                       return error(GL_INVALID_ENUM, 0);\r
+               }\r
+       }\r
+\r
+       return 0;\r
+}\r
+\r
+void GL_APIENTRY glCullFace(GLenum mode)\r
+{\r
+       TRACE("(GLenum mode = 0x%X)", mode);\r
+\r
+       switch(mode)\r
+       {\r
+       case GL_FRONT:\r
+       case GL_BACK:\r
+       case GL_FRONT_AND_BACK:\r
+               {\r
+                       es2::Context *context = es2::getContext();\r
+\r
+                       if(context)\r
+                       {\r
+                               context->setCullMode(mode);\r
+                       }\r
+               }\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glDeleteBuffers(GLsizei n, const GLuint* buffers)\r
+{\r
+       TRACE("(GLsizei n = %d, const GLuint* buffers = 0x%0.8p)", n, buffers);\r
+\r
+       if(n < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               for(int i = 0; i < n; i++)\r
+               {\r
+                       context->deleteBuffer(buffers[i]);\r
+               }\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glDeleteFencesNV(GLsizei n, const GLuint* fences)\r
+{\r
+       TRACE("(GLsizei n = %d, const GLuint* fences = 0x%0.8p)", n, fences);\r
+\r
+       if(n < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               for(int i = 0; i < n; i++)\r
+               {\r
+                       context->deleteFence(fences[i]);\r
+               }\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glDeleteFramebuffers(GLsizei n, const GLuint* framebuffers)\r
+{\r
+       TRACE("(GLsizei n = %d, const GLuint* framebuffers = 0x%0.8p)", n, framebuffers);\r
+\r
+       if(n < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               for(int i = 0; i < n; i++)\r
+               {\r
+                       if(framebuffers[i] != 0)\r
+                       {\r
+                               context->deleteFramebuffer(framebuffers[i]);\r
+                       }\r
+               }\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glDeleteProgram(GLuint program)\r
+{\r
+       TRACE("(GLuint program = %d)", program);\r
+\r
+       if(program == 0)\r
+       {\r
+               return;\r
+       }\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               if(!context->getProgram(program))\r
+               {\r
+                       if(context->getShader(program))\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+                       else\r
+                       {\r
+                               return error(GL_INVALID_VALUE);\r
+                       }\r
+               }\r
+\r
+               context->deleteProgram(program);\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glDeleteQueriesEXT(GLsizei n, const GLuint *ids)\r
+{\r
+       TRACE("(GLsizei n = %d, const GLuint *ids = 0x%0.8p)", n, ids);\r
+\r
+       if(n < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               for(int i = 0; i < n; i++)\r
+               {\r
+                       context->deleteQuery(ids[i]);\r
+               }\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glDeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers)\r
+{\r
+       TRACE("(GLsizei n = %d, const GLuint* renderbuffers = 0x%0.8p)", n, renderbuffers);\r
+\r
+       if(n < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               for(int i = 0; i < n; i++)\r
+               {\r
+                       context->deleteRenderbuffer(renderbuffers[i]);\r
+               }\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glDeleteShader(GLuint shader)\r
+{\r
+       TRACE("(GLuint shader = %d)", shader);\r
+\r
+       if(shader == 0)\r
+       {\r
+               return;\r
+       }\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               if(!context->getShader(shader))\r
+               {\r
+                       if(context->getProgram(shader))\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+                       else\r
+                       {\r
+                               return error(GL_INVALID_VALUE);\r
+                       }\r
+               }\r
+\r
+               context->deleteShader(shader);\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glDeleteTextures(GLsizei n, const GLuint* textures)\r
+{\r
+       TRACE("(GLsizei n = %d, const GLuint* textures = 0x%0.8p)", n, textures);\r
+\r
+       if(n < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               for(int i = 0; i < n; i++)\r
+               {\r
+                       if(textures[i] != 0)\r
+                       {\r
+                               context->deleteTexture(textures[i]);\r
+                       }\r
+               }\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glDepthFunc(GLenum func)\r
+{\r
+       TRACE("(GLenum func = 0x%X)", func);\r
+\r
+       switch(func)\r
+       {\r
+       case GL_NEVER:\r
+       case GL_ALWAYS:\r
+       case GL_LESS:\r
+       case GL_LEQUAL:\r
+       case GL_EQUAL:\r
+       case GL_GREATER:\r
+       case GL_GEQUAL:\r
+       case GL_NOTEQUAL:\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               context->setDepthFunc(func);\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glDepthMask(GLboolean flag)\r
+{\r
+       TRACE("(GLboolean flag = %d)", flag);\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               context->setDepthMask(flag != GL_FALSE);\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glDepthRangef(GLclampf zNear, GLclampf zFar)\r
+{\r
+       TRACE("(GLclampf zNear = %f, GLclampf zFar = %f)", zNear, zFar);\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               context->setDepthRange(zNear, zFar);\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glDetachShader(GLuint program, GLuint shader)\r
+{\r
+       TRACE("(GLuint program = %d, GLuint shader = %d)", program, shader);\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+\r
+               es2::Program *programObject = context->getProgram(program);\r
+               es2::Shader *shaderObject = context->getShader(shader);\r
+\r
+               if(!programObject)\r
+               {\r
+                       es2::Shader *shaderByProgramHandle;\r
+                       shaderByProgramHandle = context->getShader(program);\r
+                       if(!shaderByProgramHandle)\r
+                       {\r
+                               return error(GL_INVALID_VALUE);\r
+                       }\r
+                       else\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+               }\r
+\r
+               if(!shaderObject)\r
+               {\r
+                       es2::Program *programByShaderHandle = context->getProgram(shader);\r
+                       if(!programByShaderHandle)\r
+                       {\r
+                               return error(GL_INVALID_VALUE);\r
+                       }\r
+                       else\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+               }\r
+\r
+               if(!programObject->detachShader(shaderObject))\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glDisable(GLenum cap)\r
+{\r
+       TRACE("(GLenum cap = 0x%X)", cap);\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               switch(cap)\r
+               {\r
+               case GL_CULL_FACE:                context->setCullFace(false);              break;\r
+               case GL_POLYGON_OFFSET_FILL:      context->setPolygonOffsetFill(false);     break;\r
+               case GL_SAMPLE_ALPHA_TO_COVERAGE: context->setSampleAlphaToCoverage(false); break;\r
+               case GL_SAMPLE_COVERAGE:          context->setSampleCoverage(false);        break;\r
+               case GL_SCISSOR_TEST:             context->setScissorTest(false);           break;\r
+               case GL_STENCIL_TEST:             context->setStencilTest(false);           break;\r
+               case GL_DEPTH_TEST:               context->setDepthTest(false);             break;\r
+               case GL_BLEND:                    context->setBlend(false);                 break;\r
+               case GL_DITHER:                   context->setDither(false);                break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glDisableVertexAttribArray(GLuint index)\r
+{\r
+       TRACE("(GLuint index = %d)", index);\r
+\r
+       if(index >= es2::MAX_VERTEX_ATTRIBS)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               context->setEnableVertexAttribArray(index, false);\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glDrawArrays(GLenum mode, GLint first, GLsizei count)\r
+{\r
+       TRACE("(GLenum mode = 0x%X, GLint first = %d, GLsizei count = %d)", mode, first, count);\r
+\r
+       if(count < 0 || first < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               context->drawArrays(mode, first, count);\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices)\r
+{\r
+       TRACE("(GLenum mode = 0x%X, GLsizei count = %d, GLenum type = 0x%X, const GLvoid* indices = 0x%0.8p)",\r
+             mode, count, type, indices);\r
+\r
+       if(count < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               switch(type)\r
+               {\r
+               case GL_UNSIGNED_BYTE:\r
+               case GL_UNSIGNED_SHORT:\r
+               case GL_UNSIGNED_INT:\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+\r
+               context->drawElements(mode, count, type, indices);\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glEnable(GLenum cap)\r
+{\r
+       TRACE("(GLenum cap = 0x%X)", cap);\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               switch(cap)\r
+               {\r
+               case GL_CULL_FACE:                context->setCullFace(true);              break;\r
+               case GL_POLYGON_OFFSET_FILL:      context->setPolygonOffsetFill(true);     break;\r
+               case GL_SAMPLE_ALPHA_TO_COVERAGE: context->setSampleAlphaToCoverage(true); break;\r
+               case GL_SAMPLE_COVERAGE:          context->setSampleCoverage(true);        break;\r
+               case GL_SCISSOR_TEST:             context->setScissorTest(true);           break;\r
+               case GL_STENCIL_TEST:             context->setStencilTest(true);           break;\r
+               case GL_DEPTH_TEST:               context->setDepthTest(true);             break;\r
+               case GL_BLEND:                    context->setBlend(true);                 break;\r
+               case GL_DITHER:                   context->setDither(true);                break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glEnableVertexAttribArray(GLuint index)\r
+{\r
+       TRACE("(GLuint index = %d)", index);\r
+\r
+       if(index >= es2::MAX_VERTEX_ATTRIBS)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               context->setEnableVertexAttribArray(index, true);\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glEndQueryEXT(GLenum target)\r
+{\r
+       TRACE("GLenum target = 0x%X)", target);\r
+\r
+       switch(target)\r
+       {\r
+       case GL_ANY_SAMPLES_PASSED_EXT:\r
+       case GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT:\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               context->endQuery(target);\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glFinishFenceNV(GLuint fence)\r
+{\r
+       TRACE("(GLuint fence = %d)", fence);\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               es2::Fence* fenceObject = context->getFence(fence);\r
+\r
+               if(fenceObject == NULL)\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
+\r
+               fenceObject->finishFence();\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glFinish(void)\r
+{\r
+       TRACE("()");\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               context->finish();\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glFlush(void)\r
+{\r
+       TRACE("()");\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               context->flush();\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)\r
+{\r
+       TRACE("(GLenum target = 0x%X, GLenum attachment = 0x%X, GLenum renderbuffertarget = 0x%X, "\r
+             "GLuint renderbuffer = %d)", target, attachment, renderbuffertarget, renderbuffer);\r
+\r
+       if((target != GL_FRAMEBUFFER && target != GL_DRAW_FRAMEBUFFER_ANGLE && target != GL_READ_FRAMEBUFFER_ANGLE) ||\r
+          (renderbuffertarget != GL_RENDERBUFFER && renderbuffer != 0))\r
+       {\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               es2::Framebuffer *framebuffer = NULL;\r
+               GLuint framebufferHandle = 0;\r
+               if(target == GL_READ_FRAMEBUFFER_ANGLE)\r
+               {\r
+                       framebuffer = context->getReadFramebuffer();\r
+                       framebufferHandle = context->getReadFramebufferHandle();\r
+               }\r
+               else\r
+               {\r
+                       framebuffer = context->getDrawFramebuffer();\r
+                       framebufferHandle = context->getDrawFramebufferHandle();\r
+               }\r
+\r
+               if(!framebuffer || (framebufferHandle == 0 && renderbuffer != 0))\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
+\r
+               switch(attachment)\r
+               {\r
+               case GL_COLOR_ATTACHMENT0:\r
+                       framebuffer->setColorbuffer(GL_RENDERBUFFER, renderbuffer);\r
+                       break;\r
+               case GL_DEPTH_ATTACHMENT:\r
+                       framebuffer->setDepthbuffer(GL_RENDERBUFFER, renderbuffer);\r
+                       break;\r
+               case GL_STENCIL_ATTACHMENT:\r
+                       framebuffer->setStencilbuffer(GL_RENDERBUFFER, renderbuffer);\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)\r
+{\r
+       TRACE("(GLenum target = 0x%X, GLenum attachment = 0x%X, GLenum textarget = 0x%X, "\r
+             "GLuint texture = %d, GLint level = %d)", target, attachment, textarget, texture, level);\r
+\r
+       if(target != GL_FRAMEBUFFER && target != GL_DRAW_FRAMEBUFFER_ANGLE && target != GL_READ_FRAMEBUFFER_ANGLE)\r
+       {\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       switch(attachment)\r
+       {\r
+       case GL_COLOR_ATTACHMENT0:\r
+       case GL_DEPTH_ATTACHMENT:\r
+       case GL_STENCIL_ATTACHMENT:\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               if(texture == 0)\r
+               {\r
+                       textarget = GL_NONE;\r
+               }\r
+               else\r
+               {\r
+                       es2::Texture *tex = context->getTexture(texture);\r
+\r
+                       if(tex == NULL)\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+\r
+                       if(tex->isCompressed(textarget, level))\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+\r
+                       switch(textarget)\r
+                       {\r
+                       case GL_TEXTURE_2D:\r
+                               if(tex->getTarget() != GL_TEXTURE_2D)\r
+                               {\r
+                                       return error(GL_INVALID_OPERATION);\r
+                               }\r
+                               break;\r
+                       case GL_TEXTURE_CUBE_MAP_POSITIVE_X:\r
+                       case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:\r
+                       case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:\r
+                       case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:\r
+                       case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:\r
+                       case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:\r
+                               if(tex->getTarget() != GL_TEXTURE_CUBE_MAP)\r
+                               {\r
+                                       return error(GL_INVALID_OPERATION);\r
+                               }\r
+                               break;\r
+                       default:\r
+                               return error(GL_INVALID_ENUM);\r
+                       }\r
+\r
+                       if(level != 0)\r
+                       {\r
+                               return error(GL_INVALID_VALUE);\r
+                       }\r
+               }\r
+\r
+               es2::Framebuffer *framebuffer = NULL;\r
+               GLuint framebufferHandle = 0;\r
+               if(target == GL_READ_FRAMEBUFFER_ANGLE)\r
+               {\r
+                       framebuffer = context->getReadFramebuffer();\r
+                       framebufferHandle = context->getReadFramebufferHandle();\r
+               }\r
+               else\r
+               {\r
+                       framebuffer = context->getDrawFramebuffer();\r
+                       framebufferHandle = context->getDrawFramebufferHandle();\r
+               }\r
+\r
+               if(framebufferHandle == 0 || !framebuffer)\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
+\r
+               switch(attachment)\r
+               {\r
+               case GL_COLOR_ATTACHMENT0:  framebuffer->setColorbuffer(textarget, texture);   break;\r
+               case GL_DEPTH_ATTACHMENT:   framebuffer->setDepthbuffer(textarget, texture);   break;\r
+               case GL_STENCIL_ATTACHMENT: framebuffer->setStencilbuffer(textarget, texture); break;\r
+               }\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glFrontFace(GLenum mode)\r
+{\r
+       TRACE("(GLenum mode = 0x%X)", mode);\r
+\r
+       switch(mode)\r
+       {\r
+       case GL_CW:\r
+       case GL_CCW:\r
+               {\r
+                       es2::Context *context = es2::getContext();\r
+\r
+                       if(context)\r
+                       {\r
+                               context->setFrontFace(mode);\r
+                       }\r
+               }\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glGenBuffers(GLsizei n, GLuint* buffers)\r
+{\r
+       TRACE("(GLsizei n = %d, GLuint* buffers = 0x%0.8p)", n, buffers);\r
+\r
+       if(n < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               for(int i = 0; i < n; i++)\r
+               {\r
+                       buffers[i] = context->createBuffer();\r
+               }\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glGenerateMipmap(GLenum target)\r
+{\r
+       TRACE("(GLenum target = 0x%X)", target);\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               es2::Texture *texture;\r
+\r
+               switch(target)\r
+               {\r
+               case GL_TEXTURE_2D:\r
+                       texture = context->getTexture2D();\r
+                       break;\r
+               case GL_TEXTURE_CUBE_MAP:\r
+                       texture = context->getTextureCubeMap();\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+\r
+               if(texture->isCompressed(target, 0) || texture->isDepth(target, 0))\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
+\r
+               texture->generateMipmaps();\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glGenFencesNV(GLsizei n, GLuint* fences)\r
+{\r
+       TRACE("(GLsizei n = %d, GLuint* fences = 0x%0.8p)", n, fences);\r
+\r
+       if(n < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               for(int i = 0; i < n; i++)\r
+               {\r
+                       fences[i] = context->createFence();\r
+               }\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glGenFramebuffers(GLsizei n, GLuint* framebuffers)\r
+{\r
+       TRACE("(GLsizei n = %d, GLuint* framebuffers = 0x%0.8p)", n, framebuffers);\r
+\r
+       if(n < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       es2::Context *context = es2::getContext();\r
 \r
-    return 0;\r
+       if(context)\r
+       {\r
+               for(int i = 0; i < n; i++)\r
+               {\r
+                       framebuffers[i] = context->createFramebuffer();\r
+               }\r
+       }\r
 }\r
 \r
-GLuint GL_APIENTRY glCreateShader(GLenum type)\r
+void GL_APIENTRY glGenQueriesEXT(GLsizei n, GLuint* ids)\r
 {\r
-    TRACE("(GLenum type = 0x%X)", type);\r
+       TRACE("(GLsizei n = %d, GLuint* ids = 0x%0.8p)", n, ids);\r
 \r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
+       if(n < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-        if(context)\r
-        {\r
-            switch(type)\r
-            {\r
-              case GL_FRAGMENT_SHADER:\r
-              case GL_VERTEX_SHADER:\r
-                return context->createShader(type);\r
-              default:\r
-                return error(GL_INVALID_ENUM, 0);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY, 0);\r
-    }\r
+       es2::Context *context = es2::getContext();\r
 \r
-    return 0;\r
+       if(context)\r
+       {\r
+               for(int i = 0; i < n; i++)\r
+               {\r
+                       ids[i] = context->createQuery();\r
+               }\r
+       }\r
 }\r
 \r
-void GL_APIENTRY glCullFace(GLenum mode)\r
+void GL_APIENTRY glGenRenderbuffers(GLsizei n, GLuint* renderbuffers)\r
 {\r
-    TRACE("(GLenum mode = 0x%X)", mode);\r
-\r
-    try\r
-    {\r
-        switch(mode)\r
-        {\r
-          case GL_FRONT:\r
-          case GL_BACK:\r
-          case GL_FRONT_AND_BACK:\r
-            {\r
-                es2::Context *context = es2::getContext();\r
-\r
-                if(context)\r
-                {\r
-                    context->setCullMode(mode);\r
-                }\r
-            }\r
-            break;\r
-          default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLsizei n = %d, GLuint* renderbuffers = 0x%0.8p)", n, renderbuffers);\r
+\r
+       if(n < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               for(int i = 0; i < n; i++)\r
+               {\r
+                       renderbuffers[i] = context->createRenderbuffer();\r
+               }\r
+       }\r
 }\r
 \r
-void GL_APIENTRY glDeleteBuffers(GLsizei n, const GLuint* buffers)\r
+void GL_APIENTRY glGenTextures(GLsizei n, GLuint* textures)\r
 {\r
-    TRACE("(GLsizei n = %d, const GLuint* buffers = 0x%0.8p)", n, buffers);\r
+       TRACE("(GLsizei n = %d, GLuint* textures = 0x%0.8p)", n, textures);\r
 \r
-    try\r
-    {\r
-        if(n < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+       if(n < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-            for(int i = 0; i < n; i++)\r
-            {\r
-                context->deleteBuffer(buffers[i]);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               for(int i = 0; i < n; i++)\r
+               {\r
+                       textures[i] = context->createTexture();\r
+               }\r
+       }\r
 }\r
 \r
-void GL_APIENTRY glDeleteFencesNV(GLsizei n, const GLuint* fences)\r
+void GL_APIENTRY glGetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, GLchar *name)\r
 {\r
-    TRACE("(GLsizei n = %d, const GLuint* fences = 0x%0.8p)", n, fences);\r
+       TRACE("(GLuint program = %d, GLuint index = %d, GLsizei bufsize = %d, GLsizei *length = 0x%0.8p, "\r
+             "GLint *size = 0x%0.8p, GLenum *type = %0.8p, GLchar *name = %0.8p)",\r
+             program, index, bufsize, length, size, type, name);\r
+\r
+       if(bufsize < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               es2::Program *programObject = context->getProgram(program);\r
 \r
-    try\r
-    {\r
-        if(n < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+               if(!programObject)\r
+               {\r
+                       if(context->getShader(program))\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+                       else\r
+                       {\r
+                               return error(GL_INVALID_VALUE);\r
+                       }\r
+               }\r
 \r
-        es2::Context *context = es2::getContext();\r
+               if(index >= (GLuint)programObject->getActiveAttributeCount())\r
+               {\r
+                       return error(GL_INVALID_VALUE);\r
+               }\r
 \r
-        if(context)\r
-        {\r
-            for(int i = 0; i < n; i++)\r
-            {\r
-                context->deleteFence(fences[i]);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+               programObject->getActiveAttribute(index, bufsize, length, size, type, name);\r
+       }\r
 }\r
 \r
-void GL_APIENTRY glDeleteFramebuffers(GLsizei n, const GLuint* framebuffers)\r
+void GL_APIENTRY glGetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name)\r
 {\r
-    TRACE("(GLsizei n = %d, const GLuint* framebuffers = 0x%0.8p)", n, framebuffers);\r
-\r
-    try\r
-    {\r
-        if(n < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            for(int i = 0; i < n; i++)\r
-            {\r
-                if(framebuffers[i] != 0)\r
-                {\r
-                    context->deleteFramebuffer(framebuffers[i]);\r
-                }\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLuint program = %d, GLuint index = %d, GLsizei bufsize = %d, "\r
+             "GLsizei* length = 0x%0.8p, GLint* size = 0x%0.8p, GLenum* type = 0x%0.8p, GLchar* name = %s)",\r
+             program, index, bufsize, length, size, type, name);\r
+\r
+       if(bufsize < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               es2::Program *programObject = context->getProgram(program);\r
+\r
+               if(!programObject)\r
+               {\r
+                       if(context->getShader(program))\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+                       else\r
+                       {\r
+                               return error(GL_INVALID_VALUE);\r
+                       }\r
+               }\r
+\r
+               if(index >= (GLuint)programObject->getActiveUniformCount())\r
+               {\r
+                       return error(GL_INVALID_VALUE);\r
+               }\r
+\r
+               programObject->getActiveUniform(index, bufsize, length, size, type, name);\r
+       }\r
 }\r
 \r
-void GL_APIENTRY glDeleteProgram(GLuint program)\r
+void GL_APIENTRY glGetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders)\r
 {\r
-    TRACE("(GLuint program = %d)", program);\r
-\r
-    try\r
-    {\r
-        if(program == 0)\r
-        {\r
-            return;\r
-        }\r
-\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            if(!context->getProgram(program))\r
-            {\r
-                if(context->getShader(program))\r
-                {\r
-                    return error(GL_INVALID_OPERATION);\r
-                }\r
-                else\r
-                {\r
-                    return error(GL_INVALID_VALUE);\r
-                }\r
-            }\r
-\r
-            context->deleteProgram(program);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLuint program = %d, GLsizei maxcount = %d, GLsizei* count = 0x%0.8p, GLuint* shaders = 0x%0.8p)",\r
+             program, maxcount, count, shaders);\r
+\r
+       if(maxcount < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               es2::Program *programObject = context->getProgram(program);\r
+\r
+               if(!programObject)\r
+               {\r
+                       if(context->getShader(program))\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+                       else\r
+                       {\r
+                               return error(GL_INVALID_VALUE);\r
+                       }\r
+               }\r
+\r
+               return programObject->getAttachedShaders(maxcount, count, shaders);\r
+       }\r
 }\r
 \r
-void GL_APIENTRY glDeleteQueriesEXT(GLsizei n, const GLuint *ids)\r
+int GL_APIENTRY glGetAttribLocation(GLuint program, const GLchar* name)\r
 {\r
-    TRACE("(GLsizei n = %d, const GLuint *ids = 0x%0.8p)", n, ids);\r
+       TRACE("(GLuint program = %d, const GLchar* name = %s)", program, name);\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+\r
+               es2::Program *programObject = context->getProgram(program);\r
+\r
+               if(!programObject)\r
+               {\r
+                       if(context->getShader(program))\r
+                       {\r
+                               return error(GL_INVALID_OPERATION, -1);\r
+                       }\r
+                       else\r
+                       {\r
+                               return error(GL_INVALID_VALUE, -1);\r
+                       }\r
+               }\r
 \r
-    try\r
-    {\r
-        if(n < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+               if(!programObject->isLinked())\r
+               {\r
+                       return error(GL_INVALID_OPERATION, -1);\r
+               }\r
 \r
-        es2::Context *context = es2::getContext();\r
+               return programObject->getAttributeLocation(name);\r
+       }\r
 \r
-        if(context)\r
-        {\r
-            for(int i = 0; i < n; i++)\r
-            {\r
-                context->deleteQuery(ids[i]);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       return -1;\r
 }\r
 \r
-void GL_APIENTRY glDeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers)\r
+void GL_APIENTRY glGetBooleanv(GLenum pname, GLboolean* params)\r
+{\r
+       TRACE("(GLenum pname = 0x%X, GLboolean* params = 0x%0.8p)",  pname, params);\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               if(!(context->getBooleanv(pname, params)))\r
+               {\r
+                       GLenum nativeType;\r
+                       unsigned int numParams = 0;\r
+                       if(!context->getQueryParameterInfo(pname, &nativeType, &numParams))\r
+                               return error(GL_INVALID_ENUM);\r
+\r
+                       if(numParams == 0)\r
+                               return; // it is known that the pname is valid, but there are no parameters to return\r
+\r
+                       if(nativeType == GL_FLOAT)\r
+                       {\r
+                               GLfloat *floatParams = NULL;\r
+                               floatParams = new GLfloat[numParams];\r
+\r
+                               context->getFloatv(pname, floatParams);\r
+\r
+                               for(unsigned int i = 0; i < numParams; ++i)\r
+                               {\r
+                                       if(floatParams[i] == 0.0f)\r
+                                               params[i] = GL_FALSE;\r
+                                       else\r
+                                               params[i] = GL_TRUE;\r
+                               }\r
+\r
+                               delete [] floatParams;\r
+                       }\r
+                       else if(nativeType == GL_INT)\r
+                       {\r
+                               GLint *intParams = NULL;\r
+                               intParams = new GLint[numParams];\r
+\r
+                               context->getIntegerv(pname, intParams);\r
+\r
+                               for(unsigned int i = 0; i < numParams; ++i)\r
+                               {\r
+                                       if(intParams[i] == 0)\r
+                                               params[i] = GL_FALSE;\r
+                                       else\r
+                                               params[i] = GL_TRUE;\r
+                               }\r
+\r
+                               delete [] intParams;\r
+                       }\r
+               }\r
+       }\r
+}\r
+\r
+void GL_APIENTRY glGetBufferParameteriv(GLenum target, GLenum pname, GLint* params)\r
 {\r
-    TRACE("(GLsizei n = %d, const GLuint* renderbuffers = 0x%0.8p)", n, renderbuffers);\r
+       TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint* params = 0x%0.8p)", target, pname, params);\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               es2::Buffer *buffer;\r
 \r
-    try\r
-    {\r
-        if(n < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+               switch(target)\r
+               {\r
+               case GL_ARRAY_BUFFER:\r
+                       buffer = context->getArrayBuffer();\r
+                       break;\r
+               case GL_ELEMENT_ARRAY_BUFFER:\r
+                       buffer = context->getElementArrayBuffer();\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
 \r
-        es2::Context *context = es2::getContext();\r
+               if(!buffer)\r
+               {\r
+                       // A null buffer means that "0" is bound to the requested buffer target\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
 \r
-        if(context)\r
-        {\r
-            for(int i = 0; i < n; i++)\r
-            {\r
-                context->deleteRenderbuffer(renderbuffers[i]);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+               switch(pname)\r
+               {\r
+               case GL_BUFFER_USAGE:\r
+                       *params = buffer->usage();\r
+                       break;\r
+               case GL_BUFFER_SIZE:\r
+                       *params = buffer->size();\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+       }\r
 }\r
 \r
-void GL_APIENTRY glDeleteShader(GLuint shader)\r
+GLenum GL_APIENTRY glGetError(void)\r
 {\r
-    TRACE("(GLuint shader = %d)", shader);\r
-\r
-    try\r
-    {\r
-        if(shader == 0)\r
-        {\r
-            return;\r
-        }\r
-\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            if(!context->getShader(shader))\r
-            {\r
-                if(context->getProgram(shader))\r
-                {\r
-                    return error(GL_INVALID_OPERATION);\r
-                }\r
-                else\r
-                {\r
-                    return error(GL_INVALID_VALUE);\r
-                }\r
-            }\r
-\r
-            context->deleteShader(shader);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("()");\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               return context->getError();\r
+       }\r
+\r
+       return GL_NO_ERROR;\r
 }\r
 \r
-void GL_APIENTRY glDeleteTextures(GLsizei n, const GLuint* textures)\r
+void GL_APIENTRY glGetFenceivNV(GLuint fence, GLenum pname, GLint *params)\r
 {\r
-    TRACE("(GLsizei n = %d, const GLuint* textures = 0x%0.8p)", n, textures);\r
-\r
-    try\r
-    {\r
-        if(n < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            for(int i = 0; i < n; i++)\r
-            {\r
-                if(textures[i] != 0)\r
-                {\r
-                    context->deleteTexture(textures[i]);\r
-                }\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLuint fence = %d, GLenum pname = 0x%X, GLint *params = 0x%0.8p)", fence, pname, params);\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               es2::Fence *fenceObject = context->getFence(fence);\r
+\r
+               if(fenceObject == NULL)\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
+\r
+               fenceObject->getFenceiv(pname, params);\r
+       }\r
 }\r
 \r
-void GL_APIENTRY glDepthFunc(GLenum func)\r
+void GL_APIENTRY glGetFloatv(GLenum pname, GLfloat* params)\r
 {\r
-    TRACE("(GLenum func = 0x%X)", func);\r
-\r
-    try\r
-    {\r
-        switch(func)\r
-        {\r
-          case GL_NEVER:\r
-          case GL_ALWAYS:\r
-          case GL_LESS:\r
-          case GL_LEQUAL:\r
-          case GL_EQUAL:\r
-          case GL_GREATER:\r
-          case GL_GEQUAL:\r
-          case GL_NOTEQUAL:\r
-            break;\r
-          default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            context->setDepthFunc(func);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLenum pname = 0x%X, GLfloat* params = 0x%0.8p)", pname, params);\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               if(!(context->getFloatv(pname, params)))\r
+               {\r
+                       GLenum nativeType;\r
+                       unsigned int numParams = 0;\r
+                       if(!context->getQueryParameterInfo(pname, &nativeType, &numParams))\r
+                               return error(GL_INVALID_ENUM);\r
+\r
+                       if(numParams == 0)\r
+                               return; // it is known that the pname is valid, but that there are no parameters to return.\r
+\r
+                       if(nativeType == GL_BOOL)\r
+                       {\r
+                               GLboolean *boolParams = NULL;\r
+                               boolParams = new GLboolean[numParams];\r
+\r
+                               context->getBooleanv(pname, boolParams);\r
+\r
+                               for(unsigned int i = 0; i < numParams; ++i)\r
+                               {\r
+                                       if(boolParams[i] == GL_FALSE)\r
+                                               params[i] = 0.0f;\r
+                                       else\r
+                                               params[i] = 1.0f;\r
+                               }\r
+\r
+                               delete [] boolParams;\r
+                       }\r
+                       else if(nativeType == GL_INT)\r
+                       {\r
+                               GLint *intParams = NULL;\r
+                               intParams = new GLint[numParams];\r
+\r
+                               context->getIntegerv(pname, intParams);\r
+\r
+                               for(unsigned int i = 0; i < numParams; ++i)\r
+                               {\r
+                                       params[i] = (GLfloat)intParams[i];\r
+                               }\r
+\r
+                               delete [] intParams;\r
+                       }\r
+               }\r
+       }\r
 }\r
 \r
-void GL_APIENTRY glDepthMask(GLboolean flag)\r
+void GL_APIENTRY glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint* params)\r
 {\r
-    TRACE("(GLboolean flag = %d)", flag);\r
+       TRACE("(GLenum target = 0x%X, GLenum attachment = 0x%X, GLenum pname = 0x%X, GLint* params = 0x%0.8p)",\r
+             target, attachment, pname, params);\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               if(target != GL_FRAMEBUFFER && target != GL_DRAW_FRAMEBUFFER_ANGLE && target != GL_READ_FRAMEBUFFER_ANGLE)\r
+               {\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+\r
+               es2::Framebuffer *framebuffer = NULL;\r
+               if(target == GL_READ_FRAMEBUFFER_ANGLE)\r
+               {\r
+                       if(context->getReadFramebufferHandle() == 0)\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+\r
+                       framebuffer = context->getReadFramebuffer();\r
+               }\r
+               else\r
+               {\r
+                       if(context->getDrawFramebufferHandle() == 0)\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+\r
+                       framebuffer = context->getDrawFramebuffer();\r
+               }\r
+\r
+               GLenum attachmentType;\r
+               GLuint attachmentHandle;\r
+               switch(attachment)\r
+               {\r
+               case GL_COLOR_ATTACHMENT0:\r
+                       attachmentType = framebuffer->getColorbufferType();\r
+                       attachmentHandle = framebuffer->getColorbufferHandle();\r
+                       break;\r
+               case GL_DEPTH_ATTACHMENT:\r
+                       attachmentType = framebuffer->getDepthbufferType();\r
+                       attachmentHandle = framebuffer->getDepthbufferHandle();\r
+                       break;\r
+               case GL_STENCIL_ATTACHMENT:\r
+                       attachmentType = framebuffer->getStencilbufferType();\r
+                       attachmentHandle = framebuffer->getStencilbufferHandle();\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
 \r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
+               GLenum attachmentObjectType;   // Type category\r
+               if(attachmentType == GL_NONE || attachmentType == GL_RENDERBUFFER)\r
+               {\r
+                       attachmentObjectType = attachmentType;\r
+               }\r
+               else if(es2::IsTextureTarget(attachmentType))\r
+               {\r
+                       attachmentObjectType = GL_TEXTURE;\r
+               }\r
+               else UNREACHABLE();\r
 \r
-        if(context)\r
-        {\r
-            context->setDepthMask(flag != GL_FALSE);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+               switch(pname)\r
+               {\r
+               case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE:\r
+                       *params = attachmentObjectType;\r
+                       break;\r
+               case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME:\r
+                       if(attachmentObjectType == GL_RENDERBUFFER || attachmentObjectType == GL_TEXTURE)\r
+                       {\r
+                               *params = attachmentHandle;\r
+                       }\r
+                       else\r
+                       {\r
+                               return error(GL_INVALID_ENUM);\r
+                       }\r
+                       break;\r
+               case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL:\r
+                       if(attachmentObjectType == GL_TEXTURE)\r
+                       {\r
+                               *params = 0; // FramebufferTexture2D will not allow level to be set to anything else in GL ES 2.0\r
+                       }\r
+                       else\r
+                       {\r
+                               return error(GL_INVALID_ENUM);\r
+                       }\r
+                       break;\r
+               case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE:\r
+                       if(attachmentObjectType == GL_TEXTURE)\r
+                       {\r
+                               if(es2::IsCubemapTextureTarget(attachmentType))\r
+                               {\r
+                                       *params = attachmentType;\r
+                               }\r
+                               else\r
+                               {\r
+                                       *params = 0;\r
+                               }\r
+                       }\r
+                       else\r
+                       {\r
+                               return error(GL_INVALID_ENUM);\r
+                       }\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+       }\r
 }\r
 \r
-void GL_APIENTRY glDepthRangef(GLclampf zNear, GLclampf zFar)\r
+GLenum GL_APIENTRY glGetGraphicsResetStatusEXT(void)\r
 {\r
-    TRACE("(GLclampf zNear = %f, GLclampf zFar = %f)", zNear, zFar);\r
-\r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            context->setDepthRange(zNear, zFar);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+       TRACE("()");\r
 \r
-void GL_APIENTRY glDetachShader(GLuint program, GLuint shader)\r
-{\r
-    TRACE("(GLuint program = %d, GLuint shader = %d)", program, shader);\r
-\r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-\r
-            es2::Program *programObject = context->getProgram(program);\r
-            es2::Shader *shaderObject = context->getShader(shader);\r
-\r
-            if(!programObject)\r
-            {\r
-                es2::Shader *shaderByProgramHandle;\r
-                shaderByProgramHandle = context->getShader(program);\r
-                if(!shaderByProgramHandle)\r
-                {\r
-                    return error(GL_INVALID_VALUE);\r
-                }\r
-                else\r
-                {\r
-                    return error(GL_INVALID_OPERATION);\r
-                }\r
-            }\r
-\r
-            if(!shaderObject)\r
-            {\r
-                es2::Program *programByShaderHandle = context->getProgram(shader);\r
-                if(!programByShaderHandle)\r
-                {\r
-                    return error(GL_INVALID_VALUE);\r
-                }\r
-                else\r
-                {\r
-                    return error(GL_INVALID_OPERATION);\r
-                }\r
-            }\r
-\r
-            if(!programObject->detachShader(shaderObject))\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       return GL_NO_ERROR;\r
 }\r
 \r
-void GL_APIENTRY glDisable(GLenum cap)\r
+void GL_APIENTRY glGetIntegerv(GLenum pname, GLint* params)\r
 {\r
-    TRACE("(GLenum cap = 0x%X)", cap);\r
-\r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            switch(cap)\r
-            {\r
-              case GL_CULL_FACE:                context->setCullFace(false);              break;\r
-              case GL_POLYGON_OFFSET_FILL:      context->setPolygonOffsetFill(false);     break;\r
-              case GL_SAMPLE_ALPHA_TO_COVERAGE: context->setSampleAlphaToCoverage(false); break;\r
-              case GL_SAMPLE_COVERAGE:          context->setSampleCoverage(false);        break;\r
-              case GL_SCISSOR_TEST:             context->setScissorTest(false);           break;\r
-              case GL_STENCIL_TEST:             context->setStencilTest(false);           break;\r
-              case GL_DEPTH_TEST:               context->setDepthTest(false);             break;\r
-              case GL_BLEND:                    context->setBlend(false);                 break;\r
-              case GL_DITHER:                   context->setDither(false);                break;\r
-              default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+       TRACE("(GLenum pname = 0x%X, GLint* params = 0x%0.8p)", pname, params);\r
 \r
-void GL_APIENTRY glDisableVertexAttribArray(GLuint index)\r
-{\r
-    TRACE("(GLuint index = %d)", index);\r
+       es2::Context *context = es2::getContext();\r
 \r
-    try\r
-    {\r
-        if(index >= es2::MAX_VERTEX_ATTRIBS)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+       if(context)\r
+       {\r
+               if(!(context->getIntegerv(pname, params)))\r
+               {\r
+                       GLenum nativeType;\r
+                       unsigned int numParams = 0;\r
+                       if(!context->getQueryParameterInfo(pname, &nativeType, &numParams))\r
+                               return error(GL_INVALID_ENUM);\r
 \r
-        es2::Context *context = es2::getContext();\r
+                       if(numParams == 0)\r
+                               return; // it is known that pname is valid, but there are no parameters to return\r
 \r
-        if(context)\r
-        {\r
-            context->setEnableVertexAttribArray(index, false);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+                       if(nativeType == GL_BOOL)\r
+                       {\r
+                               GLboolean *boolParams = NULL;\r
+                               boolParams = new GLboolean[numParams];\r
 \r
-void GL_APIENTRY glDrawArrays(GLenum mode, GLint first, GLsizei count)\r
-{\r
-    TRACE("(GLenum mode = 0x%X, GLint first = %d, GLsizei count = %d)", mode, first, count);\r
+                               context->getBooleanv(pname, boolParams);\r
 \r
-    try\r
-    {\r
-        if(count < 0 || first < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+                               for(unsigned int i = 0; i < numParams; ++i)\r
+                               {\r
+                                       if(boolParams[i] == GL_FALSE)\r
+                                               params[i] = 0;\r
+                                       else\r
+                                               params[i] = 1;\r
+                               }\r
 \r
-        es2::Context *context = es2::getContext();\r
+                               delete [] boolParams;\r
+                       }\r
+                       else if(nativeType == GL_FLOAT)\r
+                       {\r
+                               GLfloat *floatParams = NULL;\r
+                               floatParams = new GLfloat[numParams];\r
 \r
-        if(context)\r
-        {\r
-            context->drawArrays(mode, first, count);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+                               context->getFloatv(pname, floatParams);\r
 \r
-void GL_APIENTRY glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices)\r
-{\r
-    TRACE("(GLenum mode = 0x%X, GLsizei count = %d, GLenum type = 0x%X, const GLvoid* indices = 0x%0.8p)",\r
-          mode, count, type, indices);\r
-\r
-    try\r
-    {\r
-        if(count < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            switch(type)\r
-            {\r
-              case GL_UNSIGNED_BYTE:\r
-              case GL_UNSIGNED_SHORT:\r
-              case GL_UNSIGNED_INT:\r
-                break;\r
-              default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-\r
-            context->drawElements(mode, count, type, indices);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+                               for(unsigned int i = 0; i < numParams; ++i)\r
+                               {\r
+                                       if(pname == GL_DEPTH_RANGE || pname == GL_COLOR_CLEAR_VALUE || pname == GL_DEPTH_CLEAR_VALUE || pname == GL_BLEND_COLOR)\r
+                                       {\r
+                                               params[i] = (GLint)(((GLfloat)(0xFFFFFFFF) * floatParams[i] - 1.0f) / 2.0f);\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               params[i] = (GLint)(floatParams[i] > 0.0f ? floor(floatParams[i] + 0.5) : ceil(floatParams[i] - 0.5));\r
+                                       }\r
+                               }\r
 \r
-void GL_APIENTRY glEnable(GLenum cap)\r
-{\r
-    TRACE("(GLenum cap = 0x%X)", cap);\r
-\r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            switch(cap)\r
-            {\r
-              case GL_CULL_FACE:                context->setCullFace(true);              break;\r
-              case GL_POLYGON_OFFSET_FILL:      context->setPolygonOffsetFill(true);     break;\r
-              case GL_SAMPLE_ALPHA_TO_COVERAGE: context->setSampleAlphaToCoverage(true); break;\r
-              case GL_SAMPLE_COVERAGE:          context->setSampleCoverage(true);        break;\r
-              case GL_SCISSOR_TEST:             context->setScissorTest(true);           break;\r
-              case GL_STENCIL_TEST:             context->setStencilTest(true);           break;\r
-              case GL_DEPTH_TEST:               context->setDepthTest(true);             break;\r
-              case GL_BLEND:                    context->setBlend(true);                 break;\r
-              case GL_DITHER:                   context->setDither(true);                break;\r
-              default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+                               delete [] floatParams;\r
+                       }\r
+               }\r
+       }\r
 }\r
 \r
-void GL_APIENTRY glEnableVertexAttribArray(GLuint index)\r
+void GL_APIENTRY glGetProgramiv(GLuint program, GLenum pname, GLint* params)\r
 {\r
-    TRACE("(GLuint index = %d)", index);\r
-\r
-    try\r
-    {\r
-        if(index >= es2::MAX_VERTEX_ATTRIBS)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+       TRACE("(GLuint program = %d, GLenum pname = 0x%X, GLint* params = 0x%0.8p)", program, pname, params);\r
 \r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-            context->setEnableVertexAttribArray(index, true);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
-\r
-void GL_APIENTRY glEndQueryEXT(GLenum target)\r
-{\r
-    TRACE("GLenum target = 0x%X)", target);\r
-\r
-    try\r
-    {\r
-        switch(target)\r
-        {\r
-        case GL_ANY_SAMPLES_PASSED_EXT:\r
-        case GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT:\r
-            break;\r
-        default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
+       if(context)\r
+       {\r
+               es2::Program *programObject = context->getProgram(program);\r
 \r
-        es2::Context *context = es2::getContext();\r
+               if(!programObject)\r
+               {\r
+                       return error(GL_INVALID_VALUE);\r
+               }\r
 \r
-        if(context)\r
-        {\r
-            context->endQuery(target);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+               switch(pname)\r
+               {\r
+               case GL_DELETE_STATUS:\r
+                       *params = programObject->isFlaggedForDeletion();\r
+                       return;\r
+               case GL_LINK_STATUS:\r
+                       *params = programObject->isLinked();\r
+                       return;\r
+               case GL_VALIDATE_STATUS:\r
+                       *params = programObject->isValidated();\r
+                       return;\r
+               case GL_INFO_LOG_LENGTH:\r
+                       *params = programObject->getInfoLogLength();\r
+                       return;\r
+               case GL_ATTACHED_SHADERS:\r
+                       *params = programObject->getAttachedShadersCount();\r
+                       return;\r
+               case GL_ACTIVE_ATTRIBUTES:\r
+                       *params = programObject->getActiveAttributeCount();\r
+                       return;\r
+               case GL_ACTIVE_ATTRIBUTE_MAX_LENGTH:\r
+                       *params = programObject->getActiveAttributeMaxLength();\r
+                       return;\r
+               case GL_ACTIVE_UNIFORMS:\r
+                       *params = programObject->getActiveUniformCount();\r
+                       return;\r
+               case GL_ACTIVE_UNIFORM_MAX_LENGTH:\r
+                       *params = programObject->getActiveUniformMaxLength();\r
+                       return;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+       }\r
 }\r
 \r
-void GL_APIENTRY glFinishFenceNV(GLuint fence)\r
+void GL_APIENTRY glGetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog)\r
 {\r
-    TRACE("(GLuint fence = %d)", fence);\r
-\r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            es2::Fence* fenceObject = context->getFence(fence);\r
+       TRACE("(GLuint program = %d, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, GLchar* infolog = 0x%0.8p)",\r
+             program, bufsize, length, infolog);\r
 \r
-            if(fenceObject == NULL)\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
+       if(bufsize < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-            fenceObject->finishFence();\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+       es2::Context *context = es2::getContext();\r
 \r
-void GL_APIENTRY glFinish(void)\r
-{\r
-    TRACE("()");\r
+       if(context)\r
+       {\r
+               es2::Program *programObject = context->getProgram(program);\r
 \r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
+               if(!programObject)\r
+               {\r
+                       return error(GL_INVALID_VALUE);\r
+               }\r
 \r
-        if(context)\r
-        {\r
-            context->finish();\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+               programObject->getInfoLog(bufsize, length, infolog);\r
+       }\r
 }\r
 \r
-void GL_APIENTRY glFlush(void)\r
+void GL_APIENTRY glGetQueryivEXT(GLenum target, GLenum pname, GLint *params)\r
 {\r
-    TRACE("()");\r
+       TRACE("GLenum target = 0x%X, GLenum pname = 0x%X, GLint *params = 0x%0.8p)", target, pname, params);\r
 \r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
+       switch(pname)\r
+       {\r
+       case GL_CURRENT_QUERY_EXT:\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
 \r
-        if(context)\r
-        {\r
-            context->flush();\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+       es2::Context *context = es2::getContext();\r
 \r
-void GL_APIENTRY glFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)\r
-{\r
-    TRACE("(GLenum target = 0x%X, GLenum attachment = 0x%X, GLenum renderbuffertarget = 0x%X, "\r
-          "GLuint renderbuffer = %d)", target, attachment, renderbuffertarget, renderbuffer);\r
-\r
-    try\r
-    {\r
-        if((target != GL_FRAMEBUFFER && target != GL_DRAW_FRAMEBUFFER_ANGLE && target != GL_READ_FRAMEBUFFER_ANGLE)\r
-            || (renderbuffertarget != GL_RENDERBUFFER && renderbuffer != 0))\r
-        {\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            es2::Framebuffer *framebuffer = NULL;\r
-            GLuint framebufferHandle = 0;\r
-            if(target == GL_READ_FRAMEBUFFER_ANGLE)\r
-            {\r
-                framebuffer = context->getReadFramebuffer();\r
-                framebufferHandle = context->getReadFramebufferHandle();\r
-            }\r
-            else\r
-            {\r
-                framebuffer = context->getDrawFramebuffer();\r
-                framebufferHandle = context->getDrawFramebufferHandle();\r
-            }\r
-\r
-            if(!framebuffer || (framebufferHandle == 0 && renderbuffer != 0))\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-\r
-            switch(attachment)\r
-            {\r
-              case GL_COLOR_ATTACHMENT0:\r
-                framebuffer->setColorbuffer(GL_RENDERBUFFER, renderbuffer);\r
-                break;\r
-              case GL_DEPTH_ATTACHMENT:\r
-                framebuffer->setDepthbuffer(GL_RENDERBUFFER, renderbuffer);\r
-                break;\r
-              case GL_STENCIL_ATTACHMENT:\r
-                framebuffer->setStencilbuffer(GL_RENDERBUFFER, renderbuffer);\r
-                break;\r
-              default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               params[0] = context->getActiveQuery(target);\r
+       }\r
 }\r
 \r
-void GL_APIENTRY glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)\r
+void GL_APIENTRY glGetQueryObjectuivEXT(GLuint id, GLenum pname, GLuint *params)\r
 {\r
-    TRACE("(GLenum target = 0x%X, GLenum attachment = 0x%X, GLenum textarget = 0x%X, "\r
-          "GLuint texture = %d, GLint level = %d)", target, attachment, textarget, texture, level);\r
-\r
-    try\r
-    {\r
-        if(target != GL_FRAMEBUFFER && target != GL_DRAW_FRAMEBUFFER_ANGLE && target != GL_READ_FRAMEBUFFER_ANGLE)\r
-        {\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        switch(attachment)\r
-        {\r
-          case GL_COLOR_ATTACHMENT0:\r
-          case GL_DEPTH_ATTACHMENT:\r
-          case GL_STENCIL_ATTACHMENT:\r
-            break;\r
-          default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            if(texture == 0)\r
-            {\r
-                textarget = GL_NONE;\r
-            }\r
-            else\r
-            {\r
-                es2::Texture *tex = context->getTexture(texture);\r
-\r
-                if(tex == NULL)\r
-                {\r
-                    return error(GL_INVALID_OPERATION);\r
-                }\r
-\r
-                if(tex->isCompressed(textarget, level))\r
-                {\r
-                    return error(GL_INVALID_OPERATION);\r
-                }\r
-\r
-                switch(textarget)\r
-                {\r
-                  case GL_TEXTURE_2D:\r
-                    if(tex->getTarget() != GL_TEXTURE_2D)\r
-                    {\r
-                        return error(GL_INVALID_OPERATION);\r
-                    }\r
-                    break;\r
-\r
-                  case GL_TEXTURE_CUBE_MAP_POSITIVE_X:\r
-                  case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:\r
-                  case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:\r
-                  case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:\r
-                  case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:\r
-                  case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:\r
-                    if(tex->getTarget() != GL_TEXTURE_CUBE_MAP)\r
-                    {\r
-                        return error(GL_INVALID_OPERATION);\r
-                    }\r
-                    break;\r
-\r
-                  default:\r
-                    return error(GL_INVALID_ENUM);\r
-                }\r
-\r
-                if(level != 0)\r
-                {\r
-                    return error(GL_INVALID_VALUE);\r
-                }\r
-            }\r
-\r
-            es2::Framebuffer *framebuffer = NULL;\r
-            GLuint framebufferHandle = 0;\r
-            if(target == GL_READ_FRAMEBUFFER_ANGLE)\r
-            {\r
-                framebuffer = context->getReadFramebuffer();\r
-                framebufferHandle = context->getReadFramebufferHandle();\r
-            }\r
-            else\r
-            {\r
-                framebuffer = context->getDrawFramebuffer();\r
-                framebufferHandle = context->getDrawFramebufferHandle();\r
-            }\r
-\r
-            if(framebufferHandle == 0 || !framebuffer)\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-\r
-            switch(attachment)\r
-            {\r
-              case GL_COLOR_ATTACHMENT0:  framebuffer->setColorbuffer(textarget, texture);   break;\r
-              case GL_DEPTH_ATTACHMENT:   framebuffer->setDepthbuffer(textarget, texture);   break;\r
-              case GL_STENCIL_ATTACHMENT: framebuffer->setStencilbuffer(textarget, texture); break;\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+       TRACE("(GLuint id = %d, GLenum pname = 0x%X, GLuint *params = 0x%0.8p)", id, pname, params);\r
 \r
-void GL_APIENTRY glFrontFace(GLenum mode)\r
-{\r
-    TRACE("(GLenum mode = 0x%X)", mode);\r
-\r
-    try\r
-    {\r
-        switch(mode)\r
-        {\r
-          case GL_CW:\r
-          case GL_CCW:\r
-            {\r
-                es2::Context *context = es2::getContext();\r
-\r
-                if(context)\r
-                {\r
-                    context->setFrontFace(mode);\r
-                }\r
-            }\r
-            break;\r
-          default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+       switch(pname)\r
+       {\r
+       case GL_QUERY_RESULT_EXT:\r
+       case GL_QUERY_RESULT_AVAILABLE_EXT:\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
 \r
-void GL_APIENTRY glGenBuffers(GLsizei n, GLuint* buffers)\r
-{\r
-    TRACE("(GLsizei n = %d, GLuint* buffers = 0x%0.8p)", n, buffers);\r
+       es2::Context *context = es2::getContext();\r
 \r
-    try\r
-    {\r
-        if(n < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+       if(context)\r
+       {\r
+               es2::Query *queryObject = context->getQuery(id, false, GL_NONE);\r
 \r
-        es2::Context *context = es2::getContext();\r
+               if(!queryObject)\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
 \r
-        if(context)\r
-        {\r
-            for(int i = 0; i < n; i++)\r
-            {\r
-                buffers[i] = context->createBuffer();\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+               if(context->getActiveQuery(queryObject->getType()) == id)\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
 \r
-void GL_APIENTRY glGenerateMipmap(GLenum target)\r
-{\r
-    TRACE("(GLenum target = 0x%X)", target);\r
-\r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            es2::Texture *texture;\r
-\r
-            switch(target)\r
-            {\r
-              case GL_TEXTURE_2D:\r
-                texture = context->getTexture2D();\r
-                break;\r
-              case GL_TEXTURE_CUBE_MAP:\r
-                texture = context->getTextureCubeMap();\r
-                break;\r
-              default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-\r
-            if(texture->isCompressed(target, 0) || texture->isDepth(target, 0))\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-\r
-            texture->generateMipmaps();\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+               switch(pname)\r
+               {\r
+               case GL_QUERY_RESULT_EXT:\r
+                       params[0] = queryObject->getResult();\r
+                       break;\r
+               case GL_QUERY_RESULT_AVAILABLE_EXT:\r
+                       params[0] = queryObject->isResultAvailable();\r
+                       break;\r
+               default:\r
+                       ASSERT(false);\r
+               }\r
+       }\r
 }\r
 \r
-void GL_APIENTRY glGenFencesNV(GLsizei n, GLuint* fences)\r
+void GL_APIENTRY glGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* params)\r
 {\r
-    TRACE("(GLsizei n = %d, GLuint* fences = 0x%0.8p)", n, fences);\r
-\r
-    try\r
-    {\r
-        if(n < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        es2::Context *context = es2::getContext();\r
+       TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint* params = 0x%0.8p)", target, pname, params);\r
 \r
-        if(context)\r
-        {\r
-            for(int i = 0; i < n; i++)\r
-            {\r
-                fences[i] = context->createFence();\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+       es2::Context *context = es2::getContext();\r
 \r
-void GL_APIENTRY glGenFramebuffers(GLsizei n, GLuint* framebuffers)\r
-{\r
-    TRACE("(GLsizei n = %d, GLuint* framebuffers = 0x%0.8p)", n, framebuffers);\r
+       if(context)\r
+       {\r
+               if(target != GL_RENDERBUFFER)\r
+               {\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
 \r
-    try\r
-    {\r
-        if(n < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+               if(context->getRenderbufferHandle() == 0)\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
 \r
-        es2::Context *context = es2::getContext();\r
+               es2::Renderbuffer *renderbuffer = context->getRenderbuffer(context->getRenderbufferHandle());\r
 \r
-        if(context)\r
-        {\r
-            for(int i = 0; i < n; i++)\r
-            {\r
-                framebuffers[i] = context->createFramebuffer();\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+               switch(pname)\r
+               {\r
+               case GL_RENDERBUFFER_WIDTH:           *params = renderbuffer->getWidth();       break;\r
+               case GL_RENDERBUFFER_HEIGHT:          *params = renderbuffer->getHeight();      break;\r
+               case GL_RENDERBUFFER_INTERNAL_FORMAT: *params = renderbuffer->getFormat();      break;\r
+               case GL_RENDERBUFFER_RED_SIZE:        *params = renderbuffer->getRedSize();     break;\r
+               case GL_RENDERBUFFER_GREEN_SIZE:      *params = renderbuffer->getGreenSize();   break;\r
+               case GL_RENDERBUFFER_BLUE_SIZE:       *params = renderbuffer->getBlueSize();    break;\r
+               case GL_RENDERBUFFER_ALPHA_SIZE:      *params = renderbuffer->getAlphaSize();   break;\r
+               case GL_RENDERBUFFER_DEPTH_SIZE:      *params = renderbuffer->getDepthSize();   break;\r
+               case GL_RENDERBUFFER_STENCIL_SIZE:    *params = renderbuffer->getStencilSize(); break;\r
+               case GL_RENDERBUFFER_SAMPLES_ANGLE:   *params = renderbuffer->getSamples();     break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+       }\r
 }\r
 \r
-void GL_APIENTRY glGenQueriesEXT(GLsizei n, GLuint* ids)\r
+void GL_APIENTRY glGetShaderiv(GLuint shader, GLenum pname, GLint* params)\r
 {\r
-    TRACE("(GLsizei n = %d, GLuint* ids = 0x%0.8p)", n, ids);\r
-\r
-    try\r
-    {\r
-        if(n < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        es2::Context *context = es2::getContext();\r
+       TRACE("(GLuint shader = %d, GLenum pname = %d, GLint* params = 0x%0.8p)", shader, pname, params);\r
 \r
-        if(context)\r
-        {\r
-            for(int i = 0; i < n; i++)\r
-            {\r
-                ids[i] = context->createQuery();\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
-\r
-void GL_APIENTRY glGenRenderbuffers(GLsizei n, GLuint* renderbuffers)\r
-{\r
-    TRACE("(GLsizei n = %d, GLuint* renderbuffers = 0x%0.8p)", n, renderbuffers);\r
+       es2::Context *context = es2::getContext();\r
 \r
-    try\r
-    {\r
-        if(n < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+       if(context)\r
+       {\r
+               es2::Shader *shaderObject = context->getShader(shader);\r
 \r
-        es2::Context *context = es2::getContext();\r
+               if(!shaderObject)\r
+               {\r
+                       return error(GL_INVALID_VALUE);\r
+               }\r
 \r
-        if(context)\r
-        {\r
-            for(int i = 0; i < n; i++)\r
-            {\r
-                renderbuffers[i] = context->createRenderbuffer();\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+               switch(pname)\r
+               {\r
+               case GL_SHADER_TYPE:\r
+                       *params = shaderObject->getType();\r
+                       return;\r
+               case GL_DELETE_STATUS:\r
+                       *params = shaderObject->isFlaggedForDeletion();\r
+                       return;\r
+               case GL_COMPILE_STATUS:\r
+                       *params = shaderObject->isCompiled() ? GL_TRUE : GL_FALSE;\r
+                       return;\r
+               case GL_INFO_LOG_LENGTH:\r
+                       *params = shaderObject->getInfoLogLength();\r
+                       return;\r
+               case GL_SHADER_SOURCE_LENGTH:\r
+                       *params = shaderObject->getSourceLength();\r
+                       return;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+       }\r
 }\r
 \r
-void GL_APIENTRY glGenTextures(GLsizei n, GLuint* textures)\r
+void GL_APIENTRY glGetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog)\r
 {\r
-    TRACE("(GLsizei n = %d, GLuint* textures = 0x%0.8p)", n, textures);\r
-\r
-    try\r
-    {\r
-        if(n < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+       TRACE("(GLuint shader = %d, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, GLchar* infolog = 0x%0.8p)",\r
+             shader, bufsize, length, infolog);\r
 \r
-        es2::Context *context = es2::getContext();\r
+       if(bufsize < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-        if(context)\r
-        {\r
-            for(int i = 0; i < n; i++)\r
-            {\r
-                textures[i] = context->createTexture();\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+       es2::Context *context = es2::getContext();\r
 \r
-void GL_APIENTRY glGetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, GLchar *name)\r
-{\r
-    TRACE("(GLuint program = %d, GLuint index = %d, GLsizei bufsize = %d, GLsizei *length = 0x%0.8p, "\r
-          "GLint *size = 0x%0.8p, GLenum *type = %0.8p, GLchar *name = %0.8p)",\r
-          program, index, bufsize, length, size, type, name);\r
-\r
-    try\r
-    {\r
-        if(bufsize < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            es2::Program *programObject = context->getProgram(program);\r
-\r
-            if(!programObject)\r
-            {\r
-                if(context->getShader(program))\r
-                {\r
-                    return error(GL_INVALID_OPERATION);\r
-                }\r
-                else\r
-                {\r
-                    return error(GL_INVALID_VALUE);\r
-                }\r
-            }\r
-\r
-            if(index >= (GLuint)programObject->getActiveAttributeCount())\r
-            {\r
-                return error(GL_INVALID_VALUE);\r
-            }\r
-\r
-            programObject->getActiveAttribute(index, bufsize, length, size, type, name);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+       if(context)\r
+       {\r
+               es2::Shader *shaderObject = context->getShader(shader);\r
 \r
-void GL_APIENTRY glGetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name)\r
-{\r
-    TRACE("(GLuint program = %d, GLuint index = %d, GLsizei bufsize = %d, "\r
-          "GLsizei* length = 0x%0.8p, GLint* size = 0x%0.8p, GLenum* type = 0x%0.8p, GLchar* name = %s)",\r
-          program, index, bufsize, length, size, type, name);\r
-\r
-    try\r
-    {\r
-        if(bufsize < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            es2::Program *programObject = context->getProgram(program);\r
-\r
-            if(!programObject)\r
-            {\r
-                if(context->getShader(program))\r
-                {\r
-                    return error(GL_INVALID_OPERATION);\r
-                }\r
-                else\r
-                {\r
-                    return error(GL_INVALID_VALUE);\r
-                }\r
-            }\r
-\r
-            if(index >= (GLuint)programObject->getActiveUniformCount())\r
-            {\r
-                return error(GL_INVALID_VALUE);\r
-            }\r
-\r
-            programObject->getActiveUniform(index, bufsize, length, size, type, name);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+               if(!shaderObject)\r
+               {\r
+                       return error(GL_INVALID_VALUE);\r
+               }\r
 \r
-void GL_APIENTRY glGetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders)\r
-{\r
-    TRACE("(GLuint program = %d, GLsizei maxcount = %d, GLsizei* count = 0x%0.8p, GLuint* shaders = 0x%0.8p)",\r
-          program, maxcount, count, shaders);\r
-\r
-    try\r
-    {\r
-        if(maxcount < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            es2::Program *programObject = context->getProgram(program);\r
-\r
-            if(!programObject)\r
-            {\r
-                if(context->getShader(program))\r
-                {\r
-                    return error(GL_INVALID_OPERATION);\r
-                }\r
-                else\r
-                {\r
-                    return error(GL_INVALID_VALUE);\r
-                }\r
-            }\r
-\r
-            return programObject->getAttachedShaders(maxcount, count, shaders);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+               shaderObject->getInfoLog(bufsize, length, infolog);\r
+       }\r
 }\r
 \r
-int GL_APIENTRY glGetAttribLocation(GLuint program, const GLchar* name)\r
+void GL_APIENTRY glGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision)\r
 {\r
-    TRACE("(GLuint program = %d, const GLchar* name = %s)", program, name);\r
+       TRACE("(GLenum shadertype = 0x%X, GLenum precisiontype = 0x%X, GLint* range = 0x%0.8p, GLint* precision = 0x%0.8p)",\r
+             shadertype, precisiontype, range, precision);\r
 \r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-\r
-            es2::Program *programObject = context->getProgram(program);\r
-\r
-            if(!programObject)\r
-            {\r
-                if(context->getShader(program))\r
-                {\r
-                    return error(GL_INVALID_OPERATION, -1);\r
-                }\r
-                else\r
-                {\r
-                    return error(GL_INVALID_VALUE, -1);\r
-                }\r
-            }\r
-\r
-            if(!programObject->isLinked())\r
-            {\r
-                return error(GL_INVALID_OPERATION, -1);\r
-            }\r
-\r
-            return programObject->getAttributeLocation(name);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY, -1);\r
-    }\r
+       switch(shadertype)\r
+       {\r
+       case GL_VERTEX_SHADER:\r
+       case GL_FRAGMENT_SHADER:\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
 \r
-    return -1;\r
+       switch(precisiontype)\r
+       {\r
+       case GL_LOW_FLOAT:\r
+       case GL_MEDIUM_FLOAT:\r
+       case GL_HIGH_FLOAT:\r
+               // IEEE 754 single-precision\r
+               range[0] = 127;\r
+               range[1] = 127;\r
+               *precision = 23;\r
+               break;\r
+       case GL_LOW_INT:\r
+       case GL_MEDIUM_INT:\r
+       case GL_HIGH_INT:\r
+               // Single-precision floating-point numbers can accurately represent integers up to +/-16777216\r
+               range[0] = 24;\r
+               range[1] = 24;\r
+               *precision = 0;\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
 }\r
 \r
-void GL_APIENTRY glGetBooleanv(GLenum pname, GLboolean* params)\r
+void GL_APIENTRY glGetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source)\r
 {\r
-    TRACE("(GLenum pname = 0x%X, GLboolean* params = 0x%0.8p)",  pname, params);\r
-\r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            if(!(context->getBooleanv(pname, params)))\r
-            {\r
-                GLenum nativeType;\r
-                unsigned int numParams = 0;\r
-                if(!context->getQueryParameterInfo(pname, &nativeType, &numParams))\r
-                    return error(GL_INVALID_ENUM);\r
-\r
-                if(numParams == 0)\r
-                    return; // it is known that the pname is valid, but there are no parameters to return\r
-\r
-                if(nativeType == GL_FLOAT)\r
-                {\r
-                    GLfloat *floatParams = NULL;\r
-                    floatParams = new GLfloat[numParams];\r
-\r
-                    context->getFloatv(pname, floatParams);\r
-\r
-                    for(unsigned int i = 0; i < numParams; ++i)\r
-                    {\r
-                        if(floatParams[i] == 0.0f)\r
-                            params[i] = GL_FALSE;\r
-                        else\r
-                            params[i] = GL_TRUE;\r
-                    }\r
-\r
-                    delete [] floatParams;\r
-                }\r
-                else if(nativeType == GL_INT)\r
-                {\r
-                    GLint *intParams = NULL;\r
-                    intParams = new GLint[numParams];\r
-\r
-                    context->getIntegerv(pname, intParams);\r
-\r
-                    for(unsigned int i = 0; i < numParams; ++i)\r
-                    {\r
-                        if(intParams[i] == 0)\r
-                            params[i] = GL_FALSE;\r
-                        else\r
-                            params[i] = GL_TRUE;\r
-                    }\r
-\r
-                    delete [] intParams;\r
-                }\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+       TRACE("(GLuint shader = %d, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, GLchar* source = 0x%0.8p)",\r
+             shader, bufsize, length, source);\r
 \r
-void GL_APIENTRY glGetBufferParameteriv(GLenum target, GLenum pname, GLint* params)\r
-{\r
-    TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint* params = 0x%0.8p)", target, pname, params);\r
-\r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            es2::Buffer *buffer;\r
-\r
-            switch(target)\r
-            {\r
-              case GL_ARRAY_BUFFER:\r
-                buffer = context->getArrayBuffer();\r
-                break;\r
-              case GL_ELEMENT_ARRAY_BUFFER:\r
-                buffer = context->getElementArrayBuffer();\r
-                break;\r
-              default: return error(GL_INVALID_ENUM);\r
-            }\r
-\r
-            if(!buffer)\r
-            {\r
-                // A null buffer means that "0" is bound to the requested buffer target\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-\r
-            switch(pname)\r
-            {\r
-              case GL_BUFFER_USAGE:\r
-                *params = buffer->usage();\r
-                break;\r
-              case GL_BUFFER_SIZE:\r
-                *params = buffer->size();\r
-                break;\r
-              default: return error(GL_INVALID_ENUM);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+       if(bufsize < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-GLenum GL_APIENTRY glGetError(void)\r
-{\r
-    TRACE("()");\r
+       es2::Context *context = es2::getContext();\r
 \r
-    es2::Context *context = es2::getContext();\r
+       if(context)\r
+       {\r
+               es2::Shader *shaderObject = context->getShader(shader);\r
 \r
-    if(context)\r
-    {\r
-        return context->getError();\r
-    }\r
+               if(!shaderObject)\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
 \r
-    return GL_NO_ERROR;\r
+               shaderObject->getSource(bufsize, length, source);\r
+       }\r
 }\r
 \r
-void GL_APIENTRY glGetFenceivNV(GLuint fence, GLenum pname, GLint *params)\r
+const GLubyte* GL_APIENTRY glGetString(GLenum name)\r
 {\r
-    TRACE("(GLuint fence = %d, GLenum pname = 0x%X, GLint *params = 0x%0.8p)", fence, pname, params);\r
-\r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            es2::Fence *fenceObject = context->getFence(fence);\r
+       TRACE("(GLenum name = 0x%X)", name);\r
 \r
-            if(fenceObject == NULL)\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
+       es2::Context *context = es2::getContext();\r
 \r
-            fenceObject->getFenceiv(pname, params);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
-\r
-void GL_APIENTRY glGetFloatv(GLenum pname, GLfloat* params)\r
-{\r
-    TRACE("(GLenum pname = 0x%X, GLfloat* params = 0x%0.8p)", pname, params);\r
-\r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            if(!(context->getFloatv(pname, params)))\r
-            {\r
-                GLenum nativeType;\r
-                unsigned int numParams = 0;\r
-                if(!context->getQueryParameterInfo(pname, &nativeType, &numParams))\r
-                    return error(GL_INVALID_ENUM);\r
-\r
-                if(numParams == 0)\r
-                    return; // it is known that the pname is valid, but that there are no parameters to return.\r
-\r
-                if(nativeType == GL_BOOL)\r
-                {\r
-                    GLboolean *boolParams = NULL;\r
-                    boolParams = new GLboolean[numParams];\r
-\r
-                    context->getBooleanv(pname, boolParams);\r
-\r
-                    for(unsigned int i = 0; i < numParams; ++i)\r
-                    {\r
-                        if(boolParams[i] == GL_FALSE)\r
-                            params[i] = 0.0f;\r
-                        else\r
-                            params[i] = 1.0f;\r
-                    }\r
-\r
-                    delete [] boolParams;\r
-                }\r
-                else if(nativeType == GL_INT)\r
-                {\r
-                    GLint *intParams = NULL;\r
-                    intParams = new GLint[numParams];\r
-\r
-                    context->getIntegerv(pname, intParams);\r
-\r
-                    for(unsigned int i = 0; i < numParams; ++i)\r
-                    {\r
-                        params[i] = (GLfloat)intParams[i];\r
-                    }\r
-\r
-                    delete [] intParams;\r
-                }\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       switch(name)\r
+       {\r
+       case GL_VENDOR:\r
+               return (GLubyte*)"TransGaming Inc.";\r
+       case GL_RENDERER:\r
+               return (GLubyte*)"SwiftShader";\r
+       case GL_VERSION:\r
+               return (GLubyte*)"OpenGL ES 2.0 SwiftShader " VERSION_STRING;\r
+       case GL_SHADING_LANGUAGE_VERSION:\r
+               return (GLubyte*)"OpenGL ES GLSL ES 1.00 SwiftShader " VERSION_STRING;\r
+       case GL_EXTENSIONS:\r
+               // Keep list sorted in following order:\r
+               // OES extensions\r
+               // EXT extensions\r
+               // Vendor extensions\r
+               return (GLubyte*)\r
+                       "GL_OES_depth_texture "\r
+                       "GL_OES_depth_texture_cube_map "\r
+                       "GL_OES_EGL_image "\r
+                       "GL_OES_EGL_image_external "\r
+                       "GL_OES_element_index_uint "\r
+                       "GL_OES_packed_depth_stencil "\r
+                       "GL_OES_rgb8_rgba8 "\r
+                       "GL_OES_standard_derivatives "\r
+                       "GL_OES_texture_float "\r
+                       "GL_OES_texture_float_linear "\r
+                       "GL_OES_texture_half_float "\r
+                       "GL_OES_texture_half_float_linear "\r
+                       "GL_OES_texture_npot "\r
+                       "GL_EXT_blend_minmax "\r
+                       "GL_EXT_occlusion_query_boolean "\r
+                       "GL_EXT_read_format_bgra "\r
+                               #if (S3TC_SUPPORT)\r
+                       "GL_EXT_texture_compression_dxt1 "\r
+                       "GL_ANGLE_texture_compression_dxt3 "\r
+                       "GL_ANGLE_texture_compression_dxt5 "\r
+                               #endif\r
+                       "GL_EXT_texture_filter_anisotropic "\r
+                       "GL_EXT_texture_format_BGRA8888 "\r
+                       "GL_ANGLE_framebuffer_blit "\r
+                       "GL_ANGLE_framebuffer_multisample "\r
+                       "GL_NV_fence";\r
+       default:\r
+               return error(GL_INVALID_ENUM, (GLubyte*)NULL);\r
+       }\r
 }\r
 \r
-void GL_APIENTRY glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint* params)\r
+void GL_APIENTRY glGetTexParameterfv(GLenum target, GLenum pname, GLfloat* params)\r
 {\r
-    TRACE("(GLenum target = 0x%X, GLenum attachment = 0x%X, GLenum pname = 0x%X, GLint* params = 0x%0.8p)",\r
-          target, attachment, pname, params);\r
-\r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            if(target != GL_FRAMEBUFFER && target != GL_DRAW_FRAMEBUFFER_ANGLE && target != GL_READ_FRAMEBUFFER_ANGLE)\r
-            {\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-\r
-            es2::Framebuffer *framebuffer = NULL;\r
-            if(target == GL_READ_FRAMEBUFFER_ANGLE)\r
-            {\r
-                if(context->getReadFramebufferHandle() == 0)\r
-                {\r
-                    return error(GL_INVALID_OPERATION);\r
-                }\r
-\r
-                framebuffer = context->getReadFramebuffer();\r
-            }\r
-            else\r
-            {\r
-                if(context->getDrawFramebufferHandle() == 0)\r
-                {\r
-                    return error(GL_INVALID_OPERATION);\r
-                }\r
-\r
-                framebuffer = context->getDrawFramebuffer();\r
-            }\r
-\r
-            GLenum attachmentType;\r
-            GLuint attachmentHandle;\r
-            switch(attachment)\r
-            {\r
-              case GL_COLOR_ATTACHMENT0:\r
-                attachmentType = framebuffer->getColorbufferType();\r
-                attachmentHandle = framebuffer->getColorbufferHandle();\r
-                break;\r
-              case GL_DEPTH_ATTACHMENT:\r
-                attachmentType = framebuffer->getDepthbufferType();\r
-                attachmentHandle = framebuffer->getDepthbufferHandle();\r
-                break;\r
-              case GL_STENCIL_ATTACHMENT:\r
-                attachmentType = framebuffer->getStencilbufferType();\r
-                attachmentHandle = framebuffer->getStencilbufferHandle();\r
-                break;\r
-              default: return error(GL_INVALID_ENUM);\r
-            }\r
-\r
-            GLenum attachmentObjectType;   // Type category\r
-            if(attachmentType == GL_NONE || attachmentType == GL_RENDERBUFFER)\r
-            {\r
-                attachmentObjectType = attachmentType;\r
-            }\r
-            else if(es2::IsTextureTarget(attachmentType))\r
-            {\r
-                attachmentObjectType = GL_TEXTURE;\r
-            }\r
-            else UNREACHABLE();\r
-\r
-            switch(pname)\r
-            {\r
-              case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE:\r
-                *params = attachmentObjectType;\r
-                break;\r
-              case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME:\r
-                if(attachmentObjectType == GL_RENDERBUFFER || attachmentObjectType == GL_TEXTURE)\r
-                {\r
-                    *params = attachmentHandle;\r
-                }\r
-                else\r
-                {\r
-                    return error(GL_INVALID_ENUM);\r
-                }\r
-                break;\r
-              case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL:\r
-                if(attachmentObjectType == GL_TEXTURE)\r
-                {\r
-                    *params = 0; // FramebufferTexture2D will not allow level to be set to anything else in GL ES 2.0\r
-                }\r
-                else\r
-                {\r
-                    return error(GL_INVALID_ENUM);\r
-                }\r
-                break;\r
-              case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE:\r
-                if(attachmentObjectType == GL_TEXTURE)\r
-                {\r
-                    if(es2::IsCubemapTextureTarget(attachmentType))\r
-                    {\r
-                        *params = attachmentType;\r
-                    }\r
-                    else\r
-                    {\r
-                        *params = 0;\r
-                    }\r
-                }\r
-                else\r
-                {\r
-                    return error(GL_INVALID_ENUM);\r
-                }\r
-                break;\r
-              default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+       TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLfloat* params = 0x%0.8p)", target, pname, params);\r
 \r
-GLenum GL_APIENTRY glGetGraphicsResetStatusEXT(void)\r
-{\r
-    TRACE("()");\r
+       es2::Context *context = es2::getContext();\r
 \r
-    return GL_NO_ERROR;\r
-}\r
+       if(context)\r
+       {\r
+               es2::Texture *texture;\r
 \r
-void GL_APIENTRY glGetIntegerv(GLenum pname, GLint* params)\r
-{\r
-    TRACE("(GLenum pname = 0x%X, GLint* params = 0x%0.8p)", pname, params);\r
-\r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            if(!(context->getIntegerv(pname, params)))\r
-            {\r
-                GLenum nativeType;\r
-                unsigned int numParams = 0;\r
-                if(!context->getQueryParameterInfo(pname, &nativeType, &numParams))\r
-                    return error(GL_INVALID_ENUM);\r
-\r
-                if(numParams == 0)\r
-                    return; // it is known that pname is valid, but there are no parameters to return\r
-\r
-                if(nativeType == GL_BOOL)\r
-                {\r
-                    GLboolean *boolParams = NULL;\r
-                    boolParams = new GLboolean[numParams];\r
-\r
-                    context->getBooleanv(pname, boolParams);\r
-\r
-                    for(unsigned int i = 0; i < numParams; ++i)\r
-                    {\r
-                        if(boolParams[i] == GL_FALSE)\r
-                            params[i] = 0;\r
-                        else\r
-                            params[i] = 1;\r
-                    }\r
-\r
-                    delete [] boolParams;\r
-                }\r
-                else if(nativeType == GL_FLOAT)\r
-                {\r
-                    GLfloat *floatParams = NULL;\r
-                    floatParams = new GLfloat[numParams];\r
-\r
-                    context->getFloatv(pname, floatParams);\r
-\r
-                    for(unsigned int i = 0; i < numParams; ++i)\r
-                    {\r
-                        if(pname == GL_DEPTH_RANGE || pname == GL_COLOR_CLEAR_VALUE || pname == GL_DEPTH_CLEAR_VALUE || pname == GL_BLEND_COLOR)\r
-                        {\r
-                            params[i] = (GLint)(((GLfloat)(0xFFFFFFFF) * floatParams[i] - 1.0f) / 2.0f);\r
-                        }\r
-                        else\r
-                            params[i] = (GLint)(floatParams[i] > 0.0f ? floor(floatParams[i] + 0.5) : ceil(floatParams[i] - 0.5));\r
-                    }\r
-\r
-                    delete [] floatParams;\r
-                }\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+               switch(target)\r
+               {\r
+               case GL_TEXTURE_2D:\r
+                       texture = context->getTexture2D();\r
+                       break;\r
+               case GL_TEXTURE_CUBE_MAP:\r
+                       texture = context->getTextureCubeMap();\r
+                       break;\r
+               case GL_TEXTURE_EXTERNAL_OES:\r
+                       texture = context->getTextureExternal();\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
 \r
-void GL_APIENTRY glGetProgramiv(GLuint program, GLenum pname, GLint* params)\r
-{\r
-    TRACE("(GLuint program = %d, GLenum pname = 0x%X, GLint* params = 0x%0.8p)", program, pname, params);\r
-\r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            es2::Program *programObject = context->getProgram(program);\r
-\r
-            if(!programObject)\r
-            {\r
-                return error(GL_INVALID_VALUE);\r
-            }\r
-\r
-            switch(pname)\r
-            {\r
-              case GL_DELETE_STATUS:\r
-                *params = programObject->isFlaggedForDeletion();\r
-                return;\r
-              case GL_LINK_STATUS:\r
-                *params = programObject->isLinked();\r
-                return;\r
-              case GL_VALIDATE_STATUS:\r
-                *params = programObject->isValidated();\r
-                return;\r
-              case GL_INFO_LOG_LENGTH:\r
-                *params = programObject->getInfoLogLength();\r
-                return;\r
-              case GL_ATTACHED_SHADERS:\r
-                *params = programObject->getAttachedShadersCount();\r
-                return;\r
-              case GL_ACTIVE_ATTRIBUTES:\r
-                *params = programObject->getActiveAttributeCount();\r
-                return;\r
-              case GL_ACTIVE_ATTRIBUTE_MAX_LENGTH:\r
-                *params = programObject->getActiveAttributeMaxLength();\r
-                return;\r
-              case GL_ACTIVE_UNIFORMS:\r
-                *params = programObject->getActiveUniformCount();\r
-                return;\r
-              case GL_ACTIVE_UNIFORM_MAX_LENGTH:\r
-                *params = programObject->getActiveUniformMaxLength();\r
-                return;\r
-              default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+               switch(pname)\r
+               {\r
+               case GL_TEXTURE_MAG_FILTER:\r
+                       *params = (GLfloat)texture->getMagFilter();\r
+                       break;\r
+               case GL_TEXTURE_MIN_FILTER:\r
+                       *params = (GLfloat)texture->getMinFilter();\r
+                       break;\r
+               case GL_TEXTURE_WRAP_S:\r
+                       *params = (GLfloat)texture->getWrapS();\r
+                       break;\r
+               case GL_TEXTURE_WRAP_T:\r
+                       *params = (GLfloat)texture->getWrapT();\r
+                       break;\r
+               case GL_TEXTURE_MAX_ANISOTROPY_EXT:\r
+                       *params = texture->getMaxAnisotropy();\r
+                       break;\r
+               case GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES:\r
+                       *params = (GLfloat)1;\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+       }\r
 }\r
 \r
-void GL_APIENTRY glGetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog)\r
+void GL_APIENTRY glGetTexParameteriv(GLenum target, GLenum pname, GLint* params)\r
 {\r
-    TRACE("(GLuint program = %d, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, GLchar* infolog = 0x%0.8p)",\r
-          program, bufsize, length, infolog);\r
-\r
-    try\r
-    {\r
-        if(bufsize < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+       TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint* params = 0x%0.8p)", target, pname, params);\r
 \r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-            es2::Program *programObject = context->getProgram(program);\r
+       if(context)\r
+       {\r
+               es2::Texture *texture;\r
 \r
-            if(!programObject)\r
-            {\r
-                return error(GL_INVALID_VALUE);\r
-            }\r
+               switch(target)\r
+               {\r
+               case GL_TEXTURE_2D:\r
+                       texture = context->getTexture2D();\r
+                       break;\r
+               case GL_TEXTURE_CUBE_MAP:\r
+                       texture = context->getTextureCubeMap();\r
+                       break;\r
+               case GL_TEXTURE_EXTERNAL_OES:\r
+                       texture = context->getTextureExternal();\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
 \r
-            programObject->getInfoLog(bufsize, length, infolog);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+               switch(pname)\r
+               {\r
+               case GL_TEXTURE_MAG_FILTER:\r
+                       *params = texture->getMagFilter();\r
+                       break;\r
+               case GL_TEXTURE_MIN_FILTER:\r
+                       *params = texture->getMinFilter();\r
+                       break;\r
+               case GL_TEXTURE_WRAP_S:\r
+                       *params = texture->getWrapS();\r
+                       break;\r
+               case GL_TEXTURE_WRAP_T:\r
+                       *params = texture->getWrapT();\r
+                       break;\r
+               case GL_TEXTURE_MAX_ANISOTROPY_EXT:\r
+                       *params = (GLint)texture->getMaxAnisotropy();\r
+                       break;\r
+               case GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES:\r
+                       *params = 1;\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+       }\r
 }\r
 \r
-void GL_APIENTRY glGetQueryivEXT(GLenum target, GLenum pname, GLint *params)\r
+void GL_APIENTRY glGetnUniformfvEXT(GLuint program, GLint location, GLsizei bufSize, GLfloat* params)\r
 {\r
-    TRACE("GLenum target = 0x%X, GLenum pname = 0x%X, GLint *params = 0x%0.8p)", target, pname, params);\r
+       TRACE("(GLuint program = %d, GLint location = %d, GLsizei bufSize = %d, GLfloat* params = 0x%0.8p)",\r
+             program, location, bufSize, params);\r
 \r
-    try\r
-    {\r
-        switch(pname)\r
-        {\r
-        case GL_CURRENT_QUERY_EXT:\r
-            break;\r
-        default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
+       if(bufSize < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-            params[0] = context->getActiveQuery(target);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+       if(context)\r
+       {\r
+               if(program == 0)\r
+               {\r
+                       return error(GL_INVALID_VALUE);\r
+               }\r
 \r
-void GL_APIENTRY glGetQueryObjectuivEXT(GLuint id, GLenum pname, GLuint *params)\r
-{\r
-    TRACE("(GLuint id = %d, GLenum pname = 0x%X, GLuint *params = 0x%0.8p)", id, pname, params);\r
-\r
-    try\r
-    {\r
-        switch(pname)\r
-        {\r
-        case GL_QUERY_RESULT_EXT:\r
-        case GL_QUERY_RESULT_AVAILABLE_EXT:\r
-            break;\r
-        default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            es2::Query *queryObject = context->getQuery(id, false, GL_NONE);\r
-\r
-            if(!queryObject)\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-\r
-            if(context->getActiveQuery(queryObject->getType()) == id)\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-\r
-            switch(pname)\r
-            {\r
-            case GL_QUERY_RESULT_EXT:\r
-                params[0] = queryObject->getResult();\r
-                break;\r
-            case GL_QUERY_RESULT_AVAILABLE_EXT:\r
-                params[0] = queryObject->isResultAvailable();\r
-                break;\r
-            default:\r
-                ASSERT(false);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+               es2::Program *programObject = context->getProgram(program);\r
 \r
-void GL_APIENTRY glGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* params)\r
-{\r
-    TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint* params = 0x%0.8p)", target, pname, params);\r
-\r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            if(target != GL_RENDERBUFFER)\r
-            {\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-\r
-            if(context->getRenderbufferHandle() == 0)\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-\r
-            es2::Renderbuffer *renderbuffer = context->getRenderbuffer(context->getRenderbufferHandle());\r
-\r
-            switch(pname)\r
-            {\r
-            case GL_RENDERBUFFER_WIDTH:           *params = renderbuffer->getWidth();       break;\r
-            case GL_RENDERBUFFER_HEIGHT:          *params = renderbuffer->getHeight();      break;\r
-            case GL_RENDERBUFFER_INTERNAL_FORMAT: *params = renderbuffer->getFormat();      break;\r
-            case GL_RENDERBUFFER_RED_SIZE:        *params = renderbuffer->getRedSize();     break;\r
-            case GL_RENDERBUFFER_GREEN_SIZE:      *params = renderbuffer->getGreenSize();   break;\r
-            case GL_RENDERBUFFER_BLUE_SIZE:       *params = renderbuffer->getBlueSize();    break;\r
-            case GL_RENDERBUFFER_ALPHA_SIZE:      *params = renderbuffer->getAlphaSize();   break;\r
-            case GL_RENDERBUFFER_DEPTH_SIZE:      *params = renderbuffer->getDepthSize();   break;\r
-            case GL_RENDERBUFFER_STENCIL_SIZE:    *params = renderbuffer->getStencilSize(); break;\r
-            case GL_RENDERBUFFER_SAMPLES_ANGLE:   *params = renderbuffer->getSamples();     break;\r
-            default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+               if(!programObject || !programObject->isLinked())\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
 \r
-void GL_APIENTRY glGetShaderiv(GLuint shader, GLenum pname, GLint* params)\r
-{\r
-    TRACE("(GLuint shader = %d, GLenum pname = %d, GLint* params = 0x%0.8p)", shader, pname, params);\r
-\r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            es2::Shader *shaderObject = context->getShader(shader);\r
-\r
-            if(!shaderObject)\r
-            {\r
-                return error(GL_INVALID_VALUE);\r
-            }\r
-\r
-            switch(pname)\r
-            {\r
-              case GL_SHADER_TYPE:\r
-                *params = shaderObject->getType();\r
-                return;\r
-              case GL_DELETE_STATUS:\r
-                *params = shaderObject->isFlaggedForDeletion();\r
-                return;\r
-              case GL_COMPILE_STATUS:\r
-                *params = shaderObject->isCompiled() ? GL_TRUE : GL_FALSE;\r
-                return;\r
-              case GL_INFO_LOG_LENGTH:\r
-                *params = shaderObject->getInfoLogLength();\r
-                return;\r
-              case GL_SHADER_SOURCE_LENGTH:\r
-                *params = shaderObject->getSourceLength();\r
-                return;\r
-              default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+               if(!programObject->getUniformfv(location, &bufSize, params))\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
+       }\r
 }\r
 \r
-void GL_APIENTRY glGetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog)\r
+void GL_APIENTRY glGetUniformfv(GLuint program, GLint location, GLfloat* params)\r
 {\r
-    TRACE("(GLuint shader = %d, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, GLchar* infolog = 0x%0.8p)",\r
-          shader, bufsize, length, infolog);\r
+       TRACE("(GLuint program = %d, GLint location = %d, GLfloat* params = 0x%0.8p)", program, location, params);\r
 \r
-    try\r
-    {\r
-        if(bufsize < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+       es2::Context *context = es2::getContext();\r
 \r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            es2::Shader *shaderObject = context->getShader(shader);\r
+       if(context)\r
+       {\r
+               if(program == 0)\r
+               {\r
+                       return error(GL_INVALID_VALUE);\r
+               }\r
 \r
-            if(!shaderObject)\r
-            {\r
-                return error(GL_INVALID_VALUE);\r
-            }\r
+               es2::Program *programObject = context->getProgram(program);\r
 \r
-            shaderObject->getInfoLog(bufsize, length, infolog);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+               if(!programObject || !programObject->isLinked())\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
 \r
-void GL_APIENTRY glGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision)\r
-{\r
-    TRACE("(GLenum shadertype = 0x%X, GLenum precisiontype = 0x%X, GLint* range = 0x%0.8p, GLint* precision = 0x%0.8p)",\r
-          shadertype, precisiontype, range, precision);\r
-\r
-    try\r
-    {\r
-        switch(shadertype)\r
-        {\r
-          case GL_VERTEX_SHADER:\r
-          case GL_FRAGMENT_SHADER:\r
-            break;\r
-          default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        switch(precisiontype)\r
-        {\r
-          case GL_LOW_FLOAT:\r
-          case GL_MEDIUM_FLOAT:\r
-          case GL_HIGH_FLOAT:\r
-            // IEEE 754 single-precision\r
-            range[0] = 127;\r
-            range[1] = 127;\r
-            *precision = 23;\r
-            break;\r
-          case GL_LOW_INT:\r
-          case GL_MEDIUM_INT:\r
-          case GL_HIGH_INT:\r
-            // Single-precision floating-point numbers can accurately represent integers up to +/-16777216\r
-            range[0] = 24;\r
-            range[1] = 24;\r
-            *precision = 0;\r
-            break;\r
-          default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+               if(!programObject->getUniformfv(location, NULL, params))\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
+       }\r
 }\r
 \r
-void GL_APIENTRY glGetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source)\r
+void GL_APIENTRY glGetnUniformivEXT(GLuint program, GLint location, GLsizei bufSize, GLint* params)\r
 {\r
-    TRACE("(GLuint shader = %d, GLsizei bufsize = %d, GLsizei* length = 0x%0.8p, GLchar* source = 0x%0.8p)",\r
-          shader, bufsize, length, source);\r
-\r
-    try\r
-    {\r
-        if(bufsize < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+       TRACE("(GLuint program = %d, GLint location = %d, GLsizei bufSize = %d, GLint* params = 0x%0.8p)",\r
+             program, location, bufSize, params);\r
 \r
-        es2::Context *context = es2::getContext();\r
+       if(bufSize < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-        if(context)\r
-        {\r
-            es2::Shader *shaderObject = context->getShader(shader);\r
+       es2::Context *context = es2::getContext();\r
 \r
-            if(!shaderObject)\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
+       if(context)\r
+       {\r
+               if(program == 0)\r
+               {\r
+                       return error(GL_INVALID_VALUE);\r
+               }\r
 \r
-            shaderObject->getSource(bufsize, length, source);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+               es2::Program *programObject = context->getProgram(program);\r
 \r
-const GLubyte* GL_APIENTRY glGetString(GLenum name)\r
-{\r
-    TRACE("(GLenum name = 0x%X)", name);\r
-\r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
-\r
-        switch(name)\r
-        {\r
-        case GL_VENDOR:\r
-            return (GLubyte*)"TransGaming Inc.";\r
-        case GL_RENDERER:\r
-            return (GLubyte*)"SwiftShader";\r
-        case GL_VERSION:\r
-            return (GLubyte*)"OpenGL ES 2.0 SwiftShader " VERSION_STRING;\r
-        case GL_SHADING_LANGUAGE_VERSION:\r
-            return (GLubyte*)"OpenGL ES GLSL ES 1.00 SwiftShader " VERSION_STRING;\r
-        case GL_EXTENSIONS:\r
-            // Keep list sorted in following order:\r
-               // OES extensions\r
-               // EXT extensions\r
-               // Vendor extensions\r
-            return (GLubyte*)\r
-                "GL_OES_depth_texture "\r
-                "GL_OES_depth_texture_cube_map "\r
-                "GL_OES_EGL_image "\r
-                "GL_OES_EGL_image_external "\r
-                "GL_OES_element_index_uint "\r
-                "GL_OES_packed_depth_stencil "\r
-                "GL_OES_rgb8_rgba8 "\r
-                "GL_OES_standard_derivatives "\r
-                "GL_OES_texture_float "\r
-                "GL_OES_texture_float_linear "\r
-                "GL_OES_texture_half_float "\r
-                "GL_OES_texture_half_float_linear "\r
-                "GL_OES_texture_npot "\r
-                "GL_EXT_blend_minmax "\r
-                "GL_EXT_occlusion_query_boolean "\r
-                "GL_EXT_read_format_bgra "\r
-                   #if (S3TC_SUPPORT)\r
-                "GL_EXT_texture_compression_dxt1 "\r
-                "GL_ANGLE_texture_compression_dxt3 "\r
-                "GL_ANGLE_texture_compression_dxt5 "\r
-                   #endif\r
-                "GL_EXT_texture_filter_anisotropic "\r
-                "GL_EXT_texture_format_BGRA8888 "\r
-                "GL_ANGLE_framebuffer_blit "\r
-                "GL_ANGLE_framebuffer_multisample "\r
-                "GL_NV_fence";\r
-        default:\r
-            return error(GL_INVALID_ENUM, (GLubyte*)NULL);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY, (GLubyte*)NULL);\r
-    }\r
-\r
-    return NULL;\r
-}\r
+               if(!programObject || !programObject->isLinked())\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
 \r
-void GL_APIENTRY glGetTexParameterfv(GLenum target, GLenum pname, GLfloat* params)\r
-{\r
-    TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLfloat* params = 0x%0.8p)", target, pname, params);\r
-\r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            es2::Texture *texture;\r
-\r
-            switch(target)\r
-            {\r
-            case GL_TEXTURE_2D:\r
-                texture = context->getTexture2D();\r
-                break;\r
-            case GL_TEXTURE_CUBE_MAP:\r
-                texture = context->getTextureCubeMap();\r
-                break;\r
-            case GL_TEXTURE_EXTERNAL_OES:\r
-                texture = context->getTextureExternal();\r
-                break;\r
-            default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-\r
-            switch(pname)\r
-            {\r
-            case GL_TEXTURE_MAG_FILTER:\r
-                *params = (GLfloat)texture->getMagFilter();\r
-                break;\r
-            case GL_TEXTURE_MIN_FILTER:\r
-                *params = (GLfloat)texture->getMinFilter();\r
-                break;\r
-            case GL_TEXTURE_WRAP_S:\r
-                *params = (GLfloat)texture->getWrapS();\r
-                break;\r
-            case GL_TEXTURE_WRAP_T:\r
-                *params = (GLfloat)texture->getWrapT();\r
-                break;\r
-                       case GL_TEXTURE_MAX_ANISOTROPY_EXT:\r
-                *params = texture->getMaxAnisotropy();\r
-                break;\r
-            case GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES:\r
-                *params = (GLfloat)1;\r
-                break;\r
-            default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+               if(!programObject)\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
 \r
-void GL_APIENTRY glGetTexParameteriv(GLenum target, GLenum pname, GLint* params)\r
-{\r
-    TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint* params = 0x%0.8p)", target, pname, params);\r
-\r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            es2::Texture *texture;\r
-\r
-            switch(target)\r
-            {\r
-            case GL_TEXTURE_2D:\r
-                texture = context->getTexture2D();\r
-                break;\r
-            case GL_TEXTURE_CUBE_MAP:\r
-                texture = context->getTextureCubeMap();\r
-                break;\r
-            case GL_TEXTURE_EXTERNAL_OES:\r
-                texture = context->getTextureExternal();\r
-                break;\r
-            default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-\r
-            switch(pname)\r
-            {\r
-            case GL_TEXTURE_MAG_FILTER:\r
-                *params = texture->getMagFilter();\r
-                break;\r
-            case GL_TEXTURE_MIN_FILTER:\r
-                *params = texture->getMinFilter();\r
-                break;\r
-            case GL_TEXTURE_WRAP_S:\r
-                *params = texture->getWrapS();\r
-                break;\r
-            case GL_TEXTURE_WRAP_T:\r
-                *params = texture->getWrapT();\r
-                break;\r
-                   case GL_TEXTURE_MAX_ANISOTROPY_EXT:\r
-                *params = (GLint)texture->getMaxAnisotropy();\r
-                break;\r
-            case GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES:\r
-                *params = 1;\r
-                break;\r
-            default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+               if(!programObject->getUniformiv(location, &bufSize, params))\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
+       }\r
 }\r
 \r
-void GL_APIENTRY glGetnUniformfvEXT(GLuint program, GLint location, GLsizei bufSize, GLfloat* params)\r
+void GL_APIENTRY glGetUniformiv(GLuint program, GLint location, GLint* params)\r
 {\r
-    TRACE("(GLuint program = %d, GLint location = %d, GLsizei bufSize = %d, GLfloat* params = 0x%0.8p)",\r
-          program, location, bufSize, params);\r
+       TRACE("(GLuint program = %d, GLint location = %d, GLint* params = 0x%0.8p)", program, location, params);\r
 \r
-    try\r
-    {\r
-        if(bufSize < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+       es2::Context *context = es2::getContext();\r
 \r
-        es2::Context *context = es2::getContext();\r
+       if(context)\r
+       {\r
+               if(program == 0)\r
+               {\r
+                       return error(GL_INVALID_VALUE);\r
+               }\r
 \r
-        if(context)\r
-        {\r
-            if(program == 0)\r
-            {\r
-                return error(GL_INVALID_VALUE);\r
-            }\r
+               es2::Program *programObject = context->getProgram(program);\r
 \r
-            es2::Program *programObject = context->getProgram(program);\r
+               if(!programObject || !programObject->isLinked())\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
 \r
-            if(!programObject || !programObject->isLinked())\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
+               if(!programObject)\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
 \r
-            if(!programObject->getUniformfv(location, &bufSize, params))\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+               if(!programObject->getUniformiv(location, NULL, params))\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
+       }\r
 }\r
 \r
-void GL_APIENTRY glGetUniformfv(GLuint program, GLint location, GLfloat* params)\r
+int GL_APIENTRY glGetUniformLocation(GLuint program, const GLchar* name)\r
 {\r
-    TRACE("(GLuint program = %d, GLint location = %d, GLfloat* params = 0x%0.8p)", program, location, params);\r
+       TRACE("(GLuint program = %d, const GLchar* name = %s)", program, name);\r
+\r
+       es2::Context *context = es2::getContext();\r
 \r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
+       if(strstr(name, "gl_") == name)\r
+       {\r
+               return -1;\r
+       }\r
 \r
-        if(context)\r
-        {\r
-            if(program == 0)\r
-            {\r
-                return error(GL_INVALID_VALUE);\r
-            }\r
+       if(context)\r
+       {\r
+               es2::Program *programObject = context->getProgram(program);\r
 \r
-            es2::Program *programObject = context->getProgram(program);\r
+               if(!programObject)\r
+               {\r
+                       if(context->getShader(program))\r
+                       {\r
+                               return error(GL_INVALID_OPERATION, -1);\r
+                       }\r
+                       else\r
+                       {\r
+                               return error(GL_INVALID_VALUE, -1);\r
+                       }\r
+               }\r
 \r
-            if(!programObject || !programObject->isLinked())\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
+               if(!programObject->isLinked())\r
+               {\r
+                       return error(GL_INVALID_OPERATION, -1);\r
+               }\r
 \r
-            if(!programObject->getUniformfv(location, NULL, params))\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+               return programObject->getUniformLocation(name);\r
+       }\r
 \r
-void GL_APIENTRY glGetnUniformivEXT(GLuint program, GLint location, GLsizei bufSize, GLint* params)\r
-{\r
-    TRACE("(GLuint program = %d, GLint location = %d, GLsizei bufSize = %d, GLint* params = 0x%0.8p)",\r
-          program, location, bufSize, params);\r
-\r
-    try\r
-    {\r
-        if(bufSize < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            if(program == 0)\r
-            {\r
-                return error(GL_INVALID_VALUE);\r
-            }\r
-\r
-            es2::Program *programObject = context->getProgram(program);\r
-\r
-            if(!programObject || !programObject->isLinked())\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-\r
-            if(!programObject)\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-\r
-            if(!programObject->getUniformiv(location, &bufSize, params))\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       return -1;\r
 }\r
 \r
-void GL_APIENTRY glGetUniformiv(GLuint program, GLint location, GLint* params)\r
+void GL_APIENTRY glGetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params)\r
 {\r
-    TRACE("(GLuint program = %d, GLint location = %d, GLint* params = 0x%0.8p)", program, location, params);\r
-\r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
+       TRACE("(GLuint index = %d, GLenum pname = 0x%X, GLfloat* params = 0x%0.8p)", index, pname, params);\r
 \r
-        if(context)\r
-        {\r
-            if(program == 0)\r
-            {\r
-                return error(GL_INVALID_VALUE);\r
-            }\r
+       es2::Context *context = es2::getContext();\r
 \r
-            es2::Program *programObject = context->getProgram(program);\r
-\r
-            if(!programObject || !programObject->isLinked())\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
+       if(context)\r
+       {\r
+               if(index >= es2::MAX_VERTEX_ATTRIBS)\r
+               {\r
+                       return error(GL_INVALID_VALUE);\r
+               }\r
 \r
-            if(!programObject)\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
+               const es2::VertexAttribute &attribState = context->getVertexAttribState(index);\r
 \r
-            if(!programObject->getUniformiv(location, NULL, params))\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+               switch(pname)\r
+               {\r
+               case GL_VERTEX_ATTRIB_ARRAY_ENABLED:\r
+                       *params = (GLfloat)(attribState.mArrayEnabled ? GL_TRUE : GL_FALSE);\r
+                       break;\r
+               case GL_VERTEX_ATTRIB_ARRAY_SIZE:\r
+                       *params = (GLfloat)attribState.mSize;\r
+                       break;\r
+               case GL_VERTEX_ATTRIB_ARRAY_STRIDE:\r
+                       *params = (GLfloat)attribState.mStride;\r
+                       break;\r
+               case GL_VERTEX_ATTRIB_ARRAY_TYPE:\r
+                       *params = (GLfloat)attribState.mType;\r
+                       break;\r
+               case GL_VERTEX_ATTRIB_ARRAY_NORMALIZED:\r
+                       *params = (GLfloat)(attribState.mNormalized ? GL_TRUE : GL_FALSE);\r
+                       break;\r
+               case GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING:\r
+                       *params = (GLfloat)attribState.mBoundBuffer.id();\r
+                       break;\r
+               case GL_CURRENT_VERTEX_ATTRIB:\r
+                       for(int i = 0; i < 4; ++i)\r
+                       {\r
+                               params[i] = attribState.mCurrentValue[i];\r
+                       }\r
+                       break;\r
+               default: return error(GL_INVALID_ENUM);\r
+               }\r
+       }\r
 }\r
 \r
-int GL_APIENTRY glGetUniformLocation(GLuint program, const GLchar* name)\r
+void GL_APIENTRY glGetVertexAttribiv(GLuint index, GLenum pname, GLint* params)\r
 {\r
-    TRACE("(GLuint program = %d, const GLchar* name = %s)", program, name);\r
-\r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(strstr(name, "gl_") == name)\r
-        {\r
-            return -1;\r
-        }\r
-\r
-        if(context)\r
-        {\r
-            es2::Program *programObject = context->getProgram(program);\r
-\r
-            if(!programObject)\r
-            {\r
-                if(context->getShader(program))\r
-                {\r
-                    return error(GL_INVALID_OPERATION, -1);\r
-                }\r
-                else\r
-                {\r
-                    return error(GL_INVALID_VALUE, -1);\r
-                }\r
-            }\r
-\r
-            if(!programObject->isLinked())\r
-            {\r
-                return error(GL_INVALID_OPERATION, -1);\r
-            }\r
-\r
-            return programObject->getUniformLocation(name);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY, -1);\r
-    }\r
-\r
-    return -1;\r
-}\r
+       TRACE("(GLuint index = %d, GLenum pname = 0x%X, GLint* params = 0x%0.8p)", index, pname, params);\r
 \r
-void GL_APIENTRY glGetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params)\r
-{\r
-    TRACE("(GLuint index = %d, GLenum pname = 0x%X, GLfloat* params = 0x%0.8p)", index, pname, params);\r
-\r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            if(index >= es2::MAX_VERTEX_ATTRIBS)\r
-            {\r
-                return error(GL_INVALID_VALUE);\r
-            }\r
-\r
-            const es2::VertexAttribute &attribState = context->getVertexAttribState(index);\r
-\r
-            switch(pname)\r
-            {\r
-              case GL_VERTEX_ATTRIB_ARRAY_ENABLED:\r
-                *params = (GLfloat)(attribState.mArrayEnabled ? GL_TRUE : GL_FALSE);\r
-                break;\r
-              case GL_VERTEX_ATTRIB_ARRAY_SIZE:\r
-                *params = (GLfloat)attribState.mSize;\r
-                break;\r
-              case GL_VERTEX_ATTRIB_ARRAY_STRIDE:\r
-                *params = (GLfloat)attribState.mStride;\r
-                break;\r
-              case GL_VERTEX_ATTRIB_ARRAY_TYPE:\r
-                *params = (GLfloat)attribState.mType;\r
-                break;\r
-              case GL_VERTEX_ATTRIB_ARRAY_NORMALIZED:\r
-                *params = (GLfloat)(attribState.mNormalized ? GL_TRUE : GL_FALSE);\r
-                break;\r
-              case GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING:\r
-                *params = (GLfloat)attribState.mBoundBuffer.id();\r
-                break;\r
-              case GL_CURRENT_VERTEX_ATTRIB:\r
-                for(int i = 0; i < 4; ++i)\r
-                {\r
-                    params[i] = attribState.mCurrentValue[i];\r
-                }\r
-                break;\r
-              default: return error(GL_INVALID_ENUM);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
-}\r
+       es2::Context *context = es2::getContext();\r
 \r
-void GL_APIENTRY glGetVertexAttribiv(GLuint index, GLenum pname, GLint* params)\r
-{\r
-    TRACE("(GLuint index = %d, GLenum pname = 0x%X, GLint* params = 0x%0.8p)", index, pname, params);\r
-\r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            if(index >= es2::MAX_VERTEX_ATTRIBS)\r
-            {\r
-                return error(GL_INVALID_VALUE);\r
-            }\r
-\r
-            const es2::VertexAttribute &attribState = context->getVertexAttribState(index);\r
-\r
-            switch(pname)\r
-            {\r
-              case GL_VERTEX_ATTRIB_ARRAY_ENABLED:\r
-                *params = (attribState.mArrayEnabled ? GL_TRUE : GL_FALSE);\r
-                break;\r
-              case GL_VERTEX_ATTRIB_ARRAY_SIZE:\r
-                *params = attribState.mSize;\r
-                break;\r
-              case GL_VERTEX_ATTRIB_ARRAY_STRIDE:\r
-                *params = attribState.mStride;\r
-                break;\r
-              case GL_VERTEX_ATTRIB_ARRAY_TYPE:\r
-                *params = attribState.mType;\r
-                break;\r
-              case GL_VERTEX_ATTRIB_ARRAY_NORMALIZED:\r
-                *params = (attribState.mNormalized ? GL_TRUE : GL_FALSE);\r
-                break;\r
-              case GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING:\r
-                *params = attribState.mBoundBuffer.id();\r
-                break;\r
-              case GL_CURRENT_VERTEX_ATTRIB:\r
-                for(int i = 0; i < 4; ++i)\r
-                {\r
-                    float currentValue = attribState.mCurrentValue[i];\r
-                    params[i] = (GLint)(currentValue > 0.0f ? floor(currentValue + 0.5f) : ceil(currentValue - 0.5f));\r
-                }\r
-                break;\r
-              default: return error(GL_INVALID_ENUM);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               if(index >= es2::MAX_VERTEX_ATTRIBS)\r
+               {\r
+                       return error(GL_INVALID_VALUE);\r
+               }\r
+\r
+               const es2::VertexAttribute &attribState = context->getVertexAttribState(index);\r
+\r
+               switch(pname)\r
+               {\r
+               case GL_VERTEX_ATTRIB_ARRAY_ENABLED:\r
+                       *params = (attribState.mArrayEnabled ? GL_TRUE : GL_FALSE);\r
+                       break;\r
+               case GL_VERTEX_ATTRIB_ARRAY_SIZE:\r
+                       *params = attribState.mSize;\r
+                       break;\r
+               case GL_VERTEX_ATTRIB_ARRAY_STRIDE:\r
+                       *params = attribState.mStride;\r
+                       break;\r
+               case GL_VERTEX_ATTRIB_ARRAY_TYPE:\r
+                       *params = attribState.mType;\r
+                       break;\r
+               case GL_VERTEX_ATTRIB_ARRAY_NORMALIZED:\r
+                       *params = (attribState.mNormalized ? GL_TRUE : GL_FALSE);\r
+                       break;\r
+               case GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING:\r
+                       *params = attribState.mBoundBuffer.id();\r
+                       break;\r
+               case GL_CURRENT_VERTEX_ATTRIB:\r
+                       for(int i = 0; i < 4; ++i)\r
+                       {\r
+                               float currentValue = attribState.mCurrentValue[i];\r
+                               params[i] = (GLint)(currentValue > 0.0f ? floor(currentValue + 0.5f) : ceil(currentValue - 0.5f));\r
+                       }\r
+                       break;\r
+               default: return error(GL_INVALID_ENUM);\r
+               }\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glGetVertexAttribPointerv(GLuint index, GLenum pname, GLvoid** pointer)\r
 {\r
-    TRACE("(GLuint index = %d, GLenum pname = 0x%X, GLvoid** pointer = 0x%0.8p)", index, pname, pointer);\r
+       TRACE("(GLuint index = %d, GLenum pname = 0x%X, GLvoid** pointer = 0x%0.8p)", index, pname, pointer);\r
 \r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-            if(index >= es2::MAX_VERTEX_ATTRIBS)\r
-            {\r
-                return error(GL_INVALID_VALUE);\r
-            }\r
+       if(context)\r
+       {\r
+               if(index >= es2::MAX_VERTEX_ATTRIBS)\r
+               {\r
+                       return error(GL_INVALID_VALUE);\r
+               }\r
 \r
-            if(pname != GL_VERTEX_ATTRIB_ARRAY_POINTER)\r
-            {\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
+               if(pname != GL_VERTEX_ATTRIB_ARRAY_POINTER)\r
+               {\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
 \r
-            *pointer = const_cast<GLvoid*>(context->getVertexAttribPointer(index));\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+               *pointer = const_cast<GLvoid*>(context->getVertexAttribPointer(index));\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glHint(GLenum target, GLenum mode)\r
 {\r
-    TRACE("(GLenum target = 0x%X, GLenum mode = 0x%X)", target, mode);\r
-\r
-    try\r
-    {\r
-        switch(mode)\r
-        {\r
-          case GL_FASTEST:\r
-          case GL_NICEST:\r
-          case GL_DONT_CARE:\r
-            break;\r
-          default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        es2::Context *context = es2::getContext();\r
-        switch(target)\r
-        {\r
-          case GL_GENERATE_MIPMAP_HINT:\r
-            if(context) context->setGenerateMipmapHint(mode);\r
-            break;\r
-          case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES:\r
-            if(context) context->setFragmentShaderDerivativeHint(mode);\r
-            break;\r
-          default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLenum target = 0x%X, GLenum mode = 0x%X)", target, mode);\r
+\r
+       switch(mode)\r
+       {\r
+       case GL_FASTEST:\r
+       case GL_NICEST:\r
+       case GL_DONT_CARE:\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       es2::Context *context = es2::getContext();\r
+       switch(target)\r
+       {\r
+       case GL_GENERATE_MIPMAP_HINT:\r
+               if(context) context->setGenerateMipmapHint(mode);\r
+               break;\r
+       case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES:\r
+               if(context) context->setFragmentShaderDerivativeHint(mode);\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
 }\r
 \r
 GLboolean GL_APIENTRY glIsBuffer(GLuint buffer)\r
 {\r
-    TRACE("(GLuint buffer = %d)", buffer);\r
+       TRACE("(GLuint buffer = %d)", buffer);\r
 \r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context && buffer)\r
-        {\r
-            es2::Buffer *bufferObject = context->getBuffer(buffer);\r
+       if(context && buffer)\r
+       {\r
+               es2::Buffer *bufferObject = context->getBuffer(buffer);\r
 \r
-            if(bufferObject)\r
-            {\r
-                return GL_TRUE;\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY, GL_FALSE);\r
-    }\r
+               if(bufferObject)\r
+               {\r
+                       return GL_TRUE;\r
+               }\r
+       }\r
 \r
-    return GL_FALSE;\r
+       return GL_FALSE;\r
 }\r
 \r
 GLboolean GL_APIENTRY glIsEnabled(GLenum cap)\r
 {\r
-    TRACE("(GLenum cap = 0x%X)", cap);\r
-\r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            switch(cap)\r
-            {\r
-              case GL_CULL_FACE:                return context->isCullFaceEnabled();\r
-              case GL_POLYGON_OFFSET_FILL:      return context->isPolygonOffsetFillEnabled();\r
-              case GL_SAMPLE_ALPHA_TO_COVERAGE: return context->isSampleAlphaToCoverageEnabled();\r
-              case GL_SAMPLE_COVERAGE:          return context->isSampleCoverageEnabled();\r
-              case GL_SCISSOR_TEST:             return context->isScissorTestEnabled();\r
-              case GL_STENCIL_TEST:             return context->isStencilTestEnabled();\r
-              case GL_DEPTH_TEST:               return context->isDepthTestEnabled();\r
-              case GL_BLEND:                    return context->isBlendEnabled();\r
-              case GL_DITHER:                   return context->isDitherEnabled();\r
-              default:\r
-                return error(GL_INVALID_ENUM, false);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY, false);\r
-    }\r
-\r
-    return false;\r
+       TRACE("(GLenum cap = 0x%X)", cap);\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               switch(cap)\r
+               {\r
+               case GL_CULL_FACE:                return context->isCullFaceEnabled();\r
+               case GL_POLYGON_OFFSET_FILL:      return context->isPolygonOffsetFillEnabled();\r
+               case GL_SAMPLE_ALPHA_TO_COVERAGE: return context->isSampleAlphaToCoverageEnabled();\r
+               case GL_SAMPLE_COVERAGE:          return context->isSampleCoverageEnabled();\r
+               case GL_SCISSOR_TEST:             return context->isScissorTestEnabled();\r
+               case GL_STENCIL_TEST:             return context->isStencilTestEnabled();\r
+               case GL_DEPTH_TEST:               return context->isDepthTestEnabled();\r
+               case GL_BLEND:                    return context->isBlendEnabled();\r
+               case GL_DITHER:                   return context->isDitherEnabled();\r
+               default:\r
+                       return error(GL_INVALID_ENUM, false);\r
+               }\r
+       }\r
+\r
+       return false;\r
 }\r
 \r
 GLboolean GL_APIENTRY glIsFenceNV(GLuint fence)\r
 {\r
-    TRACE("(GLuint fence = %d)", fence);\r
+       TRACE("(GLuint fence = %d)", fence);\r
 \r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-            es2::Fence *fenceObject = context->getFence(fence);\r
+       if(context)\r
+       {\r
+               es2::Fence *fenceObject = context->getFence(fence);\r
 \r
-            if(fenceObject == NULL)\r
-            {\r
-                return GL_FALSE;\r
-            }\r
+               if(fenceObject == NULL)\r
+               {\r
+                       return GL_FALSE;\r
+               }\r
 \r
-            return fenceObject->isFence();\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY, GL_FALSE);\r
-    }\r
+               return fenceObject->isFence();\r
+       }\r
 \r
-    return GL_FALSE;\r
+       return GL_FALSE;\r
 }\r
 \r
 GLboolean GL_APIENTRY glIsFramebuffer(GLuint framebuffer)\r
 {\r
-    TRACE("(GLuint framebuffer = %d)", framebuffer);\r
+       TRACE("(GLuint framebuffer = %d)", framebuffer);\r
 \r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context && framebuffer)\r
-        {\r
-            es2::Framebuffer *framebufferObject = context->getFramebuffer(framebuffer);\r
+       if(context && framebuffer)\r
+       {\r
+               es2::Framebuffer *framebufferObject = context->getFramebuffer(framebuffer);\r
 \r
-            if(framebufferObject)\r
-            {\r
-                return GL_TRUE;\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY, GL_FALSE);\r
-    }\r
+               if(framebufferObject)\r
+               {\r
+                       return GL_TRUE;\r
+               }\r
+       }\r
 \r
-    return GL_FALSE;\r
+       return GL_FALSE;\r
 }\r
 \r
 GLboolean GL_APIENTRY glIsProgram(GLuint program)\r
 {\r
-    TRACE("(GLuint program = %d)", program);\r
+       TRACE("(GLuint program = %d)", program);\r
 \r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context && program)\r
-        {\r
-            es2::Program *programObject = context->getProgram(program);\r
+       if(context && program)\r
+       {\r
+               es2::Program *programObject = context->getProgram(program);\r
 \r
-            if(programObject)\r
-            {\r
-                return GL_TRUE;\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY, GL_FALSE);\r
-    }\r
+               if(programObject)\r
+               {\r
+                       return GL_TRUE;\r
+               }\r
+       }\r
 \r
-    return GL_FALSE;\r
+       return GL_FALSE;\r
 }\r
 \r
 GLboolean GL_APIENTRY glIsQueryEXT(GLuint id)\r
 {\r
-    TRACE("(GLuint id = %d)", id);\r
+       TRACE("(GLuint id = %d)", id);\r
 \r
-    try\r
-    {\r
-        if(id == 0)\r
-        {\r
-            return GL_FALSE;\r
-        }\r
+       if(id == 0)\r
+       {\r
+               return GL_FALSE;\r
+       }\r
 \r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-            es2::Query *queryObject = context->getQuery(id, false, GL_NONE);\r
+       if(context)\r
+       {\r
+               es2::Query *queryObject = context->getQuery(id, false, GL_NONE);\r
 \r
-            if(queryObject)\r
-            {\r
-                return GL_TRUE;\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY, GL_FALSE);\r
-    }\r
+               if(queryObject)\r
+               {\r
+                       return GL_TRUE;\r
+               }\r
+       }\r
 \r
-    return GL_FALSE;\r
+       return GL_FALSE;\r
 }\r
 \r
 GLboolean GL_APIENTRY glIsRenderbuffer(GLuint renderbuffer)\r
 {\r
-    TRACE("(GLuint renderbuffer = %d)", renderbuffer);\r
+       TRACE("(GLuint renderbuffer = %d)", renderbuffer);\r
 \r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context && renderbuffer)\r
-        {\r
-            es2::Renderbuffer *renderbufferObject = context->getRenderbuffer(renderbuffer);\r
+       if(context && renderbuffer)\r
+       {\r
+               es2::Renderbuffer *renderbufferObject = context->getRenderbuffer(renderbuffer);\r
 \r
-            if(renderbufferObject)\r
-            {\r
-                return GL_TRUE;\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY, GL_FALSE);\r
-    }\r
+               if(renderbufferObject)\r
+               {\r
+                       return GL_TRUE;\r
+               }\r
+       }\r
 \r
-    return GL_FALSE;\r
+       return GL_FALSE;\r
 }\r
 \r
 GLboolean GL_APIENTRY glIsShader(GLuint shader)\r
 {\r
-    TRACE("(GLuint shader = %d)", shader);\r
+       TRACE("(GLuint shader = %d)", shader);\r
 \r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context && shader)\r
-        {\r
-            es2::Shader *shaderObject = context->getShader(shader);\r
+       if(context && shader)\r
+       {\r
+               es2::Shader *shaderObject = context->getShader(shader);\r
 \r
-            if(shaderObject)\r
-            {\r
-                return GL_TRUE;\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY, GL_FALSE);\r
-    }\r
+               if(shaderObject)\r
+               {\r
+                       return GL_TRUE;\r
+               }\r
+       }\r
 \r
-    return GL_FALSE;\r
+       return GL_FALSE;\r
 }\r
 \r
 GLboolean GL_APIENTRY glIsTexture(GLuint texture)\r
 {\r
-    TRACE("(GLuint texture = %d)", texture);\r
+       TRACE("(GLuint texture = %d)", texture);\r
 \r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context && texture)\r
-        {\r
-            es2::Texture *textureObject = context->getTexture(texture);\r
+       if(context && texture)\r
+       {\r
+               es2::Texture *textureObject = context->getTexture(texture);\r
 \r
-            if(textureObject)\r
-            {\r
-                return GL_TRUE;\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY, GL_FALSE);\r
-    }\r
+               if(textureObject)\r
+               {\r
+                       return GL_TRUE;\r
+               }\r
+       }\r
 \r
-    return GL_FALSE;\r
+       return GL_FALSE;\r
 }\r
 \r
 void GL_APIENTRY glLineWidth(GLfloat width)\r
 {\r
-    TRACE("(GLfloat width = %f)", width);\r
+       TRACE("(GLfloat width = %f)", width);\r
 \r
-    try\r
-    {\r
-        if(width <= 0.0f)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+       if(width <= 0.0f)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-            context->setLineWidth(width);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               context->setLineWidth(width);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glLinkProgram(GLuint program)\r
 {\r
-    TRACE("(GLuint program = %d)", program);\r
-\r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            es2::Program *programObject = context->getProgram(program);\r
-\r
-            if(!programObject)\r
-            {\r
-                if(context->getShader(program))\r
-                {\r
-                    return error(GL_INVALID_OPERATION);\r
-                }\r
-                else\r
-                {\r
-                    return error(GL_INVALID_VALUE);\r
-                }\r
-            }\r
-\r
-            programObject->link();\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLuint program = %d)", program);\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               es2::Program *programObject = context->getProgram(program);\r
+\r
+               if(!programObject)\r
+               {\r
+                       if(context->getShader(program))\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+                       else\r
+                       {\r
+                               return error(GL_INVALID_VALUE);\r
+                       }\r
+               }\r
+\r
+               programObject->link();\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glPixelStorei(GLenum pname, GLint param)\r
 {\r
-    TRACE("(GLenum pname = 0x%X, GLint param = %d)", pname, param);\r
-\r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            switch(pname)\r
-            {\r
-              case GL_UNPACK_ALIGNMENT:\r
-                if(param != 1 && param != 2 && param != 4 && param != 8)\r
-                {\r
-                    return error(GL_INVALID_VALUE);\r
-                }\r
-\r
-                context->setUnpackAlignment(param);\r
-                break;\r
-\r
-              case GL_PACK_ALIGNMENT:\r
-                if(param != 1 && param != 2 && param != 4 && param != 8)\r
-                {\r
-                    return error(GL_INVALID_VALUE);\r
-                }\r
-\r
-                context->setPackAlignment(param);\r
-                break;\r
-\r
-              default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLenum pname = 0x%X, GLint param = %d)", pname, param);\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               switch(pname)\r
+               {\r
+               case GL_UNPACK_ALIGNMENT:\r
+                       if(param != 1 && param != 2 && param != 4 && param != 8)\r
+                       {\r
+                               return error(GL_INVALID_VALUE);\r
+                       }\r
+                       context->setUnpackAlignment(param);\r
+                       break;\r
+               case GL_PACK_ALIGNMENT:\r
+                       if(param != 1 && param != 2 && param != 4 && param != 8)\r
+                       {\r
+                               return error(GL_INVALID_VALUE);\r
+                       }\r
+                       context->setPackAlignment(param);\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glPolygonOffset(GLfloat factor, GLfloat units)\r
 {\r
-    TRACE("(GLfloat factor = %f, GLfloat units = %f)", factor, units);\r
+       TRACE("(GLfloat factor = %f, GLfloat units = %f)", factor, units);\r
 \r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-            context->setPolygonOffsetParams(factor, units);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               context->setPolygonOffsetParams(factor, units);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glReadnPixelsEXT(GLint x, GLint y, GLsizei width, GLsizei height,\r
-                                GLenum format, GLenum type, GLsizei bufSize,\r
-                                GLvoid *data)\r
-{\r
-    TRACE("(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d, "\r
-          "GLenum format = 0x%X, GLenum type = 0x%X, GLsizei bufSize = 0x%d, GLvoid *data = 0x%0.8p)",\r
-          x, y, width, height, format, type, bufSize, data);\r
-\r
-    try\r
-    {\r
-        if(width < 0 || height < 0 || bufSize < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        if(!validReadFormatType(format, type))\r
-        {\r
-            return error(GL_INVALID_OPERATION);\r
-        }\r
-\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            context->readPixels(x, y, width, height, format, type, &bufSize, data);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+                                  GLenum format, GLenum type, GLsizei bufSize, GLvoid *data)\r
+{\r
+       TRACE("(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d, "\r
+             "GLenum format = 0x%X, GLenum type = 0x%X, GLsizei bufSize = 0x%d, GLvoid *data = 0x%0.8p)",\r
+             x, y, width, height, format, type, bufSize, data);\r
+\r
+       if(width < 0 || height < 0 || bufSize < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       if(!validReadFormatType(format, type))\r
+       {\r
+               return error(GL_INVALID_OPERATION);\r
+       }\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               context->readPixels(x, y, width, height, format, type, &bufSize, data);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels)\r
 {\r
-    TRACE("(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d, "\r
-          "GLenum format = 0x%X, GLenum type = 0x%X, GLvoid* pixels = 0x%0.8p)",\r
-          x, y, width, height, format, type,  pixels);\r
+       TRACE("(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d, "\r
+             "GLenum format = 0x%X, GLenum type = 0x%X, GLvoid* pixels = 0x%0.8p)",\r
+             x, y, width, height, format, type,  pixels);\r
 \r
-    try\r
-    {\r
-        if(width < 0 || height < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+       if(width < 0 || height < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-        if(!validReadFormatType(format, type))\r
-        {\r
-            return error(GL_INVALID_OPERATION);\r
-        }\r
+       if(!validReadFormatType(format, type))\r
+       {\r
+               return error(GL_INVALID_OPERATION);\r
+       }\r
 \r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-            context->readPixels(x, y, width, height, format, type, NULL, pixels);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               context->readPixels(x, y, width, height, format, type, NULL, pixels);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glReleaseShaderCompiler(void)\r
 {\r
-    TRACE("()");\r
+       TRACE("()");\r
 \r
-    try\r
-    {\r
-        es2::Shader::releaseCompiler();\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       es2::Shader::releaseCompiler();\r
 }\r
 \r
 void GL_APIENTRY glRenderbufferStorageMultisampleANGLE(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height)\r
 {\r
-    TRACE("(GLenum target = 0x%X, GLsizei samples = %d, GLenum internalformat = 0x%X, GLsizei width = %d, GLsizei height = %d)",\r
-          target, samples, internalformat, width, height);\r
-\r
-    try\r
-    {\r
-        switch(target)\r
-        {\r
-          case GL_RENDERBUFFER:\r
-            break;\r
-          default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        if(!es2::IsColorRenderable(internalformat) && !es2::IsDepthRenderable(internalformat) && !es2::IsStencilRenderable(internalformat))\r
-        {\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        if(width < 0 || height < 0 || samples < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            if(width > es2::IMPLEMENTATION_MAX_RENDERBUFFER_SIZE ||\r
-               height > es2::IMPLEMENTATION_MAX_RENDERBUFFER_SIZE ||\r
-               samples > es2::IMPLEMENTATION_MAX_SAMPLES)\r
-            {\r
-                return error(GL_INVALID_VALUE);\r
-            }\r
-\r
-            GLuint handle = context->getRenderbufferHandle();\r
-            if(handle == 0)\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-\r
-            switch(internalformat)\r
-            {\r
-              case GL_DEPTH_COMPONENT16:\r
-                context->setRenderbufferStorage(new es2::Depthbuffer(width, height, samples));\r
-                break;\r
-              case GL_RGBA4:\r
-              case GL_RGB5_A1:\r
-              case GL_RGB565:\r
-              case GL_RGB8_OES:\r
-              case GL_RGBA8_OES:\r
-                context->setRenderbufferStorage(new es2::Colorbuffer(width, height, internalformat, samples));\r
-                break;\r
-              case GL_STENCIL_INDEX8:\r
-                context->setRenderbufferStorage(new es2::Stencilbuffer(width, height, samples));\r
-                break;\r
-              case GL_DEPTH24_STENCIL8_OES:\r
-                context->setRenderbufferStorage(new es2::DepthStencilbuffer(width, height, samples));\r
-                break;\r
-              default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLenum target = 0x%X, GLsizei samples = %d, GLenum internalformat = 0x%X, GLsizei width = %d, GLsizei height = %d)",\r
+             target, samples, internalformat, width, height);\r
+\r
+       switch(target)\r
+       {\r
+       case GL_RENDERBUFFER:\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       if(!es2::IsColorRenderable(internalformat) && !es2::IsDepthRenderable(internalformat) && !es2::IsStencilRenderable(internalformat))\r
+       {\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       if(width < 0 || height < 0 || samples < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               if(width > es2::IMPLEMENTATION_MAX_RENDERBUFFER_SIZE ||\r
+                  height > es2::IMPLEMENTATION_MAX_RENDERBUFFER_SIZE ||\r
+                  samples > es2::IMPLEMENTATION_MAX_SAMPLES)\r
+               {\r
+                       return error(GL_INVALID_VALUE);\r
+               }\r
+\r
+               GLuint handle = context->getRenderbufferHandle();\r
+               if(handle == 0)\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
+\r
+               switch(internalformat)\r
+               {\r
+               case GL_DEPTH_COMPONENT16:\r
+                       context->setRenderbufferStorage(new es2::Depthbuffer(width, height, samples));\r
+                       break;\r
+               case GL_RGBA4:\r
+               case GL_RGB5_A1:\r
+               case GL_RGB565:\r
+               case GL_RGB8_OES:\r
+               case GL_RGBA8_OES:\r
+                       context->setRenderbufferStorage(new es2::Colorbuffer(width, height, internalformat, samples));\r
+                       break;\r
+               case GL_STENCIL_INDEX8:\r
+                       context->setRenderbufferStorage(new es2::Stencilbuffer(width, height, samples));\r
+                       break;\r
+               case GL_DEPTH24_STENCIL8_OES:\r
+                       context->setRenderbufferStorage(new es2::DepthStencilbuffer(width, height, samples));\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)\r
 {\r
-    glRenderbufferStorageMultisampleANGLE(target, 0, internalformat, width, height);\r
+       glRenderbufferStorageMultisampleANGLE(target, 0, internalformat, width, height);\r
 }\r
 \r
 void GL_APIENTRY glSampleCoverage(GLclampf value, GLboolean invert)\r
 {\r
-    TRACE("(GLclampf value = %f, GLboolean invert = %d)", value, invert);\r
+       TRACE("(GLclampf value = %f, GLboolean invert = %d)", value, invert);\r
 \r
-    try\r
-    {\r
-        es2::Context* context = es2::getContext();\r
+       es2::Context* context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-            context->setSampleCoverageParams(es2::clamp01(value), invert == GL_TRUE);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               context->setSampleCoverageParams(es2::clamp01(value), invert == GL_TRUE);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glSetFenceNV(GLuint fence, GLenum condition)\r
 {\r
-    TRACE("(GLuint fence = %d, GLenum condition = 0x%X)", fence, condition);\r
+       TRACE("(GLuint fence = %d, GLenum condition = 0x%X)", fence, condition);\r
 \r
-    try\r
-    {\r
-        if(condition != GL_ALL_COMPLETED_NV)\r
-        {\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
+       if(condition != GL_ALL_COMPLETED_NV)\r
+       {\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
 \r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-            es2::Fence *fenceObject = context->getFence(fence);\r
+       if(context)\r
+       {\r
+               es2::Fence *fenceObject = context->getFence(fence);\r
 \r
-            if(fenceObject == NULL)\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
+               if(fenceObject == NULL)\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
 \r
-            fenceObject->setFence(condition);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+               fenceObject->setFence(condition);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glScissor(GLint x, GLint y, GLsizei width, GLsizei height)\r
 {\r
-    TRACE("(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d)", x, y, width, height);\r
+       TRACE("(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d)", x, y, width, height);\r
 \r
-    try\r
-    {\r
-        if(width < 0 || height < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+       if(width < 0 || height < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-        es2::Context* context = es2::getContext();\r
+       es2::Context* context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-            context->setScissorParams(x, y, width, height);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               context->setScissorParams(x, y, width, height);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glShaderBinary(GLsizei n, const GLuint* shaders, GLenum binaryformat, const GLvoid* binary, GLsizei length)\r
 {\r
-    TRACE("(GLsizei n = %d, const GLuint* shaders = 0x%0.8p, GLenum binaryformat = 0x%X, "\r
-          "const GLvoid* binary = 0x%0.8p, GLsizei length = %d)",\r
-          n, shaders, binaryformat, binary, length);\r
+       TRACE("(GLsizei n = %d, const GLuint* shaders = 0x%0.8p, GLenum binaryformat = 0x%X, "\r
+             "const GLvoid* binary = 0x%0.8p, GLsizei length = %d)",\r
+             n, shaders, binaryformat, binary, length);\r
 \r
-    try\r
-    {\r
-        // No binary shader formats are supported.\r
-        return error(GL_INVALID_ENUM);\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       // No binary shader formats are supported.\r
+       return error(GL_INVALID_ENUM);\r
 }\r
 \r
 void GL_APIENTRY glShaderSource(GLuint shader, GLsizei count, const GLchar *const *string, const GLint *length)\r
 {\r
-    TRACE("(GLuint shader = %d, GLsizei count = %d, const GLchar** string = 0x%0.8p, const GLint* length = 0x%0.8p)",\r
-          shader, count, string, length);\r
-\r
-    try\r
-    {\r
-        if(count < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            es2::Shader *shaderObject = context->getShader(shader);\r
-\r
-            if(!shaderObject)\r
-            {\r
-                if(context->getProgram(shader))\r
-                {\r
-                    return error(GL_INVALID_OPERATION);\r
-                }\r
-                else\r
-                {\r
-                    return error(GL_INVALID_VALUE);\r
-                }\r
-            }\r
-\r
-            shaderObject->setSource(count, string, length);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLuint shader = %d, GLsizei count = %d, const GLchar** string = 0x%0.8p, const GLint* length = 0x%0.8p)",\r
+             shader, count, string, length);\r
+\r
+       if(count < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               es2::Shader *shaderObject = context->getShader(shader);\r
+\r
+               if(!shaderObject)\r
+               {\r
+                       if(context->getProgram(shader))\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+                       else\r
+                       {\r
+                               return error(GL_INVALID_VALUE);\r
+                       }\r
+               }\r
+\r
+               shaderObject->setSource(count, string, length);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glStencilFunc(GLenum func, GLint ref, GLuint mask)\r
 {\r
-    glStencilFuncSeparate(GL_FRONT_AND_BACK, func, ref, mask);\r
+       glStencilFuncSeparate(GL_FRONT_AND_BACK, func, ref, mask);\r
 }\r
 \r
 void GL_APIENTRY glStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask)\r
 {\r
-    TRACE("(GLenum face = 0x%X, GLenum func = 0x%X, GLint ref = %d, GLuint mask = %d)", face, func, ref, mask);\r
-\r
-    try\r
-    {\r
-        switch(face)\r
-        {\r
-          case GL_FRONT:\r
-          case GL_BACK:\r
-          case GL_FRONT_AND_BACK:\r
-            break;\r
-          default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        switch(func)\r
-        {\r
-          case GL_NEVER:\r
-          case GL_ALWAYS:\r
-          case GL_LESS:\r
-          case GL_LEQUAL:\r
-          case GL_EQUAL:\r
-          case GL_GEQUAL:\r
-          case GL_GREATER:\r
-          case GL_NOTEQUAL:\r
-            break;\r
-          default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            if(face == GL_FRONT || face == GL_FRONT_AND_BACK)\r
-            {\r
-                context->setStencilParams(func, ref, mask);\r
-            }\r
-\r
-            if(face == GL_BACK || face == GL_FRONT_AND_BACK)\r
-            {\r
-                context->setStencilBackParams(func, ref, mask);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLenum face = 0x%X, GLenum func = 0x%X, GLint ref = %d, GLuint mask = %d)", face, func, ref, mask);\r
+\r
+       switch(face)\r
+       {\r
+       case GL_FRONT:\r
+       case GL_BACK:\r
+       case GL_FRONT_AND_BACK:\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       switch(func)\r
+       {\r
+       case GL_NEVER:\r
+       case GL_ALWAYS:\r
+       case GL_LESS:\r
+       case GL_LEQUAL:\r
+       case GL_EQUAL:\r
+       case GL_GEQUAL:\r
+       case GL_GREATER:\r
+       case GL_NOTEQUAL:\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               if(face == GL_FRONT || face == GL_FRONT_AND_BACK)\r
+               {\r
+                       context->setStencilParams(func, ref, mask);\r
+               }\r
+\r
+               if(face == GL_BACK || face == GL_FRONT_AND_BACK)\r
+               {\r
+                       context->setStencilBackParams(func, ref, mask);\r
+               }\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glStencilMask(GLuint mask)\r
 {\r
-    glStencilMaskSeparate(GL_FRONT_AND_BACK, mask);\r
+       glStencilMaskSeparate(GL_FRONT_AND_BACK, mask);\r
 }\r
 \r
 void GL_APIENTRY glStencilMaskSeparate(GLenum face, GLuint mask)\r
 {\r
-    TRACE("(GLenum face = 0x%X, GLuint mask = %d)", face, mask);\r
-\r
-    try\r
-    {\r
-        switch(face)\r
-        {\r
-          case GL_FRONT:\r
-          case GL_BACK:\r
-          case GL_FRONT_AND_BACK:\r
-            break;\r
-          default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            if(face == GL_FRONT || face == GL_FRONT_AND_BACK)\r
-            {\r
-                context->setStencilWritemask(mask);\r
-            }\r
-\r
-            if(face == GL_BACK || face == GL_FRONT_AND_BACK)\r
-            {\r
-                context->setStencilBackWritemask(mask);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLenum face = 0x%X, GLuint mask = %d)", face, mask);\r
+\r
+       switch(face)\r
+       {\r
+       case GL_FRONT:\r
+       case GL_BACK:\r
+       case GL_FRONT_AND_BACK:\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               if(face == GL_FRONT || face == GL_FRONT_AND_BACK)\r
+               {\r
+                       context->setStencilWritemask(mask);\r
+               }\r
+\r
+               if(face == GL_BACK || face == GL_FRONT_AND_BACK)\r
+               {\r
+                       context->setStencilBackWritemask(mask);\r
+               }\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glStencilOp(GLenum fail, GLenum zfail, GLenum zpass)\r
 {\r
-    glStencilOpSeparate(GL_FRONT_AND_BACK, fail, zfail, zpass);\r
+       glStencilOpSeparate(GL_FRONT_AND_BACK, fail, zfail, zpass);\r
 }\r
 \r
 void GL_APIENTRY glStencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass)\r
 {\r
-    TRACE("(GLenum face = 0x%X, GLenum fail = 0x%X, GLenum zfail = 0x%X, GLenum zpas = 0x%Xs)",\r
-          face, fail, zfail, zpass);\r
-\r
-    try\r
-    {\r
-        switch(face)\r
-        {\r
-          case GL_FRONT:\r
-          case GL_BACK:\r
-          case GL_FRONT_AND_BACK:\r
-            break;\r
-          default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        switch(fail)\r
-        {\r
-          case GL_ZERO:\r
-          case GL_KEEP:\r
-          case GL_REPLACE:\r
-          case GL_INCR:\r
-          case GL_DECR:\r
-          case GL_INVERT:\r
-          case GL_INCR_WRAP:\r
-          case GL_DECR_WRAP:\r
-            break;\r
-          default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        switch(zfail)\r
-        {\r
-          case GL_ZERO:\r
-          case GL_KEEP:\r
-          case GL_REPLACE:\r
-          case GL_INCR:\r
-          case GL_DECR:\r
-          case GL_INVERT:\r
-          case GL_INCR_WRAP:\r
-          case GL_DECR_WRAP:\r
-            break;\r
-          default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        switch(zpass)\r
-        {\r
-          case GL_ZERO:\r
-          case GL_KEEP:\r
-          case GL_REPLACE:\r
-          case GL_INCR:\r
-          case GL_DECR:\r
-          case GL_INVERT:\r
-          case GL_INCR_WRAP:\r
-          case GL_DECR_WRAP:\r
-            break;\r
-          default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            if(face == GL_FRONT || face == GL_FRONT_AND_BACK)\r
-            {\r
-                context->setStencilOperations(fail, zfail, zpass);\r
-            }\r
-\r
-            if(face == GL_BACK || face == GL_FRONT_AND_BACK)\r
-            {\r
-                context->setStencilBackOperations(fail, zfail, zpass);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLenum face = 0x%X, GLenum fail = 0x%X, GLenum zfail = 0x%X, GLenum zpas = 0x%Xs)",\r
+             face, fail, zfail, zpass);\r
+\r
+       switch(face)\r
+       {\r
+       case GL_FRONT:\r
+       case GL_BACK:\r
+       case GL_FRONT_AND_BACK:\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       switch(fail)\r
+       {\r
+       case GL_ZERO:\r
+       case GL_KEEP:\r
+       case GL_REPLACE:\r
+       case GL_INCR:\r
+       case GL_DECR:\r
+       case GL_INVERT:\r
+       case GL_INCR_WRAP:\r
+       case GL_DECR_WRAP:\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       switch(zfail)\r
+       {\r
+       case GL_ZERO:\r
+       case GL_KEEP:\r
+       case GL_REPLACE:\r
+       case GL_INCR:\r
+       case GL_DECR:\r
+       case GL_INVERT:\r
+       case GL_INCR_WRAP:\r
+       case GL_DECR_WRAP:\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       switch(zpass)\r
+       {\r
+       case GL_ZERO:\r
+       case GL_KEEP:\r
+       case GL_REPLACE:\r
+       case GL_INCR:\r
+       case GL_DECR:\r
+       case GL_INVERT:\r
+       case GL_INCR_WRAP:\r
+       case GL_DECR_WRAP:\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               if(face == GL_FRONT || face == GL_FRONT_AND_BACK)\r
+               {\r
+                       context->setStencilOperations(fail, zfail, zpass);\r
+               }\r
+\r
+               if(face == GL_BACK || face == GL_FRONT_AND_BACK)\r
+               {\r
+                       context->setStencilBackOperations(fail, zfail, zpass);\r
+               }\r
+       }\r
 }\r
 \r
 GLboolean GL_APIENTRY glTestFenceNV(GLuint fence)\r
 {\r
-    TRACE("(GLuint fence = %d)", fence);\r
+       TRACE("(GLuint fence = %d)", fence);\r
 \r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-            es2::Fence *fenceObject = context->getFence(fence);\r
+       if(context)\r
+       {\r
+               es2::Fence *fenceObject = context->getFence(fence);\r
 \r
-            if(fenceObject == NULL)\r
-            {\r
-                return error(GL_INVALID_OPERATION, GL_TRUE);\r
-            }\r
+               if(fenceObject == NULL)\r
+               {\r
+                       return error(GL_INVALID_OPERATION, GL_TRUE);\r
+               }\r
 \r
-            return fenceObject->testFence();\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        error(GL_OUT_OF_MEMORY);\r
-    }\r
+               return fenceObject->testFence();\r
+       }\r
 \r
-    return GL_TRUE;\r
+       return GL_TRUE;\r
 }\r
 \r
 void GL_APIENTRY glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,\r
                               GLint border, GLenum format, GLenum type, const GLvoid* pixels)\r
 {\r
-    TRACE("(GLenum target = 0x%X, GLint level = %d, GLint internalformat = %d, GLsizei width = %d, GLsizei height = %d, "\r
-          "GLint border = %d, GLenum format = 0x%X, GLenum type = 0x%X, const GLvoid* pixels =  0x%0.8p)",\r
-          target, level, internalformat, width, height, border, format, type, pixels);\r
-\r
-    try\r
-    {\r
-        if(!validImageSize(level, width, height))\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        if(internalformat != format)\r
-        {\r
-            return error(GL_INVALID_OPERATION);\r
-        }\r
-\r
-        switch(format)\r
-        {\r
-        case GL_ALPHA:\r
-        case GL_LUMINANCE:\r
-        case GL_LUMINANCE_ALPHA:\r
-            switch(type)\r
-            {\r
-            case GL_UNSIGNED_BYTE:\r
-            case GL_FLOAT:\r
-            case GL_HALF_FLOAT_OES:\r
-                break;\r
-            default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-            break;\r
-        case GL_RGB:\r
-            switch(type)\r
-            {\r
-            case GL_UNSIGNED_BYTE:\r
-            case GL_UNSIGNED_SHORT_5_6_5:\r
-            case GL_FLOAT:\r
-            case GL_HALF_FLOAT_OES:\r
-                break;\r
-            default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-            break;\r
-        case GL_RGBA:\r
-            switch(type)\r
-            {\r
-            case GL_UNSIGNED_BYTE:\r
-            case GL_UNSIGNED_SHORT_4_4_4_4:\r
-            case GL_UNSIGNED_SHORT_5_5_5_1:\r
-            case GL_FLOAT:\r
-            case GL_HALF_FLOAT_OES:\r
-                break;\r
-            default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-            break;\r
-        case GL_BGRA_EXT:\r
-            switch(type)\r
-            {\r
-            case GL_UNSIGNED_BYTE:\r
-                break;\r
-            default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-            break;\r
-        case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:  // error cases for compressed textures are handled below\r
-        case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:\r
-               case GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE:\r
-               case GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE:\r
-            break;\r
-               case GL_DEPTH_COMPONENT:\r
-                       switch(type)\r
+       TRACE("(GLenum target = 0x%X, GLint level = %d, GLint internalformat = %d, GLsizei width = %d, GLsizei height = %d, "\r
+             "GLint border = %d, GLenum format = 0x%X, GLenum type = 0x%X, const GLvoid* pixels =  0x%0.8p)",\r
+             target, level, internalformat, width, height, border, format, type, pixels);\r
+\r
+       if(!validImageSize(level, width, height))\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       if(internalformat != format)\r
+       {\r
+               return error(GL_INVALID_OPERATION);\r
+       }\r
+\r
+       switch(format)\r
+       {\r
+       case GL_ALPHA:\r
+       case GL_LUMINANCE:\r
+       case GL_LUMINANCE_ALPHA:\r
+               switch(type)\r
+               {\r
+               case GL_UNSIGNED_BYTE:\r
+               case GL_FLOAT:\r
+               case GL_HALF_FLOAT_OES:\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+               break;\r
+       case GL_RGB:\r
+               switch(type)\r
+               {\r
+               case GL_UNSIGNED_BYTE:\r
+               case GL_UNSIGNED_SHORT_5_6_5:\r
+               case GL_FLOAT:\r
+               case GL_HALF_FLOAT_OES:\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+               break;\r
+       case GL_RGBA:\r
+               switch(type)\r
+               {\r
+               case GL_UNSIGNED_BYTE:\r
+               case GL_UNSIGNED_SHORT_4_4_4_4:\r
+               case GL_UNSIGNED_SHORT_5_5_5_1:\r
+               case GL_FLOAT:\r
+               case GL_HALF_FLOAT_OES:\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+               break;\r
+       case GL_BGRA_EXT:\r
+               switch(type)\r
+               {\r
+               case GL_UNSIGNED_BYTE:\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+               break;\r
+       case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:  // error cases for compressed textures are handled below\r
+       case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:\r
+       case GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE:\r
+       case GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE:\r
+               break;\r
+       case GL_DEPTH_COMPONENT:\r
+               switch(type)\r
+               {\r
+               case GL_UNSIGNED_SHORT:\r
+               case GL_UNSIGNED_INT:\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+               break;\r
+       case GL_DEPTH_STENCIL_OES:\r
+               switch(type)\r
+               {\r
+               case GL_UNSIGNED_INT_24_8_OES:\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       if(border != 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               switch(target)\r
+               {\r
+                       case GL_TEXTURE_2D:\r
+                       if(width > (es2::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level) ||\r
+                          height > (es2::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level))\r
                        {\r
-                       case GL_UNSIGNED_SHORT:\r
-                       case GL_UNSIGNED_INT:\r
-                               break;\r
-                       default:\r
-                               return error(GL_INVALID_ENUM);\r
+                               return error(GL_INVALID_VALUE);\r
                        }\r
                        break;\r
-               case GL_DEPTH_STENCIL_OES:\r
-                       switch(type)\r
+                       case GL_TEXTURE_CUBE_MAP_POSITIVE_X:\r
+                       case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:\r
+                       case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:\r
+                       case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:\r
+                       case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:\r
+                       case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:\r
+                       if(width != height)\r
                        {\r
-                       case GL_UNSIGNED_INT_24_8_OES:\r
-                               break;\r
+                               return error(GL_INVALID_VALUE);\r
+                       }\r
+\r
+                       if(width > (es2::IMPLEMENTATION_MAX_CUBE_MAP_TEXTURE_SIZE >> level) ||\r
+                          height > (es2::IMPLEMENTATION_MAX_CUBE_MAP_TEXTURE_SIZE >> level))\r
+                       {\r
+                               return error(GL_INVALID_VALUE);\r
+                       }\r
+                       break;\r
                        default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+\r
+               if(format == GL_COMPRESSED_RGB_S3TC_DXT1_EXT ||\r
+                  format == GL_COMPRESSED_RGBA_S3TC_DXT1_EXT ||\r
+                  format == GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE ||\r
+                  format == GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE)\r
+               {\r
+                       if(S3TC_SUPPORT)\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+                       else\r
+                       {\r
                                return error(GL_INVALID_ENUM);\r
                        }\r
-                       break;\r
-        default:\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        if(border != 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            switch(target)\r
-            {\r
-              case GL_TEXTURE_2D:\r
-                if(width > (es2::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level) ||\r
-                   height > (es2::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level))\r
-                {\r
-                    return error(GL_INVALID_VALUE);\r
-                }\r
-                break;\r
-              case GL_TEXTURE_CUBE_MAP_POSITIVE_X:\r
-              case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:\r
-              case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:\r
-              case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:\r
-              case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:\r
-              case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:\r
-                if(width != height)\r
-                {\r
-                    return error(GL_INVALID_VALUE);\r
-                }\r
-\r
-                if(width > (es2::IMPLEMENTATION_MAX_CUBE_MAP_TEXTURE_SIZE >> level) ||\r
-                   height > (es2::IMPLEMENTATION_MAX_CUBE_MAP_TEXTURE_SIZE >> level))\r
-                {\r
-                    return error(GL_INVALID_VALUE);\r
-                }\r
-                break;\r
-              default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-\r
-            if(format == GL_COMPRESSED_RGB_S3TC_DXT1_EXT ||\r
-               format == GL_COMPRESSED_RGBA_S3TC_DXT1_EXT ||\r
-                          format == GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE ||\r
-                          format == GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE)\r
-            {\r
-                if(S3TC_SUPPORT)\r
-                {\r
-                    return error(GL_INVALID_OPERATION);\r
-                }\r
-                else\r
-                {\r
-                    return error(GL_INVALID_ENUM);\r
-                }\r
-            }\r
-\r
-            if(target == GL_TEXTURE_2D)\r
-            {\r
-                es2::Texture2D *texture = context->getTexture2D();\r
-\r
-                if(!texture)\r
-                {\r
-                    return error(GL_INVALID_OPERATION);\r
-                }\r
-\r
-                texture->setImage(level, width, height, format, type, context->getUnpackAlignment(), pixels);\r
-            }\r
-            else\r
-            {\r
-                es2::TextureCubeMap *texture = context->getTextureCubeMap();\r
-\r
-                if(!texture)\r
-                {\r
-                    return error(GL_INVALID_OPERATION);\r
-                }\r
-\r
-                               texture->setImage(target, level, width, height, format, type, context->getUnpackAlignment(), pixels);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+               }\r
+\r
+               if(target == GL_TEXTURE_2D)\r
+               {\r
+                       es2::Texture2D *texture = context->getTexture2D();\r
+\r
+                       if(!texture)\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+\r
+                       texture->setImage(level, width, height, format, type, context->getUnpackAlignment(), pixels);\r
+               }\r
+               else\r
+               {\r
+                       es2::TextureCubeMap *texture = context->getTextureCubeMap();\r
+\r
+                       if(!texture)\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+\r
+                       texture->setImage(target, level, width, height, format, type, context->getUnpackAlignment(), pixels);\r
+               }\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glTexParameterf(GLenum target, GLenum pname, GLfloat param)\r
 {\r
-    TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLfloat param = %f)", target, pname, param);\r
-\r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            es2::Texture *texture;\r
-\r
-            switch(target)\r
-            {\r
-            case GL_TEXTURE_2D:\r
-                texture = context->getTexture2D();\r
-                break;\r
-            case GL_TEXTURE_CUBE_MAP:\r
-                texture = context->getTextureCubeMap();\r
-                break;\r
-            case GL_TEXTURE_EXTERNAL_OES:\r
-                texture = context->getTextureExternal();\r
-                break;\r
-            default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-\r
-            switch(pname)\r
-            {\r
-            case GL_TEXTURE_WRAP_S:\r
-                if(!texture->setWrapS((GLenum)param))\r
-                {\r
-                    return error(GL_INVALID_ENUM);\r
-                }\r
-                break;\r
-            case GL_TEXTURE_WRAP_T:\r
-                if(!texture->setWrapT((GLenum)param))\r
-                {\r
-                    return error(GL_INVALID_ENUM);\r
-                }\r
-                break;\r
-            case GL_TEXTURE_MIN_FILTER:\r
-                if(!texture->setMinFilter((GLenum)param))\r
-                {\r
-                    return error(GL_INVALID_ENUM);\r
-                }\r
-                break;\r
-            case GL_TEXTURE_MAG_FILTER:\r
-                if(!texture->setMagFilter((GLenum)param))\r
-                {\r
-                    return error(GL_INVALID_ENUM);\r
-                }\r
-                break;\r
-            case GL_TEXTURE_MAX_ANISOTROPY_EXT:\r
-                if(!texture->setMaxAnisotropy(param))\r
-                {\r
-                    return error(GL_INVALID_VALUE);\r
-                }\r
-                break;\r
-            default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLfloat param = %f)", target, pname, param);\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               es2::Texture *texture;\r
+\r
+               switch(target)\r
+               {\r
+               case GL_TEXTURE_2D:\r
+                       texture = context->getTexture2D();\r
+                       break;\r
+               case GL_TEXTURE_CUBE_MAP:\r
+                       texture = context->getTextureCubeMap();\r
+                       break;\r
+               case GL_TEXTURE_EXTERNAL_OES:\r
+                       texture = context->getTextureExternal();\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+\r
+               switch(pname)\r
+               {\r
+               case GL_TEXTURE_WRAP_S:\r
+                       if(!texture->setWrapS((GLenum)param))\r
+                       {\r
+                               return error(GL_INVALID_ENUM);\r
+                       }\r
+                       break;\r
+               case GL_TEXTURE_WRAP_T:\r
+                       if(!texture->setWrapT((GLenum)param))\r
+                       {\r
+                               return error(GL_INVALID_ENUM);\r
+                       }\r
+                       break;\r
+               case GL_TEXTURE_MIN_FILTER:\r
+                       if(!texture->setMinFilter((GLenum)param))\r
+                       {\r
+                               return error(GL_INVALID_ENUM);\r
+                       }\r
+                       break;\r
+               case GL_TEXTURE_MAG_FILTER:\r
+                       if(!texture->setMagFilter((GLenum)param))\r
+                       {\r
+                               return error(GL_INVALID_ENUM);\r
+                       }\r
+                       break;\r
+               case GL_TEXTURE_MAX_ANISOTROPY_EXT:\r
+                       if(!texture->setMaxAnisotropy(param))\r
+                       {\r
+                               return error(GL_INVALID_VALUE);\r
+                       }\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glTexParameterfv(GLenum target, GLenum pname, const GLfloat* params)\r
 {\r
-    glTexParameterf(target, pname, *params);\r
+       glTexParameterf(target, pname, *params);\r
 }\r
 \r
 void GL_APIENTRY glTexParameteri(GLenum target, GLenum pname, GLint param)\r
 {\r
-    TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint param = %d)", target, pname, param);\r
-\r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            es2::Texture *texture;\r
-\r
-            switch(target)\r
-            {\r
-            case GL_TEXTURE_2D:\r
-                texture = context->getTexture2D();\r
-                break;\r
-            case GL_TEXTURE_CUBE_MAP:\r
-                texture = context->getTextureCubeMap();\r
-                break;\r
-            case GL_TEXTURE_EXTERNAL_OES:\r
-                  texture = context->getTextureExternal();\r
-                  break;\r
-            default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-\r
-            switch(pname)\r
-            {\r
-            case GL_TEXTURE_WRAP_S:\r
-                if(!texture->setWrapS((GLenum)param))\r
-                {\r
-                    return error(GL_INVALID_ENUM);\r
-                }\r
-                break;\r
-            case GL_TEXTURE_WRAP_T:\r
-                if(!texture->setWrapT((GLenum)param))\r
-                {\r
-                    return error(GL_INVALID_ENUM);\r
-                }\r
-                break;\r
-            case GL_TEXTURE_MIN_FILTER:\r
-                if(!texture->setMinFilter((GLenum)param))\r
-                {\r
-                    return error(GL_INVALID_ENUM);\r
-                }\r
-                break;\r
-            case GL_TEXTURE_MAG_FILTER:\r
-                if(!texture->setMagFilter((GLenum)param))\r
-                {\r
-                    return error(GL_INVALID_ENUM);\r
-                }\r
-                break;\r
-                       case GL_TEXTURE_MAX_ANISOTROPY_EXT:\r
-                if(!texture->setMaxAnisotropy((GLfloat)param))\r
-                {\r
-                    return error(GL_INVALID_VALUE);\r
-                }\r
-                break;\r
-            default:\r
-                return error(GL_INVALID_ENUM);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLenum target = 0x%X, GLenum pname = 0x%X, GLint param = %d)", target, pname, param);\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               es2::Texture *texture;\r
+\r
+               switch(target)\r
+               {\r
+               case GL_TEXTURE_2D:\r
+                       texture = context->getTexture2D();\r
+                       break;\r
+               case GL_TEXTURE_CUBE_MAP:\r
+                       texture = context->getTextureCubeMap();\r
+                       break;\r
+               case GL_TEXTURE_EXTERNAL_OES:\r
+                               texture = context->getTextureExternal();\r
+                               break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+\r
+               switch(pname)\r
+               {\r
+               case GL_TEXTURE_WRAP_S:\r
+                       if(!texture->setWrapS((GLenum)param))\r
+                       {\r
+                               return error(GL_INVALID_ENUM);\r
+                       }\r
+                       break;\r
+               case GL_TEXTURE_WRAP_T:\r
+                       if(!texture->setWrapT((GLenum)param))\r
+                       {\r
+                               return error(GL_INVALID_ENUM);\r
+                       }\r
+                       break;\r
+               case GL_TEXTURE_MIN_FILTER:\r
+                       if(!texture->setMinFilter((GLenum)param))\r
+                       {\r
+                               return error(GL_INVALID_ENUM);\r
+                       }\r
+                       break;\r
+               case GL_TEXTURE_MAG_FILTER:\r
+                       if(!texture->setMagFilter((GLenum)param))\r
+                       {\r
+                               return error(GL_INVALID_ENUM);\r
+                       }\r
+                       break;\r
+               case GL_TEXTURE_MAX_ANISOTROPY_EXT:\r
+                       if(!texture->setMaxAnisotropy((GLfloat)param))\r
+                       {\r
+                               return error(GL_INVALID_VALUE);\r
+                       }\r
+                       break;\r
+               default:\r
+                       return error(GL_INVALID_ENUM);\r
+               }\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glTexParameteriv(GLenum target, GLenum pname, const GLint* params)\r
 {\r
-    glTexParameteri(target, pname, *params);\r
+       glTexParameteri(target, pname, *params);\r
 }\r
 \r
 void GL_APIENTRY glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,\r
-                               GLenum format, GLenum type, const GLvoid* pixels)\r
-{\r
-    TRACE("(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "\r
-          "GLsizei width = %d, GLsizei height = %d, GLenum format = 0x%X, GLenum type = 0x%X, "\r
-          "const GLvoid* pixels = 0x%0.8p)",\r
-           target, level, xoffset, yoffset, width, height, format, type, pixels);\r
-\r
-    try\r
-    {\r
-        if(!es2::IsTextureTarget(target))\r
-        {\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        if(level < 0 || xoffset < 0 || yoffset < 0 || width < 0 || height < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        if(std::numeric_limits<GLsizei>::max() - xoffset < width || std::numeric_limits<GLsizei>::max() - yoffset < height)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        if(!es2::CheckTextureFormatType(format, type))\r
-        {\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        if(width == 0 || height == 0 || pixels == NULL)\r
-        {\r
-            return;\r
-        }\r
-\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            if(level > es2::IMPLEMENTATION_MAX_TEXTURE_LEVELS)\r
-            {\r
-                return error(GL_INVALID_VALUE);\r
-            }\r
-\r
-            if(target == GL_TEXTURE_2D)\r
-            {\r
-                es2::Texture2D *texture = context->getTexture2D();\r
-\r
-                if(validateSubImageParams(false, width, height, xoffset, yoffset, target, level, format, texture))\r
-                               {\r
-                                       texture->subImage(level, xoffset, yoffset, width, height, format, type, context->getUnpackAlignment(), pixels);\r
-                               }\r
-            }\r
-            else if(es2::IsCubemapTextureTarget(target))\r
-            {\r
-                es2::TextureCubeMap *texture = context->getTextureCubeMap();\r
+                                 GLenum format, GLenum type, const GLvoid* pixels)\r
+{\r
+       TRACE("(GLenum target = 0x%X, GLint level = %d, GLint xoffset = %d, GLint yoffset = %d, "\r
+             "GLsizei width = %d, GLsizei height = %d, GLenum format = 0x%X, GLenum type = 0x%X, "\r
+             "const GLvoid* pixels = 0x%0.8p)",\r
+             target, level, xoffset, yoffset, width, height, format, type, pixels);\r
 \r
-                               if(validateSubImageParams(false, width, height, xoffset, yoffset, target, level, format, texture))\r
-                               {\r
-                                       texture->subImage(target, level, xoffset, yoffset, width, height, format, type, context->getUnpackAlignment(), pixels);\r
-                               }\r
-            }\r
-            else\r
-            {\r
-                UNREACHABLE();\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(!es2::IsTextureTarget(target))\r
+       {\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       if(level < 0 || xoffset < 0 || yoffset < 0 || width < 0 || height < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       if(std::numeric_limits<GLsizei>::max() - xoffset < width || std::numeric_limits<GLsizei>::max() - yoffset < height)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       if(!es2::CheckTextureFormatType(format, type))\r
+       {\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       if(width == 0 || height == 0 || pixels == NULL)\r
+       {\r
+               return;\r
+       }\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               if(level > es2::IMPLEMENTATION_MAX_TEXTURE_LEVELS)\r
+               {\r
+                       return error(GL_INVALID_VALUE);\r
+               }\r
+\r
+               if(target == GL_TEXTURE_2D)\r
+               {\r
+                       es2::Texture2D *texture = context->getTexture2D();\r
+\r
+                       if(validateSubImageParams(false, width, height, xoffset, yoffset, target, level, format, texture))\r
+                       {\r
+                               texture->subImage(level, xoffset, yoffset, width, height, format, type, context->getUnpackAlignment(), pixels);\r
+                       }\r
+               }\r
+               else if(es2::IsCubemapTextureTarget(target))\r
+               {\r
+                       es2::TextureCubeMap *texture = context->getTextureCubeMap();\r
+\r
+                       if(validateSubImageParams(false, width, height, xoffset, yoffset, target, level, format, texture))\r
+                       {\r
+                               texture->subImage(target, level, xoffset, yoffset, width, height, format, type, context->getUnpackAlignment(), pixels);\r
+                       }\r
+               }\r
+               else\r
+               {\r
+                       UNREACHABLE();\r
+               }\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glUniform1f(GLint location, GLfloat x)\r
 {\r
-    glUniform1fv(location, 1, &x);\r
+       glUniform1fv(location, 1, &x);\r
 }\r
 \r
 void GL_APIENTRY glUniform1fv(GLint location, GLsizei count, const GLfloat* v)\r
 {\r
-    TRACE("(GLint location = %d, GLsizei count = %d, const GLfloat* v = 0x%0.8p)", location, count, v);\r
+       TRACE("(GLint location = %d, GLsizei count = %d, const GLfloat* v = 0x%0.8p)", location, count, v);\r
 \r
-    try\r
-    {\r
-        if(count < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+       if(count < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-        if(location == -1)\r
-        {\r
-            return;\r
-        }\r
+       if(location == -1)\r
+       {\r
+               return;\r
+       }\r
 \r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-            es2::Program *program = context->getCurrentProgram();\r
+       if(context)\r
+       {\r
+               es2::Program *program = context->getCurrentProgram();\r
 \r
-            if(!program)\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
+               if(!program)\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
 \r
-            if(!program->setUniform1fv(location, count, v))\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+               if(!program->setUniform1fv(location, count, v))\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glUniform1i(GLint location, GLint x)\r
 {\r
-    glUniform1iv(location, 1, &x);\r
+       glUniform1iv(location, 1, &x);\r
 }\r
 \r
 void GL_APIENTRY glUniform1iv(GLint location, GLsizei count, const GLint* v)\r
 {\r
-    TRACE("(GLint location = %d, GLsizei count = %d, const GLint* v = 0x%0.8p)", location, count, v);\r
+       TRACE("(GLint location = %d, GLsizei count = %d, const GLint* v = 0x%0.8p)", location, count, v);\r
 \r
-    try\r
-    {\r
-        if(count < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+       if(count < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-        if(location == -1)\r
-        {\r
-            return;\r
-        }\r
+       if(location == -1)\r
+       {\r
+               return;\r
+       }\r
 \r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-            es2::Program *program = context->getCurrentProgram();\r
+       if(context)\r
+       {\r
+               es2::Program *program = context->getCurrentProgram();\r
 \r
-            if(!program)\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
+               if(!program)\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
 \r
-            if(!program->setUniform1iv(location, count, v))\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+               if(!program->setUniform1iv(location, count, v))\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glUniform2f(GLint location, GLfloat x, GLfloat y)\r
 {\r
-    GLfloat xy[2] = {x, y};\r
+       GLfloat xy[2] = {x, y};\r
 \r
-    glUniform2fv(location, 1, (GLfloat*)&xy);\r
+       glUniform2fv(location, 1, (GLfloat*)&xy);\r
 }\r
 \r
 void GL_APIENTRY glUniform2fv(GLint location, GLsizei count, const GLfloat* v)\r
 {\r
-    TRACE("(GLint location = %d, GLsizei count = %d, const GLfloat* v = 0x%0.8p)", location, count, v);\r
+       TRACE("(GLint location = %d, GLsizei count = %d, const GLfloat* v = 0x%0.8p)", location, count, v);\r
 \r
-    try\r
-    {\r
-        if(count < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+       if(count < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-        if(location == -1)\r
-        {\r
-            return;\r
-        }\r
+       if(location == -1)\r
+       {\r
+               return;\r
+       }\r
 \r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-            es2::Program *program = context->getCurrentProgram();\r
+       if(context)\r
+       {\r
+               es2::Program *program = context->getCurrentProgram();\r
 \r
-            if(!program)\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
+               if(!program)\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
 \r
-            if(!program->setUniform2fv(location, count, v))\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+               if(!program->setUniform2fv(location, count, v))\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glUniform2i(GLint location, GLint x, GLint y)\r
 {\r
-    GLint xy[4] = {x, y};\r
+       GLint xy[4] = {x, y};\r
 \r
-    glUniform2iv(location, 1, (GLint*)&xy);\r
+       glUniform2iv(location, 1, (GLint*)&xy);\r
 }\r
 \r
 void GL_APIENTRY glUniform2iv(GLint location, GLsizei count, const GLint* v)\r
 {\r
-    TRACE("(GLint location = %d, GLsizei count = %d, const GLint* v = 0x%0.8p)", location, count, v);\r
+       TRACE("(GLint location = %d, GLsizei count = %d, const GLint* v = 0x%0.8p)", location, count, v);\r
 \r
-    try\r
-    {\r
-        if(count < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+       if(count < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-        if(location == -1)\r
-        {\r
-            return;\r
-        }\r
+       if(location == -1)\r
+       {\r
+               return;\r
+       }\r
 \r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-            es2::Program *program = context->getCurrentProgram();\r
+       if(context)\r
+       {\r
+               es2::Program *program = context->getCurrentProgram();\r
 \r
-            if(!program)\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
+               if(!program)\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
 \r
-            if(!program->setUniform2iv(location, count, v))\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+               if(!program->setUniform2iv(location, count, v))\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glUniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z)\r
 {\r
-    GLfloat xyz[3] = {x, y, z};\r
+       GLfloat xyz[3] = {x, y, z};\r
 \r
-    glUniform3fv(location, 1, (GLfloat*)&xyz);\r
+       glUniform3fv(location, 1, (GLfloat*)&xyz);\r
 }\r
 \r
 void GL_APIENTRY glUniform3fv(GLint location, GLsizei count, const GLfloat* v)\r
 {\r
-    TRACE("(GLint location = %d, GLsizei count = %d, const GLfloat* v = 0x%0.8p)", location, count, v);\r
+       TRACE("(GLint location = %d, GLsizei count = %d, const GLfloat* v = 0x%0.8p)", location, count, v);\r
 \r
-    try\r
-    {\r
-        if(count < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+       if(count < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-        if(location == -1)\r
-        {\r
-            return;\r
-        }\r
+       if(location == -1)\r
+       {\r
+               return;\r
+       }\r
 \r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-            es2::Program *program = context->getCurrentProgram();\r
+       if(context)\r
+       {\r
+               es2::Program *program = context->getCurrentProgram();\r
 \r
-            if(!program)\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
+               if(!program)\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
 \r
-            if(!program->setUniform3fv(location, count, v))\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+               if(!program->setUniform3fv(location, count, v))\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glUniform3i(GLint location, GLint x, GLint y, GLint z)\r
 {\r
-    GLint xyz[3] = {x, y, z};\r
+       GLint xyz[3] = {x, y, z};\r
 \r
-    glUniform3iv(location, 1, (GLint*)&xyz);\r
+       glUniform3iv(location, 1, (GLint*)&xyz);\r
 }\r
 \r
 void GL_APIENTRY glUniform3iv(GLint location, GLsizei count, const GLint* v)\r
 {\r
-    TRACE("(GLint location = %d, GLsizei count = %d, const GLint* v = 0x%0.8p)", location, count, v);\r
+       TRACE("(GLint location = %d, GLsizei count = %d, const GLint* v = 0x%0.8p)", location, count, v);\r
 \r
-    try\r
-    {\r
-        if(count < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+       if(count < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-        if(location == -1)\r
-        {\r
-            return;\r
-        }\r
+       if(location == -1)\r
+       {\r
+               return;\r
+       }\r
 \r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-            es2::Program *program = context->getCurrentProgram();\r
+       if(context)\r
+       {\r
+               es2::Program *program = context->getCurrentProgram();\r
 \r
-            if(!program)\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
+               if(!program)\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
 \r
-            if(!program->setUniform3iv(location, count, v))\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+               if(!program->setUniform3iv(location, count, v))\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glUniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)\r
 {\r
-    GLfloat xyzw[4] = {x, y, z, w};\r
+       GLfloat xyzw[4] = {x, y, z, w};\r
 \r
-    glUniform4fv(location, 1, (GLfloat*)&xyzw);\r
+       glUniform4fv(location, 1, (GLfloat*)&xyzw);\r
 }\r
 \r
 void GL_APIENTRY glUniform4fv(GLint location, GLsizei count, const GLfloat* v)\r
 {\r
-    TRACE("(GLint location = %d, GLsizei count = %d, const GLfloat* v = 0x%0.8p)", location, count, v);\r
+       TRACE("(GLint location = %d, GLsizei count = %d, const GLfloat* v = 0x%0.8p)", location, count, v);\r
 \r
-    try\r
-    {\r
-        if(count < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+       if(count < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-        if(location == -1)\r
-        {\r
-            return;\r
-        }\r
+       if(location == -1)\r
+       {\r
+               return;\r
+       }\r
 \r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-            es2::Program *program = context->getCurrentProgram();\r
+       if(context)\r
+       {\r
+               es2::Program *program = context->getCurrentProgram();\r
 \r
-            if(!program)\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
+               if(!program)\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
 \r
-            if(!program->setUniform4fv(location, count, v))\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+               if(!program->setUniform4fv(location, count, v))\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glUniform4i(GLint location, GLint x, GLint y, GLint z, GLint w)\r
 {\r
-    GLint xyzw[4] = {x, y, z, w};\r
+       GLint xyzw[4] = {x, y, z, w};\r
 \r
-    glUniform4iv(location, 1, (GLint*)&xyzw);\r
+       glUniform4iv(location, 1, (GLint*)&xyzw);\r
 }\r
 \r
 void GL_APIENTRY glUniform4iv(GLint location, GLsizei count, const GLint* v)\r
 {\r
-    TRACE("(GLint location = %d, GLsizei count = %d, const GLint* v = 0x%0.8p)", location, count, v);\r
+       TRACE("(GLint location = %d, GLsizei count = %d, const GLint* v = 0x%0.8p)", location, count, v);\r
 \r
-    try\r
-    {\r
-        if(count < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+       if(count < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-        if(location == -1)\r
-        {\r
-            return;\r
-        }\r
+       if(location == -1)\r
+       {\r
+               return;\r
+       }\r
 \r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-            es2::Program *program = context->getCurrentProgram();\r
+       if(context)\r
+       {\r
+               es2::Program *program = context->getCurrentProgram();\r
 \r
-            if(!program)\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
+               if(!program)\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
 \r
-            if(!program->setUniform4iv(location, count, v))\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+               if(!program->setUniform4iv(location, count, v))\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)\r
 {\r
-    TRACE("(GLint location = %d, GLsizei count = %d, GLboolean transpose = %d, const GLfloat* value = 0x%0.8p)",\r
-          location, count, transpose, value);\r
+       TRACE("(GLint location = %d, GLsizei count = %d, GLboolean transpose = %d, const GLfloat* value = 0x%0.8p)",\r
+             location, count, transpose, value);\r
 \r
-    try\r
-    {\r
-        if(count < 0 || transpose != GL_FALSE)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+       if(count < 0 || transpose != GL_FALSE)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-        if(location == -1)\r
-        {\r
-            return;\r
-        }\r
+       if(location == -1)\r
+       {\r
+               return;\r
+       }\r
 \r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-            es2::Program *program = context->getCurrentProgram();\r
+       if(context)\r
+       {\r
+               es2::Program *program = context->getCurrentProgram();\r
 \r
-            if(!program)\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
+               if(!program)\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
 \r
-            if(!program->setUniformMatrix2fv(location, count, value))\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+               if(!program->setUniformMatrix2fv(location, count, value))\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)\r
 {\r
-    TRACE("(GLint location = %d, GLsizei count = %d, GLboolean transpose = %d, const GLfloat* value = 0x%0.8p)",\r
-          location, count, transpose, value);\r
+       TRACE("(GLint location = %d, GLsizei count = %d, GLboolean transpose = %d, const GLfloat* value = 0x%0.8p)",\r
+             location, count, transpose, value);\r
 \r
-    try\r
-    {\r
-        if(count < 0 || transpose != GL_FALSE)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+       if(count < 0 || transpose != GL_FALSE)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-        if(location == -1)\r
-        {\r
-            return;\r
-        }\r
+       if(location == -1)\r
+       {\r
+               return;\r
+       }\r
 \r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-            es2::Program *program = context->getCurrentProgram();\r
+       if(context)\r
+       {\r
+               es2::Program *program = context->getCurrentProgram();\r
 \r
-            if(!program)\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
+               if(!program)\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
 \r
-            if(!program->setUniformMatrix3fv(location, count, value))\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+               if(!program->setUniformMatrix3fv(location, count, value))\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)\r
 {\r
-    TRACE("(GLint location = %d, GLsizei count = %d, GLboolean transpose = %d, const GLfloat* value = 0x%0.8p)",\r
-          location, count, transpose, value);\r
+       TRACE("(GLint location = %d, GLsizei count = %d, GLboolean transpose = %d, const GLfloat* value = 0x%0.8p)",\r
+             location, count, transpose, value);\r
 \r
-    try\r
-    {\r
-        if(count < 0 || transpose != GL_FALSE)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+       if(count < 0 || transpose != GL_FALSE)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-        if(location == -1)\r
-        {\r
-            return;\r
-        }\r
+       if(location == -1)\r
+       {\r
+               return;\r
+       }\r
 \r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-            es2::Program *program = context->getCurrentProgram();\r
+       if(context)\r
+       {\r
+               es2::Program *program = context->getCurrentProgram();\r
 \r
-            if(!program)\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
+               if(!program)\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
 \r
-            if(!program->setUniformMatrix4fv(location, count, value))\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+               if(!program->setUniformMatrix4fv(location, count, value))\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glUseProgram(GLuint program)\r
 {\r
-    TRACE("(GLuint program = %d)", program);\r
-\r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            es2::Program *programObject = context->getProgram(program);\r
-\r
-            if(!programObject && program != 0)\r
-            {\r
-                if(context->getShader(program))\r
-                {\r
-                    return error(GL_INVALID_OPERATION);\r
-                }\r
-                else\r
-                {\r
-                    return error(GL_INVALID_VALUE);\r
-                }\r
-            }\r
-\r
-            if(program != 0 && !programObject->isLinked())\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-\r
-            context->useProgram(program);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLuint program = %d)", program);\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               es2::Program *programObject = context->getProgram(program);\r
+\r
+               if(!programObject && program != 0)\r
+               {\r
+                       if(context->getShader(program))\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+                       else\r
+                       {\r
+                               return error(GL_INVALID_VALUE);\r
+                       }\r
+               }\r
+\r
+               if(program != 0 && !programObject->isLinked())\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
+\r
+               context->useProgram(program);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glValidateProgram(GLuint program)\r
 {\r
-    TRACE("(GLuint program = %d)", program);\r
-\r
-    try\r
-    {\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            es2::Program *programObject = context->getProgram(program);\r
-\r
-            if(!programObject)\r
-            {\r
-                if(context->getShader(program))\r
-                {\r
-                    return error(GL_INVALID_OPERATION);\r
-                }\r
-                else\r
-                {\r
-                    return error(GL_INVALID_VALUE);\r
-                }\r
-            }\r
-\r
-            programObject->validate();\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLuint program = %d)", program);\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               es2::Program *programObject = context->getProgram(program);\r
+\r
+               if(!programObject)\r
+               {\r
+                       if(context->getShader(program))\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+                       else\r
+                       {\r
+                               return error(GL_INVALID_VALUE);\r
+                       }\r
+               }\r
+\r
+               programObject->validate();\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glVertexAttrib1f(GLuint index, GLfloat x)\r
 {\r
-    TRACE("(GLuint index = %d, GLfloat x = %f)", index, x);\r
+       TRACE("(GLuint index = %d, GLfloat x = %f)", index, x);\r
 \r
-    try\r
-    {\r
-        if(index >= es2::MAX_VERTEX_ATTRIBS)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+       if(index >= es2::MAX_VERTEX_ATTRIBS)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-            GLfloat vals[4] = { x, 0, 0, 1 };\r
-            context->setVertexAttrib(index, vals);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               GLfloat vals[4] = { x, 0, 0, 1 };\r
+               context->setVertexAttrib(index, vals);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glVertexAttrib1fv(GLuint index, const GLfloat* values)\r
 {\r
-    TRACE("(GLuint index = %d, const GLfloat* values = 0x%0.8p)", index, values);\r
+       TRACE("(GLuint index = %d, const GLfloat* values = 0x%0.8p)", index, values);\r
 \r
-    try\r
-    {\r
-        if(index >= es2::MAX_VERTEX_ATTRIBS)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+       if(index >= es2::MAX_VERTEX_ATTRIBS)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-            GLfloat vals[4] = { values[0], 0, 0, 1 };\r
-            context->setVertexAttrib(index, vals);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               GLfloat vals[4] = { values[0], 0, 0, 1 };\r
+               context->setVertexAttrib(index, vals);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glVertexAttrib2f(GLuint index, GLfloat x, GLfloat y)\r
 {\r
-    TRACE("(GLuint index = %d, GLfloat x = %f, GLfloat y = %f)", index, x, y);\r
+       TRACE("(GLuint index = %d, GLfloat x = %f, GLfloat y = %f)", index, x, y);\r
 \r
-    try\r
-    {\r
-        if(index >= es2::MAX_VERTEX_ATTRIBS)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+       if(index >= es2::MAX_VERTEX_ATTRIBS)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-            GLfloat vals[4] = { x, y, 0, 1 };\r
-            context->setVertexAttrib(index, vals);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               GLfloat vals[4] = { x, y, 0, 1 };\r
+               context->setVertexAttrib(index, vals);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glVertexAttrib2fv(GLuint index, const GLfloat* values)\r
 {\r
-    TRACE("(GLuint index = %d, const GLfloat* values = 0x%0.8p)", index, values);\r
+       TRACE("(GLuint index = %d, const GLfloat* values = 0x%0.8p)", index, values);\r
 \r
-    try\r
-    {\r
-        if(index >= es2::MAX_VERTEX_ATTRIBS)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+       if(index >= es2::MAX_VERTEX_ATTRIBS)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-            GLfloat vals[4] = { values[0], values[1], 0, 1 };\r
-            context->setVertexAttrib(index, vals);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               GLfloat vals[4] = { values[0], values[1], 0, 1 };\r
+               context->setVertexAttrib(index, vals);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glVertexAttrib3f(GLuint index, GLfloat x, GLfloat y, GLfloat z)\r
 {\r
-    TRACE("(GLuint index = %d, GLfloat x = %f, GLfloat y = %f, GLfloat z = %f)", index, x, y, z);\r
+       TRACE("(GLuint index = %d, GLfloat x = %f, GLfloat y = %f, GLfloat z = %f)", index, x, y, z);\r
 \r
-    try\r
-    {\r
-        if(index >= es2::MAX_VERTEX_ATTRIBS)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+       if(index >= es2::MAX_VERTEX_ATTRIBS)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-            GLfloat vals[4] = { x, y, z, 1 };\r
-            context->setVertexAttrib(index, vals);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               GLfloat vals[4] = { x, y, z, 1 };\r
+               context->setVertexAttrib(index, vals);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glVertexAttrib3fv(GLuint index, const GLfloat* values)\r
 {\r
-    TRACE("(GLuint index = %d, const GLfloat* values = 0x%0.8p)", index, values);\r
+       TRACE("(GLuint index = %d, const GLfloat* values = 0x%0.8p)", index, values);\r
 \r
-    try\r
-    {\r
-        if(index >= es2::MAX_VERTEX_ATTRIBS)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+       if(index >= es2::MAX_VERTEX_ATTRIBS)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-            GLfloat vals[4] = { values[0], values[1], values[2], 1 };\r
-            context->setVertexAttrib(index, vals);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               GLfloat vals[4] = { values[0], values[1], values[2], 1 };\r
+               context->setVertexAttrib(index, vals);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glVertexAttrib4f(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w)\r
 {\r
-    TRACE("(GLuint index = %d, GLfloat x = %f, GLfloat y = %f, GLfloat z = %f, GLfloat w = %f)", index, x, y, z, w);\r
+       TRACE("(GLuint index = %d, GLfloat x = %f, GLfloat y = %f, GLfloat z = %f, GLfloat w = %f)", index, x, y, z, w);\r
 \r
-    try\r
-    {\r
-        if(index >= es2::MAX_VERTEX_ATTRIBS)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+       if(index >= es2::MAX_VERTEX_ATTRIBS)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-            GLfloat vals[4] = { x, y, z, w };\r
-            context->setVertexAttrib(index, vals);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               GLfloat vals[4] = { x, y, z, w };\r
+               context->setVertexAttrib(index, vals);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glVertexAttrib4fv(GLuint index, const GLfloat* values)\r
 {\r
-    TRACE("(GLuint index = %d, const GLfloat* values = 0x%0.8p)", index, values);\r
+       TRACE("(GLuint index = %d, const GLfloat* values = 0x%0.8p)", index, values);\r
 \r
-    try\r
-    {\r
-        if(index >= es2::MAX_VERTEX_ATTRIBS)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+       if(index >= es2::MAX_VERTEX_ATTRIBS)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-            context->setVertexAttrib(index, values);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               context->setVertexAttrib(index, values);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glVertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr)\r
 {\r
-    TRACE("(GLuint index = %d, GLint size = %d, GLenum type = 0x%X, "\r
-          "GLboolean normalized = %d, GLsizei stride = %d, const GLvoid* ptr = 0x%0.8p)",\r
-          index, size, type, normalized, stride, ptr);\r
-\r
-    try\r
-    {\r
-        if(index >= es2::MAX_VERTEX_ATTRIBS)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        if(size < 1 || size > 4)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        switch(type)\r
-        {\r
-          case GL_BYTE:\r
-          case GL_UNSIGNED_BYTE:\r
-          case GL_SHORT:\r
-          case GL_UNSIGNED_SHORT:\r
-          case GL_FIXED:\r
-          case GL_FLOAT:\r
-            break;\r
-          default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        if(stride < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            context->setVertexAttribState(index, context->getArrayBuffer(), size, type, (normalized == GL_TRUE), stride, ptr);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       TRACE("(GLuint index = %d, GLint size = %d, GLenum type = 0x%X, "\r
+             "GLboolean normalized = %d, GLsizei stride = %d, const GLvoid* ptr = 0x%0.8p)",\r
+             index, size, type, normalized, stride, ptr);\r
+\r
+       if(index >= es2::MAX_VERTEX_ATTRIBS)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       if(size < 1 || size > 4)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       switch(type)\r
+       {\r
+       case GL_BYTE:\r
+       case GL_UNSIGNED_BYTE:\r
+       case GL_SHORT:\r
+       case GL_UNSIGNED_SHORT:\r
+       case GL_FIXED:\r
+       case GL_FLOAT:\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       if(stride < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               context->setVertexAttribState(index, context->getArrayBuffer(), size, type, (normalized == GL_TRUE), stride, ptr);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glViewport(GLint x, GLint y, GLsizei width, GLsizei height)\r
 {\r
-    TRACE("(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d)", x, y, width, height);\r
+       TRACE("(GLint x = %d, GLint y = %d, GLsizei width = %d, GLsizei height = %d)", x, y, width, height);\r
 \r
-    try\r
-    {\r
-        if(width < 0 || height < 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
+       if(width < 0 || height < 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
 \r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-            context->setViewportParams(x, y, width, height);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       if(context)\r
+       {\r
+               context->setViewportParams(x, y, width, height);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glBlitFramebufferANGLE(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,\r
-                                      GLbitfield mask, GLenum filter)\r
-{\r
-    TRACE("(GLint srcX0 = %d, GLint srcY0 = %d, GLint srcX1 = %d, GLint srcY1 = %d, "\r
-          "GLint dstX0 = %d, GLint dstY0 = %d, GLint dstX1 = %d, GLint dstY1 = %d, "\r
-          "GLbitfield mask = 0x%X, GLenum filter = 0x%X)",\r
-          srcX0, srcY0, srcX1, srcX1, dstX0, dstY0, dstX1, dstY1, mask, filter);\r
-\r
-    try\r
-    {\r
-        switch(filter)\r
-        {\r
-          case GL_NEAREST:\r
-            break;\r
-          default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
-\r
-        if((mask & ~(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)) != 0)\r
-        {\r
-            return error(GL_INVALID_VALUE);\r
-        }\r
-\r
-        if(srcX1 - srcX0 != dstX1 - dstX0 || srcY1 - srcY0 != dstY1 - dstY0)\r
-        {\r
-            ERR("Scaling and flipping in BlitFramebufferANGLE not supported by this implementation");\r
-            return error(GL_INVALID_OPERATION);\r
-        }\r
-\r
-        es2::Context *context = es2::getContext();\r
-\r
-        if(context)\r
-        {\r
-            if(context->getReadFramebufferHandle() == context->getDrawFramebufferHandle())\r
-            {\r
-                ERR("Blits with the same source and destination framebuffer are not supported by this implementation.");\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
-\r
-            context->blitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+                                        GLbitfield mask, GLenum filter)\r
+{\r
+       TRACE("(GLint srcX0 = %d, GLint srcY0 = %d, GLint srcX1 = %d, GLint srcY1 = %d, "\r
+             "GLint dstX0 = %d, GLint dstY0 = %d, GLint dstX1 = %d, GLint dstY1 = %d, "\r
+             "GLbitfield mask = 0x%X, GLenum filter = 0x%X)",\r
+             srcX0, srcY0, srcX1, srcX1, dstX0, dstY0, dstX1, dstY1, mask, filter);\r
+\r
+       switch(filter)\r
+       {\r
+       case GL_NEAREST:\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
+\r
+       if((mask & ~(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)) != 0)\r
+       {\r
+               return error(GL_INVALID_VALUE);\r
+       }\r
+\r
+       if(srcX1 - srcX0 != dstX1 - dstX0 || srcY1 - srcY0 != dstY1 - dstY0)\r
+       {\r
+               ERR("Scaling and flipping in BlitFramebufferANGLE not supported by this implementation");\r
+               return error(GL_INVALID_OPERATION);\r
+       }\r
+\r
+       es2::Context *context = es2::getContext();\r
+\r
+       if(context)\r
+       {\r
+               if(context->getReadFramebufferHandle() == context->getDrawFramebufferHandle())\r
+               {\r
+                       ERR("Blits with the same source and destination framebuffer are not supported by this implementation.");\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
+\r
+               context->blitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glTexImage3DOES(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth,\r
-                               GLint border, GLenum format, GLenum type, const GLvoid* pixels)\r
+                                 GLint border, GLenum format, GLenum type, const GLvoid* pixels)\r
 {\r
-    TRACE("(GLenum target = 0x%X, GLint level = %d, GLenum internalformat = 0x%X, "\r
-          "GLsizei width = %d, GLsizei height = %d, GLsizei depth = %d, GLint border = %d, "\r
-          "GLenum format = 0x%X, GLenum type = 0x%x, const GLvoid* pixels = 0x%0.8p)",\r
-          target, level, internalformat, width, height, depth, border, format, type, pixels);\r
+       TRACE("(GLenum target = 0x%X, GLint level = %d, GLenum internalformat = 0x%X, "\r
+             "GLsizei width = %d, GLsizei height = %d, GLsizei depth = %d, GLint border = %d, "\r
+             "GLenum format = 0x%X, GLenum type = 0x%x, const GLvoid* pixels = 0x%0.8p)",\r
+             target, level, internalformat, width, height, depth, border, format, type, pixels);\r
 \r
-    try\r
-    {\r
-               UNIMPLEMENTED();   // FIXME\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+       UNIMPLEMENTED();   // FIXME\r
 }\r
 \r
 void GL_APIENTRY glEGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image)\r
@@ -6113,51 +5093,44 @@ void GL_APIENTRY glEGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image
                return glEGLImageTargetTexture2DOES(target, image);\r
        }\r
 \r
-    TRACE("(GLenum target = 0x%X, GLeglImageOES image = 0x%0.8p)", target, image);\r
+       TRACE("(GLenum target = 0x%X, GLeglImageOES image = 0x%0.8p)", target, image);\r
 \r
-    try\r
-    {\r
-        switch(target)\r
-        {\r
-               case GL_TEXTURE_2D:\r
-        case GL_TEXTURE_EXTERNAL_OES:\r
-            break;\r
-        default:\r
-            return error(GL_INVALID_ENUM);\r
-        }\r
+       switch(target)\r
+       {\r
+       case GL_TEXTURE_2D:\r
+       case GL_TEXTURE_EXTERNAL_OES:\r
+               break;\r
+       default:\r
+               return error(GL_INVALID_ENUM);\r
+       }\r
 \r
-        if(!image)\r
-        {\r
-            return error(GL_INVALID_OPERATION);\r
-        }\r
+       if(!image)\r
+       {\r
+               return error(GL_INVALID_OPERATION);\r
+       }\r
 \r
-        es2::Context *context = es2::getContext();\r
+       es2::Context *context = es2::getContext();\r
 \r
-        if(context)\r
-        {\r
-            es2::Texture2D *texture = 0;\r
+       if(context)\r
+       {\r
+               es2::Texture2D *texture = 0;\r
 \r
-                       switch(target)\r
-                       {\r
-                       case GL_TEXTURE_2D:           texture = context->getTexture2D();       break;\r
-                       case GL_TEXTURE_EXTERNAL_OES: texture = context->getTextureExternal(); break;\r
-                       default:                      UNREACHABLE();\r
-                       }\r
+               switch(target)\r
+               {\r
+               case GL_TEXTURE_2D:           texture = context->getTexture2D();       break;\r
+               case GL_TEXTURE_EXTERNAL_OES: texture = context->getTextureExternal(); break;\r
+               default:                      UNREACHABLE();\r
+               }\r
 \r
-            if(!texture)\r
-            {\r
-                return error(GL_INVALID_OPERATION);\r
-            }\r
+               if(!texture)\r
+               {\r
+                       return error(GL_INVALID_OPERATION);\r
+               }\r
 \r
-            egl::Image *glImage = static_cast<egl::Image*>(image);\r
+               egl::Image *glImage = static_cast<egl::Image*>(image);\r
 \r
-            texture->setImage(glImage);\r
-        }\r
-    }\r
-    catch(std::bad_alloc&)\r
-    {\r
-        return error(GL_OUT_OF_MEMORY);\r
-    }\r
+               texture->setImage(glImage);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glEGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImageOES image)\r
@@ -6169,52 +5142,52 @@ void GL_APIENTRY glEGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImag
 \r
 __eglMustCastToProperFunctionPointerType glGetProcAddress(const char *procname)\r
 {\r
-    struct Extension\r
-    {\r
-        const char *name;\r
-        __eglMustCastToProperFunctionPointerType address;\r
-    };\r
+       struct Extension\r
+       {\r
+               const char *name;\r
+               __eglMustCastToProperFunctionPointerType address;\r
+       };\r
 \r
-    static const Extension glExtensions[] =\r
-    {\r
+       static const Extension glExtensions[] =\r
+       {\r
                #define EXTENSION(name) {#name, (__eglMustCastToProperFunctionPointerType)name}\r
 \r
-        EXTENSION(glTexImage3DOES),\r
-        EXTENSION(glBlitFramebufferANGLE),\r
-        EXTENSION(glRenderbufferStorageMultisampleANGLE),\r
-        EXTENSION(glDeleteFencesNV),\r
-        EXTENSION(glGenFencesNV),\r
-        EXTENSION(glIsFenceNV),\r
-        EXTENSION(glTestFenceNV),\r
-        EXTENSION(glGetFenceivNV),\r
-        EXTENSION(glFinishFenceNV),\r
-        EXTENSION(glSetFenceNV),\r
+               EXTENSION(glTexImage3DOES),\r
+               EXTENSION(glBlitFramebufferANGLE),\r
+               EXTENSION(glRenderbufferStorageMultisampleANGLE),\r
+               EXTENSION(glDeleteFencesNV),\r
+               EXTENSION(glGenFencesNV),\r
+               EXTENSION(glIsFenceNV),\r
+               EXTENSION(glTestFenceNV),\r
+               EXTENSION(glGetFenceivNV),\r
+               EXTENSION(glFinishFenceNV),\r
+               EXTENSION(glSetFenceNV),\r
                EXTENSION(glGetGraphicsResetStatusEXT),\r
-        EXTENSION(glReadnPixelsEXT),\r
-        EXTENSION(glGetnUniformfvEXT),\r
-        EXTENSION(glGetnUniformivEXT),\r
+               EXTENSION(glReadnPixelsEXT),\r
+               EXTENSION(glGetnUniformfvEXT),\r
+               EXTENSION(glGetnUniformivEXT),\r
                EXTENSION(glGenQueriesEXT),\r
-        EXTENSION(glDeleteQueriesEXT),\r
-        EXTENSION(glIsQueryEXT),\r
-        EXTENSION(glBeginQueryEXT),\r
-        EXTENSION(glEndQueryEXT),\r
-        EXTENSION(glGetQueryivEXT),\r
-        EXTENSION(glGetQueryObjectuivEXT),\r
-        EXTENSION(glEGLImageTargetTexture2DOES),\r
+               EXTENSION(glDeleteQueriesEXT),\r
+               EXTENSION(glIsQueryEXT),\r
+               EXTENSION(glBeginQueryEXT),\r
+               EXTENSION(glEndQueryEXT),\r
+               EXTENSION(glGetQueryivEXT),\r
+               EXTENSION(glGetQueryObjectuivEXT),\r
+               EXTENSION(glEGLImageTargetTexture2DOES),\r
                EXTENSION(glEGLImageTargetRenderbufferStorageOES),\r
 \r
                #undef EXTENSION\r
-    };\r
+       };\r
 \r
-    for(int ext = 0; ext < sizeof(glExtensions) / sizeof(Extension); ext++)\r
-    {\r
-        if(strcmp(procname, glExtensions[ext].name) == 0)\r
-        {\r
-            return (__eglMustCastToProperFunctionPointerType)glExtensions[ext].address;\r
-        }\r
-    }\r
+       for(int ext = 0; ext < sizeof(glExtensions) / sizeof(Extension); ext++)\r
+       {\r
+               if(strcmp(procname, glExtensions[ext].name) == 0)\r
+               {\r
+                       return (__eglMustCastToProperFunctionPointerType)glExtensions[ext].address;\r
+               }\r
+       }\r
 \r
-    return NULL;\r
+       return NULL;\r
 }\r
 \r
 void GL_APIENTRY Register(const char *licenseKey)\r
index db20dae..86e2304 100644 (file)
@@ -1358,7 +1358,6 @@ namespace sw
 //     RValue<Bool> operator!=(RValue<Long1> lhs, RValue<Long1> rhs);\r
 //     RValue<Bool> operator==(RValue<Long1> lhs, RValue<Long1> rhs);\r
 \r
-\r
 //     RValue<Long1> RoundLong1(RValue<Float> cast);\r
 \r
        class Long2 : public Variable<Long2>\r
@@ -1512,7 +1511,6 @@ namespace sw
                static llvm::Type *getType();\r
        };\r
 \r
-\r
     RValue<Int2> operator+(RValue<Int2> lhs, RValue<Int2> rhs);\r
     RValue<Int2> operator-(RValue<Int2> lhs, RValue<Int2> rhs);\r
 //     RValue<Int2> operator*(RValue<Int2> lhs, RValue<Int2> rhs);\r