diff options
author | Sean Harmer <sean.harmer@kdab.com> | 2017-08-21 15:22:12 +0100 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2017-08-30 12:59:15 +0000 |
commit | 2a772a50b6001b1e12dd3cdee4128f5b534c36c3 (patch) | |
tree | c96445b5f248d6fdc561997edf1018c3b702763f /src/render | |
parent | a60a3d30c84f3521521da01965085d41c51c1617 (diff) |
Store joint names in their own vector
This makes the JointInfo vector smaller (better cache performance) and
also makes it cheaper to pass the joint names over to the animation
aspect in a following commit.
Change-Id: I1a892c1639dc055757906179d2fab89aad5fa81c
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/render')
-rw-r--r-- | src/render/geometry/gltfskeletonloader.cpp | 4 | ||||
-rw-r--r-- | src/render/geometry/skeleton.cpp | 2 | ||||
-rw-r--r-- | src/render/geometry/skeletondata.cpp | 6 | ||||
-rw-r--r-- | src/render/geometry/skeletondata_p.h | 5 |
4 files changed, 13 insertions, 4 deletions
diff --git a/src/render/geometry/gltfskeletonloader.cpp b/src/render/geometry/gltfskeletonloader.cpp index 8b57207c6..428f7bc74 100644 --- a/src/render/geometry/gltfskeletonloader.cpp +++ b/src/render/geometry/gltfskeletonloader.cpp @@ -362,7 +362,7 @@ SkeletonData GLTFSkeletonLoader::createSkeletonFromSkin(Skin *skin) const SkeletonData skel; const int jointCount = skin->jointNodeIndices.size(); - skel.joints.reserve(jointCount); + skel.reserve(jointCount); QHash<const Node *, int> jointIndexMap; for (int i = 0; i < jointCount; ++i) { @@ -373,7 +373,6 @@ SkeletonData GLTFSkeletonLoader::createSkeletonFromSkin(Skin *skin) const jointIndexMap.insert(node, i); JointInfo joint; - joint.name = node->name; joint.localPose = node->localTransform; joint.inverseBindPose = inverseBindMatrix(skin, i); joint.parentIndex = jointIndexMap.value(&m_nodes[node->parentNodeIndex], -1); @@ -381,6 +380,7 @@ SkeletonData GLTFSkeletonLoader::createSkeletonFromSkin(Skin *skin) const qCDebug(Jobs) << "Cannot find parent joint for joint" << i; skel.joints.push_back(joint); + skel.jointNames.push_back(node->name); } return skel; diff --git a/src/render/geometry/skeleton.cpp b/src/render/geometry/skeleton.cpp index 6f9cbe772..31bce7eb1 100644 --- a/src/render/geometry/skeleton.cpp +++ b/src/render/geometry/skeleton.cpp @@ -334,6 +334,7 @@ void Skeleton::processJointHierarchy(Qt3DCore::QNodeId jointId, joint->setOwningSkeleton(m_skeletonHandle); const JointInfo jointInfo(joint, parentJointIndex); skeletonData.joints.push_back(jointInfo); + skeletonData.jointNames.push_back(joint->name()); const int jointIndex = skeletonData.joints.size() - 1; const HJoint jointHandle = m_jointManager->lookupHandle(jointId); @@ -348,6 +349,7 @@ void Skeleton::clearData() { m_name.clear(); m_skeletonData.joints.clear(); + m_skeletonData.jointNames.clear(); m_skeletonData.jointIndices.clear(); } diff --git a/src/render/geometry/skeletondata.cpp b/src/render/geometry/skeletondata.cpp index 9aa1ba58a..8196856b6 100644 --- a/src/render/geometry/skeletondata.cpp +++ b/src/render/geometry/skeletondata.cpp @@ -45,6 +45,12 @@ SkeletonData::SkeletonData() { } +void SkeletonData::reserve(int size) +{ + joints.reserve(size); + jointNames.reserve(size); +} + } // namespace Render } // namespace Qt3DRender diff --git a/src/render/geometry/skeletondata_p.h b/src/render/geometry/skeletondata_p.h index 8fde853f2..8de29d4ac 100644 --- a/src/render/geometry/skeletondata_p.h +++ b/src/render/geometry/skeletondata_p.h @@ -73,7 +73,6 @@ struct Q_AUTOTEST_EXPORT JointInfo : inverseBindPose(joint->inverseBindMatrix()) , localPose(joint->localPose()) , parentIndex(parentJointIndex) - , name(joint->name()) { } @@ -81,14 +80,16 @@ struct Q_AUTOTEST_EXPORT JointInfo Qt3DCore::Sqt localPose; QMatrix4x4 globalPose; int parentIndex; - QString name; }; struct Q_AUTOTEST_EXPORT SkeletonData { SkeletonData(); + void reserve(int size); + QVector<JointInfo> joints; + QVector<QString> jointNames; QHash<HJoint, int> jointIndices; }; |