Particle system basics
There are quite a few things we first need to cover in order to get to the more meaty parts of implementing the particle system. Understanding certain concepts is key to making our system work as intended, starting with the way data is stored.
Array of structs versus struct of arrays
It may be tempting at first to simply stick all of the data a particle has into a single class, give it some custom methods for handling certain situations, and store all of these objects in some generic container, as shown here:
While it's certainly easier this way, it doesn't help with performance at all. Keep in mind that we're probably going to be dealing with thousands, if not tens of thousands of instances of particles, all of which need to be updated in a variety of different ways. A simple update loop that works with particles may end up making the cache look like this:
This is terrible as far as performance is concerned, because if we only need to work with positions, that means all...