]> git.tdb.fi Git - libs/gl.git/blobdiff - source/animatedobject.cpp
Restructure ProgramData to support sharing between Programs
[libs/gl.git] / source / animatedobject.cpp
index df0217aeb022bb2def2d733450e054cec91a623f..086666339800ec022484d33660fd6292da3c5f1b 100644 (file)
@@ -1,21 +1,38 @@
+#include <msp/strings/format.h>
 #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())
+               if(tech->has_shaders())
+                       shdata = new ProgramData;
+}
 
 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