feat(labels): per-label outline + glow effects with DebugPanel tuning#176
Open
rulkens wants to merge 16 commits into
Open
feat(labels): per-label outline + glow effects with DebugPanel tuning#176rulkens wants to merge 16 commits into
rulkens wants to merge 16 commits into
Conversation
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Follow-up to bfade96 — the rebake bumped DISTANCE_RANGE_PX from 4 to 16 but missed updating the registry test's pinned constant. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Comments: timeless and terse — explain current state, not the journey. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The three-band rewrite dropped the educational notes about why median3 exists and how the texture_2d_array binding routes per-glyph fonts. Restore them — they're orthogonal to the band math and genuinely useful. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Closing the DebugPanel mid-tune left the override active indefinitely, which surprised users coming from the "(off)" dropdown's clean exit. Add the cleanup so panel toggle and dropdown reset behave the same. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
skymap | 110bf7b | Commit Preview URL Branch Preview URL |
May 20 2026, 12:58 AM |
The version counter alone only forces a re-flush IF a frame is already running. Render-on-demand sits idle between user inputs, so DebugPanel slider edits stayed invisible until the user moved the mouse. Add a registered wake callback; engine bootstrap wires it to scheduler.requestRender so every set/clear pumps the loop on the next tick. Tests can leave the callback unregistered. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Implements the Label Text Effects plan — adds per-label outline (hard outside stroke) and glow (soft outside halo) effects to the MSDF text renderer.
Label:outlineColor?,outlineEmFrac?,glowColor?,glowEmFrac?. Defaults are zero/transparent so existing producers render unchanged.Label.color— renderer now premultiplies at the pack-loop boundary; producers spell colours the natural way.distanceRange = 16(up from 4) so the SDF carries headroom for the up-to-12-px glow falloff tail.over(glow, over(outline, fill))in premultiplied space. Overlapping bands (glow from glyph edge, outline overlays inner portion).max(outlineEmFrac, glowEmFrac) * ATLAS_EM_PXso the effect bands aren't clipped.labelStyleOverridemodule-scoped record + a category dropdown + four controls in a newLabelEffectsSectionof the DebugPanel. Monotonic version counter feeds the label director's signature hash so slider edits force a re-flush.Architecture summary
Label.d.ts)colordocstring updated to straight-RGBAlabelRenderer.ts)LABEL_DATA_BYTES48 → 96; pack loop writes 24 slots/label with premultiplicationio.wesl)LabelDatagrows to 6 vec4s;VsOutcarries outlineColor/glowColor/widthsvertex.wesl)fragment.wesl)(1 - fillMask)masking on outlineyouAreHereSubsystem,poiSubsystemconsultlabelStyleOverrideper framesignatureOfincludes override version so edits force re-flushLabelEffectsSectionwith category dropdown + 4 controlsTest plan
npm run typecheck— clean ✅npx vitest run— 1647/1647 pass ✅npm run build— succeeds ✅clusteras the target, adjust the outline-width slider; cluster labels (Coma, Virgo, etc.) gain a visible outline within one frame.youAreHere; the cluster outline disappears, the "You are here" label gains the outline.(off); every label should look identical to its pre-feature appearance.Out of scope (deferred follow-up)
POI_STYLES.*andyouAreHereSubsystem's constants — a one-line-per-category edit that ships as a separate PR after visual tuning.Label.pixelSizefield (still required at the type level; ignored everywhere). Separate cleanup PR.🤖 Generated with Claude Code