Simplifie un peu le code de Object3D_Draw
Ferme gentiment l'appli si erreur à l'init des shaders. Ne duplique plus leurs logs de compil.
Correction de l'envoi d'uniform booléens
Specular map + Store one shader per material instead of per mesh

Also use a short to store bits for each type of texture used in the material
Use geometry instancing for collision spheres

Geometry instancing was only used for objects that couldn't be simulated by the physic engine.
Now the physics spheres that you can interact with are renderend with geometry instancing too.
Cleanup of shaders, now use an uber-like one

+ Gamma correction \o/
Near instantaneous Vertex indexing thanks to a HashMap

Make the dump*ListeToArray() functions free the list while copying it in an array. This way, we don't need to traverse the list again to free it.
Hacky depth rendering optimization

When depth rendering, instead of doing N draw calls for each sub-mesh without sending each material, accumulate the sub-meshes range and do only 1 draw call.
This only works because all submeshes are contiguous and in the same vbo
Lots of minor cleanups

More comprehensive handling of light calculations. We compute the light To surface vector, then make it bounce on the surface via the normal. We compute a surface To camera vector and the more colinear the bounced light is to the surface To camera vector, the higher the specular will be perceived at this point. For diffuse, we must negate the surface To light because we are taking the dot with the normal.
While those changes add somes unecessary negations in the code, they shouldn't have a high cost.
Also make the shadowMap fetch at the very beginning of the shader to allow the card to hide the fetch latency by processing instructions instead of going idle. Aka Latency Hiding.

The x key toggles the drawing of the scene (objects[0])
Merge branch 'master' of https://github.com/Teybeo/3D-Engine