diff options
| author | Oz Linden <oz@lindenlab.com> | 2012-06-18 14:04:34 -0400 | 
|---|---|---|
| committer | Oz Linden <oz@lindenlab.com> | 2012-06-18 14:04:34 -0400 | 
| commit | 84574fe30a4cb2a8822d01a5f958a005bb9d8234 (patch) | |
| tree | 311dabb9b5f4fca761a7d5087382a586613349c8 | |
| parent | dad85ce55440e9c2328a4dd7362ac35c0e277b9e (diff) | |
| parent | 08c424e5111f4fae34f55935739fd475c8ab3bff (diff) | |
merge changes for storm-1878
| -rw-r--r-- | indra/newview/llmutelist.cpp | 25 | ||||
| -rw-r--r-- | indra/newview/pipeline.cpp | 15 | ||||
| -rw-r--r-- | indra/newview/pipeline.h | 2 | 
3 files changed, 42 insertions, 0 deletions
diff --git a/indra/newview/llmutelist.cpp b/indra/newview/llmutelist.cpp index a7059eb519..54522bb7f6 100644 --- a/indra/newview/llmutelist.cpp +++ b/indra/newview/llmutelist.cpp @@ -44,6 +44,8 @@  #include "llmutelist.h" +#include "pipeline.h" +  #include <boost/tokenizer.hpp>  #include "lldispatcher.h" @@ -192,6 +194,23 @@ BOOL LLMuteList::isLinden(const std::string& name) const  	return last_name == "Linden";  } +static LLVOAvatar* find_avatar(const LLUUID& id) +{ +	LLViewerObject *obj = gObjectList.findObject(id); +	while (obj && obj->isAttachment()) +	{ +		obj = (LLViewerObject *)obj->getParent(); +	} + +	if (obj && obj->isAvatar()) +	{ +		return (LLVOAvatar*)obj; +	} +	else +	{ +		return NULL; +	} +}  BOOL LLMuteList::add(const LLMute& mute, U32 flags)  { @@ -288,6 +307,12 @@ BOOL LLMuteList::add(const LLMute& mute, U32 flags)  						LLViewerPartSim::getInstance()->clearParticlesByOwnerID(localmute.mID);  					}  				} +				//mute local lights that are attached to the avatar +				LLVOAvatar *avatarp = find_avatar(localmute.mID); +				if (avatarp) +				{ +					LLPipeline::removeMutedAVsLights(avatarp); +				}  				return TRUE;  			}  		} diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index ab994c71cb..7b0677ea1e 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -1635,6 +1635,21 @@ void LLPipeline::unlinkDrawable(LLDrawable *drawable)  } +//static +void LLPipeline::removeMutedAVsLights(LLVOAvatar* muted_avatar) +{ +	LLFastTimer t(FTM_REMOVE_FROM_LIGHT_SET); +	for (light_set_t::iterator iter = gPipeline.mNearbyLights.begin(); +		 iter != gPipeline.mNearbyLights.end(); iter++) +	{ +		if (iter->drawable->getVObj()->isAttachment() && iter->drawable->getVObj()->getAvatar() == muted_avatar) +		{ +			gPipeline.mLights.erase(iter->drawable); +			gPipeline.mNearbyLights.erase(iter); +		} +	} +} +  U32 LLPipeline::addObject(LLViewerObject *vobj)  {  	LLMemType mt_ao(LLMemType::MTYPE_PIPELINE_ADD_OBJECT); diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h index b8b4f164fe..cabb359884 100644 --- a/indra/newview/pipeline.h +++ b/indra/newview/pipeline.h @@ -151,6 +151,8 @@ public:  	void		 unlinkDrawable(LLDrawable*); +	static void removeMutedAVsLights(LLVOAvatar*); +  	// Object related methods  	void        markVisible(LLDrawable *drawablep, LLCamera& camera);  	void		markOccluder(LLSpatialGroup* group);  | 
