One gradient stop. offset is parametric along the gradient axis (0 at the
start, 1 at the end). A stored offset is unconstrained; packing clamps it to
0..=1 and forces it non-decreasing for the GPU, so a caller may set it
freely through GradientStops::as_mut_slice.
How an image is sampled and placed inside its Rect, bundled for
ergonomic Default. tint stays on SceneNode::Image because
untinted is an explicit choice, not a neutral one.
Tunable text properties bundled for ergonomic Default, so a
SceneNode::Text stays { rect, text, color, size, style } and simple
nodes don’t spell out every knob. color and size stay on the variant
because a default for either would silently draw invisible text.
Pre-tessellated vertex: local position, premultiplied-linear color, and a
free-form uv channel (unused for solid fills, reserved for texture/gradient
sampling).
Blend mode for a VectorMesh, following the CSS mix-blend-mode
vocabulary used by SVG/Lottie-style artwork. All variants are wired into
the renderer: separable modes use fixed-function blending, the rest
(marked below) isolate the mesh into a graphics layer and composite it
with a custom shader.
Placement of scaled content inside the view bounds. Mirrors Godot’s
AspectRatioContainer::AlignmentMode and covers every fixed Alignment in
Compose (Begin/End are physical left/right and top/bottom, not
direction-aware).
Paint-space scene graph. Rect/Vec2 compounds carry physical pixels
(like Compose Offset/Size/Rect); scalar lengths use Px so the
dp→px boundary is explicit instead of unitless f32.
Graphics-layer ids live in non-overlapping bands because a single Scene
routinely mixes layers from several producers. 1.. counts up from the
producer side (repose-ui), the wgpu translator owns 0xE000_0000.. for
separable-blur scratch textures and 0xF000_0000.. for perspective
flattening, and canvas hosts own
CANVAS_LAYER_ID_BASE..0xE000_0000.
Ceiling on the stops a multi-stop paint may carry. The renderer packs the
table into the per-mesh uniform, so this is a hard structural limit rather
than a soft recommendation; hosts should split longer ramps themselves.