diff options
| -rw-r--r-- | indra/newview/app_settings/logcontrol.xml | 2 | ||||
| -rw-r--r-- | indra/newview/llvovolume.cpp | 80 | ||||
| -rw-r--r-- | indra/newview/llvovolume.h | 1 | 
3 files changed, 64 insertions, 19 deletions
| diff --git a/indra/newview/app_settings/logcontrol.xml b/indra/newview/app_settings/logcontrol.xml index ddd07dba80..5329b76390 100644 --- a/indra/newview/app_settings/logcontrol.xml +++ b/indra/newview/app_settings/logcontrol.xml @@ -50,8 +50,8 @@  						</array>  					<key>tags</key>  						<array> -                          <string>AXON</string>  						<!-- sample entry for debugging specific items	 +                             <string>AXON</string>  						     <string>Avatar</string>  						     <string>Inventory</string>  						     <string>SceneLoadTiming</string> diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 981ec6ec33..f77fe56bac 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -3331,12 +3331,36 @@ U32 LLVOVolume::getExtendedMeshFlags() const  	}  } +void LLVOVolume::onSetExtendedMeshFlags(U32 flags) +{ +    if (mDrawable.notNull() && !mUserSelected) +    { +        // Need to trigger rebuildGeom(), which is where control avatars get created/removed +        //LL_INFOS() << (U32) this << " flags " << flags << ", calling markForUpdate()" << LL_ENDL; +        markForUpdate(TRUE); +    } +    if (isAttachment() && getAvatarAncestor()) +    { +        updateVisualComplexity(); +        if (flags & LLExtendedMeshParams::ANIMATED_MESH_ENABLED_FLAG) +        { +            // Making a rigged mesh into an animated object +            getAvatarAncestor()->removeAttachmentOverridesForObject(this); +        } +        else +        { +            // Making an animated object into a rigged mesh +            getAvatarAncestor()->addAttachmentOverridesForObject(this); +        } +    } +} +  void LLVOVolume::setExtendedMeshFlags(U32 flags)  {      U32 curr_flags = getExtendedMeshFlags();      if (curr_flags != flags)      { -        bool in_use = (flags != 0); +        bool in_use = true;          setParameterEntryInUse(LLNetworkData::PARAMS_EXTENDED_MESH, in_use, true);          LLExtendedMeshParams *param_block =               (LLExtendedMeshParams *)getParameterEntry(LLNetworkData::PARAMS_EXTENDED_MESH); @@ -3345,20 +3369,11 @@ void LLVOVolume::setExtendedMeshFlags(U32 flags)              param_block->setFlags(flags);          }          parameterChanged(LLNetworkData::PARAMS_EXTENDED_MESH, true); -        if (isAttachment() && getAvatarAncestor()) -        { -            updateVisualComplexity(); -            if (flags & LLExtendedMeshParams::ANIMATED_MESH_ENABLED_FLAG) -            { -                // Making a rigged mesh into an animated object -                getAvatarAncestor()->removeAttachmentOverridesForObject(this); -            } -            else -            { -                // Making an animated object into a rigged mesh -                getAvatarAncestor()->addAttachmentOverridesForObject(this); -            } -        } +        LL_DEBUGS("AXON") << (U32) this +                   << " new flags " << flags << " curr_flags " << curr_flags +                   << ", calling onSetExtendedMeshFlags()" +                   << LL_ENDL; +        onSetExtendedMeshFlags(flags);      }  } @@ -3960,6 +3975,22 @@ void LLVOVolume::parameterChanged(U16 param_type, LLNetworkData* data, BOOL in_u  	{  		mVolumeImpl->onParameterChanged(param_type, data, in_use, local_origin);  	} +    if (!local_origin && param_type == LLNetworkData::PARAMS_EXTENDED_MESH) +    { +        // AXON better if we could compare the before and after flags directly. +        U32 extended_mesh_flags = getExtendedMeshFlags(); +        bool enabled =  (extended_mesh_flags & LLExtendedMeshParams::ANIMATED_MESH_ENABLED_FLAG); +        bool was_enabled = (getControlAvatar() != NULL); +        if (enabled != was_enabled) +        { +            LL_INFOS() << (U32) this +                       << " calling onSetExtendedMeshFlags, enabled " << (U32) enabled +                       << " was_enabled " << (U32) was_enabled +                       << " local_origin " << (U32) local_origin +                       << LL_ENDL; +            onSetExtendedMeshFlags(extended_mesh_flags); +        } +    }  	if (mDrawable.notNull())  	{  		BOOL is_light = getIsLight(); @@ -4931,6 +4962,7 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)  	LLSpatialBridge* bridge = group->getSpatialPartition()->asBridge();      LLViewerObject *vobj = NULL;      LLVOVolume *vol_obj = NULL; +  	if (bridge)  	{          vobj = bridge->mDrawable->getVObj(); @@ -5018,6 +5050,8 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)  			}  			LLVOVolume* vobj = drawablep->getVOVolume(); +             +            std::string vobj_name = llformat("Vol%u", (U32) vobj);  			if (!vobj)  			{ @@ -5037,6 +5071,14 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)  				group->mSurfaceArea += volume->getSurfaceArea() * llmax(llmax(scale.mV[0], scale.mV[1]), scale.mV[2]);  			} +            LL_DEBUGS("AXON") << vobj_name << " rebuilding, isAttachment: " << (U32) vobj->isAttachment() +                       << " is_animated " << vobj->isAnimatedObject() +                       << " can_animate " << vobj->canBeAnimatedObject()  +                       << " cav " << vobj->getControlAvatar()  +                       << " playing " << (U32) (vobj->getControlAvatar() ? vobj->getControlAvatar()->mPlaying : false) +                       << " frame " << LLFrameTimer::getFrameCount() +                       << LL_ENDL; +  			llassert_always(vobj);  			vobj->updateTextureVirtualSize(true);  			vobj->preRebuild(); @@ -5051,6 +5093,7 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)              {                  if (!vobj->getControlAvatar())                  { +                    LL_DEBUGS("AXON") << vobj_name << " calling linkControlAvatar()" << LL_ENDL;                      vobj->linkControlAvatar();                  }                  if (vobj->getControlAvatar()) @@ -5064,6 +5107,7 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)                  // the checkbox has changed since the last rebuild.                  if (vobj->getControlAvatar())                  { +                    LL_DEBUGS("AXON") << vobj_name << " calling unlinkControlAvatar()" << LL_ENDL;                      vobj->unlinkControlAvatar();                  }              } @@ -5520,9 +5564,9 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)  			LLDrawable* drawablep = (LLDrawable*)(*drawable_iter)->getDrawable();  			if(drawablep)  			{ -			drawablep->clearState(LLDrawable::REBUILD_ALL); -		} -	} +                drawablep->clearState(LLDrawable::REBUILD_ALL); +            } +        }  	}  	group->mLastUpdateTime = gFrameTimeSeconds; diff --git a/indra/newview/llvovolume.h b/indra/newview/llvovolume.h index bc8fa9a3d3..ab940f6f62 100644 --- a/indra/newview/llvovolume.h +++ b/indra/newview/llvovolume.h @@ -271,6 +271,7 @@ public:      // Extended Mesh Properties      U32 getExtendedMeshFlags() const; +    void onSetExtendedMeshFlags(U32 flags);      void setExtendedMeshFlags(U32 flags);      bool canBeAnimatedObject() const;      bool isAnimatedObject() const; | 
