ReadonlytexturesThe sampler names this program binds, in reflection order (§33) — the
renderer resolves each through its own texture caches and binds unit
unitBase + index.
ReadonlyunitThe first texture unit this program's samplers occupy: 2 for a
"surface" program (0 is the albedo map's, 1 the §69 shadow map's —
both may be live in the same frame), 0 for a "screen" program (an
effect draw shares the frame with neither).
The per-view upload stamp: the renderer compares it against its own view
counter and re-uploads the view-projection (and render time) only when
this program has not seen the current view — many materials, one program,
one upload per view. Owned by the renderer; initialised to -1.
Uploads one material's §57 opacity and every reflected uniform value — the per-draw half of RFC 0001 Q3's per-material tier.
Uploads §9 render time, mirrored — a no-op for a graph with no time.
Uploads one uniform by name (the §70 graph-effect path, whose values live
on the pass). Unknown names are ignored — §61 forbids a frame from
throwing, and validateEffectRenderPass already refused them at setup.
Uploads projection * view — surface programs; a no-op on screen ones.
Makes this the current program (and uploads sampler units, once).
One compiled node program — the surface the renderer's draw loop (and its §70 graph-effect path) needs. One instance per distinct graph structure per context; any number of materials share it.