In every iteration, these are applied before, and optionally after, variations are applied. Ember puts them in a class called Affine2D so they can be accessed more clearly using their coefficient labels, A-F. The layout is 2 columns of 3 rows each. Accessed col, row.
[A(0,0)][D(1,0)] [B(0,1)][E(1,1)] [C(0,2)][F(1,2)]
Each variation is class which derives from a base variation class and implements a virtual function which does the processing work. Other virtual functions are used for setting random or default states for parametric variations.
Ember does not support user defined variation plugins.
Throughout the years of plugin development, some variations have been supplied with pre and post variants of themselves. Some examples are
post_curl. Rather than only having some variations with pre/post variants and having to manually implement them, Ember takes a more generalized approach. All variations are supplied with pre and post variations, and their code is auto generated via macros.
This is overkill in most cases as it increases the number of available variations by 3, which brings the total number to over 900. However they are provided in the remote case a user does want to experiment with this obscure area of the algorithm.