summaryrefslogtreecommitdiff
path: root/indra/newview/llvovolume.cpp
diff options
context:
space:
mode:
authorBrad Payne (Vir Linden) <vir@lindenlab.com>2017-10-02 21:52:24 +0100
committerBrad Payne (Vir Linden) <vir@lindenlab.com>2017-10-02 21:52:24 +0100
commit217df36656fb1a3d309fa0b42de192c369309211 (patch)
tree70296809f57ceb6a1bbf57ade27fe6d73fbce616 /indra/newview/llvovolume.cpp
parent853924c7efd5c1d067c237d5a44c44db313745e9 (diff)
SL-808 - updated ARC display to largely work with animated objects. Gives some triangle information that we may or may not ultimately keep. Surface area calcs still not working
Diffstat (limited to 'indra/newview/llvovolume.cpp')
-rw-r--r--indra/newview/llvovolume.cpp61
1 files changed, 35 insertions, 26 deletions
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index efddc9235e..7fec240d1b 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -1103,16 +1103,26 @@ void LLVOVolume::updateSculptTexture()
}
+void LLVOVolume::updateVisualComplexity()
+{
+ LLVOAvatar* avatar = getAvatarAncestor();
+ if (avatar)
+ {
+ avatar->updateVisualComplexity();
+ }
+ LLVOAvatar* rigged_avatar = getAvatar();
+ if(rigged_avatar && (rigged_avatar != avatar))
+ {
+ rigged_avatar->updateVisualComplexity();
+ }
+}
+
void LLVOVolume::notifyMeshLoaded()
{
mSculptChanged = TRUE;
gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_GEOMETRY, TRUE);
- LLVOAvatar* avatar = getAvatar();
- if (avatar)
- {
- avatar->updateVisualComplexity();
- }
+ updateVisualComplexity();
}
// sculpt replaces generate() for sculpted surfaces
@@ -1302,18 +1312,7 @@ BOOL LLVOVolume::calcLOD()
{
if (isRootEdit() && getChildren().size()>0)
{
- S32 total_tris = getTriangleCount();
- LLViewerObject::const_child_list_t& child_list = getChildren();
- for (LLViewerObject::const_child_list_t::const_iterator iter = child_list.begin();
- iter != child_list.end(); ++iter)
- {
- LLViewerObject* childp = *iter;
- LLVOVolume *child_volp = dynamic_cast<LLVOVolume*>(childp);
- if (child_volp)
- {
- total_tris += child_volp->getTriangleCount();
- }
- }
+ S32 total_tris = recursiveGetTriangleCount();
setDebugText(llformat("TRIS %d TOTAL %d", getTriangleCount(), total_tris));
}
else
@@ -1333,7 +1332,8 @@ BOOL LLVOVolume::calcLOD()
{
mAppAngle = ll_round((F32) atan2( mDrawable->getRadius(), mDrawable->mDistanceWRTCamera) * RAD_TO_DEG, 0.01f);
mLOD = cur_detail;
- return TRUE;
+
+ return TRUE;
}
return FALSE;
@@ -1691,6 +1691,11 @@ bool LLVOVolume::lodOrSculptChanged(LLDrawable *drawable, BOOL &compiled)
if ((new_lod != old_lod) || mSculptChanged)
{
+ if (mDrawable->isState(LLDrawable::RIGGED))
+ {
+ updateVisualComplexity();
+ }
+
compiled = TRUE;
sNumLODChanges += new_num_faces;
@@ -3342,7 +3347,7 @@ void LLVOVolume::setExtendedMeshFlags(U32 flags)
parameterChanged(LLNetworkData::PARAMS_EXTENDED_MESH, true);
if (isAttachment() && getAvatarAncestor())
{
- getAvatarAncestor()->updateVisualComplexity();
+ updateVisualComplexity();
if (flags & LLExtendedMeshParams::ANIMATED_MESH_ENABLED_FLAG)
{
// Making a rigged mesh into an animated object
@@ -3392,7 +3397,7 @@ bool LLVOVolume::isAnimatedObject() const
if (root_is_animated_flag)
{
bool root_can_be_animated = root_vol->canBeAnimatedObject();
- bool this_can_be_animated = ((root_vol == this) && root_can_be_animated) || canBeAnimatedObject();
+ bool this_can_be_animated = (root_vol == this) ? root_can_be_animated : canBeAnimatedObject();
if (this_can_be_animated && root_can_be_animated)
{
return true;
@@ -4923,25 +4928,29 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
group->mBuilt = 1.f;
LLVOAvatar* pAvatarVO = NULL;
+ LLVOAvatar *attached_av = NULL;
LLSpatialBridge* bridge = group->getSpatialPartition()->asBridge();
if (bridge)
{
+ LLViewerObject* vobj = bridge->mDrawable->getVObj();
if (bridge->mAvatar.isNull())
{
- LLViewerObject* vobj = bridge->mDrawable->getVObj();
if (vobj)
{
bridge->mAvatar = vobj->getAvatar();
}
}
-
+ if (vobj)
+ {
+ attached_av = vobj->getAvatarAncestor();
+ }
pAvatarVO = bridge->mAvatar;
}
- if (pAvatarVO)
+ if (attached_av)
{
- pAvatarVO->subtractAttachmentArea( group->mSurfaceArea );
+ attached_av->subtractAttachmentArea( group->mSurfaceArea );
}
group->mGeometryBytes = 0;
@@ -5518,9 +5527,9 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
mFaceList.clear();
- if (pAvatarVO)
+ if (attached_av)
{
- pAvatarVO->addAttachmentArea( group->mSurfaceArea );
+ attached_av->addAttachmentArea( group->mSurfaceArea );
}
}