Link EGL to Mesa

Link the EGL library with Mesa. SDL's `GL_GetProcAddress` now calls
`eglGetProcAddress` rather than lookup procedures directly in the Mesa
library.

Components may still wish to list 'mesa_api' in LIBS to access OpenGL
headers.

Fix #2711
This commit is contained in:
Ehmry - 2018-03-10 11:34:39 +01:00 committed by Christian Helmuth
parent 964aac599c
commit 4b165190ee
2 changed files with 13 additions and 13 deletions

View File

@ -1,6 +1,11 @@
SHARED_LIB = yes
LIBS = libc blit
# Link to Mesa, EGL clients should use `eglGetProcAddres`
# to retrieve Mesa implementations rather than use Mesa
# symbols directly.
LIBS += mesa
include $(REP_DIR)/lib/mk/mesa-common.inc
SRC_C = \

View File

@ -132,6 +132,9 @@ extern "C" {
typedef EGLBoolean (*eglSwapBuffers_func) (EGLDisplay, EGLSurface);
typedef EGLBoolean (*eglWaitClient_func) (void);
typedef char const* (*eglQueryString_func) (EGLDisplay, EGLint);
typedef __eglMustCastToProperFunctionPointerType
(*eglGetProcAddress_func) (const char *procname);
static eglBindAPI_func __eglBindAPI;
static eglChooseConfig_func __eglChooseConfig;
@ -143,8 +146,7 @@ extern "C" {
static eglSwapBuffers_func __eglSwapBuffers;
static eglWaitClient_func __eglWaitClient;
static eglQueryString_func __eglQueryString;
static void *__mesa;
static eglGetProcAddress_func __eglGetProcAddress;
static bool init_egl()
{
@ -168,7 +170,7 @@ extern "C" {
LOAD_GL_FUNC(egl, eglQueryString)
LOAD_GL_FUNC(egl, eglSwapBuffers)
LOAD_GL_FUNC(egl, eglWaitClient)
LOAD_GL_FUNC(egl, eglWaitClient)
LOAD_GL_FUNC(egl, eglGetProcAddress)
#undef LOAD_GL_FUNC
@ -177,12 +179,6 @@ extern "C" {
static bool init_opengl(SDL_VideoDevice *t)
{
__mesa = dlopen("mesa.lib.so", 0);
if (!__mesa) {
Genode::error("could not open mesa library");
return false;
}
if (!init_egl()) { return false; }
int maj, min;
@ -594,8 +590,7 @@ extern "C" {
}
void* Genode_Fb_GL_GetProcAddress(SDL_VideoDevice *t, const char *proc)
{
return !__mesa ? nullptr : dlsym(__mesa, proc);
}
void* Genode_Fb_GL_GetProcAddress(SDL_VideoDevice *t, const char *proc) {
return (void*)__eglGetProcAddress(proc); }
} //extern "C"