diff --git a/include/osgAnimation/StackedMatrixElement b/include/osgAnimation/StackedMatrixElement index 1a33c7ccb..7e6835d6d 100644 --- a/include/osgAnimation/StackedMatrixElement +++ b/include/osgAnimation/StackedMatrixElement @@ -39,7 +39,7 @@ namespace osgAnimation const osg::Matrix& getMatrix() const { return _matrix;} void setMatrix(const osg::Matrix& matrix) { _matrix = matrix;} bool isIdentity() const { return _matrix.isIdentity(); } - void update(); + void update(float t = 0.0); virtual Target* getOrCreateTarget(); virtual Target* getTarget() {return _target.get();} virtual const Target* getTarget() const {return _target.get();} diff --git a/include/osgAnimation/StackedQuaternionElement b/include/osgAnimation/StackedQuaternionElement index 1384950c1..aea2a1df7 100644 --- a/include/osgAnimation/StackedQuaternionElement +++ b/include/osgAnimation/StackedQuaternionElement @@ -36,7 +36,7 @@ namespace osgAnimation void applyToMatrix(osg::Matrix& matrix) const; osg::Matrix getAsMatrix() const; bool isIdentity() const; - void update(); + void update(float t = 0.0); const osg::Quat& getQuaternion() const; void setQuaternion(const osg::Quat&); diff --git a/include/osgAnimation/StackedRotateAxisElement b/include/osgAnimation/StackedRotateAxisElement index 7b5d47912..06a2278b8 100644 --- a/include/osgAnimation/StackedRotateAxisElement +++ b/include/osgAnimation/StackedRotateAxisElement @@ -36,7 +36,7 @@ namespace osgAnimation void applyToMatrix(osg::Matrix& matrix) const; osg::Matrix getAsMatrix() const; bool isIdentity() const { return (_angle == 0); } - void update(); + void update(float t = 0.0); const osg::Vec3& getAxis() const; double getAngle() const; diff --git a/include/osgAnimation/StackedScaleElement b/include/osgAnimation/StackedScaleElement index a36cc5be3..6b49c3397 100644 --- a/include/osgAnimation/StackedScaleElement +++ b/include/osgAnimation/StackedScaleElement @@ -36,7 +36,7 @@ namespace osgAnimation void applyToMatrix(osg::Matrix& matrix) const; osg::Matrix getAsMatrix() const; bool isIdentity() const; - void update(); + void update(float t = 0.0); const osg::Vec3& getScale() const; void setScale(const osg::Vec3& scale); diff --git a/include/osgAnimation/StackedTransform b/include/osgAnimation/StackedTransform index 59c1eed4f..367594a64 100644 --- a/include/osgAnimation/StackedTransform +++ b/include/osgAnimation/StackedTransform @@ -28,7 +28,7 @@ namespace osgAnimation StackedTransform(); StackedTransform(const StackedTransform&, const osg::CopyOp& copyop = osg::CopyOp::SHALLOW_COPY); - void update(); + void update(float t = 0.0); const osg::Matrix& getMatrix() const; protected: diff --git a/include/osgAnimation/StackedTransformElement b/include/osgAnimation/StackedTransformElement index 3a6628ff1..bdf441ddf 100644 --- a/include/osgAnimation/StackedTransformElement +++ b/include/osgAnimation/StackedTransformElement @@ -31,7 +31,7 @@ namespace osgAnimation virtual void applyToMatrix(osg::Matrix& matrix) const = 0; virtual osg::Matrix getAsMatrix() const = 0; virtual bool isIdentity() const = 0; - virtual void update() = 0; + virtual void update(float t) = 0; virtual Target* getOrCreateTarget() {return 0;} virtual Target* getTarget() {return 0;} virtual const Target* getTarget() const {return 0;} diff --git a/include/osgAnimation/StackedTranslateElement b/include/osgAnimation/StackedTranslateElement index 9728d0bee..bbc222d7a 100644 --- a/include/osgAnimation/StackedTranslateElement +++ b/include/osgAnimation/StackedTranslateElement @@ -36,7 +36,7 @@ namespace osgAnimation void applyToMatrix(osg::Matrix& matrix) const; osg::Matrix getAsMatrix() const; bool isIdentity() const; - void update(); + void update(float t = 0.0); const osg::Vec3& getTranslate() const; void setTranslate(const osg::Vec3& ); diff --git a/src/osgAnimation/StackedMatrixElement.cpp b/src/osgAnimation/StackedMatrixElement.cpp index 909ac26aa..4fd0dcac0 100644 --- a/src/osgAnimation/StackedMatrixElement.cpp +++ b/src/osgAnimation/StackedMatrixElement.cpp @@ -33,7 +33,7 @@ Target* StackedMatrixElement::getOrCreateTarget() return _target.get(); } -void StackedMatrixElement::update() +void StackedMatrixElement::update(float t) { if (_target.valid()) _matrix = _target->getValue(); diff --git a/src/osgAnimation/StackedQuaternionElement.cpp b/src/osgAnimation/StackedQuaternionElement.cpp index c0fb89e24..a969ac51d 100644 --- a/src/osgAnimation/StackedQuaternionElement.cpp +++ b/src/osgAnimation/StackedQuaternionElement.cpp @@ -37,7 +37,7 @@ void StackedQuaternionElement::applyToMatrix(osg::Matrix& matrix) const {matrix. osg::Matrix StackedQuaternionElement::getAsMatrix() const { return osg::Matrix(_quaternion); } bool StackedQuaternionElement::isIdentity() const { return (_quaternion[0] == 0 && _quaternion[1] == 0 && _quaternion[2] == 0 && _quaternion[3] == 1.0); } -void StackedQuaternionElement::update() +void StackedQuaternionElement::update(float t) { if (_target.valid()) _quaternion = _target->getValue(); diff --git a/src/osgAnimation/StackedRotateAxisElement.cpp b/src/osgAnimation/StackedRotateAxisElement.cpp index 2424da372..13e91267e 100644 --- a/src/osgAnimation/StackedRotateAxisElement.cpp +++ b/src/osgAnimation/StackedRotateAxisElement.cpp @@ -27,7 +27,7 @@ StackedRotateAxisElement::StackedRotateAxisElement(const StackedRotateAxisElemen osg::Matrix StackedRotateAxisElement::getAsMatrix() const { return osg::Matrix::rotate(osg::Quat(_angle, _axis)); } -void StackedRotateAxisElement::update() +void StackedRotateAxisElement::update(float t) { if (_target.valid()) _angle = _target->getValue(); diff --git a/src/osgAnimation/StackedScaleElement.cpp b/src/osgAnimation/StackedScaleElement.cpp index 41b4dd837..3a7fe26ef 100644 --- a/src/osgAnimation/StackedScaleElement.cpp +++ b/src/osgAnimation/StackedScaleElement.cpp @@ -42,7 +42,7 @@ StackedScaleElement::StackedScaleElement() _scale = osg::Vec3(1,1,1); } -void StackedScaleElement::update() +void StackedScaleElement::update(float t) { if (_target.valid()) _scale = _target->getValue(); diff --git a/src/osgAnimation/StackedTransform.cpp b/src/osgAnimation/StackedTransform.cpp index eda4d7d5c..de199b505 100644 --- a/src/osgAnimation/StackedTransform.cpp +++ b/src/osgAnimation/StackedTransform.cpp @@ -30,21 +30,21 @@ StackedTransform::StackedTransform(const StackedTransform& rhs, const osg::CopyO } -void StackedTransform::update() +void StackedTransform::update(float t) { int dirty = 0; for (StackedTransform::iterator it = begin(); it != end(); ++it) { - StackedTransformElement* element = it->get(); if (!element) continue; // update and check if there are changes - element->update(); + element->update(t); if (element->isIdentity()) continue; dirty++; } + if (!dirty) return; diff --git a/src/osgAnimation/StackedTranslateElement.cpp b/src/osgAnimation/StackedTranslateElement.cpp index f88710e11..7ac2d0415 100644 --- a/src/osgAnimation/StackedTranslateElement.cpp +++ b/src/osgAnimation/StackedTranslateElement.cpp @@ -43,7 +43,7 @@ Target* StackedTranslateElement::getOrCreateTarget() Target* StackedTranslateElement::getTarget() {return _target.get();} const Target* StackedTranslateElement::getTarget() const {return _target.get();} -void StackedTranslateElement::update() +void StackedTranslateElement::update(float t) { if (_target.valid()) _translate = _target->getValue();