A WIP map engine written in Rust using WGPU.
The initial goal of the project is to learn a new cross-platform tech stack to build a mobile-ready MapEngine with focus on Navigation features(including DeadReckoning and Map-matching)
I'm writing about the tech I've learned here
Running on macOS, Android and iOS
The stack leverages the following approaches and libraries:
- Map vector graphics renderer written in Rust using WGPU as a low-level cross-platform graphics API and with RustyBuzz support as a vector font shaper for TextRenderer.
- Uses custom tiles, a simple tiles generator and a tile server, separate repo. The server is running in free AWS EC2 Cloud.
- Kotlin/Compose Multiplatfom, uniffi-rs and gobley projects enable fast and seamless integration with Android/iOS mobile apps(Android is priority for now)
- Rust Valhalla client is used a routing clieng/engine
- Create a baseline POC with initial architecture
- Complete README and examples
- Initial rendering to texture
- Better integration with SlintUI
- A GPU-driven dotted line rendering
- Initial SSAO(Screen Space Ambient Occlusion)
- In progress General Renderer refactoring
- Running on pure Linux with Rust GUI/CMP
- Simple shadow mapping
- Implement an initial geometric Map-matching POC
- CI for KMP mobile SDK + Screenshot rendering
- Integrate a simple search
- Support Mapbox tilesets
- Software Dead-reckoning
- Complete iOS counter-part
- Move TextRenderer to the separate repo
In root folder:
cargo run --package winit-run --release
- Make sure the latest Xcode is installed!
- Open "kmp" folder in AndroidStudio and just Run "demo" app or execute:
./gradlew :composeApp:installRelease && adb shell am start -n "com.shashlik.demo/com.shashlik.demo.MainActivity"
Open "kmp/iosApp" project in XCode and just Run it
- Add dependency to the version catalog
[versions]
shashlikMap = "0.2.1"
[libraries]
shashlikmap = { module = "io.github.shashlikmap:mapshared", version.ref = "shashlikMap" }
In build.gradle.kts(KMP or Android):
implementation(libs.shashlikmap)
- Include Composable function
ShashlikMap { _, _ -> }anywhere in your Compose UI
@Composable
fun App() {
MaterialTheme {
ShashlikMap { _, _ -> }
}
}- Note: Android app will ask for locations permissions.
- Tileset on the Web Service is generated only for Japan(Kanto region) and USA(Bay Area)
- Android app might not work on Android Emulator with hardware GPU acceleration. Try to change GPU mode to
Softwareone. - Debug build performance is significantly lower than Release build.