summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
authorAndrey Lihatskiy <alihatskiy@productengine.com>2022-10-26 23:58:06 +0300
committerAndrey Lihatskiy <alihatskiy@productengine.com>2022-10-26 23:58:06 +0300
commitb8f75bd161bf517af966adc003394f8dfe227abf (patch)
tree1552c950e5d0757a230a24c9198c1c03e927788f /indra
parent3ac77d73380ced1a9ff940053f448d2794fcc512 (diff)
parenta022452ff56c31cb028d5a17d827c82f1a74e624 (diff)
Merge branch 'master' into DRTVWR-570-maint-Q
Diffstat (limited to 'indra')
-rw-r--r--indra/newview/VIEWER_VERSION.txt2
-rw-r--r--indra/newview/llspatialpartition.h2
-rw-r--r--indra/newview/llvovolume.cpp51
3 files changed, 9 insertions, 46 deletions
diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt
index 10abd6ae5b..5db1411e12 100644
--- a/indra/newview/VIEWER_VERSION.txt
+++ b/indra/newview/VIEWER_VERSION.txt
@@ -1 +1 @@
-6.6.6
+6.6.7
diff --git a/indra/newview/llspatialpartition.h b/indra/newview/llspatialpartition.h
index f7bc9fb644..6d3ef33801 100644
--- a/indra/newview/llspatialpartition.h
+++ b/indra/newview/llspatialpartition.h
@@ -264,7 +264,7 @@ public:
return lhs->mAvatarp < rhs->mAvatarp;
}
- return lhs->mRenderOrder < rhs->mRenderOrder;
+ return lhs->mRenderOrder > rhs->mRenderOrder;
}
};
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index e24d131345..d98a40d188 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -5551,7 +5551,7 @@ static inline void add_face(T*** list, U32* count, T* face)
{
if (count[1] < MAX_FACE_COUNT)
{
- //face->setDrawOrderIndex(count[1]);
+ face->setDrawOrderIndex(count[1]);
list[1][count[1]++] = face;
}
}
@@ -5559,36 +5559,12 @@ static inline void add_face(T*** list, U32* count, T* face)
{
if (count[0] < MAX_FACE_COUNT)
{
- //face->setDrawOrderIndex(count[0]);
+ face->setDrawOrderIndex(count[0]);
list[0][count[0]++] = face;
}
}
}
-// return index into linkset for given object (0 for root prim)
-U32 get_linkset_index(LLVOVolume* vobj)
-{
- LL_PROFILE_ZONE_SCOPED_CATEGORY_DRAWABLE;
- if (vobj->isRootEdit())
- {
- return 0;
- }
-
- LLViewerObject* root = vobj->getRootEdit();
- U32 idx = 1;
- for (const auto& child : root->getChildren())
- {
- if (child == vobj)
- {
- return idx;
- }
- ++idx;
- }
-
- llassert(false);
- return idx; //should never get here
-}
-
void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_VOLUME;
@@ -5750,8 +5726,6 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
{
avatar->addAttachmentOverridesForObject(vobj, NULL, false);
}
-
- U32 linkset_index = get_linkset_index(vobj);
// Standard rigged mesh attachments:
bool rigged = !vobj->isAnimatedObject() && skinInfo && vobj->isAttachment();
@@ -5772,9 +5746,6 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
continue;
}
- // order by linkset index first and face index second
- facep->setDrawOrderIndex(linkset_index * 100 + i);
-
//ALWAYS null out vertex buffer on rebuild -- if the face lands in a render
// batch, it will recover its vertex buffer reference from the spatial group
facep->setVertexBuffer(NULL);
@@ -5799,6 +5770,11 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
if (facep->isState(LLFace::RIGGED))
{
//face is not rigged but used to be, remove from rigged face pool
+ LLDrawPoolAvatar* pool = (LLDrawPoolAvatar*)facep->getPool();
+ if (pool)
+ {
+ pool->removeFace(facep);
+ }
facep->clearState(LLFace::RIGGED);
facep->mAvatar = NULL;
facep->mSkinInfo = NULL;
@@ -6252,14 +6228,6 @@ struct CompareBatchBreakerRigged
}
};
-struct CompareDrawOrder
-{
- bool operator()(const LLFace* const& lhs, const LLFace* const& rhs)
- {
- return lhs->getDrawOrderIndex() < rhs->getDrawOrderIndex();
- }
-};
-
U32 LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, LLFace** faces, U32 face_count, BOOL distance_sort, BOOL batch_textures, BOOL rigged)
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_VOLUME;
@@ -6303,11 +6271,6 @@ U32 LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, LLFace
//sort faces by things that break batches, including avatar and mesh id
std::sort(faces, faces + face_count, CompareBatchBreakerRigged());
}
- else
- {
- // preserve legacy draw order for rigged faces
- std::sort(faces, faces + face_count, CompareDrawOrder());
- }
}
else if (!distance_sort)
{