From 3627b33eec5c91908d6bb9fbf1da24629d5dc0a9 Mon Sep 17 00:00:00 2001 From: Shyotl Date: Mon, 10 Dec 2012 19:55:17 -0600 Subject: [PATCH] Reworked flexi update handling a little bit. --- indra/newview/llflexibleobject.cpp | 12 ++++++------ indra/newview/llflexibleobject.h | 4 ++-- indra/newview/llviewertexturelist.cpp | 5 +++-- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/indra/newview/llflexibleobject.cpp b/indra/newview/llflexibleobject.cpp index 5415c1acf..413398cf1 100644 --- a/indra/newview/llflexibleobject.cpp +++ b/indra/newview/llflexibleobject.cpp @@ -45,7 +45,7 @@ /*static*/ F32 LLVolumeImplFlexible::sUpdateFactor = 1.0f; std::vector LLVolumeImplFlexible::sInstanceList; -std::vector LLVolumeImplFlexible::sUpdateDelay; +std::vector LLVolumeImplFlexible::sUpdateDelay; static LLFastTimer::DeclareTimer FTM_FLEXIBLE_REBUILD("Rebuild"); static LLFastTimer::DeclareTimer FTM_DO_FLEXIBLE_UPDATE("Update"); @@ -96,14 +96,13 @@ LLVolumeImplFlexible::~LLVolumeImplFlexible() //static void LLVolumeImplFlexible::updateClass() { - std::vector::iterator delay_iter = sUpdateDelay.begin(); + std::vector::iterator delay_iter = sUpdateDelay.begin(); for (std::vector::iterator iter = sInstanceList.begin(); iter != sInstanceList.end(); ++iter) { - --(*delay_iter); - if (*delay_iter <= 0) + if(!*delay_iter || !--*delay_iter) { (*iter)->doIdleUpdate(); } @@ -360,6 +359,7 @@ void LLVolumeImplFlexible::doIdleUpdate() F32 pixel_area = mVO->getPixelArea(); U32 update_period = (U32) (LLViewerCamera::getInstance()->getScreenPixelArea()*0.01f/(pixel_area*(sUpdateFactor+1.f)))+1; + update_period = llclamp(update_period,1U,(U32)llmax((U32)llceil(gFPSClamped*2.f),32U)); if (visible) { @@ -380,7 +380,7 @@ void LLVolumeImplFlexible::doIdleUpdate() if ((LLDrawable::getCurrentFrame()+id)%update_period == 0) { - sUpdateDelay[mInstanceIndex] = (S32) update_period-1; + sUpdateDelay[mInstanceIndex] = update_period-1; updateRenderRes(); @@ -390,7 +390,7 @@ void LLVolumeImplFlexible::doIdleUpdate() } else { - sUpdateDelay[mInstanceIndex] = (S32) update_period; + sUpdateDelay[mInstanceIndex] = update_period; } } } diff --git a/indra/newview/llflexibleobject.h b/indra/newview/llflexibleobject.h index cba941bcd..d8b322546 100644 --- a/indra/newview/llflexibleobject.h +++ b/indra/newview/llflexibleobject.h @@ -72,11 +72,11 @@ class LLVolumeImplFlexible : public LLVolumeInterface { private: static std::vector sInstanceList; - static std::vector sUpdateDelay; + static std::vector sUpdateDelay; S32 mInstanceIndex; public: - static void resetTimers() { memset(&sUpdateDelay[0], 0, sizeof(S32)*sUpdateDelay.size()); } + static void resetTimers() { sUpdateDelay.assign(sUpdateDelay.size(),0); } static void updateClass(); LLVolumeImplFlexible(LLViewerObject* volume, LLFlexibleObjectData* attributes); diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index 6e1c57fb3..3238357c4 100644 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -630,8 +630,9 @@ void LLViewerTextureList::updateImages(F32 max_time) //Can't check gTeleportDisplay due to a process_teleport_local(), which sets it to true for local teleports... so: // Do this case if IS teleporting but NOT local teleporting, AND either the TP screen is set to appear OR we just entered the sim (TELEPORT_START_ARRIVAL) - if(gAgent.getTeleportState() != LLAgent::TELEPORT_NONE && gAgent.getTeleportState() != LLAgent::TELEPORT_LOCAL && - (!hide_tp_screen || gAgent.getTeleportState() == LLAgent::TELEPORT_START_ARRIVAL)) + LLAgent::ETeleportState state = gAgent.getTeleportState(); + if(state != LLAgent::TELEPORT_NONE && state != LLAgent::TELEPORT_LOCAL && + (!hide_tp_screen || state == LLAgent::TELEPORT_START_ARRIVAL || state == LLAgent::TELEPORT_ARRIVING)) { if(!cleared) {