X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fanimatedobject.cpp;fp=source%2Fanimatedobject.cpp;h=0cc367861e905faa3023aa2d8a79dd266ef4f0cc;hb=57fc4142e0b19a21f61c60b00f8310d5d2c27871;hp=df0217aeb022bb2def2d733450e054cec91a623f;hpb=8cbb77df13c4a0e6d6ae0f8b32913cf7e5b2f59c;p=libs%2Fgl.git diff --git a/source/animatedobject.cpp b/source/animatedobject.cpp index df0217ae..0cc36786 100644 --- a/source/animatedobject.cpp +++ b/source/animatedobject.cpp @@ -1,21 +1,42 @@ +#include #include "animatedobject.h" +#include "object.h" +#include "programdata.h" #include "renderer.h" +#include "technique.h" namespace Msp { namespace GL { AnimatedObject::AnimatedObject(const Object &o): - ObjectInstance(o) -{ } + ObjectInstance(o), + shdata(0) +{ + if(const Technique *tech = object.get_technique()) + { + // XXX Should create separate ProgramData for each pass + const RenderPass &pass = tech->get_pass(Tag()); + if(const Program *shprog = pass.get_shader_program()) + shdata = new ProgramData(*shprog); + } +} void AnimatedObject::set_matrix(const Matrix &m) { matrix = m; } +void AnimatedObject::set_pose_matrix(unsigned link, const Matrix &m) +{ + if(shdata) + shdata->uniform_matrix4(format("pose[%d]", link), m); +} + void AnimatedObject::setup_render(Renderer &renderer, const Tag &) const { renderer.matrix_stack() *= matrix; + if(shdata) + renderer.add_shader_data(shdata); } } // namespace GL