diff options
author | Mathias Agopian <mathias@google.com> | 2009-04-23 19:57:10 -0700 |
---|---|---|
committer | Mathias Agopian <mathias@google.com> | 2009-04-23 19:57:10 -0700 |
commit | 1c2be6af86800875d57bb493fd6ce6b18d742dfe (patch) | |
tree | 10b39109b8765c55bb89de37c472c7a751894742 /opengl/libs/EGL/egl.cpp | |
parent | b519abb606c819c446a408f422530268b21a100b (diff) | |
download | frameworks_native-1c2be6af86800875d57bb493fd6ce6b18d742dfe.zip frameworks_native-1c2be6af86800875d57bb493fd6ce6b18d742dfe.tar.gz frameworks_native-1c2be6af86800875d57bb493fd6ce6b18d742dfe.tar.bz2 |
Make sure to map undefined OES functions to their non-OES counterpart if it exists.
Diffstat (limited to 'opengl/libs/EGL/egl.cpp')
-rw-r--r-- | opengl/libs/EGL/egl.cpp | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/opengl/libs/EGL/egl.cpp b/opengl/libs/EGL/egl.cpp index 6fc0fed..ff005e2 100644 --- a/opengl/libs/EGL/egl.cpp +++ b/opengl/libs/EGL/egl.cpp @@ -273,6 +273,8 @@ int gpu_release(void*, request_gpu_t* gpu); static __attribute__((noinline)) void *load_driver(const char* driver, gl_hooks_t* hooks) { + //LOGD("%s", driver); + char scrap[256]; void* dso = dlopen(driver, RTLD_NOW | RTLD_LOCAL); LOGE_IF(!dso, "couldn't load <%s> library (%s)", @@ -310,7 +312,7 @@ void *load_driver(const char* driver, gl_hooks_t* hooks) *curr++ = f; api++; } - + gl_hooks_t::gl_t* gl = &hooks->gl; curr = (__eglMustCastToProperFunctionPointerType*)gl; api = gl_names; @@ -321,10 +323,32 @@ void *load_driver(const char* driver, gl_hooks_t* hooks) if (f == NULL) { // couldn't find the entry-point, use eglGetProcAddress() f = getProcAddress(name); - if (f == NULL) { - f = (__eglMustCastToProperFunctionPointerType)gl_unimplemented; + } + if (f == NULL) { + // Try without the OES postfix + ssize_t index = ssize_t(strlen(name)) - 3; + if ((index>0 && (index<255)) && (!strcmp(name+index, "OES"))) { + strncpy(scrap, name, index); + scrap[index] = 0; + f = (__eglMustCastToProperFunctionPointerType)dlsym(dso, scrap); + //LOGD_IF(f, "found <%s> instead", scrap); } } + if (f == NULL) { + // Try with the OES postfix + ssize_t index = ssize_t(strlen(name)) - 3; + if ((index>0 && (index<252)) && (strcmp(name+index, "OES"))) { + strncpy(scrap, name, index); + scrap[index] = 0; + strcat(scrap, "OES"); + f = (__eglMustCastToProperFunctionPointerType)dlsym(dso, scrap); + //LOGD_IF(f, "found <%s> instead", scrap); + } + } + if (f == NULL) { + LOGD("%s", name); + f = (__eglMustCastToProperFunctionPointerType)gl_unimplemented; + } *curr++ = f; api++; } |