maplibre/debug/
debug_pass.rs1use std::ops::Deref;
2
3use wgpu::StoreOp;
4
5use crate::{
6 debug::TileDebugItem,
7 render::{
8 eventually::Eventually::Initialized,
9 graph::{Node, NodeRunError, RenderContext, RenderGraphContext, SlotInfo},
10 render_phase::RenderPhase,
11 resource::TrackedRenderPass,
12 RenderResources,
13 },
14 tcs::world::World,
15};
16
17pub struct DebugPassNode {}
19
20impl DebugPassNode {
21 pub fn new() -> Self {
22 Self {}
23 }
24}
25
26impl Node for DebugPassNode {
27 fn input(&self) -> Vec<SlotInfo> {
28 vec![]
29 }
30
31 fn update(&mut self, _state: &mut RenderResources) {}
32
33 fn run(
34 &self,
35 _graph: &mut RenderGraphContext,
36 render_context: &mut RenderContext,
37 resources: &RenderResources,
38 world: &World,
39 ) -> Result<(), NodeRunError> {
40 let Initialized(render_target) = &resources.render_target else {
41 return Ok(());
42 };
43
44 let color_attachment = wgpu::RenderPassColorAttachment {
45 view: render_target.deref(),
46 ops: wgpu::Operations {
47 load: wgpu::LoadOp::Load,
49 store: StoreOp::Store,
50 },
51 resolve_target: None,
52 };
53
54 let render_pass =
55 render_context
56 .command_encoder
57 .begin_render_pass(&wgpu::RenderPassDescriptor {
58 label: Some("debug_pass"),
59 color_attachments: &[Some(color_attachment)],
60 depth_stencil_attachment: None,
61 timestamp_writes: None,
62 occlusion_query_set: None,
63 });
64
65 let mut tracked_pass = TrackedRenderPass::new(render_pass);
66
67 if let Some(debug_items) = world.resources.get::<RenderPhase<TileDebugItem>>() {
68 log::trace!(
69 "RenderPhase<TileDebugItem>::size() = {}",
70 debug_items.size()
71 );
72 for item in debug_items {
73 item.draw_function.draw(&mut tracked_pass, world, item);
74 }
75 }
76
77 Ok(())
78 }
79}