summaryrefslogtreecommitdiffstats
path: root/src/core/gl_context_qt.cpp
diff options
context:
space:
mode:
authorAndras Becsi <andras.becsi@digia.com>2014-05-14 17:53:59 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-05-15 17:37:10 +0200
commitc0bc770eb1dfcc6689df44438cd396721d5129fc (patch)
treef07b2a56863a40c0cc7916910b7dd5977ad5e118 /src/core/gl_context_qt.cpp
parentc45fc409c14f2e4ccb1aacd0b8af36dbba399666 (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.cpp13
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 {