diff options
-rw-r--r-- | src/render/frontend/qrenderaspect.cpp | 2 | ||||
-rw-r--r-- | src/render/geometry/armature.cpp | 32 | ||||
-rw-r--r-- | src/render/geometry/armature_p.h | 4 | ||||
-rw-r--r-- | tests/auto/render/armature/tst_armature.cpp | 21 |
4 files changed, 22 insertions, 37 deletions
diff --git a/src/render/frontend/qrenderaspect.cpp b/src/render/frontend/qrenderaspect.cpp index 16ea26136..7bd721c43 100644 --- a/src/render/frontend/qrenderaspect.cpp +++ b/src/render/frontend/qrenderaspect.cpp @@ -271,7 +271,7 @@ void QRenderAspectPrivate::registerBackendTypes() q->registerBackendType<QComputeCommand>(QSharedPointer<Render::NodeFunctor<Render::ComputeCommand, Render::ComputeCommandManager> >::create(m_renderer)); q->registerBackendType<QGeometry>(QSharedPointer<Render::NodeFunctor<Render::Geometry, Render::GeometryManager> >::create(m_renderer)); q->registerBackendType<QGeometryRenderer, true>(QSharedPointer<Render::GeometryRendererFunctor>::create(m_renderer, m_nodeManagers->geometryRendererManager())); - q->registerBackendType<Qt3DCore::QArmature>(QSharedPointer<Render::NodeFunctor<Render::Armature, Render::ArmatureManager>>::create(m_renderer)); + q->registerBackendType<Qt3DCore::QArmature, true>(QSharedPointer<Render::NodeFunctor<Render::Armature, Render::ArmatureManager>>::create(m_renderer)); q->registerBackendType<Qt3DCore::QAbstractSkeleton, true>(QSharedPointer<Render::SkeletonFunctor>::create(m_renderer, m_nodeManagers->skeletonManager(), m_nodeManagers->jointManager())); q->registerBackendType<Qt3DCore::QJoint, true>(QSharedPointer<Render::JointFunctor>::create(m_renderer, m_nodeManagers->jointManager(), m_nodeManagers->skeletonManager())); diff --git a/src/render/geometry/armature.cpp b/src/render/geometry/armature.cpp index 15a26c9ec..cfa2e572a 100644 --- a/src/render/geometry/armature.cpp +++ b/src/render/geometry/armature.cpp @@ -36,6 +36,8 @@ #include "armature_p.h" +#include <Qt3DCore/qarmature.h> +#include <Qt3DCore/qabstractskeleton.h> #include <Qt3DCore/qpropertyupdatedchange.h> #include <Qt3DCore/private/qarmature_p.h> @@ -52,32 +54,20 @@ Armature::Armature() { } -void Armature::cleanup() +void Armature::syncFromFrontEnd(const QNode *frontEnd, bool firstTime) { - m_skeletonId = Qt3DCore::QNodeId(); - setEnabled(false); -} + BackendNode::syncFromFrontEnd(frontEnd, firstTime); + const QArmature *node = qobject_cast<const QArmature *>(frontEnd); + if (!node) + return; -void Armature::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) -{ - const auto typedChange = qSharedPointerCast<QNodeCreatedChange<QArmatureData>>(change); - m_skeletonId = typedChange->data.skeletonId; + m_skeletonId = node->skeleton() ? node->skeleton()->id() : QNodeId{}; } -void Armature::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) +void Armature::cleanup() { - switch (e->type()) { - case Qt3DCore::PropertyUpdated: { - const auto change = qSharedPointerCast<QPropertyUpdatedChange>(e); - if (change->propertyName() == QByteArrayLiteral("skeleton")) - m_skeletonId = change->value().value<QNodeId>(); - break; - } - - default: - break; - } - QBackendNode::sceneChangeEvent(e); + m_skeletonId = Qt3DCore::QNodeId(); + setEnabled(false); } } // namespace Render diff --git a/src/render/geometry/armature_p.h b/src/render/geometry/armature_p.h index 3e6e52a3f..39baa4a79 100644 --- a/src/render/geometry/armature_p.h +++ b/src/render/geometry/armature_p.h @@ -63,7 +63,7 @@ class Q_AUTOTEST_EXPORT Armature : public BackendNode public: Armature(); - void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) override; + void syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime) override; void cleanup(); Qt3DCore::QNodeId skeletonId() const { return m_skeletonId; } @@ -73,8 +73,6 @@ public: const UniformValue &skinningPaletteUniform() const { return m_skinningPaletteUniform; } private: - void initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) final; - Qt3DCore::QNodeId m_skeletonId; UniformValue m_skinningPaletteUniform; }; diff --git a/tests/auto/render/armature/tst_armature.cpp b/tests/auto/render/armature/tst_armature.cpp index 2c481db7a..4f9380a3b 100644 --- a/tests/auto/render/armature/tst_armature.cpp +++ b/tests/auto/render/armature/tst_armature.cpp @@ -56,7 +56,7 @@ private Q_SLOTS: armature.setSkeleton(skeleton); // WHEN - simulateInitialization(&armature, &backendArmature); + simulateInitializationSync(&armature, &backendArmature); // THEN QCOMPARE(backendArmature.peerId(), armature.id()); @@ -80,7 +80,7 @@ private Q_SLOTS: armature.setSkeleton(skeleton); // WHEN - simulateInitialization(&armature, &backendArmature); + simulateInitializationSync(&armature, &backendArmature); backendArmature.cleanup(); // THEN @@ -91,24 +91,21 @@ private Q_SLOTS: void checkPropertyChanges() { // GIVEN + QArmature armature; Armature backendArmature; - Qt3DCore::QPropertyUpdatedChangePtr updateChange; + simulateInitializationSync(&armature, &backendArmature); // WHEN - updateChange.reset(new Qt3DCore::QPropertyUpdatedChange(Qt3DCore::QNodeId())); - updateChange->setPropertyName("enabled"); - updateChange->setValue(true); - backendArmature.sceneChangeEvent(updateChange); + armature.setEnabled(false); + backendArmature.syncFromFrontEnd(&armature, false); // THEN - QCOMPARE(backendArmature.isEnabled(), true); + QCOMPARE(backendArmature.isEnabled(), false); // WHEN auto newSkeleton = new QSkeleton(); - updateChange.reset(new Qt3DCore::QPropertyUpdatedChange(Qt3DCore::QNodeId())); - updateChange->setPropertyName("skeleton"); - updateChange->setValue(QVariant::fromValue(newSkeleton->id())); - backendArmature.sceneChangeEvent(updateChange); + armature.setSkeleton(newSkeleton); + backendArmature.syncFromFrontEnd(&armature, false); // THEN QCOMPARE(backendArmature.skeletonId(), newSkeleton->id()); |