123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- From bdfd084296681bcead17c42f1e5cf0e24ee04f65 Mon Sep 17 00:00:00 2001
- From: Viktor Engelmann <viktor.engelmann@qt.io>
- Date: Fri, 7 Jul 2017 12:56:19 +0200
- Subject: [PATCH] Load libEGL and libGLES2 symbols implicitly
- MIME-Version: 1.0
- Content-Type: text/plain; charset=utf-8
- Content-Transfer-Encoding: 8bit
- Instead of explicitly loading libraries from hard-coded locations,
- we now just call dlopen(NULL, RTLD_LAZY). This returns a handle to
- the host process'es context, which already contains the symbols of
- both these libraries, because we link against them.
- It was necessary to bypass LoadLibrary, because that expects a non-NULL
- file path, so we couldn't pass NULL through that interface.
- Upstream-Status: Merged
- Task-number: QTBUG-57761
- Change-Id: I29f037dfe542222b5188a33c7727c81a464a87bb
- Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
- Reviewed-by: Michal Klocek <michal.klocek@qt.io>
- Signed-off-by: Gaël PORTAY <gael.portay@savoirfairelinux.com>
- [gportay: backport from 5.9 and merge conflicts]
- ---
- src/core/surface_factory_qt.cpp | 40 ++++++++--------------------------------
- 1 file changed, 8 insertions(+), 32 deletions(-)
- diff --git a/src/core/surface_factory_qt.cpp b/src/core/surface_factory_qt.cpp
- index 48c91bfc..c6059b67 100644
- --- a/src/core/surface_factory_qt.cpp
- +++ b/src/core/surface_factory_qt.cpp
- @@ -51,51 +51,27 @@
- #if defined(USE_OZONE)
-
- #include <EGL/egl.h>
- -
- -#ifndef QT_LIBDIR_EGL
- -#define QT_LIBDIR_EGL "/usr/lib"
- -#endif
- -#ifndef QT_LIBDIR_GLES2
- -#define QT_LIBDIR_GLES2 QT_LIBDIR_EGL
- -#endif
- +#include <dlfcn.h>
-
- namespace QtWebEngineCore {
-
- -base::NativeLibrary LoadLibrary(const base::FilePath& filename) {
- - base::NativeLibraryLoadError error;
- - base::NativeLibrary library = base::LoadNativeLibrary(filename, &error);
- - if (!library) {
- - LOG(ERROR) << "Failed to load " << filename.MaybeAsASCII() << ": " << error.ToString();
- - return NULL;
- - }
- - return library;
- -}
- -
- bool SurfaceFactoryQt::LoadEGLGLES2Bindings(AddGLLibraryCallback add_gl_library, SetGLGetProcAddressProcCallback set_gl_get_proc_address)
- {
- - base::FilePath libEGLPath = QtWebEngineCore::toFilePath(QT_LIBDIR_EGL);
- - libEGLPath = libEGLPath.Append("libEGL.so.1");
- - base::NativeLibrary eglLibrary = LoadLibrary(libEGLPath);
- - if (!eglLibrary)
- - return false;
- -
- - base::FilePath libGLES2Path = QtWebEngineCore::toFilePath(QT_LIBDIR_GLES2);
- - libGLES2Path = libGLES2Path.Append("libGLESv2.so.2");
- - base::NativeLibrary gles2Library = LoadLibrary(libGLES2Path);
- - if (!gles2Library)
- + base::NativeLibrary eglgles2Library = dlopen(NULL, RTLD_LAZY);
- + if (!eglgles2Library) {
- + LOG(ERROR) << "Failed to open EGL/GLES2 context " << dlerror();
- return false;
- + }
-
- - gfx::GLGetProcAddressProc get_proc_address = reinterpret_cast<gfx::GLGetProcAddressProc>(base::GetFunctionPointerFromNativeLibrary(eglLibrary, "eglGetProcAddress"));
- + gfx::GLGetProcAddressProc get_proc_address = reinterpret_cast<gfx::GLGetProcAddressProc>(base::GetFunctionPointerFromNativeLibrary(eglgles2Library, "eglGetProcAddress"));
- if (!get_proc_address) {
- LOG(ERROR) << "eglGetProcAddress not found.";
- - base::UnloadNativeLibrary(eglLibrary);
- - base::UnloadNativeLibrary(gles2Library);
- + base::UnloadNativeLibrary(eglgles2Library);
- return false;
- }
-
- gfx::SetGLGetProcAddressProc(get_proc_address);
- - gfx::AddGLNativeLibrary(eglLibrary);
- - gfx::AddGLNativeLibrary(gles2Library);
- + gfx::AddGLNativeLibrary(eglgles2Library);
- return true;
- }
-
- --
- 2.15.0
|