maplibre-rs is an upcoming and cross-platform vector map renderer written in Rust. If you want to get in touch with the developers visit the #maplibre:matrix.org chat or join the MapLibre (#maplibre and #maplibre-rs) community within the OpenStreetMap Slack. You can get an invite here.
If you haven’t read the initial news then check it out here. In the past week we continued to work on our collaboration with the University of Applied Sciences and Arts (HES-SO/HEIG-VD), Switzerland. The main focus of the past week was on documentation and redesigning the renderer and the structure of the maplibre-rs library.
In the past week, I extracted the render from Bevy. After some discussions on Github, Slack and Matrix we concluded that writing a renderer specific to maps is the best option. In general, specialized renderers can be optimized better. By implementing a renderer ourselves, we also stay independent of other projects. For example, Bevy is a render engine (renderer + a lot more) for games. That means that features which are important for bevy are most likely not important for maplibre-rs and vice versa. For example, the Bevy renderer does not support a stencil.
Because I’m quite unexperienced in the world of 3D graphics, I dediced to base the renderer on some existing one. The best renderers in the Rust world are currently Bevy and rend3. After evaluating both renderers I decided to go with the Bevy one, because rend3 had usages of `unsafe. Both renderers are based around the idea of a render graph.
The following will summarizes what happened last week on GitHub.
winitdependency from main crate.
Some architectural discussions:
.unwrap()s in the code