maplibre/raster/
resource_system.rs1use 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 tcs::system::{SystemError, SystemResult},
14};
15
16pub fn resource_system(
17 MapContext {
18 world,
19 renderer:
20 Renderer {
21 device,
22 resources: RenderResources { surface, .. },
23 settings,
24 ..
25 },
26 ..
27 }: &mut MapContext,
28) -> SystemResult {
29 let Some(raster_resources) = world
30 .resources
31 .query_mut::<&mut Eventually<RasterResources>>()
32 else {
33 return Err(SystemError::Dependencies);
34 };
35
36 raster_resources.initialize(|| {
37 let shader = shaders::RasterShader {
38 format: surface.surface_format(),
39 };
40
41 RasterResources::new(
42 Msaa { samples: 1 },
43 device,
44 TilePipeline::new(
45 "raster_pipeline".into(),
46 *settings,
47 shader.describe_vertex(),
48 shader.describe_fragment(),
49 true,
50 false,
51 false,
52 false,
53 surface.is_multisampling_supported(settings.msaa),
54 true,
55 false,
56 )
57 .describe_render_pipeline()
58 .initialize(device),
59 )
60 });
61 Ok(())
62}