diff options
| author | andreykproductengine <andreykproductengine@lindenlab.com> | 2018-02-07 20:41:53 +0200 | 
|---|---|---|
| committer | andreykproductengine <andreykproductengine@lindenlab.com> | 2018-02-07 20:41:53 +0200 | 
| commit | 0d40ac2ed9ed206d1f20967c09bf88ce0e5702f5 (patch) | |
| tree | 922f352d813884729325e188ae0a32c1ccaf0dae /indra/llmath | |
| parent | 62aa39983950de85784737deb93df8252ac775d5 (diff) | |
MAINT-8258 Don't show sculpty until it is loaded or load fails
Diffstat (limited to 'indra/llmath')
| -rw-r--r-- | indra/llmath/llvolume.cpp | 58 | ||||
| -rw-r--r-- | indra/llmath/llvolume.h | 5 | 
2 files changed, 49 insertions, 14 deletions
| diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 24f46d720b..648f9a8d93 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -2921,28 +2921,54 @@ F32 LLVolume::sculptGetSurfaceArea()  	return area;  } -// create placeholder shape -void LLVolume::sculptGeneratePlaceholder() +// create empty placeholder shape +void LLVolume::sculptGenerateEmptyPlaceholder()  {  	S32 sizeS = mPathp->mPath.size();  	S32 sizeT = mProfilep->mProfile.size(); -	 +  	S32 line = 0; -	// for now, this is a sphere.  	for (S32 s = 0; s < sizeS; s++)  	{  		for (S32 t = 0; t < sizeT; t++)  		{  			S32 i = t + line;  			LLVector4a& pt = mMesh[i]; +					 +			F32* p = pt.getF32ptr(); -			 -			F32 u = (F32)s/(sizeS-1); -			F32 v = (F32)t/(sizeT-1); +			p[0] = 0; +			p[1] = 0; +			p[2] = 0; + +			llassert(pt.isFinite3()); +		} +		line += sizeT; +	} +} + +// create sphere placeholder shape +void LLVolume::sculptGenerateSpherePlaceholder() +{ +	S32 sizeS = mPathp->mPath.size(); +	S32 sizeT = mProfilep->mProfile.size(); + +	S32 line = 0; + +	for (S32 s = 0; s < sizeS; s++) +	{ +		for (S32 t = 0; t < sizeT; t++) +		{ +			S32 i = t + line; +			LLVector4a& pt = mMesh[i]; + + +			F32 u = (F32)s / (sizeS - 1); +			F32 v = (F32)t / (sizeT - 1);  			const F32 RADIUS = (F32) 0.3; -					 +  			F32* p = pt.getF32ptr();  			p[0] = (F32)(sin(F_PI * v) * cos(2.0 * F_PI * u) * RADIUS); @@ -2950,7 +2976,6 @@ void LLVolume::sculptGeneratePlaceholder()  			p[2] = (F32)(cos(F_PI * v) * RADIUS);  			llassert(pt.isFinite3()); -  		}  		line += sizeT;  	} @@ -3113,9 +3138,9 @@ void sculpt_calc_mesh_resolution(U16 width, U16 height, U8 type, F32 detail, S32  }  // sculpt replaces generate() for sculpted surfaces -void LLVolume::sculpt(U16 sculpt_width, U16 sculpt_height, S8 sculpt_components, const U8* sculpt_data, S32 sculpt_level) +void LLVolume::sculpt(U16 sculpt_width, U16 sculpt_height, S8 sculpt_components, const U8* sculpt_data, S32 sculpt_level, bool visible_placeholder)  { -    U8 sculpt_type = mParams.getSculptType(); +	U8 sculpt_type = mParams.getSculptType();  	BOOL data_is_empty = FALSE; @@ -3163,13 +3188,22 @@ void LLVolume::sculpt(U16 sculpt_width, U16 sculpt_height, S8 sculpt_components,  			if (area < SCULPT_MIN_AREA || area > SCULPT_MAX_AREA)  			{  				data_is_empty = TRUE; +				visible_placeholder = true;  			}  		}  	}  	if (data_is_empty)  	{ -		sculptGeneratePlaceholder(); +		if (visible_placeholder) +		{ +			// Object should be visible since there will be nothing else to display +			sculptGenerateSpherePlaceholder(); +		} +		else +		{ +			sculptGenerateEmptyPlaceholder(); +		}  	} diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index a8089f3709..4357b69b90 100644 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -1059,7 +1059,7 @@ public:  	U32					mFaceMask;			// bit array of which faces exist in this volume  	LLVector3			mLODScaleBias;		// vector for biasing LOD based on scale -	void sculpt(U16 sculpt_width, U16 sculpt_height, S8 sculpt_components, const U8* sculpt_data, S32 sculpt_level); +	void sculpt(U16 sculpt_width, U16 sculpt_height, S8 sculpt_components, const U8* sculpt_data, S32 sculpt_level, bool visible_placeholder);  	void copyVolumeFaces(const LLVolume* volume);  	void copyFacesTo(std::vector<LLVolumeFace> &faces) const;  	void copyFacesFrom(const std::vector<LLVolumeFace> &faces); @@ -1068,7 +1068,8 @@ public:  private:  	void sculptGenerateMapVertices(U16 sculpt_width, U16 sculpt_height, S8 sculpt_components, const U8* sculpt_data, U8 sculpt_type);  	F32 sculptGetSurfaceArea(); -	void sculptGeneratePlaceholder(); +	void sculptGenerateEmptyPlaceholder(); +	void sculptGenerateSpherePlaceholder();  	void sculptCalcMeshResolution(U16 width, U16 height, U8 type, S32& s, S32& t); | 
