Instead of storing Animation::TrackViewStorage directly it now contains
the view pointers, strides and size (where the size is shared by both
keys and values) together with packing the non-pointer values into
existing paddings. Together with reducing the keyframe count to 32 bits
and strides to 16 bits (which is consistent with MeshData and
SceneData), this reduces the size from 80 bytes to 48.
Not using TrackViewStorage also means we can directly accept the
key/value views in constructors, significantly improving the usability.
This also makes it possible to add support for (constexpr) offset-only
track data and thus easy serializability, again similarly to
MeshAttributeData and SceneFieldData.
CORRADE_ASSERT(keys.size()==values.size(),"Animation::TrackView: expected key and value view to have the same size but got"<<keys.size()<<"and"<<values.size(),);
CORRADE_ASSERT(keys.size()==values.size(),"Animation::TrackView: expected key and value view to have the same size but got"<<keys.size()<<"and"<<values.size(),);
CORRADE_ASSERT(Implementation::animationTypeFor<V>()==_tracks[id]._type,"Trade::AnimationData::track(): improper type requested for"<<_tracks[id]._type,(static_cast<constAnimation::TrackView<constFloat,constV,R>&>(storage)));
CORRADE_ASSERT(Implementation::animationTypeFor<V>()==_tracks[id]._type,"Trade::AnimationData::track(): improper type requested for"<<_tracks[id]._type,(static_cast<constAnimation::TrackView<constFloat,constV,R>&>(storage)));
CORRADE_ASSERT(Implementation::animationTypeFor<R>()==_tracks[id]._resultType,"Trade::AnimationData::track(): improper result type requested for"<<_tracks[id]._resultType,(static_cast<constAnimation::TrackView<constFloat,constV,R>&>(storage)));
CORRADE_ASSERT(Implementation::animationTypeFor<R>()==_tracks[id]._resultType,"Trade::AnimationData::track(): improper result type requested for"<<_tracks[id]._resultType,(static_cast<constAnimation::TrackView<constFloat,constV,R>&>(storage)));
CORRADE_ASSERT(Implementation::animationTypeFor<V>()==_tracks[id]._type,"Trade::AnimationData::mutableTrack(): improper type requested for"<<_tracks[id]._type,(static_cast<constAnimation::TrackView<Float,V,R>&>(storage)));
CORRADE_ASSERT(Implementation::animationTypeFor<V>()==_tracks[id]._type,"Trade::AnimationData::mutableTrack(): improper type requested for"<<_tracks[id]._type,(static_cast<constAnimation::TrackView<Float,V,R>&>(storage)));
CORRADE_ASSERT(Implementation::animationTypeFor<R>()==_tracks[id]._resultType,"Trade::AnimationData::mutableTrack(): improper result type requested for"<<_tracks[id]._resultType,(static_cast<constAnimation::TrackView<Float,V,R>&>(storage)));
CORRADE_ASSERT(Implementation::animationTypeFor<R>()==_tracks[id]._resultType,"Trade::AnimationData::mutableTrack(): improper result type requested for"<<_tracks[id]._resultType,(static_cast<constAnimation::TrackView<Float,V,R>&>(storage)));