summaryrefslogtreecommitdiffstats
path: root/src/core/aspects/qaspectmanager.cpp
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2019-07-05 09:03:00 +0200
committerPaul Lemire <paul.lemire@kdab.com>2019-08-07 09:33:58 +0200
commit260af7338d3a4216dbac292a4fd9112ad7512f44 (patch)
tree637e1d2b476bf0d0367237d1084d1299c7e8f8fc /src/core/aspects/qaspectmanager.cpp
parent8daa8bcb8e9a7110289d15c94f53a4be9adac1ac (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.cpp17
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();
}