From 75bdd2ff321032a3a9d4e814d6067088d48cafab Mon Sep 17 00:00:00 2001 From: "Nyx (Neal Orman)" Date: Mon, 9 Nov 2009 16:41:16 -0500 Subject: EXT-2326 Editing appearance causes too many texture callbacks stalls the viewer problem was caused by triggering updateMeshTextures() every time visual params or textures were changed on your base avatar object. The latest structure makes the parameters and textures in the wearables authoritative, causing them to be copied to the avatar on a regular basis. This resulted in way too many callbacks to be registered while waiting for baked textures to be uploaded. Fixed by removing many calls to updateMeshTextures() and ensuring that it gets called every time an appropriate param or texture actually changes, or a wearable gets added/removed. This appears to cut the number of callbacks to a reasonable level. Code reviewed by Bigpapi. --- indra/newview/lltexlayerparams.cpp | 2 -- indra/newview/llvoavatar.cpp | 1 - indra/newview/llvoavatarself.cpp | 14 +------------- indra/newview/llwearable.cpp | 4 +--- 4 files changed, 2 insertions(+), 19 deletions(-) diff --git a/indra/newview/lltexlayerparams.cpp b/indra/newview/lltexlayerparams.cpp index 74e0fa077e..b744722f4c 100644 --- a/indra/newview/lltexlayerparams.cpp +++ b/indra/newview/lltexlayerparams.cpp @@ -183,7 +183,6 @@ void LLTexLayerParamAlpha::setWeight(F32 weight, BOOL set_by_user) } mAvatar->invalidateComposite(mTexLayer->getTexLayerSet(), set_by_user); mTexLayer->invalidateMorphMasks(); - mAvatar->updateMeshTextures(); } } } @@ -479,7 +478,6 @@ void LLTexLayerParamColor::setWeight(F32 weight, BOOL set_by_user) if (mTexLayer) { mAvatar->invalidateComposite(mTexLayer->getTexLayerSet(), set_by_user); - mAvatar->updateMeshTextures(); } } diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index a6f20922d9..16bd74f798 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -5377,7 +5377,6 @@ void LLVOAvatar::updateSexDependentLayerSets( BOOL set_by_user ) invalidateComposite( mBakedTextureDatas[BAKED_HEAD].mTexLayerSet, set_by_user ); invalidateComposite( mBakedTextureDatas[BAKED_UPPER].mTexLayerSet, set_by_user ); invalidateComposite( mBakedTextureDatas[BAKED_LOWER].mTexLayerSet, set_by_user ); - updateMeshTextures(); } //----------------------------------------------------------------------------- diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index 7a83070770..a2203ba2ea 100644 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -757,19 +757,7 @@ void LLVOAvatarSelf::setLocalTextureTE(U8 te, LLViewerTexture* image, BOOL set_b return; } - LLTexLayerSet* layer_set = getLayerSet((ETextureIndex)te); - if (layer_set) - { - invalidateComposite(layer_set, set_by_user); - } - setTEImage(te, image); - updateMeshTextures(); - - if (gAgent.cameraCustomizeAvatar()) - { - LLVisualParamHint::requestHintUpdates(); - } } //virtual @@ -1377,6 +1365,7 @@ void LLVOAvatarSelf::invalidateComposite( LLTexLayerSet* layerset, BOOL set_by_u ETextureIndex baked_te = getBakedTE( layerset ); setTEImage( baked_te, LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT_AVATAR) ); layerset->requestUpload(); + updateMeshTextures(); } } @@ -1386,7 +1375,6 @@ void LLVOAvatarSelf::invalidateAll() { invalidateComposite(mBakedTextureDatas[i].mTexLayerSet, TRUE); } - updateMeshTextures(); } //----------------------------------------------------------------------------- diff --git a/indra/newview/llwearable.cpp b/indra/newview/llwearable.cpp index 2b4861ce4f..3185ee45bf 100644 --- a/indra/newview/llwearable.cpp +++ b/indra/newview/llwearable.cpp @@ -674,8 +674,6 @@ void LLWearable::writeToAvatar( BOOL set_by_user, BOOL update_customize_floater avatar->updateSexDependentLayerSets( set_by_user ); } - avatar->updateMeshTextures(); - // if( set_by_user ) // { // gAgent.sendAgentSetAppearance(); @@ -719,7 +717,7 @@ void LLWearable::removeFromAvatar( EWearableType type, BOOL set_by_user ) } avatar->updateVisualParams(); - avatar->updateMeshTextures(); + avatar->wearableUpdated(type); // if( set_by_user ) // { -- cgit v1.2.3