diff options
author | Xiaohong Bao <bao@lindenlab.com> | 2013-10-30 23:17:40 -0600 |
---|---|---|
committer | Xiaohong Bao <bao@lindenlab.com> | 2013-10-30 23:17:40 -0600 |
commit | 960765e8c7d49a48e66f2e55e980c60645d9ca37 (patch) | |
tree | 3f83c3212c4732c1e7acbe634c5e2baf1e32f86c /indra/newview/llviewerregion.cpp | |
parent | 46c3bf7575a0366c20388d19815a5ee8e01cc0c6 (diff) |
more fix to reduce number of rendered triangles per frame.
Diffstat (limited to 'indra/newview/llviewerregion.cpp')
-rwxr-xr-x | indra/newview/llviewerregion.cpp | 32 |
1 files changed, 19 insertions, 13 deletions
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index cbce2674a7..a4b7efc56a 100755 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -1359,6 +1359,8 @@ BOOL LLViewerRegion::isViewerCameraStatic() F32 LLViewerRegion::killInvisibleObjects(F32 max_time) { + static LLCachedControl<F32> back_sphere_radius(gSavedSettings,"BackShpereCullingRadius"); + #if 1 if(!sVOCacheCullingEnabled) { @@ -1369,6 +1371,10 @@ F32 LLViewerRegion::killInvisibleObjects(F32 max_time) return max_time; } + LLVector4a camera_origin; + camera_origin.load3(LLViewerCamera::getInstance()->getOrigin().mV); + F32 squared_back_threshold = back_sphere_radius * back_sphere_radius; + bool unstable = sNewObjectCreationThrottle < 0; size_t max_update = unstable ? mImpl->mActiveSet.size() : 64; if(!mInvisibilityCheckHistory && isViewerCameraStatic()) @@ -1388,7 +1394,7 @@ F32 LLViewerRegion::killInvisibleObjects(F32 max_time) iter = mImpl->mActiveSet.begin(); } - if(!(*iter)->isRecentlyVisible() && (unstable || (*iter)->mLastCameraUpdated < sLastCameraUpdated)) + if(!(*iter)->isAnyVisible(camera_origin, squared_back_threshold) && (unstable || (*iter)->mLastCameraUpdated < sLastCameraUpdated)) { killObject((*iter), delete_list); } @@ -1425,18 +1431,18 @@ void LLViewerRegion::killObject(LLVOCacheEntry* entry, std::vector<LLDrawable*>& if(!drawablep->getParent()) { - LLViewerObject::const_child_list_t& child_list = drawablep->getVObj()->getChildren(); - for (LLViewerObject::child_list_t::const_iterator iter = child_list.begin(); - iter != child_list.end(); iter++) - { - LLViewerObject* child = *iter; - if(child->mDrawable->isRecentlyVisible()) - { - //set the parent group visible if any of its children visible. - ((LLViewerOctreeEntryData*)drawablep)->setVisible(); - return; - } - } + //LLViewerObject::const_child_list_t& child_list = drawablep->getVObj()->getChildren(); + //for (LLViewerObject::child_list_t::const_iterator iter = child_list.begin(); + // iter != child_list.end(); iter++) + //{ + // LLViewerObject* child = *iter; + // if(child->mDrawable->isRecentlyVisible()) + // { + // //set the parent group visible if any of its children visible. + // ((LLViewerOctreeEntryData*)drawablep)->setVisible(); + // return; + // } + //} delete_list.push_back(drawablep); } } |