diff options
| -rw-r--r-- | indra/newview/llvieweroctree.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llviewerregion.cpp | 31 | 
2 files changed, 28 insertions, 5 deletions
diff --git a/indra/newview/llvieweroctree.cpp b/indra/newview/llvieweroctree.cpp index 926d791d1f..2acacccbe6 100644 --- a/indra/newview/llvieweroctree.cpp +++ b/indra/newview/llvieweroctree.cpp @@ -524,7 +524,7 @@ void LLviewerOctreeGroup::handleChildAddition(const OctreeNode* parent, OctreeNo  	}  	else  	{ -		OCT_ERRS << "LLSpatialGroup redundancy detected." << llendl; +		OCT_ERRS << "LLviewerOctreeGroup redundancy detected." << llendl;  	}  	unbound(); diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index a2ff232d02..57fbaefce3 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -1122,7 +1122,6 @@ BOOL LLViewerRegion::idleUpdate(F32 max_update_time)  	createVisibleObjects(max_update_time);  	mImpl->mVisibleGroups.clear(); -	mImpl->mWaitingList.clear();  	sCurRegionp = NULL;  	return did_update; @@ -1135,16 +1134,40 @@ F32 LLViewerRegion::killInvisibleObjects(F32 max_time)  	{  		return max_time;  	} +	if(mImpl->mActiveSet.empty()) +	{ +		return max_time; +	} + +	static LLVOCacheEntry* last_visited_entry = NULL; +	const size_t MAX_UPDATE = 32;   	std::vector<LLDrawable*> delete_list; -	for(LLVOCacheEntry::vocache_entry_set_t::iterator iter = mImpl->mActiveSet.begin(); -		iter != mImpl->mActiveSet.end(); ++iter) -	{ +	S32 update_counter = llmin(MAX_UPDATE, mImpl->mActiveSet.size()); +	LLVOCacheEntry::vocache_entry_set_t::iterator iter = mImpl->mActiveSet.upper_bound(last_visited_entry);	 +	 +	for(; update_counter > 0; --update_counter, ++iter) +	{	 +		if(iter == mImpl->mActiveSet.end()) +		{ +			iter = mImpl->mActiveSet.begin(); +		} +  		if(!(*iter)->isRecentlyVisible())  		{  			killObject((*iter), delete_list);  		}  	} + +	if(iter == mImpl->mActiveSet.end()) +	{ +		last_visited_entry = NULL; +	} +	else +	{ +		last_visited_entry = *iter; +	} +  	for(S32 i = 0; i < delete_list.size(); i++)  	{  		gObjectList.killObject(delete_list[i]->getVObj());  | 
