maplibre/raster/
queue_system.rs1use crate::{
4 context::MapContext,
5 raster::render_commands::DrawRasterTiles,
6 render::{
7 eventually::{Eventually, Eventually::Initialized},
8 render_commands::DrawMasks,
9 render_phase::{DrawState, LayerItem, RenderPhase, TileMaskItem},
10 tile_view_pattern::WgpuTileViewPattern,
11 },
12 tcs::{
13 system::{SystemError, SystemResult},
14 tiles::Tile,
15 },
16};
17
18pub fn queue_system(MapContext { world, .. }: &mut MapContext) -> SystemResult {
19 let Some((Initialized(tile_view_pattern),)) = world
20 .resources
21 .query::<(&Eventually<WgpuTileViewPattern>,)>()
22 else {
23 return Err(SystemError::Dependencies);
24 };
25
26 let mut items = Vec::new();
27
28 for view_tile in tile_view_pattern.iter() {
29 let coords = &view_tile.coords();
30 tracing::trace!("Drawing tile at {coords}");
31
32 view_tile.render(|source_shape| {
34 items.push((
36 LayerItem {
37 draw_function: Box::new(DrawState::<LayerItem, DrawRasterTiles>::new()),
38 index: 0,
39 is_line: false,
40 style_layer: "raster".to_string(),
41 tile: Tile {
42 coords: source_shape.coords(),
43 },
44 source_shape: source_shape.clone(),
45 },
46 TileMaskItem {
48 draw_function: Box::new(DrawState::<TileMaskItem, DrawMasks>::new()),
49 source_shape: source_shape.clone(),
50 },
51 ));
52 });
53 }
54
55 let Some((layer_item_phase, tile_mask_phase)) = world
56 .resources
57 .query_mut::<(&mut RenderPhase<LayerItem>, &mut RenderPhase<TileMaskItem>)>()
58 else {
59 return Err(SystemError::Dependencies);
60 };
61
62 for (layer, mask) in items {
63 layer_item_phase.add(layer);
64 tile_mask_phase.add(mask);
65 }
66
67 Ok(())
68}