regroup opengl version and window creation and event polling in the
viewport file.
To further clean up the files layout, move input.lisp to engine folder
gl-utils is now used for some simple macros
Resources are loaded as binary or lisp files. A streamed resource is
also planned but not yet implemented.
Resources are shared and loading happens asynchronically,
powered by promises.
Resources are used through proxies that shares a weak pointer.
When a proxy is gc'd, a finalizer is triggered using trivial-garbage to
release the resource.
Use a Domain Specific Language to define shaders in common-lisp syntax.
The code is then walked and compiled into glsl expressions and stored in
easy to use structures.
At the program initialization, the shader programs are compiled into opengl.
Dependencies are also kept, so that if a shader is redefined, the
corresponding program will be recompiled into opengl.
The old glsl-compiler is deleted as it is now rendered useless.
The render and mesh code are fixed according to changes in the interface.
Use glop to poll the events each frame and pass any input event to the
input system.
Provide functions like `global-set-key' or `global-set-motion' to setup
function to be triggered when a key is pressed or when the mouse is moved.
Modify the mesh class to use a foreign array for the vertex and index
streams to pass to opengl, but the memory is not yet properly managed.
Add a function to render each node in the scene graph when it finds a
mesh component.
The game module contains for now a internal loop to allow the game to
always update at 16ms and a simple scene graph to place object in a 3d
world. A camera class is defined to be able to view the world.