/** * Called via eglInitialize(), drv->API.Initialize(). */ static EGLBoolean xlib_eglInitialize(_EGLDriver *drv, EGLDisplay dpy, EGLint *minor, EGLint *major) { create_configs(drv, dpy); drv->Initialized = EGL_TRUE; /* we're supporting EGL 1.4 */ *minor = 1; *major = 4; return EGL_TRUE; }
/** * Called via eglInitialize(), xdri_dpy->API.Initialize(). */ static EGLBoolean xdri_eglInitialize(_EGLDriver *drv, _EGLDisplay *dpy, EGLint *minor, EGLint *major) { struct xdri_egl_display *xdri_dpy; __GLXdisplayPrivate *dpyPriv; __GLXDRIdisplay *driDisplay; __GLXscreenConfigs *psc; EGLint first_id = 1; int scr; xdri_dpy = CALLOC_STRUCT(xdri_egl_display); if (!xdri_dpy) return _eglError(EGL_BAD_ALLOC, "eglInitialize"); xdri_dpy->dpy = (Display *) dpy->NativeDisplay; if (!xdri_dpy->dpy) { xdri_dpy->dpy = XOpenDisplay(NULL); if (!xdri_dpy->dpy) { free(xdri_dpy); return _eglError(EGL_NOT_INITIALIZED, "eglInitialize"); } } dpyPriv = __glXInitialize(xdri_dpy->dpy); if (!dpyPriv) { _eglLog(_EGL_WARNING, "failed to create GLX display"); free(xdri_dpy); return _eglError(EGL_NOT_INITIALIZED, "eglInitialize"); } driDisplay = __driCreateDisplay(dpyPriv, NULL); if (!driDisplay) { _eglLog(_EGL_WARNING, "failed to create DRI display"); free(xdri_dpy); return _eglError(EGL_NOT_INITIALIZED, "eglInitialize"); } scr = DefaultScreen(xdri_dpy->dpy); psc = &dpyPriv->screenConfigs[scr]; xdri_dpy->dpyPriv = dpyPriv; xdri_dpy->driDisplay = driDisplay; xdri_dpy->psc = psc; xdri_dpy->scr = scr; psc->driScreen = driDisplay->createScreen(psc, scr, dpyPriv); if (!psc->driScreen) { _eglLog(_EGL_WARNING, "failed to create DRI screen #%d", scr); free(xdri_dpy); return _eglError(EGL_NOT_INITIALIZED, "eglInitialize"); } /* add visuals and fbconfigs */ first_id = create_configs(dpy, psc->visuals, first_id); create_configs(dpy, psc->configs, first_id); dpy->DriverData = xdri_dpy; dpy->ClientAPIsMask = (EGL_OPENGL_BIT | EGL_OPENGL_ES_BIT | EGL_OPENGL_ES2_BIT | EGL_OPENVG_BIT); /* we're supporting EGL 1.4 */ *minor = 1; *major = 4; return EGL_TRUE; }