diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp index fd34be11bc..d4007cbf22 100644 --- a/indra/newview/lldrawpoolavatar.cpp +++ b/indra/newview/lldrawpoolavatar.cpp @@ -111,7 +111,6 @@ S32 cube_channel = -1; LLDrawPoolAvatar::LLDrawPoolAvatar(U32 type) : LLFacePool(type) - , mAvatar(nullptr) // Add avatar hitbox debug - remember avatar pointer in case avatar draw face breaks { } @@ -691,9 +690,37 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass) return; } + + if (mDrawFace.empty() && !single_avatar) + { + return; + } + + LLVOAvatar *avatarp { nullptr }; + + if (single_avatar) + { + avatarp = single_avatar; + } + else + { + LL_PROFILE_ZONE_NAMED_CATEGORY_AVATAR("Find avatarp"); // Tracy markup + const LLFace *facep = mDrawFace[0]; + if (!facep || !facep->getDrawable()) // trap possible null dereference + { + return; + } + avatarp = (LLVOAvatar *)facep->getDrawable()->getVObj().get(); + } + + if (!avatarp || avatarp->isDead() || avatarp->mDrawable.isNull()) // trap possible null dereference + { + return; + } + // Add avatar hitbox debug static LLCachedControl render_hitbox(gSavedSettings, "DebugRenderHitboxes", false); - if (render_hitbox && pass == 2 && (single_avatar || mAvatar) && !mAvatar->isControlAvatar()) + if (render_hitbox && pass == 2 && !avatarp->isControlAvatar()) { LL_PROFILE_ZONE_NAMED_CATEGORY_AVATAR("render_hitbox"); @@ -705,13 +732,13 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass) LLGLEnable blend(GL_BLEND); gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); - LLColor4 avatar_color = LLNetMap::getAvatarColor(mAvatar->getID()); + LLColor4 avatar_color = LLNetMap::getAvatarColor(avatarp->getID()); gGL.diffuseColor4f(avatar_color.mV[VRED], avatar_color.mV[VGREEN], avatar_color.mV[VBLUE], avatar_color.mV[VALPHA]); gGL.setLineWidth(2.0f); - const LLQuaternion& rot = mAvatar->getRotationRegion(); - const LLVector3& pos = mAvatar->getPositionAgent(); - const LLVector3& size = mAvatar->getScale(); + const LLQuaternion& rot = avatarp->getRotationRegion(); + const LLVector3& pos = avatarp->getPositionAgent(); + const LLVector3& size = avatarp->getScale(); // drawBoxOutline partly copied from llspatialpartition.cpp below @@ -768,34 +795,6 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass) } } // - - if (mDrawFace.empty() && !single_avatar) - { - return; - } - - LLVOAvatar *avatarp { nullptr }; - - if (single_avatar) - { - avatarp = single_avatar; - } - else - { - LL_PROFILE_ZONE_NAMED_CATEGORY_AVATAR("Find avatarp"); // Tracy markup - const LLFace *facep = mDrawFace[0]; - if (!facep || !facep->getDrawable()) // trap possible null dereference - { - return; - } - avatarp = (LLVOAvatar *)facep->getDrawable()->getVObj().get(); - } - - if (!avatarp || avatarp->isDead() || avatarp->mDrawable.isNull()) // trap possible null dereference - { - return; - } - // rendertime Tracy annotations { LL_PROFILE_ZONE_NAMED_CATEGORY_AVATAR("check fully_loaded"); diff --git a/indra/newview/lldrawpoolavatar.h b/indra/newview/lldrawpoolavatar.h index 8db0bf1831..704979def3 100644 --- a/indra/newview/lldrawpoolavatar.h +++ b/indra/newview/lldrawpoolavatar.h @@ -121,8 +121,6 @@ typedef enum void renderAvatars(LLVOAvatar *single_avatar, S32 pass = -1); // renders only one avatar if single_avatar is not null. - LLVOAvatar* mAvatar; // Add avatar hitbox debug - remember avatar pointer in case avatar draw face breaks - static bool sSkipOpaque; static bool sSkipTransparent; static S32 sShadowPass; diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index b2d6d6e141..d9a8551f80 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -8056,7 +8056,6 @@ LLDrawable *LLVOAvatar::createDrawable(LLPipeline *pipeline) mNumInitFaces = mDrawable->getNumFaces() ; dirtyMesh(2); - poolp->mAvatar = this; // Add avatar hitbox debug - remember avatar pointer in case avatar draw face breaks return mDrawable; }