diff options
| -rwxr-xr-x | indra/newview/lldrawpoolavatar.cpp | 10 | ||||
| -rwxr-xr-x | indra/newview/llviewermenu.cpp | 2 | ||||
| -rwxr-xr-x | indra/newview/llviewerpartsim.cpp | 8 | ||||
| -rwxr-xr-x | indra/newview/llvoavatar.cpp | 6 | ||||
| -rwxr-xr-x | indra/newview/pipeline.cpp | 4 | 
5 files changed, 22 insertions, 8 deletions
diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp index c200ecfaf8..63e4abb308 100755 --- a/indra/newview/lldrawpoolavatar.cpp +++ b/indra/newview/lldrawpoolavatar.cpp @@ -472,7 +472,9 @@ void LLDrawPoolAvatar::renderShadow(S32 pass)  	}  	BOOL impostor = avatarp->isImpostor(); -	if (impostor) +	if (impostor  +		&& LLVOAvatar::AV_DO_NOT_RENDER != avatarp->getVisualMuteSettings() +		&& LLVOAvatar::AV_ALWAYS_RENDER != avatarp->getVisualMuteSettings())  	{  		return;  	} @@ -1246,7 +1248,9 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)  	BOOL impostor = avatarp->isImpostor() && !single_avatar; -	if (impostor && pass != 0) +	if (( avatarp->isInMuteList()  +		  || impostor  +		  || (LLVOAvatar::AV_DO_NOT_RENDER == avatarp->getVisualMuteSettings() && !avatarp->needsImpostorUpdate()) ) && pass != 0)  	{ //don't draw anything but the impostor for impostored avatars  		return;  	} @@ -1263,7 +1267,7 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)  			LLVOAvatar::sNumVisibleAvatars++;  		} -		if (impostor) +		if (impostor || (LLVOAvatar::AV_DO_NOT_RENDER == avatarp->getVisualMuteSettings() && !avatarp->needsImpostorUpdate()))  		{  			if (LLPipeline::sRenderDeferred && !LLPipeline::sReflectionRender && avatarp->mImpostor.isComplete())   			{ diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index cbc2ecc3c0..20f3d25be3 100755 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -3145,6 +3145,8 @@ class LLObjectMute : public view_listener_t  		LLVOAvatar* avatar = find_avatar_from_object(object);   		if (avatar)  		{ +			avatar->mNeedsImpostorUpdate = TRUE; +  			id = avatar->getID();  			LLNameValue *firstname = avatar->getNVPair("FirstName"); diff --git a/indra/newview/llviewerpartsim.cpp b/indra/newview/llviewerpartsim.cpp index ab510c1e95..b4617566ac 100755 --- a/indra/newview/llviewerpartsim.cpp +++ b/indra/newview/llviewerpartsim.cpp @@ -705,7 +705,13 @@ void LLViewerPartSim::updateSimulation()  		{  			BOOL upd = TRUE;  			LLViewerObject* vobj = mViewerPartSources[i]->mSourceObjectp; -			if (vobj && (vobj->getPCode() == LL_PCODE_VOLUME)) + +			if (vobj && vobj->isAvatar() && ((LLVOAvatar*)vobj)->isInMuteList()) +			{ +				upd = FALSE; +			} + +			if (upd && vobj && (vobj->getPCode() == LL_PCODE_VOLUME))  			{  				if(vobj->getAvatar() && vobj->getAvatar()->isTooComplex())  				{ diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index e5d440fa3e..9c1e95803b 100755 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -1,4 +1,4 @@ -/**  +/**    * @File llvoavatar.cpp   * @brief Implementation of LLVOAvatar class which is a derivation of LLViewerObject   * @@ -8142,7 +8142,7 @@ void LLVOAvatar::updateImpostors()  	{  		LLVOAvatar* avatar = (LLVOAvatar*) *iter;  		if (!avatar->isDead() && avatar->isVisible() -			&& (avatar->isImpostor() && avatar->needsImpostorUpdate()) +			&& ((avatar->isImpostor() || LLVOAvatar::AV_DO_NOT_RENDER == avatar->getVisualMuteSettings()) && avatar->needsImpostorUpdate())              )  		{              avatar->calcMutedAVColor(); @@ -8491,7 +8491,7 @@ void LLVOAvatar::calculateUpdateRenderComplexity()  void LLVOAvatar::setVisualMuteSettings(VisualMuteSettings set)  {      mVisuallyMuteSetting = set; -    mNeedsImpostorUpdate = true; +    mNeedsImpostorUpdate = TRUE;  } diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 4d1725e927..a4d41164e5 100755 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -3114,7 +3114,9 @@ void LLPipeline::markVisible(LLDrawable *drawablep, LLCamera& camera)  					if (vobj) // this test may not be needed, see above  					{  						LLVOAvatar* av = vobj->asAvatar(); -						if (av && av->isImpostor()) +						if (av && (av->isImpostor()  +							|| av->isInMuteList()  +							|| (LLVOAvatar::AV_DO_NOT_RENDER == av->getVisualMuteSettings() && !av->needsImpostorUpdate()) ))  						{  							return;  						}  | 
