One table describing what each geometry kind needs from the shared
scene-loader machinery.
Three sites used to switch on the geometry type by hand — loadSceneNodes,
retryFailedLoaderUnlocked and SlicePrefetcher.getShadow. Each wrote the
same three-way branch with slightly different shapes, and the retry chain in
particular expressed a per-type capability as the presence of an if: a
kind with no arm there is not a compile error, it is a load that can never be
retried, manually or on reconnect.
Record<GeometryKind, GeometryDescriptor> makes that structural instead —
the vocabulary comes from the format contract, so a kind added there without
an entry here fails the build.
Only capabilities with a real consumer live here. Deliberately absent: any
"supports X" flag that every kind currently answers the same way, since a
field no branch reads is indistinguishable from a field that is wrong.
One table describing what each geometry kind needs from the shared scene-loader machinery.
Three sites used to switch on the geometry type by hand —
loadSceneNodes,retryFailedLoaderUnlockedandSlicePrefetcher.getShadow. Each wrote the same three-way branch with slightly different shapes, and the retry chain in particular expressed a per-type capability as the presence of anif: a kind with no arm there is not a compile error, it is a load that can never be retried, manually or on reconnect.Record<GeometryKind, GeometryDescriptor>makes that structural instead — the vocabulary comes from the format contract, so a kind added there without an entry here fails the build.Only capabilities with a real consumer live here. Deliberately absent: any "supports X" flag that every kind currently answers the same way, since a field no branch reads is indistinguishable from a field that is wrong.