]> git.tdb.fi Git - libs/gl.git/blobdiff - source/animatedobject.cpp
Add a new transform API to Renderer.
[libs/gl.git] / source / animatedobject.cpp
index eec54aa74f38d24ddb40e57d7e1bf922e951d76c..3a1d9d836ffea98989b79936f87a8ebe8034e20b 100644 (file)
@@ -43,9 +43,39 @@ void AnimatedObject::set_pose_matrix(unsigned link, const Matrix &m)
 
 void AnimatedObject::setup_render(Renderer &renderer, const Tag &) const
 {
-       renderer.matrix_stack() *= matrix;
+       renderer.transform(matrix);
        if(shdata)
-               renderer.add_shader_data(shdata);
+               renderer.add_shader_data(*shdata);
+}
+
+
+AnimatedObject::Loader::Loader(AnimatedObject &o):
+       DataFile::ObjectLoader<AnimatedObject>(o)
+{
+       add("position", &Loader::position);
+       add("rotation", &Loader::rotation);
+       add("scale", &Loader::scale);
+       add("scale", &Loader::scale_uniform);
+}
+
+void AnimatedObject::Loader::position(float x, float y, float z)
+{
+       obj.matrix.translate(x, y, z);
+}
+
+void AnimatedObject::Loader::rotation(float a, float x, float y, float z)
+{
+       obj.matrix.rotate_deg(a, x, y, z);
+}
+
+void AnimatedObject::Loader::scale(float x, float y, float z)
+{
+       obj.matrix.scale(x, y, z);
+}
+
+void AnimatedObject::Loader::scale_uniform(float s)
+{
+       obj.matrix.scale(s);
 }
 
 } // namespace GL