Source: http://users.polytech.unice.fr/~lingrand/Ens/opengl-4.pdf