summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
authorOz Linden <oz@lindenlab.com>2012-06-18 14:04:34 -0400
committerOz Linden <oz@lindenlab.com>2012-06-18 14:04:34 -0400
commit84574fe30a4cb2a8822d01a5f958a005bb9d8234 (patch)
tree311dabb9b5f4fca761a7d5087382a586613349c8 /indra
parentdad85ce55440e9c2328a4dd7362ac35c0e277b9e (diff)
parent08c424e5111f4fae34f55935739fd475c8ab3bff (diff)
merge changes for storm-1878
Diffstat (limited to 'indra')
-rw-r--r--indra/newview/llmutelist.cpp25
-rw-r--r--indra/newview/pipeline.cpp15
-rw-r--r--indra/newview/pipeline.h2
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);