diff --git a/lyra-game/src/render/graph/mod.rs b/lyra-game/src/render/graph/mod.rs index 0e754b9..403bd53 100644 --- a/lyra-game/src/render/graph/mod.rs +++ b/lyra-game/src/render/graph/mod.rs @@ -242,9 +242,9 @@ impl RenderGraph { .as_compute_pipeline_descriptor() .expect("got render pipeline descriptor in a compute pass"), )), - NodeType::Presenter | NodeType::Node => { + NodeType::Presenter | NodeType::Node | NodeType::Graph => { panic!("Present or Node RenderGraph passes should not have a pipeline descriptor!"); - } + }, }; drop(desc); @@ -465,4 +465,24 @@ impl RenderGraph { pass.set_bind_group(*index, bg, &[]); } } +} + +impl Node for RenderGraph { + fn desc<'a, 'b>(&'a mut self, graph: &'b mut RenderGraph) -> NodeDesc { + // TODO: how would bind groups be shared between sub-graphs? + NodeDesc::new(NodeType::Graph, None, vec![]) + } + + fn prepare(&mut self, world: &mut World, _: &mut RenderGraphContext) { + self.prepare(world); + } + + fn execute( + &mut self, + _: &mut RenderGraph, + _: &NodeDesc, + _: &mut RenderGraphContext, + ) { + self.render(); + } } \ No newline at end of file diff --git a/lyra-game/src/render/graph/node.rs b/lyra-game/src/render/graph/node.rs index 806594e..5e9823f 100644 --- a/lyra-game/src/render/graph/node.rs +++ b/lyra-game/src/render/graph/node.rs @@ -18,6 +18,8 @@ pub enum NodeType { Render, /// A node that presents render results to a render target. Presenter, + /// A node that represents a sub-graph. + Graph, } impl NodeType { @@ -28,6 +30,7 @@ impl NodeType { NodeType::Compute => true, NodeType::Render => true, NodeType::Presenter => false, + NodeType::Graph => false, } } }