From 07e925d279b6c52c0cf352173dfb81fd1740d651 Mon Sep 17 00:00:00 2001 From: "Brad Payne (Vir Linden)" <vir@lindenlab.com> Date: Thu, 9 Nov 2017 16:48:04 +0000 Subject: [PATCH] MAINT-7913, MAINT-7817 - fix for animesh attachment corruption after teleporting to a different simulator. Turns out the control avatar (skeleton) was getting caught up in the cleanup for the original region --- indra/newview/llcontrolavatar.cpp | 14 ++++++++++++++ indra/newview/llviewerobject.cpp | 5 +++++ 2 files changed, 19 insertions(+) diff --git a/indra/newview/llcontrolavatar.cpp b/indra/newview/llcontrolavatar.cpp index 51dc7d7de1a..699c3ce1f91 100644 --- a/indra/newview/llcontrolavatar.cpp +++ b/indra/newview/llcontrolavatar.cpp @@ -32,6 +32,7 @@ #include "llanimationstates.h" #include "llviewercontrol.h" #include "llmeshrepository.h" +#include "llviewerregion.h" LLControlAvatar::LLControlAvatar(const LLUUID& id, const LLPCode pcode, LLViewerRegion* regionp) : LLVOAvatar(id, pcode, regionp), @@ -275,6 +276,19 @@ void LLControlAvatar::updateDebugText() total_linkset_count, animated_volume_count, active_string.c_str())); addDebugText(llformat("types %s lods %s", type_string.c_str(), lod_string.c_str())); addDebugText(llformat("tris %d verts %d", total_tris, total_verts)); + std::string region_name = "no region"; + if (mRootVolp->getRegion()) + { + region_name = mRootVolp->getRegion()->getName(); + } + std::string skel_region_name = "skel no region"; + if (getRegion()) + { + skel_region_name = getRegion()->getName(); + } + addDebugText(llformat("region %x %s skel %x %s", + mRootVolp->getRegion(), region_name.c_str(), + getRegion(), skel_region_name.c_str())); //addDebugText(llformat("anim time %.1f (step %f factor %f)", // mMotionController.getAnimTime(), // mMotionController.getTimeStep(), diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 42f6b081e50..e49c37be5ef 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -6102,6 +6102,11 @@ void LLViewerObject::setRegion(LLViewerRegion *regionp) child->setRegion(regionp); } + if (mControlAvatar) + { + mControlAvatar->setRegion(regionp); + } + setChanged(MOVED | SILHOUETTE); updateDrawable(FALSE); } -- GitLab