SL-17449 Fix for Alexa's hair

master
Dave Parks 2022-05-18 17:56:54 -05:00
parent c1deab5ba7
commit bf183ecff7
3 changed files with 29 additions and 0 deletions

View File

@ -255,6 +255,19 @@ public:
}
};
struct CompareRenderOrder
{
bool operator()(const LLSpatialGroup* const& lhs, const LLSpatialGroup* const& rhs)
{
if (lhs->mAvatarp != rhs->mAvatarp)
{
return lhs->mAvatarp < rhs->mAvatarp;
}
return lhs->mRenderOrder > rhs->mRenderOrder;
}
};
typedef enum
{
GEOM_DIRTY = LLViewerOctreeGroup::INVALID_STATE,
@ -338,6 +351,10 @@ public:
F32 mPixelArea;
F32 mRadius;
//used by LLVOAVatar to set render order in alpha draw pool to preserve legacy render order behavior
LLVOAvatar* mAvatarp = nullptr;
U32 mRenderOrder = 0;
} LL_ALIGN_POSTFIX(64);
class LLGeometryManager

View File

@ -2809,6 +2809,7 @@ void LLVOAvatar::idleUpdateMisc(bool detailed_update)
// update attachments positions
if (detailed_update)
{
U32 draw_order = 0;
for (attachment_map_t::iterator iter = mAttachmentPoints.begin();
iter != mAttachmentPoints.end();
++iter)
@ -2875,6 +2876,13 @@ void LLVOAvatar::idleUpdateMisc(bool detailed_update)
bridge->setState(LLDrawable::MOVE_UNDAMPED);
bridge->updateMove();
bridge->setState(LLDrawable::EARLY_MOVE);
LLSpatialGroup* group = attached_object->mDrawable->getSpatialGroup();
if (group)
{ //set draw order of group
group->mAvatarp = this;
group->mRenderOrder = draw_order++;
}
}
}

View File

@ -3877,7 +3877,11 @@ void LLPipeline::postSort(LLCamera& camera)
if (!sShadowRender)
{
// order alpha groups by distance
std::sort(sCull->beginAlphaGroups(), sCull->endAlphaGroups(), LLSpatialGroup::CompareDepthGreater());
// order rigged alpha groups by avatar attachment order
std::sort(sCull->beginRiggedAlphaGroups(), sCull->endRiggedAlphaGroups(), LLSpatialGroup::CompareRenderOrder());
}
LL_PUSH_CALLSTACKS();