X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fanimation%2Fanimatedobject.cpp;h=f02ff3e323fa023cf4e7d0a9a275d9709d653b01;hp=7168062320138599a81db306e983563020fffa6e;hb=HEAD;hpb=233dff2a6c552e08da832496aecd88ef4f8948f1 diff --git a/source/animation/animatedobject.cpp b/source/animation/animatedobject.cpp index 71680623..f02ff3e3 100644 --- a/source/animation/animatedobject.cpp +++ b/source/animation/animatedobject.cpp @@ -13,66 +13,35 @@ namespace Msp { namespace GL { AnimatedObject::AnimatedObject(const Object &o): - ObjectInstance(o), - shdata(0) -{ - if(const Technique *tech = object.get_technique()) - if(tech->has_shaders()) - shdata = new ProgramData; -} - -AnimatedObject::~AnimatedObject() -{ - delete shdata; -} + ObjectInstance(o) +{ } void AnimatedObject::set_pose_matrix(unsigned link, const Matrix &m) { - if(shdata) - { - 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", pose_data.size()/16, &pose_data[0]); - } -} - -ProgramData &AnimatedObject::get_shader_data() -{ - if(!shdata) - throw invalid_operation("AnimatedObject::get_shader_data"); - return *shdata; -} - -const ProgramData &AnimatedObject::get_shader_data() const -{ - if(!shdata) - throw invalid_operation("AnimatedObject::get_shader_data"); - return *shdata; + 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", 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]); + shdata.uniform(name, uni.values[0]); else if(uni.size==2) - shdata->uniform2(name, uni.values); + shdata.uniform2(name, uni.values); else if(uni.size==3) - shdata->uniform3(name, uni.values); + shdata.uniform3(name, uni.values); else if(uni.size==4) - shdata->uniform4(name, uni.values); + shdata.uniform4(name, uni.values); else throw invalid_argument("AnimatedObject::set_uniform"); } void AnimatedObject::setup_render(Renderer &renderer, Tag) const { - renderer.transform(matrix); - if(shdata) - renderer.add_shader_data(*shdata); + renderer.set_matrix(matrix); + renderer.add_shader_data(shdata); }