bevy_render/camera/
mod.rs

1mod camera;
2mod camera_driver_node;
3mod clear_color;
4mod manual_texture_view;
5mod projection;
6
7pub use camera::*;
8pub use camera_driver_node::*;
9pub use clear_color::*;
10pub use manual_texture_view::*;
11pub use projection::*;
12
13use crate::{
14    extract_component::ExtractComponentPlugin, extract_resource::ExtractResourcePlugin,
15    render_graph::RenderGraph, ExtractSchedule, Render, RenderApp, RenderSet,
16};
17use bevy_app::{App, Plugin};
18use bevy_ecs::schedule::IntoScheduleConfigs;
19
20#[derive(Default)]
21pub struct CameraPlugin;
22
23impl Plugin for CameraPlugin {
24    fn build(&self, app: &mut App) {
25        app.register_type::<Camera>()
26            .register_type::<ClearColor>()
27            .register_type::<CameraRenderGraph>()
28            .register_type::<CameraMainTextureUsages>()
29            .register_type::<Exposure>()
30            .register_type::<TemporalJitter>()
31            .register_type::<MipBias>()
32            .init_resource::<ManualTextureViews>()
33            .init_resource::<ClearColor>()
34            .add_plugins((
35                CameraProjectionPlugin,
36                ExtractResourcePlugin::<ManualTextureViews>::default(),
37                ExtractResourcePlugin::<ClearColor>::default(),
38                ExtractComponentPlugin::<CameraMainTextureUsages>::default(),
39            ));
40
41        if let Some(render_app) = app.get_sub_app_mut(RenderApp) {
42            render_app
43                .init_resource::<SortedCameras>()
44                .add_systems(ExtractSchedule, extract_cameras)
45                .add_systems(Render, sort_cameras.in_set(RenderSet::ManageViews));
46            let camera_driver_node = CameraDriverNode::new(render_app.world_mut());
47            let mut render_graph = render_app.world_mut().resource_mut::<RenderGraph>();
48            render_graph.add_node(crate::graph::CameraDriverLabel, camera_driver_node);
49        }
50    }
51}