Phase 5 updates

Phase 5 · Slice 4 ·

UGUI graphics

  • Graphic, MaskableGraphic, Image and RawImage in UnityEngine.UI, with VertexHelper, BaseMeshEffect, Shadow, Outline, CanvasUpdateRegistry and GraphicRegistry.
    • Dirty layouts rebuild first when the canvases update, then dirty graphics regenerate their meshes, as in Unity.
    • Image draws simple (optionally keeping the sprite's aspect), sliced (with or without the center), tiled, and filled horizontally, vertically and radially (90, 180, 360). It's also a layout element with the sprite's preferred size.
  • CoreModule gained UIVertex, Sprites.DataUtility, and vertex colors on Mesh (kept managed; the mesh renderer doesn't draw them yet).
  • A new ui_graphics scenario recorded in Unity checks the generated meshes vertex by vertex (positions, UVs, colors), preferred sizes and textures. It matches exactly. 31 scenarios pass.
  • The renderer has a UI pass. Canvases send their meshes after they update, in hierarchy order and batched by texture.
    • World-space canvases draw with each camera, depth tested against the scene.
    • Overlay canvases draw over everything, in pixels, stretched when a screenshot's size differs from the screen's.
    • Screen-space camera canvases draw as overlays for now.
  • An MCP e2e test screenshots an overlay Image.
  • Not yet: masks and clipping (Mask, RectMask2D), sprite meshes for tight sprites, nested canvas sorting overrides.
  • Next: Text and TextMeshPro (with a bundled OFL font and a glyph atlas), then EventSystem raycasts and input, and Button, Toggle and Slider.