Fix for SH-1017. We now disallow malformed rigs to be uploaded (i.e. missing bones, improperly names bones etc...)

meow-7.2.2
prep linden 2011-03-16 17:09:30 -04:00
parent 15b0509c01
commit aaaddfe089
2 changed files with 29 additions and 10 deletions

View File

@ -495,7 +495,8 @@ void LLFloaterModelPreview::onUploadSkinCommit(LLUICtrl*,void* userdata)
{
return;
}
fp->mModelPreview->calcResourceCost();
fp->mModelPreview->refresh();
fp->mModelPreview->resetPreviewTarget();
fp->mModelPreview->clearBuffers();
@ -1480,8 +1481,8 @@ void LLModelLoader::run()
//(which means we have all the joints that are required for an avatar versus
//a skinned asset attached to a node in a file that contains an entire skeleton,
//but does not use the skeleton).
if ( !model->mJointList.empty() && doesJointArrayContainACompleteRig( model->mJointList ) )
mPreview->setRigValid( doesJointArrayContainACompleteRig( model->mJointList ) );
if ( !model->mJointList.empty() && mPreview->isRigValid() )
{
mResetJoints = true;
}
@ -2233,6 +2234,7 @@ LLColor4 LLModelLoader::getDaeColor(daeElement* element)
LLModelPreview::LLModelPreview(S32 width, S32 height, LLFloater* fmp)
: LLViewerDynamicTexture(width, height, 3, ORDER_MIDDLE, FALSE), LLMutex(NULL)
, mPelvisZOffset( 0.0f )
, mRigValid( false )
{
mNeedsUpdate = TRUE;
mCameraDistance = 0.f;
@ -2293,6 +2295,16 @@ U32 LLModelPreview::calcResourceCost()
}
}
//Upload skin is selected BUT the joints coming in from the asset
//were malformed.
if ( mFMP && mFMP->childGetValue("upload_skin").asBoolean() )
{
if ( !isRigValid() )
{
mFMP->childDisable("ok_btn");
}
}
U32 cost = 0;
std::set<LLModel*> accounted;
U32 num_points = 0;
@ -2552,7 +2564,7 @@ void LLModelPreview::loadModel(std::string filename, S32 lod)
{
mFMP->childDisable("ok_btn");
}
if (lod == mPreviewLOD)
{
mFMP->childSetText("lod_file", mLODFile[mPreviewLOD]);
@ -3295,15 +3307,18 @@ void LLModelPreview::updateStatusMessages()
bool errorStateFromLoader = mModelLoader->getLoadState() == LLModelLoader::ERROR_PARSING ? true : false;
if ( upload_ok && !errorStateFromLoader )
bool skinAndRigOk = true;
bool uploadingSkin = mFMP->childGetValue("upload_skin").asBoolean();
if ( uploadingSkin && !isRigValid() )
{
skinAndRigOk = false;
}
if ( upload_ok && !errorStateFromLoader && skinAndRigOk )
{
mFMP->childEnable("ok_btn");
}
else
{
mFMP->childDisable("ok_btn");
}
//add up physics triangles etc
S32 start = 0;
S32 end = mModel[LLModel::LOD_PHYSICS].size();

View File

@ -294,6 +294,8 @@ public:
const bool getModelPivot( void ) const { return mHasPivot; }
void setHasPivot( bool val ) { mHasPivot = val; }
void setModelPivot( const LLVector3& pivot ) { mModelPivot = pivot; }
const bool isRigValid( void ) const { return mRigValid; }
void setRigValid( bool rigValid ) { mRigValid = rigValid; }
static void textureLoadedCallback( BOOL success, LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* src_aux, S32 discard_level, BOOL final, void* userdata );
@ -361,6 +363,8 @@ public:
bool mHasPivot;
float mPelvisZOffset;
bool mRigValid;
};