maplibre/background/
render_commands.rs1use crate::{
2 background::resource_system::BackgroundRenderPipeline,
3 render::{
4 eventually::Eventually::{self, Initialized},
5 render_phase::{PhaseItem, RenderCommand, RenderCommandResult},
6 resource::TrackedRenderPass,
7 },
8 tcs::world::World,
9};
10
11pub struct SetBackgroundPipeline;
12impl<P: PhaseItem> RenderCommand<P> for SetBackgroundPipeline {
13 fn render<'w>(
14 world: &'w World,
15 _item: &P,
16 pass: &mut TrackedRenderPass<'w>,
17 ) -> RenderCommandResult {
18 let Some(Initialized(BackgroundRenderPipeline(pipeline))) = world
19 .resources
20 .get::<Eventually<BackgroundRenderPipeline>>()
21 else {
22 return RenderCommandResult::Failure;
23 };
24
25 pass.set_render_pipeline(pipeline);
26 RenderCommandResult::Success
27 }
28}
29
30pub struct DrawBackgroundQuad;
31impl<P: PhaseItem> RenderCommand<P> for DrawBackgroundQuad {
32 fn render<'w>(
33 world: &'w World,
34 item: &P,
35 pass: &mut TrackedRenderPass<'w>,
36 ) -> RenderCommandResult {
37 if let Some(buf) = world
38 .resources
39 .get::<crate::background::queue_system::BackgroundBuffers>()
40 {
41 pass.set_vertex_buffer(0, buf.metadata_buffer.slice(..));
42
43 pass.draw(0..6, 0..1);
45 return RenderCommandResult::Success;
46 }
47 RenderCommandResult::Failure
48 }
49}
50
51pub struct DrawBackground;
52impl<P: PhaseItem> RenderCommand<P> for DrawBackground {
53 fn render<'w>(
54 world: &'w World,
55 item: &P,
56 pass: &mut TrackedRenderPass<'w>,
57 ) -> RenderCommandResult {
58 let mut result = SetBackgroundPipeline::render(world, item, pass);
59 if let RenderCommandResult::Success = result {
60 result = DrawBackgroundQuad::render(world, item, pass);
61 }
62 result
63 }
64}