mirror of
https://gitdl.cn/https://github.com/chakralinux/core.git
synced 2025-02-11 22:14:41 +08:00
69 lines
2.5 KiB
Diff
69 lines
2.5 KiB
Diff
|
From a66d4cd82972996d76edff52d17464c150dec6a6 Mon Sep 17 00:00:00 2001
|
||
|
From: Samuli Piippo <samuli.piippo@qt.io>
|
||
|
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 <michal.klocek@qt.io>
|
||
|
---
|
||
|
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<gl::GLGetProcAddressProc>(address);
|
||
|
+ }
|
||
|
+ if (!get_proc_address) {
|
||
|
LOG(ERROR) << "eglGetProcAddress not found.";
|
||
|
base::UnloadNativeLibrary(library);
|
||
|
return false;
|
||
|
--
|
||
|
cgit v1.1-6-g87c4
|
||
|
|