Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
206 commits
Select commit Hold shift + click to select a range
c3e60c8
implement terrain in style
JesseCrocker Oct 15, 2025
8b376c5
Add RenderTerrain class for 3D terrain rendering with DEM support
JesseCrocker Oct 15, 2025
cf11a38
terrain shaders
JesseCrocker Oct 15, 2025
d1704c2
integrate terrain into rendering pipeline
JesseCrocker Oct 15, 2025
5689e6f
implement terrain
JesseCrocker Oct 15, 2025
d989c28
add terrain test style
JesseCrocker Oct 16, 2025
04bfc11
change url
JesseCrocker Oct 16, 2025
4afb549
integrate terrain update into render orchestrator
JesseCrocker Oct 16, 2025
1a5c687
implement DEM source lookup
JesseCrocker Oct 16, 2025
c6556e0
render terrain with color gradient
JesseCrocker Oct 16, 2025
6e687eb
render checkerboard test pattern
JesseCrocker Oct 16, 2025
fd89368
fix CMake compile
NathanMOlson Dec 29, 2025
6ccbd3a
Add OpenGL support for terrain, parity with iOS
NathanMOlson Dec 29, 2025
5d949e8
draw map data on terrain if it is valid
NathanMOlson Dec 29, 2025
792f477
use the passed texture for terrain, instead of the test elevation-bas…
NathanMOlson Dec 29, 2025
f7d05b9
approaching the right structure, but layers are currently not being r…
NathanMOlson Dec 30, 2025
02191ec
restore deleted generated file terrain.hpp
NathanMOlson Dec 30, 2025
7ecf235
Merge branch 'ios-terrain-claude' into render-to-texture
NathanMOlson Dec 30, 2025
f6e79bc
revert unhelpful changes. Moving layer rendering into render_terrain.…
NathanMOlson Dec 30, 2025
04b65a0
using map layers as texture to drape on terrain! but uses a single te…
NathanMOlson Dec 30, 2025
395930e
add default RTT pos matrix, which assumes that the map tile is the sa…
NathanMOlson Dec 31, 2025
731a345
pass (currently hardcoded) terrainRttPosMatrix with tileID
NathanMOlson Jan 2, 2026
ef2e902
Add a texture pool and assign a texture to each terrain tile (in prog…
NathanMOlson Jan 2, 2026
a606ec9
Setting up the texture pool. Each terrain tile now has its own textur…
NathanMOlson Jan 2, 2026
caaee4d
Add function to get render target for any ancestor/descendant of a te…
NathanMOlson Jan 3, 2026
db02799
pass the TexturePool around in PaintParameters. Calculate accurate te…
NathanMOlson Jan 5, 2026
50bde60
stricter tile descendancy check for RTT
NathanMOlson Jan 5, 2026
5ae8c41
draws tiles in the right place, but only the top layer is drawn (reas…
NathanMOlson Jan 5, 2026
de0dee0
Fix issue where only one layer was being rendered to texture
NathanMOlson Jan 5, 2026
1bb5320
remove debug code
NathanMOlson Jan 5, 2026
8d7900a
cleanup: revert changes that ended up not being needed
NathanMOlson Jan 5, 2026
3392b33
cleanup
NathanMOlson Jan 6, 2026
5059397
cleanup
NathanMOlson Jan 6, 2026
df9a4df
fix terrain rendering issue with non-integer zoom
NathanMOlson Jan 6, 2026
ad3d8a6
only add the layer tweaker once
NathanMOlson Jan 6, 2026
f8a43de
remove need for dynamic_cast so we can restore the no-rtti compile flag
NathanMOlson Jan 6, 2026
83dac50
Have each layer type specify whether it will render to terrain or not
NathanMOlson Jan 6, 2026
0de3eeb
fix terrainRttPosMatrix when vector tile is bigger than terrain tile
NathanMOlson Jan 6, 2026
714950a
Don't try to render to non-existent terrain tile
NathanMOlson Jan 6, 2026
57fae59
set the background color of RTT tiles. Ideally we would just apply th…
NathanMOlson Jan 6, 2026
ad099ed
make symbol layers play nice with terrain (not rendered to texture). …
NathanMOlson Jan 6, 2026
c55d30e
HACK to get line rendering to work on terrain
NathanMOlson Jan 6, 2026
c103108
Merge branch 'main' into render-to-texture
NathanMOlson Mar 26, 2026
1941943
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Mar 26, 2026
d9a73f5
Merge branch 'main' into feature/terrain-3d
stefankarschti Apr 3, 2026
945a6f6
Fix compile error for 3D terrain layer (#4205)
stefankarschti Apr 4, 2026
56c71df
Delete .claude/settings.local.json
louwers Apr 4, 2026
a81a65b
Merge remote-tracking branch 'origin/main' into terrain-3d-color-relief
acalcutt Jul 8, 2026
416670f
Update Vulkan and WebGPU backends for renderToTerrain layer group par…
acalcutt Jul 8, 2026
9350c49
Move terrain v_gamma_scale hack from generated line.hpp into line.ver…
acalcutt Jul 8, 2026
c64fe2c
Use terrain-aware tile matrix in color-relief layer tweaker
acalcutt Jul 8, 2026
d75a314
Apply clang-format
acalcutt Jul 8, 2026
3531530
Use DEM unpack vector in terrain shaders instead of hardcoded Mapbox …
acalcutt Jul 8, 2026
ce79e2d
Fix CI failures across backends for terrain code
acalcutt Jul 8, 2026
5729d7e
Use unaligned tile matrix for color-relief to match render test basel…
acalcutt Jul 8, 2026
35dc33b
Remove unused hardcoded Mapbox elevation decode from Metal prelude
acalcutt Jul 8, 2026
baf3c39
Apply terrain exaggeration per the style spec without the debug 3x mu…
acalcutt Jul 8, 2026
435e761
Add Vulkan and WebGPU terrain shaders
acalcutt Jul 8, 2026
ccd72f9
Replace hardcoded line gamma-scale terrain hack with a runtime flag
acalcutt Jul 8, 2026
ed0493d
revert pad renames
acalcutt Jul 8, 2026
9de20fa
revert drawable_pad1
acalcutt Jul 8, 2026
5729b1c
more pad fixes
acalcutt Jul 8, 2026
7bbf662
Fix ambiguous operator| for Vulkan shader stage flags
acalcutt Jul 8, 2026
54b57da
Merge remote-tracking branch 'origin/main' into terrain-3d-color-relief
acalcutt Jul 8, 2026
9ed76de
Simplify render target creation by removing the backgroundColor overload
acalcutt Jul 9, 2026
a34c335
Implement CPU terrain elevation queries
acalcutt Jul 9, 2026
94ec273
Port terrain render tests from maplibre-gl-js and update TERRAIN.md
acalcutt Jul 9, 2026
fdadacb
Terrain Phase 1: elevate circle layers by DEM elevation on all backends
acalcutt Jul 9, 2026
0a146c9
fix: Convert reverse iterator loops to C++20 range-based for loops
acalcutt Jul 9, 2026
f738ada
fix(webgpu): bind a dummy texture for shader-declared but unbound slots
acalcutt Jul 9, 2026
1d1b9c1
Terrain Phase 1: elevate fill-extrusion by DEM elevation (OpenGL)
acalcutt Jul 9, 2026
81ca47f
Share get_elevation() in the GL vertex prelude (circle + fill-extrusion)
acalcutt Jul 9, 2026
1e207af
fix(terrain): gracefully handle a tile with no registered clip mask
acalcutt Jul 9, 2026
d2ad219
Terrain Phase 1: elevate fill-extrusion by DEM elevation (WebGPU)
acalcutt Jul 9, 2026
855e56e
fix(terrain): register clip masks for draped layer groups (root cause)
acalcutt Jul 9, 2026
d7cce7f
fix(terrain): correct fill-extrusion CI failures
acalcutt Jul 10, 2026
b9db727
fix(terrain): don't require depth/stencil in the color-only drape RTT
acalcutt Jul 10, 2026
fdad184
feat(terrain): give the drape RTT a depth attachment (gl-js parity)
acalcutt Jul 10, 2026
967c1f6
pre-commit
acalcutt Jul 10, 2026
6a93736
Merge remote-tracking branch 'origin/main' into terrain-3d-color-relief
acalcutt Jul 10, 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
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
2ca8ef2
fix(terrain): apply_drape_transform on Metal and Vulkan
acalcutt 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
1f88999
Merge main into 3d terrain branch (#4409)
acalcutt 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
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
c8accba
Document the Vulkan occlusion fix and the GL regression it likely caused
acalcutt Jul 20, 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
  •  
  •  
  •  
10 changes: 10 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,9 @@ list(APPEND SRC_FILES
${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layer_group.cpp
${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
${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layers/circle_layer_tweaker.cpp
Expand All @@ -208,6 +211,7 @@ list(APPEND SRC_FILES
${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layers/raster_layer_tweaker.hpp
${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layers/symbol_layer_tweaker.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layers/symbol_layer_tweaker.hpp
${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layers/terrain_layer_tweaker.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layers/collision_layer_tweaker.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/renderer/layers/collision_layer_tweaker.hpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/shader_program_base.cpp
Expand Down Expand Up @@ -311,6 +315,7 @@ list(APPEND INCLUDE_FILES
${PROJECT_SOURCE_DIR}/include/mbgl/style/conversion/rotation.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/style/conversion/source.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/style/conversion/source_options.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/style/conversion/terrain.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/style/conversion/tileset.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/style/conversion/transition_options.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/style/expression/assertion.hpp
Expand Down Expand Up @@ -388,6 +393,8 @@ list(APPEND INCLUDE_FILES
${PROJECT_SOURCE_DIR}/include/mbgl/style/style_property.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/style/style.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/style/transition_options.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/style/terrain.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/style/terrain_observer.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/style/types.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/style/undefined.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/style/variable_anchor_offset_collection.hpp
Expand Down Expand Up @@ -675,6 +682,8 @@ list(APPEND SRC_FILES
${PROJECT_SOURCE_DIR}/src/mbgl/storage/resource_transform.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/storage/response.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/style/collection.hpp
${PROJECT_SOURCE_DIR}/src/mbgl/style/terrain.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/style/terrain_impl.hpp
${PROJECT_SOURCE_DIR}/src/mbgl/style/conversion/color_ramp_property_value.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/style/conversion/constant.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/style/conversion/sprite.cpp
Expand All @@ -695,6 +704,7 @@ list(APPEND SRC_FILES
${PROJECT_SOURCE_DIR}/src/mbgl/style/conversion/source.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/style/conversion/source_options.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/style/conversion/stringify.hpp
${PROJECT_SOURCE_DIR}/src/mbgl/style/conversion/terrain.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/style/conversion/tileset.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/style/conversion/transition_options.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/style/custom_tile_loader.cpp
Expand Down
612 changes: 612 additions & 0 deletions TERRAIN.md

Large diffs are not rendered by default.

25 changes: 25 additions & 0 deletions bazel/core.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,8 @@ MLN_GENERATED_OPENGL_SHADER_HEADERS = [
"include/mbgl/shaders/gl/symbol_icon.hpp",
"include/mbgl/shaders/gl/symbol_sdf.hpp",
"include/mbgl/shaders/gl/symbol_text_and_icon.hpp",
"include/mbgl/shaders/gl/terrain.hpp",
"include/mbgl/shaders/gl/terrain_depth.hpp",
"include/mbgl/shaders/gl/wide_vector.hpp",
"include/mbgl/shaders/gl/prelude.hpp",
]
Expand Down Expand Up @@ -275,6 +277,10 @@ MLN_CORE_SOURCE = [
"src/mbgl/renderer/render_source.hpp",
"src/mbgl/renderer/render_source_observer.hpp",
"src/mbgl/renderer/render_static_data.cpp",
"src/mbgl/renderer/render_terrain.cpp",
"src/mbgl/renderer/render_terrain.hpp",
"src/mbgl/renderer/dem_elevation_provider.cpp",
"src/mbgl/renderer/dem_elevation_provider.hpp",
"src/mbgl/renderer/render_static_data.hpp",
"src/mbgl/renderer/render_tile.cpp",
"src/mbgl/renderer/render_tile.hpp",
Expand Down Expand Up @@ -305,6 +311,7 @@ MLN_CORE_SOURCE = [
"src/mbgl/renderer/tile_parameters.hpp",
"src/mbgl/renderer/tile_pyramid.cpp",
"src/mbgl/renderer/tile_pyramid.hpp",
"src/mbgl/renderer/texture_pool.hpp",
"src/mbgl/renderer/tile_render_data.cpp",
"src/mbgl/renderer/tile_render_data.hpp",
"src/mbgl/renderer/transition_parameters.hpp",
Expand Down Expand Up @@ -344,6 +351,7 @@ MLN_CORE_SOURCE = [
"src/mbgl/style/conversion/json.hpp",
"src/mbgl/style/conversion/layer.cpp",
"src/mbgl/style/conversion/light.cpp",
"src/mbgl/style/conversion/terrain.cpp",
"src/mbgl/style/conversion/position.cpp",
"src/mbgl/style/conversion/property_value.cpp",
"src/mbgl/style/conversion/hillshade_conversions.cpp",
Expand Down Expand Up @@ -463,6 +471,8 @@ MLN_CORE_SOURCE = [
"src/mbgl/style/style.cpp",
"src/mbgl/style/style_impl.cpp",
"src/mbgl/style/style_impl.hpp",
"src/mbgl/style/terrain.cpp",
"src/mbgl/style/terrain_impl.hpp",
"src/mbgl/style/types.cpp",
"src/mbgl/style/variable_anchor_offset_collection.cpp",
"src/mbgl/text/bidi.hpp",
Expand Down Expand Up @@ -719,6 +729,7 @@ MLN_CORE_HEADERS = [
"include/mbgl/style/conversion/get_json_type.hpp",
"include/mbgl/style/conversion/layer.hpp",
"include/mbgl/style/conversion/light.hpp",
"include/mbgl/style/conversion/terrain.hpp",
"include/mbgl/style/conversion/position.hpp",
"include/mbgl/style/conversion/property_value.hpp",
"include/mbgl/style/conversion/rotation.hpp",
Expand Down Expand Up @@ -789,6 +800,8 @@ MLN_CORE_HEADERS = [
"include/mbgl/style/sprite.hpp",
"include/mbgl/style/style.hpp",
"include/mbgl/style/style_property.hpp",
"include/mbgl/style/terrain.hpp",
"include/mbgl/style/terrain_observer.hpp",
"include/mbgl/style/transition_options.hpp",
"include/mbgl/style/types.hpp",
"include/mbgl/style/undefined.hpp",
Expand Down Expand Up @@ -939,6 +952,7 @@ MLN_DRAWABLES_SOURCE = [
"src/mbgl/renderer/change_request.cpp",
"src/mbgl/renderer/layer_group.cpp",
"src/mbgl/renderer/tile_layer_group.cpp",
"src/mbgl/renderer/texture_pool.cpp",
"src/mbgl/renderer/layer_tweaker.cpp",
"src/mbgl/renderer/render_target.cpp",
"src/mbgl/renderer/layers/background_layer_tweaker.cpp",
Expand Down Expand Up @@ -967,6 +981,8 @@ MLN_DRAWABLES_SOURCE = [
"src/mbgl/renderer/layers/raster_layer_tweaker.hpp",
"src/mbgl/renderer/layers/symbol_layer_tweaker.cpp",
"src/mbgl/renderer/layers/symbol_layer_tweaker.hpp",
"src/mbgl/renderer/layers/terrain_layer_tweaker.cpp",
"src/mbgl/renderer/layers/terrain_layer_tweaker.hpp",
"src/mbgl/renderer/layers/collision_layer_tweaker.cpp",
"src/mbgl/renderer/layers/collision_layer_tweaker.hpp",
"src/mbgl/shaders/shader_program_base.cpp",
Expand Down Expand Up @@ -1013,6 +1029,7 @@ MLN_DRAWABLES_HEADERS = [
"include/mbgl/shaders/line_layer_ubo.hpp",
"include/mbgl/shaders/location_indicator_ubo.hpp",
"include/mbgl/shaders/raster_layer_ubo.hpp",
"include/mbgl/shaders/terrain_layer_ubo.hpp",
"include/mbgl/shaders/shader_defines.hpp",
"include/mbgl/shaders/shader_program_base.hpp",
"include/mbgl/shaders/symbol_layer_ubo.hpp",
Expand Down Expand Up @@ -1088,6 +1105,8 @@ MLN_DRAWABLES_MTL_SOURCE = [
"src/mbgl/shaders/mtl/line.cpp",
"src/mbgl/shaders/mtl/location_indicator.cpp",
"src/mbgl/shaders/mtl/raster.cpp",
"src/mbgl/shaders/mtl/terrain.cpp",
"src/mbgl/shaders/mtl/terrain_depth.cpp",
"src/mbgl/shaders/mtl/symbol.cpp",
"src/mbgl/shaders/mtl/widevector.cpp",
"src/mbgl/style/layers/mtl/custom_layer_render_parameters.cpp",
Expand Down Expand Up @@ -1131,6 +1150,8 @@ MLN_DRAWABLES_MTL_HEADERS = [
"include/mbgl/shaders/mtl/line.hpp",
"include/mbgl/shaders/mtl/location_indicator.hpp",
"include/mbgl/shaders/mtl/raster.hpp",
"include/mbgl/shaders/mtl/terrain.hpp",
"include/mbgl/shaders/mtl/terrain_depth.hpp",
"include/mbgl/shaders/mtl/shader_group.hpp",
"include/mbgl/shaders/mtl/shader_program.hpp",
"include/mbgl/shaders/mtl/symbol.hpp",
Expand Down Expand Up @@ -1178,6 +1199,8 @@ MLN_DRAWABLES_WEBGPU_SOURCE = [
"src/mbgl/shaders/webgpu/location_indicator.cpp",
"src/mbgl/shaders/webgpu/raster.cpp",
"src/mbgl/shaders/webgpu/symbol.cpp",
"src/mbgl/shaders/webgpu/terrain.cpp",
"src/mbgl/shaders/webgpu/terrain_depth.cpp",
"src/mbgl/shaders/webgpu/widevector.cpp",
]

Expand Down Expand Up @@ -1223,6 +1246,8 @@ MLN_DRAWABLES_WEBGPU_HEADERS = [
"include/mbgl/shaders/webgpu/shader_group.hpp",
"include/mbgl/shaders/webgpu/shader_program.hpp",
"include/mbgl/shaders/webgpu/symbol.hpp",
"include/mbgl/shaders/webgpu/terrain.hpp",
"include/mbgl/shaders/webgpu/terrain_depth.hpp",
"include/mbgl/shaders/webgpu/wgsl_preprocessor.hpp",
"include/mbgl/shaders/webgpu/widevector.hpp",
]
Expand Down
2 changes: 2 additions & 0 deletions cmake/metal.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,8 @@ list(APPEND
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/location_indicator.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/raster.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/symbol.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/terrain.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/terrain_depth.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/mtl/widevector.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/style/layers/mtl/custom_layer_render_parameters.cpp
)
Expand Down
4 changes: 4 additions & 0 deletions cmake/vulkan.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@ list(APPEND
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/vulkan/location_indicator.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/vulkan/raster.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/vulkan/symbol.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/vulkan/terrain.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/vulkan/terrain_depth.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/vulkan/widevector.hpp
)

Expand Down Expand Up @@ -100,5 +102,7 @@ list(APPEND
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/vulkan/location_indicator.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/vulkan/raster.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/vulkan/symbol.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/vulkan/terrain.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/vulkan/terrain_depth.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/vulkan/widevector.cpp
)
4 changes: 4 additions & 0 deletions cmake/webgpu.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@ list(APPEND
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/webgpu/location_indicator.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/webgpu/raster.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/webgpu/symbol.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/webgpu/terrain.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/webgpu/terrain_depth.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/shaders/webgpu/widevector.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/webgpu/vertex_buffer_resource.cpp
${PROJECT_SOURCE_DIR}/src/mbgl/webgpu/vertex_attribute.cpp
Expand Down Expand Up @@ -87,6 +89,8 @@ list(APPEND
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/webgpu/location_indicator.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/webgpu/raster.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/webgpu/symbol.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/webgpu/terrain.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/webgpu/terrain_depth.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/shaders/webgpu/widevector.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/webgpu/texture2d.hpp
${PROJECT_SOURCE_DIR}/include/mbgl/webgpu/uniform_buffer.hpp
Expand Down
21 changes: 17 additions & 4 deletions include/mbgl/gfx/context.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,14 @@ class Context {

virtual std::unique_ptr<OffscreenTexture> createOffscreenTexture(Size, TextureChannelDataType) = 0;

/// Create an offscreen texture with explicit depth/stencil attachments. Terrain drape
/// targets need a stencil to clip overlapping draped tiles against each other, as
/// maplibre-gl-js does for its render-to-texture framebuffer.
virtual std::unique_ptr<OffscreenTexture> createOffscreenTexture(Size,
TextureChannelDataType,
bool depth,
bool stencil) = 0;

template <RenderbufferPixelType pixelType>
Renderbuffer<pixelType> createRenderbuffer(const Size size) {
return {size, createRenderbufferResource(pixelType, size)};
Expand Down Expand Up @@ -138,19 +146,24 @@ class Context {
/// Create a tile layer group implementation
virtual TileLayerGroupPtr createTileLayerGroup(int32_t layerIndex,
std::size_t initialCapacity,
std::string name) = 0;
std::string name,
bool renderToTerrain) = 0;

/// Create a layer group implementation
virtual LayerGroupPtr createLayerGroup(int32_t layerIndex, std::size_t initialCapacity, std::string name) = 0;
virtual LayerGroupPtr createLayerGroup(int32_t layerIndex,
std::size_t initialCapacity,
std::string name,
bool renderToTerrain) = 0;

/// Create a texture
virtual Texture2DPtr createTexture2D() = 0;

/// Create a dynamic texture
virtual DynamicTexturePtr createDynamicTexture(Size size, TexturePixelType pixelType) = 0;

/// Create a render target
virtual RenderTargetPtr createRenderTarget(const Size size, const TextureChannelDataType type) = 0;
/// Create a render target. `stencil` attaches a stencil buffer, which terrain drape
/// targets need to clip overlapping draped tiles against each other.
virtual RenderTargetPtr createRenderTarget(const Size size, const TextureChannelDataType type, bool stencil) = 0;

/// Resets the context state to defaults
virtual void resetState(gfx::DepthMode depthMode, gfx::ColorMode colorMode) = 0;
Expand Down
4 changes: 2 additions & 2 deletions include/mbgl/gfx/rendering_stats.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,8 @@ struct RenderingStats {
/// Sum of uniform buffers update sizes
std::size_t uniformUpdateBytes = 0;

/// Total texture memory
int memTextures = 0;
/// Total texture memory (int64_t: terrain scenes can track more than 2GB)
int64_t memTextures = 0;
/// Total buffer memory
int memBuffers = 0;
/// Total index buffer memory
Expand Down
4 changes: 2 additions & 2 deletions include/mbgl/gl/layer_group_gl.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ namespace gl {
*/
class TileLayerGroupGL : public TileLayerGroup {
public:
TileLayerGroupGL(int32_t layerIndex, std::size_t initialCapacity, std::string name);
TileLayerGroupGL(int32_t layerIndex, std::size_t initialCapacity, std::string name, bool renderToTerrain);
~TileLayerGroupGL() override {}

void upload(gfx::UploadPass&) override;
Expand All @@ -33,7 +33,7 @@ class TileLayerGroupGL : public TileLayerGroup {
*/
class LayerGroupGL : public LayerGroup {
public:
LayerGroupGL(int32_t layerIndex, std::size_t initialCapacity, std::string name);
LayerGroupGL(int32_t layerIndex, std::size_t initialCapacity, std::string name, bool renderToTerrain);
~LayerGroupGL() override {}

void upload(gfx::UploadPass&) override;
Expand Down
17 changes: 13 additions & 4 deletions include/mbgl/mtl/context.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -92,21 +92,30 @@ class Context final : public gfx::Context {

gfx::ShaderProgramBasePtr getGenericShader(gfx::ShaderRegistry&, const std::string& name) override;

TileLayerGroupPtr createTileLayerGroup(int32_t layerIndex, std::size_t initialCapacity, std::string name) override;
TileLayerGroupPtr createTileLayerGroup(int32_t layerIndex,
std::size_t initialCapacity,
std::string name,
bool renderToTerrain) override;

LayerGroupPtr createLayerGroup(int32_t layerIndex, std::size_t initialCapacity, std::string name) override;
LayerGroupPtr createLayerGroup(int32_t layerIndex,
std::size_t initialCapacity,
std::string name,
bool renderToTerrain) override;

gfx::Texture2DPtr createTexture2D() override;

gfx::DynamicTexturePtr createDynamicTexture(Size size, gfx::TexturePixelType pixelType) override;

RenderTargetPtr createRenderTarget(const Size size, const gfx::TextureChannelDataType type) override;
RenderTargetPtr createRenderTarget(const Size size, const gfx::TextureChannelDataType type, bool stencil) override;

void resetState(gfx::DepthMode depthMode, gfx::ColorMode colorMode) override;

void setDirtyState() override;

std::unique_ptr<gfx::OffscreenTexture> createOffscreenTexture(Size, gfx::TextureChannelDataType, bool, bool);
std::unique_ptr<gfx::OffscreenTexture> createOffscreenTexture(Size,
gfx::TextureChannelDataType,
bool,
bool) override;

std::unique_ptr<gfx::OffscreenTexture> createOffscreenTexture(Size, gfx::TextureChannelDataType) override;

Expand Down
2 changes: 1 addition & 1 deletion include/mbgl/mtl/layer_group.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ class RenderPass;
*/
class LayerGroup : public mbgl::LayerGroup {
public:
LayerGroup(int32_t layerIndex, std::size_t initialCapacity, std::string name);
LayerGroup(int32_t layerIndex, std::size_t initialCapacity, std::string name, bool renderToTerrain);
~LayerGroup() override {}

void upload(gfx::UploadPass&) override;
Expand Down
9 changes: 9 additions & 0 deletions include/mbgl/mtl/render_pass.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,12 @@ class RenderPass final : public gfx::RenderPass {
/// Set the sampler for a texture binding
void setFragmentSamplerState(const MTLSamplerStatePtr&, int32_t location);

/// Bind a texture to the vertex location
void setVertexTexture(const MTLTexturePtr&, int32_t location);

/// Set the sampler for a vertex texture binding
void setVertexSamplerState(const MTLSamplerStatePtr&, int32_t location);

/// Set the render pipeline state
void setRenderPipelineState(const MTLRenderPipelineStatePtr&);

Expand Down Expand Up @@ -91,6 +97,9 @@ class RenderPass final : public gfx::RenderPass {
std::array<MTLTexturePtr, maxBinds> fragmentTextureBindings;
std::array<MTLSamplerStatePtr, maxBinds> fragmentSamplerStates;

std::array<MTLTexturePtr, maxBinds> vertexTextureBindings;
std::array<MTLSamplerStatePtr, maxBinds> vertexSamplerStates;

MTL::CullMode currentCullMode = MTL::CullModeNone;
MTL::Winding currentWinding = MTL::WindingClockwise;
MTL::ScissorRect currentScissorRect;
Expand Down
2 changes: 1 addition & 1 deletion include/mbgl/mtl/tile_layer_group.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ class RenderPass;
*/
class TileLayerGroup : public mbgl::TileLayerGroup {
public:
TileLayerGroup(int32_t layerIndex, std::size_t initialCapacity, std::string name);
TileLayerGroup(int32_t layerIndex, std::size_t initialCapacity, std::string name, bool renderToTerrain);
~TileLayerGroup() override {}

void upload(gfx::UploadPass&) override;
Expand Down
Loading
Loading