bevy_headless_render/
lib.rs1#![warn(missing_docs)]
2
3use bevy::{
6 prelude::*,
7 render::{
8 extract_component::ExtractComponentPlugin, graph::CameraDriverLabel,
9 render_asset::RenderAssetPlugin, render_graph::RenderGraph, Render, RenderApp, RenderSet,
10 },
11};
12use components::HeadlessRenderDestination;
13use nodes::{HeadlessRenderCopyLabel, HeadlessRenderCopyNode};
14use render_assets::{HeadlessRenderSource, GpuHeadlessRenderSource};
15
16pub mod components;
18pub mod render_assets;
20
21mod nodes;
22mod systems;
23
24pub struct HeadlessRenderPlugin;
26
27impl Plugin for HeadlessRenderPlugin {
28 fn build(&self, app: &mut App) {
29 app.register_type::<HeadlessRenderSource>()
30 .init_asset::<HeadlessRenderSource>()
31 .register_asset_reflect::<HeadlessRenderSource>()
32 .add_plugins((
33 RenderAssetPlugin::<GpuHeadlessRenderSource>::default(),
34 ExtractComponentPlugin::<HeadlessRenderDestination>::default(),
35 ));
36
37 let render_app = app.sub_app_mut(RenderApp);
38 render_app.add_systems(
39 Render,
40 systems::copy_buffers
41 .after(RenderSet::Render)
42 .before(RenderSet::Cleanup),
43 );
44 let mut graph = render_app.world_mut().resource_mut::<RenderGraph>();
45 graph.add_node(HeadlessRenderCopyLabel, HeadlessRenderCopyNode);
46 graph.add_node_edge(CameraDriverLabel, HeadlessRenderCopyLabel);
47 }
48}