X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fkeyframe.h;h=88e852149570cae1d6e32968a60d73ed9cd6a5b5;hp=bc3d65ecbfa80fec692d21f326f4e016e2bd5df7;hb=aea9ceca71b59358248be94fdf272fd4791ca990;hpb=8cbb77df13c4a0e6d6ae0f8b32913cf7e5b2f59c diff --git a/source/keyframe.h b/source/keyframe.h index bc3d65ec..88e85214 100644 --- a/source/keyframe.h +++ b/source/keyframe.h @@ -1,35 +1,75 @@ #ifndef MSP_GL_KEYFRAME_H_ #define MSP_GL_KEYFRAME_H_ +#include #include #include "matrix.h" namespace Msp { namespace GL { +class Pose; + /** Keyframes are used to encapsulate object state for animation. */ class KeyFrame { public: - class Loader: public DataFile::ObjectLoader + class Loader: public DataFile::CollectionObjectLoader { public: Loader(KeyFrame &); + Loader(KeyFrame &, Collection &); private: + void init(); + + void pose(const std::string &); + void pose_inline(); void position(float, float, float); 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; + UniformMap uniforms; + RefPtr pose; public: + KeyFrame(); + ~KeyFrame(); + void set_matrix(const Matrix &); + void set_pose(const Pose &); const Matrix &get_matrix() const { return matrix; } + const UniformMap &get_uniforms() const { return uniforms; } + const Pose *get_pose() const { return pose.get(); } }; } // namespace GL