only setJointState() if animation frame actually changed

This commit is contained in:
ZappoMan 2015-08-09 16:07:56 -07:00
parent cec0f8ed1d
commit 942958c4f1
3 changed files with 10 additions and 5 deletions

View file

@ -275,9 +275,12 @@ void RenderableModelEntityItem::render(RenderArgs* args) {
}
if (jointsMapped()) {
auto frameData = getAnimationFrame();
for (int i = 0; i < frameData.size(); i++) {
_model->setJointState(i, true, frameData[i]);
bool newFrame;
auto frameData = getAnimationFrame(newFrame);
if (newFrame) {
for (int i = 0; i < frameData.size(); i++) {
_model->setJointState(i, true, frameData[i]);
}
}
}
}

View file

@ -218,7 +218,8 @@ void ModelEntityItem::mapJoints(const QStringList& modelJointNames) {
}
}
const QVector<glm::quat>& ModelEntityItem::getAnimationFrame() {
const QVector<glm::quat>& ModelEntityItem::getAnimationFrame(bool& newFrame) {
newFrame = false;
if (!hasAnimation() || !_jointMappingCompleted) {
return _lastKnownFrameData;
@ -238,6 +239,7 @@ const QVector<glm::quat>& ModelEntityItem::getAnimationFrame() {
if (animationFrameIndex != _lastKnownFrameIndex) {
_lastKnownFrameIndex = animationFrameIndex;
newFrame = true;
const QVector<glm::quat>& rotations = frames[animationFrameIndex].rotations;

View file

@ -106,7 +106,7 @@ public:
float getAnimationLastFrame() const { return _animationLoop.getLastFrame(); }
void mapJoints(const QStringList& modelJointNames);
const QVector<glm::quat>& getAnimationFrame();
const QVector<glm::quat>& getAnimationFrame(bool& newFrame);
bool jointsMapped() const { return _jointMappingCompleted; }
bool getAnimationIsPlaying() const { return _animationLoop.isRunning(); }