maplibre/background/
resource_system.rs1use crate::{
2 context::MapContext,
3 render::{
4 eventually::Eventually,
5 resource::{RenderPipeline, TilePipeline},
6 shaders::{BackgroundShader, Shader},
7 },
8};
9
10pub fn resource_system(
11 MapContext {
12 world,
13 renderer:
14 crate::render::Renderer {
15 device,
16 resources: crate::render::RenderResources { surface, .. },
17 settings,
18 ..
19 },
20 ..
21 }: &mut MapContext,
22) -> crate::tcs::system::SystemResult {
23 let Some(background_pipeline) = world
24 .resources
25 .get_mut::<Eventually<BackgroundRenderPipeline>>()
26 else {
27 return Err(crate::tcs::system::SystemError::Dependencies);
28 };
29
30 background_pipeline.initialize(|| {
31 let shader = BackgroundShader {
32 format: surface.surface_format(),
33 };
34
35 let pipeline = TilePipeline::new(
36 "background_pipeline".into(),
37 *settings,
38 shader.describe_vertex(),
39 shader.describe_fragment(),
40 true, false, true, false, surface.is_multisampling_supported(settings.msaa), false, false, )
48 .describe_render_pipeline()
49 .initialize(device);
50
51 BackgroundRenderPipeline(pipeline)
52 });
53
54 Ok(())
55}
56
57pub struct BackgroundRenderPipeline(pub wgpu::RenderPipeline);