All matrices and vectors are from the glm library and receive the same template argument used to create the classes they’re used in.
Randomization is at the heart of the fractal flames algorithm. Flam3 uses a very fast and high quality RNG named ISAAC because system RNGs are usually of poor quality. Using ISAAC also allows for producing the exact same image on different platforms when supplied with the same seed.
Ember does the same, but uses a C++ version with a few additional convenience functions added.
The OpenCL code uses RNG named Mwc64.
While not much of a speed bottleneck, Xml parsing can take some time if reading in a large file, such as is used for animations. Flam3 implemented this in the least efficient manner possible by reading a single character at a time. Ember does this much faster by reading the entire file at once. The structure of the Xml parsing functions remains mostly the same.