From b64b0df0814a5e7f029ad5465ee71ea5c045c8f3 Mon Sep 17 00:00:00 2001 From: Imre Deak Date: Mon, 2 Apr 2012 16:47:48 +0300 Subject: [PATCH] gles: fix lookup for GLESv1 functions MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Get the function from the GLESv1 library in case it's not found in GLESv2. Signed-off-by: Imre Deak Signed-off-by: José Fonseca --- glproc_egl.cpp | 37 +++++++++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/glproc_egl.cpp b/glproc_egl.cpp index 53dd714..8a0fb34 100644 --- a/glproc_egl.cpp +++ b/glproc_egl.cpp @@ -78,24 +78,45 @@ __getPublicProcAddress(const char *procName) * 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); + if (!libEGL) { + return NULL; + } } - lib = libEGL; - } else if (procName[0] == 'g' && procName[1] == 'l') { - /* TODO: Support libGLESv1_CM.so too somehow. */ + return dlsym(libEGL, procName); + } + + if (procName[0] == 'g' && procName[1] == 'l') { + /* TODO: Use GLESv1/GLESv2 on a per-context basis. */ + static void *sym = NULL; + static void *libGLESv2 = NULL; if (!libGLESv2) { libGLESv2 = dlopen("libGLESv2.so", RTLD_LOCAL | RTLD_LAZY); } - lib = libGLESv2; - } - if (lib) { - return dlsym(lib, procName); + if (libGLESv2) { + sym = dlsym(libGLESv2, procName); + } + if (sym) { + return sym; + } + + static void *libGLESv1 = NULL; + if (!libGLESv1) { + libGLESv1 = dlopen("libGLESv1_CM.so", RTLD_LOCAL | RTLD_LAZY); + } + if (libGLESv1) { + sym = dlsym(libGLESv1, procName); + } + if (sym) { + return sym; + } } + return NULL; #else return dlsym(RTLD_NEXT, procName); -- 2.43.0