merge changes for 3.4.2-beta4

master
Oz Linden 2012-11-14 09:20:55 -05:00
commit 0e13bf5f9e
3 changed files with 60 additions and 3 deletions

View File

@ -356,3 +356,5 @@ e664473c16df1d82ffaff382e7b3e023da202d52 3.4.2-beta2
2aa72e3372a83dece4df9cf72fb1e7c34f90b5e3 DRTVWR-209
f7bedce18ad52283e6072814db23318907261487 DRTVWR-238
7b64c96fbcadf360bd2feaae19d330166b70877c DRTVWR-210
e9a5886052433d5db9e504ffaca10890f9932979 DRTVWR-243
73b84b9864dc650fe7c8fc9f52361450f0849004 3.4.2-beta4

View File

@ -96,6 +96,18 @@ LLVolumeImplFlexible::~LLVolumeImplFlexible()
//static
void LLVolumeImplFlexible::updateClass()
{
// 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<LLVolumeImplFlexible*>::iterator iter = sInstanceList.begin();
iter != sInstanceList.end();
++iter)
{
(*iter)->doIdleUpdate();
}
#else // XXX_STINSON_MAINT_1890_HACK_FIX
std::vector<S32>::iterator delay_iter = sUpdateDelay.begin();
for (std::vector<LLVolumeImplFlexible*>::iterator iter = sInstanceList.begin();
@ -109,6 +121,7 @@ void LLVolumeImplFlexible::updateClass()
}
++delay_iter;
}
#endif // XXX_STINSON_MAINT_1890_HACK_FIX
}
LLVector3 LLVolumeImplFlexible::getFramePosition() const
@ -431,6 +444,15 @@ void LLVolumeImplFlexible::doFlexibleUpdate()
//the object is not visible
return ;
}
// stinson 11/12/2012: Need to check with davep on the following.
// Skipping the flexible update if render res is negative. If we were to continue with a negative value,
// the subsequent S32 num_render_sections = 1<<mRenderRes; code will specify a really large number of
// render sections which will then create a length exception in the std::vector::resize() method.
if (mRenderRes < 0)
{
return;
}
S32 num_sections = 1 << mSimulateRes;

View File

@ -2578,26 +2578,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;
}