X-Git-Url: https://git.notmuchmail.org/git?a=blobdiff_plain;f=glproc_egl.cpp;h=53dd7145ecd5b39dfa03c6e416a74cdc6ed9fda9;hb=78329e204346bdce54d3bf007edc53f0c1ddbc78;hp=7ba7b5c2079ecdd2f2c2db2c10f7a53e81545c2c;hpb=01c117797c27e03ea573b49c364d5869b4d04dd8;p=apitrace diff --git a/glproc_egl.cpp b/glproc_egl.cpp index 7ba7b5c..53dd714 100644 --- a/glproc_egl.cpp +++ b/glproc_egl.cpp @@ -73,7 +73,33 @@ void *__libGlHandle = NULL; void * __getPublicProcAddress(const char *procName) { +#if defined(ANDROID) + /* + * Android does not support LD_PRELOAD. It is assumed that applications + * are explicitely loading egltrace.so. + */ + void *lib = NULL; + if (procName[0] == 'e' && procName[1] == 'g' && procName[2] == 'l') { + static void *libEGL = NULL; + if (!libEGL) { + libEGL = dlopen("libEGL.so", RTLD_LOCAL | RTLD_LAZY); + } + lib = libEGL; + } else if (procName[0] == 'g' && procName[1] == 'l') { + /* TODO: Support libGLESv1_CM.so too somehow. */ + static void *libGLESv2 = NULL; + if (!libGLESv2) { + libGLESv2 = dlopen("libGLESv2.so", RTLD_LOCAL | RTLD_LAZY); + } + lib = libGLESv2; + } + if (lib) { + return dlsym(lib, procName); + } + return NULL; +#else return dlsym(RTLD_NEXT, procName); +#endif } /* @@ -91,9 +117,12 @@ void * __getPrivateProcAddress(const char *procName) { void *proc; - proc = dlsym(RTLD_NEXT, procName); - if (!proc && procName[0] == 'g' && procName[1] == 'l') + proc = __getPublicProcAddress(procName); + if (!proc && + ((procName[0] == 'e' && procName[1] == 'g' && procName[2] == 'l') || + (procName[0] == 'g' && procName[1] == 'l'))) { proc = (void *) __eglGetProcAddress(procName); + } return proc; }