diff options
author | Xiaohong Bao <bao@lindenlab.com> | 2013-07-01 22:05:57 -0600 |
---|---|---|
committer | Xiaohong Bao <bao@lindenlab.com> | 2013-07-01 22:05:57 -0600 |
commit | 2410b48c605e98c5380dd23bbd138e4516ae311d (patch) | |
tree | d15d7e3b68e37040387287c5a2b5757dcd980831 | |
parent | 88fee7f87fc4a987a05002fedfcae11d6b42ba59 (diff) |
revert the changeset 54cf2fe4820a for SH-4264 to fix SH-4315: Interesting: Viewer crash on login on Mac in LLViewerRegion::updateVisibleEntries(float) and
SH-4316: Interesting Viewer Crash/freeze on Login to Levy region on Aditi with cleared cache on Windows XP
-rwxr-xr-x | indra/newview/llviewerregion.cpp | 42 |
1 files changed, 17 insertions, 25 deletions
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index d27b37d029..ca2a77c224 100755 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -910,19 +910,19 @@ void LLViewerRegion::removeActiveCacheEntry(LLVOCacheEntry* entry, LLDrawable* d return; } - bool is_orphan = false; - LLVOCacheEntry* parent = NULL; if(entry->getParentID() > 0) //is a child { - parent = getCacheEntry(entry->getParentID()); - if(!parent) + LLVOCacheEntry* parent = getCacheEntry(entry->getParentID()); + if(parent) + { + parent->addChild(entry); + } + else //parent not in cache. { - is_orphan = true; mOrphanMap[entry->getParentID()].push_back(entry->getLocalID()); } } - - if(!is_orphan)//insert to vo cache tree. + else //insert to vo cache tree. { //shift to the local regional space from agent space const LLVector3 pos = drawablep->getVObj()->getPositionRegion(); @@ -931,11 +931,6 @@ void LLViewerRegion::removeActiveCacheEntry(LLVOCacheEntry* entry, LLDrawable* d shift.setSub(vec, entry->getPositionGroup()); entry->shift(shift); - if(parent) //is a child - { - entry->shift(parent->getPositionGroup()); - parent->addChild(entry); - } addToVOCacheTree(entry); } @@ -970,6 +965,10 @@ void LLViewerRegion::addToVOCacheTree(LLVOCacheEntry* entry) { return; } + if(entry->getParentID() > 0) + { + return; //no child prim in cache octree. + } llassert(!entry->getEntry()->hasDrawable()); @@ -1103,8 +1102,7 @@ F32 LLViewerRegion::updateVisibleEntries(F32 max_time) if(vo_entry->getParentID() > 0) //is a child { - //child visibility depends on its parent, force its parent to be visible - addVisibleCacheEntry(getCacheEntry(vo_entry->getParentID())); + //child visibility depends on its parent. continue; } @@ -1834,22 +1832,21 @@ void LLViewerRegion::decodeBoundingInfo(LLVOCacheEntry* entry) //1, find the parent in cache LLVOCacheEntry* parent = getCacheEntry(parent_id); - //2, parent is not in the cache or not probed, put into the orphan list. - if(!parent || !parent->getEntry()) + //2, parent is not in the cache, put into the orphan list. + if(!parent) { //check if parent is non-cacheable and already created - if(!parent && isNonCacheableObjectCreated(parent_id)) + if(isNonCacheableObjectCreated(parent_id)) { //parent is visible, so is the child. addVisibleCacheEntry(entry); } else { - entry->setBoundingInfo(pos, scale); - mOrphanMap[parent_id].push_back(entry->getLocalID()); + mOrphanMap[parent_id].push_back(entry->getLocalID()); } } - else //parent in cache octree or probed + else //parent in cache. { if(!parent->isState(LLVOCacheEntry::INACTIVE)) { @@ -1858,9 +1855,6 @@ void LLViewerRegion::decodeBoundingInfo(LLVOCacheEntry* entry) } else { - entry->setBoundingInfo(pos, scale); - entry->shift(parent->getPositionGroup()); - addToVOCacheTree(entry); parent->addChild(entry); } } @@ -1890,8 +1884,6 @@ void LLViewerRegion::decodeBoundingInfo(LLVOCacheEntry* entry) LLVOCacheEntry* child = getCacheEntry((*orphans)[i]); if(child) { - child->shift(entry->getPositionGroup()); - addToVOCacheTree(child); entry->addChild(child); } } |