maplibre/raster/
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    raster::resource::RasterResources,
5    render::{
6        eventually::Eventually,
7        resource::{RenderPipeline, TilePipeline},
8        settings::Msaa,
9        shaders,
10        shaders::Shader,
11        RenderResources, Renderer,
12    },
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) {
28    let Some(raster_resources) = world
29        .resources
30        .query_mut::<&mut Eventually<RasterResources>>() else { return; };
31
32    raster_resources.initialize(|| {
33        let shader = shaders::RasterTileShader {
34            format: surface.surface_format(),
35        };
36
37        RasterResources::new(
38            Msaa { samples: 1 },
39            device,
40            TilePipeline::new(
41                "raster_pipeline".into(),
42                *settings,
43                shader.describe_vertex(),
44                shader.describe_fragment(),
45                true,
46                false,
47                false,
48                false,
49                true,
50                true,
51            )
52            .describe_render_pipeline()
53            .initialize(device),
54        )
55    });
56}