diff options
Diffstat (limited to 'opengl/libs/EGL/egl_angle_platform.cpp')
-rw-r--r-- | opengl/libs/EGL/egl_angle_platform.cpp | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/opengl/libs/EGL/egl_angle_platform.cpp b/opengl/libs/EGL/egl_angle_platform.cpp index 4250daa5cb..dc8e5871ae 100644 --- a/opengl/libs/EGL/egl_angle_platform.cpp +++ b/opengl/libs/EGL/egl_angle_platform.cpp @@ -27,11 +27,15 @@ #include <graphicsenv/GraphicsEnv.h> #include <log/log.h> #include <time.h> +#include <vndksupport/linker.h> #include "Loader.h" namespace angle { +constexpr char kAngleEs2Lib[] = "libGLESv2_angle.so"; +constexpr int kAngleDlFlags = RTLD_LOCAL | RTLD_NOW; + static GetDisplayPlatformFunc angleGetDisplayPlatform = nullptr; static ResetDisplayPlatformFunc angleResetDisplayPlatform = nullptr; @@ -101,11 +105,22 @@ static void assignAnglePlatformMethods(PlatformMethods* platformMethods) { bool initializeAnglePlatform(EGLDisplay dpy) { // Since we're inside libEGL, use dlsym to lookup fptr for ANGLEGetDisplayPlatform android_namespace_t* ns = android::GraphicsEnv::getInstance().getAngleNamespace(); - const android_dlextinfo dlextinfo = { - .flags = ANDROID_DLEXT_USE_NAMESPACE, - .library_namespace = ns, - }; - void* so = android_dlopen_ext("libGLESv2_angle.so", RTLD_LOCAL | RTLD_NOW, &dlextinfo); + void* so = nullptr; + if (ns) { + const android_dlextinfo dlextinfo = { + .flags = ANDROID_DLEXT_USE_NAMESPACE, + .library_namespace = ns, + }; + so = android_dlopen_ext(kAngleEs2Lib, kAngleDlFlags, &dlextinfo); + } else { + // If we are here, ANGLE is loaded as built-in gl driver in the sphal. + so = android_load_sphal_library(kAngleEs2Lib, kAngleDlFlags); + } + if (!so) { + ALOGE("%s failed to dlopen %s!", __FUNCTION__, kAngleEs2Lib); + return false; + } + angleGetDisplayPlatform = reinterpret_cast<GetDisplayPlatformFunc>(dlsym(so, "ANGLEGetDisplayPlatform")); |