diff options
author | Andras Becsi <andras.becsi@digia.com> | 2014-05-14 17:53:59 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-05-15 17:37:10 +0200 |
commit | c0bc770eb1dfcc6689df44438cd396721d5129fc (patch) | |
tree | f07b2a56863a40c0cc7916910b7dd5977ad5e118 /src/core/gl_context_qt.cpp | |
parent | c45fc409c14f2e4ccb1aacd0b8af36dbba399666 (diff) |
Enable GLContextHelper and register a SurfaceFactoryQt on eAndroid
This is needed to run on certain hardware that needs the shared EGL
contexts to be created on the same thread.
To prevent a deadlock on eAndroid only use a blocking connection
if we are not on the main thread where the singleton was created,
since there is a call to this from gpu_info_collector_android
before the GPU thread is launched.
Change-Id: I6887ad1218b8426097f454741dc5a79ee94f9d62
Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
Diffstat (limited to 'src/core/gl_context_qt.cpp')
-rw-r--r-- | src/core/gl_context_qt.cpp | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/core/gl_context_qt.cpp b/src/core/gl_context_qt.cpp index 1d51292dc..f440679cf 100644 --- a/src/core/gl_context_qt.cpp +++ b/src/core/gl_context_qt.cpp @@ -41,6 +41,8 @@ #include "gl_context_qt.h" +#include <QGuiApplication> +#include <QThread> #include "ui/gl/gl_context_egl.h" QT_BEGIN_NAMESPACE @@ -53,6 +55,12 @@ void GLContextHelper::initialize() contextHelper = new GLContextHelper; } +void GLContextHelper::destroy() +{ + delete contextHelper; + contextHelper = 0; +} + bool GLContextHelper::initializeContextOnBrowserThread(gfx::GLContext* context, gfx::GLSurface* surface) { return context->Initialize(surface, gfx::PreferDiscreteGpu); @@ -61,7 +69,8 @@ bool GLContextHelper::initializeContextOnBrowserThread(gfx::GLContext* context, bool GLContextHelper::initializeContext(gfx::GLContext* context, gfx::GLSurface* surface) { bool ret = false; - QMetaObject::invokeMethod(contextHelper, "initializeContextOnBrowserThread", Qt::BlockingQueuedConnection, + Qt::ConnectionType connType = (QThread::currentThread() == qApp->thread()) ? Qt::DirectConnection : Qt::BlockingQueuedConnection; + QMetaObject::invokeMethod(contextHelper, "initializeContextOnBrowserThread", connType, Q_RETURN_ARG(bool, ret), Q_ARG(gfx::GLContext*, context), Q_ARG(gfx::GLSurface*, surface)); @@ -70,7 +79,7 @@ bool GLContextHelper::initializeContext(gfx::GLContext* context, gfx::GLSurface* QT_END_NAMESPACE -#if defined(USE_OZONE) +#if defined(USE_OZONE) || defined(OS_ANDROID) namespace gfx { |