diff --git a/ChangeLog b/ChangeLog index 11d1debfb..bfa3c77ea 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2008-01-14 Emmanuele Bassi + + * clutter/cogl/gl/cogl.c (cogl_get_proc_address): Implement non-GLX + version using GModule and looking up the symbol from the running + process. It should work when linked to library providing the + requested function. (#696, Tommi Komulainen) + 2008-01-14 Emmanuele Bassi * configure.ac: Post-release bump to 0.5.3 diff --git a/clutter/cogl/gl/cogl.c b/clutter/cogl/gl/cogl.c index 222e74258..5f6395927 100644 --- a/clutter/cogl/gl/cogl.c +++ b/clutter/cogl/gl/cogl.c @@ -30,6 +30,7 @@ #include "cogl.h" #include +#include #ifdef HAVE_CLUTTER_GLX #include @@ -125,7 +126,24 @@ cogl_get_proc_address (const gchar* name) if (get_proc_func) return get_proc_func ((unsigned char*) name); -#endif + +#else /* !HAVE_CLUTTER_GLX */ + + /* this should find the right function if the program is linked against a + * library providing it */ + static GModule *module = NULL; + if (module == NULL) + module = g_module_open (NULL, G_MODULE_BIND_LAZY | G_MODULE_BIND_LOCAL); + + if (module) + { + gpointer symbol; + + if (g_module_symbol (module, name, &symbol)) + return symbol; + } + +#endif /* HAVE_CLUTTER_GLX */ return NULL; }