diff options
author | Frederik Gladhorn <[email protected]> | 2014-10-09 18:13:54 +0200 |
---|---|---|
committer | Frederik Gladhorn <[email protected]> | 2014-10-09 18:14:56 +0200 |
commit | e1dfb78667bd7e8dc418e12a9669404adea7e2cb (patch) | |
tree | 16f40a9852281a63c1f98af21c680bddedaa5258 /src/quick/scenegraph/qsgthreadedrenderloop.cpp | |
parent | 28949c9699014b4f7abba396c28dea207b29821e (diff) | |
parent | 26bbd784d67d151eee531e5ff57977a5353549f5 (diff) |
Merge remote-tracking branch 'origin/5.4' into dev
Conflicts:
src/quick/items/context2d/qquickcanvasitem.cpp
src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp
src/quick/scenegraph/coreapi/qsgrenderer.cpp
src/quick/scenegraph/qsgadaptationlayer.cpp
src/quick/scenegraph/qsgrenderloop.cpp
src/quick/scenegraph/qsgthreadedrenderloop.cpp
src/quick/scenegraph/qsgwindowsrenderloop.cpp
src/quick/scenegraph/util/qsgatlastexture.cpp
src/quick/scenegraph/util/qsgtexture.cpp
src/quick/util/qquickprofiler_p.h
Change-Id: Ie274c3baf72a8a0711c87d67238d68e2b2887429
Diffstat (limited to 'src/quick/scenegraph/qsgthreadedrenderloop.cpp')
-rw-r--r-- | src/quick/scenegraph/qsgthreadedrenderloop.cpp | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/src/quick/scenegraph/qsgthreadedrenderloop.cpp b/src/quick/scenegraph/qsgthreadedrenderloop.cpp index 92c478b54f..29bee67f69 100644 --- a/src/quick/scenegraph/qsgthreadedrenderloop.cpp +++ b/src/quick/scenegraph/qsgthreadedrenderloop.cpp @@ -189,9 +189,15 @@ public: class WMSyncEvent : public WMWindowEvent { public: - WMSyncEvent(QQuickWindow *c, bool inExpose) : WMWindowEvent(c, WM_RequestSync), size(c->size()), syncInExpose(inExpose) { } + WMSyncEvent(QQuickWindow *c, bool inExpose, bool force) + : WMWindowEvent(c, WM_RequestSync) + , size(c->size()) + , syncInExpose(inExpose) + , forceRenderPass(force) + {} QSize size; bool syncInExpose; + bool forceRenderPass; }; @@ -368,6 +374,10 @@ bool QSGRenderThread::event(QEvent *e) qCDebug(QSG_LOG_RENDERLOOP) << QSG_RT_PAD << "- triggered from expose"; pendingUpdate |= ExposeRequest; } + if (se->forceRenderPass) { + qCDebug(QSG_LOG_RENDERLOOP) << QSG_RT_PAD << "- repaint regardless"; + pendingUpdate |= RepaintRequest; + } return true; } case WM_TryRelease: { @@ -641,7 +651,6 @@ void QSGRenderThread::run() qCDebug(QSG_LOG_RENDERLOOP) << QSG_RT_PAD << "run()"; animatorDriver = sgrc->sceneGraphContext()->createAnimationDriver(0); animatorDriver->install(); - QUnifiedTimer::instance(true)->setConsistentTiming(QSGRenderLoop::useConsistentTiming()); if (QQmlDebugService::isDebuggingEnabled()) QQuickProfiler::registerAnimationCallback(); @@ -855,6 +864,7 @@ void QSGThreadedRenderLoop::handleExposure(QQuickWindow *window) win.thread = new QSGRenderThread(this, QQuickWindowPrivate::get(window)->context); win.timerId = 0; win.updateDuringSync = false; + win.forceRenderPass = true; // also covered by polishAndSync(inExpose=true), but doesn't hurt m_windows << win; w = &m_windows.last(); } @@ -998,7 +1008,9 @@ void QSGThreadedRenderLoop::update(QQuickWindow *window) } qCDebug(QSG_LOG_RENDERLOOP) << "update on window" << w->window; - w->thread->postEvent(new QEvent(WM_RequestRepaint)); + // We set forceRenderPass because we want to make sure the QQuickWindow + // actually does a full render pass after the next sync. + w->forceRenderPass = true; maybeUpdate(w); } @@ -1107,7 +1119,8 @@ void QSGThreadedRenderLoop::polishAndSync(Window *w, bool inExpose) qCDebug(QSG_LOG_RENDERLOOP) << "- lock for sync"; w->thread->mutex.lock(); m_lockedForSync = true; - w->thread->postEvent(new WMSyncEvent(window, inExpose)); + w->thread->postEvent(new WMSyncEvent(window, inExpose, w->forceRenderPass)); + w->forceRenderPass = false; qCDebug(QSG_LOG_RENDERLOOP) << "- wait for sync"; if (profileFrames) |