From 8256e82d72f17721fb40428df6c7ba397b3e7edd Mon Sep 17 00:00:00 2001 From: Sean Harmer Date: Sat, 4 Mar 2017 16:46:30 +0000 Subject: Add virtual to ClipBlendNode to allow querying dependencies This will allow a job to build up a list of clips to be evaluated for the blend tree. This has enough flexibility to allow us to support many types of bend node in the future but still allow us to only evaluate the clips actually needed at any given time and for the current set of blend node states. Change-Id: I6bfff6d18434af4f09764d890af6f8f429996994 Reviewed-by: Mike Krus --- .../additiveclipblend/tst_additiveclipblend.cpp | 28 ++++++++++++++++++++++ .../animation/clipblendnode/tst_clipblendnode.cpp | 5 ++++ .../tst_clipblendnodemanager.cpp | 4 ++++ .../clipblendvalue/tst_clipblendvalue.cpp | 24 +++++++++++++++++++ .../animation/lerpclipblend/tst_lerpclipblend.cpp | 27 +++++++++++++++++++++ 5 files changed, 88 insertions(+) (limited to 'tests') diff --git a/tests/auto/animation/additiveclipblend/tst_additiveclipblend.cpp b/tests/auto/animation/additiveclipblend/tst_additiveclipblend.cpp index e6777cd6a..bdae53ee3 100644 --- a/tests/auto/animation/additiveclipblend/tst_additiveclipblend.cpp +++ b/tests/auto/animation/additiveclipblend/tst_additiveclipblend.cpp @@ -171,6 +171,34 @@ private Q_SLOTS: // THEN QCOMPARE(computed, result); } + + void checkDependencyIds() + { + // GIVEN + Qt3DAnimation::Animation::AdditiveClipBlend addBlend; + auto baseClipId = Qt3DCore::QNodeId::createId(); + auto additiveClipId = Qt3DCore::QNodeId::createId(); + + // WHEN + addBlend.setBaseClipId(baseClipId); + addBlend.setAdditiveClipId(additiveClipId); + QVector actualIds = addBlend.dependencyIds(); + + // THEN + QCOMPARE(actualIds.size(), 2); + QCOMPARE(actualIds[0], baseClipId); + QCOMPARE(actualIds[1], additiveClipId); + + // WHEN + auto anotherAdditiveClipId = Qt3DCore::QNodeId::createId(); + addBlend.setAdditiveClipId(anotherAdditiveClipId); + actualIds = addBlend.dependencyIds(); + + // THEN + QCOMPARE(actualIds.size(), 2); + QCOMPARE(actualIds[0], baseClipId); + QCOMPARE(actualIds[1], anotherAdditiveClipId); + } }; QTEST_MAIN(tst_AdditiveClipBlend) diff --git a/tests/auto/animation/clipblendnode/tst_clipblendnode.cpp b/tests/auto/animation/clipblendnode/tst_clipblendnode.cpp index 7174dff54..bc736ebb8 100644 --- a/tests/auto/animation/clipblendnode/tst_clipblendnode.cpp +++ b/tests/auto/animation/clipblendnode/tst_clipblendnode.cpp @@ -55,6 +55,11 @@ public: float blend(float , float ) const Q_DECL_FINAL { return 0.0f; } + QVector dependencyIds() const Q_DECL_FINAL + { + return QVector(); + } + using ClipBlendNode::setClipResults; }; diff --git a/tests/auto/animation/clipblendnodemanager/tst_clipblendnodemanager.cpp b/tests/auto/animation/clipblendnodemanager/tst_clipblendnodemanager.cpp index 962813d15..6721401ee 100644 --- a/tests/auto/animation/clipblendnodemanager/tst_clipblendnodemanager.cpp +++ b/tests/auto/animation/clipblendnodemanager/tst_clipblendnodemanager.cpp @@ -51,6 +51,10 @@ public: float blend(float , float ) const Q_DECL_FINAL { return 0.0f; } + QVector dependencyIds() const Q_DECL_FINAL + { + return QVector(); + } }; } // anonymous diff --git a/tests/auto/animation/clipblendvalue/tst_clipblendvalue.cpp b/tests/auto/animation/clipblendvalue/tst_clipblendvalue.cpp index 5bed23704..48b0f6931 100644 --- a/tests/auto/animation/clipblendvalue/tst_clipblendvalue.cpp +++ b/tests/auto/animation/clipblendvalue/tst_clipblendvalue.cpp @@ -108,6 +108,30 @@ private Q_SLOTS: QCOMPARE(backendClipBlendValue.clipId(), newValue.id()); } } + + void checkDependencyIds() + { + // GIVEN + Qt3DAnimation::Animation::ClipBlendValue clipNode; + auto clipId = Qt3DCore::QNodeId::createId(); + + // WHEN + clipNode.setClipId(clipId); + QVector actualIds = clipNode.dependencyIds(); + + // THEN + QCOMPARE(actualIds.size(), 1); + QCOMPARE(actualIds[0], clipId); + + // WHEN + auto anotherClipId = Qt3DCore::QNodeId::createId(); + clipNode.setClipId(anotherClipId); + actualIds = clipNode.dependencyIds(); + + // THEN + QCOMPARE(actualIds.size(), 1); + QCOMPARE(actualIds[0], anotherClipId); + } }; QTEST_MAIN(tst_ClipBlendValue) diff --git a/tests/auto/animation/lerpclipblend/tst_lerpclipblend.cpp b/tests/auto/animation/lerpclipblend/tst_lerpclipblend.cpp index 18eaa064e..160049da7 100644 --- a/tests/auto/animation/lerpclipblend/tst_lerpclipblend.cpp +++ b/tests/auto/animation/lerpclipblend/tst_lerpclipblend.cpp @@ -142,6 +142,33 @@ private Q_SLOTS: QCOMPARE(computed, result); } + void checkDependencyIds() + { + // GIVEN + Qt3DAnimation::Animation::LerpClipBlend lerpBlend; + auto startClipId = Qt3DCore::QNodeId::createId(); + auto endClipId = Qt3DCore::QNodeId::createId(); + + // WHEN + lerpBlend.setStartClipId(startClipId); + lerpBlend.setEndClipId(endClipId); + QVector actualIds = lerpBlend.dependencyIds(); + + // THEN + QCOMPARE(actualIds.size(), 2); + QCOMPARE(actualIds[0], startClipId); + QCOMPARE(actualIds[1], endClipId); + + // WHEN + auto anotherEndClipId = Qt3DCore::QNodeId::createId(); + lerpBlend.setEndClipId(anotherEndClipId); + actualIds = lerpBlend.dependencyIds(); + + // THEN + QCOMPARE(actualIds.size(), 2); + QCOMPARE(actualIds[0], startClipId); + QCOMPARE(actualIds[1], anotherEndClipId); + } }; QTEST_MAIN(tst_LerpClipBlend) -- cgit v1.2.3