#include <msp/core/refptr.h>
#include <msp/datafile/objectloader.h>
#include <msp/time/timedelta.h>
+#include "keyframe.h"
namespace Msp {
namespace GL {
class Armature;
-class KeyFrame;
class Matrix;
class Pose;
float scale;
AxisInterpolation();
- AxisInterpolation(const double *, const double *);
+ AxisInterpolation(const float *, const float *);
};
struct MatrixInterpolation
Time::TimeDelta delta_t;
RefPtr<const KeyFrame> keyframe;
MatrixInterpolation matrix;
+ std::vector<KeyFrame::AnimatedUniform> uniforms;
std::vector<MatrixInterpolation> pose_matrices;
TimedKeyFrame(const Animation &);
typedef std::list<TimedKeyFrame> KeyFrameList;
+ struct UniformInfo
+ {
+ std::string name;
+ unsigned size;
+
+ UniformInfo(const std::string &, unsigned);
+ };
+
public:
class Iterator
{
bool is_end() const { return end; }
Matrix get_matrix() const;
+ KeyFrame::AnimatedUniform get_uniform(unsigned) const;
Matrix get_pose_matrix(unsigned) const;
};
const Armature *armature;
KeyFrameList keyframes;
bool looping;
+ std::vector<UniformInfo> 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:
void prepare_keyframe(TimedKeyFrame &);