diff --git a/android/src/lib.rs b/android/src/lib.rs index e8a72a7c..968298bb 100644 --- a/android/src/lib.rs +++ b/android/src/lib.rs @@ -7,7 +7,7 @@ use maplibre::{ render::settings::{Backends, WgpuSettings}, MapBuilder, }; -use maplibre_winit::winit::WinitMapWindowConfig; +use maplibre_winit::winit::{run_headed_map, WinitMapWindowConfig}; #[cfg(not(target_os = "android"))] compile_error!("android works only on android."); @@ -16,20 +16,8 @@ compile_error!("android works only on android."); pub fn android_main() { env_logger::init_from_env(env_logger::Env::default().default_filter_or("info")); - run_multithreaded(async { - MapBuilder::new() - .with_map_window_config(WinitMapWindowConfig::new("maplibre android".to_string())) - .with_http_client(ReqwestHttpClient::new(None)) - .with_scheduler(TokioScheduler::new()) - .with_wgpu_settings(WgpuSettings { - backends: Some(Backends::VULKAN), - ..WgpuSettings::default() - }) - .build() - .initialize() - .await - .run() - }) + // TODO: Maybe requires: Some(Backends::VULKAN) + run_headed_map(None); } #[no_mangle] diff --git a/apple/src/lib.rs b/apple/src/lib.rs index 74c06159..562eeddf 100644 --- a/apple/src/lib.rs +++ b/apple/src/lib.rs @@ -1,8 +1,12 @@ +use maplibre::io::apc::SchedulerAsyncProcedureCall; use maplibre::{ platform::{http_client::ReqwestHttpClient, run_multithreaded, scheduler::TokioScheduler}, MapBuilder, }; -use maplibre_winit::winit::{WinitEventLoop, WinitMapWindow, WinitMapWindowConfig, WinitWindow}; +use maplibre_winit::winit::{ + run_headed_map, WinitEnvironment, WinitEventLoop, WinitMapWindow, WinitMapWindowConfig, + WinitWindow, +}; #[cfg(not(any(target_os = "macos", target_os = "ios")))] compile_error!("apple works only on macOS and iOS."); @@ -11,14 +15,5 @@ compile_error!("apple works only on macOS and iOS."); pub fn maplibre_apple_main() { env_logger::init_from_env(env_logger::Env::default().default_filter_or("info")); - run_multithreaded(async { - MapBuilder::new() - .with_map_window_config(WinitMapWindowConfig::new("maplibre apple".to_string())) - .with_http_client(ReqwestHttpClient::new(None)) - .with_scheduler(TokioScheduler::new()) - .build() - .initialize() - .await - .run() - }) + run_headed_map(None); } diff --git a/benchmarks/benches/render.rs b/benchmarks/benches/render.rs index 16662bbb..8895fdb4 100644 --- a/benchmarks/benches/render.rs +++ b/benchmarks/benches/render.rs @@ -1,6 +1,7 @@ use std::collections::HashSet; use criterion::{criterion_group, criterion_main, Criterion}; +use maplibre::io::apc::SchedulerAsyncProcedureCall; use maplibre::{ coords::{WorldTileCoords, ZoomLevel}, error::Error, @@ -20,19 +21,26 @@ use maplibre::{ fn headless_render(c: &mut Criterion) { c.bench_function("headless_render", |b| { let mut map = run_multithreaded(async { - let mut map = MapBuilder::new() - .with_map_window_config(HeadlessMapWindowConfig { - size: WindowSize::new(1000, 1000).unwrap(), - }) - .with_http_client(ReqwestHttpClient::new(None)) - .with_scheduler(TokioScheduler::new()) - .with_renderer_settings(RendererSettings { - texture_format: TextureFormat::Rgba8UnormSrgb, - ..RendererSettings::default() - }) - .build() - .initialize_headless() - .await; + let client = ReqwestHttpClient::new(None); + + let mut map = + MapBuilder::>>::new() + .with_map_window_config(HeadlessMapWindowConfig { + size: WindowSize::new(1000, 1000).unwrap(), + }) + .with_http_client(client.clone()) + .with_apc(SchedulerAsyncProcedureCall::new( + client, + TokioScheduler::new(), + )) + .with_scheduler(TokioScheduler::new()) + .with_renderer_settings(RendererSettings { + texture_format: TextureFormat::Rgba8UnormSrgb, + ..RendererSettings::default() + }) + .build() + .initialize_headless() + .await; map.map_schedule .fetch_process(&WorldTileCoords::from((0, 0, ZoomLevel::default()))) diff --git a/maplibre-demo/src/headed.rs b/maplibre-demo/src/headed.rs deleted file mode 100644 index 3462984c..00000000 --- a/maplibre-demo/src/headed.rs +++ /dev/null @@ -1,22 +0,0 @@ -use maplibre::{ - io::{apc::SchedulerAsyncProcedureCall, transferables::DefaultTransferables}, - platform::{http_client::ReqwestHttpClient, scheduler::TokioScheduler}, - MapBuilder, -}; -use maplibre_winit::winit::{WinitEnvironment, WinitMapWindowConfig}; - -pub async fn run_headed() { - let client = ReqwestHttpClient::new(None); - MapBuilder::>>::new() - .with_map_window_config(WinitMapWindowConfig::new("maplibre".to_string())) - .with_http_client(client.clone()) - .with_apc(SchedulerAsyncProcedureCall::new( - client, - TokioScheduler::new(), - )) - .with_scheduler(TokioScheduler::new()) - .build() - .initialize() - .await - .run() -} diff --git a/maplibre-demo/src/main.rs b/maplibre-demo/src/main.rs index 6d98795f..abea8cce 100644 --- a/maplibre-demo/src/main.rs +++ b/maplibre-demo/src/main.rs @@ -2,10 +2,10 @@ use std::io::ErrorKind; use clap::{builder::ValueParser, Parser, Subcommand}; use maplibre::{coords::LatLon, platform::run_multithreaded}; +use maplibre_winit::winit::run_headed_map; -use crate::{headed::run_headed, headless::run_headless}; +use crate::headless::run_headless; -mod headed; mod headless; #[derive(Parser)] @@ -61,9 +61,7 @@ fn main() { // You can check for the existence of subcommands, and if found use their // matches just as you would the top level cmd match &cli.command { - Commands::Headed {} => { - run_multithreaded(async { run_headed().await }); - } + Commands::Headed {} => run_headed_map(None), Commands::Headless { tile_size, min, diff --git a/maplibre-winit/src/winit/noweb.rs b/maplibre-winit/src/winit/noweb.rs index 4d9c3e3a..4b4923ba 100644 --- a/maplibre-winit/src/winit/noweb.rs +++ b/maplibre-winit/src/winit/noweb.rs @@ -3,7 +3,13 @@ //! * Platform Events like suspend/resume //! * Render a new frame +use crate::winit::WinitEnvironment; +use maplibre::io::apc::SchedulerAsyncProcedureCall; +use maplibre::platform::http_client::ReqwestHttpClient; +use maplibre::platform::run_multithreaded; +use maplibre::platform::scheduler::TokioScheduler; use maplibre::window::{HeadedMapWindow, MapWindow, MapWindowConfig, WindowSize}; +use maplibre::MapBuilder; use winit::window::WindowBuilder; use super::{WinitEventLoop, WinitMapWindow, WinitMapWindowConfig, WinitWindow}; @@ -47,3 +53,21 @@ impl MapWindowConfig for WinitMapWindowConfig { } } } + +pub fn run_headed_map(cache_path: Option) { + run_multithreaded(async { + let client = ReqwestHttpClient::new(cache_path); + MapBuilder::>>::new() + .with_map_window_config(WinitMapWindowConfig::new("maplibre".to_string())) + .with_http_client(client.clone()) + .with_apc(SchedulerAsyncProcedureCall::new( + client, + TokioScheduler::new(), + )) + .with_scheduler(TokioScheduler::new()) + .build() + .initialize() + .await + .run() + }) +} diff --git a/maplibre/src/map_schedule.rs b/maplibre/src/map_schedule.rs index 16305ffa..9b9ab037 100644 --- a/maplibre/src/map_schedule.rs +++ b/maplibre/src/map_schedule.rs @@ -36,7 +36,7 @@ impl InteractiveMapSchedule { map_window_config: E::MapWindowConfig, window_size: WindowSize, renderer: Option, - scheduler: E::Scheduler, + scheduler: E::Scheduler, // TODO: unused apc: E::AsyncProcedureCall, http_client: E::HttpClient, style: Style,