EGLBoolean __stdcall eglSwapInterval(EGLDisplay dpy, EGLint interval) { EVENT("(EGLDisplay dpy = 0x%0.8p, EGLint interval = %d)", dpy, interval); try { egl::Display *display = static_cast<egl::Display*>(dpy); if (!validateDisplay(display)) { return EGL_FALSE; } egl::Surface *draw_surface = static_cast<egl::Surface*>(egl::getCurrentDrawSurface()); if (draw_surface == NULL) { return error(EGL_BAD_SURFACE, EGL_FALSE); } draw_surface->setSwapInterval(interval); return success(EGL_TRUE); } catch(std::bad_alloc&) { return error(EGL_BAD_ALLOC, EGL_FALSE); } return EGL_FALSE; }
const char *__stdcall eglQueryString(EGLDisplay dpy, EGLint name) { EVENT("(EGLDisplay dpy = 0x%0.8p, EGLint name = %d)", dpy, name); try { egl::Display *display = static_cast<egl::Display*>(dpy); if (!validateDisplay(display)) { return NULL; } switch (name) { case EGL_CLIENT_APIS: return success("OpenGL_ES"); case EGL_EXTENSIONS: return display->getExtensionString(); case EGL_VENDOR: return success("Google Inc."); case EGL_VERSION: return success("1.4 (ANGLE "VERSION_STRING")"); } return error(EGL_BAD_PARAMETER, (const char*)NULL); } catch(std::bad_alloc&) { return error(EGL_BAD_ALLOC, (const char*)NULL); } return NULL; }
EGLBoolean __stdcall eglGetConfigs(EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config) { EVENT("(EGLDisplay dpy = 0x%0.8p, EGLConfig *configs = 0x%0.8p, " "EGLint config_size = %d, EGLint *num_config = 0x%0.8p)", dpy, configs, config_size, num_config); ANGLE_TRY { egl::Display *display = static_cast<egl::Display*>(dpy); if (!validateDisplay(display)) { return EGL_FALSE; } if (!num_config) { return egl::error(EGL_BAD_PARAMETER, EGL_FALSE); } const EGLint attribList[] = {EGL_NONE}; if (!display->getConfigs(configs, attribList, config_size, num_config)) { return egl::error(EGL_BAD_ATTRIBUTE, EGL_FALSE); } return egl::success(EGL_TRUE); } ANGLE_CATCH_ALL { return egl::error(EGL_BAD_ALLOC, EGL_FALSE); } }
const char *__stdcall eglQueryString(EGLDisplay dpy, EGLint name) { EVENT("(EGLDisplay dpy = 0x%0.8p, EGLint name = %d)", dpy, name); ANGLE_TRY { egl::Display *display = static_cast<egl::Display*>(dpy); if (!(display == EGL_NO_DISPLAY && name == EGL_EXTENSIONS) && !validateDisplay(display)) { return NULL; } switch (name) { case EGL_CLIENT_APIS: return egl::success("OpenGL_ES"); case EGL_EXTENSIONS: return egl::success(egl::Display::getExtensionString(display)); case EGL_VENDOR: return egl::success(display->getVendorString()); case EGL_VERSION: return egl::success("1.4 (ANGLE " ANGLE_VERSION_STRING ")"); default: return egl::error(EGL_BAD_PARAMETER, (const char*)NULL); } } ANGLE_CATCH_ALL { return egl::error(EGL_BAD_ALLOC, (const char*)NULL); } }
EGLBoolean __stdcall eglChooseConfig(EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config) { EVENT("(EGLDisplay dpy = 0x%0.8p, const EGLint *attrib_list = 0x%0.8p, " "EGLConfig *configs = 0x%0.8p, EGLint config_size = %d, EGLint *num_config = 0x%0.8p)", dpy, attrib_list, configs, config_size, num_config); egl::Display *display = static_cast<egl::Display*>(dpy); if (!validateDisplay(display)) { return EGL_FALSE; } if (!num_config) { return egl::error(EGL_BAD_PARAMETER, EGL_FALSE); } const EGLint attribList[] = {EGL_NONE}; if (!attrib_list) { attrib_list = attribList; } display->getConfigs(configs, attrib_list, config_size, num_config); return egl::success(EGL_TRUE); }
bool validateSurface(egl::Display *display, egl::Surface *surface) { if (!validateDisplay(display)) { return false; } if (!display->isValidSurface(surface)) { return error(EGL_BAD_SURFACE, false); } return true; }
bool validateContext(egl::Display *display, gl::Context *context) { if (!validateDisplay(display)) { return false; } if (!display->isValidContext(context)) { return error(EGL_BAD_CONTEXT, false); } return true; }
bool validateConfig(egl::Display *display, EGLConfig config) { if (!validateDisplay(display)) { return false; } if (!display->isValidConfig(config)) { return error(EGL_BAD_CONFIG, false); } return true; }