diff options
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/newview/lldrawable.cpp | 13 | ||||
| -rw-r--r-- | indra/newview/llspatialpartition.cpp | 37 | ||||
| -rw-r--r-- | indra/newview/llspatialpartition.h | 5 | ||||
| -rw-r--r-- | indra/newview/llvovolume.cpp | 22 | 
4 files changed, 41 insertions, 36 deletions
diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp index bb4174d3b6..d8be4c3bd5 100644 --- a/indra/newview/lldrawable.cpp +++ b/indra/newview/lldrawable.cpp @@ -763,19 +763,6 @@ void LLDrawable::movePartition()  	if (part)  	{  		part->move(this, getSpatialGroup()); - -		// SL-18251 "On-screen animesh characters using pelvis offset animations -		// disappear when root goes off-screen" -		// -		// Update extents of the root node when Control Avatar changes it's bounds -		if (mRenderType == LLPipeline::RENDER_TYPE_CONTROL_AV && isRoot()) -		{ -			LLControlAvatar* controlAvatar = dynamic_cast<LLControlAvatar*>(getVObj().get()); -			if (controlAvatar && controlAvatar->mControlAVBridge) -			{ -				((LLSpatialGroup*)controlAvatar->mControlAVBridge->mOctree->getListener(0))->setState(LLViewerOctreeGroup::DIRTY); -			} -		}  	}  } diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index 532da98e86..a3d8986c20 100644 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -847,6 +847,43 @@ void LLSpatialGroup::handleChildAddition(const OctreeNode* parent, OctreeNode* c  	assert_states_valid(this);  } +//virtual +void LLSpatialGroup::rebound() +{ +    if (!isDirty()) +        return; + +    super::rebound(); + +    if (mSpatialPartition->mDrawableType == LLPipeline::RENDER_TYPE_CONTROL_AV) +    { +        llassert(mSpatialPartition->mPartitionType == LLViewerRegion::PARTITION_CONTROL_AV); + +        LLSpatialBridge* bridge = getSpatialPartition()->asBridge(); +        if (bridge && +            bridge->mDrawable && +            bridge->mDrawable->getVObj() && +            bridge->mDrawable->getVObj()->isRoot()) +        { +            LLControlAvatar* controlAvatar = bridge->mDrawable->getVObj()->getControlAvatar(); +            if (controlAvatar && +                controlAvatar->mDrawable && +                controlAvatar->mControlAVBridge) +            { +                llassert(controlAvatar->mControlAVBridge->mOctree); + +                LLSpatialGroup* root = (LLSpatialGroup*)controlAvatar->mControlAVBridge->mOctree->getListener(0); +                if (this == root) +                { +                    const LLVector4a* addingExtents = controlAvatar->mDrawable->getSpatialExtents(); +                    const LLXformMatrix* currentTransform = bridge->mDrawable->getXform(); +                    expandExtents(addingExtents, *currentTransform); +                } +            } +        } +    } +} +  void LLSpatialGroup::destroyGL(bool keep_occlusion)   {  	setState(LLSpatialGroup::GEOM_DIRTY | LLSpatialGroup::IMAGE_DIRTY); diff --git a/indra/newview/llspatialpartition.h b/indra/newview/llspatialpartition.h index cdb591083c..b5ac867b3e 100644 --- a/indra/newview/llspatialpartition.h +++ b/indra/newview/llspatialpartition.h @@ -205,6 +205,7 @@ public:  LL_ALIGN_PREFIX(64)  class LLSpatialGroup : public LLOcclusionCullingGroup  { +	using super = LLOcclusionCullingGroup;  	friend class LLSpatialPartition;  	friend class LLOctreeStateCheck;  public: @@ -322,6 +323,9 @@ public:  	virtual void handleDestruction(const TreeNode* node);  	virtual void handleChildAddition(const OctreeNode* parent, OctreeNode* child); +	// LLViewerOctreeGroup +	virtual void rebound(); +  public:  	LL_ALIGN_16(LLVector4a mViewAngle);  	LL_ALIGN_16(LLVector4a mLastUpdateViewAngle); @@ -703,7 +707,6 @@ class LLControlAVBridge : public LLVolumeBridge  	using super = LLVolumeBridge;  public:  	LLControlAVBridge(LLDrawable* drawablep, LLViewerRegion* regionp); -	virtual void updateSpatialExtents();  };  class LLHUDBridge : public LLVolumeBridge diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 4ddba872f1..c7054102fd 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -5110,28 +5110,6 @@ LLControlAVBridge::LLControlAVBridge(LLDrawable* drawablep, LLViewerRegion* regi  	mPartitionType = LLViewerRegion::PARTITION_CONTROL_AV;  } -void LLControlAVBridge::updateSpatialExtents() -{ -	LL_PROFILE_ZONE_SCOPED_CATEGORY_DRAWABLE - -	LLControlAvatar* controlAvatar = getVObj()->getControlAvatar(); - -	LLSpatialGroup* root = (LLSpatialGroup*)mOctree->getListener(0); - -	bool rootWasDirty = root->isDirty(); - -	super::updateSpatialExtents(); // root becomes non-dirty here - -	// SL-18251 "On-screen animesh characters using pelvis offset animations -	// disappear when root goes off-screen" -	// -	// Expand extents to include Control Avatar placed outside of the bounds -	if (controlAvatar && (rootWasDirty || controlAvatar->mPlaying)) -	{ -		root->expandExtents(controlAvatar->mDrawable->getSpatialExtents(), *mDrawable->getXform()); -	} -} -  bool can_batch_texture(LLFace* facep)  {  	if (facep->getTextureEntry()->getBumpmap())  | 
