diff options
author | Anton Kreuzkamp <anton.kreuzkamp@kdab.com> | 2019-04-08 16:27:42 +0200 |
---|---|---|
committer | Anton Kreuzkamp <anton.kreuzkamp@kdab.com> | 2019-05-28 10:51:21 +0200 |
commit | f39178a415cb41470775a86e0aa358faa3686d81 (patch) | |
tree | a8fc9ece166067387318d295035ef8b5f389e6ee /src/core/qchangearbiter_p.h | |
parent | d38db1a6b5027cd69777946e5a2d24e2a404dfa0 (diff) |
Scene3D: Revise render loop and synchronization
Before, the Scene3DRenderer marked the sg-node dirty in render, which
would then already mark it dirty for the next frame. This only works as
long as we always render, which is undesireble in some cases.
fa12f14b2 changed rendering to not always happen anymore. Thus, that
commit broke rendering under certain circumstances.
Now, Scene3DRenderer listens on a signal from the QChangeArbiter about
new pending changes. In reaction to this signal, we set an internal
dirty-flag in Scene3DRenderer. Only if this flag is set, synchronization
and rendering will happen on the Qt3D side.
Change-Id: I3b33faa5d60c270bd9b903b0e34c8fa24e2e29fd
Task-number: QTBUG-69985
Task-number: QTBUG-72923
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/core/qchangearbiter_p.h')
-rw-r--r-- | src/core/qchangearbiter_p.h | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/core/qchangearbiter_p.h b/src/core/qchangearbiter_p.h index 4a82061ed..ac52273ea 100644 --- a/src/core/qchangearbiter_p.h +++ b/src/core/qchangearbiter_p.h @@ -120,6 +120,9 @@ public: static void createThreadLocalChangeQueue(void *changeArbiter); static void destroyThreadLocalChangeQueue(void *changeArbiter); +Q_SIGNALS: + void receivedChange(); + protected: typedef std::vector<QSceneChangePtr> QChangeQueue; typedef QPair<ChangeFlags, QObserverInterface *> QObserverPair; @@ -134,7 +137,7 @@ protected: void removeLockingChangeQueue(QChangeQueue *queue); private: - QMutex m_mutex; + mutable QMutex m_mutex; QAbstractAspectJobManager *m_jobManager; // The lists of observers indexed by observable (QNodeId). |