maplibre/sdf/
queue_system.rs1use crate::{
4 context::MapContext,
5 render::{
6 eventually::{Eventually, Eventually::Initialized},
7 render_phase::{DrawState, RenderPhase, TranslucentItem},
8 tile_view_pattern::WgpuTileViewPattern,
9 },
10 sdf::{render_commands::DrawSymbols, SymbolBufferPool},
11 tcs::{
12 system::{SystemError, SystemResult},
13 tiles::Tile,
14 },
15};
16
17pub fn queue_system(MapContext { world, .. }: &mut MapContext) -> SystemResult {
18 let Some((Initialized(tile_view_pattern), translucent_phase, Initialized(symbol_buffer_pool))) =
19 world.resources.query_mut::<(
20 &mut Eventually<WgpuTileViewPattern>,
21 &mut RenderPhase<TranslucentItem>,
22 &mut Eventually<SymbolBufferPool>,
23 )>()
24 else {
25 return Err(SystemError::Dependencies);
26 };
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 if let Some(layer_entries) =
35 symbol_buffer_pool.index().get_layers(source_shape.coords())
36 {
37 for layer_entry in layer_entries {
38 translucent_phase.add(TranslucentItem {
40 draw_function: Box::new(DrawState::<TranslucentItem, DrawSymbols>::new()),
41 index: layer_entry.style_layer.index,
42 style_layer: layer_entry.style_layer.id.clone(),
43 tile: Tile {
44 coords: layer_entry.coords,
45 },
46 source_shape: source_shape.clone(),
47 });
48 }
49 };
50 });
51 }
52 Ok(())
53}