diff options
author | Chia-I Wu <olvaffe@gmail.com> | 2010-01-27 23:55:58 +0800 |
---|---|---|
committer | Chia-I Wu <olvaffe@gmail.com> | 2010-01-28 17:28:47 +0800 |
commit | a933259daa98615ad7473c53623a96f612e9a311 (patch) | |
tree | 8731dc0829c7c17adf09d498ab8872e3ad42ec41 | |
parent | 8f81769148eab0042ffb7192a702350275648715 (diff) |
egl: Use a boolean to indicate whether a display is initialized.
The driver pointer of the display was used to decide whether a display
is initialized. Use a boolean for that purpose allows accessing the
driver of an uninitialized display.
-rw-r--r-- | src/egl/main/eglapi.c | 35 | ||||
-rw-r--r-- | src/egl/main/egldisplay.h | 1 |
2 files changed, 20 insertions, 16 deletions
diff --git a/src/egl/main/eglapi.c b/src/egl/main/eglapi.c index 90828bd3e9..2c26dfada8 100644 --- a/src/egl/main/eglapi.c +++ b/src/egl/main/eglapi.c @@ -94,19 +94,20 @@ EGLBoolean EGLAPIENTRY eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor) { _EGLDisplay *disp = _eglLookupDisplay(dpy); - _EGLDriver *drv; EGLint major_int, minor_int; if (!disp) return _eglError(EGL_BAD_DISPLAY, __FUNCTION__); - drv = disp->Driver; - if (!drv) { - _eglPreloadDrivers(); + if (!disp->Initialized) { + _EGLDriver *drv = disp->Driver; - drv = _eglMatchDriver(disp); - if (!drv) - return _eglError(EGL_NOT_INITIALIZED, __FUNCTION__); + if (!drv) { + _eglPreloadDrivers(); + drv = _eglMatchDriver(disp); + if (!drv) + return _eglError(EGL_NOT_INITIALIZED, __FUNCTION__); + } /* Initialize the particular display now */ if (!drv->API.Initialize(drv, disp, &major_int, &minor_int)) @@ -121,6 +122,7 @@ eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor) disp->ClientAPIsMask &= _EGL_API_ALL_BITS; disp->Driver = drv; + disp->Initialized = EGL_TRUE; } else { major_int = disp->APImajor; minor_int = disp->APIminor; @@ -140,15 +142,16 @@ EGLBoolean EGLAPIENTRY eglTerminate(EGLDisplay dpy) { _EGLDisplay *disp = _eglLookupDisplay(dpy); - _EGLDriver *drv; if (!disp) return _eglError(EGL_BAD_DISPLAY, __FUNCTION__); - drv = disp->Driver; - if (drv) { + if (disp->Initialized) { + _EGLDriver *drv = disp->Driver; + drv->API.Terminate(drv, disp); - disp->Driver = NULL; + /* do not reset disp->Driver */ + disp->Initialized = EGL_FALSE; } return EGL_TRUE; @@ -165,7 +168,7 @@ _eglCheckDisplay(_EGLDisplay *disp, const char *msg) _eglError(EGL_BAD_DISPLAY, msg); return NULL; } - if (!disp->Driver) { + if (!disp->Initialized) { _eglError(EGL_NOT_INITIALIZED, msg); return NULL; } @@ -572,8 +575,8 @@ eglWaitClient(void) /* a valid current context implies an initialized current display */ disp = ctx->Resource.Display; + assert(disp->Initialized); drv = disp->Driver; - assert(drv); return drv->API.WaitClient(drv, disp, ctx); } @@ -616,8 +619,8 @@ eglWaitNative(EGLint engine) /* a valid current context implies an initialized current display */ disp = ctx->Resource.Display; + assert(disp->Initialized); drv = disp->Driver; - assert(drv); return drv->API.WaitNative(drv, disp, engine); } @@ -991,8 +994,8 @@ eglReleaseThread(void) if (ctx) { _EGLDisplay *disp = ctx->Resource.Display; _EGLDriver *drv = disp->Driver; - /* what if drv is not avaialbe? */ - if (drv) + /* what if display is not initialized? */ + if (disp->Initialized) (void) drv->API.MakeCurrent(drv, disp, NULL, NULL, NULL); } } diff --git a/src/egl/main/egldisplay.h b/src/egl/main/egldisplay.h index 8f74ad23a8..4aea10c3eb 100644 --- a/src/egl/main/egldisplay.h +++ b/src/egl/main/egldisplay.h @@ -49,6 +49,7 @@ struct _egl_display EGLNativeDisplayType NativeDisplay; + EGLBoolean Initialized; /**< True if the display is initialized */ _EGLDriver *Driver; void *DriverData; /* private to driver */ |