diff options
Diffstat (limited to 'source/Irrlicht/CEGLManager.cpp')
-rwxr-xr-x | source/Irrlicht/CEGLManager.cpp | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/source/Irrlicht/CEGLManager.cpp b/source/Irrlicht/CEGLManager.cpp index 9f616b5..dc854c0 100755 --- a/source/Irrlicht/CEGLManager.cpp +++ b/source/Irrlicht/CEGLManager.cpp @@ -9,6 +9,7 @@ #include "irrString.h"
#include "irrArray.h"
#include "os.h"
+#include <dlfcn.h>
#if defined(_IRR_COMPILE_WITH_ANDROID_DEVICE_)
#include <android/native_activity.h>
@@ -20,7 +21,7 @@ namespace video {
CEGLManager::CEGLManager() : IContextManager(), EglWindow(0), EglDisplay(EGL_NO_DISPLAY),
- EglSurface(EGL_NO_SURFACE), EglContext(EGL_NO_CONTEXT), EglConfig(0), MajorVersion(0), MinorVersion(0)
+ EglSurface(EGL_NO_SURFACE), EglContext(EGL_NO_CONTEXT), EglConfig(0), MajorVersion(0), MinorVersion(0), libHandle(NULL)
{
#ifdef _DEBUG
setDebugName("CEGLManager");
@@ -109,6 +110,9 @@ void CEGLManager::terminate() MajorVersion = 0;
MinorVersion = 0;
+
+ if (libHandle)
+ dlclose(libHandle);
}
bool CEGLManager::generateSurface()
@@ -590,6 +594,19 @@ const SExposedVideoData& CEGLManager::getContext() const return Data;
}
+void* CEGLManager::getProcAddress(const std::string &procName)
+{
+ void* proc = NULL;
+ proc = (void*)eglGetProcAddress(procName.c_str());
+ if (!proc) { // fallback
+ if (!libHandle)
+ libHandle = dlopen("libGLESv2.so", RTLD_LAZY);
+ if (libHandle)
+ proc = dlsym(libHandle, procName.c_str());
+ }
+ return proc;
+}
+
bool CEGLManager::swapBuffers()
{
return (eglSwapBuffers(EglDisplay, EglSurface)==EGL_TRUE);
|