]> git.tdb.fi Git - libs/gl.git/blob - source/animatedobject.cpp
Restructure ProgramData to support sharing between Programs
[libs/gl.git] / source / animatedobject.cpp
1 #include <msp/strings/format.h>
2 #include "animatedobject.h"
3 #include "object.h"
4 #include "programdata.h"
5 #include "renderer.h"
6 #include "technique.h"
7
8 namespace Msp {
9 namespace GL {
10
11 AnimatedObject::AnimatedObject(const Object &o):
12         ObjectInstance(o),
13         shdata(0)
14 {
15         if(const Technique *tech = object.get_technique())
16                 if(tech->has_shaders())
17                         shdata = new ProgramData;
18 }
19
20 void AnimatedObject::set_matrix(const Matrix &m)
21 {
22         matrix = m;
23 }
24
25 void AnimatedObject::set_pose_matrix(unsigned link, const Matrix &m)
26 {
27         if(shdata)
28                 shdata->uniform_matrix4(format("pose[%d]", link), m);
29 }
30
31 void AnimatedObject::setup_render(Renderer &renderer, const Tag &) const
32 {
33         renderer.matrix_stack() *= matrix;
34         if(shdata)
35                 renderer.add_shader_data(shdata);
36 }
37
38 } // namespace GL
39 } // namespace Msp