diff options
author | Sean Harmer <sean.harmer@kdab.com> | 2017-01-25 11:57:38 +0000 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2017-01-27 12:34:57 +0000 |
commit | 78a032e2328dddf0f60c0fe3063047888b92cc2a (patch) | |
tree | 0d7083f647cc585097875b589ddaa436b01656c3 /src/animation/backend/handler.cpp | |
parent | 5bd08543817328b5155201890031c4655f7d3b73 (diff) |
Add job to find all clip animators that should be running
Change-Id: I198a5d0d198c56756e4ac045527e02969b4dcecb
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/animation/backend/handler.cpp')
-rw-r--r-- | src/animation/backend/handler.cpp | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/src/animation/backend/handler.cpp b/src/animation/backend/handler.cpp index f1b25ef4d..57bde2add 100644 --- a/src/animation/backend/handler.cpp +++ b/src/animation/backend/handler.cpp @@ -37,6 +37,7 @@ #include "handler_p.h" #include <Qt3DAnimation/private/managers_p.h> #include <Qt3DAnimation/private/loadanimationclipjob_p.h> +#include <Qt3DAnimation/private/findrunningclipanimatorsjob_p.h> #include <Qt3DAnimation/private/animationlogging_p.h> QT_BEGIN_NAMESPACE @@ -52,8 +53,10 @@ Handler::Handler() , m_channelMappingManager(new ChannelMappingManager) , m_channelMapperManager(new ChannelMapperManager) , m_loadAnimationClipJob(new LoadAnimationClipJob) + , m_findRunningClipAnimatorsJob(new FindRunningClipAnimatorsJob) { m_loadAnimationClipJob->setHandler(this); + m_findRunningClipAnimatorsJob->setHandler(this); } Handler::~Handler() @@ -74,15 +77,17 @@ void Handler::setDirty(DirtyFlag flag, Qt3DCore::QNodeId nodeId) m_dirtyChannelMappers.push_back(handle); break; } + + case ClipAnimatorDirty: { + const auto handle = m_clipAnimatorManager->lookupHandle(nodeId); + m_dirtyClipAnimators.push_back(handle); + break; + } } } -void Handler::setClipAnimatorRunning(Qt3DCore::QNodeId clipAnimatorId, bool running) +void Handler::setClipAnimatorRunning(const HClipAnimator &handle, bool running) { - const auto handle = m_clipAnimatorManager->lookupHandle(clipAnimatorId); - if (handle.isNull()) - return; - // Add clip to running set if not already present if (running && !m_runningClipAnimators.contains(handle)) m_runningClipAnimators.push_back(handle); @@ -95,8 +100,6 @@ void Handler::setClipAnimatorRunning(Qt3DCore::QNodeId clipAnimatorId, bool runn if (it != m_runningClipAnimators.end()) m_runningClipAnimators.erase(it); } - - qCDebug(HandlerLogic) << "Running clips:" << m_runningClipAnimators; } QVector<Qt3DCore::QAspectJobPtr> Handler::jobsToExecute(qint64 time) @@ -113,6 +116,16 @@ QVector<Qt3DCore::QAspectJobPtr> Handler::jobsToExecute(qint64 time) m_dirtyAnimationClips.clear(); } + // If there are dirty clip animators, find the set that are able to + // run. I.e. are marked as running and have animation clips and + // channel mappings + if (!m_dirtyClipAnimators.isEmpty()) { + qCDebug(HandlerLogic) << "Added FindRunningClipAnimatorsJob"; + m_findRunningClipAnimatorsJob->setDirtyClipAnimators(m_dirtyClipAnimators); + jobs.push_back(m_findRunningClipAnimatorsJob); + m_dirtyClipAnimators.clear(); + } + // TODO: Queue up a job to update the channel mapping table return jobs; |