maplibre/debug/
resource_system.rs

1//! Prepares GPU-owned resources by initializing them if they are uninitialized or out-of-date.
2use crate::{
3    context::MapContext,
4    debug::DebugPipeline,
5    render::{
6        eventually::Eventually,
7        resource::{RenderPipeline, TilePipeline},
8        shaders,
9        shaders::Shader,
10        RenderResources, Renderer,
11    },
12    tcs::system::{SystemError, SystemResult},
13};
14
15pub fn resource_system(
16    MapContext {
17        world,
18        renderer:
19            Renderer {
20                device,
21                resources: RenderResources { surface, .. },
22                settings,
23                ..
24            },
25        ..
26    }: &mut MapContext,
27) -> SystemResult {
28    let Some(debug_pipeline) = world
29        .resources
30        .query_mut::<&mut Eventually<DebugPipeline>>()
31    else {
32        return Err(SystemError::Dependencies);
33    };
34
35    debug_pipeline.initialize(|| {
36        let mask_shader = shaders::TileMaskShader {
37            format: surface.surface_format(),
38            draw_colors: true,
39            debug_lines: true,
40        };
41
42        let pipeline = TilePipeline::new(
43            "debug_pipeline".into(),
44            *settings,
45            mask_shader.describe_vertex(),
46            mask_shader.describe_fragment(),
47            false,
48            false,
49            true,
50            false,
51            false,
52            false,
53            false,
54        )
55        .describe_render_pipeline()
56        .initialize(device);
57        DebugPipeline(pipeline)
58    });
59
60    Ok(())
61}