 TODO
======

 -- allow multiple terrain entities

Render Queue
------------

 * Loop through each object and update the animations
 * Loop through each object and check visibility
 * Loop through each object and get all the meshes to render
  - Encode required transform and re-check visibility
  - Add to a priority queue and sort by texture, states, transparency etc..
 * Render the queue


TextureManager
 * Implement reference counting for textures so they can be unloaded when no 
   longer required
 * Automatically resize to 2^N x 2^M
 * Automatically reduce textures to allowed range in OpenGL

CameraSystem
 * Create new camera types (e.g. top down, orthographic etc..)
 * Create smooth transitions between camera's

RenderSystem
 * Finish moving graphics code into appropriate places
 * Make greater use of vertex buffer objects
 * Support more OpenGL extensions.
 * Implement shadows (Volumes/Maps)
 * Implements Per-Pixel lighting and associated techniques
 * Move OpenGL code into one object. Aim is to allow the "drop in" of other Render objects using another system such as DX
 * Add sun/lens glare effects
 * Add wavy grass like in ATITD
 * Add foot prints
 * Add weather effects
  - Query weather entity
 * Create a particle engine for special effects
  - Smoke
  - Flames
  - Fog
 
ModelHandler
 * Make global instance and hide backend implementation
 * Needs to be able to instatiate objects independant of entity (e.g. for mercator forest)
 * Needs models to query and check for updates from associated world entity's

Media
 * Improve media efficiency 
 * run meshes through poly reductioner ?
 * Make textures smaller
 * Symbolic Link to SVN to automatically update

General
 * Add an oct tree or other space partitioning system.
  - Provide basis for collision detection code
  - Reduce number of entities to render
  - Can link nodes to an "indoor" engine
  - Use to provide distance info for rendering options

 * Add support to create custom font textures from say freetype

 * Improve Sound/Music System
  - SDL_mixer (or maybe SDL sound subsystem) doesn't clean up properly
  - Currently using SDL_mixer. It is adequate for now, but a much better alternative would be to use openAL, www.openal.org


 * Create a texture handling class.
  - Loads and unloads textures as required
  - Can perform transformations on textures

 * Create a file handling class
  - Allows memory mapping if appropriate
  - Allow file access from archives
  - transparent access bewtween file system and archives

  - Store type/position/emissive info about each light source
  - Determines light priority order (render N most appropriate light sources)
 

 * Improve scripting engine
  - Character manipulation
  - Animation control
  - Init special effects

 * Allow character portraits

 * Cally improvements
  - Make model heads turn to face the way the camera is looking
  - Allow skinning
  - Improve animation/mesh changing 

