This project is rendering many smaller optimized particles through instancing in OpenGL. Instancing is probably the most effective way to generate particles. The other option not used here is using one VBO to keep track of all different particles, but this is space inefficient since it creates a large VBO.
To make the code on linux:
$ make run