diff options
author | Cosmic Linden <cosmic@lindenlab.com> | 2022-06-28 10:00:52 -0700 |
---|---|---|
committer | Cosmic Linden <cosmic@lindenlab.com> | 2022-07-01 11:19:46 -0700 |
commit | a3312328bfd211998e32985e0c4b0ff242b8c8cf (patch) | |
tree | 1f1f3e72f04026ab8a3bbebc40e282badbff67f8 | |
parent | 8488d8600905a8f5f8e80513e39a67dce7a8cc84 (diff) |
SL-17510: Fix frequently updating meshes (ex: sculpties) causing expensive octree updates by removing them from the static octree via makeActive
-rw-r--r-- | indra/newview/llvovolume.cpp | 12 | ||||
-rw-r--r-- | indra/newview/llvovolume.h | 2 |
2 files changed, 14 insertions, 0 deletions
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index bae3d540e3..eee3bbc9cc 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -230,6 +230,7 @@ LLVOVolume::LLVOVolume(const LLUUID &id, const LLPCode pcode, LLViewerRegion *re mMediaImplList.resize(getNumTEs()); mLastFetchedMediaVersion = -1; + mServerVolumeUpdateCount = 0; memset(&mIndexInTex, 0, sizeof(S32) * LLRender::NUM_VOLUME_TEXTURE_CHANNELS); mMDCImplCount = 0; mLastRiggingInfoLOD = -1; @@ -400,6 +401,7 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys, if (setVolume(volume_params, 0)) { markForUpdate(TRUE); + onVolumeUpdateFromServer(); } } @@ -436,6 +438,7 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys, if (setVolume(volume_params, 0)) { markForUpdate(TRUE); + onVolumeUpdateFromServer(); } S32 res2 = unpackTEMessage(*dp); if (TEM_INVALID == res2) @@ -551,6 +554,15 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys, return retval; } +void LLVOVolume::onVolumeUpdateFromServer() +{ + constexpr U32 UPDATES_UNTIL_ACTIVE = 8; + ++mServerVolumeUpdateCount; + if (mDrawable && !mDrawable->isActive() && mServerVolumeUpdateCount > UPDATES_UNTIL_ACTIVE) + { + mDrawable->makeActive(); + } +} void LLVOVolume::animateTextures() { diff --git a/indra/newview/llvovolume.h b/indra/newview/llvovolume.h index 4cb7a5481c..cbc7735968 100644 --- a/indra/newview/llvovolume.h +++ b/indra/newview/llvovolume.h @@ -170,6 +170,7 @@ public: const LLMatrix4& getWorldMatrix(LLXformMatrix* xform) const; void markForUpdate(BOOL priority); + void onVolumeUpdateFromServer(); void markForUnload() { LLViewerObject::markForUnload(TRUE); mVolumeChanged = TRUE; } void faceMappingChanged() { mFaceMappingChanged=TRUE; }; @@ -424,6 +425,7 @@ private: LLPointer<LLViewerFetchedTexture> mLightTexture; media_list_t mMediaImplList; S32 mLastFetchedMediaVersion; // as fetched from the server, starts as -1 + U64 mServerVolumeUpdateCount; S32 mIndexInTex[LLRender::NUM_VOLUME_TEXTURE_CHANNELS]; S32 mMDCImplCount; |