X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fanimation.h;h=929cb13f497318c3a91492cc1cf18d36584f267e;hp=a4bdabdd95401757b32c032ca56b646c2e58c92b;hb=573ea4e5602c4321cc1d75daf9ed0beed5cde280;hpb=1eed7ffeb576674535661a09d298cff62f2cf96a diff --git a/source/animation.h b/source/animation.h index a4bdabdd..929cb13f 100644 --- a/source/animation.h +++ b/source/animation.h @@ -4,12 +4,14 @@ #include #include #include +#include "keyframe.h" namespace Msp { namespace GL { -class KeyFrame; +class Armature; class Matrix; +class Pose; /** An Animation is a sequence of KeyFrames combined with timing information. The @@ -41,7 +43,7 @@ private: float scale; AxisInterpolation(); - AxisInterpolation(const double *, const double *); + AxisInterpolation(const float *, const float *); }; struct MatrixInterpolation @@ -64,19 +66,27 @@ private: Time::TimeDelta delta_t; RefPtr keyframe; MatrixInterpolation matrix; + std::vector uniforms; + std::vector pose_matrices; TimedKeyFrame(const Animation &); void prepare(); }; - typedef std::list KeyFrameList; + struct UniformInfo + { + std::string name; + unsigned size; + + UniformInfo(const std::string &, unsigned); + }; public: class Iterator { private: - const Animation &animation; - KeyFrameList::const_iterator iter; + const Animation *animation; + std::vector::const_iterator iter; Time::TimeDelta time_since_keyframe; bool end; @@ -87,14 +97,26 @@ public: bool is_end() const { return end; } Matrix get_matrix() const; + KeyFrame::AnimatedUniform get_uniform(unsigned) const; + Matrix get_pose_matrix(unsigned) const; }; private: - KeyFrameList keyframes; + const Armature *armature; + std::vector keyframes; bool looping; + std::vector uniforms; public: Animation(); + ~Animation(); + + void set_armature(const Armature &); + const Armature *get_armature() const { return armature; } + + unsigned get_n_uniforms() const { return uniforms.size(); } + unsigned get_slot_for_uniform(const std::string &) const; + const std::string &get_uniform_name(unsigned) const; void add_keyframe(const Time::TimeDelta &, const KeyFrame &); private: