X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fanimatedobject.cpp;h=257e1368def51c6c3a40fef4ebd5f04473320ff9;hp=8b030978eecda6a6a10af0cb5dab83f121e1334f;hb=72a13418cc19e750abf3f8d8a52aea5e1abe4983;hpb=9f25c3632cfd5c669a2ad24255e2e85dfa1cb460 diff --git a/source/animatedobject.cpp b/source/animatedobject.cpp index 8b030978..257e1368 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" @@ -25,11 +26,6 @@ AnimatedObject::~AnimatedObject() delete shdata; } -void AnimatedObject::set_matrix(const Matrix &m) -{ - matrix = m; -} - void AnimatedObject::set_pose_matrix(unsigned link, const Matrix &m) { if(shdata) @@ -41,6 +37,37 @@ void AnimatedObject::set_pose_matrix(unsigned link, const Matrix &m) } } +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; +} + +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.transform(matrix);