Chore: upgrade deps (#286)

* upgrade deps, fix keywords/categories

* just fmt

* remove backends in wgpu
This commit is contained in:
Yuri Astrakhan 2023-09-24 04:11:29 -04:00 committed by GitHub
parent e3c398b9a9
commit 04ff0882a3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
36 changed files with 232 additions and 159 deletions

View File

@ -19,9 +19,11 @@ members = [
description = "Maps for Desktop, Mobile and Web" description = "Maps for Desktop, Mobile and Web"
version = "0.1.0" version = "0.1.0"
edition = "2021" edition = "2021"
rust-version = "1.65" # Keep this in sync with `rust-toolchain.toml` and `justfile`
rust-version = "1.72.1"
license = "MIT OR Apache-2.0" license = "MIT OR Apache-2.0"
keywords = ["graphics", "science::geo"] keywords = ["graphics", "maps", "webgl", "tiles"]
categories = ["graphics", "science::geo"]
authors = ["Maximilian Ammann <max@maxammann.org>"] authors = ["Maximilian Ammann <max@maxammann.org>"]
[workspace.dependencies] [workspace.dependencies]
@ -40,56 +42,56 @@ winit = { version = "0.27.5", default-features = false, features = [] }
# #
# These dependencies should be updated to the latest version # These dependencies should be updated to the latest version
# #
async-trait = "0.1.68" async-trait = "0.1.73"
bytemuck = "1.13.1" bytemuck = "1.14.0"
bytemuck_derive = "1.4.1" bytemuck_derive = "1.5.0"
cgmath = "0.18.0" cgmath = "0.18.0"
cint = "0.3.1" cint = "0.3.1"
clap = { version = "4.3.0", features = ["derive"] } clap = { version = "4.3.24", features = ["derive"] }
console_error_panic_hook = "0.1.7" console_error_panic_hook = "0.1.7"
console_log = { version = "1.0.0", features = ["color"] } console_log = { version = "1.0.0", features = ["color"] }
criterion = { version = "0.5.1", features = ["async_tokio"] } criterion = { version = "0.5.1", features = ["async_tokio"] }
csscolorparser = { version = "0.6.2", features = ["serde", "cint"] } csscolorparser = { version = "0.6.2", features = ["serde", "cint"] }
downcast-rs = "1.2.0" downcast-rs = "1.2.0"
env_logger = "0.10.0" env_logger = "0.10.0"
flatbuffers = "23.1.21" flatbuffers = "23.5.26"
flatc-rust = "0.2.0" flatc-rust = "0.2.0"
flate2 = "1.0.26" flate2 = "1.0.27"
geo = "0.25.0" geo = "0.26.0"
geo-types = { version = "0.7.9", features = ["use-rstar_0_9"] } geo-types = { version = "0.7.11", features = ["use-rstar_0_9"] }
geozero = { version = "0.9.9", default-features = false, features = ["with-mvt", "with-geo"] } geozero = { version = "0.11.0", default-features = false, features = ["with-mvt", "with-geo"] }
image = { version = "0.24", default-features = false, features = ["jpeg", "webp", "png"] } image = { version = "0.24", default-features = false, features = ["jpeg", "webp", "png"] }
include_dir = "0.7.3" include_dir = "0.7.3"
instant = { version = "0.1.12", features = ["wasm-bindgen"] } # TODO: Untrusted dependency instant = { version = "0.1.12", features = ["wasm-bindgen"] } # TODO: Untrusted dependency
jni = "0.21.1" jni = "0.21.1"
js-sys = "0.3.63" js-sys = "0.3.64"
log = "0.4.18" log = "0.4.20"
lyon = { version = "1.0.1", features = [] } lyon = { version = "1.0.1", features = [] }
naga = { version = "0.12.1", features = ["wgsl-in"] } naga = { version = "0.13.0", features = ["wgsl-in"] }
ndk-glue = "0.7.0" # version is required by winit. This might for winit 0.28+, see https://github.com/rust-windowing/winit#Android ndk-glue = "0.7.0" # version is required by winit. This might for winit 0.28+, see https://github.com/rust-windowing/winit#Android
png = { version = "0.17.8" } png = { version = "0.17.10" }
raw-window-handle = "0.5.2" raw-window-handle = "0.5.2"
reqwest = { version = "0.11.18", default-features = false, features = ["rustls-tls", "gzip"] } # Use rusttls on android because cross compiling is difficult reqwest = { version = "0.11.20", default-features = false, features = ["rustls-tls", "gzip"] } # Use rusttls on android because cross compiling is difficult
reqwest-middleware-cache = "0.1.1" # FIXME: Untrusted dependency reqwest-middleware-cache = "0.1.1" # FIXME: Untrusted dependency
rstar = "0.10.0" rstar = "0.11.0"
rusqlite = { version = "0.29.0" } rusqlite = { version = "0.29.0" }
serde = { version = "1.0.163", features = ["derive"] } serde = { version = "1.0.188", features = ["derive"] }
serde_json = "1.0.96" serde_json = "1.0.107"
smallvec = "1.10.0" smallvec = "1.11.1"
thiserror = "1.0.40" thiserror = "1.0.48"
tile-grid = "0.4" tile-grid = "0.5"
tokio = "1.28.2" # Individual features are customized in each crate tokio = "1.32.0" # Individual features are customized in each crate
tokio-util = { version = "0.7.8", features = ["rt"] } tokio-util = { version = "0.7.9", features = ["rt"] }
tracing = "0.1.37" tracing = "0.1.37"
tracing-subscriber = "0.3.17" tracing-subscriber = "0.3.17"
tracing-tracy = "0.10" tracing-tracy = "0.10"
tracing-wasm = "0.2.1" # TODO: Low quality dependency (remove in a separate PR!) tracing-wasm = "0.2.1" # TODO: Low quality dependency (remove in a separate PR!)
walkdir = "2.3.3" walkdir = "2.4.0"
wasm-bindgen = "0.2" wasm-bindgen = "0.2"
wasm-bindgen-futures = "0.4" wasm-bindgen-futures = "0.4"
wasm-bindgen-test = "0.3" wasm-bindgen-test = "0.3"
web-sys = "0.3.63" # Individual features are customized in each crate web-sys = "0.3.64" # Individual features are customized in each crate
wgpu = "0.16.1" wgpu = "0.17.0"
[profile.release] [profile.release]
lto = true lto = true

View File

@ -8,6 +8,7 @@ edition.workspace = true
rust-version.workspace = true rust-version.workspace = true
license.workspace = true license.workspace = true
keywords.workspace = true keywords.workspace = true
categories.workspace = true
authors.workspace = true authors.workspace = true
[dependencies] [dependencies]

View File

@ -34,7 +34,8 @@ cargo {
libname = "maplibre_android" libname = "maplibre_android"
targetDirectory = "${module}/../target" targetDirectory = "${module}/../target"
profile = "debug" profile = "debug"
rustupChannel = "nightly-2023-03-29" // Also change the version in justfile // This should be in sync with the justfile
rustupChannel = "nightly-2023-09-23"
features { features {

View File

@ -8,6 +8,7 @@ edition.workspace = true
rust-version.workspace = true rust-version.workspace = true
license.workspace = true license.workspace = true
keywords.workspace = true keywords.workspace = true
categories.workspace = true
authors.workspace = true authors.workspace = true
[dependencies] [dependencies]

View File

@ -8,6 +8,7 @@ edition.workspace = true
rust-version.workspace = true rust-version.workspace = true
license.workspace = true license.workspace = true
keywords.workspace = true keywords.workspace = true
categories.workspace = true
authors.workspace = true authors.workspace = true
[dependencies] [dependencies]

View File

@ -4,10 +4,12 @@
set shell := ["bash", "-c"] set shell := ["bash", "-c"]
# Also change the version in android/gradle/lib/build.gradle # Keep this in sync with `android/gradle/lib/build.gradle`
export NIGHTLY_TOOLCHAIN := "nightly-2023-09-23"
export NIGHTLY_TOOLCHAIN := "nightly-2023-03-29" # Keep this in sync with `rust-toolchain.toml` and `Cargo.toml`.
export STABLE_TOOLCHAIN := "1.65" # Make sure the above is newer than this.
export STABLE_TOOLCHAIN := "1.72.1"
export CARGO_TERM_COLOR := "always" export CARGO_TERM_COLOR := "always"
export RUST_BACKTRACE := "1" export RUST_BACKTRACE := "1"

View File

@ -8,6 +8,7 @@ edition.workspace = true
rust-version.workspace = true rust-version.workspace = true
license.workspace = true license.workspace = true
keywords.workspace = true keywords.workspace = true
categories.workspace = true
authors.workspace = true authors.workspace = true
[features] [features]

View File

@ -8,6 +8,7 @@ edition.workspace = true
rust-version.workspace = true rust-version.workspace = true
license.workspace = true license.workspace = true
keywords.workspace = true keywords.workspace = true
categories.workspace = true
authors.workspace = true authors.workspace = true
[features] [features]

View File

@ -7,6 +7,7 @@ edition.workspace = true
rust-version.workspace = true rust-version.workspace = true
license.workspace = true license.workspace = true
keywords.workspace = true keywords.workspace = true
categories.workspace = true
authors.workspace = true authors.workspace = true
[target.'cfg(any(target_os = "macos", target_os = "ios", target_os = "linux", target_os = "android", target_os = "windows"))'.dependencies] [target.'cfg(any(target_os = "macos", target_os = "ios", target_os = "linux", target_os = "android", target_os = "windows"))'.dependencies]

View File

@ -9,6 +9,7 @@ edition.workspace = true
rust-version.workspace = true rust-version.workspace = true
license.workspace = true license.workspace = true
keywords.workspace = true keywords.workspace = true
categories.workspace = true
authors.workspace = true authors.workspace = true
[features] [features]

View File

@ -3,9 +3,10 @@ use crate::{context::MapContext, debug::TileDebugItem, render::render_phase::Ren
pub fn cleanup_system(MapContext { world, .. }: &mut MapContext) { pub fn cleanup_system(MapContext { world, .. }: &mut MapContext) {
let Some(debug_tile_phase) = world let Some(debug_tile_phase) = world
.resources .resources
.query_mut::< .query_mut::<&mut RenderPhase<TileDebugItem>>()
&mut RenderPhase<TileDebugItem>, else {
>() else { return; }; return;
};
debug_tile_phase.clear(); debug_tile_phase.clear();
} }

View File

@ -10,13 +10,12 @@ use crate::{
}; };
pub fn queue_system(MapContext { world, .. }: &mut MapContext) { pub fn queue_system(MapContext { world, .. }: &mut MapContext) {
let Some(( let Some((Initialized(tile_view_pattern), tile_debug_phase)) = world.resources.query_mut::<(
Initialized(tile_view_pattern),
tile_debug_phase,
)) = world.resources.query_mut::<(
&mut Eventually<WgpuTileViewPattern>, &mut Eventually<WgpuTileViewPattern>,
&mut RenderPhase<TileDebugItem>, &mut RenderPhase<TileDebugItem>,
)>() else { return; }; )>() else {
return;
};
for view_tile in tile_view_pattern.iter() { for view_tile in tile_view_pattern.iter() {
let coords = &view_tile.coords(); let coords = &view_tile.coords();

View File

@ -18,9 +18,9 @@ impl<P: PhaseItem> RenderCommand<P> for SetDebugPipeline {
_item: &P, _item: &P,
pass: &mut TrackedRenderPass<'w>, pass: &mut TrackedRenderPass<'w>,
) -> RenderCommandResult { ) -> RenderCommandResult {
let Some(Initialized(pipeline)) = world let Some(Initialized(pipeline)) = world.resources.get::<Eventually<DebugPipeline>>() else {
.resources return RenderCommandResult::Failure;
.get::<Eventually<DebugPipeline>>() else { return RenderCommandResult::Failure; }; };
pass.set_render_pipeline(pipeline); pass.set_render_pipeline(pipeline);
RenderCommandResult::Success RenderCommandResult::Success
@ -34,9 +34,11 @@ impl RenderCommand<TileDebugItem> for DrawDebugOutline {
item: &TileDebugItem, item: &TileDebugItem,
pass: &mut TrackedRenderPass<'w>, pass: &mut TrackedRenderPass<'w>,
) -> RenderCommandResult { ) -> RenderCommandResult {
let Some(Initialized(tile_view_pattern)) = world let Some(Initialized(tile_view_pattern)) =
.resources world.resources.get::<Eventually<WgpuTileViewPattern>>()
.get::<Eventually<WgpuTileViewPattern>>() else { return RenderCommandResult::Failure; }; else {
return RenderCommandResult::Failure;
};
let source_shape = &item.source_shape; let source_shape = &item.source_shape;

View File

@ -24,11 +24,12 @@ pub fn resource_system(
.. ..
}: &mut MapContext, }: &mut MapContext,
) { ) {
let Some( let Some(debug_pipeline) = world
debug_pipeline .resources
) = world.resources.query_mut::< .query_mut::<&mut Eventually<DebugPipeline>>()
&mut Eventually<DebugPipeline>, else {
>() else { return; }; return;
};
debug_pipeline.initialize(|| { debug_pipeline.initialize(|| {
let mask_shader = shaders::TileMaskShader { let mask_shader = shaders::TileMaskShader {

View File

@ -40,8 +40,11 @@ impl<E: Environment, T: RasterTransferables> System for PopulateWorldSystem<E, T
if message.has_tag(T::LayerRaster::message_tag()) { if message.has_tag(T::LayerRaster::message_tag()) {
let message = message.into_transferable::<T::LayerRaster>(); let message = message.into_transferable::<T::LayerRaster>();
let Some(component) = world let Some(component) = world
.tiles .tiles
.query_mut::<&mut RasterLayersDataComponent>(message.coords()) else { continue; }; .query_mut::<&mut RasterLayersDataComponent>(message.coords())
else {
continue;
};
component component
.layers .layers
@ -50,7 +53,10 @@ impl<E: Environment, T: RasterTransferables> System for PopulateWorldSystem<E, T
let message = message.into_transferable::<T::LayerRasterMissing>(); let message = message.into_transferable::<T::LayerRasterMissing>();
let Some(component) = world let Some(component) = world
.tiles .tiles
.query_mut::<&mut RasterLayersDataComponent>(message.coords()) else { continue; }; .query_mut::<&mut RasterLayersDataComponent>(message.coords())
else {
continue;
};
component component
.layers .layers

View File

@ -13,11 +13,12 @@ use crate::{
}; };
pub fn queue_system(MapContext { world, .. }: &mut MapContext) { pub fn queue_system(MapContext { world, .. }: &mut MapContext) {
let Some(( let Some((Initialized(tile_view_pattern),)) = world
Initialized(tile_view_pattern), .resources
)) = world.resources.query::<( .query::<(&Eventually<WgpuTileViewPattern>,)>()
&Eventually<WgpuTileViewPattern>, else {
)>() else { return; }; return;
};
let mut items = Vec::new(); let mut items = Vec::new();
@ -49,7 +50,10 @@ pub fn queue_system(MapContext { world, .. }: &mut MapContext) {
let Some((layer_item_phase, tile_mask_phase)) = world let Some((layer_item_phase, tile_mask_phase)) = world
.resources .resources
.query_mut::<(&mut RenderPhase<LayerItem>, &mut RenderPhase<TileMaskItem>,)>() else { return; }; .query_mut::<(&mut RenderPhase<LayerItem>, &mut RenderPhase<TileMaskItem>)>()
else {
return;
};
for (layer, mask) in items { for (layer, mask) in items {
layer_item_phase.add(layer); layer_item_phase.add(layer);

View File

@ -16,9 +16,11 @@ impl<P: PhaseItem> RenderCommand<P> for SetRasterTilePipeline {
_item: &P, _item: &P,
pass: &mut TrackedRenderPass<'w>, pass: &mut TrackedRenderPass<'w>,
) -> RenderCommandResult { ) -> RenderCommandResult {
let Some(Initialized(raster_resources)) = world let Some(Initialized(raster_resources)) =
.resources world.resources.get::<Eventually<RasterResources>>()
.get::<Eventually<RasterResources>>() else { return RenderCommandResult::Failure; }; else {
return RenderCommandResult::Failure;
};
pass.set_render_pipeline(raster_resources.pipeline()); pass.set_render_pipeline(raster_resources.pipeline());
RenderCommandResult::Success RenderCommandResult::Success
@ -32,12 +34,15 @@ impl<const I: usize> RenderCommand<LayerItem> for SetRasterViewBindGroup<I> {
item: &LayerItem, item: &LayerItem,
pass: &mut TrackedRenderPass<'w>, pass: &mut TrackedRenderPass<'w>,
) -> RenderCommandResult { ) -> RenderCommandResult {
let Some(Initialized(raster_resources)) = world let Some(Initialized(raster_resources)) =
.resources world.resources.get::<Eventually<RasterResources>>()
.get::<Eventually<RasterResources>>() else { return RenderCommandResult::Failure; }; else {
return RenderCommandResult::Failure;
};
let Some(bind_group) = raster_resources let Some(bind_group) = raster_resources.get_bound_texture(&item.tile.coords) else {
.get_bound_texture(&item.tile.coords) else { return RenderCommandResult::Failure; }; return RenderCommandResult::Failure;
};
pass.set_bind_group(0, bind_group, &[]); pass.set_bind_group(0, bind_group, &[]);
RenderCommandResult::Success RenderCommandResult::Success
@ -51,9 +56,11 @@ impl RenderCommand<LayerItem> for DrawRasterTile {
item: &LayerItem, item: &LayerItem,
pass: &mut TrackedRenderPass<'w>, pass: &mut TrackedRenderPass<'w>,
) -> RenderCommandResult { ) -> RenderCommandResult {
let Some(Initialized(tile_view_pattern)) = world let Some(Initialized(tile_view_pattern)) =
.resources world.resources.get::<Eventually<WgpuTileViewPattern>>()
.get::<Eventually<WgpuTileViewPattern>>() else { return RenderCommandResult::Failure; }; else {
return RenderCommandResult::Failure;
};
let source_shape = &item.source_shape; let source_shape = &item.source_shape;

View File

@ -110,8 +110,8 @@ pub fn fetch_raster_apc<
kernel: K, kernel: K,
) -> AsyncProcedureFuture { ) -> AsyncProcedureFuture {
Box::pin(async move { Box::pin(async move {
let Input::TileRequest {coords, style} = input else { let Input::TileRequest { coords, style } = input else {
return Err(ProcedureError::IncompatibleInput) return Err(ProcedureError::IncompatibleInput);
}; };
let raster_layers: HashSet<String> = style let raster_layers: HashSet<String> = style

View File

@ -27,7 +27,10 @@ pub fn resource_system(
) { ) {
let Some(raster_resources) = world let Some(raster_resources) = world
.resources .resources
.query_mut::<&mut Eventually<RasterResources>>() else { return; }; .query_mut::<&mut Eventually<RasterResources>>()
else {
return;
};
raster_resources.initialize(|| { raster_resources.initialize(|| {
let shader = shaders::RasterTileShader { let shader = shaders::RasterTileShader {

View File

@ -25,7 +25,10 @@ pub fn upload_system(
) { ) {
let Some(Initialized(raster_resources)) = world let Some(Initialized(raster_resources)) = world
.resources .resources
.query_mut::<&mut Eventually<RasterResources>>() else { return; }; .query_mut::<&mut Eventually<RasterResources>>()
else {
return;
};
let view_region = view_state.create_view_region(); let view_region = view_state.create_view_region();
if let Some(view_region) = &view_region { if let Some(view_region) = &view_region {
@ -54,23 +57,24 @@ fn upload_raster_layer(
continue; continue;
} }
let Some(raster_layers) = let Some(raster_layers) = tiles.query::<&RasterLayersDataComponent>(coords) else {
tiles.query::<&RasterLayersDataComponent>(coords) else { continue; }; continue;
};
for style_layer in &style.layers { for style_layer in &style.layers {
let style_source_layer = style_layer.source_layer.as_ref().unwrap(); // FIXME: Remove unwrap let style_source_layer = style_layer.source_layer.as_ref().unwrap(); // FIXME: Remove unwrap
let Some(AvailableRasterLayerData { let Some(AvailableRasterLayerData { coords, image, .. }) = raster_layers
coords, .layers
image,
..
}) = raster_layers.layers
.iter() .iter()
.flat_map(|data| match data { .flat_map(|data| match data {
RasterLayerData::Available(data) => Some(data), RasterLayerData::Available(data) => Some(data),
RasterLayerData::Missing(_) => None, RasterLayerData::Missing(_) => None,
}) })
.find(|layer| style_source_layer.as_str() == layer.source_layer) else { continue; }; .find(|layer| style_source_layer.as_str() == layer.source_layer)
else {
continue;
};
let (width, height) = image.dimensions(); let (width, height) = image.dimensions();

View File

@ -465,7 +465,7 @@ mod tests {
backends, backends,
dx12_shader_compiler: Default::default(), dx12_shader_compiler: Default::default(),
}); });
let adapter = wgpu::util::initialize_adapter_from_env_or_default(&instance, backends, None) let adapter = wgpu::util::initialize_adapter_from_env_or_default(&instance, None)
.await .await
.expect("Unable to initialize adapter"); .expect("Unable to initialize adapter");

View File

@ -18,7 +18,9 @@ impl<P: PhaseItem> RenderCommand<P> for SetMaskPipeline {
_item: &P, _item: &P,
pass: &mut TrackedRenderPass<'w>, pass: &mut TrackedRenderPass<'w>,
) -> RenderCommandResult { ) -> RenderCommandResult {
let Some(Initialized(pipeline)) = world.resources.get::<Eventually<MaskPipeline>>() else { return RenderCommandResult::Failure; }; let Some(Initialized(pipeline)) = world.resources.get::<Eventually<MaskPipeline>>() else {
return RenderCommandResult::Failure;
};
pass.set_render_pipeline(pipeline); pass.set_render_pipeline(pipeline);
RenderCommandResult::Success RenderCommandResult::Success
} }
@ -31,9 +33,11 @@ impl RenderCommand<TileMaskItem> for DrawMask {
item: &TileMaskItem, item: &TileMaskItem,
pass: &mut TrackedRenderPass<'w>, pass: &mut TrackedRenderPass<'w>,
) -> RenderCommandResult { ) -> RenderCommandResult {
let Some(Initialized(tile_view_pattern)) = world let Some(Initialized(tile_view_pattern)) =
.resources world.resources.get::<Eventually<WgpuTileViewPattern>>()
.get::<Eventually<WgpuTileViewPattern>>() else { return RenderCommandResult::Failure; }; else {
return RenderCommandResult::Failure;
};
let tile_mask = &item.source_shape; let tile_mask = &item.source_shape;

View File

@ -6,10 +6,10 @@ use crate::{
pub fn cleanup_system(MapContext { world, .. }: &mut MapContext) { pub fn cleanup_system(MapContext { world, .. }: &mut MapContext) {
let Some((layer_item_phase, tile_mask_phase)) = world let Some((layer_item_phase, tile_mask_phase)) = world
.resources .resources
.query_mut::<( .query_mut::<(&mut RenderPhase<LayerItem>, &mut RenderPhase<TileMaskItem>)>()
&mut RenderPhase<LayerItem>, else {
&mut RenderPhase<TileMaskItem>, return;
)>() else { return; }; };
layer_item_phase.clear(); layer_item_phase.clear();
tile_mask_phase.clear(); tile_mask_phase.clear();

View File

@ -38,13 +38,12 @@ impl System for ResourceSystem {
.. ..
}: &mut MapContext, }: &mut MapContext,
) { ) {
let Some(( let Some((tile_view_pattern, mask_pipeline)) = world.resources.query_mut::<(
tile_view_pattern,
mask_pipeline
)) = world.resources.query_mut::<(
&mut Eventually<WgpuTileViewPattern>, &mut Eventually<WgpuTileViewPattern>,
&mut Eventually<MaskPipeline>, &mut Eventually<MaskPipeline>,
)>() else { return; }; )>() else {
return;
};
let surface = &mut state.surface; let surface = &mut state.surface;

View File

@ -13,13 +13,12 @@ pub fn tile_view_pattern_system(
view_state, world, .. view_state, world, ..
}: &mut MapContext, }: &mut MapContext,
) { ) {
let Some(( let Some((Initialized(tile_view_pattern), view_tile_sources)) = world
Initialized(tile_view_pattern), .resources
view_tile_sources, .query::<(&Eventually<WgpuTileViewPattern>, &ViewTileSources)>()
)) = world.resources.query::<( else {
&Eventually<WgpuTileViewPattern>, return;
&ViewTileSources };
)>() else { return; };
let view_region = view_state.create_view_region(); let view_region = view_state.create_view_region();
if let Some(view_region) = &view_region { if let Some(view_region) = &view_region {
@ -31,7 +30,10 @@ pub fn tile_view_pattern_system(
// TODO: Can we &mut borrow initially somehow instead of here? // TODO: Can we &mut borrow initially somehow instead of here?
let Some(Initialized(tile_view_pattern)) = world let Some(Initialized(tile_view_pattern)) = world
.resources .resources
.query_mut::<&mut Eventually<WgpuTileViewPattern>>() else { return; }; .query_mut::<&mut Eventually<WgpuTileViewPattern>>()
else {
return;
};
tile_view_pattern.update_pattern(view_tiles); tile_view_pattern.update_pattern(view_tiles);
} }

View File

@ -16,11 +16,12 @@ pub fn upload_system(
.. ..
}: &mut MapContext, }: &mut MapContext,
) { ) {
let Some( let Some(Initialized(tile_view_pattern)) = world
Initialized(tile_view_pattern) .resources
) = world.resources.query_mut::< .query_mut::<&mut Eventually<WgpuTileViewPattern>>()
&mut Eventually<WgpuTileViewPattern> else {
>() else { return; }; return;
};
let view_proj = view_state.view_projection(); let view_proj = view_state.view_projection();
tile_view_pattern.upload_pattern(queue, &view_proj); tile_view_pattern.upload_pattern(queue, &view_proj);

View File

@ -71,9 +71,10 @@ struct VectorTilesDone;
impl HasTile for VectorTilesDone { impl HasTile for VectorTilesDone {
fn has_tile(&self, coords: WorldTileCoords, world: &World) -> bool { fn has_tile(&self, coords: WorldTileCoords, world: &World) -> bool {
let Some(vector_layers_indices) = world let Some(vector_layers_indices) = world.tiles.query::<&VectorLayersDataComponent>(coords)
.tiles else {
.query::<&VectorLayersDataComponent>(coords) else { return false; }; return false;
};
vector_layers_indices.done vector_layers_indices.done
} }

View File

@ -39,15 +39,21 @@ impl<E: Environment, T: VectorTransferables> System for PopulateWorldSystem<E, T
if message.has_tag(T::TileTessellated::message_tag()) { if message.has_tag(T::TileTessellated::message_tag()) {
let message = message.into_transferable::<T::TileTessellated>(); let message = message.into_transferable::<T::TileTessellated>();
let Some(component) = world let Some(component) = world
.tiles .tiles
.query_mut::<&mut VectorLayersDataComponent>(message.coords()) else { continue; }; .query_mut::<&mut VectorLayersDataComponent>(message.coords())
else {
continue;
};
component.done = true; component.done = true;
} else if message.has_tag(T::LayerMissing::message_tag()) { } else if message.has_tag(T::LayerMissing::message_tag()) {
let message = message.into_transferable::<T::LayerMissing>(); let message = message.into_transferable::<T::LayerMissing>();
let Some(component) = world let Some(component) = world
.tiles .tiles
.query_mut::<&mut VectorLayersDataComponent>(message.coords()) else { continue; }; .query_mut::<&mut VectorLayersDataComponent>(message.coords())
else {
continue;
};
component component
.layers .layers
@ -60,8 +66,11 @@ impl<E: Environment, T: VectorTransferables> System for PopulateWorldSystem<E, T
}*/ }*/
let Some(component) = world let Some(component) = world
.tiles .tiles
.query_mut::<&mut VectorLayersDataComponent>(message.coords()) else { continue; }; .query_mut::<&mut VectorLayersDataComponent>(message.coords())
else {
continue;
};
component component
.layers .layers

View File

@ -16,13 +16,16 @@ pub fn queue_system(MapContext { world, .. }: &mut MapContext) {
Initialized(tile_view_pattern), Initialized(tile_view_pattern),
Initialized(buffer_pool), Initialized(buffer_pool),
mask_phase, mask_phase,
layer_item_phase layer_item_phase,
)) = world.resources.query_mut::<( )) = world.resources.query_mut::<(
&mut Eventually<WgpuTileViewPattern>, &mut Eventually<WgpuTileViewPattern>,
&mut Eventually<VectorBufferPool>, &mut Eventually<VectorBufferPool>,
&mut RenderPhase<TileMaskItem>, &mut RenderPhase<TileMaskItem>,
&mut RenderPhase<LayerItem>, &mut RenderPhase<LayerItem>,
)>() else { return; }; )>()
else {
return;
};
let buffer_pool_index = buffer_pool.index(); let buffer_pool_index = buffer_pool.index();

View File

@ -19,9 +19,10 @@ impl<P: PhaseItem> RenderCommand<P> for SetVectorTilePipeline {
_item: &P, _item: &P,
pass: &mut TrackedRenderPass<'w>, pass: &mut TrackedRenderPass<'w>,
) -> RenderCommandResult { ) -> RenderCommandResult {
let Some(Initialized(pipeline)) = world let Some(Initialized(pipeline)) = world.resources.get::<Eventually<VectorPipeline>>()
.resources else {
.get::<Eventually<VectorPipeline>>() else { return RenderCommandResult::Failure; }; return RenderCommandResult::Failure;
};
pass.set_render_pipeline(pipeline); pass.set_render_pipeline(pipeline);
RenderCommandResult::Success RenderCommandResult::Success
@ -35,19 +36,25 @@ impl RenderCommand<LayerItem> for DrawVectorTile {
item: &LayerItem, item: &LayerItem,
pass: &mut TrackedRenderPass<'w>, pass: &mut TrackedRenderPass<'w>,
) -> RenderCommandResult { ) -> RenderCommandResult {
let Some(( let Some((Initialized(buffer_pool), Initialized(tile_view_pattern))) =
Initialized(buffer_pool), world.resources.query::<(
Initialized(tile_view_pattern), &Eventually<VectorBufferPool>,
)) = world.resources.query::<( &Eventually<WgpuTileViewPattern>,
&Eventually<VectorBufferPool>, )>()
&Eventually<WgpuTileViewPattern> else {
)>() else { return RenderCommandResult::Failure; }; return RenderCommandResult::Failure;
};
let Some(vector_layers) = buffer_pool.index().get_layers(item.tile.coords) else { return RenderCommandResult::Failure; }; let Some(vector_layers) = buffer_pool.index().get_layers(item.tile.coords) else {
return RenderCommandResult::Failure;
};
let Some(entry) = vector_layers let Some(entry) = vector_layers
.iter() .iter()
.find(|entry| entry.style_layer.id == item.style_layer) else { return RenderCommandResult::Failure; }; .find(|entry| entry.style_layer.id == item.style_layer)
else {
return RenderCommandResult::Failure;
};
let source_shape = &item.source_shape; let source_shape = &item.source_shape;

View File

@ -111,8 +111,8 @@ pub fn fetch_vector_apc<
kernel: K, kernel: K,
) -> AsyncProcedureFuture { ) -> AsyncProcedureFuture {
Box::pin(async move { Box::pin(async move {
let Input::TileRequest {coords, style} = input else { let Input::TileRequest { coords, style } = input else {
return Err(ProcedureError::IncompatibleInput) return Err(ProcedureError::IncompatibleInput);
}; };
let fill_layers: HashSet<String> = style let fill_layers: HashSet<String> = style

View File

@ -24,13 +24,12 @@ pub fn resource_system(
.. ..
}: &mut MapContext, }: &mut MapContext,
) { ) {
let Some(( let Some((buffer_pool, vector_pipeline)) = world.resources.query_mut::<(
buffer_pool,
vector_pipeline
)) = world.resources.query_mut::<(
&mut Eventually<VectorBufferPool>, &mut Eventually<VectorBufferPool>,
&mut Eventually<VectorPipeline> &mut Eventually<VectorPipeline>,
)>() else { return; }; )>() else {
return;
};
buffer_pool.initialize(|| BufferPool::from_device(device)); buffer_pool.initialize(|| BufferPool::from_device(device));

View File

@ -26,11 +26,12 @@ pub fn upload_system(
.. ..
}: &mut MapContext, }: &mut MapContext,
) { ) {
let Some( let Some(Initialized(buffer_pool)) = world
Initialized(buffer_pool) .resources
) = world.resources.query_mut::< .query_mut::<&mut Eventually<VectorBufferPool>>()
&mut Eventually<VectorBufferPool>, else {
>() else { return; }; return;
};
let view_region = view_state.create_view_region(); let view_region = view_state.create_view_region();
@ -128,7 +129,9 @@ fn upload_tesselated_layer(
) { ) {
// Upload all tessellated layers which are in view // Upload all tessellated layers which are in view
for coords in view_region.iter() { for coords in view_region.iter() {
let Some(vector_layers) = tiles.query_mut::<&VectorLayersDataComponent>(coords) else { continue; }; let Some(vector_layers) = tiles.query_mut::<&VectorLayersDataComponent>(coords) else {
continue;
};
let loaded_layers = buffer_pool let loaded_layers = buffer_pool
.get_loaded_source_layers_at(coords) .get_loaded_source_layers_at(coords)
@ -148,13 +151,16 @@ fn upload_tesselated_layer(
let source_layer = style_layer.source_layer.as_ref().unwrap(); // TODO: Unwrap let source_layer = style_layer.source_layer.as_ref().unwrap(); // TODO: Unwrap
let Some(AvailableVectorLayerData { let Some(AvailableVectorLayerData {
coords, coords,
feature_indices, feature_indices,
buffer, buffer,
.. ..
}) = available_layers }) = available_layers
.iter() .iter()
.find(|layer| source_layer.as_str() == layer.source_layer) else { continue; }; .find(|layer| source_layer.as_str() == layer.source_layer)
else {
continue;
};
let color: Option<Vec4f32> = style_layer let color: Option<Vec4f32> = style_layer
.paint .paint

View File

@ -3,4 +3,6 @@
# The CI might use it though to build other Rust binaries, required for building maplibre-rs. # The CI might use it though to build other Rust binaries, required for building maplibre-rs.
# This file is here to give IDEs a hint about which Rust version to use. # This file is here to give IDEs a hint about which Rust version to use.
# The version is set here instead of using stable, so we can make sure that a predictable version is used. # The version is set here instead of using stable, so we can make sure that a predictable version is used.
channel = "1.68" #
# Keep this in sync with `justfile` and `Cargo.toml`
channel = "1.72.1"

View File

@ -9,6 +9,7 @@ edition.workspace = true
rust-version.workspace = true rust-version.workspace = true
license.workspace = true license.workspace = true
keywords.workspace = true keywords.workspace = true
categories.workspace = true
authors.workspace = true authors.workspace = true
[features] [features]

View File

@ -28,15 +28,15 @@ pub enum WebError {
impl From<JsValue> for WebError { impl From<JsValue> for WebError {
fn from(value: JsValue) -> Self { fn from(value: JsValue) -> Self {
if let Some(error) = value.dyn_ref::<TypeError>() { if let Some(error) = value.dyn_ref::<TypeError>() {
let Some(message) = error let Some(message) = error.message().as_string() else {
.message() return WebError::InvalidMessage;
.as_string() else { return WebError::InvalidMessage; }; };
WebError::TypeError(message.into()) WebError::TypeError(message.into())
} else if let Some(error) = value.dyn_ref::<js_sys::Error>() { } else if let Some(error) = value.dyn_ref::<js_sys::Error>() {
let Some(message) = error let Some(message) = error.message().as_string() else {
.message() return WebError::InvalidMessage;
.as_string() else { return WebError::InvalidMessage; }; };
WebError::GenericError(message.into()) WebError::GenericError(message.into())
} else { } else {