Not yet used. v2: Use eglGetProcAddress, not dlsym, due the EGL 1.5 spec. (for emil)
Cc: Emil Velikov <emil.l.veli...@gmail.com> --- src/waffle/egl/wegl_imports.h | 4 ++++ src/waffle/egl/wegl_platform.c | 23 +++++++++++++++++++++++ src/waffle/egl/wegl_platform.h | 4 ++++ 3 files changed, 31 insertions(+) diff --git a/src/waffle/egl/wegl_imports.h b/src/waffle/egl/wegl_imports.h index 99e79c8..3f39b9e 100644 --- a/src/waffle/egl/wegl_imports.h +++ b/src/waffle/egl/wegl_imports.h @@ -35,6 +35,10 @@ #include <EGL/egl.h> #include <EGL/eglext.h> +#ifndef EGL_VERSION_1_5 +typedef intptr_t EGLAttrib; +#endif + #ifndef EGL_KHR_create_context #define EGL_KHR_create_context 1 #define EGL_CONTEXT_MAJOR_VERSION_KHR EGL_CONTEXT_CLIENT_VERSION diff --git a/src/waffle/egl/wegl_platform.c b/src/waffle/egl/wegl_platform.c index 524a9a8..f52bdfa 100644 --- a/src/waffle/egl/wegl_platform.c +++ b/src/waffle/egl/wegl_platform.c @@ -116,6 +116,25 @@ wegl_platform_init(struct wegl_platform *self, EGLenum egl_platform) goto error; \ } + // Use eglGetProcAddress to get EGL 1.5 symbols, not dlsym, because the + // EGL 1.5 spec requires that implementors support eglGetProcAddress for + // all symbols. + // + // From the EGL 1.5 spec: + // + // eglGetProcAddress may be queried for all EGL and client API functions + // supported by the implementation (whether those functions are + // extensions or not, and whether they are supported by the current + // client API context or not). + // + // For functions that are queryable with eglGetProcAddress, + // implementations may choose to also export those functions statically + // from the object libraries implementing those functions. However, + // portable clients cannot rely on this behavior. + // +#define RETRIEVE_EGL_SYMBOL_OPTIONAL(function) \ + self->function = (void*) self->eglGetProcAddress(#function); + RETRIEVE_EGL_SYMBOL(eglMakeCurrent); RETRIEVE_EGL_SYMBOL(eglGetProcAddress); @@ -140,7 +159,11 @@ wegl_platform_init(struct wegl_platform *self, EGLenum egl_platform) RETRIEVE_EGL_SYMBOL(eglDestroySurface); RETRIEVE_EGL_SYMBOL(eglSwapBuffers); + // EGL 1.5 + RETRIEVE_EGL_SYMBOL_OPTIONAL(eglGetPlatformDisplay); + #undef RETRIEVE_EGL_SYMBOL +#undef RETRIEVE_EGL_SYMBOL_OPTIONAL self->client_extensions = self->eglQueryString(EGL_NO_DISPLAY, EGL_EXTENSIONS); diff --git a/src/waffle/egl/wegl_platform.h b/src/waffle/egl/wegl_platform.h index 92db3b0..4573ec2 100644 --- a/src/waffle/egl/wegl_platform.h +++ b/src/waffle/egl/wegl_platform.h @@ -60,6 +60,10 @@ struct wegl_platform { __eglMustCastToProperFunctionPointerType (*eglGetProcAddress)(const char *procname); + // EGL 1.5 + EGLDisplay (*eglGetPlatformDisplay)(EGLenum platform, void *native_display, + const EGLAttrib *attrib_list); + // display EGLDisplay (*eglGetDisplay)(EGLNativeDisplayType display_id); EGLBoolean (*eglInitialize)(EGLDisplay dpy, EGLint *major, EGLint *minor); -- 2.10.1 _______________________________________________ waffle mailing list waffle@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/waffle