TextLayer
Host-facing façade for CPU text layout → TextRenderer instance buffer. Owns a GlyphAtlas by default; call replaceAtlas to swap in MsdfGlyphAtlas.
Import
import { TextLayer, createTextLayerForPointsRenderer } from "stratum-map";
Construction
TextLayer.create(options: TextLayerOptions)
| Field | Type | Description |
|---|---|---|
device | GPUDevice | Shared WebGPU device |
format | GPUTextureFormat | Swapchain / render target format |
canvas | HTMLCanvasElement | Layout / DPR reference |
dpr | number? | Override device pixel ratio |
maxGlyphs | number? | Cap emitted instances |
TextLayer.createForPointsRenderer(renderer, options?)
Convenience: pulls device, format, and canvas from an existing WebGpuPointsRenderer.
Label pipeline
setLabels(labels: TextLabel[])— map-anchored strings, priorities, halos.setMapToClipMatrix(m)— same contract as points.setCullExtent(extent, margin?)— optional map-space cull.rebuildInstancesIfDirty(view: TextViewState)— CPU layout + declutter when dirty.
Decluttering
| Method | Purpose |
|---|---|
setDeclutterEnabled(on) | Toggle screen-space collision |
setDeclutterPaddingPx(px) | Extra collision padding |
setMapZoomForDeclutter(zoom) | Zoom min/max gates on labels |
setDeclutterDebug(on) | Emit debug rects (dev) |
Performance notes
- Layout is CPU O(n) in label count; cap labels per view.
- MSDF avoids per-zoom atlas rebuild; bitmap atlas rebuilds on DPR changes.