diff options
| author | Dave Parks <davep@lindenlab.com> | 2013-06-10 16:01:53 -0500 | 
|---|---|---|
| committer | Dave Parks <davep@lindenlab.com> | 2013-06-10 16:01:53 -0500 | 
| commit | d09f1e71176f32a23be73b53559979727c242b4a (patch) | |
| tree | 71e118dc1b94c5a09b8a2ab460508cb935073d89 /indra/llmath | |
| parent | 0073884f837d1049499f85007e3cc5a3e4beafe0 (diff) | |
NORSPEC-242 Followup, fix a couple more sources of NaN and infinity.
Diffstat (limited to 'indra/llmath')
| -rwxr-xr-x | indra/llmath/llvolume.cpp | 33 | 
1 files changed, 31 insertions, 2 deletions
| diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index c3528349eb..f9dd843b92 100755 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -6561,8 +6561,23 @@ BOOL LLVolumeFace::createCap(LLVolume* volume, BOOL partial_build)  	LLVector4a normal;  	normal.setCross3(d0,d1); -	normal.normalize3fast(); +	if (normal.dot3(normal).getF32() > F_APPROXIMATELY_ZERO) +	{ +		normal.normalize3fast(); +	} +	else +	{ //degenerate, make up a value +		normal.set(0,0,1); +	} + +	llassert(llfinite(normal.getF32ptr()[0])); +	llassert(llfinite(normal.getF32ptr()[1])); +	llassert(llfinite(normal.getF32ptr()[2])); +	llassert(!llisnan(normal.getF32ptr()[0])); +	llassert(!llisnan(normal.getF32ptr()[1])); +	llassert(!llisnan(normal.getF32ptr()[2])); +	  	for (S32 i = 0; i < num_vertices; i++)  	{  		norm[i].load4a(normal.getF32ptr()); @@ -7048,6 +7063,14 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build)  		n[1]->add(c);  		n[2]->add(c); +		llassert(llfinite(c.getF32ptr()[0])); +		llassert(llfinite(c.getF32ptr()[1])); +		llassert(llfinite(c.getF32ptr()[2])); + +		llassert(!llisnan(c.getF32ptr()[0])); +		llassert(!llisnan(c.getF32ptr()[1])); +		llassert(!llisnan(c.getF32ptr()[2])); +  		//even out quad contributions  		n[i%2+1]->add(c);  	} @@ -7277,7 +7300,13 @@ void CalculateTangentArray(U32 vertexCount, const LLVector4a *vertex, const LLVe  			tangent[a] = tsubn; -			llassert(tangent[a].getLength3().getF32() > 0.f); +			llassert(llfinite(tangent[a].getF32ptr()[0])); +			llassert(llfinite(tangent[a].getF32ptr()[1])); +			llassert(llfinite(tangent[a].getF32ptr()[2])); + +			llassert(!llisnan(tangent[a].getF32ptr()[0])); +			llassert(!llisnan(tangent[a].getF32ptr()[1])); +			llassert(!llisnan(tangent[a].getF32ptr()[2]));  		}  		else  		{ //degenerate, make up a value | 
