+ create_curve<4>(UNIFORM, -1, ExtractUniform<4>(i->name));
+ }
+}
+
+void Animation::create_curve(CurveTarget target, Transform::ComponentMask mask, ExtractComponent::Extract extract)
+{
+ Transform::ComponentMask all = mask;
+ Transform::ComponentMask any = Transform::NONE;
+ for(vector<TimedKeyFrame>::const_iterator i=keyframes.begin(); i!=keyframes.end(); ++i)
+ {
+ all = all&i->keyframe->get_transform().get_mask();
+ any = any|i->keyframe->get_transform().get_mask();
+ }
+
+ if(all==mask)
+ create_curve<3>(target, -1, extract);
+ else if(any&mask)
+ {
+ unsigned low_bit = mask&(mask>>2);
+ for(unsigned i=3; i-->0; )
+ {
+ Transform::ComponentMask bit = static_cast<Transform::ComponentMask>(low_bit<<i);
+ if(any&bit)
+ create_curve<1>(target, i, ExtractComponent(extract, i, bit));
+ }