X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fanimationplayer.cpp;h=0c00105276309f711569a0ae65a29347c0879b2a;hp=59c6f595a0b45cb889b1e7b447084205a26cb22d;hb=d093b45975eb03b07680711ce982ad634a50fba3;hpb=5b71f1bf0d152486c0f6fe03c853992c57530369 diff --git a/source/animationplayer.cpp b/source/animationplayer.cpp index 59c6f595..0c001052 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; @@ -91,7 +92,7 @@ bool AnimationPlayer::tick_single(ObjectSlot &slot, const Time::TimeDelta &dt) unsigned n_uniforms = anim.animation.get_n_uniforms(); for(unsigned i=0; ianimation.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 +144,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),