EffectModifier
Base class for modifiers that append duplicate glyph geometry behind or in front of the face (outline, shadow, extrude, glow, custom effects).
Remarks
OnGlyphEffect decides whether the current glyph needs an effect quad and, if so, calls EnqueueDuplicate with an arbitrary payload integer — typically an index into the modifier's own per-emit data table. At onMainPassFinalize, the per-modifier emit queue is flushed via OnFlush. The default implementation reserves 4 vertices for each pending emit (copying source geometry, recording the quad at the modifier's LayerSequence) and calls OnEmitQuad so the subclass can fill colour, UV2, offsets. Multi-layer effects override OnFlush to flush per-layer buffers. Painter order is the single layer axis: every quad — face and duplicates — records its LayerSequence, and the generator sorts the index buffer by it, so stacking follows the order layers appear in Styles. The base class deliberately knows nothing about colour, dilate, softness, offsets, gradients, or any effect-specific parameter. Those live entirely inside the subclass. Common write patterns (solid colour + UV2, per-vertex gradient, offset, expand) are exposed via the static CoverageQuadOps helpers so subclasses share the implementation without sharing the data layout.Derived Types(3)
Types that inherit from EffectModifier.
Writes the actual per-vertex data into a reserved effect-quad slot. The base has already copied geometry (positions, UV0, UV1) from the source face quad and queued the triangle indices; destBaseIdx points at the first of the four duplicate vertices. The subclass writes Colors, Uvs2, and (if needed) re-positions Vertices through CoverageQuadOps helpers.
Queues a duplicate of the given face quad for emission at onMainPassFinalize, recorded at this modifier's LayerSequence — raised by the generator's current sequenceBias, captured here — so it stacks at its layer position inside whichever band the glyph is emitted into.
Flushes the pending emit queue. Default implementation processes emits in the order they were enqueued — correct for single-layer effects. Multi-layer effects (e.g. extrude) override and iterate their own per-layer buffers in layer-major order, calling ReserveQuad + OnEmitQuad directly.
