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.
Like the vector submodule, it implements + - * operations for matrix, scalar and
vector where it makes sense but don't try yet to be efficient.
There is also matrix constructors for null and identity matrices and
row, col and diag subsets functions.
Simple vector and scalar operations are supported like + - * / but
without any optimization whatsoever to keep it generic and simple for now.
A swizzle function to get a new vector out of a subset of the original
vector's attributes is also added.
A lengthsq and length function is also provided.
If an error occurs, a `continue' restart can be invoked to resume the
program execution.
Also, if the main loop is called through the slime repl, it will still
be able to run on the main thread.