X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=glws_egl_xlib.cpp;h=66557815017fda939a5edc4e622b84c7e0ee7459;hb=cdecdf7c0ea322c99a5947e6651cff44ac7bd1ea;hp=d1277058c4c9fddc5b607ed99aa4f6c9fdccb42e;hpb=d31700077ae75f450b12ad7d9276c08cbad57d1b;p=apitrace diff --git a/glws_egl_xlib.cpp b/glws_egl_xlib.cpp index d127705..6655781 100644 --- a/glws_egl_xlib.cpp +++ b/glws_egl_xlib.cpp @@ -150,7 +150,9 @@ public: ~EglDrawable() { eglDestroySurface(eglDisplay, surface); + eglWaitClient(); XDestroyWindow(display, window); + eglWaitNative(EGL_CORE_NATIVE_ENGINE); } void @@ -270,17 +272,50 @@ cleanup(void) { } Visual * -createVisual(bool doubleBuffer) { +createVisual(bool doubleBuffer, Profile profile) { EglVisual *visual = new EglVisual(); // possible combinations - const EGLint api_bits[7] = { + const EGLint api_bits_gl[7] = { EGL_OPENGL_BIT | EGL_OPENGL_ES_BIT | EGL_OPENGL_ES2_BIT, - EGL_OPENGL_ES_BIT | EGL_OPENGL_ES2_BIT, EGL_OPENGL_BIT | EGL_OPENGL_ES_BIT, EGL_OPENGL_BIT | EGL_OPENGL_ES2_BIT, + EGL_OPENGL_BIT, + EGL_OPENGL_ES_BIT | EGL_OPENGL_ES2_BIT, + EGL_OPENGL_ES2_BIT, + EGL_OPENGL_ES_BIT, + }; + const EGLint api_bits_gles1[7] = { + EGL_OPENGL_BIT | EGL_OPENGL_ES_BIT | EGL_OPENGL_ES2_BIT, + EGL_OPENGL_ES_BIT | EGL_OPENGL_ES2_BIT, + EGL_OPENGL_BIT | EGL_OPENGL_ES_BIT, EGL_OPENGL_ES_BIT, + EGL_OPENGL_BIT | EGL_OPENGL_ES2_BIT, + EGL_OPENGL_BIT, EGL_OPENGL_ES2_BIT, + }; + const EGLint api_bits_gles2[7] = { + EGL_OPENGL_BIT | EGL_OPENGL_ES_BIT | EGL_OPENGL_ES2_BIT, + EGL_OPENGL_ES_BIT | EGL_OPENGL_ES2_BIT, + EGL_OPENGL_BIT | EGL_OPENGL_ES2_BIT, + EGL_OPENGL_ES2_BIT, + EGL_OPENGL_BIT | EGL_OPENGL_ES_BIT, EGL_OPENGL_BIT, + EGL_OPENGL_ES_BIT, + }; + const EGLint *api_bits; + + switch(profile) { + case PROFILE_COMPAT: + api_bits = api_bits_gl; + break; + case PROFILE_ES1: + api_bits = api_bits_gles1; + break; + case PROFILE_ES2: + api_bits = api_bits_gles2; + break; + default: + return NULL; }; for (int i = 0; i < 7; i++) { @@ -339,6 +374,9 @@ createContext(const Visual *_visual, Context *shareContext, Profile profile) load("libGL.so.1"); eglBindAPI(EGL_OPENGL_API); break; + case PROFILE_CORE: + assert(0); + return NULL; case PROFILE_ES1: load("libGLESv1_CM.so.1"); eglBindAPI(EGL_OPENGL_ES_API); @@ -348,6 +386,8 @@ createContext(const Visual *_visual, Context *shareContext, Profile profile) eglBindAPI(EGL_OPENGL_ES_API); attribs.add(EGL_CONTEXT_CLIENT_VERSION, 2); break; + default: + return NULL; } attribs.end(EGL_NONE);