diff options
author | Chia-I Wu <olv@lunarg.com> | 2010-12-10 10:44:03 +0800 |
---|---|---|
committer | Chia-I Wu <olv@lunarg.com> | 2010-12-10 11:01:05 +0800 |
commit | 83bdd402aa3b83c121d6764328f831b1629e41a2 (patch) | |
tree | 6fd43685805f9de9398c6afc8045b52d6357d7a8 | |
parent | 6efd963a2372a4e51e3550a97858105013a096e7 (diff) |
targets/egl: Improve st_GL.so loading.
When the application is not linked to any libGL*.so, loading st_GL.so
would give
/usr/local/lib/egl/st_GL.so: undefined symbol: _glapi_tls_Context
In that case, load libGL.so and try again. This works because
util_dl_open loads with RTLD_GLOBAL.
Fix "clear" OpenGL ES 1.1 demo.
-rw-r--r-- | src/gallium/targets/egl/egl.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/gallium/targets/egl/egl.c b/src/gallium/targets/egl/egl.c index 19404c8ef6..bb182ba984 100644 --- a/src/gallium/targets/egl/egl.c +++ b/src/gallium/targets/egl/egl.c @@ -237,6 +237,21 @@ get_st_api_full(enum st_api_type api, enum st_profile_type profile) break; } + /* try again with libGL.so loaded */ + if (!stmod->stapi && api == ST_API_OPENGL) { + struct util_dl_library *glapi = util_dl_open("libGL" UTIL_DL_EXT); + + if (glapi) { + _eglLog(_EGL_DEBUG, "retry with libGL" UTIL_DL_EXT " loaded"); + /* skip the last name (which is NULL) */ + for (i = 0; i < count - 1; i++) { + if (load_st_module(stmod, names[i], symbol)) + break; + } + util_dl_close(glapi); + } + } + if (!stmod->stapi) { EGLint level = (egl_g3d_loader.profile_masks[api]) ? _EGL_WARNING : _EGL_DEBUG; |