\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
\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
\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
\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
\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
\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
\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
\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
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
\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
\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
\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
\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
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
\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
{\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
\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
{\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
{\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
{\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
\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
\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
{\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
\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
{\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
\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
\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
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
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
{\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
\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
#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
\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
\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
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
\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