diff options
Diffstat (limited to 'indra/llmath')
| -rw-r--r-- | indra/llmath/llvolume.cpp | 22 | 
1 files changed, 15 insertions, 7 deletions
| diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 379ef4b344..8c81f27784 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -2642,14 +2642,20 @@ bool LLVolume::unpackVolumeFaces(std::istream& is, S32 size)  			LLVector4a& min = face.mExtents[0];  			LLVector4a& max = face.mExtents[1]; -			min.clear(); -			max.clear(); -			min = max = face.mPositions[0]; - -			for (S32 i = 1; i < face.mNumVertices; ++i) +			if (face.mNumVertices < 3) +			{ //empty face, use a dummy 1cm (at 1m scale) bounding box +				min.splat(-0.005f); +				max.splat(0.005f); +			} +			else  			{ -				min.setMin(min, face.mPositions[i]); -				max.setMax(max, face.mPositions[i]); +				min = max = face.mPositions[0]; + +				for (S32 i = 1; i < face.mNumVertices; ++i) +				{ +					min.setMin(min, face.mPositions[i]); +					max.setMax(max, face.mPositions[i]); +				}  			}  		}  	} @@ -5506,6 +5512,8 @@ LLVolumeFace::LLVolumeFace() :  	mOctree(NULL)  {  	mExtents = (LLVector4a*) ll_aligned_malloc_16(sizeof(LLVector4a)*3); +	mExtents[0].splat(-0.5f); +	mExtents[1].splat(0.5f);  	mCenter = mExtents+2;  } | 
