X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fanimationplayer.cpp;h=e73d1113f2a1443948e082d44258f2f39208bc8a;hp=59c6f595a0b45cb889b1e7b447084205a26cb22d;hb=72a13418cc19e750abf3f8d8a52aea5e1abe4983;hpb=dfc784f7acd3132e5fcb9c43c0bda638df3b52f2 diff --git a/source/animationplayer.cpp b/source/animationplayer.cpp index 59c6f595..e73d1113 100644 --- a/source/animationplayer.cpp +++ b/source/animationplayer.cpp @@ -1,6 +1,7 @@ #include "animatedobject.h" #include "animationplayer.h" #include "armature.h" +#include "programdata.h" using namespace std; @@ -84,20 +85,19 @@ void AnimationPlayer::tick(const Time::TimeDelta &dt) bool AnimationPlayer::tick_single(ObjectSlot &slot, const Time::TimeDelta &dt) { - AnimatedObject &obj = slot.object; AnimationSlot &anim = slot.animations.front(); anim.iterator += dt; - obj.set_matrix(anim.iterator.get_matrix()); + slot.object.set_matrix(anim.iterator.get_matrix()); unsigned n_uniforms = anim.animation.get_n_uniforms(); for(unsigned i=0; iget_max_link_index(); for(unsigned i=0; i<=max_index; ++i) - obj.set_pose_matrix(i, anim.iterator.get_pose_matrix(i)); + slot.object.set_pose_matrix(i, anim.iterator.get_pose_matrix(i)); } return !anim.iterator.is_end(); @@ -113,7 +113,7 @@ bool AnimationPlayer::tick_stacked(ObjectSlot &slot, const Time::TimeDelta &dt) unsigned n_uniforms = i->animation.get_n_uniforms(); for(unsigned j=0; janimation.get_uniform_name(j), i->iterator.get_uniform(j)); + set_object_uniform(slot.object, i->animation.get_uniform_name(j), i->iterator.get_uniform(j)); } slot.object.set_matrix(matrix); @@ -143,6 +143,20 @@ bool AnimationPlayer::tick_stacked(ObjectSlot &slot, const Time::TimeDelta &dt) return !slot.animations.empty(); } +void AnimationPlayer::set_object_uniform(AnimatedObject &obj, const string &name, const KeyFrame::AnimatedUniform &uni) +{ + ProgramData &shdata = obj.get_shader_data(); + + if(uni.size==1) + shdata.uniform(name, uni.values[0]); + else if(uni.size==2) + shdata.uniform2(name, uni.values); + else if(uni.size==2) + shdata.uniform3(name, uni.values); + else if(uni.size==4) + shdata.uniform4(name, uni.values); +} + AnimationPlayer::ObjectSlot::ObjectSlot(AnimatedObject &o): object(o),