Circle styles and pitch orientation
Capability commonCircleStyles connects six static properties on shared sources/layers alongside independent fill and outer stroke. Core ee7d7ec is implemented and pushed; three new CPU cases and the same final actual Vulkan GPU pass, with initial failure logs retained. Public34 plus opaque/half-alpha nonprimary colors, DPR2 and eight actual projection contours pass native/main/Worker. The matching development archive passed member-by-member checks; formal release/devices are not complete.
| Property | Default | Contract |
|---|---|---|
| circle-blur | 0 | Representable finite f32; negatives add no extra blur; at1 only the center is fully opaque; inward radial smoothstep/AA, no convolution |
| circle-translate | 0,0 | CSS x,y pixels,±128 per component; uniform evaluation |
| circle-translate-anchor | map | Map orientation/tangent plane versus viewport screen orientation |
| circle-sort-key | Source order | Stable ascending finite numbers, including source-order ties for±0 |
| circle-pitch-scale | map | Map scales with camera distance; viewport keeps screen size |
| circle-pitch-alignment | viewport | Map/tangent-plane alignment versus screen-facing viewport alignment |
import {map} from 'sqsmap';
map.addSource('places', {type:'geojson', data:{type:'FeatureCollection', features:[
{type:'Feature', id:1, properties:{rank:1, softness:0.5},
geometry:{type:'Point', coordinates:[116.4,39.9]}}
]}});
map.addLayer({id:'places', type:'circle', source:'places',
layout:{'circle-sort-key':['get','rank']},
paint:{'circle-radius':12, 'circle-color':'#2384ff', 'circle-opacity':0.7,
'circle-blur':['get','softness'], 'circle-stroke-width':2,
'circle-stroke-color':'#ffffff', 'circle-stroke-opacity':1,
'circle-translate':[12,0], 'circle-translate-anchor':'viewport',
'circle-pitch-alignment':'map', 'circle-pitch-scale':'viewport'}
});
await map.sqs.flush({render:true});
Blur retains property, feature-state, global, lexical/lazy and continuous zoom evaluation. Translation/enums accept uniform literals/global/explicit-object/lexical/lazy/legal zoom, without feature/state reads. Layout sort rejects feature-state/interpolate. Zoom is only a top-level step input (optionally outer let-wrapped), using floor(zoom), including actual pitched Mercator/globe zoom. Older fill/line planar-Mercator restrictions remain.
Four alignment/scale combinations share an actual homogeneous four-corner/six-vertex footprint for drawing, clipping and querying. Partial near clipping, near/far planes and back-facing globe-center rejection remain. Circles compose in business-layer order without depth writes. Queries preserve source/ID/MVT dedup and visible outer-stroke bounds; hollow interiors/blur edges can conservatively hit, without per-pixel alpha picking. Fully transparent/zero visible radius has no hit.
All shared candidates allow100000 records/two million new-parameter node estimates. Visible layers separately allow100000 filtered Point/MultiPoint original instances, including offscreen/transparent/zero-radius records. Drawable glyphs allow100000; scene glyphs plus older markers also share100000. Each glyph costs84 CPU+240 GPU bytes for six vertices,324 total, with64 per contiguous layer range. Complete candidates plus unchanged residents share256MiB. Radius/stroke-width/translation components each allow128 CSS pixels; existing128 shared layers and expression32 levels/1024 nodes/8192 steps remain.
Unknown dynamic MVT radius/stroke each conservatively retain128 coverage, using the candidate camera, original zoom and canonical tiles. Shared visible tiles still allow64; ground-horizon/projective-pole overrun or budget excess rejects before publication. Source/state/global/style/camera/globe/viewport/DPR, coverage and output validate before commit, retaining old identities/state/queues/frame on failure.
New-circle CSS sRGB inputs always decode into linear, with one linear fill/stroke composition and unchanged alpha. Native SRGB readback and browser UNORM raw RGB have different storage encodings. Acceptance retains raw samples and normalizes RGB only, including opaque/half-alpha nonprimary colors, without promising pixel identity over arbitrary older-channel backgrounds.
This channel serves shared sources/layers; older native style wrappers still reject new parameters. Behavior is independently implemented against theofficial circle properties, without MapLibre code. Complete transitions/terrain draping, mobile GIS/iOS/devices, external platforms and formal release/deployment remain pending.
Current development archive SqsMap-SDK-0.3.0-dev.ee7d7ecf-resumed.tar.gz: 557 manifest files plus bundle.json,36967737 bytes, SHA-256 edb53d7b91c66776eae01e99642e4730e3af99ce67cffdc95102df93f5f9bd95. All tar member sizes/SHA and25 recent portable scripts match byte-for-byte; previous gradient32/stroke6 regressions pass all three paths.