X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fkeyframe.h;h=5b748add113c5432c0d3c5836e6fceaf4db8b590;hp=ccfbda9a4f0cdf3dd2107f7e60ed028dd77f0021;hb=d901696935a6bf9fdad6ac8abe65ffab79bd297d;hpb=57fc4142e0b19a21f61c60b00f8310d5d2c27871 diff --git a/source/keyframe.h b/source/keyframe.h index ccfbda9a..5b748add 100644 --- a/source/keyframe.h +++ b/source/keyframe.h @@ -4,6 +4,7 @@ #include #include #include "matrix.h" +#include "transform.h" namespace Msp { namespace GL { @@ -30,16 +31,48 @@ public: void rotation(float, float, float, float); void scaling_uniform(float); void scaling(float, float, float); + void transform(); + void uniforms(); }; + class UniformsLoader: public DataFile::ObjectLoader + { + public: + UniformsLoader(KeyFrame &); + + private: + void uniform1f(const std::string &, float); + void uniform2f(const std::string &, float, float); + void uniform3f(const std::string &, float, float, float); + void uniform4f(const std::string &, float, float, float, float); + }; + + struct AnimatedUniform + { + unsigned size; + float values[4]; + + AnimatedUniform(unsigned, float, float = 0.0f, float = 0.0f, float = 0.0f); + }; + + typedef std::map UniformMap; + private: - Matrix matrix; + Transform transform; + UniformMap uniforms; RefPtr pose; public: + KeyFrame(); + ~KeyFrame(); + + void set_transform(const Transform &); void set_matrix(const Matrix &); + void set_uniform(const std::string &, const AnimatedUniform &); void set_pose(const Pose &); - const Matrix &get_matrix() const { return matrix; } + const Transform &get_transform() const { return transform; } + Matrix get_matrix() const { return transform.to_matrix(); } + const UniformMap &get_uniforms() const { return uniforms; } const Pose *get_pose() const { return pose.get(); } };