maplibre/debug/
queue_system.rs

1//! Queues [PhaseItems](crate::render::render_phase::PhaseItem) for rendering.
2use crate::{
3    context::MapContext,
4    debug::{render_commands::DrawDebugOutlines, TileDebugItem},
5    render::{
6        eventually::{Eventually, Eventually::Initialized},
7        render_phase::{DrawState, RenderPhase},
8        tile_view_pattern::WgpuTileViewPattern,
9    },
10    tcs::system::{SystemError, SystemResult},
11};
12
13pub fn queue_system(MapContext { world, .. }: &mut MapContext) -> SystemResult {
14    let Some((Initialized(tile_view_pattern), tile_debug_phase)) = world.resources.query_mut::<(
15        &mut Eventually<WgpuTileViewPattern>,
16        &mut RenderPhase<TileDebugItem>,
17    )>() else {
18        return Err(SystemError::Dependencies);
19    };
20
21    for view_tile in tile_view_pattern.iter() {
22        let coords = &view_tile.coords();
23        tracing::trace!("Drawing debug at {coords}");
24
25        // draw tile normal or the source e.g. parent or children
26        view_tile.render(|source_shape| {
27            // Draw masks for all source_shapes
28            tile_debug_phase.add(TileDebugItem {
29                draw_function: Box::new(DrawState::<TileDebugItem, DrawDebugOutlines>::new()),
30                source_shape: source_shape.clone(),
31            });
32        });
33    }
34
35    Ok(())
36}