diff options
Diffstat (limited to 'indra/llmath')
| -rwxr-xr-x | indra/llmath/llmath.h | 1 | ||||
| -rwxr-xr-x | indra/llmath/lloctree.h | 15 | 
2 files changed, 12 insertions, 4 deletions
diff --git a/indra/llmath/llmath.h b/indra/llmath/llmath.h index b93f89d674..5abd9a0d06 100755 --- a/indra/llmath/llmath.h +++ b/indra/llmath/llmath.h @@ -72,6 +72,7 @@ const F32	F_E			= 2.71828182845904523536f;  const F32	F_SQRT2		= 1.4142135623730950488016887242097f;  const F32	F_SQRT3		= 1.73205080756888288657986402541f;  const F32	OO_SQRT2	= 0.7071067811865475244008443621049f; +const F32	OO_SQRT3	= 0.577350269189625764509f;  const F32	DEG_TO_RAD	= 0.017453292519943295769236907684886f;  const F32	RAD_TO_DEG	= 57.295779513082320876798154814105f;  const F32	F_APPROXIMATELY_ZERO = 0.00001f; diff --git a/indra/llmath/lloctree.h b/indra/llmath/lloctree.h index 7348904c61..f7d5f14ba3 100755 --- a/indra/llmath/lloctree.h +++ b/indra/llmath/lloctree.h @@ -36,6 +36,8 @@  extern U32 gOctreeMaxCapacity; +extern float gOctreeMinSize; +  /*#define LL_OCTREE_PARANOIA_CHECK 0  #if LL_DARWIN  #define LL_OCTREE_MAX_CAPACITY 32 @@ -106,6 +108,7 @@ public:  	:	mParent((oct_node*)parent),   		mOctant(octant)   	{  +		llassert(size[0] >= gOctreeMinSize*0.5f);  		//always keep a NULL terminated list to avoid out of bounds exceptions in debug builds  		mData.push_back(NULL);  		mDataEnd = &mData[0]; @@ -213,7 +216,7 @@ public:  		F32 size = mSize[0];  		F32 p_size = size * 2.f; -		return (radius <= 0.001f && size <= 0.001f) || +		return (radius <= gOctreeMinSize && size <= gOctreeMinSize) ||  				(radius <= p_size && radius > size);  	} @@ -319,7 +322,7 @@ public:  		//is it here?  		if (isInside(data->getPositionGroup()))  		{ -			if ((getElementCount() < gOctreeMaxCapacity && contains(data->getBinRadius()) || +			if (((getElementCount() < gOctreeMaxCapacity || getSize()[0] <= gOctreeMinSize) && contains(data->getBinRadius()) ||  				(data->getBinRadius() > getSize()[0] &&	parent && parent->getElementCount() >= gOctreeMaxCapacity)))   			{ //it belongs here  				mData.push_back(NULL); @@ -356,8 +359,9 @@ public:  				LLVector4a val;  				val.setSub(center, getCenter());  				val.setAbs(val); -								 -				S32 lt = val.lessThan(LLVector4a::getEpsilon()).getGatheredBits() & 0x7; +				LLVector4a min_diff(gOctreeMinSize); + +				S32 lt = val.lessThan(min_diff).getGatheredBits() & 0x7;  				if( lt == 0x7 )  				{ @@ -389,6 +393,7 @@ public:  				}  #endif +				llassert(size[0] >= gOctreeMinSize*0.5f);  				//make the new kid  				child = new LLOctreeNode<T>(center, size, this);  				addChild(child); @@ -796,6 +801,8 @@ public:  				this->setSize(size2);  				this->updateMinMax(); +				llassert(size[0] >= gOctreeMinSize); +  				//copy our children to a new branch  				LLOctreeNode<T>* newnode = new LLOctreeNode<T>(center, size, this);  | 
