SL-451 - avoid more high-cost string operations in a per-frame function

meow-7.2.2
Brad Payne (Vir Linden) 2016-10-28 09:33:57 -04:00
parent dd2caad496
commit 5dcd81c155
3 changed files with 10 additions and 2 deletions

View File

@ -1387,13 +1387,15 @@ bool LLModel::loadDecomposition(LLSD& header, std::istream& is)
LLMeshSkinInfo::LLMeshSkinInfo(): LLMeshSkinInfo::LLMeshSkinInfo():
mPelvisOffset(0.0), mPelvisOffset(0.0),
mLockScaleIfJointPosition(false) mLockScaleIfJointPosition(false),
mInvalidJointsScrubbed(false)
{ {
} }
LLMeshSkinInfo::LLMeshSkinInfo(LLSD& skin): LLMeshSkinInfo::LLMeshSkinInfo(LLSD& skin):
mPelvisOffset(0.0), mPelvisOffset(0.0),
mLockScaleIfJointPosition(false) mLockScaleIfJointPosition(false),
mInvalidJointsScrubbed(false)
{ {
fromLLSD(skin); fromLLSD(skin);
} }

View File

@ -56,6 +56,7 @@ public:
LLMatrix4 mBindShapeMatrix; LLMatrix4 mBindShapeMatrix;
float mPelvisOffset; float mPelvisOffset;
bool mLockScaleIfJointPosition; bool mLockScaleIfJointPosition;
bool mInvalidJointsScrubbed;
}; };
class LLModel : public LLVolume class LLModel : public LLVolume

View File

@ -53,6 +53,10 @@ U32 LLSkinningUtil::getMeshJointCount(const LLMeshSkinInfo *skin)
// static // static
void LLSkinningUtil::scrubInvalidJoints(LLVOAvatar *avatar, LLMeshSkinInfo* skin) void LLSkinningUtil::scrubInvalidJoints(LLVOAvatar *avatar, LLMeshSkinInfo* skin)
{ {
if (skin->mInvalidJointsScrubbed)
{
return;
}
for (U32 j = 0; j < skin->mJointNames.size(); ++j) for (U32 j = 0; j < skin->mJointNames.size(); ++j)
{ {
// Fix invalid names to "mPelvis". Currently meshes with // Fix invalid names to "mPelvis". Currently meshes with
@ -63,6 +67,7 @@ void LLSkinningUtil::scrubInvalidJoints(LLVOAvatar *avatar, LLMeshSkinInfo* skin
skin->mJointNames[j] = "mPelvis"; skin->mJointNames[j] = "mPelvis";
} }
} }
skin->mInvalidJointsScrubbed = true;
} }
// static // static