+#include <algorithm>
+#include <msp/strings/format.h>
#include "animatedobject.h"
+#include "object.h"
+#include "programdata.h"
#include "renderer.h"
+#include "technique.h"
+
+using namespace std;
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)
+ {
+ 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[0]", pose_data.size()/16, &pose_data[0]);
+ }
+}
+
void AnimatedObject::setup_render(Renderer &renderer, const Tag &) const
{
renderer.matrix_stack() *= matrix;
+ if(shdata)
+ renderer.add_shader_data(shdata);
}
} // namespace GL