o-----------------------------------------------------------------------------o
|                                  T O D O                                    |
o-----------------------------------------------------------------------------o

o-----------------------------------------------------------------------------o
| Questions                                                                   |
o-----------------------------------------------------------------------------o

  - Use portable STL? (http://www.stlport.org)
  - C++ casts of object pointers? (rtti)
  - Do we need floats or doubles for computations?
  - Do we really need to renormalize blended normals? sqrt() lookup table?
  - Remove the track structure (make keyframes that hold all bones for a
    given time)?
  - Split translation and rotation in seperate tracks?
  - Use 2d or 3d texture coordinates (u, v, w)?
  - Do we need to store per vertex colors?
  - Would a memory/resource manager be a good solution to the dynamic memory
    allocation/deallocation nature of different classes?
  - Sliding-Window VIPM? Predefined/prestored LOD levels?
  - how should we handle collision detection?
  - Allow loading of model data from memory?
  - Make various functions (create, destroy, update,...) virtual to allow
    subclassing?

o-----------------------------------------------------------------------------o
| Must have                                                                   |
o-----------------------------------------------------------------------------o

  - beginFigureMode(), endFigureMode() in Cal3D exporter.
  - Clean accessor functions. (getXXXCount(), getXXX(), getVectorXXX() etc.).
  - Use reserve()/resize() whereever we use vectors/etc.
  - Big-/little-endian stuff in the file formats!
  - Remove all dynamic new/delete. Performance breakdown!
  - Optimize memory management!
  - Optimize accumulation of the state if we only have one type of animation
  - Destroy() / destructor design (validity flag?).
  - Insert meaningfull error-texts in CalError::setLastError() calls.
  - Make appropriate functions inlined.
  - Use a time-factor in animation instances (faster/slower/paused playback).
  - Nice API to access bone, animation etc. states.
  - Iterator/[] cleanup for std::vector<>.
  - Speed and memory optimizations.
  - Detailed class description.
  - Default material thread/set handling.
  - Remove the 'duration' argument in CalCoreTrack::getState().
  - Implement a "no-LOD"-flag to save memory in the CalModel structure when
    LOD is not needed.
  - Implement a priority-system for the active animations.
  - Submesh material access? (e.g. eyebrows).
  - Direct setting of bone transformations (e.g.for "point-at" etc.)
  - README in the docs directory

o-----------------------------------------------------------------------------o
| Nice to have                                                                |
o-----------------------------------------------------------------------------o

  - Make creation process of models available through the API.
  - Different animation types? (keyframes/splines/...)?
  - (Selective) bone stretch functionality.
  - Scaling of the bones for different model sizes.
  - A way to select the kind of interpolation made between keyframes (like
    ROUND_DOWN, NEAREST, LINEAR, SPLINE, ...).

o-----------------------------------------------------------------------------o
| Fixes                                                                       |
o-----------------------------------------------------------------------------o

o-----------------------------------------------------------------------------o
