From 93995ada0561e75efdf3f532cf638fbcb1d2ee69 Mon Sep 17 00:00:00 2001 From: William Todd Stinson Date: Mon, 12 Nov 2012 15:27:56 -0800 Subject: MAINT-1894: FIX This *should* fix a crash in the LLVolume::resizePath() method. The callstacks indicated that the std library was throwing a length exception on the std::vector::resize() call. Most likely cause was that the recent changes for flexi-prims were causing the mRenderRes to become negative. And thus, the 1< Date: Mon, 12 Nov 2012 19:35:34 -0800 Subject: MAINT-1890: A hacky fix for flexi-prim updates after teleport by ignoring the sUpdateDelay value and simply updating all flexi-prims. This change most likely reduces frame rate. --- indra/newview/llflexibleobject.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'indra/newview') diff --git a/indra/newview/llflexibleobject.cpp b/indra/newview/llflexibleobject.cpp index 43be28ce71..f04356dc60 100644 --- a/indra/newview/llflexibleobject.cpp +++ b/indra/newview/llflexibleobject.cpp @@ -96,6 +96,7 @@ LLVolumeImplFlexible::~LLVolumeImplFlexible() //static void LLVolumeImplFlexible::updateClass() { +#ifdef XXX_STINSON_HACK_FIX std::vector::iterator delay_iter = sUpdateDelay.begin(); for (std::vector::iterator iter = sInstanceList.begin(); @@ -109,6 +110,14 @@ void LLVolumeImplFlexible::updateClass() } ++delay_iter; } +#else // XXX_STINSON_HACK_FIX + for (std::vector::iterator iter = sInstanceList.begin(); + iter != sInstanceList.end(); + ++iter) + { + (*iter)->doIdleUpdate(); + } +#endif // XXX_STINSON_HACK_FIX } LLVector3 LLVolumeImplFlexible::getFramePosition() const -- cgit v1.2.3 From 3d21b2302b322ee75bb7082314f063fe4950a2d3 Mon Sep 17 00:00:00 2001 From: William Todd Stinson Date: Tue, 13 Nov 2012 15:16:26 -0800 Subject: 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. --- indra/newview/pipeline.cpp | 39 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) (limited to 'indra/newview') 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; } -- cgit v1.2.3 From 951b4c3efbdb19ea2af6f26f420bca43edf75273 Mon Sep 17 00:00:00 2001 From: William Todd Stinson Date: Tue, 13 Nov 2012 15:23:15 -0800 Subject: MAINT-1890: Adding a more descriptive comment to this hack fix for future reference. --- indra/newview/llflexibleobject.cpp | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llflexibleobject.cpp b/indra/newview/llflexibleobject.cpp index f04356dc60..f5bf900d0d 100644 --- a/indra/newview/llflexibleobject.cpp +++ b/indra/newview/llflexibleobject.cpp @@ -96,7 +96,18 @@ LLVolumeImplFlexible::~LLVolumeImplFlexible() //static void LLVolumeImplFlexible::updateClass() { -#ifdef XXX_STINSON_HACK_FIX + // XXX stinson 11/13/2012 : This hack removes the optimization for limiting the number of flexi-prims + // updated. With the optimization, flexi-prims attached to the users avatar were not being + // animated correctly immediately following teleport. With the optimization removed, the bug went away. +#define XXX_STINSON_MAINT_1890_HACK_FIX 1 +#if XXX_STINSON_MAINT_1890_HACK_FIX + for (std::vector::iterator iter = sInstanceList.begin(); + iter != sInstanceList.end(); + ++iter) + { + (*iter)->doIdleUpdate(); + } +#else // XXX_STINSON_MAINT_1890_HACK_FIX std::vector::iterator delay_iter = sUpdateDelay.begin(); for (std::vector::iterator iter = sInstanceList.begin(); @@ -110,14 +121,7 @@ void LLVolumeImplFlexible::updateClass() } ++delay_iter; } -#else // XXX_STINSON_HACK_FIX - for (std::vector::iterator iter = sInstanceList.begin(); - iter != sInstanceList.end(); - ++iter) - { - (*iter)->doIdleUpdate(); - } -#endif // XXX_STINSON_HACK_FIX +#endif // XXX_STINSON_MAINT_1890_HACK_FIX } LLVector3 LLVolumeImplFlexible::getFramePosition() const -- cgit v1.2.3