X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fanimatedobject.cpp;h=269665f6d12ff834a6f2827fba10c444bfb2fad5;hb=4fe225bf15048fcb7a678370f87d09f2de37031a;hp=4be198a87fec6739957642e485db91baee036263;hpb=de5d710b87879d6a0b06407da096ec505f8b7679;p=libs%2Fgl.git diff --git a/source/animatedobject.cpp b/source/animatedobject.cpp index 4be198a8..269665f6 100644 --- a/source/animatedobject.cpp +++ b/source/animatedobject.cpp @@ -1,6 +1,7 @@ #include #include #include "animatedobject.h" +#include "error.h" #include "object.h" #include "programdata.h" #include "renderer.h" @@ -37,13 +38,30 @@ void AnimatedObject::set_pose_matrix(unsigned link, const Matrix &m) if(link*16>=pose_data.size()) pose_data.resize((link+1)*16); copy(m.data(), m.data()+16, &pose_data[link*16]); - shdata->uniform_matrix4_array("pose[0]", pose_data.size()/16, &pose_data[0]); + shdata->uniform_matrix4_array("pose", pose_data.size()/16, &pose_data[0]); } } +void AnimatedObject::set_uniform(const string &name, const KeyFrame::AnimatedUniform &uni) +{ + if(!shdata) + throw invalid_operation("AnimatedObject::set_uniform"); + + if(uni.size==1) + shdata->uniform(name, uni.values[0]); + else if(uni.size==2) + shdata->uniform2(name, uni.values); + else if(uni.size==3) + shdata->uniform3(name, uni.values); + else if(uni.size==4) + shdata->uniform4(name, uni.values); + else + throw invalid_argument("AnimatedObject::set_uniform"); +} + void AnimatedObject::setup_render(Renderer &renderer, const Tag &) const { - renderer.matrix_stack() *= matrix; + renderer.transform(matrix); if(shdata) renderer.add_shader_data(*shdata); }