Skip to main content

bevy_core_pipeline/
lib.rs

1#![expect(missing_docs, reason = "Not all docs are written yet, see #3492.")]
2#![forbid(unsafe_code)]
3#![cfg_attr(docsrs, feature(doc_cfg))]
4#![doc(
5    html_logo_url = "https://bevy.org/assets/icon.png",
6    html_favicon_url = "https://bevy.org/assets/icon.png"
7)]
8
9pub mod blit;
10pub mod core_2d;
11pub mod core_3d;
12pub mod deferred;
13pub mod fullscreen_material;
14pub mod mip_generation;
15pub mod oit;
16pub mod prepass;
17pub mod schedule;
18pub mod skybox;
19pub mod tonemapping;
20pub mod upscaling;
21
22use bevy_ecs::schedule::IntoScheduleConfigs;
23pub use bevy_light::Skybox;
24pub use fullscreen_vertex_shader::FullscreenShader;
25pub use schedule::{Core2d, Core2dSystems, Core3d, Core3dSystems};
26
27mod fullscreen_vertex_shader;
28
29use crate::schedule::{
30    camera_driver, handle_uncovered_swap_chains, submit_pending_command_buffers,
31};
32use crate::{
33    blit::BlitPlugin, core_2d::Core2dPlugin, core_3d::Core3dPlugin,
34    deferred::copy_lighting_id::CopyDeferredLightingIdPlugin, mip_generation::MipGenerationPlugin,
35    prepass::BackgroundMotionVectorsPlugin, tonemapping::TonemappingPlugin,
36    upscaling::UpscalingPlugin,
37};
38use bevy_app::{App, Plugin};
39use bevy_asset::embedded_asset;
40use bevy_render::renderer::{RenderGraph, RenderGraphSystems};
41use bevy_render::RenderApp;
42use oit::OrderIndependentTransparencyPlugin;
43
44#[derive(Default)]
45pub struct CorePipelinePlugin;
46
47impl Plugin for CorePipelinePlugin {
48    fn build(&self, app: &mut App) {
49        embedded_asset!(app, "fullscreen_vertex_shader/fullscreen.wgsl");
50
51        app.add_plugins((Core2dPlugin, Core3dPlugin, CopyDeferredLightingIdPlugin))
52            .add_plugins((
53                BlitPlugin,
54                TonemappingPlugin,
55                UpscalingPlugin,
56                OrderIndependentTransparencyPlugin,
57                MipGenerationPlugin,
58                BackgroundMotionVectorsPlugin,
59            ));
60        let Some(render_app) = app.get_sub_app_mut(RenderApp) else {
61            return;
62        };
63        render_app.init_resource::<FullscreenShader>().add_systems(
64            RenderGraph,
65            (
66                camera_driver.in_set(RenderGraphSystems::Render),
67                (submit_pending_command_buffers, handle_uncovered_swap_chains)
68                    .chain()
69                    .in_set(RenderGraphSystems::Submit),
70            ),
71        );
72    }
73}