summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilliam Todd Stinson <stinson@lindenlab.com>2012-11-13 15:16:26 -0800
committerWilliam Todd Stinson <stinson@lindenlab.com>2012-11-13 15:16:26 -0800
commit3d21b2302b322ee75bb7082314f063fe4950a2d3 (patch)
treef39738d589c912bd0a0b5cbc0181175648b700ee
parentc137b645b6c0c9ad87e064bba59c91a22ecb62f8 (diff)
MAINT-1891: FIX Updating the LLPipeline::clearRebuildGroups() to preserve HUD groups. clearRebuildGroups() is called during the teleport process. In the previous state, HUD objects were being incorrectly removed from the rebuild groups during the teleport process. This change will preserve HUD groups and should resolve this issue.
-rw-r--r--indra/newview/pipeline.cpp39
1 files changed, 36 insertions, 3 deletions
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 678898797f..d9f4aa009b 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -2577,26 +2577,59 @@ static LLFastTimer::DeclareTimer FTM_REBUILD_PRIORITY_GROUPS("Rebuild Priority G
void LLPipeline::clearRebuildGroups()
{
+ LLSpatialGroup::sg_vector_t hudGroups;
+
mGroupQ1Locked = true;
// Iterate through all drawables on the priority build queue,
for (LLSpatialGroup::sg_vector_t::iterator iter = mGroupQ1.begin();
iter != mGroupQ1.end(); ++iter)
{
LLSpatialGroup* group = *iter;
- group->clearState(LLSpatialGroup::IN_BUILD_Q1);
+
+ // If the group contains HUD objects, save the group
+ if (group->isHUDGroup())
+ {
+ hudGroups.push_back(group);
+ }
+ // Else, no HUD objects so clear the build state
+ else
+ {
+ group->clearState(LLSpatialGroup::IN_BUILD_Q1);
+ }
}
+
+ // Clear the group
mGroupQ1.clear();
+
+ // Copy the saved HUD groups back in
+ mGroupQ1.assign(hudGroups.begin(), hudGroups.end());
mGroupQ1Locked = false;
+ // Clear the HUD groups
+ hudGroups.clear();
+
mGroupQ2Locked = true;
for (LLSpatialGroup::sg_vector_t::iterator iter = mGroupQ2.begin();
iter != mGroupQ2.end(); ++iter)
{
LLSpatialGroup* group = *iter;
- group->clearState(LLSpatialGroup::IN_BUILD_Q2);
- }
+ // If the group contains HUD objects, save the group
+ if (group->isHUDGroup())
+ {
+ hudGroups.push_back(group);
+ }
+ // Else, no HUD objects so clear the build state
+ else
+ {
+ group->clearState(LLSpatialGroup::IN_BUILD_Q2);
+ }
+ }
+ // Clear the group
mGroupQ2.clear();
+
+ // Copy the saved HUD groups back in
+ mGroupQ2.assign(hudGroups.begin(), hudGroups.end());
mGroupQ2Locked = false;
}