Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
380 commits
Select commit Hold shift + click to select a range
945ffff
core: Tolerate stencil clipping setup failures (#4317)
sargunv Jul 13, 2026
764accc
core: Fix Vulkan snapshot timing for headless too (#4397)
ciscorn Jul 13, 2026
c58080b
Add feature state functionality to Android (#4219)
brandonroeder Jul 13, 2026
d4ae69d
fix(core): make headless OpenGL display singletons thread-safe (#4332)
ciscorn Jul 13, 2026
f442c70
Fix intermittent iOS CppUnitTests build race (#4402)
louwers Jul 13, 2026
69e6ebb
Share get_elevation() in the Metal, Vulkan, and WebGPU shader preludes
acalcutt Jul 14, 2026
73618ba
Terrain Phase 1: elevate symbol layers by DEM elevation on all backends
acalcutt Jul 14, 2026
4fa248c
android: add 3D Terrain test activity using Mapterhorn DEM tiles
acalcutt Jul 14, 2026
13e057d
Update TERRAIN.md to reflect the current state of the branch
acalcutt Jul 14, 2026
dbb3b9f
Merge remote-tracking branch 'origin/main' into terrain-3d-color-relief
acalcutt Jul 14, 2026
6a0aa1b
fix(terrain): stop rebuilding terrain resources every frame
acalcutt Jul 14, 2026
089f049
android: add Innsbruck 3D terrain test activity on a vector basemap
acalcutt Jul 14, 2026
5358045
feat(terrain): retain DEM textures and fall back to ancestor tiles wh…
acalcutt Jul 14, 2026
da217df
fix(gl): reconcile texture pool bookkeeping when GL reuses a tracked id
acalcutt Jul 14, 2026
1557fcc
android: give terrain its own raster-dem source in the Mapterhorn exa…
acalcutt Jul 14, 2026
26444ca
android: replace the Innsbruck terrain example with a planet-scale one
acalcutt Jul 14, 2026
2a56ac2
android: add Style.setTerrain/getTerrain runtime API
acalcutt Jul 14, 2026
9f61238
android: use the runtime terrain API in the examples; add debug-tiles…
acalcutt Jul 14, 2026
620d9d8
android: rename Terrain.sourceId to source to match the style spec
acalcutt Jul 14, 2026
e625df5
gl: persist texture pool forensics across reboots and detect first st…
acalcutt Jul 14, 2026
12beac5
gl: report draw calls issued with no buffer bound to a shader uniform…
acalcutt Jul 14, 2026
5f015b1
fix(renderer): bind global uniform buffers for the render-target pass
acalcutt Jul 14, 2026
0900ad3
android: add 3D Terrain (OSM raster) test activity
acalcutt Jul 14, 2026
084a850
docs(terrain): document the drape routing defect and per-target trans…
acalcutt Jul 14, 2026
8019dc1
fix(terrain): draw draped tiles into every overlapping render target …
acalcutt Jul 14, 2026
e1148b3
fix(renderer): initialize GlobalPaintParamsUBO::drape_tile explicitly
acalcutt Jul 14, 2026
247c776
Enable FastPFOR encodings in MLT (#4146)
TimSylvester Jul 14, 2026
37b7ca6
perf: make the GL uniform-block validation opt-in and drop per-frame …
acalcutt Jul 14, 2026
63b6f2a
fix(terrain): resolve overlapping tiles per drape target instead of d…
acalcutt Jul 14, 2026
e2fb1bb
fix(terrain): keep a drape target's rendered content while coverage i…
acalcutt Jul 14, 2026
72cb4d2
fix(terrain): keep terrain mesh tiles at the ideal cover, expanding p…
acalcutt Jul 14, 2026
cb8bfbf
docs(terrain): record drape rework status, gl-js convergence items, a…
acalcutt Jul 14, 2026
08c2fc1
fix(terrain): cap the DEM texture cache and widen memTextures to int64
acalcutt Jul 14, 2026
58d9abb
fix(gfx): give the isZero initializer list an explicit int64_t elemen…
acalcutt Jul 14, 2026
74e3e3b
debug(terrain): throttled diagnostics for empty drape targets and DEM…
acalcutt Jul 14, 2026
3ca4534
fix(terrain): time-bound the baked drape coverage retention
acalcutt Jul 14, 2026
98dd422
fix(terrain): render placeholder-flat meshes instead of holes, upgrad…
acalcutt Jul 14, 2026
6c55cef
Update PMTiles docs & bump NDK version (#4278)
mizmay Jul 14, 2026
2ca8ef2
fix(terrain): apply_drape_transform on Metal and Vulkan
acalcutt Jul 14, 2026
07f8f33
Convert a PMTiles metadata decompression failure into an error respon…
bonesyjr Jul 14, 2026
576653c
fix(terrain): apply_drape_transform on WebGPU
acalcutt Jul 15, 2026
2941529
feat(terrain): Phase 2 - terrain depth pass and symbol occlusion (GL)
acalcutt Jul 15, 2026
a9bf400
fix(gl): declare the TerrainDepthShader ShaderInfo specialization
acalcutt Jul 15, 2026
3939f02
Merge remote-tracking branch 'origin/main' into terrain-3d-color-relief
acalcutt Jul 15, 2026
4c28990
fix(vendor): correct maplibre-tile-spec submodule pointer after mergi…
acalcutt Jul 15, 2026
50ae1b8
style(shaders): clang-format the generated shader_source.cpp
acalcutt Jul 15, 2026
9546a3c
fix(vendor): point maplibre-tile-spec submodule at d457bf2b to match …
acalcutt Jul 15, 2026
c9c04bc
fix(terrain): stop drape targets flickering to less content
acalcutt Jul 15, 2026
91f7033
fix(render-test): narrow int64 memTextures for GfxProbe::Memory(int,int)
acalcutt Jul 15, 2026
2317757
fix(gl): drop now-redundant int64_t cast on memTextures
acalcutt Jul 15, 2026
dd29974
fix(terrain): do not warn about a missing map texture on the depth pass
acalcutt Jul 15, 2026
56f85cb
fix(terrain): make the drape TexturePool persist across frames
acalcutt Jul 15, 2026
a0e04cc
feat(terrain): Phase 2 symbol occlusion on Metal
acalcutt Jul 15, 2026
239a9c1
docs(terrain): track the hardcoded 512x512 drape target size under Ph…
acalcutt Jul 15, 2026
62f5860
feat(terrain): Phase 2 symbol occlusion on Vulkan
acalcutt Jul 15, 2026
0d0b214
feat(terrain): Phase 2 symbol occlusion on WebGPU
acalcutt Jul 15, 2026
c28099c
docs(terrain): mark Phase 2 (symbol occlusion) complete on all backends
acalcutt Jul 15, 2026
3086b6d
perf(terrain): cache drape target textures, re-rendering only on cont…
acalcutt Jul 15, 2026
cf7db67
fix(terrain): render prepare targets before the drapes that sample them
acalcutt Jul 15, 2026
1c1a0ed
Draw all overlapping draped tiles, clipped by stencil, as gl-js does
acalcutt Jul 15, 2026
d7cc2cd
Name the missing layer in the drape coverage diagnostic
acalcutt Jul 15, 2026
1079418
Give the tile cover terrain height, so near-field relief is requested
acalcutt Jul 15, 2026
7543004
Frustum-cull the terrain mesh so a sparse DEM's low-zoom tiles don't …
acalcutt Jul 15, 2026
5525e4e
Include terrain_depth shader header where the backends register it
acalcutt Jul 15, 2026
ca6e42b
Add terrain-camera collision: lift the camera when it drops below ter…
acalcutt Jul 15, 2026
d136a2b
Fall back to the centre when the camera's ground point has no DEM
acalcutt Jul 15, 2026
0f571f9
Revert the terrain-camera collision fix; keep it as Phase 4 research
acalcutt Jul 15, 2026
6607947
Remove TEMP terrain diagnostics; bring TERRAIN.md up to date
acalcutt Jul 15, 2026
a9b12f6
Reference upstream maplibre-gl-js, not a local path name
acalcutt Jul 15, 2026
58f653f
Add dem_elevation_provider to the Bazel core sources
acalcutt Jul 15, 2026
7268371
Update TERRAIN.md
acalcutt Jul 15, 2026
0bd77ee
Update TerrainActivity.kt
acalcutt Jul 15, 2026
26895bc
Bring TERRAIN.md in line with the current implementation
acalcutt Jul 15, 2026
12876da
fix(terrain): consistent layer numbering between the drape's opaque a…
acalcutt Jul 16, 2026
251ffc7
android: allow raising maxPitchPreference to 85 and use it in the ter…
acalcutt Jul 17, 2026
93d4844
macos: add release workflow for GitHub Releases (#4242)
fonok3 Jul 17, 2026
cdde840
Fix Android feature state instrumentation tests (#4405)
louwers Jul 17, 2026
bb0122b
fix(terrain): Vulkan terrain draping correctness + pipeline-cache perf
acalcutt Jul 17, 2026
4dacaf5
fix(terrain): drape stencil clip-mask clip-z on Vulkan (vector fill/l…
acalcutt Jul 17, 2026
ce3caaf
build(android): Use cacheable Gradle task for downloading Vulkan vali…
mjaakko Jul 17, 2026
4ec0555
Remove AWS key from iOS/Android (#4413)
louwers Jul 18, 2026
3df7cd5
Merge upstream feature/terrain-3d (main merged via #4409)
acalcutt Jul 18, 2026
689d345
style: clang-format vulkan offscreen_texture
Jul 18, 2026
da1894b
chore(terrain): remove debug scaffolding and de-duplicate DEM mapping
acalcutt Jul 18, 2026
af05ad6
fix(terrain): decode-then-interpolate DEM in the terrain mesh shader
acalcutt Jul 18, 2026
b5ff533
test(terrain): add FPV flight activity for motion/streaming testing
acalcutt Jul 18, 2026
0c173bb
fix(terrain): mesh skirts to hide LOD-boundary seams
acalcutt Jul 18, 2026
b86a49f
fix(vulkan): render elevated symbols/labels on terrain
acalcutt Jul 18, 2026
ac7dd6b
test(terrain): start the FPV flight above the terrain
acalcutt Jul 18, 2026
13b3632
test(terrain): bring over gl-js skirts-auto/skirts-none render tests
acalcutt Jul 18, 2026
b1ce105
Frustum-cull drape-target tiles to match the terrain mesh
acalcutt Jul 18, 2026
5704876
Add terrain skirts test fixtures to cache-style.db
acalcutt Jul 18, 2026
5303d65
Un-ignore terrain skirts render tests
acalcutt Jul 18, 2026
5b17c5a
Un-ignore terrain default and pitched-world render tests
acalcutt Jul 18, 2026
f8e4920
Merge branch 'main' into terrain-3d-color-relief
acalcutt Jul 18, 2026
87699a5
TEMP DIAGNOSTIC: force solid-color Metal terrain surface
acalcutt Jul 18, 2026
e13052a
fix(terrain): dispose the terrain mesh layer group when terrain is di…
acalcutt Jul 18, 2026
77f4864
TEMP DIAGNOSTIC: flatten Metal terrain mesh elevation
acalcutt Jul 18, 2026
04e5965
Revert "TEMP DIAGNOSTIC: flatten Metal terrain mesh elevation"
acalcutt Jul 19, 2026
199f2ba
Revert "TEMP DIAGNOSTIC: force solid-color Metal terrain surface"
acalcutt Jul 19, 2026
429af7c
fix(terrain): remap surface clip-z to [0,1] on Metal/Vulkan/WebGPU
acalcutt Jul 19, 2026
72e2f45
TEMP DIAGNOSTIC: constant elevation for Metal terrain
acalcutt Jul 19, 2026
0e21d14
Revert "TEMP DIAGNOSTIC: constant elevation for Metal terrain"
acalcutt Jul 19, 2026
1e42d7b
Revert "fix(terrain): remap surface clip-z to [0,1] on Metal/Vulkan/W…
acalcutt Jul 19, 2026
5d55730
fix(terrain): sample the DEM at an explicit LOD in Metal get_elevation
acalcutt Jul 19, 2026
05630fa
TEMP DIAGNOSTIC: return raw DEM sample in Metal get_elevation
acalcutt Jul 19, 2026
83c6a7e
TEMP DIAGNOSTIC: full DEM decode with hardcoded unpack (Metal)
acalcutt Jul 19, 2026
6584b8b
TEMP DIAGNOSTIC: single-tap DEM decode (Metal)
acalcutt Jul 19, 2026
72763e1
TEMP DIAGNOSTIC: channel-range check for Metal vertex DEM sample
acalcutt Jul 19, 2026
732200a
Revert Metal DEM diagnostics; ignore terrain render tests on Metal only
acalcutt Jul 19, 2026
7df6e17
Keep terrain render tests enabled on Metal
acalcutt Jul 19, 2026
f4b3cbb
Add on-demand terrain render-test workflow (macOS/Metal)
acalcutt Jul 19, 2026
bbc5326
Run terrain render-test workflow on push
acalcutt Jul 19, 2026
7418fc6
Add dedicated terrain render-test step to node-ci
acalcutt Jul 19, 2026
ea21bff
Add log markers to the node-ci terrain render-test step
acalcutt Jul 19, 2026
19f1789
Add terrain DEM debug logging (Metal texture binding)
acalcutt Jul 19, 2026
aa19cf9
TEMP DIAGNOSTIC: paint the vertex-sampled DEM texel (Metal terrain)
acalcutt Jul 19, 2026
5ec1a03
fix(terrain): declare terrarium encoding on skirts DEM source
acalcutt Jul 19, 2026
bc30b91
Run terrain render tests online so default fetches its remote raster
acalcutt Jul 19, 2026
2541221
default terrain: switch debug raster to local {z}-{x}-{y} template
acalcutt Jul 19, 2026
37a16d3
default terrain: add cached debug-tiles for the offline render test
acalcutt Jul 19, 2026
3b0dbaf
default terrain: restore gl-js fixtures (terrain-shading DEM + local …
acalcutt Jul 19, 2026
ed57e60
TEMP DIAGNOSTIC: solid-color Metal terrain surface (default blank)
acalcutt Jul 19, 2026
68679b6
fix(terrain): remap surface clip-z to [0,1] on Metal/Vulkan/WebGPU
acalcutt Jul 19, 2026
da92361
TEMP DIAGNOSTIC: flatten Metal terrain elevation (default still blank)
acalcutt Jul 19, 2026
654af3c
Scale terrain elevation from metres to world pixels (fixes blank surf…
acalcutt Jul 19, 2026
c21a49b
Match gl-js skirts test exactly: drop the added terrarium encoding
acalcutt Jul 19, 2026
6c3aba5
Fix vertically-flipped draped map on Metal terrain surface
acalcutt Jul 19, 2026
52056ad
Update terrain render-test baselines to maplibre-native output
acalcutt Jul 19, 2026
6bd1767
Bake terrain elevation scale into projection matrix for all elevated …
acalcutt Jul 19, 2026
823147b
Revert terrain elevation pixelsPerMeter scale (double-applied)
acalcutt Jul 19, 2026
e0fe64a
Revert "Update terrain render-test baselines to maplibre-native output"
acalcutt Jul 19, 2026
aaa145c
Fix symbol occlusion behind 3D terrain (six stacked defects)
acalcutt Jul 20, 2026
c9fea76
add occlusion test
acalcutt Jul 20, 2026
c1bb7c8
Remove terrain render-test CI scaffolding
acalcutt Jul 20, 2026
5d39f97
Update terrain/pitched-world baseline to the corrected-elevation render
acalcutt Jul 20, 2026
7426c42
ios: release MapLibreApp to TestFlight (#4416)
louwers Jul 20, 2026
c8accba
Document the Vulkan occlusion fix and the GL regression it likely caused
acalcutt Jul 20, 2026
1efc0db
fix(terrain): fix hillshade render-target memory leak causing OOM
yaing11 Jul 21, 2026
c2d28b9
Merge pull request #4 from yaing11/fix-terrain-3d-memory-leak
acalcutt Jul 21, 2026
d866b28
Add fill extrusion style property that enables rounded corners for ex…
alexcristici Jul 21, 2026
63293b3
feat(android): Create default OkHttpClient only when needed (#4411)
mjaakko Jul 21, 2026
2a3e5e8
Release MapLibre Android 13.4.0 (#4423)
louwers Jul 21, 2026
5f14c55
Release MapLibre iOS 6.28.0 (#4422)
louwers Jul 21, 2026
5cfd7f1
Make sure maplibre-tile-spec builds OK with Qt with all configuration…
ntadej Jul 22, 2026
b288c6d
feat(core): Add public stringifyGeoJSON to mbgl::style::conversion (#…
yuiseki Jul 22, 2026
702ebc6
core: check if edge length is zero for rounded corners (#4424)
zarechnyy Jul 22, 2026
1d67f94
core: refactor VectorMLTTileData behind impl (#4427)
louwers Jul 23, 2026
803123d
Update TERRAIN.md
acalcutt Jul 23, 2026
6131380
try to improve line quality
acalcutt Jul 23, 2026
58847a1
fix(terrain): cover mesh/drape at the view's ideal zoom, not the DEM's
acalcutt Jul 23, 2026
18545ca
Release MapLibre Android 13.4.1 and fix iOS workflow (#4429)
louwers Jul 23, 2026
15fcee5
core: emdawnwebgpu build support (#4370)
sargunv Jul 24, 2026
5bcdc70
core: Drain WebGPU render-thread cleanup jobs (#4367)
sargunv Jul 24, 2026
1242618
fix(terrain): dilate the mesh cover by a ring to reduce the frontier …
acalcutt Jul 24, 2026
c3b7b37
perf(gl): invalidate offscreen depth/stencil after each render pass
acalcutt Jul 24, 2026
635240d
perf(terrain): drape target signature cache keyed on integer tile-zoom
acalcutt Jul 24, 2026
52dd57f
perf(terrain): progressive tile-build + drape-render budgets to remov…
acalcutt Jul 24, 2026
75b7002
perf(terrain): tune progressive budgets and re-render drapes on conte…
acalcutt Jul 24, 2026
138626e
docs(terrain): note fill-extrusion buildings are not occluded by terrain
acalcutt Jul 24, 2026
8501785
fix(terrain): cover the mesh at the DEM source's tile size, not a fix…
acalcutt Jul 24, 2026
bed63bb
feat(terrain): TerrainLoadMode API to select the progressive-loading …
acalcutt Jul 24, 2026
3beb371
Fix terrain re-enable blank map; add 3D terrain test menu + stats HUD…
acalcutt Jul 24, 2026
214bd52
TERRAIN.md: record the terrain re-enable fix and shared test menu
acalcutt Jul 25, 2026
9bcc33d
Persist terrain load mode across the 3D terrain tests
acalcutt Jul 25, 2026
bd8460a
Add terrain perf-test instrumentation: frame-time metrics, zoom-burst…
acalcutt Jul 25, 2026
f92f370
Terrain flight: elevation-planned drone tour that stays above ground
acalcutt Jul 25, 2026
788f946
Terrain flight: sustained overview dwell, ramped pitch to horizon, 36…
acalcutt Jul 25, 2026
fb01620
Gate above-ground debug log behind a toggle; drop leftover drape diag…
acalcutt Jul 25, 2026
f19d675
Merge upstream/main into terrain-3d-color-relief
acalcutt Jul 25, 2026
9cd9210
Fix fill-extrusion centroid attribute offset after upstream merge
acalcutt Jul 25, 2026
4dff2d2
Restore symbol terrain-occlusion in GL headers after merge regen
acalcutt Jul 25, 2026
f07d232
Fix CI: clang-tidy container-contains, clang-format, and EOF newlines
acalcutt Jul 25, 2026
2444d27
docs(terrain): correct TERRAIN.md to match current state
acalcutt Jul 25, 2026
98336c7
Add terrain load-mode benchmark script + document it
acalcutt Jul 25, 2026
e362eb4
perf(terrain): cut per-frame CPU encode cost in Balanced/Performance …
acalcutt Jul 27, 2026
1ced2d4
docs: terrain-mesh instancing feasibility / design (experiment)
acalcutt Jul 27, 2026
e87d7e6
docs: note WifiDB PR #5 already implements the depth-pass instancing
acalcutt Jul 27, 2026
c69d31d
perf(gl): UBO bind state-guard, instanced draw path, offscreen FBO in…
yaing11 Jul 17, 2026
ea18a7f
feat(terrain): instanced depth shader (GL) - shader system half
yaing11 Jul 23, 2026
2104a37
feat(terrain): instanced depth - C++ member scaffolding (WIP)
yaing11 Jul 23, 2026
58a9716
feat(terrain): instanced depth pass - C++ core (GL), WIP for build/de…
yaing11 Jul 23, 2026
ccee721
feat(terrain): bind instanced-depth DEM array via DrawableGL, not ren…
yaing11 Jul 23, 2026
7acb82e
fix(terrain): correct GL symbol occlusion depth convention
yaing11 Jul 23, 2026
2a4022d
feat(terrain): bridge instanced-depth port prerequisites
acalcutt Jul 27, 2026
83ce54e
fix(core): accept alpha in hsl colors (#4435)
chrisgervang Jul 28, 2026
2caf8af
feat(terrain): occlude fill-extrusion behind terrain (GL, per fragment)
acalcutt Jul 29, 2026
a6189fe
docs: remove duplicate packages from macOS Homebrew
kangyul Jul 29, 2026
1046227
fix(bench): restore the default load mode when the benchmark finishes
acalcutt Jul 29, 2026
c8dad00
fix(android): Fix surface changed ANR (#4439)
adrian-cojocaru Jul 29, 2026
4df6f4a
docs: root-cause the instancing-port white-frame flicker
acalcutt Jul 29, 2026
a3df830
perf(terrain): gate depth pass, cap mesh tiles, opaque depth-tested s…
yaing11 Jul 17, 2026
7f94bc7
fix(terrain): resolve the instanced-depth port flicker (adapt 604f293)
acalcutt Jul 30, 2026
62324d2
fix(terrain): drop coverZoomShift - it blanked the map on terrain re-…
acalcutt Jul 30, 2026
e02ea4f
Merge instanced terrain depth pass (WifiDB#5 port) into terrain-3d-co…
acalcutt Jul 30, 2026
acc3164
feat(terrain): make the mesh-tile cap per load mode
acalcutt Jul 30, 2026
3e54682
Revert "feat(terrain): occlude fill-extrusion behind terrain (GL, per…
acalcutt Jul 30, 2026
efc4f9c
docs(terrain): record the reverted fill-extrusion occlusion attempt
acalcutt Jul 30, 2026
29ca99d
fix(terrain): unbreak the non-OpenGL build after the instancing port
acalcutt Jul 30, 2026
f05955a
fix(webgpu): FE attribute count, and document backend parity status
acalcutt Jul 30, 2026
5864482
feat(terrain): fill-extrusion elevation on the instanced path (Metal/…
acalcutt Jul 30, 2026
a261acb
docs(terrain): FE elevation on Metal/Vulkan builds but is still broke…
acalcutt Jul 30, 2026
884185c
docs(terrain): Vulkan fill-extrusion draws nothing - not an elevation…
acalcutt Jul 30, 2026
83313a1
docs(terrain): Vulkan fill-extrusion is broken with terrain OFF too
acalcutt Jul 30, 2026
fbf87d9
Revert "feat(terrain): fill-extrusion elevation on the instanced path…
acalcutt Jul 30, 2026
7009599
docs(terrain): correct the Metal/Vulkan fill-extrusion notes after th…
acalcutt Jul 30, 2026
131e8be
docs(terrain): the Vulkan FE breakage is the sampler binding, not the…
acalcutt Jul 30, 2026
2775e5d
docs(terrain): low-end device data - the load-mode budgets do not help
acalcutt Jul 30, 2026
6111dac
docs(terrain): confirm the Vulkan floating-buildings gap is long-stan…
acalcutt Aug 1, 2026
50dc571
test(terrain): add a fill-extrusion-over-terrain render test
acalcutt Aug 1, 2026
a0b5c50
Fix first-frame terrain blankness in still renders; add terrain/fill-…
acalcutt Aug 1, 2026
62e1fdc
Fix fill-extrusion terrain elevation on Vulkan (buildings rendered at…
acalcutt Aug 1, 2026
7de836b
Fix clang-tidy readability-redundant-casting in render_terrain
acalcutt Aug 1, 2026
bedc2eb
Merge branch 'main' into terrain-3d-color-relief
acalcutt Aug 1, 2026
38e26f1
Fix CI: clang-tidy cast, Bazel missing texture_2d_array, WebGPU paint…
acalcutt Aug 2, 2026
c21b94f
Merge branch 'terrain-3d-color-relief' of https://github.com/WifiDB/m…
acalcutt Aug 2, 2026
4f7ae96
Add trailing newline to terrain/fill-extrusion style.json
acalcutt Aug 2, 2026
e255016
Declare paintParams in the remaining WebGPU shader modules that use it
acalcutt Aug 2, 2026
42665cc
Document the terrain render-test failures as three independent bugs
acalcutt Aug 2, 2026
e39310e
Note DEM encoding families across the terrain render tests
acalcutt Aug 2, 2026
cbb20ea
Verify DEM fixture encodings by decoding: tiles/terrain/ is mixed
acalcutt Aug 2, 2026
30d7e3b
skirts-auto/none: declare terrarium encoding (partial fix, still blank)
acalcutt Aug 2, 2026
73f162b
Fix terrain rendering nothing when the DEM tile size is not 512
acalcutt Aug 2, 2026
873da6a
Migrate the skirts terrain tests onto the JAXA terrain-RGB fixture set
acalcutt Aug 2, 2026
33fc032
Move the unverified 256px terrain tiles back out of tiles/jaxa/
acalcutt Aug 2, 2026
686cb65
Simplify the DEM fixture attribution entries
acalcutt Aug 2, 2026
2076b44
Cache every tiles/jaxa/ file under the jaxa/ URL template
acalcutt Aug 2, 2026
6f30b17
Correct the stale tile-size note in the fixture README
acalcutt Aug 2, 2026
4afce0a
Keep the tiles README to attribution only
acalcutt Aug 2, 2026
0fa5ead
Add the JAXA tiles the terrain tests need to metrics/integration/tile…
acalcutt Aug 2, 2026
71c6d3b
Point color-relief/low-zoom at the JAXA tile set
acalcutt Aug 2, 2026
fdcc8f7
debug
acalcutt Aug 2, 2026
5295825
Metal: store the offscreen colour attachment instead of discarding it
acalcutt Aug 2, 2026
83c62d0
Apply clang-format to the terrain diagnostic log statement
acalcutt Aug 2, 2026
3ff34a0
Log drape texture identity at both the bind and render sites
acalcutt Aug 2, 2026
f38c5db
Log Metal clear-request handling and per-target drape draw counts
acalcutt Aug 2, 2026
2522032
Log the drape target clear colour alongside the draw count
acalcutt Aug 2, 2026
a4a7c93
Dump terrain drape targets as PNGs, and gate all terrain diagnostics …
acalcutt Aug 2, 2026
ff1322f
Upload the terrain drape dumps from node-ci, and make their filenames…
acalcutt Aug 2, 2026
c9ab8d4
Metal: log terrain texture binds at draw time; drop the drape dumps
acalcutt Aug 2, 2026
4e79bca
Metal: probe the terrain fragment shader directly (flat red)
acalcutt Aug 2, 2026
82df176
Metal: switch the terrain fragment probe to UV visualisation
acalcutt Aug 2, 2026
d1a1824
Metal: probe whether the terrain skirts are what renders black
acalcutt Aug 2, 2026
96f0a95
Metal: apply the 3D depth-stencil state in plain layer groups (terrai…
acalcutt Aug 2, 2026
119b811
Document the Metal terrain root cause in TERRAIN.md
acalcutt Aug 2, 2026
616a2ce
Metal: elevate fill extrusions on 3D terrain
acalcutt Aug 2, 2026
87e3728
Document the terrain/default root cause: no terrain-anchored camera
acalcutt Aug 2, 2026
b6c563a
Remove the terrain debug instrumentation
acalcutt Aug 2, 2026
bacf40b
Rebaseline the skirts terrain tests against the JAXA fixtures
acalcutt Aug 2, 2026
07bc718
Regenerate the terrain/fill-extrusion baseline on Linux
acalcutt Aug 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 2 additions & 0 deletions .github/scripts/notify-release-on-prs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,8 @@ async function createOrUpdateReleaseNotification({
return `MapLibre iOS ${version}`;
} else if (platform === 'android') {
return `MapLibre Android ${version}`;
} else if (platform === 'macos') {
return `MapLibre macOS ${version}`;
}
return tag;
}
Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/ios-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -349,6 +349,9 @@ jobs:

ios-ci-result:
runs-on: ubuntu-latest
permissions:
actions: write
contents: read
if: needs.pre_job.outputs.should_skip != 'true' && always()
needs:
- pre_job
Expand Down
49 changes: 39 additions & 10 deletions .github/workflows/ios-testapp-release.yml
Original file line number Diff line number Diff line change
@@ -1,29 +1,58 @@
name: ios-testapp-release

on:
workflow_dispatch:

permissions:
contents: read

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
ios-testapp-release:
runs-on: macos-latest
runs-on: macos-26
timeout-minutes: 90
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
submodules: recursive
persist-credentials: false

- name: Setup certificate
run: |
echo "${{ secrets.IOS_DISTRIBUTION_CERTIFICATE }}" | base64 --decode > platform/ios/app-swift/MapLibre.mobileprovision
- uses: bazel-contrib/setup-bazel@c5acdfb288317d0b5c0bbd7a396a3dc868bb0f86 # 0.19.0
with:
bazelisk-cache: true
disk-cache: ${{ github.workflow }}
repository-cache: true

- name: Update BUILD.bazel
run: |
sed -i '' 's/xcode_profile/:MapLibre.mobileprovision/' platform/ios/app-swift/BUILD.bazel
- name: Install Apple signing assets
run: platform/ios/scripts/ios-ci-install-signing-assets.sh
env:
BUILD_CERTIFICATE_BASE64: ${{ secrets.IOS_DISTRIBUTION_CERTIFICATE }}
P12_PASSWORD: ${{ secrets.IOS_DISTRIBUTION_CERTIFICATE_PASSWORD }}
BUILD_PROVISION_PROFILE_BASE64: ${{ secrets.IOS_PROVISIONING_PROFILE }}
KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
IOS_BUNDLE_ID_PREFIX: ${{ vars.IOS_BUNDLE_ID_PREFIX }}

- name: Build
run: bazel build //platform/ios/app-swift:MapLibreApp -c opt --ios_multi_cpus=arm64 --//:renderer=metal --action_env=SENTRY_DSN=${{ vars.SENTRY_DSN_IOS }} --embed_label=maplibre_app_1.0_build_"$(date +%s)"
shell: bash
run: |
set -euo pipefail
build_number="$(date +%s)"
bazel build //platform/ios/app-swift:MapLibreApp \
--compilation_mode=opt \
--ios_multi_cpus=arm64 \
--//:renderer=metal \
--action_env=SENTRY_DSN="${{ vars.SENTRY_DSN_IOS }}" \
--embed_label="maplibre_app_1.0_build_${build_number}"
test -f bazel-bin/platform/ios/app-swift/MapLibreApp.ipa

- name: 'Upload app to TestFlight'
- name: Upload app to TestFlight
uses: apple-actions/upload-testflight-build@1ad58030672057aa084b4e96beb6f7a8c627f9e6 # v5.2.1
with:
app-path: 'bazel-bin/platform/ios/app-swift/MapLibreApp.ipa'
app-path: bazel-bin/platform/ios/app-swift/MapLibreApp.ipa
issuer-id: ${{ vars.APPSTORE_ISSUER_ID }}
api-key-id: ${{ vars.APPSTORE_API_KEY_ID }}
api-private-key: ${{ secrets.APP_STORE_CONNECT_API_KEY }}
wait-for-processing: 'true'
184 changes: 184 additions & 0 deletions .github/workflows/macos-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,184 @@
name: macos-release

on:
workflow_dispatch:
inputs:
release:
type: choice
default: full
options:
- full
- pre
description: Whether to make a release, choose full release (uses platform/ios/VERSION, shared with iOS) or pre-release
pre_release_version:
type: string
default: ''
description: Version (only for pre-releases)

jobs:
macos-build-dynamic:
runs-on: macos-14
defaults:
run:
working-directory: platform/macos
shell: bash
steps:
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4
with:
submodules: recursive

- name: Install dependencies
run: brew install webp libuv

- name: Build XCFramework (Dynamic)
run: |
bazel build --compilation_mode=opt --features=dead_strip,thin_lto --objc_enable_binary_stripping \
--apple_generate_dsym --output_groups=+dsyms --//:renderer=metal \
--//platform/macos:macos_loop=cfrunloop \
//platform/macos:MapLibre.dynamic --embed_label=maplibre_macos_"$(cat ../ios/VERSION)"
echo xcframework="$(bazel info execution_root)"/"$(bazel cquery --output=files --compilation_mode=opt --//:renderer=metal --//platform/macos:macos_loop=cfrunloop //platform/macos:MapLibre.dynamic)" >> "$GITHUB_ENV"

- name: Create .zip with debug symbols
working-directory: ./bazel-bin/platform/macos/MapLibre.dynamic_dsyms
run: |
zip MapLibre_macos_device.framework.dSYM.zip MapLibre_macos_device.framework.dSYM/Contents/Resources/DWARF/MapLibre_macos_device MapLibre_macos_device.framework.dSYM/Contents/Info.plist
echo debug_symbols_macos="$(realpath MapLibre_macos_device.framework.dSYM.zip)" >> "$GITHUB_ENV"

- name: Copy debug symbols to root
working-directory: .
run: cp ${{ env.debug_symbols_macos }} .

- name: Add license to XCFramework zip
run: |
cp ${{ env.xcframework }} MapLibre.dynamic.xcframework.zip
chmod +w MapLibre.dynamic.xcframework.zip
zip MapLibre.dynamic.xcframework.zip LICENSE.md
working-directory: .

- name: Upload artifact
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
with:
name: xcframework
path: |
MapLibre.dynamic.xcframework.zip
MapLibre_macos_device.framework.dSYM.zip

macos-build-static:
runs-on: macos-14
defaults:
run:
working-directory: platform/macos
shell: bash
steps:
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4
with:
submodules: recursive

- name: Install dependencies
run: brew install webp libuv

- name: Build XCFramework (Static)
run: |
bazel build --compilation_mode=opt --copt -g --copt="-Oz" --strip never \
--//:renderer=metal --//platform/macos:macos_loop=cfrunloop \
//platform/macos:MapLibre.static --embed_label=maplibre_macos_"$(cat ../ios/VERSION)"
echo xcframework_static="$(bazel info execution_root)"/"$(bazel cquery --output=files --compilation_mode=opt --//:renderer=metal --//platform/macos:macos_loop=cfrunloop //platform/macos:MapLibre.static)" >> "$GITHUB_ENV"

- name: Add license to XCFramework zip
run: |
cp ${{ env.xcframework_static }} MapLibre.static.xcframework.zip
chmod +w MapLibre.static.xcframework.zip
zip MapLibre.static.xcframework.zip LICENSE.md
working-directory: .

- name: Upload artifact
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
with:
name: xcframework-static
path: |
MapLibre.static.xcframework.zip

macos-release:
permissions:
contents: write
issues: write
runs-on: ubuntu-latest
needs:
- macos-build-dynamic
- macos-build-static
defaults:
run:
working-directory: platform/macos
shell: bash
steps:
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4
with:
submodules: recursive

- uses: actions/download-artifact@v8

- uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v4
with:
node-version-file: ".nvmrc"

# macOS releases share the iOS version (platform/ios/VERSION) so both
# platforms stay aligned. The changelog stays macOS-specific.
- name: Get version (release)
if: github.event.inputs.release == 'full'
run: |
echo version="$(head ../ios/VERSION)" >> "$GITHUB_ENV"
echo changelog_version_heading="## $(head ../ios/VERSION)" >> "$GITHUB_ENV"

- name: Get version (pre-release)
if: github.event.inputs.release == 'pre'
run: |
version="${{ github.event.inputs.pre_release_version }}"
if [[ -z "$version" ]]; then
version="$(head ../ios/VERSION)"-pre${{ github.sha }}
fi
if [[ "$version" != *"pre"* ]]; then
echo "::error::Pre-release version must include 'pre' (Current version: $version)"
exit 1
fi
echo version="$version" >> "$GITHUB_ENV"
echo changelog_version_heading="## main" >> "$GITHUB_ENV"

- name: Create tag if it does not exist
working-directory: .
run: .github/scripts/ensure-tag.sh macos-v${{ env.version }} ${{ github.sha }}

- name: Extract changelog for version
run: |
awk '/^##/ { p = 0 }; p == 1 { print }; $0 == "${{ env.changelog_version_heading }}" { p = 1 };' CHANGELOG.md > changelog_for_version.md
cat changelog_for_version.md

- name: Release (GitHub) - Create Draft
uses: softprops/action-gh-release@153bb8e04406b158c6c84fc1615b65b24149a1fe # v2.6.1
with:
name: macos-v${{ env.version }}
files: |
xcframework/MapLibre.dynamic.xcframework.zip
xcframework/MapLibre_macos_device.framework.dSYM.zip
xcframework-static/MapLibre.static.xcframework.zip
tag_name: macos-v${{ env.version }}
prerelease: ${{ github.event.inputs.release == 'pre' }}
body_path: platform/macos/changelog_for_version.md
fail_on_unmatched_files: true
draft: true

- name: Publish release (remove draft)
uses: softprops/action-gh-release@153bb8e04406b158c6c84fc1615b65b24149a1fe # v2.6.1
with:
tag_name: macos-v${{ env.version }}
name: macos-v${{ env.version }}
draft: false

- run: npm install
working-directory: .

- name: Write release notifications
if: github.repository_owner == 'maplibre'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: node .github/scripts/notify-release-on-prs.ts --tag macos-v${{ env.version }}
working-directory: .
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
### 🐞 Bug fixes

- *...Add new stuff here...*
- [core] Accept alpha values in legacy comma-separated `hsl()` colors ([#4434](https://github.com/maplibre/maplibre-native/issues/4434)).
- [core] Fix thread-unsafe headless OpenGL display singleton initialization [#4332](https://github.com/maplibre/maplibre-native/pull/4332)
- [macos] Fix `mlt-cpp` and `mbgl-vendor-icu` not being included in the amalgamation
- [core] Fix memory access violation exception in vector_tile_data.cpp [#632](https://github.com/maplibre/maplibre-native/pull/632)
Expand Down
3 changes: 2 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,7 @@ list(APPEND SRC_FILES
${PROJECT_SOURCE_DIR}/src/mbgl/renderer/tile_layer_group.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layer_tweaker.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/renderer/render_terrain.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/renderer/dem_elevation_provider.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/renderer/texture_pool.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layers/background_layer_tweaker.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layers/background_layer_tweaker.hpp
Expand Down Expand Up @@ -1220,7 +1221,7 @@ endif()
# The Xcode generator with Dawn component targets (no monolithic library) breaks export()
# because dawn_native/dawn_proc aren't in an export set. Skip export in that case.
set(_can_export TRUE)
if(TARGET mbgl-vendor-dawn AND NOT TARGET dawn::webgpu_dawn)
if(TARGET mbgl-vendor-dawn AND NOT TARGET dawn::webgpu_dawn AND NOT MLN_WEBGPU_EMDAWN)
set(_can_export FALSE)
endif()
if(_can_export)
Expand Down
Loading
Loading