Re-apply the epoch's shading variant (spec §6.2 / §3.4).
The stored-normal half of the rule is view-dependent — normal_dims must equal
the activedisplayDims, not merely be a permutation of it — so a displayDims
change can flip a shading="smooth" node between the two variants. That is the
same event that re-extracts the display-space positions, so the commit calls this
right next to applyMeshSide.
The shading half never changes, which is why an explicitly flat node is pinned
to the derivative variant here regardless of what the projection reports.
Guarded on change inside the material (both wrappers no-op when the define is
already in the wanted state), because flipping the variant recompiles the program
on the GLSL backend and rebuilds the graph on the TSL one — a per-slice-move cost
that must not be paid when nothing changed.
Re-apply the epoch's shading variant (spec §6.2 / §3.4).
The stored-normal half of the rule is view-dependent —
normal_dimsmust equal the activedisplayDims, not merely be a permutation of it — so adisplayDimschange can flip ashading="smooth"node between the two variants. That is the same event that re-extracts the display-space positions, so the commit calls this right next to applyMeshSide.The
shadinghalf never changes, which is why an explicitly flat node is pinned to the derivative variant here regardless of what the projection reports.Guarded on change inside the material (both wrappers no-op when the define is already in the wanted state), because flipping the variant recompiles the program on the GLSL backend and rebuilds the graph on the TSL one — a per-slice-move cost that must not be paid when nothing changed.