bevy_render/camera/
mod.rs

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