Read the HUD and share-link camera through the renderer's camera port

The first camera-family slice. The camera port's events move into a
shared module (render/camera/events.js) that the stub and the Cesium
port both use: listener lists, delivery with errors reported, and the
contract's per-listener `changed` measure.

The Cesium port gains:
- camera.on: `changed` measured per listener on every tick, where Cesium
  measures its single threshold (the counts match Cesium's own at each
  threshold); moveStart and moveEnd relayed from Cesium's camera;
- camera.viewRectangle, in degrees (now in CESIUM_CHECKS);
- lon and lat in pose, and NaN where Cesium has no cartographic position.

Code that still holds the viewer reaches the renderer through
rendererOf(viewer); the application renderer binds it on create and
unbinds on destroy.

The HUD reads its telemetry from the camera port and no longer imports
Cesium (off the allow-list). The share link writes the hash from the
pose. Its restore path stays on the viewer's camera for a later slice.

Behaviour changes:
- The share link listens to `changed` at its own 0.5 threshold, not at
  whatever global threshold layers had set, and also to moveEnd, so the
  hash always catches up with where the camera comes to rest.
- The HUD's and share link's camera callbacks run from the port's single
  relay, ahead of other moveStart/moveEnd listeners, and a throw in one
  is reported to the renderer's error listeners instead of escaping from
  Cesium's render.
This commit is contained in:
Sameh Khamis committed 2026-11-05 19:48:58 -08:00
1 parent 24bc8fce7e
commit de0ff6cd2d
28 files changed
+688 -243

No files matched your search

+3
View File
@@ -2490,7 +2490,9 @@
"src/app/operations.js",
"src/app/scene.js",
"src/render/cesium/appRenderer.js",
"src/render/rendererOf.js",
"src/render/cesium/ports.js",
"src/render/camera/events.js",
"src/render/contract/index.js",
"src/sources/sourceSlot.js",
"src/app/sources.js",
@@ -5275,6 +5277,7 @@
"src/geo/quaternion.js",
"src/render/stub/motion.js",
"src/render/stub/camera.js",
"src/render/camera/events.js",
"src/render/stub/geodesic.js",
"src/render/stub/viewRectangle.js",
"src/render/stub/orbits.js",