]> git.tdb.fi Git - libs/gl.git/blob - source/keyframe.h
Appease the compiler with some extra copy-ctor's and operator='s
[libs/gl.git] / source / keyframe.h
1 #ifndef MSP_GL_KEYFRAME_H_
2 #define MSP_GL_KEYFRAME_H_
3
4 #include <msp/core/refptr.h>
5 #include <msp/datafile/objectloader.h>
6 #include "matrix.h"
7 #include "transform.h"
8
9 namespace Msp {
10 namespace GL {
11
12 class Pose;
13
14 /**
15 Keyframes are used to encapsulate object state for animation.
16 */
17 class KeyFrame
18 {
19 public:
20         class Loader: public DataFile::CollectionObjectLoader<KeyFrame>
21         {
22         public:
23                 Loader(KeyFrame &);
24                 Loader(KeyFrame &, Collection &);
25         private:
26                 void init();
27
28                 void pose(const std::string &);
29                 void pose_inline();
30                 void position(float, float, float);
31                 void rotation(float, float, float, float);
32                 void scaling_uniform(float);
33                 void scaling(float, float, float);
34                 void transform();
35                 void uniforms();
36         };
37
38         class UniformsLoader: public DataFile::ObjectLoader<KeyFrame>
39         {
40         public:
41                 UniformsLoader(KeyFrame &);
42
43         private:
44                 void uniform1f(const std::string &, float);
45                 void uniform2f(const std::string &, float, float);
46                 void uniform3f(const std::string &, float, float, float);
47                 void uniform4f(const std::string &, float, float, float, float);
48         };
49
50         struct AnimatedUniform
51         {
52                 unsigned size;
53                 float values[4];
54
55                 AnimatedUniform(unsigned, float, float = 0.0f, float = 0.0f, float = 0.0f);
56         };
57
58         typedef std::map<std::string, AnimatedUniform> UniformMap;
59
60 private:
61         Transform transform;
62         UniformMap uniforms;
63         RefPtr<const Pose> pose;
64
65 public:
66         KeyFrame();
67         ~KeyFrame();
68
69         void set_transform(const Transform &);
70         void set_matrix(const Matrix &);
71         void set_uniform(const std::string &, const AnimatedUniform &);
72         void set_pose(const Pose &);
73         const Transform &get_transform() const { return transform; }
74         Matrix get_matrix() const { return transform.to_matrix(); }
75         const UniformMap &get_uniforms() const { return uniforms; }
76         const Pose *get_pose() const { return pose.get(); }
77 };
78
79 } // namespace GL
80 } // namespace Msp
81
82 #endif