Commits

Scott Lawrence committed 6ec7837 Merge

merge changes for 3.4.2-beta4

Comments (0)

Files changed (3)

 2aa72e3372a83dece4df9cf72fb1e7c34f90b5e3 DRTVWR-209
 f7bedce18ad52283e6072814db23318907261487 DRTVWR-238
 7b64c96fbcadf360bd2feaae19d330166b70877c DRTVWR-210
+e9a5886052433d5db9e504ffaca10890f9932979 DRTVWR-243
+73b84b9864dc650fe7c8fc9f52361450f0849004 3.4.2-beta4

indra/newview/llflexibleobject.cpp

 //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();
 		}
 		++delay_iter;
 	}
+#endif // XXX_STINSON_MAINT_1890_HACK_FIX
 }
 
 LLVector3 LLVolumeImplFlexible::getFramePosition() const
 		//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;
 

indra/newview/pipeline.cpp

 
 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;
 }