summaryrefslogtreecommitdiffstats
path: root/src/animation
diff options
context:
space:
mode:
authorMike Krus <mike.krus@kdab.com>2019-10-03 07:14:42 +0100
committerMike Krus <mike.krus@kdab.com>2019-10-08 12:48:19 +0100
commit06567dc188c9302c5f2a4f9f86e8157051448f03 (patch)
tree5280b867bbedb6fd067e3675cd1016c6d4643d81 /src/animation
parent7433513f5f08d02b9ed6233c4159f8f32f0db556 (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.cpp32
-rw-r--r--src/animation/backend/skeleton_p.h2
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(); }