diff options
104 files changed, 1603 insertions, 926 deletions
| diff --git a/indra/llcharacter/llcharacter.cpp b/indra/llcharacter/llcharacter.cpp index ff05b25fe9..ccc666e74d 100644 --- a/indra/llcharacter/llcharacter.cpp +++ b/indra/llcharacter/llcharacter.cpp @@ -241,33 +241,15 @@ void LLCharacter::dumpCharacter( LLJoint* joint )  //-----------------------------------------------------------------------------  void LLCharacter::setAnimationData(std::string name, void *data)  { -	if(mAnimationData.getValue(name)) -	{ -		*mAnimationData[name] = data; -	} -	else -	{ -		mAnimationData.addToHead(name, data); -	} +	mAnimationData[name] = data;  }  //-----------------------------------------------------------------------------  // getAnimationData()  //----------------------------------------------------------------------------- -void * LLCharacter::getAnimationData(std::string name) +void* LLCharacter::getAnimationData(std::string name)  { -	void **result = mAnimationData.getValue(name); -	void *return_value;		// Necessary to suppress VC6 warning. JC -	if (!result) -	{ -		return_value = NULL; -	} -	else  -	{ -		return_value = *result; -	} - -	return return_value; +	return get_if_there(mAnimationData, name, (void*)NULL);  }  //----------------------------------------------------------------------------- @@ -275,7 +257,7 @@ void * LLCharacter::getAnimationData(std::string name)  //-----------------------------------------------------------------------------  void LLCharacter::removeAnimationData(std::string name)  { -	mAnimationData.remove(name); +	mAnimationData.erase(name);  }  //----------------------------------------------------------------------------- diff --git a/indra/llcharacter/llcharacter.h b/indra/llcharacter/llcharacter.h index eb001d5fc7..a5719b0685 100644 --- a/indra/llcharacter/llcharacter.h +++ b/indra/llcharacter/llcharacter.h @@ -39,9 +39,7 @@  #include "lljoint.h"  #include "llmotioncontroller.h" -#include "llassoclist.h"  #include "llvisualparam.h" -#include "linked_lists.h"  #include "string_table.h"  #include "llmemory.h"  #include "llthread.h" @@ -255,7 +253,8 @@ public:  protected:  	LLMotionController	mMotionController; -	LLAssocList<std::string, void *> mAnimationData; +	typedef std::map<std::string, void *> animation_data_map_t; +	animation_data_map_t mAnimationData;  	F32					mPreferredPelvisHeight;  	ESex				mSex; diff --git a/indra/llcharacter/llkeyframemotion.cpp b/indra/llcharacter/llkeyframemotion.cpp index 1d00f18f2d..91d96904ba 100644 --- a/indra/llcharacter/llkeyframemotion.cpp +++ b/indra/llcharacter/llkeyframemotion.cpp @@ -122,6 +122,7 @@ U32 LLKeyframeMotion::JointMotionList::dumpDiagInfo()  //-----------------------------------------------------------------------------  //----------------------------------------------------------------------------- +  //-----------------------------------------------------------------------------  // ScaleCurve::ScaleCurve()  //----------------------------------------------------------------------------- @@ -136,7 +137,7 @@ LLKeyframeMotion::ScaleCurve::ScaleCurve()  //-----------------------------------------------------------------------------  LLKeyframeMotion::ScaleCurve::~ScaleCurve()   { -	mKeys.deleteAllData(); +	mKeys.clear();  	mNumKeys = 0;  } @@ -146,43 +147,42 @@ LLKeyframeMotion::ScaleCurve::~ScaleCurve()  LLVector3 LLKeyframeMotion::ScaleCurve::getValue(F32 time, F32 duration)  {  	LLVector3 value; -	F32 index_before, index_after; -	ScaleKey* scale_before; -	ScaleKey* scale_after; -	mKeys.getInterval(time, index_before, index_after, scale_before, scale_after); -	if (scale_before) +	if (mKeys.empty())  	{ -		if (!scale_after) -		{ -			scale_after = &mLoopInKey; -			index_after = duration; -		} - -		if (index_after == index_before) -		{ -			value = scale_after->mScale; -		} -		else -		{ -			F32 u = (time - index_before) / (index_after - index_before); -			value = interp(u, *scale_before, *scale_after); -		} +		value.clearVec(); +		return value; +	} +	 +	key_map_t::iterator right = mKeys.lower_bound(time); +	if (right == mKeys.end()) +	{ +		// Past last key +		--right; +		value = right->second.mScale; +	} +	else if (right == mKeys.begin() || right->first == time) +	{ +		// Before first key or exactly on a key +		value = right->second.mScale;  	}  	else  	{ -		// before first key -		if (scale_after) -		{ -			value = scale_after->mScale; -		} -		// no keys? -		else +		// Between two keys +		key_map_t::iterator left = right; --left; +		F32 index_before = left->first; +		F32 index_after = right->first; +		ScaleKey& scale_before = left->second; +		ScaleKey& scale_after = right->second; +		if (right == mKeys.end())  		{ -			value.clearVec(); +			scale_after = mLoopInKey; +			index_after = duration;  		} -	} +		F32 u = (time - index_before) / (index_after - index_before); +		value = interp(u, scale_before, scale_after); +	}  	return value;  } @@ -217,7 +217,7 @@ LLKeyframeMotion::RotationCurve::RotationCurve()  //-----------------------------------------------------------------------------  LLKeyframeMotion::RotationCurve::~RotationCurve()  { -	mKeys.deleteAllData(); +	mKeys.clear();  	mNumKeys = 0;  } @@ -227,44 +227,42 @@ LLKeyframeMotion::RotationCurve::~RotationCurve()  LLQuaternion LLKeyframeMotion::RotationCurve::getValue(F32 time, F32 duration)  {  	LLQuaternion value; -	F32 index_before, index_after; -	RotationKey* rot_before; -	RotationKey* rot_after; - -	mKeys.getInterval(time, index_before, index_after, rot_before, rot_after); -	if (rot_before) +	if (mKeys.empty())  	{ -		if (!rot_after) -		{ -			rot_after = &mLoopInKey; -			index_after = duration; -		} - -		if (index_after == index_before) -		{ -			value = rot_after->mRotation; -		} -		else -		{ -			F32 u = (time - index_before) / (index_after - index_before); -			value = interp(u, *rot_before, *rot_after); -		} +		value = LLQuaternion::DEFAULT; +		return value; +	} +	 +	key_map_t::iterator right = mKeys.lower_bound(time); +	if (right == mKeys.end()) +	{ +		// Past last key +		--right; +		value = right->second.mRotation; +	} +	else if (right == mKeys.begin() || right->first == time) +	{ +		// Before first key or exactly on a key +		value = right->second.mRotation;  	}  	else  	{ -		// before first key -		if (rot_after) +		// Between two keys +		key_map_t::iterator left = right; --left; +		F32 index_before = left->first; +		F32 index_after = right->first; +		RotationKey& rot_before = left->second; +		RotationKey& rot_after = right->second; +		if (right == mKeys.end())  		{ -			value = rot_after->mRotation; -		} -		// no keys? -		else -		{ -			value = LLQuaternion::DEFAULT; +			rot_after = mLoopInKey; +			index_after = duration;  		} -	} +		F32 u = (time - index_before) / (index_after - index_before); +		value = interp(u, rot_before, rot_after); +	}  	return value;  } @@ -300,7 +298,7 @@ LLKeyframeMotion::PositionCurve::PositionCurve()  //-----------------------------------------------------------------------------  LLKeyframeMotion::PositionCurve::~PositionCurve()  { -	mKeys.deleteAllData(); +	mKeys.clear();  	mNumKeys = 0;  } @@ -310,46 +308,45 @@ LLKeyframeMotion::PositionCurve::~PositionCurve()  LLVector3 LLKeyframeMotion::PositionCurve::getValue(F32 time, F32 duration)  {  	LLVector3 value; -	F32 index_before, index_after; -	PositionKey* pos_before; -	PositionKey* pos_after; -	mKeys.getInterval(time, index_before, index_after, pos_before, pos_after); - -	if (pos_before) +	if (mKeys.empty())  	{ -		if (!pos_after) -		{ -			pos_after = &mLoopInKey; -			index_after = duration; -		} - -		if (index_after == index_before) -		{ -			value = pos_after->mPosition; -		} -		else -		{ -			F32 u = (time - index_before) / (index_after - index_before); -			value = interp(u, *pos_before, *pos_after); -		} +		value.clearVec(); +		return value; +	} +	 +	key_map_t::iterator right = mKeys.lower_bound(time); +	if (right == mKeys.end()) +	{ +		// Past last key +		--right; +		value = right->second.mPosition; +	} +	else if (right == mKeys.begin() || right->first == time) +	{ +		// Before first key or exactly on a key +		value = right->second.mPosition;  	}  	else  	{ -		// before first key -		if (pos_after) -		{ -			value = pos_after->mPosition; -		} -		// no keys? -		else +		// Between two keys +		key_map_t::iterator left = right; --left; +		F32 index_before = left->first; +		F32 index_after = right->first; +		PositionKey& pos_before = left->second; +		PositionKey& pos_after = right->second; +		if (right == mKeys.end())  		{ -			value.clearVec(); +			pos_after = mLoopInKey; +			index_after = duration;  		} + +		F32 u = (time - index_before) / (index_after - index_before); +		value = interp(u, pos_before, pos_after);  	}  	llassert(value.isFinite()); - +	  	return value;  } @@ -1404,8 +1401,8 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp)  				time = U16_to_F32(time_short, 0.f, mJointMotionList->mDuration);  			} -			RotationKey *rot_key = new RotationKey; -			rot_key->mTime = time; +			RotationKey rot_key; +			rot_key.mTime = time;  			LLVector3 rot_angles;  			U16 x, y, z; @@ -1416,7 +1413,7 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp)  				success = dp.unpackVector3(rot_angles, "rot_angles");  				LLQuaternion::Order ro = StringToOrder("ZYX"); -				rot_key->mRotation = mayaQ(rot_angles.mV[VX], rot_angles.mV[VY], rot_angles.mV[VZ], ro); +				rot_key.mRotation = mayaQ(rot_angles.mV[VX], rot_angles.mV[VY], rot_angles.mV[VZ], ro);  			}  			else  			{ @@ -1428,13 +1425,12 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp)  				rot_vec.mV[VX] = U16_to_F32(x, -1.f, 1.f);  				rot_vec.mV[VY] = U16_to_F32(y, -1.f, 1.f);  				rot_vec.mV[VZ] = U16_to_F32(z, -1.f, 1.f); -				rot_key->mRotation.unpackFromVector3(rot_vec); +				rot_key.mRotation.unpackFromVector3(rot_vec);  			}  			if (!success)  			{  				llwarns << "can't read rotation key (" << k << ")" << llendl; -				delete rot_key;  				return FALSE;  			} @@ -1464,14 +1460,13 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp)  		for (S32 k = 0; k < joint_motion->mPositionCurve.mNumKeys; k++)  		{  			U16 time_short; -			PositionKey* pos_key = new PositionKey; +			PositionKey pos_key;  			if (old_version)  			{ -				if (!dp.unpackF32(pos_key->mTime, "time")) +				if (!dp.unpackF32(pos_key.mTime, "time"))  				{  					llwarns << "can't read position key (" << k << ")" << llendl; -					delete pos_key;  					return FALSE;  				}  			} @@ -1480,18 +1475,17 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp)  				if (!dp.unpackU16(time_short, "time"))  				{  					llwarns << "can't read position key (" << k << ")" << llendl; -					delete pos_key;  					return FALSE;  				} -				pos_key->mTime = U16_to_F32(time_short, 0.f, mJointMotionList->mDuration); +				pos_key.mTime = U16_to_F32(time_short, 0.f, mJointMotionList->mDuration);  			}  			BOOL success = TRUE;  			if (old_version)  			{ -				success = dp.unpackVector3(pos_key->mPosition, "pos"); +				success = dp.unpackVector3(pos_key.mPosition, "pos");  			}  			else  			{ @@ -1501,23 +1495,22 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp)  				success &= dp.unpackU16(y, "pos_y");  				success &= dp.unpackU16(z, "pos_z"); -				pos_key->mPosition.mV[VX] = U16_to_F32(x, -LL_MAX_PELVIS_OFFSET, LL_MAX_PELVIS_OFFSET); -				pos_key->mPosition.mV[VY] = U16_to_F32(y, -LL_MAX_PELVIS_OFFSET, LL_MAX_PELVIS_OFFSET); -				pos_key->mPosition.mV[VZ] = U16_to_F32(z, -LL_MAX_PELVIS_OFFSET, LL_MAX_PELVIS_OFFSET); +				pos_key.mPosition.mV[VX] = U16_to_F32(x, -LL_MAX_PELVIS_OFFSET, LL_MAX_PELVIS_OFFSET); +				pos_key.mPosition.mV[VY] = U16_to_F32(y, -LL_MAX_PELVIS_OFFSET, LL_MAX_PELVIS_OFFSET); +				pos_key.mPosition.mV[VZ] = U16_to_F32(z, -LL_MAX_PELVIS_OFFSET, LL_MAX_PELVIS_OFFSET);  			}  			if (!success)  			{  				llwarns << "can't read position key (" << k << ")" << llendl; -				delete pos_key;  				return FALSE;  			} -			pCurve->mKeys[pos_key->mTime] = pos_key; +			pCurve->mKeys[pos_key.mTime] = pos_key;  			if (is_pelvis)  			{ -				mJointMotionList->mPelvisBBox.addPoint(pos_key->mPosition); +				mJointMotionList->mPelvisBBox.addPoint(pos_key.mPosition);  			}  		} @@ -1724,14 +1717,14 @@ BOOL LLKeyframeMotion::serialize(LLDataPacker& dp) const  		success &= dp.packS32(joint_motionp->mPriority, "joint_priority");  		success &= dp.packS32(joint_motionp->mRotationCurve.mNumKeys, "num_rot_keys"); -		for (RotationKey* rot_keyp = joint_motionp->mRotationCurve.mKeys.getFirstData(); -			rot_keyp; -			rot_keyp = joint_motionp->mRotationCurve.mKeys.getNextData()) +		for (RotationCurve::key_map_t::iterator iter = joint_motionp->mRotationCurve.mKeys.begin(); +			 iter != joint_motionp->mRotationCurve.mKeys.end(); ++iter)  		{ -			U16 time_short = F32_to_U16(rot_keyp->mTime, 0.f, mJointMotionList->mDuration); +			RotationKey& rot_key = iter->second; +			U16 time_short = F32_to_U16(rot_key.mTime, 0.f, mJointMotionList->mDuration);  			success &= dp.packU16(time_short, "time"); -			LLVector3 rot_angles = rot_keyp->mRotation.packToVector3(); +			LLVector3 rot_angles = rot_key.mRotation.packToVector3();  			U16 x, y, z;  			rot_angles.quantize16(-1.f, 1.f, -1.f, 1.f); @@ -1744,18 +1737,18 @@ BOOL LLKeyframeMotion::serialize(LLDataPacker& dp) const  		}  		success &= dp.packS32(joint_motionp->mPositionCurve.mNumKeys, "num_pos_keys"); -		for (PositionKey* pos_keyp = joint_motionp->mPositionCurve.mKeys.getFirstData(); -			pos_keyp; -			pos_keyp = joint_motionp->mPositionCurve.mKeys.getNextData()) +		for (PositionCurve::key_map_t::iterator iter = joint_motionp->mPositionCurve.mKeys.begin(); +			 iter != joint_motionp->mPositionCurve.mKeys.end(); ++iter)  		{ -			U16 time_short = F32_to_U16(pos_keyp->mTime, 0.f, mJointMotionList->mDuration); +			PositionKey& pos_key = iter->second; +			U16 time_short = F32_to_U16(pos_key.mTime, 0.f, mJointMotionList->mDuration);  			success &= dp.packU16(time_short, "time");  			U16 x, y, z; -			pos_keyp->mPosition.quantize16(-LL_MAX_PELVIS_OFFSET, LL_MAX_PELVIS_OFFSET, -LL_MAX_PELVIS_OFFSET, LL_MAX_PELVIS_OFFSET); -			x = F32_to_U16(pos_keyp->mPosition.mV[VX], -LL_MAX_PELVIS_OFFSET, LL_MAX_PELVIS_OFFSET); -			y = F32_to_U16(pos_keyp->mPosition.mV[VY], -LL_MAX_PELVIS_OFFSET, LL_MAX_PELVIS_OFFSET); -			z = F32_to_U16(pos_keyp->mPosition.mV[VZ], -LL_MAX_PELVIS_OFFSET, LL_MAX_PELVIS_OFFSET); +			pos_key.mPosition.quantize16(-LL_MAX_PELVIS_OFFSET, LL_MAX_PELVIS_OFFSET, -LL_MAX_PELVIS_OFFSET, LL_MAX_PELVIS_OFFSET); +			x = F32_to_U16(pos_key.mPosition.mV[VX], -LL_MAX_PELVIS_OFFSET, LL_MAX_PELVIS_OFFSET); +			y = F32_to_U16(pos_key.mPosition.mV[VY], -LL_MAX_PELVIS_OFFSET, LL_MAX_PELVIS_OFFSET); +			z = F32_to_U16(pos_key.mPosition.mV[VZ], -LL_MAX_PELVIS_OFFSET, LL_MAX_PELVIS_OFFSET);  			success &= dp.packU16(x, "pos_x");  			success &= dp.packU16(y, "pos_y");  			success &= dp.packU16(z, "pos_z"); diff --git a/indra/llcharacter/llkeyframemotion.h b/indra/llcharacter/llkeyframemotion.h index 8d6ebbf4b7..c383e5e99e 100644 --- a/indra/llcharacter/llkeyframemotion.h +++ b/indra/llcharacter/llkeyframemotion.h @@ -43,7 +43,6 @@  #include "llhandmotion.h"  #include "lljointstate.h"  #include "llmotion.h" -#include "llptrskipmap.h"  #include "llquaternion.h"  #include "v3dmath.h"  #include "v3math.h" @@ -338,7 +337,8 @@ public:  		InterpolationType	mInterpolationType;  		S32					mNumKeys; -		LLPtrSkipMap<F32, ScaleKey*>			mKeys; +		typedef std::map<F32, ScaleKey> key_map_t; +		key_map_t 			mKeys;  		ScaleKey			mLoopInKey;  		ScaleKey			mLoopOutKey;  	}; @@ -356,7 +356,8 @@ public:  		InterpolationType	mInterpolationType;  		S32					mNumKeys; -		LLPtrSkipMap<F32, RotationKey*>		mKeys; +		typedef std::map<F32, RotationKey> key_map_t; +		key_map_t		mKeys;  		RotationKey		mLoopInKey;  		RotationKey		mLoopOutKey;  	}; @@ -374,7 +375,8 @@ public:  		InterpolationType	mInterpolationType;  		S32					mNumKeys; -		LLPtrSkipMap<F32, PositionKey*>		mKeys; +		typedef std::map<F32, PositionKey> key_map_t; +		key_map_t		mKeys;  		PositionKey		mLoopInKey;  		PositionKey		mLoopOutKey;  	}; diff --git a/indra/llcharacter/llkeyframemotionparam.cpp b/indra/llcharacter/llkeyframemotionparam.cpp index f54d1f4a83..30edc29c6e 100644 --- a/indra/llcharacter/llkeyframemotionparam.cpp +++ b/indra/llcharacter/llkeyframemotionparam.cpp @@ -48,14 +48,6 @@  //-----------------------------------------------------------------------------  //----------------------------------------------------------------------------- -// sortFunc() -//----------------------------------------------------------------------------- -BOOL LLKeyframeMotionParam::sortFunc(ParameterizedMotion *new_motion, ParameterizedMotion *tested_motion) -{ -	return (new_motion->second < tested_motion->second); -} - -//-----------------------------------------------------------------------------  // LLKeyframeMotionParam()  // Class Constructor  //----------------------------------------------------------------------------- @@ -77,17 +69,18 @@ LLKeyframeMotionParam::LLKeyframeMotionParam( const LLUUID &id) : LLMotion(id)  //-----------------------------------------------------------------------------  LLKeyframeMotionParam::~LLKeyframeMotionParam()  { -	for (U32 i = 0; i < mParameterizedMotions.length(); i++) +	for (motion_map_t::iterator iter = mParameterizedMotions.begin(); +		 iter != mParameterizedMotions.end(); ++iter)  	{ -		LLLinkedList< ParameterizedMotion > *motionList = *mParameterizedMotions.getValueAt(i); -		for (ParameterizedMotion* paramMotion = motionList->getFirstData(); paramMotion; paramMotion = motionList->getNextData()) +		motion_list_t& motionList = iter->second; +		for (motion_list_t::iterator iter2 = motionList.begin(); iter2 != motionList.end(); ++iter2)  		{ -			delete paramMotion->first; +			const ParameterizedMotion& paramMotion = *iter2; +			delete paramMotion.first; // note - deletes the structure; ParameterizedMotion pair remains intact  		} -		delete motionList; +		motionList.clear();  	} - -	mParameterizedMotions.removeAll(); +	mParameterizedMotions.clear();  }  //----------------------------------------------------------------------------- @@ -102,36 +95,39 @@ LLMotion::LLMotionInitStatus LLKeyframeMotionParam::onInitialize(LLCharacter *ch  		return STATUS_FAILURE;	  	} -	for (U32 i = 0; i < mParameterizedMotions.length(); i++) +	for (motion_map_t::iterator iter = mParameterizedMotions.begin(); +		 iter != mParameterizedMotions.end(); ++iter)  	{ -		LLLinkedList< ParameterizedMotion > *motionList = *mParameterizedMotions.getValueAt(i); -		for (ParameterizedMotion* paramMotion = motionList->getFirstData(); paramMotion; paramMotion = motionList->getNextData()) +		motion_list_t& motionList = iter->second; +		for (motion_list_t::iterator iter2 = motionList.begin(); iter2 != motionList.end(); ++iter2)  		{ -			paramMotion->first->onInitialize(character); +			const ParameterizedMotion& paramMotion = *iter2; -			if (paramMotion->first->getDuration() > mEaseInDuration) +			paramMotion.first->onInitialize(character); + +			if (paramMotion.first->getDuration() > mEaseInDuration)  			{ -				mEaseInDuration = paramMotion->first->getEaseInDuration(); +				mEaseInDuration = paramMotion.first->getEaseInDuration();  			} -			if (paramMotion->first->getEaseOutDuration() > mEaseOutDuration) +			if (paramMotion.first->getEaseOutDuration() > mEaseOutDuration)  			{ -				mEaseOutDuration = paramMotion->first->getEaseOutDuration(); +				mEaseOutDuration = paramMotion.first->getEaseOutDuration();  			} -			if (paramMotion->first->getDuration() > mDuration) +			if (paramMotion.first->getDuration() > mDuration)  			{ -				mDuration = paramMotion->first->getDuration(); +				mDuration = paramMotion.first->getDuration();  			} -			if (paramMotion->first->getPriority() > mPriority) +			if (paramMotion.first->getPriority() > mPriority)  			{ -				mPriority = paramMotion->first->getPriority(); +				mPriority = paramMotion.first->getPriority();  			} -			LLPose *pose = paramMotion->first->getPose(); +			LLPose *pose = paramMotion.first->getPose(); -			mPoseBlender.addMotion(paramMotion->first); +			mPoseBlender.addMotion(paramMotion.first);  			for (LLJointState *jsp = pose->getFirstJointState(); jsp; jsp = pose->getNextJointState())  			{  				LLPose *blendedPose = mPoseBlender.getBlendedPose(); @@ -148,12 +144,14 @@ LLMotion::LLMotionInitStatus LLKeyframeMotionParam::onInitialize(LLCharacter *ch  //-----------------------------------------------------------------------------  BOOL LLKeyframeMotionParam::onActivate()  { -	for (U32 i = 0; i < mParameterizedMotions.length(); i++) +	for (motion_map_t::iterator iter = mParameterizedMotions.begin(); +		 iter != mParameterizedMotions.end(); ++iter)  	{ -		LLLinkedList< ParameterizedMotion > *motionList = *mParameterizedMotions.getValueAt(i); -		for (ParameterizedMotion* paramMotion = motionList->getFirstData(); paramMotion; paramMotion = motionList->getNextData()) +		motion_list_t& motionList = iter->second; +		for (motion_list_t::iterator iter2 = motionList.begin(); iter2 != motionList.end(); ++iter2)  		{ -			paramMotion->first->activate(); +			const ParameterizedMotion& paramMotion = *iter2; +			paramMotion.first->activate();  		}  	}  	return TRUE; @@ -165,46 +163,48 @@ BOOL LLKeyframeMotionParam::onActivate()  //-----------------------------------------------------------------------------  BOOL LLKeyframeMotionParam::onUpdate(F32 time, U8* joint_mask)  { -	F32 weightFactor = 1.f / (F32)mParameterizedMotions.length(); -	U32 i; +	F32 weightFactor = 1.f / (F32)mParameterizedMotions.size();  	// zero out all pose weights -	for (i = 0; i < mParameterizedMotions.length(); i++) +	for (motion_map_t::iterator iter = mParameterizedMotions.begin(); +		 iter != mParameterizedMotions.end(); ++iter)  	{ -		LLLinkedList< ParameterizedMotion > *motionList = *mParameterizedMotions.getValueAt(i); - -		for (ParameterizedMotion* paramMotion = motionList->getFirstData(); paramMotion; paramMotion = motionList->getNextData()) +		motion_list_t& motionList = iter->second; +		for (motion_list_t::iterator iter2 = motionList.begin(); iter2 != motionList.end(); ++iter2)  		{ -//			llinfos << "Weight for pose " << paramMotion->first->getName() << " is " << paramMotion->first->getPose()->getWeight() << llendl; -			paramMotion->first->getPose()->setWeight(0.f); +			const ParameterizedMotion& paramMotion = *iter2; +//			llinfos << "Weight for pose " << paramMotion.first->getName() << " is " << paramMotion.first->getPose()->getWeight() << llendl; +			paramMotion.first->getPose()->setWeight(0.f);  		}  	} -	for (i = 0; i < mParameterizedMotions.length(); i++) +	for (motion_map_t::iterator iter = mParameterizedMotions.begin(); +		 iter != mParameterizedMotions.end(); ++iter)  	{ -		LLLinkedList< ParameterizedMotion > *motionList = *mParameterizedMotions.getValueAt(i); -		std::string *paramName = mParameterizedMotions.getIndexAt(i); -		F32* paramValue = (F32 *)mCharacter->getAnimationData(*paramName); -		ParameterizedMotion* firstMotion = NULL; -		ParameterizedMotion* secondMotion = NULL; - +		const std::string& paramName = iter->first; +		F32* paramValue = (F32 *)mCharacter->getAnimationData(paramName);  		if (NULL == paramValue) // unexpected, but...  		{  			llwarns << "paramValue == NULL" << llendl;  			continue;  		} -		for (ParameterizedMotion* paramMotion = motionList->getFirstData(); paramMotion; paramMotion = motionList->getNextData()) +		const ParameterizedMotion* firstMotion = NULL; +		const ParameterizedMotion* secondMotion = NULL; + +		motion_list_t& motionList = iter->second; +		for (motion_list_t::iterator iter2 = motionList.begin(); iter2 != motionList.end(); ++iter2)  		{ -			paramMotion->first->onUpdate(time, joint_mask); +			const ParameterizedMotion& paramMotion = *iter2; +			paramMotion.first->onUpdate(time, joint_mask); -			F32 distToParam = paramMotion->second - *paramValue; +			F32 distToParam = paramMotion.second - *paramValue;  			if ( distToParam <= 0.f)  			{  				// keep track of the motion closest to the parameter value -				firstMotion = paramMotion; +				firstMotion = ¶mMotion;  			}  			else  			{ @@ -212,13 +212,13 @@ BOOL LLKeyframeMotionParam::onUpdate(F32 time, U8* joint_mask)  				// so store the first motion we find as the second one we want to blend...  				if (firstMotion && !secondMotion )  				{ -					secondMotion = paramMotion; +					secondMotion = ¶mMotion;  				}  				//...or, if we've seen no other motion so far, make sure we blend to this only  				else if (!firstMotion)  				{ -					firstMotion = paramMotion; -					secondMotion = paramMotion; +					firstMotion = ¶mMotion; +					secondMotion = ¶mMotion;  				}  			}  		} @@ -283,12 +283,14 @@ BOOL LLKeyframeMotionParam::onUpdate(F32 time, U8* joint_mask)  //-----------------------------------------------------------------------------  void LLKeyframeMotionParam::onDeactivate()  { -	for (U32 i = 0; i < mParameterizedMotions.length(); i++) +	for (motion_map_t::iterator iter = mParameterizedMotions.begin(); +		 iter != mParameterizedMotions.end(); ++iter)  	{ -		LLLinkedList< ParameterizedMotion > *motionList = *mParameterizedMotions.getValueAt(i); -		for (ParameterizedMotion* paramMotion = motionList->getFirstData(); paramMotion; paramMotion = motionList->getNextData()) +		motion_list_t& motionList = iter->second; +		for (motion_list_t::iterator iter2 = motionList.begin(); iter2 != motionList.end(); ++iter2)  		{ -			paramMotion->first->onDeactivate(); +			const ParameterizedMotion& paramMotion = *iter2; +			paramMotion.first->onDeactivate();  		}  	}  } @@ -307,23 +309,8 @@ BOOL LLKeyframeMotionParam::addKeyframeMotion(char *name, const LLUUID &id, char  	newMotion->setName(name); -	// make sure a list of motions exists for this parameter -	LLLinkedList< ParameterizedMotion > *motionList; -	if (mParameterizedMotions.getValue(param)) -	{ -		motionList = *mParameterizedMotions.getValue(param); -	} -	else -	{ -		motionList = new LLLinkedList< ParameterizedMotion >; -		motionList->setInsertBefore(sortFunc); -		mParameterizedMotions.addToHead(param, motionList); -	} -  	// now add motion to this list -	ParameterizedMotion *parameterizedMotion = new ParameterizedMotion(newMotion, value); - -	motionList->addDataSorted(parameterizedMotion); +	mParameterizedMotions[param].insert(ParameterizedMotion(newMotion, value));  	return TRUE;  } @@ -334,14 +321,16 @@ BOOL LLKeyframeMotionParam::addKeyframeMotion(char *name, const LLUUID &id, char  //-----------------------------------------------------------------------------  void LLKeyframeMotionParam::setDefaultKeyframeMotion(char *name)  { -	for (U32 i = 0; i < mParameterizedMotions.length(); i++) +	for (motion_map_t::iterator iter = mParameterizedMotions.begin(); +		 iter != mParameterizedMotions.end(); ++iter)  	{ -		LLLinkedList< ParameterizedMotion > *motionList = *mParameterizedMotions.getValueAt(i); -		for (ParameterizedMotion* paramMotion = motionList->getFirstData(); paramMotion; paramMotion = motionList->getNextData()) +		motion_list_t& motionList = iter->second; +		for (motion_list_t::iterator iter2 = motionList.begin(); iter2 != motionList.end(); ++iter2)  		{ -			if (paramMotion->first->getName() == name) +			const ParameterizedMotion& paramMotion = *iter2; +			if (paramMotion.first->getName() == name)  			{ -				mDefaultKeyframeMotion = paramMotion->first; +				mDefaultKeyframeMotion = paramMotion.first;  			}  		}  	} diff --git a/indra/llcharacter/llkeyframemotionparam.h b/indra/llcharacter/llkeyframemotionparam.h index 39a02aea25..305207eb09 100644 --- a/indra/llcharacter/llkeyframemotionparam.h +++ b/indra/llcharacter/llkeyframemotionparam.h @@ -143,8 +143,20 @@ protected:  	// Member Data  	//------------------------------------------------------------------------- -	typedef LLLinkedList < ParameterizedMotion >	motion_list_t; -	LLAssocList <std::string, motion_list_t* > mParameterizedMotions; +	struct compare_motions +	{ +		bool operator() (const ParameterizedMotion& a, const ParameterizedMotion& b) const +		{ +			if (a.second != b.second) +				return (a.second < b.second); +			else +				return a.first < b.first; +		} +	}; +	 +	typedef std::set < ParameterizedMotion, compare_motions > motion_list_t; +	typedef std::map <std::string, motion_list_t > motion_map_t; +	motion_map_t 		mParameterizedMotions;  	LLMotion*			mDefaultKeyframeMotion;  	LLCharacter*		mCharacter;  	LLPoseBlender		mPoseBlender; diff --git a/indra/llcharacter/llpose.h b/indra/llcharacter/llpose.h index 5ba579a167..0c71fd77b3 100644 --- a/indra/llcharacter/llpose.h +++ b/indra/llcharacter/llpose.h @@ -37,10 +37,8 @@  //-----------------------------------------------------------------------------  #include <string> -#include "linked_lists.h"  #include "llmap.h"  #include "lljointstate.h" -#include "llassoclist.h"  #include "lljoint.h"  #include <map> diff --git a/indra/llcharacter/llstatemachine.h b/indra/llcharacter/llstatemachine.h index 6983729147..c19a926dbb 100644 --- a/indra/llcharacter/llstatemachine.h +++ b/indra/llcharacter/llstatemachine.h @@ -34,7 +34,6 @@  #include <string> -#include "llassoclist.h"  #include "llerror.h"  #include <map> diff --git a/indra/llcommon/linden_common.h b/indra/llcommon/linden_common.h index 504552a9d2..9ee4d1159e 100644 --- a/indra/llcommon/linden_common.h +++ b/indra/llcommon/linden_common.h @@ -62,6 +62,7 @@  #pragma warning (disable : 4100) // unreferenced formal parameter  #pragma warning (disable : 4127) // conditional expression is constant (e.g. while(1) )  #pragma warning (disable : 4244) // possible loss of data on conversions +#pragma warning (disable : 4396) // the inline specifier cannot be used when a friend declaration refers to a specialization of a function template  #pragma warning (disable : 4512) // assignment operator could not be generated  #pragma warning (disable : 4706) // assignment within conditional (even if((x = y)) )  #endif	//	LL_WINDOWS diff --git a/indra/llcommon/llsys.cpp b/indra/llcommon/llsys.cpp index 7346b29fb1..98393dacd1 100644 --- a/indra/llcommon/llsys.cpp +++ b/indra/llcommon/llsys.cpp @@ -679,7 +679,8 @@ BOOL gunzip_file(const char *srcfile, const char *dstfile)  		size_t nwrit = fwrite(buffer, sizeof(U8), bytes, dst);  		if (nwrit < (size_t) bytes)  		{ -			llerrs << "Short write on " << tmpfile << llendl; +			llwarns << "Short write on " << tmpfile << ": Wrote " << nwrit << " of " << bytes << " bytes." << llendl; +			goto err;  		}  	} while(gzeof(src) == 0);  	fclose(dst);  diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h index 65db226ff9..02b956d86c 100644 --- a/indra/llcommon/llversionviewer.h +++ b/indra/llcommon/llversionviewer.h @@ -34,8 +34,8 @@  const S32 LL_VERSION_MAJOR = 1;  const S32 LL_VERSION_MINOR = 19; -const S32 LL_VERSION_PATCH = 0; -const S32 LL_VERSION_BUILD = 5; +const S32 LL_VERSION_PATCH = 1; +const S32 LL_VERSION_BUILD = 0;  const char * const LL_CHANNEL = "Second Life Release"; diff --git a/indra/llinventory/llparcel.cpp b/indra/llinventory/llparcel.cpp index 81001a2c9d..15beeec866 100644 --- a/indra/llinventory/llparcel.cpp +++ b/indra/llinventory/llparcel.cpp @@ -332,6 +332,12 @@ void LLParcel::setMediaType(const char* type)  	// abstraction layer.  	set_std_string(type, mMediaType);  	mMediaType = rawstr_to_utf8(mMediaType); + +	// This code attempts to preserve legacy movie functioning +	if(mMediaType.empty() && ! mMediaURL.empty()) +	{ +		setMediaType("video/vnd.secondlife.qt.legacy"); +	}  }  void LLParcel::setMediaWidth(S32 width)  { diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index ab2eef0ee9..44fef9daf6 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -1854,55 +1854,70 @@ inline LLVector3 sculpt_rgb_to_vector(U8 r, U8 g, U8 b)  	return value;  } +inline U32 sculpt_xy_to_index(U32 x, U32 y, U16 sculpt_width, U16 sculpt_height, S8 sculpt_components) +{ +	U32 index = (x + y * sculpt_width) * sculpt_components; -// 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) +	// attempt to resolve DEV-11158 - remove assert later. +	llassert(index < sculpt_width * sculpt_height * sculpt_components); +	 +	return index; +} + + +inline U32 sculpt_st_to_index(S32 s, S32 t, S32 size_s, S32 size_t, U16 sculpt_width, U16 sculpt_height, S8 sculpt_components)  { -    U8 sculpt_type = mParams.getSculptType(); +	U32 x = (U32) ((F32)s/(size_s) * (F32) sculpt_width); +	U32 y = (U32) ((F32)t/(size_t) * (F32) sculpt_height); -	BOOL data_is_empty = FALSE; +	return sculpt_xy_to_index(x, y, sculpt_width, sculpt_height, sculpt_components); +} -	if (sculpt_width == 0 || sculpt_height == 0 || sculpt_data == NULL) -	{ -		sculpt_level = -1; -		data_is_empty = TRUE; -	} -	mPathp->generate(mDetail, 0, TRUE); -	mProfilep->generate(mPathp->isOpen(), mDetail, 0, TRUE); -	 +inline LLVector3 sculpt_index_to_vector(U32 index, const U8* sculpt_data) +{ +	LLVector3 v = sculpt_rgb_to_vector(sculpt_data[index], sculpt_data[index+1], sculpt_data[index+2]); + +	return v; +} + +inline LLVector3 sculpt_st_to_vector(S32 s, S32 t, S32 size_s, S32 size_t, U16 sculpt_width, U16 sculpt_height, S8 sculpt_components, const U8* sculpt_data) +{ +	U32 index = sculpt_st_to_index(s, t, size_s, size_t, sculpt_width, sculpt_height, sculpt_components); + +	return sculpt_index_to_vector(index, sculpt_data); +} + +inline LLVector3 sculpt_xy_to_vector(U32 x, U32 y, U16 sculpt_width, U16 sculpt_height, S8 sculpt_components, const U8* sculpt_data) +{ +	U32 index = sculpt_xy_to_index(x, y, sculpt_width, sculpt_height, sculpt_components); + +	return sculpt_index_to_vector(index, sculpt_data); +} + + +F32 LLVolume::sculptGetSurfaceArea(U16 sculpt_width, U16 sculpt_height, S8 sculpt_components, const U8* sculpt_data) +{ +	// test to see if image has enough variation to create non-degenerate geometry +  	S32 sizeS = mPathp->mPath.size();  	S32 sizeT = mProfilep->mProfile.size(); -	sNumMeshPoints -= mMesh.size(); -	mMesh.resize(sizeS * sizeT); -	sNumMeshPoints += mMesh.size(); -  	F32 area = 0; -	// first test to see if image has enough variation to create non-degenerate geometry -	if (!data_is_empty) +	 +	if ((sculpt_width != 0) && +		(sculpt_height != 0) && +		(sculpt_components != 0) && +		(sculpt_data != NULL))  	{  		for (S32 s = 0; s < sizeS - 1; s++)  		{  			for (S32 t = 0; t < sizeT - 1; t++)  			{ -				// first coordinate -				U32 x = (U32) ((F32)s/(sizeS) * (F32) sculpt_width); -				U32 y = (U32) ((F32)t/(sizeT) * (F32) sculpt_height); - -				// coordinate offset by 1 -				U32 x2 = (U32) ((F32)(s+1)/(sizeS) * (F32) sculpt_width); -				U32 y2 = (U32) ((F32)(t+1)/(sizeT) * (F32) sculpt_height); -					 -				// three points on a triagle - find the image indices first -				U32 p1_index = (x + y * sculpt_width) * sculpt_components; -				U32 p2_index = (x2 + y * sculpt_width) * sculpt_components; -				U32 p3_index = (x + y2 * sculpt_width) * sculpt_components; -  				// convert image data to vectors -				LLVector3 p1 = sculpt_rgb_to_vector(sculpt_data[p1_index], sculpt_data[p1_index+1], sculpt_data[p1_index+2]); -				LLVector3 p2 = sculpt_rgb_to_vector(sculpt_data[p2_index], sculpt_data[p2_index+1], sculpt_data[p2_index+2]); -				LLVector3 p3 = sculpt_rgb_to_vector(sculpt_data[p3_index], sculpt_data[p3_index+1], sculpt_data[p3_index+2]); +				LLVector3 p1 = sculpt_st_to_vector(s, t, sizeS, sizeT, sculpt_width, sculpt_height, sculpt_components, sculpt_data); +				LLVector3 p2 = sculpt_st_to_vector(s+1, t, sizeS, sizeT, sculpt_width, sculpt_height, sculpt_components, sculpt_data); +				LLVector3 p3 = sculpt_st_to_vector(s, t+1, sizeS, sizeT, sculpt_width, sculpt_height, sculpt_components, sculpt_data);  				// compute the area of the parallelogram by taking the length of the cross product:  				// (parallegram is an approximation of two triangles) @@ -1910,99 +1925,151 @@ void LLVolume::sculpt(U16 sculpt_width, U16 sculpt_height, S8 sculpt_components,  				area += cross.magVec();  			}  		} -		if (area < SCULPT_MIN_AREA) -			data_is_empty = TRUE;  	} -	//generate vertex positions -	if (data_is_empty) // if empty, make a sphere -	{ -		S32 line = 0; +	return area; +} + +// create placeholder shape +void LLVolume::sculptGeneratePlaceholder() +{ +	S32 sizeS = mPathp->mPath.size(); +	S32 sizeT = mProfilep->mProfile.size(); +	 +	S32 line = 0; -		for (S32 s = 0; s < sizeS; s++) +	// for now, this is a sphere. +	for (S32 s = 0; s < sizeS; s++) +	{ +		for (S32 t = 0; t < sizeT; t++)  		{ -			for (S32 t = 0; t < sizeT; t++) -			{ -				S32 i = t + line; -				Point& pt = mMesh[i]; +			S32 i = t + line; +			Point& pt = mMesh[i]; -				F32 u = (F32)s/(sizeS-1); -				F32 v = (F32)t/(sizeT-1); +			F32 u = (F32)s/(sizeS-1); +			F32 v = (F32)t/(sizeT-1); -				const F32 RADIUS = (F32) 0.3; +			const F32 RADIUS = (F32) 0.3; -				pt.mPos.mV[0] = (F32)(sin(F_PI * v) * cos(2.0 * F_PI * u) * RADIUS); -				pt.mPos.mV[1] = (F32)(sin(F_PI * v) * sin(2.0 * F_PI * u) * RADIUS); -				pt.mPos.mV[2] = (F32)(cos(F_PI * v) * RADIUS); +			pt.mPos.mV[0] = (F32)(sin(F_PI * v) * cos(2.0 * F_PI * u) * RADIUS); +			pt.mPos.mV[1] = (F32)(sin(F_PI * v) * sin(2.0 * F_PI * u) * RADIUS); +			pt.mPos.mV[2] = (F32)(cos(F_PI * v) * RADIUS); -			} -			line += sizeT;  		} -	}	 -	else +		line += sizeT; +	} +} + +// create the vertices from the map +void LLVolume::sculptGenerateMapVertices(U16 sculpt_width, U16 sculpt_height, S8 sculpt_components, const U8* sculpt_data, U8 sculpt_type) +{ +	S32 sizeS = mPathp->mPath.size(); +	S32 sizeT = mProfilep->mProfile.size(); +	 +	S32 line = 0; +	for (S32 s = 0; s < sizeS; s++)  	{ -		S32 line = 0; -		for (S32 s = 0; s < sizeS; s++) +		// Run along the profile. +		for (S32 t = 0; t < sizeT; t++)  		{ -			// Run along the profile. -			for (S32 t = 0; t < sizeT; t++) -			{ -				S32 i = t + line; -				Point& pt = mMesh[i]; +			S32 i = t + line; +			Point& pt = mMesh[i]; -				U32 x = (U32) ((F32)t/(sizeT-1) * (F32) sculpt_width); -				U32 y = (U32) ((F32)s/(sizeS-1) * (F32) sculpt_height); +			U32 x = (U32) ((F32)t/(sizeT-1) * (F32) sculpt_width); +			U32 y = (U32) ((F32)s/(sizeS-1) * (F32) sculpt_height); -				if (y == 0)  // top row stitching +			if (y == 0)  // top row stitching +			{ +				// pinch? +				if (sculpt_type == LL_SCULPT_TYPE_SPHERE)  				{ -					// pinch? -					if (sculpt_type == LL_SCULPT_TYPE_SPHERE) -					{ -						x = sculpt_width / 2; -					} +					x = sculpt_width / 2;  				} +			} -				if (y == sculpt_height)  // bottom row stitching +			if (y == sculpt_height)  // bottom row stitching +			{ +				// wrap? +				if (sculpt_type == LL_SCULPT_TYPE_TORUS)  				{ -					// wrap? -					if (sculpt_type == LL_SCULPT_TYPE_TORUS) -					{ -						y = 0; -					} -					else -					{ -						y = sculpt_height - 1; -					} +					y = 0; +				} +				else +				{ +					y = sculpt_height - 1; +				} -					// pinch? -					if (sculpt_type == LL_SCULPT_TYPE_SPHERE) -					{ -						x = sculpt_width / 2; -					} +				// pinch? +				if (sculpt_type == LL_SCULPT_TYPE_SPHERE) +				{ +					x = sculpt_width / 2;  				} +			} -				if (x == sculpt_width)   // side stitching +			if (x == sculpt_width)   // side stitching +			{ +				// wrap? +				if ((sculpt_type == LL_SCULPT_TYPE_SPHERE) || +					(sculpt_type == LL_SCULPT_TYPE_TORUS) || +					(sculpt_type == LL_SCULPT_TYPE_CYLINDER))  				{ -					// wrap? -					if ((sculpt_type == LL_SCULPT_TYPE_SPHERE) || -						(sculpt_type == LL_SCULPT_TYPE_TORUS) || -						(sculpt_type == LL_SCULPT_TYPE_CYLINDER)) -					{ -						x = 0; -					} +					x = 0; +				} -					else -					{ -						x = sculpt_width - 1; -					} +				else +				{ +					x = sculpt_width - 1;  				} - -				U32 index = (x + y * sculpt_width) * sculpt_components; -				pt.mPos = sculpt_rgb_to_vector(sculpt_data[index], sculpt_data[index+1], sculpt_data[index+2]);  			} -			line += sizeT; + +			pt.mPos = sculpt_xy_to_vector(x, y, sculpt_width, sculpt_height, sculpt_components, sculpt_data);  		} +		line += sizeT; +	} +} + + +// 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) +{ +    U8 sculpt_type = mParams.getSculptType(); + +	BOOL data_is_empty = FALSE; + +	if (sculpt_width == 0 || sculpt_height == 0 || sculpt_components == 0 || sculpt_data == NULL) +	{ +		sculpt_level = -1; +		data_is_empty = TRUE; +	} + +	mPathp->generate(mDetail, 0, TRUE); +	mProfilep->generate(mPathp->isOpen(), mDetail, 0, TRUE); + +	S32 sizeS = mPathp->mPath.size(); +	S32 sizeT = mProfilep->mProfile.size(); + +	// weird crash bug - DEV-11158 - trying to collect more data: +	if ((sizeS == 0) || (sizeT == 0)) +	{ +		llwarns << "sculpt bad mesh size " << sizeS << " " << sizeT << llendl; +	} +	 +	sNumMeshPoints -= mMesh.size(); +	mMesh.resize(sizeS * sizeT); +	sNumMeshPoints += mMesh.size(); +	 +	if (sculptGetSurfaceArea(sculpt_width, sculpt_height, sculpt_components, sculpt_data) < SCULPT_MIN_AREA) +		data_is_empty = TRUE; + +	//generate vertex positions +	if (data_is_empty) // if empty, make a placeholder mesh +	{ +		sculptGeneratePlaceholder(); +	}	 +	else +	{ +		sculptGenerateMapVertices(sculpt_width, sculpt_height, sculpt_components, sculpt_data, sculpt_type);  	}  	for (S32 i = 0; i < (S32)mProfilep->mFaces.size(); i++) diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index 3e61947947..9af02d2629 100644 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -903,6 +903,10 @@ public:  	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); +private: +	F32 sculptGetSurfaceArea(U16 sculpt_width, U16 sculpt_height, S8 sculpt_components, const U8* sculpt_data); +	void sculptGenerateMapVertices(U16 sculpt_width, U16 sculpt_height, S8 sculpt_components, const U8* sculpt_data, U8 sculpt_type); +	void sculptGeneratePlaceholder();  protected:  	BOOL generate(); diff --git a/indra/llmessage/llcircuit.h b/indra/llmessage/llcircuit.h index 1a6611f5d4..8824e6825a 100644 --- a/indra/llmessage/llcircuit.h +++ b/indra/llmessage/llcircuit.h @@ -37,7 +37,6 @@  #include <vector>  #include "llerror.h" -#include "linked_lists.h"  #include "lltimer.h"  #include "timing.h" diff --git a/indra/llmessage/llcurl.cpp b/indra/llmessage/llcurl.cpp index 8afcb6ba4f..8b9a45ff3f 100644 --- a/indra/llmessage/llcurl.cpp +++ b/indra/llmessage/llcurl.cpp @@ -121,6 +121,7 @@ void LLCurl::Responder::error(U32 status, const std::string& reason)  // virtual  void LLCurl::Responder::result(const LLSD& content)  { +	llwarns << "Virtual Function not implemented" << llendl;  }  // virtual diff --git a/indra/llmessage/llnamevalue.h b/indra/llmessage/llnamevalue.h index 1bdfeb2365..7a4c80f3f3 100644 --- a/indra/llmessage/llnamevalue.h +++ b/indra/llmessage/llnamevalue.h @@ -33,7 +33,6 @@  #define LL_LLNAMEVALUE_H  #include "string_table.h" -#include "llskipmap.h"  #include "llmath.h"  #include "v3math.h"  #include "lldbstrings.h" diff --git a/indra/llmessage/llpacketring.h b/indra/llmessage/llpacketring.h index 109d5e60dd..0e1450ac1b 100644 --- a/indra/llmessage/llpacketring.h +++ b/indra/llmessage/llpacketring.h @@ -36,7 +36,6 @@  #include <queue>  #include "llpacketbuffer.h" -#include "linked_lists.h"  #include "llhost.h"  #include "net.h"  #include "llthrottle.h" diff --git a/indra/llmessage/llxfermanager.cpp b/indra/llmessage/llxfermanager.cpp index c4dd3406b4..a612e181cd 100644 --- a/indra/llmessage/llxfermanager.cpp +++ b/indra/llmessage/llxfermanager.cpp @@ -90,8 +90,9 @@ void LLXferManager::free ()  {  	LLXfer *xferp;  	LLXfer *delp; -	 -	mOutgoingHosts.deleteAllData(); + +	for_each(mOutgoingHosts.begin(), mOutgoingHosts.end(), DeletePointer()); +	mOutgoingHosts.clear();  	delp = mSendList;  	while (delp) @@ -155,12 +156,15 @@ void LLXferManager::updateHostStatus()      LLXfer *xferp;  	LLHostStatus *host_statusp = NULL; -	mOutgoingHosts.deleteAllData(); +	for_each(mOutgoingHosts.begin(), mOutgoingHosts.end(), DeletePointer()); +	mOutgoingHosts.clear();  	for (xferp = mSendList; xferp; xferp = xferp->mNext)  	{ -		for (host_statusp = mOutgoingHosts.getFirstData(); host_statusp; host_statusp = mOutgoingHosts.getNextData()) +		for (status_list_t::iterator iter = mOutgoingHosts.begin(); +			 iter != mOutgoingHosts.end(); ++iter)  		{ +			host_statusp = *iter;  			if (host_statusp->mHost == xferp->mRemoteHost)  			{  				break; @@ -172,7 +176,7 @@ void LLXferManager::updateHostStatus()  			if (host_statusp)  			{  				host_statusp->mHost = xferp->mRemoteHost; -				mOutgoingHosts.addData(host_statusp); +				mOutgoingHosts.push_front(host_statusp);  			}  		}  		if (host_statusp) @@ -195,12 +199,14 @@ void LLXferManager::updateHostStatus()  void LLXferManager::printHostStatus()  {  	LLHostStatus *host_statusp = NULL; -	if (mOutgoingHosts.getFirstData()) +	if (!mOutgoingHosts.empty())  	{  		llinfos << "Outgoing Xfers:" << llendl; -		for (host_statusp = mOutgoingHosts.getFirstData(); host_statusp; host_statusp = mOutgoingHosts.getNextData()) +		for (status_list_t::iterator iter = mOutgoingHosts.begin(); +			 iter != mOutgoingHosts.end(); ++iter)  		{ +			host_statusp = *iter;  			llinfos << "    " << host_statusp->mHost << "  active: " << host_statusp->mNumActive << "  pending: " << host_statusp->mNumPending << llendl;  		}  	}	 @@ -275,8 +281,10 @@ S32 LLXferManager::numPendingXfers(const LLHost &host)  {  	LLHostStatus *host_statusp = NULL; -	for (host_statusp = mOutgoingHosts.getFirstData(); host_statusp; host_statusp = mOutgoingHosts.getNextData()) +	for (status_list_t::iterator iter = mOutgoingHosts.begin(); +		 iter != mOutgoingHosts.end(); ++iter)  	{ +		host_statusp = *iter;  		if (host_statusp->mHost == host)  		{  			return (host_statusp->mNumPending); @@ -291,8 +299,10 @@ S32 LLXferManager::numActiveXfers(const LLHost &host)  {  	LLHostStatus *host_statusp = NULL; -	for (host_statusp = mOutgoingHosts.getFirstData(); host_statusp; host_statusp = mOutgoingHosts.getNextData()) +	for (status_list_t::iterator iter = mOutgoingHosts.begin(); +		 iter != mOutgoingHosts.end(); ++iter)  	{ +		host_statusp = *iter;  		if (host_statusp->mHost == host)  		{  			return (host_statusp->mNumActive); @@ -307,8 +317,10 @@ void LLXferManager::changeNumActiveXfers(const LLHost &host, S32 delta)  {  	LLHostStatus *host_statusp = NULL; -	for (host_statusp = mOutgoingHosts.getFirstData(); host_statusp; host_statusp = mOutgoingHosts.getNextData()) +	for (status_list_t::iterator iter = mOutgoingHosts.begin(); +		 iter != mOutgoingHosts.end(); ++iter)  	{ +		host_statusp = *iter;  		if (host_statusp->mHost == host)  		{  			host_statusp->mNumActive += delta; @@ -1010,15 +1022,15 @@ void LLXferManager::startPendingDownloads()  	// stateful iteration, it would be possible for old requests to  	// never start.  	LLXfer* xferp = mReceiveList; -	LLLinkedList<LLXfer> pending_downloads; +	std::list<LLXfer*> pending_downloads;  	S32 download_count = 0;  	S32 pending_count = 0;  	while(xferp)  	{  		if(xferp->mStatus == e_LL_XFER_PENDING)  		{ -			++pending_count; // getLength() is O(N), so track it here. -			pending_downloads.addData(xferp); +			++pending_count; +			pending_downloads.push_front(xferp);  		}  		else if(xferp->mStatus == e_LL_XFER_IN_PROGRESS)  		{ @@ -1036,16 +1048,18 @@ void LLXferManager::startPendingDownloads()  	if((start_count > 0) && (pending_count > 0))  	{  		S32 result; -		xferp = pending_downloads.getFirstData(); -		while(start_count-- && xferp) +		for (std::list<LLXfer*>::iterator iter = pending_downloads.begin(); +			 iter != pending_downloads.end(); ++iter)  		{ +			xferp = *iter; +			if (start_count-- <= 0) +				break;  			result = xferp->startDownload();  			if(result)  			{  				xferp->abort(result);  				++start_count;  			} -			xferp = pending_downloads.getNextData();  		}  	}  } diff --git a/indra/llmessage/llxfermanager.h b/indra/llmessage/llxfermanager.h index 5d213bbc71..c4af8fe937 100644 --- a/indra/llmessage/llxfermanager.h +++ b/indra/llmessage/llxfermanager.h @@ -45,7 +45,6 @@ class LLVFS;  #include "llxfer.h"  #include "message.h"  #include "llassetstorage.h" -#include "linked_lists.h"  #include "lldir.h"  #include "lllinkedqueue.h"  #include "llthrottle.h" @@ -101,7 +100,8 @@ class LLXferManager  	LLXfer *mSendList;  	LLXfer *mReceiveList; -	LLLinkedList <LLHostStatus> mOutgoingHosts; +	typedef std::list<LLHostStatus*> status_list_t; +	status_list_t mOutgoingHosts;   private:   protected: diff --git a/indra/llmessage/message.h b/indra/llmessage/message.h index 4debcddf99..61d34b7fc1 100644 --- a/indra/llmessage/message.h +++ b/indra/llmessage/message.h @@ -216,8 +216,6 @@ class LLMessageSystem  	LLPacketRing				mPacketRing;  	LLReliablePacketParams			mReliablePacketParams; -	//LLLinkedList<LLPacketAck>		mAckList; -  	// Set this flag to TRUE when you want *very* verbose logs.  	BOOL mVerboseLog; diff --git a/indra/llprimitive/llmaterialtable.cpp b/indra/llprimitive/llmaterialtable.cpp index 9970a035d7..40cf97099c 100644 --- a/indra/llprimitive/llmaterialtable.cpp +++ b/indra/llprimitive/llmaterialtable.cpp @@ -32,6 +32,7 @@  #include "linden_common.h"  #include "llmaterialtable.h" +#include "llstl.h"  #include "material_codes.h"  #include "sound_ids.h"  #include "imageids.h" @@ -70,7 +71,8 @@ LLMaterialTable::~LLMaterialTable()  		mRollingSoundMatrix = NULL;  	} -	mMaterialInfoList.deleteAllData(); +	for_each(mMaterialInfoList.begin(), mMaterialInfoList.end(), DeletePointer()); +	mMaterialInfoList.clear();  }  void LLMaterialTable::initBasicTable() @@ -290,7 +292,7 @@ BOOL LLMaterialTable::add(U8 mcode, char* name, const LLUUID &uuid)  	// Add at the end so the order in menus matches the order in this  	// file.  JNC 11.30.01 -	mMaterialInfoList.addDataAtEnd(infop); +	mMaterialInfoList.push_back(infop);  	return TRUE;  } @@ -336,10 +338,10 @@ BOOL LLMaterialTable::addRollingSound(U8 mcode, U8 mcode2, const LLUUID &uuid)  BOOL LLMaterialTable::addShatterSound(U8 mcode, const LLUUID &uuid)  { -	LLMaterialInfo *infop; - -	for (infop = mMaterialInfoList.getFirstData(); infop != NULL; infop = mMaterialInfoList.getNextData() ) +	for (info_list_t::iterator iter = mMaterialInfoList.begin(); +		 iter != mMaterialInfoList.end(); ++iter)  	{ +		LLMaterialInfo *infop = *iter;  		if (mcode == infop->mMCode)  		{  			infop->mShatterSoundID = uuid; @@ -352,10 +354,10 @@ BOOL LLMaterialTable::addShatterSound(U8 mcode, const LLUUID &uuid)  BOOL LLMaterialTable::addDensity(U8 mcode, const F32 &density)  { -	LLMaterialInfo *infop; - -	for (infop = mMaterialInfoList.getFirstData(); infop != NULL; infop = mMaterialInfoList.getNextData() ) +	for (info_list_t::iterator iter = mMaterialInfoList.begin(); +		 iter != mMaterialInfoList.end(); ++iter)  	{ +		LLMaterialInfo *infop = *iter;  		if (mcode == infop->mMCode)  		{  			infop->mDensity = density; @@ -368,10 +370,10 @@ BOOL LLMaterialTable::addDensity(U8 mcode, const F32 &density)  BOOL LLMaterialTable::addRestitution(U8 mcode, const F32 &restitution)  { -	LLMaterialInfo *infop; - -	for (infop = mMaterialInfoList.getFirstData(); infop != NULL; infop = mMaterialInfoList.getNextData() ) +	for (info_list_t::iterator iter = mMaterialInfoList.begin(); +		 iter != mMaterialInfoList.end(); ++iter)  	{ +		LLMaterialInfo *infop = *iter;  		if (mcode == infop->mMCode)  		{  			infop->mRestitution = restitution; @@ -384,10 +386,10 @@ BOOL LLMaterialTable::addRestitution(U8 mcode, const F32 &restitution)  BOOL LLMaterialTable::addFriction(U8 mcode, const F32 &friction)  { -	LLMaterialInfo *infop; - -	for (infop = mMaterialInfoList.getFirstData(); infop != NULL; infop = mMaterialInfoList.getNextData() ) +	for (info_list_t::iterator iter = mMaterialInfoList.begin(); +		 iter != mMaterialInfoList.end(); ++iter)  	{ +		LLMaterialInfo *infop = *iter;  		if (mcode == infop->mMCode)  		{  			infop->mFriction = friction; @@ -400,10 +402,10 @@ BOOL LLMaterialTable::addFriction(U8 mcode, const F32 &friction)  BOOL LLMaterialTable::addDamageAndEnergy(U8 mcode, const F32 &hp_mod, const F32 &damage_mod, const F32 &ep_mod)  { -	LLMaterialInfo *infop; - -	for (infop = mMaterialInfoList.getFirstData(); infop != NULL; infop = mMaterialInfoList.getNextData() ) +	for (info_list_t::iterator iter = mMaterialInfoList.begin(); +		 iter != mMaterialInfoList.end(); ++iter)  	{ +		LLMaterialInfo *infop = *iter;  		if (mcode == infop->mMCode)  		{  			infop->mHPModifier = hp_mod; @@ -418,10 +420,10 @@ BOOL LLMaterialTable::addDamageAndEnergy(U8 mcode, const F32 &hp_mod, const F32  LLUUID LLMaterialTable::getDefaultTextureID(char* name)  { -	LLMaterialInfo *infop; - -	for (infop = mMaterialInfoList.getFirstData(); infop != NULL; infop = mMaterialInfoList.getNextData() ) +	for (info_list_t::iterator iter = mMaterialInfoList.begin(); +		 iter != mMaterialInfoList.end(); ++iter)  	{ +		LLMaterialInfo *infop = *iter;  		if (!strcmp(name, infop->mName))  		{  			return infop->mDefaultTextureID; @@ -434,12 +436,11 @@ LLUUID LLMaterialTable::getDefaultTextureID(char* name)  LLUUID LLMaterialTable::getDefaultTextureID(U8 mcode)  { -	LLMaterialInfo *infop; -  	mcode &= LL_MCODE_MASK; -	 -	for (infop = mMaterialInfoList.getFirstData(); infop != NULL; infop = mMaterialInfoList.getNextData() ) +	for (info_list_t::iterator iter = mMaterialInfoList.begin(); +		 iter != mMaterialInfoList.end(); ++iter)  	{ +		LLMaterialInfo *infop = *iter;  		if (mcode == infop->mMCode)  		{  			return infop->mDefaultTextureID; @@ -452,10 +453,10 @@ LLUUID LLMaterialTable::getDefaultTextureID(U8 mcode)  U8 LLMaterialTable::getMCode(const char* name)  { -	LLMaterialInfo *infop; - -	for (infop = mMaterialInfoList.getFirstData(); infop != NULL; infop = mMaterialInfoList.getNextData() ) +	for (info_list_t::iterator iter = mMaterialInfoList.begin(); +		 iter != mMaterialInfoList.end(); ++iter)  	{ +		LLMaterialInfo *infop = *iter;  		if (!strcmp(name, infop->mName))  		{  			return infop->mMCode; @@ -468,12 +469,11 @@ U8 LLMaterialTable::getMCode(const char* name)  char* LLMaterialTable::getName(U8 mcode)  { -	LLMaterialInfo *infop; -  	mcode &= LL_MCODE_MASK; - -	for (infop = mMaterialInfoList.getFirstData(); infop != NULL; infop = mMaterialInfoList.getNextData() ) +	for (info_list_t::iterator iter = mMaterialInfoList.begin(); +		 iter != mMaterialInfoList.end(); ++iter)  	{ +		LLMaterialInfo *infop = *iter;  		if (mcode == infop->mMCode)  		{  			return infop->mName; @@ -569,11 +569,11 @@ LLUUID LLMaterialTable::getGroundCollisionParticleUUID(U8 mcode)  F32 LLMaterialTable::getDensity(U8 mcode)  {	 -	LLMaterialInfo *infop; -  	mcode &= LL_MCODE_MASK; -	for (infop = mMaterialInfoList.getFirstData(); infop != NULL; infop = mMaterialInfoList.getNextData() ) +	for (info_list_t::iterator iter = mMaterialInfoList.begin(); +		 iter != mMaterialInfoList.end(); ++iter)  	{ +		LLMaterialInfo *infop = *iter;  		if (mcode == infop->mMCode)  		{  			return infop->mDensity; @@ -585,11 +585,11 @@ F32 LLMaterialTable::getDensity(U8 mcode)  F32 LLMaterialTable::getRestitution(U8 mcode)  {	 -	LLMaterialInfo *infop; -  	mcode &= LL_MCODE_MASK; -	for (infop = mMaterialInfoList.getFirstData(); infop != NULL; infop = mMaterialInfoList.getNextData() ) +	for (info_list_t::iterator iter = mMaterialInfoList.begin(); +		 iter != mMaterialInfoList.end(); ++iter)  	{ +		LLMaterialInfo *infop = *iter;  		if (mcode == infop->mMCode)  		{  			return infop->mRestitution; @@ -601,11 +601,11 @@ F32 LLMaterialTable::getRestitution(U8 mcode)  F32 LLMaterialTable::getFriction(U8 mcode)  {	 -	LLMaterialInfo *infop; -  	mcode &= LL_MCODE_MASK; -	for (infop = mMaterialInfoList.getFirstData(); infop != NULL; infop = mMaterialInfoList.getNextData() ) +	for (info_list_t::iterator iter = mMaterialInfoList.begin(); +		 iter != mMaterialInfoList.end(); ++iter)  	{ +		LLMaterialInfo *infop = *iter;  		if (mcode == infop->mMCode)  		{  			return infop->mFriction; @@ -617,11 +617,11 @@ F32 LLMaterialTable::getFriction(U8 mcode)  F32 LLMaterialTable::getHPMod(U8 mcode)  {	 -	LLMaterialInfo *infop; -  	mcode &= LL_MCODE_MASK; -	for (infop = mMaterialInfoList.getFirstData(); infop != NULL; infop = mMaterialInfoList.getNextData() ) +	for (info_list_t::iterator iter = mMaterialInfoList.begin(); +		 iter != mMaterialInfoList.end(); ++iter)  	{ +		LLMaterialInfo *infop = *iter;  		if (mcode == infop->mMCode)  		{  			return infop->mHPModifier; @@ -633,11 +633,11 @@ F32 LLMaterialTable::getHPMod(U8 mcode)  F32 LLMaterialTable::getDamageMod(U8 mcode)  {	 -	LLMaterialInfo *infop; -  	mcode &= LL_MCODE_MASK; -	for (infop = mMaterialInfoList.getFirstData(); infop != NULL; infop = mMaterialInfoList.getNextData() ) +	for (info_list_t::iterator iter = mMaterialInfoList.begin(); +		 iter != mMaterialInfoList.end(); ++iter)  	{ +		LLMaterialInfo *infop = *iter;  		if (mcode == infop->mMCode)  		{  			return infop->mDamageModifier; @@ -649,11 +649,11 @@ F32 LLMaterialTable::getDamageMod(U8 mcode)  F32 LLMaterialTable::getEPMod(U8 mcode)  {	 -	LLMaterialInfo *infop; -  	mcode &= LL_MCODE_MASK; -	for (infop = mMaterialInfoList.getFirstData(); infop != NULL; infop = mMaterialInfoList.getNextData() ) +	for (info_list_t::iterator iter = mMaterialInfoList.begin(); +		 iter != mMaterialInfoList.end(); ++iter)  	{ +		LLMaterialInfo *infop = *iter;  		if (mcode == infop->mMCode)  		{  			return infop->mEPModifier; @@ -665,11 +665,11 @@ F32 LLMaterialTable::getEPMod(U8 mcode)  LLUUID LLMaterialTable::getShatterSoundUUID(U8 mcode)  {	 -	LLMaterialInfo *infop; -  	mcode &= LL_MCODE_MASK; -	for (infop = mMaterialInfoList.getFirstData(); infop != NULL; infop = mMaterialInfoList.getNextData() ) +	for (info_list_t::iterator iter = mMaterialInfoList.begin(); +		 iter != mMaterialInfoList.end(); ++iter)  	{ +		LLMaterialInfo *infop = *iter;  		if (mcode == infop->mMCode)  		{  			return infop->mShatterSoundID; diff --git a/indra/llprimitive/llmaterialtable.h b/indra/llprimitive/llmaterialtable.h index e786a868e9..46b6f070d9 100644 --- a/indra/llprimitive/llmaterialtable.h +++ b/indra/llprimitive/llmaterialtable.h @@ -84,7 +84,9 @@ public:  class LLMaterialTable  {  public: -	LLLinkedList<LLMaterialInfo>	mMaterialInfoList; +	typedef std::list<LLMaterialInfo*> info_list_t; +	info_list_t mMaterialInfoList; +	  	LLUUID *mCollisionSoundMatrix;  	LLUUID *mSlidingSoundMatrix;  	LLUUID *mRollingSoundMatrix; diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h index 5eb55e0420..32ee0227d0 100644 --- a/indra/llui/llfloater.h +++ b/indra/llui/llfloater.h @@ -185,7 +185,7 @@ public:  	// Defaults to destroy().  	virtual void	onClose(bool app_quitting) { destroy(); } -	virtual BOOL	canClose() const { return TRUE; } +	virtual BOOL	canClose() { return TRUE; }  	virtual void	setVisible(BOOL visible);  	void			setFrontmost(BOOL take_focus = TRUE); diff --git a/indra/llui/lltabcontainer.cpp b/indra/llui/lltabcontainer.cpp index 0e64c6df5c..8d1bab6bd7 100644 --- a/indra/llui/lltabcontainer.cpp +++ b/indra/llui/lltabcontainer.cpp @@ -344,7 +344,8 @@ BOOL LLTabContainer::handleMouseDown( S32 x, S32 y, MASK mask )  		handled = LLPanel::handleMouseDown( x, y, mask );  	} -	if (getTabCount() > 0) +	S32 tab_count = getTabCount(); +	if (tab_count > 0)  	{  		LLTabTuple* firsttuple = getTab(0);  		LLRect tab_rect; @@ -364,7 +365,9 @@ BOOL LLTabContainer::handleMouseDown( S32 x, S32 y, MASK mask )  		}  		if( tab_rect.pointInRect( x, y ) )  		{ -			LLButton* tab_button = getTab(getCurrentPanelIndex())->mButton; +			S32 index = getCurrentPanelIndex(); +			index = llclamp(index, 0, tab_count-1); +			LLButton* tab_button = getTab(index)->mButton;  			gFocusMgr.setMouseCapture(this);  			gFocusMgr.setKeyboardFocus(tab_button);  		} diff --git a/indra/llwindow/llwindow.cpp b/indra/llwindow/llwindow.cpp index fce0d055e6..43f3081321 100644 --- a/indra/llwindow/llwindow.cpp +++ b/indra/llwindow/llwindow.cpp @@ -415,7 +415,7 @@ void LLSplashScreen::hide()  //  // TODO: replace with std::set -static LLLinkedList<LLWindow> sWindowList; +static std::set<LLWindow*> sWindowList;  LLWindow* LLWindowManager::createWindow(  	char *title, @@ -481,13 +481,13 @@ LLWindow* LLWindowManager::createWindow(  		llwarns << "LLWindowManager::create() : Error creating window." << llendl;  		return NULL;  	} -	sWindowList.addDataAtEnd(new_window); +	sWindowList.insert(new_window);  	return new_window;  }  BOOL LLWindowManager::destroyWindow(LLWindow* window)  { -	if (!sWindowList.checkData(window)) +	if (sWindowList.find(window) == sWindowList.end())  	{  		llerrs << "LLWindowManager::destroyWindow() : Window pointer not valid, this window doesn't exist!"   			<< llendl; @@ -496,7 +496,7 @@ BOOL LLWindowManager::destroyWindow(LLWindow* window)  	window->close(); -	sWindowList.removeData(window); +	sWindowList.erase(window);  	delete window; @@ -505,5 +505,5 @@ BOOL LLWindowManager::destroyWindow(LLWindow* window)  BOOL LLWindowManager::isWindowValid(LLWindow *window)  { -	return sWindowList.checkData(window); +	return sWindowList.find(window) != sWindowList.end();  } diff --git a/indra/llxml/llcontrol.cpp b/indra/llxml/llcontrol.cpp index d3778853dd..4ad44f455f 100644 --- a/indra/llxml/llcontrol.cpp +++ b/indra/llxml/llcontrol.cpp @@ -69,8 +69,6 @@ std::set<LLControlBase*>	LLControlBase::mChangedControls;  const S32 CURRENT_VERSION = 101; -BOOL control_insert_before( LLControlBase* first, LLControlBase* second ); -  BOOL LLControl::llsd_compare(const LLSD& a, const LLSD & b)  {  	switch (mType) @@ -1033,6 +1031,13 @@ U32 LLControlGroup::loadFromFile(const LLString& filename, BOOL require_declarat  	return validitems;  } +struct compare_controls +{ +	bool operator() (const LLControlBase* const a, const LLControlBase* const b) const +	{ +		return a->getName() < b->getName(); +	} +};  U32 LLControlGroup::saveToFile(const LLString& filename, BOOL nondefault_only)  { @@ -1042,13 +1047,14 @@ U32 LLControlGroup::saveToFile(const LLString& filename, BOOL nondefault_only)  	// place the objects in a temporary container that enforces a sort  	// order to ease manual editing of the file -	LLLinkedList< LLControlBase > controls; -	controls.setInsertBefore( &control_insert_before ); -	LLString name; + +	typedef std::set< LLControlBase*, compare_controls > control_list_t; +	control_list_t controls; +  	for (ctrl_name_table_t::iterator iter = mNameTable.begin();  		 iter != mNameTable.end(); iter++)  	{ -		name = iter->first; +		LLString name = iter->first;  		if (name.empty())  		{  			CONTROL_ERRS << "Control with no name found!!!" << llendl; @@ -1065,7 +1071,7 @@ U32 LLControlGroup::saveToFile(const LLString& filename, BOOL nondefault_only)  		{  			if (!(nondefault_only && (control->mIsDefault)))  			{ -				controls.addDataSorted( control ); +				controls.insert( control );  			}  			else  			{ @@ -1088,12 +1094,12 @@ U32 LLControlGroup::saveToFile(const LLString& filename, BOOL nondefault_only)  	// Write file version  	file << "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>\n";  	file << "<settings version = \"" << CURRENT_VERSION << "\">\n"; -    for( LLControlBase* control = controls.getFirstData(); -		 control != NULL; -		 control = controls.getNextData() ) +	for (control_list_t::iterator iter = controls.begin(); +		 iter != controls.end(); ++iter)  	{ +		LLControlBase* control = *iter;  		file << "\t<!--" << control->comment() << "-->" << ENDL; -		name = control->name(); +		LLString name = control->getName();  		switch (control->type())  		{  			case TYPE_U32: @@ -1165,7 +1171,7 @@ U32 LLControlGroup::saveToFile(const LLString& filename, BOOL nondefault_only)  	file << "</settings>\n";  	file.close(); -	return controls.getLength(); +	return controls.size();  }  void LLControlGroup::applyOverrides(const std::map<std::string, std::string>& overrides) @@ -1435,8 +1441,3 @@ void main()  }  #endif -BOOL control_insert_before( LLControlBase* first, LLControlBase* second ) -{ -	return ( first->getName().compare(second->getName()) < 0 ); -} - diff --git a/indra/newview/English.lproj/InfoPlist.strings b/indra/newview/English.lproj/InfoPlist.strings index 608a6ad733..5bca4eab5e 100644 --- a/indra/newview/English.lproj/InfoPlist.strings +++ b/indra/newview/English.lproj/InfoPlist.strings @@ -1,5 +1,5 @@  /* Localized versions of Info.plist keys */  CFBundleName = "Second Life"; -CFBundleShortVersionString = "Second Life version 1.19.0.5"; -CFBundleGetInfoString = "Second Life version 1.19.0.5, Copyright 2004-2007 Linden Research, Inc."; +CFBundleShortVersionString = "Second Life version 1.19.1.0"; +CFBundleGetInfoString = "Second Life version 1.19.1.0, Copyright 2004-2008 Linden Research, Inc."; diff --git a/indra/newview/Info-SecondLife.plist b/indra/newview/Info-SecondLife.plist index e257d6f3aa..6f8c464466 100644 --- a/indra/newview/Info-SecondLife.plist +++ b/indra/newview/Info-SecondLife.plist @@ -32,7 +32,7 @@  		</dict>  	</array>  	<key>CFBundleVersion</key> -	<string>1.19.0.5</string> +	<string>1.19.1.0</string>  	<key>CSResourcesFileMapped</key>  	<true/>  </dict> diff --git a/indra/newview/app_settings/shaders/class2/environment/waterF.glsl b/indra/newview/app_settings/shaders/class2/environment/waterF.glsl index 8f3d11badc..6ec3dc4788 100644 --- a/indra/newview/app_settings/shaders/class2/environment/waterF.glsl +++ b/indra/newview/app_settings/shaders/class2/environment/waterF.glsl @@ -48,7 +48,7 @@ void main()  	vec3 df = vec3(  					dot(viewVec, wave1), -					dot(viewVec, wave2), +					dot(viewVec, (wave2 + wave3) * 0.5),  					dot(viewVec, wave3)  				 ) * fresnelScale + fresnelOffset;  	df *= df; diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt index 8a023de5f6..898751d3f1 100644 --- a/indra/newview/featuretable.txt +++ b/indra/newview/featuretable.txt @@ -49,6 +49,8 @@ UseOcclusion				1	1  VertexShaderEnable			1	1  WindLightUseAtmosShaders	1	1  WLSkyDetail					1	128 +Disregard128DefaultDrawDistance	1	1 +Disregard96DefaultDrawDistance	1	1  //  // Low Graphics Settings @@ -238,8 +240,6 @@ RenderVBOEnable				1	0  list Intel  RenderAnisotropic			1	0  RenderLightingDetail		1	0 -RenderTerrainDetail			1	0 -RenderVBOEnable				1	0  list GeForce2  RenderAnisotropic			1	0 @@ -248,9 +248,78 @@ RenderMaxPartCount			1	2048  RenderTerrainDetail			1	0  RenderVBOEnable				1	1 + +list Intel_830M +RenderTerrainDetail			1	0 +RenderVBOEnable				1	0 + +list Intel_845G					 +RenderTerrainDetail			1	0 +RenderVBOEnable				1	0 + +list Intel_855GM				 +RenderTerrainDetail			1	0 +RenderVBOEnable				1	0 + +list Intel_865G			 +RenderTerrainDetail			1	0 +RenderVBOEnable				1	0 + +list Intel_900		 +RenderTerrainDetail			1	0 +RenderVBOEnable				1	0 + +list Intel_915GM	 +RenderTerrainDetail			1	0 +RenderVBOEnable				1	0 + +list Intel_915G					 +RenderTerrainDetail			1	0 +RenderVBOEnable				1	0 + +list Intel_945GM			 +RenderTerrainDetail			1	0 +RenderVBOEnable				1	0 + +list Intel_945G +RenderTerrainDetail			1	0 +RenderVBOEnable				1	0 + +list Intel_950 +RenderTerrainDetail			1	0 +RenderVBOEnable				1	0 +  list Intel_965 +RenderTerrainDetail			1	0 +RenderVBOEnable				1	0  UseOcclusion				0	0 +list Intel_G33 +RenderTerrainDetail			1	0 +RenderVBOEnable				1	0 + +list Intel_Bear_Lake	 +RenderTerrainDetail			1	0 +RenderVBOEnable				1	0 + +list Intel_Broadwater  +RenderTerrainDetail			1	0 +RenderVBOEnable				1	0 + +list Intel_Brookdale	 +RenderTerrainDetail			1	0 +RenderVBOEnable				1	0 + +list Intel_Montara +RenderTerrainDetail			1	0 +RenderVBOEnable				1	0 + +list Intel_Springdale +RenderTerrainDetail			1	0 +RenderVBOEnable				1	0 + + +  list ATI_Mobility_Radeon_9800  RenderAvatarCloth			0	0  VertexShaderEnable			0	0 @@ -265,29 +334,60 @@ list ATI_Mobility_Radeon_9600  RenderAvatarCloth			0	0  VertexShaderEnable			0	0  WindLightUseAtmosShaders	0	0 +Disregard96DefaultDrawDistance	1	0 + + +/// tweaked ATI to 96 Draw distance + +list ATI_Radeon_9000 +Disregard96DefaultDrawDistance	1	0 +list ATI_Radeon_9200 +Disregard96DefaultDrawDistance	1	0 +list ATI_Radeon_9500 +Disregard96DefaultDrawDistance	1	0 +list ATI_Radeon_9600 +Disregard96DefaultDrawDistance	1	0 + +/// tweaked ATI to 128 draw distance + +list ATI_Radeon_X300  +Disregard128DefaultDrawDistance	1	0 +list ATI_Radeon_X400  +Disregard128DefaultDrawDistance	1	0 +list ATI_Radeon_X500  +Disregard128DefaultDrawDistance	1	0 +list ATI_Radeon_X600  +Disregard128DefaultDrawDistance	1	0 +list ATI_Radeon_X700  +Disregard128DefaultDrawDistance	1	0 +list ATI_Radeon_X1300  +Disregard128DefaultDrawDistance	1	0 +list ATI_Radeon_X1400  +Disregard128DefaultDrawDistance	1	0 +list ATI_Radeon_X1500  +Disregard128DefaultDrawDistance	1	0 +list ATI_Radeon_X1600  +Disregard128DefaultDrawDistance	1	0 +list ATI_Radeon_X1700  +Disregard128DefaultDrawDistance	1	0 + +list ATI_Mobility_Radeon_X1xxx +Disregard128DefaultDrawDistance	1	0 + +  // Avatar hardware skinning causes  // invisible avatars on x2600... so I masked -// out other possible bad ones till it's fixed -list ATI_Radeon_X2400 -RenderAvatarVP				0	0 -RenderAvatarCloth			0	0 -list ATI_Radeon_X2600 -RenderAvatarVP				0	0 -RenderAvatarCloth			0	0 -list ATI_Radeon_X2900 -RenderAvatarVP				0	0 -RenderAvatarCloth			0	0 -list ATI_Radeon_X3800 -RenderAvatarVP				0	0 -RenderAvatarCloth			0	0 +// out other possible bad ones till it's fixed in 8.2  list ATI_Radeon_HD_2300  RenderAvatarVP				0	0  RenderAvatarCloth			0	0 +Disregard128DefaultDrawDistance	1	0  list ATI_Radeon_HD_2400  RenderAvatarVP				0	0  RenderAvatarCloth			0	0 +Disregard128DefaultDrawDistance	1	0  list ATI_Radeon_HD_2600  RenderAvatarVP				0	0  RenderAvatarCloth			0	0 @@ -301,6 +401,7 @@ RenderAvatarCloth			0	0  list ATI_ASUS_AH24xx  RenderAvatarVP				0	0  RenderAvatarCloth			0	0 +Disregard128DefaultDrawDistance	1	0  list ATI_ASUS_AH26xx  RenderAvatarVP				0	0  RenderAvatarCloth			0	0 @@ -314,17 +415,74 @@ list ATI_ASUS_EAH38xx  RenderAvatarVP				0	0  RenderAvatarCloth			0	0 + +/// Tweaked NVIDIA + +list NVIDIA_GeForce_FX_5100 +Disregard96DefaultDrawDistance	1	0 +list NVIDIA_GeForce_FX_5200 +Disregard96DefaultDrawDistance	1	0 +list NVIDIA_GeForce_FX_5500 +Disregard96DefaultDrawDistance	1	0 +list NVIDIA_GeForce_FX_5600 +Disregard96DefaultDrawDistance	1	0 + +list NVIDIA_GeForce_FX_Go5100 +Disregard96DefaultDrawDistance	1	0 +list NVIDIA_GeForce_FX_Go5200 +Disregard96DefaultDrawDistance	1	0 +list NVIDIA_GeForce_FX_Go5300 +Disregard96DefaultDrawDistance	1	0 +list NVIDIA_GeForce_FX_Go5500 +Disregard96DefaultDrawDistance	1	0 +list NVIDIA_GeForce_FX_Go5600 +Disregard96DefaultDrawDistance	1	0 + +list NVIDIA_GeForce_6100 +Disregard128DefaultDrawDistance	1	0 +list NVIDIA_GeForce_6200 +Disregard128DefaultDrawDistance	1	0 +list NVIDIA_GeForce_6500 +Disregard128DefaultDrawDistance	1	0 +list NVIDIA_GeForce_6600 +Disregard128DefaultDrawDistance	1	0 + +list NVIDIA_G73 +Disregard128DefaultDrawDistance	1	0 +  list NVIDIA_GeForce_Go_6100  RenderVBOEnable				1	0 +Disregard128DefaultDrawDistance	1	0  list NVIDIA_GeForce_Go_6200  RenderVBOEnable				1	0 +Disregard128DefaultDrawDistance	1	0  list NVIDIA_GeForce_Go_6500  RenderVBOEnable				1	0 +Disregard128DefaultDrawDistance	1	0  list NVIDIA_GeForce_Go_6600  RenderVBOEnable				1	0 +Disregard128DefaultDrawDistance	1	0  list NVIDIA_GeForce_Go_6700  RenderVBOEnable				1	0 +Disregard128DefaultDrawDistance	1	0  list NVIDIA_GeForce_Go_6800  RenderVBOEnable				1	0 +Disregard128DefaultDrawDistance	1	0  list NVIDIA_GeForce_Go_6  RenderVBOEnable				1	0 +Disregard128DefaultDrawDistance	1	0 + +list NVIDIA_GeForce_7200 +Disregard128DefaultDrawDistance	1	0 +list NVIDIA_GeForce_7300 +Disregard128DefaultDrawDistance	1	0 +list NVIDIA_GeForce_7400 +Disregard128DefaultDrawDistance	1	0 + +list NVIDIA_GeForce_Go_7200 +Disregard128DefaultDrawDistance	1	0 +list NVIDIA_GeForce_Go_7300 +Disregard128DefaultDrawDistance	1	0 +list NVIDIA_GeForce_Go_7400 +Disregard128DefaultDrawDistance	1	0 + diff --git a/indra/newview/featuretable_linux.txt b/indra/newview/featuretable_linux.txt index ccffc8d424..d7921ffb59 100644 --- a/indra/newview/featuretable_linux.txt +++ b/indra/newview/featuretable_linux.txt @@ -49,6 +49,8 @@ UseOcclusion				1	1  VertexShaderEnable			1	1  WindLightUseAtmosShaders	1	1  WLSkyDetail					1	128 +Disregard128DefaultDrawDistance	1	1 +Disregard96DefaultDrawDistance	1	1  //  // Low Graphics Settings @@ -271,50 +273,153 @@ list ATI_Mobility_Radeon_9600  RenderAvatarCloth			0	0  VertexShaderEnable			0	0  WindLightUseAtmosShaders	0	0 +Disregard96DefaultDrawDistance	1	0 + + +/// tweaked ATI to 96 Draw distance + +list ATI_Radeon_9000 +Disregard96DefaultDrawDistance	1	0 +list ATI_Radeon_9200 +Disregard96DefaultDrawDistance	1	0 +list ATI_Radeon_9500 +Disregard96DefaultDrawDistance	1	0 +list ATI_Radeon_9600 +Disregard96DefaultDrawDistance	1	0 + +/// tweaked ATI to 128 draw distance + +list ATI_Radeon_X300  +Disregard128DefaultDrawDistance	1	0 +list ATI_Radeon_X400  +Disregard128DefaultDrawDistance	1	0 +list ATI_Radeon_X500  +Disregard128DefaultDrawDistance	1	0 +list ATI_Radeon_X600  +Disregard128DefaultDrawDistance	1	0 +list ATI_Radeon_X700  +Disregard128DefaultDrawDistance	1	0 +list ATI_Radeon_X1300  +Disregard128DefaultDrawDistance	1	0 +list ATI_Radeon_X1400  +Disregard128DefaultDrawDistance	1	0 +list ATI_Radeon_X1500  +Disregard128DefaultDrawDistance	1	0 +list ATI_Radeon_X1600  +Disregard128DefaultDrawDistance	1	0 +list ATI_Radeon_X1700  +Disregard128DefaultDrawDistance	1	0 +list ATI_Mobility_Radeon_X1xxx +Disregard128DefaultDrawDistance	1	0 + + +  // Avatar hardware skinning causes -// invisible avatars on x2600... so I masked +// invisible avatars on HD 2400... so I masked  // out other possible bad ones till it's fixed -list ATI_Radeon_X2400 + +list ATI_Radeon_HD_2300  RenderAvatarVP				0	0  RenderAvatarCloth			0	0 -list ATI_Radeon_X2600 +Disregard128DefaultDrawDistance	1	0 +list ATI_Radeon_HD_2400  RenderAvatarVP				0	0  RenderAvatarCloth			0	0 -list ATI_Radeon_X2900 +Disregard128DefaultDrawDistance	1	0 +list ATI_Radeon_HD_2600 +RenderAvatarVP				0	0 +RenderAvatarCloth			0	0 +list ATI_Radeon_HD_2900  RenderAvatarVP				0	0  RenderAvatarCloth			0	0 -list ATI_Radeon_X3800 +list ATI_Radeon_HD_3800  RenderAvatarVP				0	0  RenderAvatarCloth			0	0 -list ATI_Radeon_HD_2300 +list ATI_ASUS_AH24xx  RenderAvatarVP				0	0  RenderAvatarCloth			0	0 -list ATI_Radeon_HD_2400 +Disregard128DefaultDrawDistance	1	0 +list ATI_ASUS_AH26xx  RenderAvatarVP				0	0  RenderAvatarCloth			0	0 -list ATI_Radeon_HD_2600 +list ATI_ASUS_EAH24xx  RenderAvatarVP				0	0  RenderAvatarCloth			0	0 -list ATI_Radeon_HD_2900 +list ATI_ASUS_EAH26xx  RenderAvatarVP				0	0  RenderAvatarCloth			0	0 -list ATI_Radeon_HD_3800 +list ATI_ASUS_EAH38xx  RenderAvatarVP				0	0  RenderAvatarCloth			0	0 + +/// Tweaked NVIDIA + +list NVIDIA_GeForce_FX_5100 +Disregard96DefaultDrawDistance	1	0 +list NVIDIA_GeForce_FX_5200 +Disregard96DefaultDrawDistance	1	0 +list NVIDIA_GeForce_FX_5500 +Disregard96DefaultDrawDistance	1	0 +list NVIDIA_GeForce_FX_5600 +Disregard96DefaultDrawDistance	1	0 + +list NVIDIA_GeForce_FX_Go5100 +Disregard96DefaultDrawDistance	1	0 +list NVIDIA_GeForce_FX_Go5200 +Disregard96DefaultDrawDistance	1	0 +list NVIDIA_GeForce_FX_Go5300 +Disregard96DefaultDrawDistance	1	0 +list NVIDIA_GeForce_FX_Go5500 +Disregard96DefaultDrawDistance	1	0 +list NVIDIA_GeForce_FX_Go5600 +Disregard96DefaultDrawDistance	1	0 + +list NVIDIA_GeForce_6100 +Disregard128DefaultDrawDistance	1	0 +list NVIDIA_GeForce_6200 +Disregard128DefaultDrawDistance	1	0 +list NVIDIA_GeForce_6500 +Disregard128DefaultDrawDistance	1	0 +list NVIDIA_GeForce_6600 +Disregard128DefaultDrawDistance	1	0 + +  list NVIDIA_GeForce_Go_6100  RenderVBOEnable				1	0 +Disregard128DefaultDrawDistance	1	0  list NVIDIA_GeForce_Go_6200  RenderVBOEnable				1	0 +Disregard128DefaultDrawDistance	1	0  list NVIDIA_GeForce_Go_6500  RenderVBOEnable				1	0 +Disregard128DefaultDrawDistance	1	0  list NVIDIA_GeForce_Go_6600  RenderVBOEnable				1	0 +Disregard128DefaultDrawDistance	1	0  list NVIDIA_GeForce_Go_6700  RenderVBOEnable				1	0 +Disregard128DefaultDrawDistance	1	0  list NVIDIA_GeForce_Go_6800  RenderVBOEnable				1	0 +Disregard128DefaultDrawDistance	1	0  list NVIDIA_GeForce_Go_6  RenderVBOEnable				1	0 +Disregard128DefaultDrawDistance	1	0 + +list NVIDIA_GeForce_7200 +Disregard128DefaultDrawDistance	1	0 +list NVIDIA_GeForce_7300 +Disregard128DefaultDrawDistance	1	0 +list NVIDIA_GeForce_7400 +Disregard128DefaultDrawDistance	1	0 + +list NVIDIA_GeForce_Go_7200 +Disregard128DefaultDrawDistance	1	0 +list NVIDIA_GeForce_Go_7300 +Disregard128DefaultDrawDistance	1	0 +list NVIDIA_GeForce_Go_7400 +Disregard128DefaultDrawDistance	1	0 + diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt index bebb51fc12..9645ff8abf 100644 --- a/indra/newview/featuretable_mac.txt +++ b/indra/newview/featuretable_mac.txt @@ -50,6 +50,8 @@ VertexShaderEnable			1	1  WindLightUseAtmosShaders	1	1  WLSkyDetail					1	128  RenderUseCleverUI			1	1 +Disregard128DefaultDrawDistance	1	1 +Disregard96DefaultDrawDistance	1	1  //  // Low Graphics Settings @@ -239,8 +241,6 @@ RenderVBOEnable				1	0  list Intel  RenderAnisotropic			1	0  RenderLightingDetail		1	0 -RenderTerrainDetail			1	0 -RenderVBOEnable				1	0  list GeForce2  RenderAnisotropic			1	0 @@ -249,9 +249,78 @@ RenderMaxPartCount			1	2048  RenderTerrainDetail			1	0  RenderVBOEnable				1	1 +list Intel_830M +RenderTerrainDetail			1	0 +RenderVBOEnable				1	0 + +list Intel_845G					 +RenderTerrainDetail			1	0 +RenderVBOEnable				1	0 + +list Intel_855GM				 +RenderTerrainDetail			1	0 +RenderVBOEnable				1	0 + +list Intel_865G			 +RenderTerrainDetail			1	0 +RenderVBOEnable				1	0 + +list Intel_900		 +RenderTerrainDetail			1	0 +RenderVBOEnable				1	0 + +list Intel_915GM	 +RenderTerrainDetail			1	0 +RenderVBOEnable				1	0 + +list Intel_915G					 +RenderTerrainDetail			1	0 +RenderVBOEnable				1	0 + +list Intel_945GM			 +RenderTerrainDetail			1	0 +RenderVBOEnable				1	0 + +list Intel_945G +RenderTerrainDetail			1	0 +RenderVBOEnable				1	0 + +list Intel_950 +RenderTerrainDetail			1	0 +RenderVBOEnable				1	0 +  list Intel_965 +RenderTerrainDetail			1	0 +RenderVBOEnable				1	0  UseOcclusion				0	0 +list Intel_G33 +RenderTerrainDetail			1	0 +RenderVBOEnable				1	0 + +list Intel_Bear_Lake	 +RenderTerrainDetail			1	0 +RenderVBOEnable				1	0 + +list Intel_Broadwater  +RenderTerrainDetail			1	0 +RenderVBOEnable				1	0 + +list Intel_Brookdale	 +RenderTerrainDetail			1	0 +RenderVBOEnable				1	0 + +list Intel_X3100 +WindLightUseAtmosShaders	0	0 + +list Intel_Montara +RenderTerrainDetail			1	0 +RenderVBOEnable				1	0 + +list Intel_Springdale +RenderTerrainDetail			1	0 +RenderVBOEnable				1	0 +  list ATI_Mobility_Radeon_9800  RenderAvatarCloth			0	0  VertexShaderEnable			0	0 @@ -266,29 +335,60 @@ list ATI_Mobility_Radeon_9600  RenderAvatarCloth			0	0  VertexShaderEnable			0	0  WindLightUseAtmosShaders	0	0 +Disregard96DefaultDrawDistance	1	0 + + +/// tweaked ATI to 96 Draw distance + +list ATI_Radeon_9000 +Disregard96DefaultDrawDistance	1	0 +list ATI_Radeon_9200 +Disregard96DefaultDrawDistance	1	0 +list ATI_Radeon_9500 +Disregard96DefaultDrawDistance	1	0 +list ATI_Radeon_9600 +Disregard96DefaultDrawDistance	1	0 + +/// tweaked ATI to 128 draw distance + +list ATI_Radeon_X300  +Disregard128DefaultDrawDistance	1	0 +list ATI_Radeon_X400  +Disregard128DefaultDrawDistance	1	0 +list ATI_Radeon_X500  +Disregard128DefaultDrawDistance	1	0 +list ATI_Radeon_X600  +Disregard128DefaultDrawDistance	1	0 +list ATI_Radeon_X700  +Disregard128DefaultDrawDistance	1	0 +list ATI_Radeon_X1300  +Disregard128DefaultDrawDistance	1	0 +list ATI_Radeon_X1400  +Disregard128DefaultDrawDistance	1	0 +list ATI_Radeon_X1500  +Disregard128DefaultDrawDistance	1	0 +list ATI_Radeon_X1600  +Disregard128DefaultDrawDistance	1	0 +list ATI_Radeon_X1700  +Disregard128DefaultDrawDistance	1	0 +list ATI_Mobility_Radeon_X1xxx +Disregard128DefaultDrawDistance	1	0 + + +  // Avatar hardware skinning causes -// invisible avatars on x2600... so I masked +// invisible avatars on HD 2600... so I masked  // out other possible bad ones till it's fixed -list ATI_Radeon_X2400 -RenderAvatarVP				0	0 -RenderAvatarCloth			0	0 -list ATI_Radeon_X2600 -RenderAvatarVP				0	0 -RenderAvatarCloth			0	0 -list ATI_Radeon_X2900 -RenderAvatarVP				0	0 -RenderAvatarCloth			0	0 -list ATI_Radeon_X3800 -RenderAvatarVP				0	0 -RenderAvatarCloth			0	0  list ATI_Radeon_HD_2300  RenderAvatarVP				0	0  RenderAvatarCloth			0	0 +Disregard128DefaultDrawDistance	1	0  list ATI_Radeon_HD_2400  RenderAvatarVP				0	0  RenderAvatarCloth			0	0 +Disregard128DefaultDrawDistance	1	0  list ATI_Radeon_HD_2600  RenderAvatarVP				0	0  RenderAvatarCloth			0	0 @@ -299,17 +399,69 @@ list ATI_Radeon_HD_3800  RenderAvatarVP				0	0  RenderAvatarCloth			0	0 +/// Tweaked NVIDIA + +list NVIDIA_GeForce_FX_5100 +Disregard96DefaultDrawDistance	1	0 +list NVIDIA_GeForce_FX_5200 +Disregard96DefaultDrawDistance	1	0 +list NVIDIA_GeForce_FX_5500 +Disregard96DefaultDrawDistance	1	0 + +list NVIDIA_GeForce_FX_Go5100 +Disregard96DefaultDrawDistance	1	0 +list NVIDIA_GeForce_FX_Go5200 +Disregard96DefaultDrawDistance	1	0 +list NVIDIA_GeForce_FX_Go5300 +Disregard96DefaultDrawDistance	1	0 +list NVIDIA_GeForce_FX_Go5500 +Disregard96DefaultDrawDistance	1	0 +list NVIDIA_GeForce_FX_Go5600 +Disregard96DefaultDrawDistance	1	0 + +list NVIDIA_GeForce_6100 +Disregard128DefaultDrawDistance	1	0 +list NVIDIA_GeForce_6200 +Disregard128DefaultDrawDistance	1	0 +list NVIDIA_GeForce_6500 +Disregard128DefaultDrawDistance	1	0 +list NVIDIA_GeForce_6600 +Disregard128DefaultDrawDistance	1	0 + +  list NVIDIA_GeForce_Go_6100  RenderVBOEnable				1	0 +Disregard128DefaultDrawDistance	1	0  list NVIDIA_GeForce_Go_6200  RenderVBOEnable				1	0 +Disregard128DefaultDrawDistance	1	0  list NVIDIA_GeForce_Go_6500  RenderVBOEnable				1	0 +Disregard128DefaultDrawDistance	1	0  list NVIDIA_GeForce_Go_6600  RenderVBOEnable				1	0 +Disregard128DefaultDrawDistance	1	0  list NVIDIA_GeForce_Go_6700  RenderVBOEnable				1	0 +Disregard128DefaultDrawDistance	1	0  list NVIDIA_GeForce_Go_6800  RenderVBOEnable				1	0 +Disregard128DefaultDrawDistance	1	0  list NVIDIA_GeForce_Go_6  RenderVBOEnable				1	0 +Disregard128DefaultDrawDistance	1	0 + +list NVIDIA_GeForce_7200 +Disregard128DefaultDrawDistance	1	0 +list NVIDIA_GeForce_7300 +Disregard128DefaultDrawDistance	1	0 +list NVIDIA_GeForce_7400 +Disregard128DefaultDrawDistance	1	0 + +list NVIDIA_GeForce_Go_7200 +Disregard128DefaultDrawDistance	1	0 +list NVIDIA_GeForce_Go_7300 +Disregard128DefaultDrawDistance	1	0 +list NVIDIA_GeForce_Go_7400 +Disregard128DefaultDrawDistance	1	0 + diff --git a/indra/newview/gpu_table.txt b/indra/newview/gpu_table.txt index 5d73a70497..066cd980b6 100644 --- a/indra/newview/gpu_table.txt +++ b/indra/newview/gpu_table.txt @@ -28,7 +28,7 @@ ATI All-in-Wonder X800			.*ATI.*All-in-Wonder X8.*			2		1  ATI All-in-Wonder X1800			.*ATI.*All-in-Wonder X18.*			3		1  ATI All-in-Wonder X1900			.*ATI.*All-in-Wonder X19.*			3		1  ATI ASUS A9xxx					.*ATI.*ASUS.*A9.*					1		1 -ATI ASUS AH24xx					.*ATI.*ASUS.*AH24.*					3		1 +ATI ASUS AH24xx					.*ATI.*ASUS.*AH24.*					1		1  ATI ASUS AH26xx					.*ATI.*ASUS.*AH26.*					3		1  ATI ASUS AX3xx					.*ATI.*ASUS.*AX3.*					1		1  ATI ASUS AX5xx					.*ATI.*ASUS.*AX5.*					1		1 @@ -56,8 +56,8 @@ ATI Mobility Radeon X6xx		.*ATI.*Mobility.*X6.*				1		1  ATI Mobility Radeon X7xx		.*ATI.*Mobility.*X7.*				1		1  ATI Mobility Radeon Xxxx		.*ATI.*Mobility.*X.*				1		1  ATI Mobility Radeon				.*ATI.*Mobility.*					0		1 -ATI Radeon HD 2300				.*ATI.*Radeon HD 23.*				2		1 -ATI Radeon HD 2400				.*ATI.*Radeon HD 24.*				2		1 +ATI Radeon HD 2300				.*ATI.*Radeon HD 23.*				1		1 +ATI Radeon HD 2400				.*ATI.*Radeon HD 24.*				1		1  ATI Radeon HD 2600				.*ATI.*Radeon HD 26.*				2		1  ATI Radeon HD 2900				.*ATI.*Radeon HD 29.*				3		1  ATI Radeon HD 3800				.*ATI.*Radeon HD 38.*				3		1 @@ -76,7 +76,7 @@ ATI Radeon RX700				.*ATI.*RX70.*						1		1  ATI Radeon RX800				.*ATI.*Radeon *RX80.*				2		1  ATI Radeon VE					.*ATI.*Radeon.*VE.*					0		0  ATI Radeon X1000				.*ATI.*Radeon *X10.*				0		1 -ATI Radeon X1200				.*ATI.*Radeon *X12.*				1		1 +ATI Radeon X1200				.*ATI.*Radeon *X12.*				0		1  ATI Radeon X1300				.*ATI.*Radeon *X13.*				1		1  ATI Radeon X1400				.*ATI.*Radeon X14.*					1		1  ATI Radeon X1500				.*ATI.*Radeon X15.*					1		1 @@ -84,9 +84,6 @@ ATI Radeon X1600				.*ATI.*Radeon X16.*					1		1  ATI Radeon X1700				.*ATI.*Radeon X17.*					1		1  ATI Radeon X1800				.*ATI.*Radeon X18.*					3		1  ATI Radeon X1900				.*ATI.*Radeon X19.*					3		1 -ATI Radeon X2400				.*ATI.*Radeon X24.*					3		1 -ATI Radeon X2600				.*ATI.*Radeon X26.*					3		1 -ATI Radeon X2900				.*ATI.*Radeon X29.*					3		1  ATI Radeon X300					.*ATI.*Radeon *X3.*					1		1  ATI Radeon X400					.*ATI.*Radeon X4.*					1		1  ATI Radeon X500					.*ATI.*Radeon X5.*					1		1 @@ -99,7 +96,7 @@ ATI Rage 128					.*ATI.*Rage 128.*					0		1  ATI RV250						.*ATI.*RV250.*						0		1  ATI RV530						.*ATI.*RV530.*						1		1  ATI RX700						.*ATI.*RX700.*						1		1 -Intel x3100						.*Intel.*x3100						0		1 +Intel X3100						.*Intel.*X3100.*					1		1  Intel 830M						.*Intel.*830M						0		0  Intel 845G						.*Intel.*845G						0		0  Intel 855GM						.*Intel.*855GM						0		0 @@ -120,7 +117,7 @@ Intel Springdale				.*Intel.*Springdale.*				0		0  Matrox							.*Matrox.*							0		0  Mesa							.*Mesa.*							0		0  NVIDIA G72						.*NVIDIA.*G72.*						1		1 -NVIDIA G73						.*NVIDIA.*G73.*						2		1 +NVIDIA G73						.*NVIDIA.*G73.*						1		1  NVIDIA GeForce					.*GeForce 256.*						0		0  NVIDIA GeForce 2				.*GeForce2.*						0		1  NVIDIA GeForce 3				.*GeForce3.*						0		1 @@ -134,7 +131,7 @@ NVIDIA GeForce 6600				.*NVIDIA.*GeForce 66.*				1		1  NVIDIA GeForce 6700				.*NVIDIA.*GeForce 67.*				2		1  NVIDIA GeForce 6800				.*NVIDIA.*GeForce 68.*				2		1  NVIDIA GeForce 7000				.*NVIDIA.*GeForce 70.*				0		1 -NVIDIA GeForce 7100				.*NVIDIA.*GeForce 71.*				1		1 +NVIDIA GeForce 7100				.*NVIDIA.*GeForce 71.*				0		1  NVIDIA GeForce 7200				.*NVIDIA.*GeForce 72.*				1		1  NVIDIA GeForce 7300				.*NVIDIA.*GeForce 73.*				1		1  NVIDIA GeForce 7500				.*NVIDIA.*GeForce 75.*				1		1 @@ -178,6 +175,7 @@ NVIDIA GeForce Go 7900			.*NVIDIA.*GeForce Go 79.*			2		1  NVIDIA GeForce Go 6				.*GeForce Go 6.*					1		1  NVIDIA GeForce PCX				.*GeForce PCX.*						0		1  NVIDIA Generic					.*NVIDIA.*Unknown.*					0		0 +NVIDIA NV43						.*NVIDIA.*NV43.*					1		1  NVIDIA Quadro2					.*Quadro2.*							0		0  NVIDIA Quadro4					.*Quadro4.*							0		0  NVIDIA Quadro DCC				.*Quadro DCC.*						0		0 diff --git a/indra/newview/llappearance.h b/indra/newview/llappearance.h index 2a4c1759ca..07c0c0cb68 100644 --- a/indra/newview/llappearance.h +++ b/indra/newview/llappearance.h @@ -32,24 +32,24 @@  #ifndef LL_LLAPPEARANCE_H  #define LL_LLAPPEARANCE_H -#include "llskiplist.h"  #include "lluuid.h"  class LLAppearance  {  public:  	LLAppearance()										{} -	~LLAppearance()										{ mParamMap.deleteAllData(); }  +	~LLAppearance()										{ mParamMap.clear(); }  -	void	addParam( S32 id, F32 value )				{ mParamMap.addData( id, new F32(value) ); } -	F32*	getParam( S32 id )							{ F32* temp = mParamMap.getIfThere( id ); return temp; } // temp works around an invalid warning. +	void	addParam( S32 id, F32 value )				{ mParamMap[id] = value; } +	F32		getParam( S32 id, F32 defval )				{ return get_if_there(mParamMap, id, defval ); }  	void	addTexture( S32 te, const LLUUID& uuid )	{ if( te < LLVOAvatar::TEX_NUM_ENTRIES ) mTextures[te] = uuid; }  	const LLUUID& getTexture( S32 te )					{ return ( te < LLVOAvatar::TEX_NUM_ENTRIES ) ? mTextures[te] : LLUUID::null; } -	void	clear()										{ mParamMap.deleteAllData(); for( S32 i=0; i<LLVOAvatar::TEX_NUM_ENTRIES; i++ ) mTextures[i].setNull(); } +	void	clear()										{ mParamMap.clear(); for( S32 i=0; i<LLVOAvatar::TEX_NUM_ENTRIES; i++ ) mTextures[i].setNull(); } -	LLPtrSkipMap<S32, F32*> mParamMap; +	typedef std::map<S32, F32> param_map_t; +	param_map_t mParamMap;  	LLUUID	mTextures[LLVOAvatar::TEX_NUM_ENTRIES];  }; diff --git a/indra/newview/llappviewerwin32.cpp b/indra/newview/llappviewerwin32.cpp index 814c209e67..09bcf6f7cc 100644 --- a/indra/newview/llappviewerwin32.cpp +++ b/indra/newview/llappviewerwin32.cpp @@ -127,7 +127,14 @@ LONG WINAPI viewer_windows_exception_handler(struct _EXCEPTION_POINTERS *excepti  	return retval;  } -int APIENTRY WinMain(HINSTANCE hInstance, + +#if DEBUGGING_SEH_FILTER +#	define WINMAIN DebuggingWinMain +#else +#	define WINMAIN WinMain +#endif + +int APIENTRY WINMAIN(HINSTANCE hInstance,                       HINSTANCE hPrevInstance,                       LPSTR     lpCmdLine,                       int       nCmdShow) @@ -207,6 +214,27 @@ int APIENTRY WinMain(HINSTANCE hInstance,  	return 0;  } +#if DEBUGGING_SEH_FILTER +// The compiler doesn't like it when you use __try/__except blocks +// in a method that uses object destructors. Go figure. +// This winmain just calls the real winmain inside __try. +// The __except calls our exception filter function. For debugging purposes. +int APIENTRY WinMain(HINSTANCE hInstance, +                     HINSTANCE hPrevInstance, +                     LPSTR     lpCmdLine, +                     int       nCmdShow) +{ +    __try +    { +        WINMAIN(hInstance, hPrevInstance, lpCmdLine, nCmdShow); +    } +    __except( viewer_windows_exception_handler( GetExceptionInformation() ) ) +    { +        _tprintf( _T("Exception handled.\n") ); +    } +} +#endif +  void LLAppViewerWin32::disableWinErrorReporting()  {  	const char win_xp_string[] = "Microsoft Windows XP"; diff --git a/indra/newview/llcompilequeue.cpp b/indra/newview/llcompilequeue.cpp index 1a4d3c16fd..087f8ac673 100644 --- a/indra/newview/llcompilequeue.cpp +++ b/indra/newview/llcompilequeue.cpp @@ -44,7 +44,6 @@  #include "llagent.h"  #include "llchat.h"  #include "llviewerwindow.h" -#include "llcallbacklist.h"  #include "llviewerobject.h"  #include "llviewerobjectlist.h"  #include "llviewerregion.h" diff --git a/indra/newview/lldebugmessagebox.cpp b/indra/newview/lldebugmessagebox.cpp index de185e280d..371426d56e 100644 --- a/indra/newview/lldebugmessagebox.cpp +++ b/indra/newview/lldebugmessagebox.cpp @@ -39,7 +39,6 @@  #include "llsliderctrl.h"  #include "llcheckboxctrl.h"  #include "lltextbox.h" -#include "llcallbacklist.h"  #include "lllineeditor.h"  #include "llfocusmgr.h" diff --git a/indra/newview/lldynamictexture.cpp b/indra/newview/lldynamictexture.cpp index a4b3d259bb..c925cc058c 100644 --- a/indra/newview/lldynamictexture.cpp +++ b/indra/newview/lldynamictexture.cpp @@ -32,7 +32,6 @@  #include "llviewerprecompiledheaders.h"  #include "lldynamictexture.h" -#include "linked_lists.h"  #include "llimagegl.h"  #include "llglheaders.h"  #include "llviewerwindow.h" @@ -46,7 +45,7 @@  void render_ui_and_swap_if_needed();  // static -LLLinkedList<LLDynamicTexture> LLDynamicTexture::sInstances[ LLDynamicTexture::ORDER_COUNT ]; +LLDynamicTexture::instance_list_t LLDynamicTexture::sInstances[ LLDynamicTexture::ORDER_COUNT ];  S32 LLDynamicTexture::sNumRenders = 0;  //----------------------------------------------------------------------------- @@ -65,7 +64,7 @@ LLDynamicTexture::LLDynamicTexture(S32 width, S32 height, S32 components, EOrder  	generateGLTexture();  	llassert( 0 <= order && order < ORDER_COUNT ); -	LLDynamicTexture::sInstances[ order ].addData(this); +	LLDynamicTexture::sInstances[ order ].insert(this);  }  //----------------------------------------------------------------------------- @@ -76,7 +75,7 @@ LLDynamicTexture::~LLDynamicTexture()  	releaseGLTexture();  	for( S32 order = 0; order < ORDER_COUNT; order++ )  	{ -		LLDynamicTexture::sInstances[order].removeData(this);  // will fail in all but one case. +		LLDynamicTexture::sInstances[order].erase(this);  // will fail in all but one case.  	}  } @@ -214,10 +213,10 @@ BOOL LLDynamicTexture::updateAllInstances()  	BOOL result = FALSE;  	for( S32 order = 0; order < ORDER_COUNT; order++ )  	{ -		for (LLDynamicTexture *dynamicTexture = LLDynamicTexture::sInstances[order].getFirstData(); -			dynamicTexture; -			dynamicTexture = LLDynamicTexture::sInstances[order].getNextData()) +		for (instance_list_t::iterator iter = LLDynamicTexture::sInstances[order].begin(); +			 iter != LLDynamicTexture::sInstances[order].end(); ++iter)  		{ +			LLDynamicTexture *dynamicTexture = *iter;  			if (dynamicTexture->needsRender())  			{  				render_ui_and_swap_if_needed(); diff --git a/indra/newview/lldynamictexture.h b/indra/newview/lldynamictexture.h index 49c8b0cdfb..9f647232c5 100644 --- a/indra/newview/lldynamictexture.h +++ b/indra/newview/lldynamictexture.h @@ -33,7 +33,6 @@  #define LL_LLDYNAMICTEXTURE_H  #include "llgl.h" -#include "linked_lists.h"  #include "llcamera.h"  #include "llcoord.h"  #include "llimagegl.h" @@ -84,7 +83,8 @@ protected:  	LLCoordGL mOrigin;  	LLCamera mCamera; -	static LLLinkedList<LLDynamicTexture> sInstances[ LLDynamicTexture::ORDER_COUNT ]; +	typedef std::set<LLDynamicTexture*> instance_list_t; +	static instance_list_t sInstances[ LLDynamicTexture::ORDER_COUNT ];  	static S32 sNumRenders;  }; diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp index e29d8fb40d..c1194fa99e 100644 --- a/indra/newview/llfasttimerview.cpp +++ b/indra/newview/llfasttimerview.cpp @@ -95,7 +95,7 @@ static struct ft_display_info ft_display_table[] =  	{ LLFastTimer::FTM_UPDATE_MOVE,			"   Move Objects",		&LLColor4::pink2, 0 },  	{ LLFastTimer::FTM_OCTREE_BALANCE,		"    Octree Balance", &LLColor4::red3, 0 },  	{ LLFastTimer::FTM_SIMULATE_PARTICLES,	"   Particle Sim",	&LLColor4::blue4, 0 }, -	{ LLFastTimer::FTM_OBJECTLIST_UPDATE,	"  Object Update",	&LLColor4::purple1, 0 }, +	{ LLFastTimer::FTM_OBJECTLIST_UPDATE,	"  Object Update",	&LLColor4::purple1, 1 },  	{ LLFastTimer::FTM_AVATAR_UPDATE,		"   Avatars",		&LLColor4::purple2, 0 },  	{ LLFastTimer::FTM_JOINT_UPDATE,		"    Joints",		&LLColor4::purple3, 0 },  	{ LLFastTimer::FTM_ATTACHMENT_UPDATE,	"    Attachments",	&LLColor4::purple4, 0 }, @@ -124,7 +124,7 @@ static struct ft_display_info ft_display_table[] =  	{ LLFastTimer::FTM_HUD_UPDATE,			"  HUD Update",	&LLColor4::orange2, 0 },  	{ LLFastTimer::FTM_UPDATE_SKY,			"  Sky Update",		&LLColor4::cyan1, 0 },  	{ LLFastTimer::FTM_UPDATE_TEXTURES,		"  Textures",		&LLColor4::pink2, 0 }, -	{ LLFastTimer::FTM_GEO_UPDATE,			"  Geo Update",	&LLColor4::blue3, 0 }, +	{ LLFastTimer::FTM_GEO_UPDATE,			"  Geo Update",	&LLColor4::blue3, 1 },  	{ LLFastTimer::FTM_UPDATE_PRIMITIVES,	"   Volumes",		&LLColor4::blue4, 0 },  	{ LLFastTimer::FTM_GEN_VOLUME,			"    Gen Volume",	&LLColor4::yellow3, 0 },  	{ LLFastTimer::FTM_GEN_FLEX,			"    Flexible",	&LLColor4::yellow4, 0 }, @@ -189,6 +189,7 @@ static struct ft_display_info ft_display_table[] =  	{ LLFastTimer::FTM_SWAP,				"  Swap",			&LLColor4::pink1, 0 },  	{ LLFastTimer::FTM_CLIENT_COPY,			"  Client Copy",	&LLColor4::red1, 1}, +#if 0 || !LL_RELEASE_FOR_DOWNLOAD  	{ LLFastTimer::FTM_TEMP1,				" Temp1",			&LLColor4::red1, 0 },  	{ LLFastTimer::FTM_TEMP2,				" Temp2",			&LLColor4::magenta1, 0 },  	{ LLFastTimer::FTM_TEMP3,				" Temp3",			&LLColor4::red2, 0 }, @@ -197,7 +198,8 @@ static struct ft_display_info ft_display_table[] =  	{ LLFastTimer::FTM_TEMP6,				" Temp6",			&LLColor4::magenta3, 0 },  	{ LLFastTimer::FTM_TEMP7,				" Temp7",			&LLColor4::red4, 0 },  	{ LLFastTimer::FTM_TEMP8,				" Temp8",			&LLColor4::magenta4, 0 }, - +#endif +	  	{ LLFastTimer::FTM_OTHER,				" Other",			&red0 }  };  static int ft_display_didcalc = 0; diff --git a/indra/newview/llfeaturemanager.cpp b/indra/newview/llfeaturemanager.cpp index 561d96d281..bf7d48f911 100644 --- a/indra/newview/llfeaturemanager.cpp +++ b/indra/newview/llfeaturemanager.cpp @@ -443,6 +443,20 @@ void LLFeatureManager::applyRecommendedSettings()  	gSavedSettings.setU32("RenderQualityPerformance", level);  	gSavedSettings.setBOOL("RenderCustomSettings", FALSE); +	// now apply the tweaks to draw distance +	// these are double negatives, because feature masks only work by +	// downgrading values, so i needed to make a true value go to false +	// for certain cards, thus the awkward name, "Disregard..." +	if(!gSavedSettings.getBOOL("Disregard96DefaultDrawDistance")) +	{ +		gSavedSettings.setF32("RenderFarClip", 96.0f); +	} +	else if(!gSavedSettings.getBOOL("Disregard128DefaultDrawDistance")) +	{ +		gSavedSettings.setF32("RenderFarClip", 128.0f); +	} + +  }  void LLFeatureManager::applyFeatures(bool skipFeatures) diff --git a/indra/newview/llfeaturemanager.h b/indra/newview/llfeaturemanager.h index 26d491b96f..3d05bbe2e0 100644 --- a/indra/newview/llfeaturemanager.h +++ b/indra/newview/llfeaturemanager.h @@ -35,7 +35,6 @@  #include "stdtypes.h"  #include "llstring.h" -#include "llskipmap.h"  #include <map>  typedef enum EGPUClass diff --git a/indra/newview/llfloaterbump.cpp b/indra/newview/llfloaterbump.cpp index 3f6ed92868..2cf1f555ea 100644 --- a/indra/newview/llfloaterbump.cpp +++ b/indra/newview/llfloaterbump.cpp @@ -37,13 +37,12 @@  #include "llscrolllistctrl.h"  #include "llvieweruictrlfactory.h" +#include "llviewermessage.h"  #include "llappviewer.h"		// gPacificDaylightTime  ///----------------------------------------------------------------------------  /// Local function declarations, constants, enums, and typedefs  ///---------------------------------------------------------------------------- -extern LLLinkedList<LLMeanCollisionData>	gMeanCollisionList; -  LLFloaterBump* LLFloaterBump::sInstance = NULL;  ///---------------------------------------------------------------------------- @@ -83,7 +82,7 @@ void LLFloaterBump::show(void *contents)  	if (!list) return;  	list->deleteAllItems(); -	if (gMeanCollisionList.isEmpty()) +	if (gMeanCollisionList.empty())  	{  		LLString none_detected = sInstance->getString("none_detected");  		LLSD row; @@ -93,10 +92,10 @@ void LLFloaterBump::show(void *contents)  	}  	else  	{ -		for (LLMeanCollisionData* mcd = gMeanCollisionList.getFirstData(); -			 mcd; -			 mcd = gMeanCollisionList.getNextData()) +		for (mean_collision_list_t::iterator iter = gMeanCollisionList.begin(); +			 iter != gMeanCollisionList.end(); ++iter)  		{ +			LLMeanCollisionData *mcd = *iter;  			LLFloaterBump::add(list, mcd);  		}  	} diff --git a/indra/newview/llfloatermap.cpp b/indra/newview/llfloatermap.cpp index 4097abc22d..7de980a075 100644 --- a/indra/newview/llfloatermap.cpp +++ b/indra/newview/llfloatermap.cpp @@ -118,7 +118,7 @@ LLFloaterMap *gFloaterMap = NULL;  LLFloaterMap::LLFloaterMap(const std::string& name)  	:  	LLFloater(name,  -				"FloaterMapRect",  +				"FloaterMiniMapRect",   				MAP_TITLE,   				TRUE,   				FLOATERMAP_MIN_WIDTH,  diff --git a/indra/newview/llfloaterpostcard.cpp b/indra/newview/llfloaterpostcard.cpp index 044c8c9d90..4d97688b2a 100644 --- a/indra/newview/llfloaterpostcard.cpp +++ b/indra/newview/llfloaterpostcard.cpp @@ -67,7 +67,8 @@  /// Local function declarations, constants, enums, and typedefs  ///---------------------------------------------------------------------------- -LLLinkedList<LLFloaterPostcard> LLFloaterPostcard::sInstances; +//static +LLFloaterPostcard::instance_list_t LLFloaterPostcard::sInstances;  ///----------------------------------------------------------------------------  /// Class LLFloaterPostcard @@ -97,13 +98,13 @@ void LLFloaterPostcard::init()  		gAgent.sendReliableMessage();  	} -	sInstances.addData(this); +	sInstances.insert(this);  }  // Destroys the object  LLFloaterPostcard::~LLFloaterPostcard()  { -	sInstances.removeData(this); +	sInstances.erase(this);  	mJPEGImage = NULL; // deletes image  } @@ -313,11 +314,10 @@ void LLFloaterPostcard::uploadCallback(const LLUUID& asset_id, void *user_data,  // static  void LLFloaterPostcard::updateUserInfo(const char *email)  { -	LLFloaterPostcard *instance; - -	sInstances.resetList(); -	while ((instance = sInstances.getNextData())) +	for (instance_list_t::iterator iter = sInstances.begin(); +		 iter != sInstances.end(); ++iter)  	{ +		LLFloaterPostcard *instance = *iter;  		const LLString& text = instance->childGetValue("from_form").asString();  		if (text.empty())  		{ diff --git a/indra/newview/llfloaterpostcard.h b/indra/newview/llfloaterpostcard.h index 5e0efa0ccb..2e2fffb18a 100644 --- a/indra/newview/llfloaterpostcard.h +++ b/indra/newview/llfloaterpostcard.h @@ -78,8 +78,9 @@ protected:  	LLVector2 mImageScale;  	LLVector3d mPosTakenGlobal;  	boolean mHasFirstMsgFocus; -	 -	static LLLinkedList<LLFloaterPostcard> sInstances; + +	typedef std::set<LLFloaterPostcard*> instance_list_t; +	static instance_list_t sInstances;  }; diff --git a/indra/newview/llfloaterurlentry.cpp b/indra/newview/llfloaterurlentry.cpp index 16d869ea6f..e9e2584b17 100644 --- a/indra/newview/llfloaterurlentry.cpp +++ b/indra/newview/llfloaterurlentry.cpp @@ -72,9 +72,12 @@ public:  	  void completeAny(U32 status, const std::string& mime_type)  	  { +		  // Set empty type to none/none.  Empty string is reserved for legacy parcels +		  // which have no mime type set. +		  std::string resolved_mime_type = ! mime_type.empty() ? mime_type : "none/none";  		  LLFloaterURLEntry* floater_url_entry = (LLFloaterURLEntry*)mParent.get();  		  if ( floater_url_entry ) -			  floater_url_entry->headerFetchComplete( status, mime_type ); +			  floater_url_entry->headerFetchComplete( status, resolved_mime_type );  	  }  }; diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp index ebc6dc2322..8a40cdd062 100644 --- a/indra/newview/llfloaterworldmap.cpp +++ b/indra/newview/llfloaterworldmap.cpp @@ -150,13 +150,7 @@ const LLUUID LLFloaterWorldMap::sHomeID( "10000000-0000-0000-0000-000000000001"  LLFloaterWorldMap::LLFloaterWorldMap() -:	LLFloater("worldmap", "FloaterWorldMapRect", "World Map", -			  TRUE,		// resize -			  410,		// min-width -			  520,		// min-height -			  FALSE,	// drag on left -			  TRUE,		// minimize -			  TRUE),	// close +:	LLFloater("worldmap"),  	mInventory(NULL),  	mInventoryObserver(NULL),  	mFriendObserver(NULL), diff --git a/indra/newview/llhudeffectlookat.h b/indra/newview/llhudeffectlookat.h index 4295078681..ef3691d8d7 100644 --- a/indra/newview/llhudeffectlookat.h +++ b/indra/newview/llhudeffectlookat.h @@ -33,7 +33,6 @@  #define LL_LLHUDEFFECTLOOKAT_H  #include "llhudeffect.h" -#include "llskiplist.h"  class LLViewerObject;  class LLVOAvatar; diff --git a/indra/newview/llhudobject.h b/indra/newview/llhudobject.h index 5e2c300d2c..11d9f43fcc 100644 --- a/indra/newview/llhudobject.h +++ b/indra/newview/llhudobject.h @@ -41,7 +41,6 @@  #include "v4color.h"  #include "v3math.h"  #include "v3dmath.h" -#include "linked_lists.h"  #include "lldrawpool.h"  #include <list> diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index 58139e41aa..4dc5bfddec 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -40,7 +40,6 @@  #include "llhttpclient.h"  #include "llsdutil.h"  #include "llstring.h" -#include "linked_lists.h"  #include "llvieweruictrlfactory.h"  #include "llagent.h" diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 0e17d8503d..a0fa0e083c 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -3522,8 +3522,13 @@ struct LLFoundData  struct LLWearableHoldingPattern  {  	LLWearableHoldingPattern() : mResolved(0) {} -	~LLWearableHoldingPattern() { mFoundList.deleteAllData(); } -	LLDoubleLinkedList<LLFoundData> mFoundList; +	~LLWearableHoldingPattern() +	{ +		for_each(mFoundList.begin(), mFoundList.end(), DeletePointer()); +		mFoundList.clear(); +	} +	typedef std::list<LLFoundData*> found_list_t; +	found_list_t mFoundList;  	S32 mResolved;  }; @@ -3913,7 +3918,7 @@ void wear_inventory_category_on_avatar_step2( BOOL proceed, void* userdata )  										item_array.get(i)->getAssetUUID(),  										item_array.get(i)->getName(),  										item_array.get(i)->getType()); -				holder->mFoundList.addData(found); +				holder->mFoundList.push_front(found);  				found_container.put(found);  			}  			for(i = 0; i < wearable_count; ++i) @@ -4004,10 +4009,10 @@ void wear_inventory_category_on_avatar_loop(LLWearable* wearable, void* data)  	if(wearable)  	{ -		for(LLFoundData* data = holder->mFoundList.getFirstData(); -			data; -			data = holder->mFoundList.getNextData() ) +		for (LLWearableHoldingPattern::found_list_t::iterator iter = holder->mFoundList.begin(); +			 iter != holder->mFoundList.end(); ++iter)  		{ +			LLFoundData* data = *iter;  			if(wearable->getID() == data->mAssetID)  			{  				data->mWearable = wearable; @@ -4016,7 +4021,7 @@ void wear_inventory_category_on_avatar_loop(LLWearable* wearable, void* data)  		}  	}  	holder->mResolved += 1; -	if(holder->mResolved >= holder->mFoundList.getLength()) +	if(holder->mResolved >= (S32)holder->mFoundList.size())  	{  		wear_inventory_category_on_avatar_step3(holder, append);  	} @@ -4032,10 +4037,10 @@ void wear_inventory_category_on_avatar_step3(LLWearableHoldingPattern* holder, B  	// that we recursed through.  	for( S32 i = 0; i < WT_COUNT; i++ )  	{ -		for(LLFoundData* data = holder->mFoundList.getFirstData(); -			data; -			data = holder->mFoundList.getNextData()) +		for (LLWearableHoldingPattern::found_list_t::iterator iter = holder->mFoundList.begin(); +			 iter != holder->mFoundList.end(); ++iter)  		{ +			LLFoundData* data = *iter;  			LLWearable* wearable = data->mWearable;  			if( wearable && ((S32)wearable->getType() == i) )  			{ diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h index 79a35f78ea..c2ec01a1a0 100644 --- a/indra/newview/llinventorymodel.h +++ b/indra/newview/llinventorymodel.h @@ -439,8 +439,6 @@ protected:  	mutable LLPointer<LLViewerInventoryItem> mLastItem;  	// This last set of indices is used to map parents to children. -	//LLPtrSkipMap<const LLUUID,  cat_array_t*> mParentChildCategoryTree; -	//LLPtrSkipMap<const LLUUID,  item_array_t*> mParentChildItemTree;  	typedef std::map<LLUUID, cat_array_t*> parent_cat_map_t;  	typedef std::map<LLUUID, item_array_t*> parent_item_map_t;  	parent_cat_map_t mParentChildCategoryTree; diff --git a/indra/newview/llmanipscale.cpp b/indra/newview/llmanipscale.cpp index 457682a154..5252e3e3c6 100644 --- a/indra/newview/llmanipscale.cpp +++ b/indra/newview/llmanipscale.cpp @@ -173,11 +173,6 @@ void LLManipScale::handleDeselect()  	LLManip::handleDeselect();  } -BOOL sort_manip_by_z(LLManipScale::ManipulatorHandle *new_manip, LLManipScale::ManipulatorHandle *test_manip) -{ -	return ((new_manip->mType < test_manip->mType) || (new_manip->mPosition.mV[VZ] < test_manip->mPosition.mV[VZ])); -} -  LLManipScale::LLManipScale( LLToolComposite* composite )  	:   	LLManip( "Scale", composite ), @@ -194,7 +189,6 @@ LLManipScale::LLManipScale( LLToolComposite* composite )  	mSnapGuideLength(0.f),  	mScaleSnapValue(0.f)  {  -	mProjectedManipulators.setInsertBefore(sort_manip_by_z);  	mManipulatorScales = new F32[NUM_MANIPULATORS];  	for (S32 i = 0; i < NUM_MANIPULATORS; i++)  	{ @@ -204,7 +198,8 @@ LLManipScale::LLManipScale( LLToolComposite* composite )  LLManipScale::~LLManipScale()  { -	delete []mManipulatorScales; +	for_each(mProjectedManipulators.begin(), mProjectedManipulators.end(), DeletePointer()); +	delete[] mManipulatorScales;  }  void LLManipScale::render() @@ -471,8 +466,6 @@ void LLManipScale::highlightManipulators(S32 x, S32 y)  		LLVector3 max = bbox.getMaxLocal();  		LLVector3 ctr = bbox.getCenterLocal(); -		mProjectedManipulators.deleteAllData(); -  		S32 numManips = 0;  		// corners  		mManipulatorVertices[numManips++] = LLVector4(min.mV[VX], min.mV[VY], min.mV[VZ], 1.f); @@ -496,6 +489,9 @@ void LLManipScale::highlightManipulators(S32 x, S32 y)  			mManipulatorVertices[numManips++] = LLVector4(ctr.mV[VX], ctr.mV[VY], min.mV[VZ], 1.f);  		} +		for_each(mProjectedManipulators.begin(), mProjectedManipulators.end(), DeletePointer()); +		mProjectedManipulators.clear(); +		  		for (S32 i = 0; i < numManips; i++)  		{  			LLVector4 projectedVertex = mManipulatorVertices[i] * transform; @@ -503,7 +499,7 @@ void LLManipScale::highlightManipulators(S32 x, S32 y)  			ManipulatorHandle* projManipulator = new ManipulatorHandle(LLVector3(projectedVertex.mV[VX], projectedVertex.mV[VY],   				projectedVertex.mV[VZ]), MANIPULATOR_IDS[i], (i < 7) ? SCALE_MANIP_CORNER : SCALE_MANIP_FACE); -			mProjectedManipulators.addDataSorted(projManipulator); +			mProjectedManipulators.insert(projManipulator);  		}  		F32 half_width = (F32)gViewerWindow->getWindowWidth() / 2.f; @@ -514,9 +510,10 @@ void LLManipScale::highlightManipulators(S32 x, S32 y)  		mHighlightedPart = LL_NO_PART; -		for (ManipulatorHandle* manipulator = mProjectedManipulators.getFirstData(); -			manipulator; -			manipulator = mProjectedManipulators.getNextData()) +		for (minpulator_list_t::iterator iter = mProjectedManipulators.begin(); +			 iter != mProjectedManipulators.end(); ++iter) +		{ +			ManipulatorHandle* manipulator = *iter;  			{  				manip2d.setVec(manipulator->mPosition.mV[VX] * half_width, manipulator->mPosition.mV[VY] * half_height); @@ -529,6 +526,7 @@ void LLManipScale::highlightManipulators(S32 x, S32 y)  					break;  				}  			} +		}  	}  	for (S32 i = 0; i < NUM_MANIPULATORS; i++) diff --git a/indra/newview/llmanipscale.h b/indra/newview/llmanipscale.h index 3ea5ee7d7a..c02845e358 100644 --- a/indra/newview/llmanipscale.h +++ b/indra/newview/llmanipscale.h @@ -124,6 +124,20 @@ private:  	void			updateSnapGuides(const LLBBox& bbox);  private: +	struct compare_manipulators +	{ +		bool operator() (const ManipulatorHandle* const a, const ManipulatorHandle* const b) const +		{ +			if (a->mType != b->mType) +				return a->mType < b->mType; +			else if (a->mPosition.mV[VZ] != b->mPosition.mV[VZ]) +				return a->mPosition.mV[VZ] < b->mPosition.mV[VZ]; +			else +				return a->mManipID < b->mManipID; +		} +	}; + +  	F32				mBoxHandleSize;		// The size of the handles at the corners of the bounding box  	F32				mScaledBoxHandleSize; // handle size after scaling for selection feedback  	EManipPart		mManipPart; @@ -135,7 +149,8 @@ private:  	S32				mLastMouseY;  	BOOL			mSendUpdateOnMouseUp;  	U32 			mLastUpdateFlags; -	LLLinkedList<ManipulatorHandle>		mProjectedManipulators; +	typedef std::set<ManipulatorHandle*, compare_manipulators> minpulator_list_t; +	minpulator_list_t mProjectedManipulators;  	LLVector4		mManipulatorVertices[14];  	F32				mScaleSnapUnit1;  // size of snap multiples for axis 1  	F32				mScaleSnapUnit2;  // size of snap multiples for axis 2 diff --git a/indra/newview/llmaniptranslate.cpp b/indra/newview/llmaniptranslate.cpp index 3182f14951..98d67f3804 100644 --- a/indra/newview/llmaniptranslate.cpp +++ b/indra/newview/llmaniptranslate.cpp @@ -100,11 +100,6 @@ const U32 ARROW_TO_AXIS[4] =  	VZ  }; -BOOL sort_manip_by_end_z(LLManipTranslate::ManipulatorHandle *new_manip, LLManipTranslate::ManipulatorHandle *test_manip) -{ -	return (new_manip->mEndPosition.mV[VZ] < test_manip->mEndPosition.mV[VZ]); -} -  LLManipTranslate::LLManipTranslate( LLToolComposite* composite )  :	LLManip( "Move", composite ),  	mLastHoverMouseX(-1), @@ -125,8 +120,6 @@ LLManipTranslate::LLManipTranslate( LLToolComposite* composite )  	mPlaneScales(1.f, 1.f, 1.f),  	mPlaneManipPositions(1.f, 1.f, 1.f, 1.f)  {  -	mProjectedManipulators.setInsertBefore(sort_manip_by_end_z); -  	if (sGridTex == 0)  	{   		restoreGL(); @@ -253,7 +246,7 @@ void LLManipTranslate::restoreGL()  LLManipTranslate::~LLManipTranslate()  { -	mProjectedManipulators.deleteAllData(); +	for_each(mProjectedManipulators.begin(), mProjectedManipulators.end(), DeletePointer());  } @@ -841,8 +834,6 @@ void LLManipTranslate::highlightManipulators(S32 x, S32 y)  		transform *= projMatrix;  	} -	mProjectedManipulators.deleteAllData(); -  	S32 numManips = 0;  	// edges @@ -898,6 +889,9 @@ void LLManipTranslate::highlightManipulators(S32 x, S32 y)  		planar_manip_xy_visible = TRUE;  	} +	for_each(mProjectedManipulators.begin(), mProjectedManipulators.end(), DeletePointer()); +	mProjectedManipulators.clear(); +	  	for (S32 i = 0; i < num_arrow_manips; i+= 2)  	{  		LLVector4 projected_start = mManipulatorVertices[i] * transform; @@ -911,7 +905,7 @@ void LLManipTranslate::highlightManipulators(S32 x, S32 y)  				LLVector3(projected_end.mV[VX], projected_end.mV[VY], projected_end.mV[VZ]),   				MANIPULATOR_IDS[i / 2],  				10.f); // 10 pixel hotspot for arrows -		mProjectedManipulators.addDataSorted(projManipulator); +		mProjectedManipulators.insert(projManipulator);  	}  	if (planar_manip_yz_visible) @@ -928,7 +922,7 @@ void LLManipTranslate::highlightManipulators(S32 x, S32 y)  				LLVector3(projected_end.mV[VX], projected_end.mV[VY], projected_end.mV[VZ]),   				MANIPULATOR_IDS[i / 2],  				20.f); // 20 pixels for planar manipulators -		mProjectedManipulators.addDataSorted(projManipulator); +		mProjectedManipulators.insert(projManipulator);  	}  	if (planar_manip_xz_visible) @@ -945,7 +939,7 @@ void LLManipTranslate::highlightManipulators(S32 x, S32 y)  				LLVector3(projected_end.mV[VX], projected_end.mV[VY], projected_end.mV[VZ]),   				MANIPULATOR_IDS[i / 2],  				20.f); // 20 pixels for planar manipulators -		mProjectedManipulators.addDataSorted(projManipulator); +		mProjectedManipulators.insert(projManipulator);  	}  	if (planar_manip_xy_visible) @@ -962,7 +956,7 @@ void LLManipTranslate::highlightManipulators(S32 x, S32 y)  				LLVector3(projected_end.mV[VX], projected_end.mV[VY], projected_end.mV[VZ]),   				MANIPULATOR_IDS[i / 2],  				20.f); // 20 pixels for planar manipulators -		mProjectedManipulators.addDataSorted(projManipulator); +		mProjectedManipulators.insert(projManipulator);  	}  	LLVector2 manip_start_2d; @@ -973,9 +967,10 @@ void LLManipTranslate::highlightManipulators(S32 x, S32 y)  	LLVector2 mousePos((F32)x - half_width, (F32)y - half_height);  	LLVector2 mouse_delta; -	for (ManipulatorHandle* manipulator = mProjectedManipulators.getFirstData(); -		manipulator; -		manipulator = mProjectedManipulators.getNextData()) +	for (minpulator_list_t::iterator iter = mProjectedManipulators.begin(); +		 iter != mProjectedManipulators.end(); ++iter) +	{ +		ManipulatorHandle* manipulator = *iter;  		{  			manip_start_2d.setVec(manipulator->mStartPosition.mV[VX] * half_width, manipulator->mStartPosition.mV[VY] * half_height);  			manip_end_2d.setVec(manipulator->mEndPosition.mV[VX] * half_width, manipulator->mEndPosition.mV[VY] * half_height); @@ -996,6 +991,7 @@ void LLManipTranslate::highlightManipulators(S32 x, S32 y)  				break;  			}  		} +	}  }  F32 LLManipTranslate::getMinGridScale() diff --git a/indra/newview/llmaniptranslate.h b/indra/newview/llmaniptranslate.h index 8821b64c90..c9f98e9c7d 100644 --- a/indra/newview/llmaniptranslate.h +++ b/indra/newview/llmaniptranslate.h @@ -35,7 +35,6 @@  #include "llmanip.h"  #include "lltimer.h"  #include "v4math.h" -#include "linked_lists.h"  #include "llquaternion.h"  class LLManipTranslate : public LLManip @@ -88,6 +87,17 @@ protected:  	F32			getMinGridScale();  private: +	struct compare_manipulators +	{ +		bool operator() (const ManipulatorHandle* const a, const ManipulatorHandle* const b) const +		{ +			if (a->mEndPosition.mV[VZ] != b->mEndPosition.mV[VZ]) +				return (a->mEndPosition.mV[VZ] < b->mEndPosition.mV[VZ]); +			else +				return a->mManipID < b->mManipID;			 +		} +	}; +	  	S32			mLastHoverMouseX;  	S32			mLastHoverMouseY;  	BOOL		mSendUpdateOnMouseUp; @@ -105,7 +115,8 @@ private:  	LLVector3d	mDragCursorStartGlobal;  	LLVector3d	mDragSelectionStartGlobal;  	LLTimer		mUpdateTimer; -	LLLinkedList<ManipulatorHandle>		mProjectedManipulators; +	typedef std::set<ManipulatorHandle*, compare_manipulators> minpulator_list_t; +	minpulator_list_t mProjectedManipulators;  	LLVector4	mManipulatorVertices[18];  	F32			mSnapOffsetMeters;  	LLVector3	mSnapOffsetAxis; diff --git a/indra/newview/llmenucommands.cpp b/indra/newview/llmenucommands.cpp index 68bbe53090..080413bb56 100644 --- a/indra/newview/llmenucommands.cpp +++ b/indra/newview/llmenucommands.cpp @@ -41,7 +41,6 @@  #include "message.h"  #include "llagent.h" -#include "llcallbacklist.h"  #include "llcallingcard.h"  #include "llchatbar.h"  #include "llviewercontrol.h" diff --git a/indra/newview/llmimetypes.cpp b/indra/newview/llmimetypes.cpp index 67f7532ff6..e1bc3dbf11 100644 --- a/indra/newview/llmimetypes.cpp +++ b/indra/newview/llmimetypes.cpp @@ -53,7 +53,7 @@ bool LLMIMETypes::parseMIMETypes(const LLString& xml_filename)  {  	LLXMLNodePtr root;  	bool success = LLViewerUICtrlFactory::getLayeredXMLNode(xml_filename, root); -	if ( ! success || ! root.isNull() || ! root->hasName( "mimetypes" ) ) +	if ( ! success || root.isNull() || ! root->hasName( "mimetypes" ) )  	{  		llwarns << "Unable to read MIME type file: "  			<< xml_filename << llendl; diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp index 4f1d7bb514..4963b42a62 100644 --- a/indra/newview/llmoveview.cpp +++ b/indra/newview/llmoveview.cpp @@ -38,7 +38,6 @@  // Viewer includes  #include "llagent.h" -#include "llcallbacklist.h"  #include "llviewercontrol.h"  #include "llfontgl.h"  #include "llbutton.h" diff --git a/indra/newview/llnamebox.h b/indra/newview/llnamebox.h index 5fd92f5daa..da8df5c225 100644 --- a/indra/newview/llnamebox.h +++ b/indra/newview/llnamebox.h @@ -37,7 +37,6 @@  #include "llview.h"  #include "llstring.h"  #include "llfontgl.h" -#include "linked_lists.h"  #include "lltextbox.h"  class LLNameBox diff --git a/indra/newview/llnameeditor.h b/indra/newview/llnameeditor.h index 9c89454c33..a5a0c5d9c8 100644 --- a/indra/newview/llnameeditor.h +++ b/indra/newview/llnameeditor.h @@ -38,7 +38,6 @@  #include "v4color.h"  #include "llstring.h"  #include "llfontgl.h" -#include "linked_lists.h"  #include "lllineeditor.h" diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp index 0a078e1058..7ceb40499f 100644 --- a/indra/newview/llnetmap.cpp +++ b/indra/newview/llnetmap.cpp @@ -36,7 +36,6 @@  #include "indra_constants.h"  #include "llui.h" -#include "linked_lists.h"  #include "llmath.h"		// clampf()  #include "llfocusmgr.h"  #include "llglimmediate.h" diff --git a/indra/newview/lloverlaybar.cpp b/indra/newview/lloverlaybar.cpp index cda921ab8f..237826cb7a 100644 --- a/indra/newview/lloverlaybar.cpp +++ b/indra/newview/lloverlaybar.cpp @@ -331,7 +331,15 @@ void LLOverlayBar::onClickStandUp(void*)  ////////////////////////////////////////////////////////////////////////////////  // static media helpers  // *TODO: Move this into an audio manager abstraction - +//static +void LLOverlayBar::mediaStop(void*) +{ +	if (!gOverlayBar) +	{ +		return; +	} +	LLViewerParcelMedia::stop(); +}  //static  void LLOverlayBar::toggleMediaPlay(void*)  { diff --git a/indra/newview/lloverlaybar.h b/indra/newview/lloverlaybar.h index 741095e408..4fb438a712 100644 --- a/indra/newview/lloverlaybar.h +++ b/indra/newview/lloverlaybar.h @@ -81,6 +81,7 @@ public:  	static void toggleMusicPlay(void*);  	static void musicPause(void*);  	static void musicStop(void*); +	static void mediaStop(void*);  	static void toggleAudioVolumeFloater(void*); diff --git a/indra/newview/llpanelavatar.h b/indra/newview/llpanelavatar.h index 6e5b7bfb41..a598dfebf5 100644 --- a/indra/newview/llpanelavatar.h +++ b/indra/newview/llpanelavatar.h @@ -35,7 +35,6 @@  #include "llpanel.h"  #include "v3dmath.h"  #include "lluuid.h" -#include "linked_lists.h"  #include "llwebbrowserctrl.h"  class LLButton; diff --git a/indra/newview/llpanelobject.cpp b/indra/newview/llpanelobject.cpp index f0acbf4b22..1ad71075ae 100644 --- a/indra/newview/llpanelobject.cpp +++ b/indra/newview/llpanelobject.cpp @@ -164,11 +164,10 @@ BOOL	LLPanelObject::postBuild()  	childSetCommitCallback("material",onCommitMaterial,this);  	mComboMaterial->removeall();  	// *TODO:translate -	LLMaterialInfo *minfop; -	for (minfop = LLMaterialTable::basic.mMaterialInfoList.getFirstData();  -		 minfop != NULL;  -		 minfop = LLMaterialTable::basic.mMaterialInfoList.getNextData()) +	for (LLMaterialTable::info_list_t::iterator iter = LLMaterialTable::basic.mMaterialInfoList.begin(); +		 iter != LLMaterialTable::basic.mMaterialInfoList.end(); ++iter)  	{ +		LLMaterialInfo* minfop = *iter;  		if (minfop->mMCode != LL_MCODE_LIGHT)  		{  			mComboMaterial->add(minfop->mName); diff --git a/indra/newview/llpolymesh.cpp b/indra/newview/llpolymesh.cpp index dc67ff48ea..85d5def673 100644 --- a/indra/newview/llpolymesh.cpp +++ b/indra/newview/llpolymesh.cpp @@ -90,7 +90,8 @@ LLPolyMeshSharedData::LLPolyMeshSharedData()  LLPolyMeshSharedData::~LLPolyMeshSharedData()  {  	freeMeshData(); -	mMorphData.deleteAllData(); +	for_each(mMorphData.begin(), mMorphData.end(), DeletePointer()); +	mMorphData.clear();  }  //----------------------------------------------------------------------------- @@ -604,7 +605,7 @@ BOOL LLPolyMeshSharedData::loadMesh( const char *fileName )  					continue;  				} -				mMorphData.addData(morph_data); +				mMorphData.insert(morph_data);  			}  			S32 numRemaps; @@ -759,11 +760,11 @@ LLPolyMesh *LLPolyMesh::getMesh(const LLString &name, LLPolyMesh* reference_mesh  	//-------------------------------------------------------------------------  	// search for an existing mesh by this name  	//------------------------------------------------------------------------- -	LLPolyMeshSharedData **meshSharedData = sGlobalSharedMeshList.getValue(name); +	LLPolyMeshSharedData* meshSharedData = get_if_there(sGlobalSharedMeshList, name, (LLPolyMeshSharedData*)NULL);  	if (meshSharedData)  	{  //		llinfos << "Polymesh " << name << " found in global mesh table." << llendl; -		LLPolyMesh *poly_mesh = new LLPolyMesh(*meshSharedData, reference_mesh); +		LLPolyMesh *poly_mesh = new LLPolyMesh(meshSharedData, reference_mesh);  		return poly_mesh;  	} @@ -787,7 +788,7 @@ LLPolyMesh *LLPolyMesh::getMesh(const LLString &name, LLPolyMesh* reference_mesh  	LLPolyMesh *poly_mesh = new LLPolyMesh(mesh_data, reference_mesh);  //	llinfos << "Polymesh " << name << " added to global mesh table." << llendl; -	sGlobalSharedMeshList.addToTail(name, poly_mesh->mSharedData); +	sGlobalSharedMeshList[name] = poly_mesh->mSharedData;  	return poly_mesh;  } @@ -797,21 +798,9 @@ LLPolyMesh *LLPolyMesh::getMesh(const LLString &name, LLPolyMesh* reference_mesh  //-----------------------------------------------------------------------------  void LLPolyMesh::freeAllMeshes()  { -	U32 i; -  	// delete each item in the global lists -	for (i=0; i<sGlobalSharedMeshList.length(); i++) -	{ -		// returns a pointer to the value, which is the pointer -		// to the mesh -		LLPolyMeshSharedData **shared_mesh_pp = sGlobalSharedMeshList.getValueAt(i); - -		// delete the mesh -		delete *shared_mesh_pp; -	} - -	// empty the lists -	sGlobalSharedMeshList.removeAll(); +	for_each(sGlobalSharedMeshList.begin(), sGlobalSharedMeshList.end(), DeletePairedPointer()); +	sGlobalSharedMeshList.clear();  }  LLPolyMeshSharedData *LLPolyMesh::getSharedData() const @@ -830,7 +819,7 @@ void LLPolyMesh::dumpDiagInfo()  	U32 total_faces = 0;  	U32 total_kb = 0; -	char buf[1024];		/*Flawfinder: ignore*/ +	std::string buf;  	llinfos << "-----------------------------------------------------" << llendl;  	llinfos << "       Global PolyMesh Table (DEBUG only)" << llendl; @@ -838,18 +827,17 @@ void LLPolyMesh::dumpDiagInfo()  	llinfos << "-----------------------------------------------------" << llendl;  	// print each loaded mesh, and it's memory usage -	for (U32 i=0; i<sGlobalSharedMeshList.length(); i++) +	for(LLPolyMeshSharedDataTable::iterator iter = sGlobalSharedMeshList.begin(); +		iter != sGlobalSharedMeshList.end(); ++iter)  	{ -		std::string *mesh_name_p = sGlobalSharedMeshList.getIndexAt(i); - -		LLPolyMeshSharedData **mesh_pp = sGlobalSharedMeshList.getValueAt(i); -		LLPolyMeshSharedData &mesh = **mesh_pp; +		const std::string& mesh_name = iter->first; +		LLPolyMeshSharedData* mesh = iter->second; -		S32 num_verts = mesh.mNumVertices; -		S32 num_faces = mesh.mNumFaces; -		U32 num_kb = mesh.getNumKB(); +		S32 num_verts = mesh->mNumVertices; +		S32 num_faces = mesh->mNumFaces; +		U32 num_kb = mesh->getNumKB(); -		snprintf(buf, sizeof(buf), "%8d %8d %8d %s", num_verts, num_faces, num_kb, mesh_name_p->c_str());			/* Flawfinder: ignore */ +		buf = llformat("%8d %8d %8d %s", num_verts, num_faces, num_kb, mesh_name.c_str());  		llinfos << buf << llendl;  		total_verts += num_verts; @@ -858,7 +846,7 @@ void LLPolyMesh::dumpDiagInfo()  	}  	llinfos << "-----------------------------------------------------" << llendl; -	snprintf(buf, sizeof(buf), "%8d %8d %8d TOTAL", total_verts, total_faces, total_kb );			/* Flawfinder: ignore */ +	buf = llformat("%8d %8d %8d TOTAL", total_verts, total_faces, total_kb );  	llinfos << buf << llendl;  	llinfos << "-----------------------------------------------------" << llendl;  } @@ -943,11 +931,12 @@ void LLPolyMesh::initializeForMorph()  //-----------------------------------------------------------------------------  LLPolyMorphData*	LLPolyMesh::getMorphData(const char *morph_name)  { -	if (!mSharedData) return NULL; -	for (LLPolyMorphData *morph_data = mSharedData->mMorphData.getFirstData(); -		morph_data; -		morph_data = mSharedData->mMorphData.getNextData()) +	if (!mSharedData) +		return NULL; +	for (LLPolyMeshSharedData::morphdata_list_t::iterator iter = mSharedData->mMorphData.begin(); +		 iter != mSharedData->mMorphData.end(); ++iter)  	{ +		LLPolyMorphData *morph_data = *iter;  		if (!strcmp(morph_data->getName(), morph_name))  		{  			return morph_data; @@ -959,22 +948,25 @@ LLPolyMorphData*	LLPolyMesh::getMorphData(const char *morph_name)  //-----------------------------------------------------------------------------  // removeMorphData()  //----------------------------------------------------------------------------- -void	LLPolyMesh::removeMorphData(LLPolyMorphData *morph_target) -{ -	if (!mSharedData) return; - -	mSharedData->mMorphData.removeData(morph_target); -} +// // erasing but not deleting seems bad, but fortunately we don't actually use this... +// void	LLPolyMesh::removeMorphData(LLPolyMorphData *morph_target) +// { +// 	if (!mSharedData) +// 		return; +// 	mSharedData->mMorphData.erase(morph_target); +// }  //-----------------------------------------------------------------------------  // deleteAllMorphData()  //----------------------------------------------------------------------------- -void	LLPolyMesh::deleteAllMorphData() -{ -	if (!mSharedData) return; +// void	LLPolyMesh::deleteAllMorphData() +// { +// 	if (!mSharedData) +// 		return; -	mSharedData->mMorphData.deleteAllData(); -} +// 	for_each(mSharedData->mMorphData.begin(), mSharedData->mMorphData.end(), DeletePointer()); +// 	mSharedData->mMorphData.clear(); +// }  //-----------------------------------------------------------------------------  // getWritableWeights() diff --git a/indra/newview/llpolymesh.h b/indra/newview/llpolymesh.h index 8003c4a89d..32e500e19d 100644 --- a/indra/newview/llpolymesh.h +++ b/indra/newview/llpolymesh.h @@ -39,10 +39,7 @@  #include "v3math.h"  #include "v2math.h"  #include "llquaternion.h" -#include "llskipmap.h" -#include "llassoclist.h"  #include "llpolymorph.h" -#include "llptrskipmap.h"  #include "lljoint.h"  //#include "lldarray.h" @@ -99,8 +96,8 @@ private:  	std::string*			mJointNames;  	// morph targets -	typedef LLLinkedList<LLPolyMorphData> LLPolyMorphDataList; -	LLPolyMorphDataList			mMorphData; +	typedef std::set<LLPolyMorphData*> morphdata_list_t; +	morphdata_list_t			mMorphData;  	std::map<S32, S32> 			mSharedVerts; @@ -113,11 +110,11 @@ public:  	U32				mNumTriangleIndices;  	U32				*mTriangleIndices; -private: +public:  	LLPolyMeshSharedData(); -  	~LLPolyMeshSharedData(); +private:  	void setupLOD(LLPolyMeshSharedData* reference_data);  	// Frees all mesh memory resources  @@ -315,8 +312,8 @@ public:  	}  	LLPolyMorphData*	getMorphData(const char *morph_name); -	void	removeMorphData(LLPolyMorphData *morph_target); -	void	deleteAllMorphData(); +// 	void	removeMorphData(LLPolyMorphData *morph_target); +// 	void	deleteAllMorphData();  	LLPolyMeshSharedData *getSharedData() const;  	LLPolyMesh *getReferenceMesh() { return mReferenceMesh ? mReferenceMesh : this; } @@ -365,7 +362,7 @@ protected:  	LLPolyMesh				*mReferenceMesh;  	// global mesh list -	typedef LLAssocList<std::string, LLPolyMeshSharedData*> LLPolyMeshSharedDataTable;  +	typedef std::map<LLString, LLPolyMeshSharedData*> LLPolyMeshSharedDataTable;   	static LLPolyMeshSharedDataTable sGlobalSharedMeshList;  	// Backlink only; don't make this an LLPointer. diff --git a/indra/newview/llpolymorph.cpp b/indra/newview/llpolymorph.cpp index 107b51d032..5574ec67c7 100644 --- a/indra/newview/llpolymorph.cpp +++ b/indra/newview/llpolymorph.cpp @@ -35,7 +35,6 @@  #include "llviewerprecompiledheaders.h"  #include "llpolymorph.h" -#include "linked_lists.h"  #include "llvoavatar.h"  #include "llxmltree.h"  #include "llendianswizzle.h" @@ -44,8 +43,6 @@  const F32 NORMAL_SOFTEN_FACTOR = 0.65f; -LLLinkedList<LLPolyMorphData> gLoadedMorphs; -  //-----------------------------------------------------------------------------  // LLPolyMorphData()  //----------------------------------------------------------------------------- @@ -184,8 +181,6 @@ BOOL LLPolyMorphData::loadBinary(FILE *fp, LLPolyMeshSharedData *mesh)  	mAvgDistortion = mAvgDistortion * (1.f/(F32)mNumIndices);  	mAvgDistortion.normVec(); -	gLoadedMorphs.addData(this); -  	return TRUE;  } diff --git a/indra/newview/llpolymorph.h b/indra/newview/llpolymorph.h index 0d6ebc304b..088963584e 100644 --- a/indra/newview/llpolymorph.h +++ b/indra/newview/llpolymorph.h @@ -36,8 +36,6 @@  #include <vector>  #include "llviewervisualparam.h" -#include "llskiplist.h" -#include "linked_lists.h"  class LLPolyMeshSharedData;  class LLVOAvatar; diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index d2e3dc1ed9..f6556ffbd5 100644 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -42,7 +42,6 @@  #include "llglimmediate.h"  #include "llpermissions.h"  #include "llpermissionsflags.h" -#include "llptrskiplist.h"  #include "llundo.h"  #include "lluuid.h"  #include "llvolume.h" diff --git a/indra/newview/lltextureview.h b/indra/newview/lltextureview.h index 60bf63479b..4c5fb1ce68 100644 --- a/indra/newview/lltextureview.h +++ b/indra/newview/lltextureview.h @@ -33,7 +33,6 @@  #define LL_LLTEXTUREVIEW_H  #include "llcontainerview.h" -#include "linked_lists.h"  class LLViewerImage;  class LLTextureBar; diff --git a/indra/newview/lltoolbrush.cpp b/indra/newview/lltoolbrush.cpp index 5a637a6346..d39ce57e56 100644 --- a/indra/newview/lltoolbrush.cpp +++ b/indra/newview/lltoolbrush.cpp @@ -108,10 +108,10 @@ void LLToolBrushLand::modifyLandAtPointGlobal(const LLVector3d &pos_global,  	S32 radioAction = gSavedSettings.getS32("RadioLandBrushAction");  	determineAffectedRegions(mLastAffectedRegions, pos_global); -	for(LLViewerRegion* regionp = mLastAffectedRegions.getFirstData(); -				regionp != NULL; -				regionp = mLastAffectedRegions.getNextData()) +	for(region_list_t::iterator iter = mLastAffectedRegions.begin(); +		iter != mLastAffectedRegions.end(); ++iter)  	{ +		LLViewerRegion* regionp = *iter;  		//BOOL is_changed = FALSE;  		LLVector3 pos_region = regionp->getPosRegionFromGlobal(pos_global);  		LLSurface &land = regionp->getLand(); @@ -200,7 +200,7 @@ void LLToolBrushLand::modifyLandInSelectionGlobal()  	S32 radioAction = gSavedSettings.getS32("RadioLandBrushAction"); -	mLastAffectedRegions.removeAllNodes(); +	mLastAffectedRegions.clear();  	determineAffectedRegions(mLastAffectedRegions, LLVector3d(min.mdV[VX], min.mdV[VY], 0));  	determineAffectedRegions(mLastAffectedRegions, LLVector3d(min.mdV[VX], max.mdV[VY], 0)); @@ -223,10 +223,10 @@ void LLToolBrushLand::modifyLandInSelectionGlobal()  	}  	// Stop if our selection include a no-terraform region -	for(LLViewerRegion* regionp = mLastAffectedRegions.getFirstData(); -				regionp != NULL; -				regionp = mLastAffectedRegions.getNextData()) +	for(region_list_t::iterator iter = mLastAffectedRegions.begin(); +		iter != mLastAffectedRegions.end(); ++iter)  	{ +		LLViewerRegion* regionp = *iter;  		if (!canTerraform(regionp))  		{  			alertNoTerraform(regionp); @@ -234,10 +234,10 @@ void LLToolBrushLand::modifyLandInSelectionGlobal()  		}  	} -	for(LLViewerRegion* regionp = mLastAffectedRegions.getFirstData(); -				regionp != NULL; -				regionp = mLastAffectedRegions.getNextData()) +	for(region_list_t::iterator iter = mLastAffectedRegions.begin(); +		iter != mLastAffectedRegions.end(); ++iter)  	{ +		LLViewerRegion* regionp = *iter;  		//BOOL is_changed = FALSE;  		LLVector3 min_region = regionp->getPosRegionFromGlobal(min);  		LLVector3 max_region = regionp->getPosRegionFromGlobal(max); @@ -398,7 +398,7 @@ BOOL LLToolBrushLand::handleHover( S32 x, S32 y, MASK mask )  BOOL LLToolBrushLand::handleMouseUp(S32 x, S32 y, MASK mask)  {  	BOOL handled = FALSE; -	mLastAffectedRegions.removeAllNodes(); +	mLastAffectedRegions.clear();  	if( hasMouseCapture() )  	{  		// Release the mouse @@ -452,15 +452,15 @@ void LLToolBrushLand::render()  			spot.mdV[VY] = floor( spot.mdV[VY] + 0.5 );  			mBrushIndex = gSavedSettings.getS32("RadioLandBrushSize"); -			LLLinkedList<LLViewerRegion> regions; +			region_list_t regions;  			determineAffectedRegions(regions, spot);  			// Now, for each region, render the overlay  			LLVector3 pos_world = gAgent.getRegion()->getPosRegionFromGlobal(spot); -			for(LLViewerRegion* region = regions.getFirstData(); -				region != NULL; -				region = regions.getNextData()) +			for(region_list_t::iterator iter = regions.begin(); +				iter != regions.end(); ++iter)  			{ +				LLViewerRegion* region = *iter;  				renderOverlay(region->getLand(),   							  region->getPosRegionFromGlobal(spot),  							  pos_world); @@ -499,7 +499,7 @@ void LLToolBrushLand::renderOverlay(LLSurface& land, const LLVector3& pos_region  	glPopMatrix();  } -void LLToolBrushLand::determineAffectedRegions(LLLinkedList<LLViewerRegion>& regions, +void LLToolBrushLand::determineAffectedRegions(region_list_t& regions,  											   const LLVector3d& spot ) const  {  	LLVector3d corner(spot); @@ -507,27 +507,27 @@ void LLToolBrushLand::determineAffectedRegions(LLLinkedList<LLViewerRegion>& reg  	corner.mdV[VY] -= (LAND_BRUSH_SIZE[mBrushIndex] / 2);  	LLViewerRegion* region = NULL;  	region = gWorldPointer->getRegionFromPosGlobal(corner); -	if(region && !regions.checkData(region)) +	if(region && regions.find(region) == regions.end())  	{ -		regions.addData(region); +		regions.insert(region);  	}  	corner.mdV[VY] += LAND_BRUSH_SIZE[mBrushIndex];  	region = gWorldPointer->getRegionFromPosGlobal(corner); -	if(region && !regions.checkData(region)) +	if(region && regions.find(region) == regions.end())  	{ -		regions.addData(region); +		regions.insert(region);  	}  	corner.mdV[VX] += LAND_BRUSH_SIZE[mBrushIndex];  	region = gWorldPointer->getRegionFromPosGlobal(corner); -	if(region && !regions.checkData(region)) +	if(region && regions.find(region) == regions.end())  	{ -		regions.addData(region); +		regions.insert(region);  	}  	corner.mdV[VY] -= LAND_BRUSH_SIZE[mBrushIndex];  	region = gWorldPointer->getRegionFromPosGlobal(corner); -	if(region && !regions.checkData(region)) +	if(region && regions.find(region) == regions.end())  	{ -		regions.addData(region); +		regions.insert(region);  	}  } @@ -554,10 +554,10 @@ void LLToolBrushLand::onMouseCaptureLost()  // static  void LLToolBrushLand::undo()  { -	for(LLViewerRegion* regionp = mLastAffectedRegions.getFirstData(); -			regionp != NULL; -			regionp = mLastAffectedRegions.getNextData()) +	for(region_list_t::iterator iter = mLastAffectedRegions.begin(); +		iter != mLastAffectedRegions.end(); ++iter)  	{ +		LLViewerRegion* regionp = *iter;  		gMessageSystem->newMessageFast(_PREHASH_UndoLand);  		gMessageSystem->nextBlockFast(_PREHASH_AgentData);  		gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() ); @@ -570,10 +570,10 @@ void LLToolBrushLand::undo()  /*  void LLToolBrushLand::redo()  { -	for(LLViewerRegion* regionp = mLastAffectedRegions.getFirstData(); -			regionp != NULL; -			regionp = mLastAffectedRegions.getNextData()) +	for(region_list_t::iterator iter = mLastAffectedRegions.begin(); +		iter != mLastAffectedRegions.end(); ++iter)  	{ +		LLViewerRegion* regionp = *iter;  		gMessageSystem->newMessageFast(_PREHASH_RedoLand);  		gMessageSystem->nextBlockFast(_PREHASH_AgentData);  		gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() ); diff --git a/indra/newview/lltoolbrush.h b/indra/newview/lltoolbrush.h index 738934ebb1..c46037a8f7 100644 --- a/indra/newview/lltoolbrush.h +++ b/indra/newview/lltoolbrush.h @@ -40,8 +40,6 @@ class LLSurface;  class LLVector3d;  class LLViewerRegion; -template<class DATA_TYPE> class LLLinkedList; -  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  // Class LLToolBrushLand  // @@ -50,6 +48,8 @@ template<class DATA_TYPE> class LLLinkedList;  class LLToolBrushLand : public LLTool, public LLEditMenuHandler  { +	typedef std::set<LLViewerRegion*> region_list_t; +  public:  	LLToolBrushLand(); @@ -80,7 +80,7 @@ protected:  	void brush( void );  	void modifyLandAtPointGlobal( const LLVector3d &spot, MASK mask ); -	void determineAffectedRegions(LLLinkedList<LLViewerRegion>& regions, +	void determineAffectedRegions(region_list_t& regions,  								  const LLVector3d& spot) const;  	void renderOverlay(LLSurface& land, const LLVector3& pos_region,  					   const LLVector3& pos_world); @@ -99,7 +99,8 @@ protected:  	BOOL mGotHover;  	BOOL mLastShowParcelOwners;  	BOOL mBrushSelected; -	LLLinkedList<LLViewerRegion> mLastAffectedRegions; +	// Order doesn't matter and we do check for existance of regions, so use a set +	region_list_t mLastAffectedRegions;  };  extern LLToolBrushLand *gToolLand; diff --git a/indra/newview/lltoolmgr.cpp b/indra/newview/lltoolmgr.cpp index 0e46ece794..c365f14674 100644 --- a/indra/newview/lltoolmgr.cpp +++ b/indra/newview/lltoolmgr.cpp @@ -438,9 +438,7 @@ void LLToolMgr::clearSavedTool()  void LLToolset::addTool(LLTool* tool)  { -	llassert( !mToolList.checkData( tool ) ); // check for duplicates - -	mToolList.addDataAtEnd( tool ); +	mToolList.push_back( tool );  	if( !mSelectedTool )  	{  		mSelectedTool = tool; @@ -457,7 +455,7 @@ void LLToolset::selectTool(LLTool* tool)  void LLToolset::selectToolByIndex( S32 index )  { -	LLTool *tool = mToolList.getNthData( index ); +	LLTool *tool = (index >= 0 && index < (S32)mToolList.size()) ? mToolList[index] : NULL;  	if (tool)  	{  		mSelectedTool = tool; @@ -467,13 +465,14 @@ void LLToolset::selectToolByIndex( S32 index )  BOOL LLToolset::isToolSelected( S32 index )  { -	return (mToolList.getNthData( index ) == mSelectedTool); +	LLTool *tool = (index >= 0 && index < (S32)mToolList.size()) ? mToolList[index] : NULL; +	return (tool == mSelectedTool);  }  void LLToolset::selectFirstTool()  { -	mSelectedTool = mToolList.getFirstData(); +	mSelectedTool = (0 < mToolList.size()) ? mToolList[0] : NULL;  	if (gToolMgr)   	{  		gToolMgr->setCurrentTool( mSelectedTool ); @@ -484,43 +483,52 @@ void LLToolset::selectFirstTool()  void LLToolset::selectNextTool()  {  	LLTool* next = NULL; -	for( LLTool* cur = mToolList.getFirstData(); cur; cur = mToolList.getNextData() ) +	for( tool_list_t::iterator iter = mToolList.begin(); +		 iter != mToolList.end(); )  	{ -		if( cur == mSelectedTool ) +		LLTool* cur = *iter++; +		if( cur == mSelectedTool && iter != mToolList.end() )  		{ -			next = mToolList.getNextData(); +			next = *iter;  			break;  		}  	} -	if( !next ) +	if( next )  	{ -		next = mToolList.getFirstData(); +		mSelectedTool = next; +		gToolMgr->setCurrentTool( mSelectedTool ); +	} +	else +	{ +		selectFirstTool();  	} - -	mSelectedTool = next; -	gToolMgr->setCurrentTool( mSelectedTool );  }  void LLToolset::selectPrevTool()  {  	LLTool* prev = NULL; -	for( LLTool* cur = mToolList.getLastData(); cur; cur = mToolList.getPreviousData() ) +	for( tool_list_t::reverse_iterator iter = mToolList.rbegin(); +		 iter != mToolList.rend(); )  	{ -		if( cur == mSelectedTool ) +		LLTool* cur = *iter++; +		if( cur == mSelectedTool && iter != mToolList.rend() )  		{ -			prev = mToolList.getPreviousData(); +			prev = *iter;  			break;  		}  	} -	if( !prev ) +	if( prev )  	{ -		prev = mToolList.getLastData(); +		mSelectedTool = prev; +		gToolMgr->setCurrentTool( mSelectedTool ); +	} +	else if (mToolList.size() > 0) +	{ +		selectToolByIndex((S32)mToolList.size()-1);  	} -	mSelectedTool = prev; -	gToolMgr->setCurrentTool( mSelectedTool );  }  void select_tool( void *tool_pointer ) diff --git a/indra/newview/lltoolmgr.h b/indra/newview/lltoolmgr.h index 557208be7b..c1e144b252 100644 --- a/indra/newview/lltoolmgr.h +++ b/indra/newview/lltoolmgr.h @@ -32,7 +32,6 @@  #ifndef LL_TOOLMGR_H  #define LL_TOOLMGR_H -#include "doublelinkedlist.h"  #include "llkeyboard.h"  class LLTool; @@ -108,7 +107,8 @@ public:  protected:  	LLTool*			mSelectedTool; -	LLDoubleLinkedList<LLTool> mToolList; +	typedef std::vector<LLTool*> tool_list_t; +	tool_list_t 	mToolList;  };  // Handy callbacks for switching tools diff --git a/indra/newview/lltoolmorph.cpp b/indra/newview/lltoolmorph.cpp index e32f9bfcc1..25d20f96aa 100644 --- a/indra/newview/lltoolmorph.cpp +++ b/indra/newview/lltoolmorph.cpp @@ -67,7 +67,7 @@  //LLToolMorph *gToolMorph = NULL;  //static -LLLinkedList<LLVisualParamHint> LLVisualParamHint::sInstances; +LLVisualParamHint::instance_list_t LLVisualParamHint::sInstances;  BOOL LLVisualParamReset::sDirty = FALSE;  //----------------------------------------------------------------------------- @@ -93,7 +93,7 @@ LLVisualParamHint::LLVisualParamHint(  	mRect( pos_x, pos_y + height, pos_x + width, pos_y ),  	mLastParamWeight(0.f)  { -	LLVisualParamHint::sInstances.addData( this ); +	LLVisualParamHint::sInstances.insert( this );  	LLUUID id;  	id.set( gViewerArt.getString("avatar_thumb_bkgrnd.tga") );  	mBackgroundp = gImageList.getImage(id, FALSE, TRUE); @@ -108,7 +108,7 @@ LLVisualParamHint::LLVisualParamHint(  //-----------------------------------------------------------------------------  LLVisualParamHint::~LLVisualParamHint()  { -	LLVisualParamHint::sInstances.removeData( this ); +	LLVisualParamHint::sInstances.erase( this );  }  //----------------------------------------------------------------------------- @@ -119,10 +119,10 @@ LLVisualParamHint::~LLVisualParamHint()  void LLVisualParamHint::requestHintUpdates( LLVisualParamHint* exception1, LLVisualParamHint* exception2 )  {  	S32 delay_frames = 0; -	for(LLVisualParamHint* instance = sInstances.getFirstData(); -		instance; -		instance = sInstances.getNextData()) +	for (instance_list_t::iterator iter = sInstances.begin(); +		 iter != sInstances.end(); ++iter)  	{ +		LLVisualParamHint* instance = *iter;  		if( (instance != exception1) && (instance != exception2) )  		{  			if( instance->mAllowsUpdates ) diff --git a/indra/newview/lltoolmorph.h b/indra/newview/lltoolmorph.h index 72e73b0934..4c3489b35f 100644 --- a/indra/newview/lltoolmorph.h +++ b/indra/newview/lltoolmorph.h @@ -35,7 +35,6 @@  #include "lltool.h"  #include "m4math.h"  #include "v2math.h" -#include "linked_lists.h"  #include "lldynamictexture.h"  #include "llundo.h"  #include "lltextbox.h" @@ -93,8 +92,9 @@ protected:  	F32						mLastParamWeight;  	LLPointer<LLViewerImage> mBackgroundp; -	 -	static LLLinkedList<LLVisualParamHint> sInstances; + +	typedef std::set<LLVisualParamHint*> instance_list_t; +	static instance_list_t sInstances;  };  // this class resets avatar data at the end of an update cycle diff --git a/indra/newview/lltoolview.cpp b/indra/newview/lltoolview.cpp index 93729a5b91..ad7a980091 100644 --- a/indra/newview/lltoolview.cpp +++ b/indra/newview/lltoolview.cpp @@ -72,7 +72,8 @@ LLToolView::LLToolView(const std::string& name, const LLRect& rect)  LLToolView::~LLToolView()  { -	mContainList.deleteAllData(); +	for_each(mContainList.begin(), mContainList.end(), DeletePointer()); +	mContainList.clear();  }  //*TODO:translate? @@ -118,7 +119,7 @@ void LLToolView::addTool(const LLString& icon_off, const LLString& icon_on, LLPa  		addChild(contain->mPanel);  	} -	mContainList.addData(contain); +	mContainList.push_back(contain);  } @@ -153,11 +154,10 @@ void LLToolView::draw()  	// turn off highlighting for all containers   	// and hide all option panels except for the selected one.  	LLTool* selected = gToolMgr->getCurrentToolset()->getSelectedTool(); -	for( LLToolContainer* contain = mContainList.getFirstData(); -		 contain != NULL; -		 contain = mContainList.getNextData() -		) +	for (contain_list_t::iterator iter = mContainList.begin(); +		 iter != mContainList.end(); ++iter)  	{ +		LLToolContainer* contain = *iter;  		BOOL state = (contain->mTool == selected);  		contain->mButton->setToggleState( state );  		if (contain->mPanel) @@ -175,8 +175,10 @@ LLToolContainer* LLToolView::findToolContainer( LLTool *tool )  {  	// Find the container for this tool  	llassert( tool ); -	for( LLToolContainer* contain = mContainList.getFirstData(); contain; contain = mContainList.getNextData() ) +	for (contain_list_t::iterator iter = mContainList.begin(); +		 iter != mContainList.end(); ++iter)  	{ +		LLToolContainer* contain = *iter;  		if( contain->mTool == tool )  		{  			return contain; diff --git a/indra/newview/lltoolview.h b/indra/newview/lltoolview.h index bde0010466..23f4263602 100644 --- a/indra/newview/lltoolview.h +++ b/indra/newview/lltoolview.h @@ -33,7 +33,6 @@  #define LL_LLTOOLVIEW_H  // requires stdtypes.h -#include "linked_lists.h"  #include "llpanel.h"  // forward declares @@ -84,8 +83,8 @@ private:  private: -	LLLinkedList -		<LLToolContainer>	mContainList; +	typedef std::vector<LLToolContainer*> contain_list_t; +	contain_list_t 			mContainList;  	S32						mButtonCount;			// used to compute rectangles  }; diff --git a/indra/newview/lluploaddialog.cpp b/indra/newview/lluploaddialog.cpp index b9f2ef2ddf..ac41e02744 100644 --- a/indra/newview/lluploaddialog.cpp +++ b/indra/newview/lluploaddialog.cpp @@ -100,7 +100,7 @@ void LLUploadDialog::setMessage( const std::string& msg)  	// Split message into lines, separated by '\n'  	S32 max_msg_width = 0; -	LLDoubleLinkedList<LLString> msg_lines; +	std::list<std::string> msg_lines;  	S32 size = msg.size() + 1;// + strlen("Uploading...\n\n");  	char* temp_msg = new char[size]; @@ -118,7 +118,7 @@ void LLUploadDialog::setMessage( const std::string& msg)  	{  		S32 cur_width = S32(font->getWidth(token) + 0.99f) + TEXT_PAD;  		max_msg_width = llmax( max_msg_width, cur_width ); -		msg_lines.addDataAtEnd( new LLString( token ) ); +		msg_lines.push_back( std::string( token ) );  		token = strtok( NULL, "\n" );  	}  	delete[] temp_msg; @@ -126,7 +126,7 @@ void LLUploadDialog::setMessage( const std::string& msg)  	S32 line_height = S32( font->getLineHeight() + 0.99f );  	S32 dialog_width = max_msg_width + 2 * HPAD; -	S32 dialog_height = line_height * msg_lines.getLength() + 2 * VPAD; +	S32 dialog_height = line_height * msg_lines.size() + 2 * VPAD;  	reshape( dialog_width, dialog_height, FALSE ); @@ -139,18 +139,19 @@ void LLUploadDialog::setMessage( const std::string& msg)  		mLabelBox[line_num]->setVisible(FALSE);  	}  	line_num = 0; -	for( LLString* cur_line = msg_lines.getFirstData(); cur_line; cur_line = msg_lines.getNextData() ) +	for (std::list<std::string>::iterator iter = msg_lines.begin(); +		 iter != msg_lines.end(); ++iter)  	{ +		std::string& cur_line = *iter;  		LLRect msg_rect;  		msg_rect.setOriginAndSize( msg_x, msg_y, max_msg_width, line_height );  		mLabelBox[line_num]->setRect(msg_rect); -		mLabelBox[line_num]->setText(*cur_line); +		mLabelBox[line_num]->setText(cur_line);  		mLabelBox[line_num]->setColor( gColors.getColor( "LabelTextColor" ) );  		mLabelBox[line_num]->setVisible(TRUE);  		msg_y -= line_height;  		++line_num;  	} -	msg_lines.deleteAllData();  	centerWithin(gViewerWindow->getRootView()->getRect());  } diff --git a/indra/newview/llurlhistory.cpp b/indra/newview/llurlhistory.cpp index 8f9c926616..d5241a4e98 100644 --- a/indra/newview/llurlhistory.cpp +++ b/indra/newview/llurlhistory.cpp @@ -62,6 +62,7 @@ bool LLURLHistory::loadFile(const LLString& filename)  			llinfos << "file missing, ill-formed, "  				"or simply undefined; not changing the"  				" file" << llendl; +			sHistorySD = LLSD();  			return false;  		}  	} @@ -100,8 +101,11 @@ LLSD LLURLHistory::getURLHistory(const std::string& collection)  // static  void LLURLHistory::addURL(const std::string& collection, const std::string& url)  { -	sHistorySD[collection].insert(0, url); -	LLURLHistory::limitSize(collection); +	if(! url.empty()) +	{ +		sHistorySD[collection].insert(0, url); +		LLURLHistory::limitSize(collection); +	}  }  // static  void LLURLHistory::removeURL(const std::string& collection, const std::string& url) diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 16cbb3272f..5200c321db 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -4121,7 +4121,7 @@ void process_alert_core(const std::string& message, BOOL modal)  	}  } -LLLinkedList<LLMeanCollisionData>	gMeanCollisionList; +mean_collision_list_t				gMeanCollisionList;  time_t								gLastDisplayedTime = 0;  void handle_show_mean_events(void *) @@ -4141,15 +4141,19 @@ void mean_name_callback(const LLUUID &id, const char *first, const char *last, B  		return;  	} -	while(gMeanCollisionList.getLength() > 20) +	static const int max_collision_list_size = 20; +	if (gMeanCollisionList.size() > max_collision_list_size)  	{ -		gMeanCollisionList.getLastData(); -		gMeanCollisionList.deleteCurrentData(); +		mean_collision_list_t::iterator iter = gMeanCollisionList.begin(); +		for (S32 i=0; i<max_collision_list_size; i++) iter++; +		for_each(iter, gMeanCollisionList.end(), DeletePointer()); +		gMeanCollisionList.erase(iter, gMeanCollisionList.end());  	} -	LLMeanCollisionData *mcd; -	for (mcd = gMeanCollisionList.getFirstData(); mcd; mcd = gMeanCollisionList.getNextData()) +	for (mean_collision_list_t::iterator iter = gMeanCollisionList.begin(); +		 iter != gMeanCollisionList.end(); ++iter)  	{ +		LLMeanCollisionData *mcd = *iter;  		if (mcd->mPerp == id)  		{  			strncpy(mcd->mFirstName, first, DB_FIRST_NAME_BUF_SIZE -1);		/* Flawfinder: ignore */ @@ -4190,12 +4194,12 @@ void process_mean_collision_alert_message(LLMessageSystem *msgsystem, void **use  		type = (EMeanCollisionType)u8type; -		LLMeanCollisionData *mcd; -  		BOOL b_found = FALSE; -		for (mcd = gMeanCollisionList.getFirstData(); mcd; mcd = gMeanCollisionList.getNextData()) +		for (mean_collision_list_t::iterator iter = gMeanCollisionList.begin(); +			 iter != gMeanCollisionList.end(); ++iter)  		{ +			LLMeanCollisionData *mcd = *iter;  			if ((mcd->mPerp == perp) && (mcd->mType == type))  			{  				mcd->mTime = time; @@ -4208,7 +4212,7 @@ void process_mean_collision_alert_message(LLMessageSystem *msgsystem, void **use  		if (!b_found)  		{  			LLMeanCollisionData *mcd = new LLMeanCollisionData(gAgentID, perp, time, type, mag); -			gMeanCollisionList.addData(mcd); +			gMeanCollisionList.push_front(mcd);  			const BOOL is_group = FALSE;  			gCacheName->get(perp, is_group, mean_name_callback);  		} diff --git a/indra/newview/llviewermessage.h b/indra/newview/llviewermessage.h index f7739f0871..23783058a0 100644 --- a/indra/newview/llviewermessage.h +++ b/indra/newview/llviewermessage.h @@ -111,6 +111,9 @@ void process_agent_alert_message(LLMessageSystem* msgsystem, void** user_data);  void process_alert_core(const std::string& message, BOOL modal);  // "Mean" or player-vs-player abuse +typedef std::list<LLMeanCollisionData*> mean_collision_list_t; +extern mean_collision_list_t gMeanCollisionList; +  void handle_show_mean_events(void *);  void process_mean_collision_alert_message(LLMessageSystem* msg, void**); diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 602b60bc9d..e89722fde8 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -2292,7 +2292,7 @@ void LLViewerObject::dirtyInventory()  	// If there aren't any LLVOInventoryListeners, we won't be  	// able to update our mInventory when it comes back from the  	// simulator, so we should not clear the inventory either. -	if(mInventory && !mInventoryCallbacks.isEmpty()) +	if(mInventory && !mInventoryCallbacks.empty())  	{  		mInventory->clear(); // will deref and delete entries  		delete mInventory; @@ -2308,20 +2308,22 @@ void LLViewerObject::registerInventoryListener(LLVOInventoryListener* listener,  	LLInventoryCallbackInfo* info = new LLInventoryCallbackInfo;  	info->mListener = listener;  	info->mInventoryData = user_data; -	mInventoryCallbacks.addData(info); +	mInventoryCallbacks.push_front(info);  }  void LLViewerObject::removeInventoryListener(LLVOInventoryListener* listener)  { -	if (listener == NULL) return; -	LLInventoryCallbackInfo* info; -	for (info = mInventoryCallbacks.getFirstData(); -		info; -		info = mInventoryCallbacks.getNextData() ) +	if (listener == NULL) +		return; +	for (callback_list_t::iterator iter = mInventoryCallbacks.begin(); +		 iter != mInventoryCallbacks.end(); )  	{ +		callback_list_t::iterator curiter = iter++; +		LLInventoryCallbackInfo* info = *curiter;  		if (info->mListener == listener)  		{ -			mInventoryCallbacks.deleteCurrentData(); +			delete info; +			mInventoryCallbacks.erase(curiter);  			break;  		}  	} @@ -2329,7 +2331,8 @@ void LLViewerObject::removeInventoryListener(LLVOInventoryListener* listener)  void LLViewerObject::clearInventoryListeners()  { -	mInventoryCallbacks.deleteAllData(); +	for_each(mInventoryCallbacks.begin(), mInventoryCallbacks.end(), DeletePointer()); +	mInventoryCallbacks.clear();  }  void LLViewerObject::requestInventory() @@ -2518,10 +2521,11 @@ void LLViewerObject::loadTaskInvFile(const char* filename)  void LLViewerObject::doInventoryCallback()  { -	for(LLInventoryCallbackInfo* info = mInventoryCallbacks.getFirstData(); -		info != NULL; -		info = mInventoryCallbacks.getNextData()) +	for (callback_list_t::iterator iter = mInventoryCallbacks.begin(); +		 iter != mInventoryCallbacks.end(); )  	{ +		callback_list_t::iterator curiter = iter++; +		LLInventoryCallbackInfo* info = *curiter;  		if (info->mListener != NULL)  		{  			info->mListener->inventoryChanged(this, @@ -2532,7 +2536,8 @@ void LLViewerObject::doInventoryCallback()  		else  		{  			llinfos << "LLViewerObject::doInventoryCallback() deleting bad listener entry." << llendl; -			mInventoryCallbacks.deleteCurrentData(); +			delete info; +			mInventoryCallbacks.erase(curiter);  		}  	}  	mInventoryPending = FALSE; diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h index c11c3c891e..38744c35cf 100644 --- a/indra/newview/llviewerobject.h +++ b/indra/newview/llviewerobject.h @@ -34,7 +34,6 @@  #include <map> -#include "linked_lists.h"  #include "llassetstorage.h"  #include "lldarrayptr.h"  #include "llhudtext.h" @@ -591,7 +590,8 @@ protected:  		LLVOInventoryListener* mListener;  		void* mInventoryData;  	}; -	LLLinkedList<LLInventoryCallbackInfo> mInventoryCallbacks; +	typedef std::list<LLInventoryCallbackInfo*> callback_list_t; +	callback_list_t mInventoryCallbacks;  	S16 mInventorySerialNum;  	LLViewerRegion	*mRegionp;					// Region that this object belongs to. diff --git a/indra/newview/llviewerobjectlist.h b/indra/newview/llviewerobjectlist.h index 95c65d15ce..39603cfd3b 100644 --- a/indra/newview/llviewerobjectlist.h +++ b/indra/newview/llviewerobjectlist.h @@ -36,10 +36,8 @@  #include <set>  // common includes -#include "doublelinkedlist.h"  #include "llstat.h"  #include "lldarrayptr.h" -#include "llskipmap.h"  #include "llstring.h"  // project includes diff --git a/indra/newview/llviewerpartsim.h b/indra/newview/llviewerpartsim.h index 51b8e5a42a..343425f3d4 100644 --- a/indra/newview/llviewerpartsim.h +++ b/indra/newview/llviewerpartsim.h @@ -33,7 +33,6 @@  #define LL_LLVIEWERPARTSIM_H  #include "lldarrayptr.h" -#include "llskiplist.h"  #include "llframetimer.h"  #include "llmemory.h" diff --git a/indra/newview/llviewerprecompiledheaders.h b/indra/newview/llviewerprecompiledheaders.h index 0e0265d30b..ce0fe2c836 100644 --- a/indra/newview/llviewerprecompiledheaders.h +++ b/indra/newview/llviewerprecompiledheaders.h @@ -68,21 +68,17 @@  // Library headers from llcommon project:  #include "bitpack.h" -#include "doublelinkedlist.h"  #include "imageids.h"  #include "indra_constants.h"  //#include "linden_common.h"  //#include "llpreprocessor.h" -#include "linked_lists.h"  #include "llapp.h"  #include "llapr.h" -#include "llassoclist.h"  #include "llcriticaldamp.h"  #include "lldarray.h"  #include "lldarrayptr.h"  #include "lldefs.h"  #include "lldepthstack.h" -#include "lldlinked.h"  #include "lldqueueptr.h"  #include "llendianswizzle.h"  #include "llerror.h" @@ -90,18 +86,13 @@  #include "llfixedbuffer.h"  #include "llframetimer.h"  #include "llhash.h" -#include "lllinkedqueue.h"  #include "lllocalidhashmap.h"  #include "llmap.h"  #include "llmemory.h"  #include "llnametable.h"  #include "llpriqueuemap.h"  #include "llprocessor.h" -#include "llptrskiplist.h" -#include "llptrskipmap.h"  //#include "llsecondlifeurls.h" -#include "llskiplist.h" -#include "llskipmap.h"  #include "llstack.h"  #include "llstat.h"  #include "llstl.h" @@ -170,7 +161,6 @@  // Library includes from llmessage project  //#include "llassetstorage.h"  #include "llcachename.h" -#include "llcallbacklisth.h"  #include "llcircuit.h"  #include "lldatapacker.h"  #include "lldbstrings.h" diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index 42654e250b..88271aa7f6 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -98,7 +98,6 @@ LLViewerRegion::LLViewerRegion(const U64 &handle,  	mBillableFactor(1.0),  	mMaxTasks(MAX_TASKS_PER_REGION),  	mCacheLoaded(FALSE), -	mCacheMap(),  	mCacheEntriesCount(0),  	mCacheID(),  	mEventPoll(NULL) @@ -343,7 +342,7 @@ void LLViewerRegion::saveCache()  		entry->writeToFile(fp);  	} -	mCacheMap.removeAllData(); +	mCacheMap.clear();  	mCacheEnd.unlink();  	mCacheEnd.init();  	mCacheStart.deleteAll(); @@ -1013,7 +1012,7 @@ void LLViewerRegion::cacheFullUpdate(LLViewerObject* objectp, LLDataPackerBinary  	U32 local_id = objectp->getLocalID();  	U32 crc = objectp->getCRC(); -	LLVOCacheEntry *entry = mCacheMap.getIfThere(local_id); +	LLVOCacheEntry* entry = get_if_there(mCacheMap, local_id, (LLVOCacheEntry*)NULL);  	if (entry)  	{ @@ -1026,7 +1025,7 @@ void LLViewerRegion::cacheFullUpdate(LLViewerObject* objectp, LLDataPackerBinary  		else  		{  			// Update the cache entry -			mCacheMap.removeData(local_id); +			mCacheMap.erase(local_id);  			delete entry;  			entry = new LLVOCacheEntry(local_id, crc, dp);  			mCacheEnd.insert(*entry); @@ -1041,7 +1040,7 @@ void LLViewerRegion::cacheFullUpdate(LLViewerObject* objectp, LLDataPackerBinary  		if (mCacheEntriesCount > MAX_OBJECT_CACHE_ENTRIES)  		{  			entry = mCacheStart.getNext(); -			mCacheMap.removeData(entry->getLocalID()); +			mCacheMap.erase(entry->getLocalID());  			delete entry;  			mCacheEntriesCount--;  		} @@ -1060,7 +1059,7 @@ LLDataPacker *LLViewerRegion::getDP(U32 local_id, U32 crc)  {  	llassert(mCacheLoaded); -	LLVOCacheEntry *entry = mCacheMap.getIfThere(local_id); +	LLVOCacheEntry* entry = get_if_there(mCacheMap, local_id, (LLVOCacheEntry*)NULL);  	if (entry)  	{ diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h index 3d5334cd18..6625e3bdf6 100644 --- a/indra/newview/llviewerregion.h +++ b/indra/newview/llviewerregion.h @@ -44,7 +44,6 @@  #include "llhost.h"  #include "llstring.h"  #include "llregionflags.h" -#include "llptrskipmap.h"  #include "lluuid.h"  #include "lldatapacker.h"  #include "llvocache.h" @@ -352,7 +351,8 @@ protected:  	// Regions can have order 10,000 objects, so assume  	// a structure of size 2^14 = 16,000  	BOOL									mCacheLoaded; -	LLPtrSkipMap<U32, LLVOCacheEntry *, 14>	mCacheMap; +	typedef std::map<U32, LLVOCacheEntry *>	cache_map_t; +	cache_map_t			  				 	mCacheMap;  	LLVOCacheEntry							mCacheStart;  	LLVOCacheEntry							mCacheEnd;  	U32										mCacheEntriesCount; diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index d1e67bfbbd..dcceb397d3 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -57,7 +57,6 @@  // linden library includes  #include "audioengine.h"		// mute on minimize  #include "indra_constants.h" -#include "linked_lists.h"  #include "llassetstorage.h"  #include "llfontgl.h"  #include "llrect.h" @@ -1812,18 +1811,23 @@ void adjust_rect_bottom_center(const LLString& control, const LLRect& window)  	}  } - -void update_saved_window_size(const LLString& control,S32 delta_width, S32 delta_height) +void adjust_rect_centered_partial_zoom(const LLString& control, +									   const LLRect& window)  { -	if (delta_width || delta_height ) -	{ -		LLRect mXMLRect = gSavedSettings.getRect(control); -		//hard code it all follows the right and top -		mXMLRect.mRight += delta_width; -		mXMLRect.mTop += delta_height; -		mXMLRect.mLeft = llmax (0, mXMLRect.mLeft+delta_width); -		mXMLRect.mBottom = llmax(0,mXMLRect.mBottom+delta_height); -		gSavedSettings.setRect(control,mXMLRect); +	LLRect rect = gSavedSettings.getRect(control); +	// Only adjust on first use +	if (rect.mLeft == 0 && rect.mBottom == 0) +	{ +		S32 width = window.getWidth(); +		S32 height = window.getHeight(); +		rect.set(0, height-STATUS_BAR_HEIGHT, width, TOOL_BAR_HEIGHT); +		// Make floater fill 80% of window, leaving 20% padding on +		// the sides. +		const F32 ZOOM_FRACTION = 0.8f; +		S32 dx = (S32)(width * (1.f - ZOOM_FRACTION)); +		S32 dy = (S32)(height * (1.f - ZOOM_FRACTION)); +		rect.stretch(-dx/2, -dy/2); +		gSavedSettings.setRect(control, rect);  	}  } @@ -1848,7 +1852,7 @@ void LLViewerWindow::adjustRectanglesForFirstUse(const LLRect& window)  	adjust_rect_top_left("FloaterGestureRect2", window); -	adjust_rect_top_right("FloaterMapRect", window); +	adjust_rect_top_right("FloaterMiniMapRect", window);  	adjust_rect_top_right("FloaterLagMeter", window); @@ -1917,17 +1921,8 @@ void LLViewerWindow::initWorldUI()  		LLWorldMapView::initClass(); -		LLRect world_map_rect = gSavedSettings.getRect("FloaterWorldMapRect"); -		// if 0,0,0,0 then use fullscreen -		if (world_map_rect.mTop == 0  -			&& world_map_rect.mLeft == 0 -			&& world_map_rect.mRight == 0 -			&& world_map_rect.mBottom == 0) -		{ -			world_map_rect.set(0, height-TOOL_BAR_HEIGHT, width, STATUS_BAR_HEIGHT); -			world_map_rect.stretch(-4); -			gSavedSettings.setRect("FloaterWorldMapRect", world_map_rect); -		} +		adjust_rect_centered_partial_zoom("FloaterWorldMapRect2", full_window); +  		gFloaterWorldMap = new LLFloaterWorldMap();  		gFloaterWorldMap->setVisible(FALSE); @@ -2121,9 +2116,6 @@ void LLViewerWindow::reshape(S32 width, S32 height)  			}  		} -		// changes in window's width and hight -		S32 delta_width  = width - mWindowRect.getWidth(); -		S32 delta_height = height - mWindowRect.getHeight();  		// update our window rectangle  		mWindowRect.mRight = mWindowRect.mLeft + width;  		mWindowRect.mTop = mWindowRect.mBottom + height; @@ -2174,12 +2166,6 @@ void LLViewerWindow::reshape(S32 width, S32 height)  			{  				gSavedSettings.setS32("WindowWidth", window_size.mX);  				gSavedSettings.setS32("WindowHeight", window_size.mY); -				if (!gFloaterMap) -				{					 -					update_saved_window_size("FloaterWorldMapRect",delta_width, delta_height);	 -					update_saved_window_size("FloaterMapRect",delta_width, delta_height);		 -				} -				  			}  		} diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h index f62c25df91..09ad3fc270 100644 --- a/indra/newview/llviewerwindow.h +++ b/indra/newview/llviewerwindow.h @@ -41,7 +41,6 @@  #ifndef LL_LLVIEWERWINDOW_H  #define LL_LLVIEWERWINDOW_H -#include "linked_lists.h"  #include "v3dmath.h"  #include "v2math.h"  #include "llwindow.h" diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 5521b7f5f7..58f94120d0 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -746,13 +746,16 @@ void LLVOVolume::sculpt()  			return;  		LLPointer<LLImageRaw> raw_image = new LLImageRaw(); -		mSculptTexture->readBackRaw(discard_level, raw_image, TRUE); +		mSculptTexture->readBackRaw(discard_level, raw_image, FALSE);  		sculpt_height = raw_image->getHeight();  		sculpt_width = raw_image->getWidth();  		sculpt_components = raw_image->getComponents();  		sculpt_data = raw_image->getData(); + +		llassert_always(raw_image->getDataSize() >= sculpt_height * sculpt_width * sculpt_components); +  		getVolume()->sculpt(sculpt_width, sculpt_height, sculpt_components, sculpt_data, discard_level);  	}  } diff --git a/indra/newview/llwearable.cpp b/indra/newview/llwearable.cpp index b4e79109ac..b63543a327 100644 --- a/indra/newview/llwearable.cpp +++ b/indra/newview/llwearable.cpp @@ -132,8 +132,6 @@ LLWearable::LLWearable(const LLAssetID& asset_id) :  LLWearable::~LLWearable()  { -	mVisualParamMap.deleteAllData(); -	mTEMap.deleteAllData();  } @@ -227,35 +225,37 @@ BOOL LLWearable::exportFile( FILE* file )  	}  	// parameters -	S32 num_parameters = mVisualParamMap.getLength(); +	S32 num_parameters = mVisualParamMap.size();  	if( fprintf( file, "parameters %d\n", num_parameters ) < 0 )  	{  		return FALSE;  	}  	char s[ MAX_STRING ];		/* Flawfinder: ignore */ -	for( F32* param_weightp = mVisualParamMap.getFirstData(); param_weightp; param_weightp = mVisualParamMap.getNextData() ) +	for (param_map_t::iterator iter = mVisualParamMap.begin(); +		 iter != mVisualParamMap.end(); ++iter)  	{ -		S32 param_id = mVisualParamMap.getCurrentKeyWithoutIncrement(); -		if( fprintf( file, "%d %s\n", param_id, terse_F32_to_string( *param_weightp, s ) ) < 0 ) +		S32 param_id = iter->first; +		F32 param_weight = iter->second; +		if( fprintf( file, "%d %s\n", param_id, terse_F32_to_string( param_weight, s ) ) < 0 )  		{  			return FALSE;  		}  	}  	// texture entries -	S32 num_textures = mTEMap.getLength(); +	S32 num_textures = mTEMap.size();  	if( fprintf( file, "textures %d\n", num_textures ) < 0 )  	{  		return FALSE;  	} -	for( LLUUID* image_id = mTEMap.getFirstData(); image_id; image_id = mTEMap.getNextData() ) +	for (te_map_t::iterator iter = mTEMap.begin(); +		 iter != mTEMap.end(); ++iter)  	{ -		S32 te = mTEMap.getCurrentKeyWithoutIncrement(); -		char image_id_string[UUID_STR_LENGTH];		/* Flawfinder: ignore */ -		image_id->toString( image_id_string ); -		if( fprintf( file, "%d %s\n", te, image_id_string) < 0 ) +		S32 te = iter->first; +		LLUUID& image_id = iter->second; +		if( fprintf( file, "%d %s\n", te, image_id.asString().c_str()) < 0 )  		{  			return FALSE;  		} @@ -418,7 +418,7 @@ BOOL LLWearable::importFile( FILE* file )  			llwarns << "Bad Wearable asset: bad parameter, #" << i << llendl;  			return FALSE;  		} -		mVisualParamMap.addData( param_id, new F32(param_weight) ); +		mVisualParamMap[param_id] = param_weight;  	}  	// textures header @@ -450,7 +450,7 @@ BOOL LLWearable::importFile( FILE* file )  			return FALSE;  		} -		mTEMap.addData( te, new LLUUID( text_buffer ) ); +		mTEMap[te] = LLUUID(text_buffer );  	}  	return TRUE; @@ -488,13 +488,13 @@ BOOL LLWearable::isOldVersion()  		if( (param->getWearableType() == mType) && (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE ) )  		{  			param_count++; -			if( !mVisualParamMap.checkKey( param->getID() ) ) +			if( !is_in_map(mVisualParamMap, param->getID() ) )  			{  				return TRUE;  			}  		}  	} -	if( param_count != mVisualParamMap.getLength() ) +	if( param_count != mVisualParamMap.size() )  	{  		return TRUE;  	} @@ -506,13 +506,13 @@ BOOL LLWearable::isOldVersion()  		if( LLVOAvatar::getTEWearableType( te ) == mType )  		{  			te_count++; -			if( !mTEMap.checkKey( te ) ) +			if( !is_in_map(mTEMap, te ) )  			{  				return TRUE;  			}  		}  	} -	if( te_count != mTEMap.getLength() ) +	if( te_count != mTEMap.size() )  	{  		return TRUE;  	} @@ -543,16 +543,8 @@ BOOL LLWearable::isDirty()  	{  		if( (param->getWearableType() == mType) && (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE ) )  		{ -			F32* weightp = mVisualParamMap.getIfThere( param->getID() ); -			F32 weight; -			if( weightp ) -			{ -				weight = llclamp( *weightp, param->getMinWeight(), param->getMaxWeight() ); -			} -			else -			{ -				weight = param->getDefaultWeight(); -			} +			F32 weight = get_if_there(mVisualParamMap, param->getID(), param->getDefaultWeight()); +			weight = llclamp( weight, param->getMinWeight(), param->getMaxWeight() );  			U8 a = F32_to_U8( param->getWeight(), param->getMinWeight(), param->getMaxWeight() );  			U8 b = F32_to_U8( weight,             param->getMinWeight(), param->getMaxWeight() ); @@ -573,8 +565,7 @@ BOOL LLWearable::isDirty()  				llassert( 0 );  				continue;  			} -			LLUUID* mapped_image_id = mTEMap.getIfThere( te ); -			const LLUUID& image_id = mapped_image_id ? *mapped_image_id : LLVOAvatar::getDefaultTEImageID( te ); +			const LLUUID& image_id = get_if_there(mTEMap,  te, LLVOAvatar::getDefaultTEImageID( te ) );  			if( avatar_image->getID() != image_id )  			{  				return TRUE; @@ -603,24 +594,24 @@ void LLWearable::setParamsToDefaults()  		return;  	} -	mVisualParamMap.deleteAllData(); +	mVisualParamMap.clear();  	for( LLVisualParam* param = avatar->getFirstVisualParam(); param; param = avatar->getNextVisualParam() )  	{  		if( (((LLViewerVisualParam*)param)->getWearableType() == mType ) && (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE ) )  		{ -			mVisualParamMap.addData( param->getID(), new F32( param->getDefaultWeight() ) ); +			mVisualParamMap[param->getID()] = param->getDefaultWeight();  		}  	}  }  void LLWearable::setTexturesToDefaults()  { -	mTEMap.deleteAllData(); +	mTEMap.clear();  	for( S32 te = 0; te < LLVOAvatar::TEX_NUM_ENTRIES; te++ )  	{  		if( LLVOAvatar::getTEWearableType( te ) == mType )  		{ -			mTEMap.addData( te, new LLUUID( LLVOAvatar::getDefaultTEImageID( te ) ) ); +			mTEMap[te] = LLVOAvatar::getDefaultTEImageID( te );  		}  	}  } @@ -643,30 +634,15 @@ void LLWearable::writeToAvatar( BOOL set_by_user )  		if( (((LLViewerVisualParam*)param)->getWearableType() == mType) && (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE ) )  		{  			S32 param_id = param->getID(); -			F32* weight = mVisualParamMap.getIfThere( param_id ); -			if( weight ) +			F32 weight = get_if_there(mVisualParamMap, param_id, param->getDefaultWeight()); +			// only animate with user-originated changes +			if (set_by_user)  			{ -				// only animate with user-originated changes -				if (set_by_user) -				{ -					param->setAnimationTarget(*weight, set_by_user); -				} -				else -				{ -					avatar->setVisualParamWeight( param_id, *weight, set_by_user ); -				} +				param->setAnimationTarget(weight, set_by_user);  			}  			else  			{ -				// only animate with user-originated changes -				if (set_by_user) -				{ -					param->setAnimationTarget(param->getDefaultWeight(), set_by_user); -				} -				else -				{ -					avatar->setVisualParamWeight( param_id, param->getDefaultWeight(), set_by_user ); -				} +				avatar->setVisualParamWeight( param_id, weight, set_by_user );  			}  		}  	} @@ -682,8 +658,7 @@ void LLWearable::writeToAvatar( BOOL set_by_user )  	{  		if( LLVOAvatar::getTEWearableType( te ) == mType )  		{ -			LLUUID* mapped_image_id = mTEMap.getIfThere( te ); -			const LLUUID& image_id = mapped_image_id ? *mapped_image_id : LLVOAvatar::getDefaultTEImageID( te ); +			const LLUUID& image_id = get_if_there(mTEMap, te, LLVOAvatar::getDefaultTEImageID( te ) );  			LLViewerImage* image = gImageList.getImage( image_id );  			avatar->setLocTexTE( te, image, set_by_user );  		} @@ -792,16 +767,16 @@ void LLWearable::readFromAvatar()  	mDefinitionVersion = LLWearable::sCurrentDefinitionVersion; -	mVisualParamMap.deleteAllData(); +	mVisualParamMap.clear();  	for( LLVisualParam* param = avatar->getFirstVisualParam(); param; param = avatar->getNextVisualParam() )  	{  		if( (((LLViewerVisualParam*)param)->getWearableType() == mType) && (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE ) )  		{ -			mVisualParamMap.addData( param->getID(), new F32( param->getWeight() ) ); +			mVisualParamMap[param->getID()] = param->getWeight();  		}  	} -	mTEMap.deleteAllData(); +	mTEMap.clear();  	for( S32 te = 0; te < LLVOAvatar::TEX_NUM_ENTRIES; te++ )  	{  		if( LLVOAvatar::getTEWearableType( te ) == mType ) @@ -809,7 +784,7 @@ void LLWearable::readFromAvatar()  			LLViewerImage* image = avatar->getTEImage( te );  			if( image )  			{ -				mTEMap.addData( te, new LLUUID( image->getID() ) ); +				mTEMap[te] = image->getID();  			}  		}  	} @@ -847,9 +822,8 @@ void LLWearable::copyDataFrom( LLWearable* src )  		if( (param->getWearableType() == mType) && (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE ) )  		{  			S32 id = param->getID(); -			F32* weightp = src->mVisualParamMap.getIfThere( id ); -			F32 weight = weightp ? *weightp : param->getDefaultWeight(); -			mVisualParamMap.addData( id, new F32( weight ) ); +			F32 weight = get_if_there(src->mVisualParamMap, id, param->getDefaultWeight() ); +			mVisualParamMap[id] = weight;  		}  	} @@ -858,9 +832,8 @@ void LLWearable::copyDataFrom( LLWearable* src )  	{  		if( LLVOAvatar::getTEWearableType( te ) == mType )  		{ -			LLUUID* mapped_image_id = src->mTEMap.getIfThere( te ); -			const LLUUID& image_id = mapped_image_id ? *mapped_image_id : LLVOAvatar::getDefaultTEImageID( te ); -			mTEMap.addData( te, new LLUUID( image_id ) ); +			const LLUUID& image_id = get_if_there(src->mTEMap, te, LLVOAvatar::getDefaultTEImageID( te ) ); +			mTEMap[te] = image_id;  		}  	}  } @@ -985,21 +958,21 @@ void LLWearable::dump()  	//mSaleInfo  	llinfos << "    Params:" << llendl; -	for( F32* param_weightp = mVisualParamMap.getFirstData();  -		param_weightp; -		param_weightp = mVisualParamMap.getNextData() ) +	for (param_map_t::iterator iter = mVisualParamMap.begin(); +		 iter != mVisualParamMap.end(); ++iter)  	{ -		S32 param_id = mVisualParamMap.getCurrentKeyWithoutIncrement(); -		llinfos << "        " << param_id << " " << *param_weightp << llendl; +		S32 param_id = iter->first; +		F32 param_weight = iter->second; +		llinfos << "        " << param_id << " " << param_weight << llendl;  	}  	llinfos << "    Textures:" << llendl; -	for( LLUUID* image_id = mTEMap.getFirstData(); -		image_id; -		image_id = mTEMap.getNextData() ) +	for (te_map_t::iterator iter = mTEMap.begin(); +		 iter != mTEMap.end(); ++iter)  	{ -		S32 te = mTEMap.getCurrentKeyWithoutIncrement(); -		llinfos << "        " << te << " " << *image_id << llendl; +		S32 te = iter->first; +		LLUUID& image_id = iter->second; +		llinfos << "        " << te << " " << image_id << llendl;  	}  } diff --git a/indra/newview/llwearable.h b/indra/newview/llwearable.h index cd02843ccf..1b0fb3d7aa 100644 --- a/indra/newview/llwearable.h +++ b/indra/newview/llwearable.h @@ -33,7 +33,6 @@  #define LL_LLWEARABLE_H  #include "lluuid.h" -#include "llptrskipmap.h"  #include "llstring.h"  #include "llpermissions.h"  #include "llsaleinfo.h" @@ -132,8 +131,10 @@ private:  	LLTransactionID		mTransactionID;  	EWearableType		mType; -	LLPtrSkipMap<S32, F32*>	mVisualParamMap;	// maps visual param id to weight -	LLPtrSkipMap<S32, LLUUID*>	mTEMap;				// maps TE to Image ID +	typedef std::map<S32, F32> param_map_t; +	param_map_t mVisualParamMap;	// maps visual param id to weight +	typedef std::map<S32, LLUUID> te_map_t; +	te_map_t mTEMap;				// maps TE to Image ID  	static const char* sTypeName[ WT_COUNT ];  	static const char* sTypeLabel[ WT_COUNT ]; diff --git a/indra/newview/llwearablelist.cpp b/indra/newview/llwearablelist.cpp index 39a6046f59..c94ee7c54e 100644 --- a/indra/newview/llwearablelist.cpp +++ b/indra/newview/llwearablelist.cpp @@ -73,13 +73,14 @@ struct LLWearableArrivedData  LLWearableList::~LLWearableList()  { -	mList.deleteAllData(); +	for_each(mList.begin(), mList.end(), DeletePairedPointer()); +	mList.clear();  }  void LLWearableList::getAsset( const LLAssetID& assetID, const LLString& wearable_name, LLAssetType::EType asset_type, void(*asset_arrived_callback)(LLWearable*, void* userdata), void* userdata )  {  	llassert( (asset_type == LLAssetType::AT_CLOTHING) || (asset_type == LLAssetType::AT_BODYPART) ); -	LLWearable* instance = mList.getIfThere( assetID ); +	LLWearable* instance = get_if_there(mList, assetID, (LLWearable*)NULL );  	if( instance )  	{  		asset_arrived_callback( instance, userdata ); diff --git a/indra/newview/llwearablelist.h b/indra/newview/llwearablelist.h index 303fcb7bd3..c3a7e1bd91 100644 --- a/indra/newview/llwearablelist.h +++ b/indra/newview/llwearablelist.h @@ -33,7 +33,6 @@  #define LL_LLWEARABLELIST_H  #include "llwearable.h" -#include "llskiplist.h"  #include "lluuid.h"  #include "llassetstorage.h" @@ -43,9 +42,7 @@ public:  	LLWearableList()	{}  	~LLWearableList(); -	S32					getLength() { return mList.getLength(); } -	const LLWearable*	getFirst()	{ return mList.getFirstData(); } -	const LLWearable*	getNext()	{ return mList.getNextData(); } +	S32					getLength() { return mList.size(); }  	void				getAsset(   							const LLAssetID& assetID, @@ -65,7 +62,7 @@ public:  	static void	 	    processGetAssetReply(const char* filename, const LLAssetID& assetID, void* user_data, S32 status, LLExtStat ext_status);  protected: -	LLPtrSkipMap< const LLUUID, LLWearable* > mList; +	std::map< LLUUID, LLWearable* > mList;  };  extern LLWearableList gWearableList; diff --git a/indra/newview/llwindebug.cpp b/indra/newview/llwindebug.cpp index 949ea71c56..42f8a12e4c 100644 --- a/indra/newview/llwindebug.cpp +++ b/indra/newview/llwindebug.cpp @@ -121,6 +121,172 @@ MODULE32_NEST	Module32Next_;  #define	CALL_TRACE_MAX	((DUMP_SIZE_MAX - 2000) / (MAX_PATH + 40))	//max number of traced calls  #define	NL				L"\r\n"	//new line +BOOL WINAPI Get_Module_By_Ret_Addr(PBYTE Ret_Addr, LPWSTR Module_Name, PBYTE & Module_Addr); + + +void printError( CHAR* msg ) +{ +  DWORD eNum; +  TCHAR sysMsg[256]; +  TCHAR* p; + +  eNum = GetLastError( ); +  FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, +         NULL, eNum, +         MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language +         sysMsg, 256, NULL ); + +  // Trim the end of the line and terminate it with a null +  p = sysMsg; +  while( ( *p > 31 ) || ( *p == 9 ) ) +    ++p; +  do { *p-- = 0; } while( ( p >= sysMsg ) && +                          ( ( *p == '.' ) || ( *p < 33 ) ) ); + +  // Display the message +  printf( "\n  WARNING: %s failed with error %d (%s)", msg, eNum, sysMsg ); +} + +BOOL GetProcessThreadIDs(DWORD process_id, std::vector<DWORD>& thread_ids)  +{  +  HANDLE hThreadSnap = INVALID_HANDLE_VALUE;  +  THREADENTRY32 te32;  +  +  // Take a snapshot of all running threads   +  hThreadSnap = CreateToolhelp32Snapshot( TH32CS_SNAPTHREAD, 0 );  +  if( hThreadSnap == INVALID_HANDLE_VALUE )  +    return( FALSE );  +  +  // Fill in the size of the structure before using it.  +  te32.dwSize = sizeof(THREADENTRY32 );  +  +  // Retrieve information about the first thread, +  // and exit if unsuccessful +  if( !Thread32First( hThreadSnap, &te32 ) )  +  { +    printError( "Thread32First" );  // Show cause of failure +    CloseHandle( hThreadSnap );     // Must clean up the snapshot object! +    return( FALSE ); +  } + +  // Now walk the thread list of the system, +  // and display information about each thread +  // associated with the specified process +  do  +  {  +    if( te32.th32OwnerProcessID == process_id ) +    { +      thread_ids.push_back(te32.th32ThreadID);  +    } +  } while( Thread32Next(hThreadSnap, &te32 ) );  + +//  Don't forget to clean up the snapshot object. +  CloseHandle( hThreadSnap ); +  return( TRUE ); +} + +void WINAPI GetCallStackData(const CONTEXT* context_struct, LLSD& info) +{	 +    // Fill Str with call stack info. +    // pException can be either GetExceptionInformation() or NULL. +    // If pException = NULL - get current call stack. + +    LPWSTR	Module_Name = new WCHAR[MAX_PATH]; +	PBYTE	Module_Addr = 0; +	 +	typedef struct STACK +	{ +		STACK *	Ebp; +		PBYTE	Ret_Addr; +		DWORD	Param[0]; +	} STACK, * PSTACK; + +	PSTACK	Ebp; + +    if(context_struct) +    { +        Ebp = (PSTACK)context_struct->Ebp; +    } +    else +    { +        // The context struct is NULL,  +        // so we will use the current stack. +        Ebp = (PSTACK)&context_struct - 1; + +        // Skip frame of GetCallStackData(). +		if (!IsBadReadPtr(Ebp, sizeof(PSTACK))) +			Ebp = Ebp->Ebp;		//caller ebp +    } + +	// Trace CALL_TRACE_MAX calls maximum - not to exceed DUMP_SIZE_MAX. +	// Break trace on wrong stack frame. +	for (int Ret_Addr_I = 0, i = 0; +		(Ret_Addr_I < CALL_TRACE_MAX) && !IsBadReadPtr(Ebp, sizeof(PSTACK)) && !IsBadCodePtr(FARPROC(Ebp->Ret_Addr)); +		Ret_Addr_I++, Ebp = Ebp->Ebp, ++i) +	{ +		// If module with Ebp->Ret_Addr found. + +		if (Get_Module_By_Ret_Addr(Ebp->Ret_Addr, Module_Name, Module_Addr)) +		{ +			// Save module's address and full path. +			info["CallStack"][i]["ModuleName"] = ll_convert_wide_to_string(Module_Name); +			info["CallStack"][i]["ModuleAddress"] = (int)Module_Addr; +			info["CallStack"][i]["CallOffset"] = (int)(Ebp->Ret_Addr - Module_Addr); + +			LLSD params; +			// Save 5 params of the call. We don't know the real number of params. +			if (!IsBadReadPtr(Ebp, sizeof(PSTACK) + 5 * sizeof(DWORD))) +			{ +				for(int j = 0; j < 5; ++j) +				{ +					params[j] = (int)Ebp->Param[j]; +				} +			} +			info["CallStack"][i]["Parameters"] = params; +		} +		info["CallStack"][i]["ReturnAddress"] = (int)Ebp->Ret_Addr;			 +	} +} + +BOOL GetThreadCallStack(DWORD thread_id, LLSD& info) +{ +    if(GetCurrentThreadId() == thread_id) +    { +        // Early exit for the current thread. +        // Suspending the current thread would be a bad idea. +        // Plus you can't retrieve a valid current thread context. +        return false; +    } + +    HANDLE thread_handle = INVALID_HANDLE_VALUE;  +    thread_handle = OpenThread(THREAD_ALL_ACCESS, FALSE, thread_id); +    if(INVALID_HANDLE_VALUE == thread_handle) +    { +        return FALSE; +    } + +    BOOL result = false; +    if(-1 != SuspendThread(thread_handle)) +    { +        CONTEXT context_struct; +        context_struct.ContextFlags = CONTEXT_FULL; +        if(GetThreadContext(thread_handle, &context_struct)) +        { +            GetCallStackData(&context_struct, info); +            result = true; +        } +        ResumeThread(thread_handle); +    } +    else +    { +        // Couldn't suspend thread. +    } + +    CloseHandle(thread_handle); +    return result; +} + +  //Windows Call Stack Construction idea from   //http://www.codeproject.com/tools/minidump.asp @@ -490,7 +656,33 @@ LONG LLWinDebug::handleException(struct _EXCEPTION_POINTERS *exception_infop)  		LLSD info;  		info = Get_Exception_Info(exception_infop); -		if (info) + + +        LLSD threads; +        std::vector<DWORD> thread_ids; +        GetProcessThreadIDs(GetCurrentProcessId(), thread_ids); + +        for(std::vector<DWORD>::iterator th_itr = thread_ids.begin();  +                 th_itr != thread_ids.end(); +                 ++th_itr) +        { +            LLSD thread_info; +            if(*th_itr != GetCurrentThreadId()) +            { +                GetThreadCallStack(*th_itr, thread_info); +            } + +            if(thread_info) +            { +                 +                threads[llformat("ID %d", *th_itr)] = thread_info; +            } +        } + + +        info["Threads"] = threads; + +        if (info)  		{  			std::ofstream out_file(log_path.c_str());  			LLSDSerialize::toPrettyXML(info, out_file); diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp index 6bbe5307b0..1664515f58 100644 --- a/indra/newview/llworldmapview.cpp +++ b/indra/newview/llworldmapview.cpp @@ -35,7 +35,6 @@  #include "indra_constants.h"  #include "llui.h" -#include "linked_lists.h"  #include "llmath.h"		// clampf()  #include "llregionhandle.h"  #include "lleventflags.h" diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 4f533e1189..136612e1a8 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -5073,11 +5073,6 @@ LLCubeMap* LLPipeline::findReflectionMap(const LLVector3& location)  	return NULL;  } -S32 LLPipeline::getVisibleCount() const  -{  -	return sCull->getVisibleListSize(); -} -  void LLPipeline::renderGroups(LLRenderPass* pass, U32 type, U32 mask, BOOL texture)  {  #if !LL_RELEASE_FOR_DOWNLOAD diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h index 32f5a7487b..2054492b72 100644 --- a/indra/newview/pipeline.h +++ b/indra/newview/pipeline.h @@ -36,8 +36,6 @@  #include "lldarrayptr.h"  #include "lldqueueptr.h"  #include "llstat.h" -#include "lllinkedqueue.h" -#include "llskiplist.h"  #include "lldrawpool.h"  #include "llspatialpartition.h"  #include "m4math.h" @@ -193,7 +191,6 @@ public:  	void findReferences(LLDrawable *drawablep);	// Find the lists which have references to this object  	BOOL verify();						// Verify that all data in the pipeline is "correct" -	S32  getVisibleCount() const;  	S32  getLightCount() const { return mLights.size(); }  	void calcNearbyLights(LLCamera& camera); | 
