summaryrefslogtreecommitdiff
path: root/indra/newview/lldrawable.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/lldrawable.cpp')
-rw-r--r--indra/newview/lldrawable.cpp21
1 files changed, 15 insertions, 6 deletions
diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp
index 322ee90541..18123e07a8 100644
--- a/indra/newview/lldrawable.cpp
+++ b/indra/newview/lldrawable.cpp
@@ -664,10 +664,15 @@ F32 LLDrawable::updateXform(bool undamped)
// snap to final position (only if no target omega is applied)
dist_squared = 0.0f;
//set target scale here, because of dist_squared = 0.0f remove object from move list
- mCurrentScale = target_scale;
-
- if (getVOVolume() && !isRoot())
- { //child prim snapping to some position, needs a rebuild
+ if (mCurrentScale != target_scale)
+ {
+ mCurrentScale = target_scale;
+ // Final scale change needs a rebuild
+ gPipeline.markRebuild(this, LLDrawable::REBUILD_POSITION);
+ }
+ else if (getVOVolume() && !isRoot())
+ {
+ //child prim snapping to some position, needs a rebuild
gPipeline.markRebuild(this, LLDrawable::REBUILD_POSITION);
}
}
@@ -723,9 +728,13 @@ F32 LLDrawable::updateXform(bool undamped)
mXform.setRotation(target_rot);
mXform.setScale(LLVector3(1,1,1)); //no scale in drawable transforms (IT'S A RULE!)
mXform.updateMatrix();
- if (isRoot() && mVObjp->isAnimatedObject() && mVObjp->getControlAvatar())
+ if (isRoot() && mVObjp->isAnimatedObject())
{
- mVObjp->getControlAvatar()->matchVolumeTransform();
+ LLControlAvatar* cav = mVObjp->getControlAvatar();
+ if (cav)
+ {
+ cav->matchVolumeTransform();
+ }
}
if (mSpatialBridge)