diff options
| -rw-r--r-- | indra/newview/llfloatermodelpreview.cpp | 49 | ||||
| -rw-r--r-- | indra/newview/llfloatermodelwizard.cpp | 49 | ||||
| -rw-r--r-- | indra/newview/llmeshrepository.cpp | 88 | ||||
| -rw-r--r-- | indra/newview/llmeshrepository.h | 1 | 
4 files changed, 61 insertions, 126 deletions
diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp index 371579e5c8..5f961e2dbc 100644 --- a/indra/newview/llfloatermodelpreview.cpp +++ b/indra/newview/llfloatermodelpreview.cpp @@ -5246,54 +5246,7 @@ LLFloaterModelPreview::DecompRequest::DecompRequest(const std::string& stage, LL  	mParams = sInstance->mDecompParams;  	//copy out positions and indices -	if (mdl) -	{ -		U16 index_offset = 0; -		U16 tri[3] ; - -		mPositions.clear(); -		mIndices.clear(); -		mBBox[1] = LLVector3(F32_MIN, F32_MIN, F32_MIN) ; -		mBBox[0] = LLVector3(F32_MAX, F32_MAX, F32_MAX) ; - -		//queue up vertex positions and indices -		for (S32 i = 0; i < mdl->getNumVolumeFaces(); ++i) -		{ -			const LLVolumeFace& face = mdl->getVolumeFace(i); -			if (mPositions.size() + face.mNumVertices > 65535) -			{ -				continue; -			} - -			for (U32 j = 0; j < face.mNumVertices; ++j) -			{ -				mPositions.push_back(LLVector3(face.mPositions[j].getF32ptr())); -				for(U32 k = 0 ; k < 3 ; k++) -				{ -					mBBox[0].mV[k] = llmin(mBBox[0].mV[k], mPositions[j].mV[k]) ; -					mBBox[1].mV[k] = llmax(mBBox[1].mV[k], mPositions[j].mV[k]) ; -				} -			} - -			updateTriangleAreaThreshold() ; - -			for (U32 j = 0; j+2 < face.mNumIndices; j += 3) -			{ -				tri[0] = face.mIndices[j] + index_offset ; -				tri[1] = face.mIndices[j + 1] + index_offset ; -				tri[2] = face.mIndices[j + 2] + index_offset ; -				 -				if(isValidTriangle(tri[0], tri[1], tri[2])) -				{ -					mIndices.push_back(tri[0]); -					mIndices.push_back(tri[1]); -					mIndices.push_back(tri[2]); -				} -			}			 - -			index_offset += face.mNumVertices; -		} -	} +	assignData(mdl) ;	  }  void LLFloaterModelPreview::setStatusMessage(const std::string& msg) diff --git a/indra/newview/llfloatermodelwizard.cpp b/indra/newview/llfloatermodelwizard.cpp index e44737f39e..0cd66fbdc2 100644 --- a/indra/newview/llfloatermodelwizard.cpp +++ b/indra/newview/llfloatermodelwizard.cpp @@ -438,54 +438,7 @@ LLFloaterModelWizard::DecompRequest::DecompRequest(const std::string& stage, LLM  	mParams = sInstance->mDecompParams;  	//copy out positions and indices -	if (mdl) -	{ -		U16 index_offset = 0; -		U16 tri[3] ; - -		mPositions.clear(); -		mIndices.clear(); -		mBBox[1] = LLVector3(F32_MIN, F32_MIN, F32_MIN) ; -		mBBox[0] = LLVector3(F32_MAX, F32_MAX, F32_MAX) ; -		 -		//queue up vertex positions and indices -		for (S32 i = 0; i < mdl->getNumVolumeFaces(); ++i) -		{ -			const LLVolumeFace& face = mdl->getVolumeFace(i); -			if (mPositions.size() + face.mNumVertices > 65535) -			{ -				continue; -			} - -			for (U32 j = 0; j < face.mNumVertices; ++j) -			{ -				mPositions.push_back(LLVector3(face.mPositions[j].getF32ptr())); -				for(U32 k = 0 ; k < 3 ; k++) -				{ -					mBBox[0].mV[k] = llmin(mBBox[0].mV[k], mPositions[j].mV[k]) ; -					mBBox[1].mV[k] = llmax(mBBox[1].mV[k], mPositions[j].mV[k]) ; -				} -			} - -			updateTriangleAreaThreshold() ; - -			for (U32 j = 0; j+2 < face.mNumIndices; j += 3) -			{ -				tri[0] = face.mIndices[j] + index_offset ; -				tri[1] = face.mIndices[j + 1] + index_offset ; -				tri[2] = face.mIndices[j + 2] + index_offset ; -				 -				if(isValidTriangle(tri[0], tri[1], tri[2])) -				{ -					mIndices.push_back(tri[0]); -					mIndices.push_back(tri[1]); -					mIndices.push_back(tri[2]); -				} -			} - -			index_offset += face.mNumVertices; -		} -	} +	assignData(mdl) ;	  } diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index 3545b5128a..d4198041ec 100644 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -1323,35 +1323,7 @@ LLMeshUploadThread::DecompRequest::DecompRequest(LLModel* mdl, LLModel* base_mod  	mThread = thread;  	//copy out positions and indices -	if (mdl) -	{ -		U16 index_offset = 0; - -		mPositions.clear(); -		mIndices.clear(); -			 -		//queue up vertex positions and indices -		for (S32 i = 0; i < mdl->getNumVolumeFaces(); ++i) -		{ -			const LLVolumeFace& face = mdl->getVolumeFace(i); -			if (mPositions.size() + face.mNumVertices > 65535) -			{ -				continue; -			} - -			for (U32 j = 0; j < face.mNumVertices; ++j) -			{ -				mPositions.push_back(LLVector3(face.mPositions[j].getF32ptr())); -			} - -			for (U32 j = 0; j < face.mNumIndices; ++j) -			{ -				mIndices.push_back(face.mIndices[j]+index_offset); -			} - -			index_offset += face.mNumVertices; -		} -	} +	assignData(mdl) ;	  	mThread->mFinalDecomp = this;  	mThread->mPhysicsComplete = false; @@ -1561,7 +1533,7 @@ void LLMeshUploadThread::wholeModelToLLSD(LLSD& dest, bool include_textures)  					face_entry["offsett"] = 0.0;  					face_entry["imagerot"] = 0.0;  				} -				face_entry["colors"] = ll_sd_from_color4(material.mDiffuseColor); +				face_entry["diffuse_color"] = ll_sd_from_color4(material.mDiffuseColor);  				face_entry["fullbright"] = material.mFullbright;  				instance_entry["face_list"][face_num] = face_entry;  		    } @@ -3610,6 +3582,62 @@ void LLPhysicsDecomp::run()  	mDone = true;  } +void LLPhysicsDecomp::Request::assignData(LLModel* mdl)  +{ +	if (!mdl) +	{ +		return ; +	} + +	U16 index_offset = 0; +	U16 tri[3] ; + +	mPositions.clear(); +	mIndices.clear(); +	mBBox[1] = LLVector3(F32_MIN, F32_MIN, F32_MIN) ; +	mBBox[0] = LLVector3(F32_MAX, F32_MAX, F32_MAX) ; +		 +	//queue up vertex positions and indices +	for (S32 i = 0; i < mdl->getNumVolumeFaces(); ++i) +	{ +		const LLVolumeFace& face = mdl->getVolumeFace(i); +		if (mPositions.size() + face.mNumVertices > 65535) +		{ +			continue; +		} + +		for (U32 j = 0; j < face.mNumVertices; ++j) +		{ +			mPositions.push_back(LLVector3(face.mPositions[j].getF32ptr())); +			for(U32 k = 0 ; k < 3 ; k++) +			{ +				mBBox[0].mV[k] = llmin(mBBox[0].mV[k], mPositions[j].mV[k]) ; +				mBBox[1].mV[k] = llmax(mBBox[1].mV[k], mPositions[j].mV[k]) ; +			} +		} + +		updateTriangleAreaThreshold() ; + +		for (U32 j = 0; j+2 < face.mNumIndices; j += 3) +		{ +			tri[0] = face.mIndices[j] + index_offset ; +			tri[1] = face.mIndices[j + 1] + index_offset ; +			tri[2] = face.mIndices[j + 2] + index_offset ; +				 +			if(isValidTriangle(tri[0], tri[1], tri[2])) +			{ +				mIndices.push_back(tri[0]); +				mIndices.push_back(tri[1]); +				mIndices.push_back(tri[2]); +			} +		} + +		index_offset += face.mNumVertices; +	} + +	return ; +} +  void LLPhysicsDecomp::Request::updateTriangleAreaThreshold()   {  	F32 range = mBBox[1].mV[0] - mBBox[0].mV[0] ; diff --git a/indra/newview/llmeshrepository.h b/indra/newview/llmeshrepository.h index d5b06cc66f..adf60c7e03 100644 --- a/indra/newview/llmeshrepository.h +++ b/indra/newview/llmeshrepository.h @@ -166,6 +166,7 @@ public:  		LLVector3 mBBox[2] ;  		F32 mTriangleAreaThreshold ; +		void assignData(LLModel* mdl) ;  		void updateTriangleAreaThreshold() ;  		bool isValidTriangle(U16 idx1, U16 idx2, U16 idx3) ;  	};  | 
