diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2019-07-05 09:03:00 +0200 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2019-08-07 09:33:58 +0200 |
commit | 260af7338d3a4216dbac292a4fd9112ad7512f44 (patch) | |
tree | 637e1d2b476bf0d0367237d1084d1299c7e8f8fc /src/core/aspects/qaspectmanager.cpp | |
parent | 8daa8bcb8e9a7110289d15c94f53a4be9adac1ac (diff) |
QAspectEngine: add run loop driving modes
Can be either Automatic (Qt3D is in charge or driving it) or manual
where the user has to call QAspectManager::processFrame() manually.
Change-Id: I3e41d24aea0ddc5cce61328d9731b23f91b54215
Reviewed-by: Mike Krus <mike.krus@kdab.com>
Diffstat (limited to 'src/core/aspects/qaspectmanager.cpp')
-rw-r--r-- | src/core/aspects/qaspectmanager.cpp | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/src/core/aspects/qaspectmanager.cpp b/src/core/aspects/qaspectmanager.cpp index a028e38cb..6502590d8 100644 --- a/src/core/aspects/qaspectmanager.cpp +++ b/src/core/aspects/qaspectmanager.cpp @@ -103,6 +103,7 @@ QAspectManager::QAspectManager(QObject *parent) , m_changeArbiter(new QChangeArbiter(this)) , m_serviceLocator(new QServiceLocator()) , m_simulationLoopRunning(false) + , m_driveMode(QAspectEngine::Automatic) { qRegisterMetaType<QSurface *>("QSurface*"); qCDebug(Aspects) << Q_FUNC_INFO; @@ -115,6 +116,12 @@ QAspectManager::~QAspectManager() delete m_scheduler; } +void QAspectManager::setRunMode(QAspectEngine::RunMode mode) +{ + qCDebug(Aspects) << Q_FUNC_INFO << "Running Loop Drive Mode set to" << mode; + m_driveMode = mode; +} + // Main thread (called by QAspectEngine) void QAspectManager::enterSimulationLoop() { @@ -137,8 +144,9 @@ void QAspectManager::enterSimulationLoop() } qCDebug(Aspects) << "Done calling onEngineStartup() for each aspect"; - // Trigger event loop - requestNextFrame(); + // Start running loop if Qt3D is in charge of driving it + if (m_driveMode == QAspectEngine::Automatic) + requestNextFrame(); } // Main thread (called by QAspectEngine) @@ -319,8 +327,9 @@ bool QAspectManager::event(QEvent *e) // Process current frame processFrame(); - // Request next frame if we are still running - if (m_simulationLoopRunning) + // Request next frame if we are still running and if Qt3D is driving + // the loop + if (m_simulationLoopRunning && m_driveMode == QAspectEngine::Automatic) requestNextFrame(); } |