applySoftMask
open fun applySoftMask(kind: SoftMask.Kind, maskBBox: Rectangle, maskCtm: Matrix, render: () -> Unit, renderMask: (KiteCanvas) -> Unit)
Apply a soft mask to the content rendered inside render (ISO 32000-1 §11.6.5). The default implementation just calls render. Backends without offscreen compositing fall back to painting through the mask.
Concrete implementations: open a saveLayer for the content, render() it, then over-paint via renderMask using DstIn blend mode so the mask's alpha determines the visible region.
The shipped backends implement both SMask kinds: Alpha uses the mask group's own alpha, and Luminosity composites the group over an opaque black backdrop and converts luminance to alpha (Skia's LUMA filter, a Compose colour-matrix filter, a per-pixel pass on AWT) per §11.6.5.2 (T-43).