summaryrefslogtreecommitdiff
path: root/indra/newview/llskinningutil.cpp
diff options
context:
space:
mode:
authorAndrey Lihatskiy <alihatskiy@productengine.com>2021-04-01 20:49:26 +0300
committerAndrey Lihatskiy <alihatskiy@productengine.com>2021-04-01 20:49:26 +0300
commitb52384d9ef81ed91b52db853af349a1a8ec8bfdb (patch)
treeaa6d272de0228428d0217aa7f61fbbc84eddb5da /indra/newview/llskinningutil.cpp
parent19ff86fabd84ba45bbbdfd1fa5393fb9ab89dddf (diff)
parent167e45e309ebeaccb346b8ca05884b8e10bf05eb (diff)
Merge branch 'master' into DRTVWR-522-maint
# Conflicts: # indra/newview/lltoolpie.cpp
Diffstat (limited to 'indra/newview/llskinningutil.cpp')
-rw-r--r--indra/newview/llskinningutil.cpp34
1 files changed, 3 insertions, 31 deletions
diff --git a/indra/newview/llskinningutil.cpp b/indra/newview/llskinningutil.cpp
index 1fb63c7444..f325315933 100644
--- a/indra/newview/llskinningutil.cpp
+++ b/indra/newview/llskinningutil.cpp
@@ -309,7 +309,8 @@ void LLSkinningUtil::updateRiggingInfo(const LLMeshSkinInfo* skin, LLVOAvatar *a
if (vol_face.mJointRiggingInfoTab.needsUpdate())
{
S32 num_verts = vol_face.mNumVertices;
- if (num_verts>0 && vol_face.mWeights && (skin->mJointNames.size()>0))
+ S32 num_joints = skin->mJointNames.size();
+ if (num_verts > 0 && vol_face.mWeights && num_joints > 0)
{
initJointNums(const_cast<LLMeshSkinInfo*>(skin), avatar);
if (vol_face.mJointRiggingInfoTab.size()==0)
@@ -343,7 +344,7 @@ void LLSkinningUtil::updateRiggingInfo(const LLMeshSkinInfo* skin, LLVOAvatar *a
for (U32 k=0; k<4; ++k)
{
S32 joint_index = idx[k];
- if (wght[k] > 0.0f)
+ if (wght[k] > 0.0f && num_joints > joint_index)
{
S32 joint_num = skin->mJointNums[joint_index];
if (joint_num >= 0 && joint_num < LL_CHARACTER_MAX_ANIMATED_JOINTS)
@@ -394,35 +395,6 @@ void LLSkinningUtil::updateRiggingInfo(const LLMeshSkinInfo* skin, LLVOAvatar *a
}
}
-void LLSkinningUtil::updateRiggingInfo_(LLMeshSkinInfo* skin, LLVOAvatar *avatar, S32 num_verts, LLVector4a* weights, LLVector4a* positions, U8* joint_indices, LLJointRiggingInfoTab &rig_info_tab)
-{
- LL_RECORD_BLOCK_TIME(FTM_FACE_RIGGING_INFO);
- for (S32 i=0; i < num_verts; i++)
- {
- LLVector4a& pos = positions[i];
- LLVector4a& wght = weights[i];
- for (U32 k=0; k<4; ++k)
- {
- S32 joint_num = skin->mJointNums[joint_indices[k]];
- llassert(joint_num >= 0 && joint_num < LL_CHARACTER_MAX_ANIMATED_JOINTS);
- {
- rig_info_tab[joint_num].setIsRiggedTo(true);
- LLMatrix4a bind_shape;
- bind_shape.loadu(skin->mBindShapeMatrix);
- LLMatrix4a inv_bind;
- inv_bind.loadu(skin->mInvBindMatrix[joint_indices[k]]);
- LLMatrix4a mat;
- matMul(bind_shape, inv_bind, mat);
- LLVector4a pos_joint_space;
- mat.affineTransform(pos, pos_joint_space);
- pos_joint_space.mul(wght[k]);
- LLVector4a *extents = rig_info_tab[joint_num].getRiggedExtents();
- update_min_max(extents[0], extents[1], pos_joint_space);
- }
- }
- }
-}
-
// This is used for extracting rotation from a bind shape matrix that
// already has scales baked in
LLQuaternion LLSkinningUtil::getUnscaledQuaternion(const LLMatrix4& mat4)