maplibre/sdf/
queue_system.rs

1//! Queues [PhaseItems](crate::render::render_phase::PhaseItem) for rendering.
2
3use 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        // draw tile normal or the source e.g. parent or children
33        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                    // Draw tile
39                    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}