Skip to content

Feat/scaling - #1150

Closed
r2dliu wants to merge 71 commits into
google:masterfrom
r2dliu:feat/scaling
Closed

r2dliu wants to merge 71 commits into
google:masterfrom
r2dliu:feat/scaling

Conversation

@r2dliu

@r2dliu r2dliu commented Nov 6, 2026

Copy link
Copy Markdown
Contributor

No description provided.

r2dliu added 28 commits June 4, 2026 11:05
* hoist out stamp logic shared between eraser and brush. use sqrt instead of hypotenuse

* merge brush and eraser into one paint tool

* use fullres voxels only for paint

* fix: survive files rewritten under cached indexes

* feat: strokeChecksum, the parity value a stroke carries to the server

* various fixes for failed chunk reads
Rendering for the app's instance-scaling work:
- SegmentAttributeTables: per-id class/flags and per-class colour/root/flags
  hash tables the app fills; the 2D segmentation shader and the 3D mesh paths
  colour and hide by them while enabled (CPU twin + GLSL in attributes.ts /
  attributes_shader.ts).
- Chunk labels: the chunk worker records each segmentation chunk's distinct
  labels and hands them to the frontend chunk.
- Layer mesh: draco fragments may carry a per-vertex feature id (decoded in
  neuroglancer_draco), mapped to per-feature pick ids, colours and hiding;
  multilod fragments can be read whole from node files ("fragments": "nodes").
- chunkEvents (added/removed) on ChunkQueueManager for the embedding app; mesh
  sources wait on visible 2D chunks before downloading.

Fork-review fixes:
- Segmentation render layer no longer pushes its display state into chunk
  sources (B10).
- 2D hover highlight under attributes (B5); 3D hover highlight per feature,
  whole merge group via the layer's equivalences (B7).
- Class colour split from the draw test, so hidden ids keep their class colour
  (B8).
- Feature plumbing limited to the multiscale mesh path (D3).
- Disposed chunk sources emit removed for their chunks; chunkEvents scoped per
  viewer (D14); formatting churn reverted (C1).
- 3D cross-section brush overlay colours by the attribute tables.
Soft refetch (fork-review B13, B14):
- A refetched chunk replaces the frontend's copy through the normal new-chunk
  path, freeing the old chunk's GPU memory first. The soft-swap branch and the
  `new: false` override are gone; it never ran for visible chunks, and the
  overwritten chunks leaked their textures.
- A soft invalidate completes only after its chunks ship, and the completion is
  queued behind the frontend's pending chunk updates, so the brush overlay is
  never reaped before the new data is drawn (the commit flicker).
- Re-queued chunks the worker drops (cached, not visible) expire on the
  frontend; overlapping soft invalidates complete together.

Mesh queue (B4, D1): mesh sources are back on upstream's queue level 0 and the
level-1 gate behind visible 2D chunks is removed; the layer mesh's node files
don't crowd out 2D.

Picking (B2, B3): per-feature pick IDs only when the shader adds the feature
index, and once per fragment per frame.

Mesh feature ids (D2): the precomputed mesh info declares
"vertex_feature_ids": true; without it the draco feature attribute is ignored.

chunk_labels (C4): one word-pair path for uint64 data.
@r2dliu r2dliu closed this Nov 6, 2026
@google-cla

google-cla Bot commented Nov 6, 2026

Copy link
Copy Markdown

Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

View this failed invocation of the CLA check for more information.

For the most up to date status, view the checks section at the bottom of the pull request.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants