diff options
| author | Simon Hausmann <[email protected]> | 2014-02-11 11:08:11 +0100 |
|---|---|---|
| committer | Simon Hausmann <[email protected]> | 2014-02-11 12:00:31 +0100 |
| commit | 7c9497a6d47a02d961baef3993ba4cf4267ec607 (patch) | |
| tree | 335fae3e9e3a84d33310efca23f1d6993265805b /src/quick/scenegraph/qsgrenderloop.cpp | |
| parent | 67ba88947f57ab2d1859bbeb96c6dcba020561b1 (diff) | |
| parent | 6c840c70d61c3ae277b60a024a086215c743e5b3 (diff) | |
Merge remote-tracking branch 'origin/stable' into dev
Conflicts:
src/qml/compiler/qv4ssa.cpp
src/qml/jsruntime/qv4arrayobject.cpp
src/qml/jsruntime/qv4context.cpp
Change-Id: Ied5b23bec4dc14abe51127c507aed668f855c1e1
Diffstat (limited to 'src/quick/scenegraph/qsgrenderloop.cpp')
| -rw-r--r-- | src/quick/scenegraph/qsgrenderloop.cpp | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/src/quick/scenegraph/qsgrenderloop.cpp b/src/quick/scenegraph/qsgrenderloop.cpp index 5559745621..7b6e6d55ee 100644 --- a/src/quick/scenegraph/qsgrenderloop.cpp +++ b/src/quick/scenegraph/qsgrenderloop.cpp @@ -45,6 +45,7 @@ #include <QtCore/QCoreApplication> #include <QtCore/QTime> +#include <QtCore/QScopedPointer> #include <QtCore/private/qabstractanimation_p.h> #include <QtGui/QOpenGLContext> @@ -76,7 +77,7 @@ extern Q_GUI_EXPORT QImage qt_gl_read_framebuffer(const QSize &size, bool alpha_ DEFINE_BOOL_CONFIG_OPTION(qmlNoThreadedRenderer, QML_BAD_GUI_RENDER_LOOP); DEFINE_BOOL_CONFIG_OPTION(qmlForceThreadedRenderer, QML_FORCE_THREADED_RENDERER); // Might trigger graphics driver threading bugs, use at own risk -QSGRenderLoop *QSGRenderLoop::s_instance = 0; +Q_GLOBAL_STATIC(QScopedPointer<QSGRenderLoop>, s_renderLoopInstance); QSGRenderLoop::~QSGRenderLoop() { @@ -142,8 +143,8 @@ bool QSGRenderLoop::useConsistentTiming() QSGRenderLoop *QSGRenderLoop::instance() { - if (!s_instance) { - s_instance = QSGContext::createWindowManager(); + if (s_renderLoopInstance->isNull()) { + s_renderLoopInstance->reset(QSGContext::createWindowManager()); bool info = qEnvironmentVariableIsSet("QSG_INFO"); @@ -153,7 +154,7 @@ QSGRenderLoop *QSGRenderLoop::instance() qDebug() << "QSG: using fixed animation steps"; } - if (!s_instance) { + if (s_renderLoopInstance->isNull()) { enum RenderLoopType { BasicRenderLoop, @@ -185,26 +186,26 @@ QSGRenderLoop *QSGRenderLoop::instance() switch (loopType) { case ThreadedRenderLoop: if (info) qDebug() << "QSG: threaded render loop"; - s_instance = new QSGThreadedRenderLoop(); + s_renderLoopInstance->reset(new QSGThreadedRenderLoop()); break; case WindowsRenderLoop: if (info) qDebug() << "QSG: windows render loop"; - s_instance = new QSGWindowsRenderLoop(); + s_renderLoopInstance->reset(new QSGWindowsRenderLoop()); break; default: if (info) qDebug() << "QSG: basic render loop"; - s_instance = new QSGGuiThreadRenderLoop(); + s_renderLoopInstance->reset(new QSGGuiThreadRenderLoop()); break; } } } - return s_instance; + return s_renderLoopInstance->data(); } void QSGRenderLoop::setInstance(QSGRenderLoop *instance) { - Q_ASSERT(!s_instance); - s_instance = instance; + Q_ASSERT(!s_renderLoopInstance); + s_renderLoopInstance->reset(instance); } QSGGuiThreadRenderLoop::QSGGuiThreadRenderLoop() @@ -212,7 +213,7 @@ QSGGuiThreadRenderLoop::QSGGuiThreadRenderLoop() , eventPending(false) { sg = QSGContext::createDefaultContext(); - rc = new QSGRenderContext(sg); + rc = sg->createRenderContext(); } QSGGuiThreadRenderLoop::~QSGGuiThreadRenderLoop() |
