From a66d4cd82972996d76edff52d17464c150dec6a6 Mon Sep 17 00:00:00 2001 From: Samuli Piippo Date: Mon, 11 Jun 2018 16:16:55 +0300 Subject: Add fallback lookup for eglGetProcAddress Use the GLContext to find address for eglGetProcAddress symbol, if it's not found with dlopen. Change-Id: I3f5330c21ecc9b66e5e376d50d3fc6965b227f85 Reviewed-by: Michal Klocek --- src/core/gl_context_qt.cpp | 11 +++++++++++ src/core/gl_context_qt.h | 1 + src/core/gl_surface_qt.cpp | 4 ++++ 3 files changed, 16 insertions(+) diff --git a/src/core/gl_context_qt.cpp b/src/core/gl_context_qt.cpp index 9ed1db8b..95491709 100644 --- a/src/core/gl_context_qt.cpp +++ b/src/core/gl_context_qt.cpp @@ -155,6 +155,17 @@ QFunctionPointer GLContextHelper::getGlXGetProcAddress() return get_proc_address; } +QFunctionPointer GLContextHelper::getEglGetProcAddress() +{ + QFunctionPointer get_proc_address = nullptr; +#ifndef QT_NO_OPENGL + if (QOpenGLContext *context = qt_gl_global_share_context()) { + get_proc_address = context->getProcAddress("eglGetProcAddress"); + } +#endif + return get_proc_address; +} + QT_END_NAMESPACE #if defined(USE_OZONE) || defined(OS_WIN) diff --git a/src/core/gl_context_qt.h b/src/core/gl_context_qt.h index 8ffdad58..cecceabc 100644 --- a/src/core/gl_context_qt.h +++ b/src/core/gl_context_qt.h @@ -63,6 +63,7 @@ public: static void* getXDisplay(); static void* getNativeDisplay(); static QFunctionPointer getGlXGetProcAddress(); + static QFunctionPointer getEglGetProcAddress(); private: Q_INVOKABLE bool initializeContextOnBrowserThread(gl::GLContext* context, gl::GLSurface* surface, gl::GLContextAttribs attribs); diff --git a/src/core/gl_surface_qt.cpp b/src/core/gl_surface_qt.cpp index 7e579246..4d38d7c2 100644 --- a/src/core/gl_surface_qt.cpp +++ b/src/core/gl_surface_qt.cpp @@ -227,6 +227,10 @@ bool InitializeStaticGLBindings(GLImplementation implementation) { base::GetFunctionPointerFromNativeLibrary(library, "eglGetProcAddress")); if (!get_proc_address) { + QFunctionPointer address = GLContextHelper::getEglGetProcAddress(); + get_proc_address = reinterpret_cast(address); + } + if (!get_proc_address) { LOG(ERROR) << "eglGetProcAddress not found."; base::UnloadNativeLibrary(library); return false; -- cgit v1.1-6-g87c4