Skip to main content

render_graph_diagram/
render-graph-diagram.rs

1/// render-graph-diagram: visual scene exercising all render phases.
2///
3/// Loads render-graph-diagram.mms and places it in a navigable scene.
4/// The MMS file documents the future PostProcessing / Bloom / Bokeh API
5/// in comments — see render-graph-diagram.mms for the annotated source.
6///
7/// Run from the repo root:
8///   cargo run --example render-graph-diagram
9///
10/// Controls: WASD/RF to move, right-mouse-drag to look (desktop).
11///
12/// See also:
13///   docs/spec/render-graph-post-processing.md
14///   docs/spec/render-graph-pipeline.svg
15///   docs/spec/render-graph-pipeline-post-processing.svg
16use mittens_engine::{engine, engine::ecs::SignalEmitter, scripting, utils};
17
18#[path = "example_util/mod.rs"]
19mod example_util;
20
21fn main() {
22    mittens_engine::example_support::ensure_model_assets();
23    utils::logger::init();
24
25    let output = scripting::MeowMeowRunner::eval_file("examples/render-graph-diagram.mms");
26
27    for error in &output.errors {
28        eprintln!("[mms] error: {error}");
29    }
30    if !output.errors.is_empty() {
31        eprintln!(
32            "[mms] {} error(s) — scene may be incomplete",
33            output.errors.len()
34        );
35    }
36
37    println!("[mms] {} intent(s) emitted:", output.intents.len());
38    for intent in &output.intents {
39        if let engine::ecs::IntentValue::SpawnComponentTree { root, .. } = intent {
40            println!("  spawn {}", root.component_type);
41        }
42    }
43
44    let world = engine::ecs::World::default();
45    let mut universe = engine::Universe::new(world);
46
47    // Push all MMS-emitted intents into the engine.
48    let scope = engine::ecs::ComponentId::default();
49    for intent in output.intents {
50        universe.command_queue.push_intent_now(scope, intent);
51    }
52
53    // Camera: pulled back and slightly elevated so the full scene is in view.
54    // The emissive orbs above the pedestals are the focal point.
55    example_util::spawn_mms_demo_rig(&mut universe, [0.0, 2.2, 7.0]);
56
57    universe.systems.process_commands(
58        &mut universe.world,
59        &mut universe.visuals,
60        &mut universe.render_assets,
61        &mut universe.command_queue,
62    );
63
64    engine::Windowing::run_app(universe).expect("Windowing failed");
65}