diff options
Diffstat (limited to 'indra/newview')
-rwxr-xr-x | indra/newview/llviewerregion.cpp | 36 | ||||
-rwxr-xr-x | indra/newview/llviewertexturelist.cpp | 24 | ||||
-rwxr-xr-x | indra/newview/pipeline.cpp | 4 |
3 files changed, 42 insertions, 22 deletions
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index 24c56df8db..ba0402344e 100755 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -72,6 +72,8 @@ #include "llsdserialize.h" #include "llvieweroctree.h" #include "llviewerdisplay.h" +#include "llviewerwindow.h" +#include "llprogressview.h" #ifdef LL_WINDOWS #pragma warning(disable:4355) @@ -90,7 +92,7 @@ const U32 DEFAULT_MAX_REGION_WIDE_PRIM_COUNT = 15000; BOOL LLViewerRegion::sVOCacheCullingEnabled = FALSE; S32 LLViewerRegion::sLastCameraUpdated = 0; -S32 LLViewerRegion::sNewObjectCreationThrottle = 0; +S32 LLViewerRegion::sNewObjectCreationThrottle = -1; typedef std::map<std::string, std::string> CapabilityMap; @@ -1205,7 +1207,12 @@ BOOL LLViewerRegion::idleUpdate(F32 max_update_time) max_update_time -= update_timer.getElapsedTimeF32(); - if(max_update_time < 0.f) + if(gViewerWindow->getProgressView()->getVisible()) + { + //in case rendering pipeline is not started yet. + mImpl->mVOCachePartition->cull(*(LLViewerCamera::getInstance()), false); + } + else if(max_update_time < 0.f) { return did_update; } @@ -1226,23 +1233,28 @@ BOOL LLViewerRegion::idleUpdate(F32 max_update_time) void LLViewerRegion::calcNewObjectCreationThrottle() { static LLCachedControl<S32> new_object_creation_throttle(gSavedSettings,"NewObjectCreationThrottle"); + static LLFrameTimer timer; + + // + //sNewObjectCreationThrottle = + //-2: throttle is disabled because either the screen is showing progress view, or immediate after the screen is not black + //-1: throttle is disabled by the debug setting + //0: no new object creation is allowed + //>0: valid throttling number + // - sNewObjectCreationThrottle = new_object_creation_throttle; - if(LLStartUp::getStartupState() < STATE_STARTED || gTeleportDisplay) + if(gViewerWindow->getProgressView()->getVisible()) { - sNewObjectCreationThrottle = -1; //cancel the throttling + sNewObjectCreationThrottle = -2; //cancel the throttling + timer.reset(); } else if(sNewObjectCreationThrottle < 0) //just recoved from the login/teleport screen { - if(new_object_creation_throttle > 0) + if(new_object_creation_throttle > 0 && timer.getElapsedTimeF32() > 2.0f) //wait for two seconds to reset the throttle { - sNewObjectCreationThrottle = 4096; //a big number + sNewObjectCreationThrottle = new_object_creation_throttle; //reset } } - else - { - sNewObjectCreationThrottle = llmax((S32)new_object_creation_throttle, (S32)(sNewObjectCreationThrottle >> 1)); - } } BOOL LLViewerRegion::isViewerCameraStatic() @@ -1295,7 +1307,7 @@ F32 LLViewerRegion::killInvisibleObjects(F32 max_time) mLastVisitedEntry = *iter; } - mInvisibilityCheckHistory <<= 2; + mInvisibilityCheckHistory <<= 1; if(!delete_list.empty()) { mInvisibilityCheckHistory |= 1; diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index f4dc04bd51..046dfd6eaf 100755 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -59,7 +59,8 @@ #include "llxuiparser.h" #include "lltracerecording.h" #include "llviewerdisplay.h" -#include "llstartup.h" +#include "llviewerwindow.h" +#include "llprogressview.h" //////////////////////////////////////////////////////////////////////////// void (*LLViewerTextureList::sUUIDCallback)(void **, const LLUUID&) = NULL; @@ -756,12 +757,9 @@ void LLViewerTextureList::updateImagesDecodePriorities() F32 lazy_flush_timeout = 30.f; // stop decoding F32 max_inactive_time = 20.f; // actually delete S32 min_refs = 3; // 1 for mImageList, 1 for mUUIDMap, 1 for local reference - if(LLStartUp::getStartupState() < STATE_STARTED) - { - //do not remove pre-fetched images if viewer does not finish logging in. - lazy_flush_timeout = 30000.f; - max_inactive_time = 20000.f; - } + + //reset imagep->getLastReferencedTimer() when screen is showing the progress view to avoid removing pre-fetched textures too soon. + bool reset_timer = gViewerWindow->getProgressView()->getVisible(); static const S32 MAX_PRIO_UPDATES = gSavedSettings.getS32("TextureFetchUpdatePriorities"); // default: 32 const size_t max_update_count = llmin((S32) (MAX_PRIO_UPDATES*MAX_PRIO_UPDATES*gFrameIntervalSeconds.value()) + 1, MAX_PRIO_UPDATES); @@ -789,7 +787,11 @@ void LLViewerTextureList::updateImagesDecodePriorities() S32 num_refs = imagep->getNumRefs(); if (num_refs == min_refs) { - if (imagep->getLastReferencedTimer()->getElapsedTimeF32() > lazy_flush_timeout) + if(reset_timer) + { + imagep->getLastReferencedTimer()->reset(); + } + else if (imagep->getLastReferencedTimer()->getElapsedTimeF32() > lazy_flush_timeout) { // Remove the unused image from the image list deleteImage(imagep); @@ -818,7 +820,11 @@ void LLViewerTextureList::updateImagesDecodePriorities() } else if(imagep->isInactive()) { - if (imagep->getLastReferencedTimer()->getElapsedTimeF32() > max_inactive_time) + if(reset_timer) + { + imagep->getLastReferencedTimer()->reset(); + } + else if (imagep->getLastReferencedTimer()->getElapsedTimeF32() > max_inactive_time) { imagep->setDeletionCandidate() ; } diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 6754918149..8d70629206 100755 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -112,6 +112,7 @@ #include "llfloaterpathfindingcharacters.h" #include "llpathfindingpathtool.h" #include "llscenemonitor.h" +#include "llprogressview.h" #ifdef _DEBUG // Debug indices is disabled for now for debug performance - djs 4/24/02 @@ -2535,7 +2536,8 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_cl LLVOCachePartition* vo_part = region->getVOCachePartition(); if(vo_part) { - vo_part->cull(camera, can_use_occlusion && use_occlusion && !gUseWireframe); + bool do_occlusion_cull = can_use_occlusion && use_occlusion && !gUseWireframe && !gViewerWindow->getProgressView()->getVisible(); + vo_part->cull(camera, do_occlusion_cull); } } |