diff options
author | Mike Krus <mike.krus@kdab.com> | 2019-10-03 07:14:42 +0100 |
---|---|---|
committer | Mike Krus <mike.krus@kdab.com> | 2019-10-08 12:48:19 +0100 |
commit | 06567dc188c9302c5f2a4f9f86e8157051448f03 (patch) | |
tree | 5280b867bbedb6fd067e3675cd1016c6d4643d81 /src/animation | |
parent | 7433513f5f08d02b9ed6233c4159f8f32f0db556 (diff) |
Update LoadSkeletonJob to use direct sync
Change-Id: I5622f9784628b7217f6e37c700ac314b7264f439
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/animation')
-rw-r--r-- | src/animation/backend/skeleton.cpp | 32 | ||||
-rw-r--r-- | src/animation/backend/skeleton_p.h | 2 |
2 files changed, 12 insertions, 22 deletions
diff --git a/src/animation/backend/skeleton.cpp b/src/animation/backend/skeleton.cpp index 2d395848c..60e436a71 100644 --- a/src/animation/backend/skeleton.cpp +++ b/src/animation/backend/skeleton.cpp @@ -36,6 +36,7 @@ #include "skeleton_p.h" #include <Qt3DCore/qpropertyupdatedchange.h> +#include <Qt3DCore/private/qabstractskeleton_p.h> QT_BEGIN_NAMESPACE @@ -62,31 +63,20 @@ void Skeleton::cleanup() m_jointLocalPoses.clear(); } -// TODOSYNC remove once backend > backend communication no longer requires messages -void Skeleton::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) +void Skeleton::syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime) { - // Get the joint names and initial local poses from a change sent - // by the render aspect when the skeleton has been loaded. - switch (e->type()) { - case PropertyUpdated: { - const auto change = qSharedPointerCast<QPropertyUpdatedChange>(e); - if (change->propertyName() == QByteArrayLiteral("jointNamesAndLocalPoses")) { - const auto payload = change->value().value<JointNamesAndLocalPoses>(); - m_jointNames = payload.names; - m_jointLocalPoses = payload.localPoses; + BackendNode::syncFromFrontEnd(frontEnd, firstTime); - // TODO: Mark joint info as dirty so we can rebuild any indexes used - // by the animators and channel mappings. - } + const Qt3DCore::QAbstractSkeleton *node = qobject_cast<const Qt3DCore::QAbstractSkeleton *>(frontEnd); + if (!node) + return; - break; - } + auto dnode = Qt3DCore::QAbstractSkeletonPrivate::get(node); - default: - break; - } - - BackendNode::sceneChangeEvent(e); + // TODO: Mark joint info as dirty so we can rebuild any indexes used + // by the animators and channel mappings. + m_jointNames = dnode->m_jointNames; + m_jointLocalPoses = dnode->m_localPoses; } } // namespace Animation diff --git a/src/animation/backend/skeleton_p.h b/src/animation/backend/skeleton_p.h index 544eb08be..d44f8fc1c 100644 --- a/src/animation/backend/skeleton_p.h +++ b/src/animation/backend/skeleton_p.h @@ -62,7 +62,7 @@ public: Skeleton(); void cleanup(); - void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) Q_DECL_OVERRIDE; + void syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime) override; QVector<Qt3DCore::Sqt> joints() const { return m_jointLocalPoses; } int jointCount() const { return m_jointLocalPoses.size(); } |