summaryrefslogtreecommitdiffstats
path: root/opengl/libs/EGL/egl.cpp
diff options
context:
space:
mode:
authorMathias Agopian <mathias@google.com>2009-04-23 19:57:10 -0700
committerMathias Agopian <mathias@google.com>2009-04-23 19:57:10 -0700
commit1c2be6af86800875d57bb493fd6ce6b18d742dfe (patch)
tree10b39109b8765c55bb89de37c472c7a751894742 /opengl/libs/EGL/egl.cpp
parentb519abb606c819c446a408f422530268b21a100b (diff)
downloadframeworks_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.cpp30
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++;
}