v6.4.0
Added 1
- Make default draggable markers keyboard-focusable and movable with arrow keys (1 px per press, 10 px with Shift)
Changed 2
- Optimize cross-tile symbol matching to avoid per-query Array.sort() by claiming the lowest-index unclaimed candidate in a single pass, reducing main-thread symbol-placement cost on dense symbol layers
- Use texelFetch for exact DEM and color-relief elevation stop lookups instead of normalized texture coordinate arithmetic
Fixed 8
- Fix permanent frame rate degradation after switching styles by preventing sprite reloads from marking images as updated forever and stop leaking replaced sprite images
- Prevent a rejected missing style image resolver from blocking successfully resolved images in the same batch
- Explicitly request no browser color management when decoding raster-DEM tiles to prevent RGB-encoded elevation values from being changed
- Allow an abort to reach an image or raster tile load that is awaiting its transformRequest, preventing ImageSource.updateImage from losing the image and preventing aborted tiles from being fetched
- Fix raster tiles fading in again when reloaded, briefly flashing the map background when switching projection
- Fix globe panning inverting and stalling near and across the poles by rotating the globe with a versor and easing off as the cursor approaches the edge
- Fix fill-extrusion-rounded-corner-distance producing spikes by landing corner arcs on the integer tile grid and leaving corners created by tile clipping sharp
- Fix a gesture held still before being released still flinging the map
✨ Features and improvements
- Avoid a per-query
Array.sort()in cross-tile symbol matching (TileLayerIndex.findMatches), claiming the lowest-index unclaimed candidate in a single pass instead; reduces main-thread symbol-placement cost on dense/coincident symbol layers (#7797) (by @pholmstr) - Use
texelFetchfor exact DEM and color-relief elevation stop lookups instead of normalized texture coordinate arithmetic (#7640) (by @johncarmack1984) - Make default draggable markers keyboard-focusable and movable with the arrow keys (1 px per press, 10 px with Shift); custom marker elements stay application-owned (#8020) (by @smmariquit)
🐞 Bug fixes
- Fix a permanent frame rate degradation after switching styles: every sprite reload marked its images as updated forever, making every in-view tile re-check and re-upload them on every frame. Also stop leaking the images of a replaced sprite, which were never removed from the image manager (#8052) (by @HarelM)
- Prevent a rejected missing style image resolver from blocking successfully resolved images in the same batch (#8146) (by @birkskyum)
- Explicitly request no browser color management when decoding raster-DEM tiles so their RGB-encoded elevation values are not changed (what would otherwise happen with
gfx.color_management.mode = 1in Firefox) (#8125) (by @tnikkel) - Let an abort reach an image or raster tile load that is still awaiting its
transformRequest, soImageSource.updateImageno longer loses the image it was just handed and an aborted tile is no longer fetched (#8071) (by @mondsichtung) - Fix raster tiles fading in again when they are reloaded, briefly flashing the map background, most visibly when switching projection (#8106) (by @mondsichtung)
- Fix globe panning inverting and stalling near and across the poles by rotating the globe with a versor, keeping the drag direction consistent at every latitude. Panning also eases off as the cursor approaches the edge of the globe and continues past it, instead of stopping. The bearing is preserved while panning, as before (#5296) (by @jcolot)
- Fix
fill-extrusion-rounded-corner-distanceproducing spikes: corner arcs now land on the integer tile grid, and corners created by tile clipping are left sharp (#8153) (by @HarelM) - Fix a gesture which was held still before being released still flinging the map (#1303) (by @zdila)