Standard version: 2.0
Some effects are continuous distortions of an image (eg: a lens correction tool), the simplest case being an effect that performs a simple matrix based transform (eg: a stablisation tool).
A user often applies a series of such effects in a row, and if each effect processes the image, you end up with a significantly degraded image, as each effect will separately filter the image.
If an effect could report it's transformation to the host, the host could concatenate such multiple distortions and only filter the image being transformed once. This would also be a speed optimisation as only a single pass over the image would be performed.
We have two types of effects, a distortion effect, and a transform effect. Plug-ins advertise (probably via a context?) that they can behave as a distortion or transform.
Rather than a render action being called on such effects, an action is called to either return a function pointer (for distortion effects) or a homogeneous matrix (for transform effects). These are used by the host application to perform rendering as it sees fit.
The function would, in essence, take a point in output pixel co-ordinates, and back transform that to the input pixel co-ordinates.
The matrix would represent a transform a vector (x, y, 0, 1) from output to input.