diff options
| author | prep linden <prep@lindenlab.com> | 2011-03-16 17:09:30 -0400 | 
|---|---|---|
| committer | prep linden <prep@lindenlab.com> | 2011-03-16 17:09:30 -0400 | 
| commit | aaaddfe08942ff15bbe0c6549dc82dda95ce3ba1 (patch) | |
| tree | fdf2b7ba411eca4b42c3554c3d63236d28549aa2 /indra | |
| parent | 15b0509c01dbeec6854f4a0a5965e900eda06de1 (diff) | |
Fix for SH-1017. We now disallow malformed rigs to be uploaded (i.e. missing bones, improperly names bones etc...)
Diffstat (limited to 'indra')
| -rwxr-xr-x | indra/newview/llfloatermodelpreview.cpp | 33 | ||||
| -rw-r--r-- | indra/newview/llfloatermodelpreview.h | 4 | 
2 files changed, 28 insertions, 9 deletions
| diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp index 3a7732c7b3..6bf9fdfb9b 100755 --- a/indra/newview/llfloatermodelpreview.cpp +++ b/indra/newview/llfloatermodelpreview.cpp @@ -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() )  	{ -		mFMP->childEnable("ok_btn"); +		skinAndRigOk = false;  	} -	else + +	if ( upload_ok && !errorStateFromLoader && skinAndRigOk )  	{ -		mFMP->childDisable("ok_btn"); +		mFMP->childEnable("ok_btn");  	} - +	  	//add up physics triangles etc  	S32 start = 0;  	S32 end = mModel[LLModel::LOD_PHYSICS].size(); diff --git a/indra/newview/llfloatermodelpreview.h b/indra/newview/llfloatermodelpreview.h index e3b0f7522e..b3053fe73a 100644 --- a/indra/newview/llfloatermodelpreview.h +++ b/indra/newview/llfloatermodelpreview.h @@ -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;  }; | 
