bevy_capture_media/
lib.rs1#![feature(doc_auto_cfg)]
2
3#[allow(clippy::type_complexity)]
4pub mod data;
5pub mod formats;
6#[cfg(any(feature = "gif", feature = "png"))]
7mod image_utils;
8mod management;
9mod render;
10#[cfg(target_arch = "wasm32")]
11mod web_utils;
12
13mod plugin {
14 use bevy_app::{App, CoreStage, Plugin};
15 use bevy_render::{RenderApp, RenderStage};
16
17 use super::*;
18
19 pub struct BevyCapturePlugin;
20 impl Plugin for BevyCapturePlugin {
21 fn build(&self, app: &mut App) {
22 let tracking_tracker = data::ActiveRecorders::default();
23 let data_smuggler = data::SharedDataSmuggler::default();
24
25 app.add_event::<data::StartTrackingCamera>()
26 .add_event::<data::StopTrackingCamera>()
27 .insert_resource(tracking_tracker)
28 .insert_resource(data_smuggler.clone())
29 .add_system_to_stage(CoreStage::First, management::clean_cameras)
30 .add_system_to_stage(CoreStage::First, management::move_camera_buffers)
31 .add_system_to_stage(CoreStage::PostUpdate, management::sync_tracking_cameras)
32 .add_system_to_stage(
33 CoreStage::PostUpdate,
34 management::start_tracking_orthographic_camera,
35 );
36
37 #[cfg(feature = "gif")]
38 {
39 app.add_event::<formats::gif::CaptureGifRecording>()
40 .add_system_to_stage(
41 CoreStage::PostUpdate,
42 formats::gif::capture_gif_recording,
43 );
44
45 #[cfg(not(target_arch = "wasm32"))]
46 app.add_system_to_stage(
47 CoreStage::Last,
48 management::clean_unmonitored_tasks::<formats::gif::SaveGifRecording>,
49 );
50 }
51 #[cfg(feature = "png")]
52 {
53 app.add_event::<formats::png::SavePngFile>()
54 .add_system_to_stage(CoreStage::PostUpdate, formats::png::save_single_frame);
55
56 #[cfg(not(target_arch = "wasm32"))]
57 app.add_system_to_stage(
58 CoreStage::Last,
59 management::clean_unmonitored_tasks::<formats::png::SaveFrameTask>,
60 );
61 }
62
63 let render_app = app.get_sub_app_mut(RenderApp)
64 .expect("bevy_capture_media will not work without the render app. Either enable this sub app, or disable bevy_capture_media");
65
66 render_app
67 .insert_resource(data_smuggler)
68 .add_system_to_stage(RenderStage::Render, render::smuggle_frame);
69 }
70 }
71}
72
73pub use data::MediaCapture;
74pub use plugin::BevyCapturePlugin;