X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=sidebyside;f=source%2Fanimation%2Fkeyframe.h;fp=source%2Fanimation%2Fkeyframe.h;h=5b748add113c5432c0d3c5836e6fceaf4db8b590;hb=7aaec9a70b8d7733429bec043f8e33e02956f266;hp=0000000000000000000000000000000000000000;hpb=bec07999d95b76f4b47cffcc564d0cd0afc0435e;p=libs%2Fgl.git diff --git a/source/animation/keyframe.h b/source/animation/keyframe.h new file mode 100644 index 00000000..5b748add --- /dev/null +++ b/source/animation/keyframe.h @@ -0,0 +1,82 @@ +#ifndef MSP_GL_KEYFRAME_H_ +#define MSP_GL_KEYFRAME_H_ + +#include +#include +#include "matrix.h" +#include "transform.h" + +namespace Msp { +namespace GL { + +class Pose; + +/** +Keyframes are used to encapsulate object state for animation. +*/ +class KeyFrame +{ +public: + 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: + 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 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(); } +}; + +} // namespace GL +} // namespace Msp + +#endif