Resolve and render filters
This finally separates filter primitives into resolve() and render() steps.
First, all FeFoo
implement a FilterElement::resolve
method, which yields a PrimitiveParams
enum. That enum has one variant for each of the resolved primitives. This makes primitives extract all the values they need from their corresponding nodes and their ComputedValues
.
Then, at render()
time, we don't have nodes or computed values anymore; we operate on final values only...
... except for the Length
inside the base Primitive
structs, which need to be normalized. One day we may do that in advance, but not just now.