diff options
| author | Oz Linden <oz@lindenlab.com> | 2015-04-13 16:23:36 -0400 | 
|---|---|---|
| committer | Oz Linden <oz@lindenlab.com> | 2015-04-13 16:23:36 -0400 | 
| commit | a8ef2525711f1f9312c1c9ebb8f137f4d25e659a (patch) | |
| tree | b1486d5ab0b0eddc26a7dc0f369b12f612179869 /indra/llmath | |
| parent | 5c6cf3e7fb9f592e3a293921175b64b515bac23f (diff) | |
| parent | a647b8f1cbab13f07ea889c80df28414bc906129 (diff) | |
merge changes for 3.7.27-release
Diffstat (limited to 'indra/llmath')
| -rwxr-xr-x | indra/llmath/llsphere.cpp | 6 | ||||
| -rwxr-xr-x | indra/llmath/llvolume.cpp | 18 | ||||
| -rwxr-xr-x | indra/llmath/llvolume.h | 3 | 
3 files changed, 23 insertions, 4 deletions
| diff --git a/indra/llmath/llsphere.cpp b/indra/llmath/llsphere.cpp index 740047b93a..a8d6200488 100755 --- a/indra/llmath/llsphere.cpp +++ b/indra/llmath/llsphere.cpp @@ -248,8 +248,8 @@ LLSphere LLSphere::getBoundingSphere(const std::vector<LLSphere>& sphere_list)  		// compute the starting step-size  		F32 minimum_radius = 0.5f * llmin(diagonal.mV[VX], llmin(diagonal.mV[VY], diagonal.mV[VZ]));  		F32 step_length = bounding_radius - minimum_radius; -		S32 step_count = 0; -		S32 max_step_count = 12; +		//S32 step_count = 0; +		//S32 max_step_count = 12;  		F32 half_milimeter = 0.0005f;  		// wander the center around in search of tighter solutions @@ -258,7 +258,7 @@ LLSphere LLSphere::getBoundingSphere(const std::vector<LLSphere>& sphere_list)  		S32 last_dz = 2;  		while (step_length > half_milimeter -				&& step_count < max_step_count) +				/*&& step_count < max_step_count*/)  		{  			// the algorithm for testing the maximum radius could be expensive enough  			// that it makes sense to NOT duplicate testing when possible, so we keep diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index dedd90eab2..c2198b91a7 100755 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -2683,6 +2683,17 @@ void LLVolume::setMeshAssetLoaded(BOOL loaded)  	mIsMeshAssetLoaded = loaded;  } +void LLVolume::copyFacesTo(std::vector<LLVolumeFace> &faces) const  +{ +	faces = mVolumeFaces; +} + +void LLVolume::copyFacesFrom(const std::vector<LLVolumeFace> &faces) +{ +	mVolumeFaces = faces; +	mSculptLevel = 0; +} +  void LLVolume::copyVolumeFaces(const LLVolume* volume)  {  	mVolumeFaces = volume->mVolumeFaces; @@ -5964,7 +5975,10 @@ BOOL LLVolumeFace::createCap(LLVolume* volume, BOOL partial_build)  	}  	else  	{ //degenerate, make up a value -		normal.set(0,0,1); +		if(normal.getF32ptr()[2] >= 0) +			normal.set(0.f,0.f,1.f); +		else +			normal.set(0.f,0.f,-1.f);  	}  	llassert(llfinite(normal.getF32ptr()[0])); @@ -6278,6 +6292,8 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build)  	num_vertices = mNumS*mNumT;  	num_indices = (mNumS-1)*(mNumT-1)*6; +	partial_build = (num_vertices > mNumVertices || num_indices > mNumIndices) ? FALSE : partial_build; +  	if (!partial_build)  	{  		resizeVertices(num_vertices); diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index 2f38ae7203..c8476f6897 100755 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -993,6 +993,7 @@ public:  	void resizePath(S32 length);  	const LLAlignedArray<LLVector4a,64>&	getMesh() const				{ return mMesh; }  	const LLVector4a& getMeshPt(const U32 i) const			{ return mMesh[i]; } +	  	void setDirty() { mPathp->setDirty(); mProfilep->setDirty(); } @@ -1045,6 +1046,8 @@ public:  	void sculpt(U16 sculpt_width, U16 sculpt_height, S8 sculpt_components, const U8* sculpt_data, S32 sculpt_level);  	void copyVolumeFaces(const LLVolume* volume); +	void copyFacesTo(std::vector<LLVolumeFace> &faces) const; +	void copyFacesFrom(const std::vector<LLVolumeFace> &faces);  	void cacheOptimize();  private: | 
