summaryrefslogtreecommitdiffstats
path: root/src/render
diff options
context:
space:
mode:
authorSean Harmer <sean.harmer@kdab.com>2017-08-21 15:22:12 +0100
committerSean Harmer <sean.harmer@kdab.com>2017-08-30 12:59:15 +0000
commit2a772a50b6001b1e12dd3cdee4128f5b534c36c3 (patch)
treec96445b5f248d6fdc561997edf1018c3b702763f /src/render
parenta60a3d30c84f3521521da01965085d41c51c1617 (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.cpp4
-rw-r--r--src/render/geometry/skeleton.cpp2
-rw-r--r--src/render/geometry/skeletondata.cpp6
-rw-r--r--src/render/geometry/skeletondata_p.h5
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;
};