mirror of
https://github.com/maplibre/maplibre-rs.git
synced 2025-12-08 19:05:57 +00:00
Chore: upgrade deps (#286)
* upgrade deps, fix keywords/categories * just fmt * remove backends in wgpu
This commit is contained in:
parent
e3c398b9a9
commit
04ff0882a3
56
Cargo.toml
56
Cargo.toml
@ -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
|
||||||
|
|||||||
@ -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]
|
||||||
|
|||||||
@ -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 {
|
||||||
|
|||||||
@ -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]
|
||||||
|
|||||||
@ -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]
|
||||||
|
|||||||
8
justfile
8
justfile
@ -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"
|
||||||
|
|
||||||
|
|||||||
@ -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]
|
||||||
|
|||||||
@ -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]
|
||||||
|
|||||||
@ -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]
|
||||||
|
|||||||
@ -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]
|
||||||
|
|||||||
@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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();
|
||||||
|
|||||||
@ -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;
|
||||||
|
|
||||||
|
|||||||
@ -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 {
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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;
|
||||||
|
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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 {
|
||||||
|
|||||||
@ -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();
|
||||||
|
|
||||||
|
|||||||
@ -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");
|
||||||
|
|
||||||
|
|||||||
@ -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;
|
||||||
|
|
||||||
|
|||||||
@ -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();
|
||||||
|
|||||||
@ -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;
|
||||||
|
|
||||||
|
|||||||
@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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();
|
||||||
|
|
||||||
|
|||||||
@ -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;
|
||||||
|
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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));
|
||||||
|
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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"
|
||||||
|
|||||||
@ -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]
|
||||||
|
|||||||
@ -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 {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user