mirror of
https://github.com/bevyengine/bevy
synced 2025-02-16 22:18:33 +00:00
Make Core Pipeline Graph Nodes Public (#6605)
# Objective Make core pipeline graphic nodes, including `BloomNode`, `FxaaNode`, `TonemappingNode` and `UpscalingNode` public. This will allow users to construct their own render graphs with these build-in nodes. ## Solution Make them public. Also put node names into bevy's core namespace (`core_2d::graph::node`, `core_3d::graph::node`) which makes them consistent.
This commit is contained in:
parent
cb8fe5b7fd
commit
e0c3c6d166
6 changed files with 43 additions and 52 deletions
|
@ -1,4 +1,4 @@
|
||||||
use crate::fullscreen_vertex_shader::fullscreen_shader_vertex_state;
|
use crate::{core_2d, core_3d, fullscreen_vertex_shader::fullscreen_shader_vertex_state};
|
||||||
use bevy_app::{App, Plugin};
|
use bevy_app::{App, Plugin};
|
||||||
use bevy_asset::{load_internal_asset, HandleUntyped};
|
use bevy_asset::{load_internal_asset, HandleUntyped};
|
||||||
use bevy_ecs::{
|
use bevy_ecs::{
|
||||||
|
@ -25,19 +25,6 @@ use bevy_utils::tracing::info_span;
|
||||||
use bevy_utils::HashMap;
|
use bevy_utils::HashMap;
|
||||||
use std::num::NonZeroU32;
|
use std::num::NonZeroU32;
|
||||||
|
|
||||||
pub mod draw_3d_graph {
|
|
||||||
pub mod node {
|
|
||||||
/// Label for the bloom render node.
|
|
||||||
pub const BLOOM: &str = "bloom_3d";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
pub mod draw_2d_graph {
|
|
||||||
pub mod node {
|
|
||||||
/// Label for the bloom render node.
|
|
||||||
pub const BLOOM: &str = "bloom_2d";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const BLOOM_SHADER_HANDLE: HandleUntyped =
|
const BLOOM_SHADER_HANDLE: HandleUntyped =
|
||||||
HandleUntyped::weak_from_u64(Shader::TYPE_UUID, 929599476923908);
|
HandleUntyped::weak_from_u64(Shader::TYPE_UUID, 929599476923908);
|
||||||
|
|
||||||
|
@ -68,12 +55,12 @@ impl Plugin for BloomPlugin {
|
||||||
let draw_3d_graph = graph
|
let draw_3d_graph = graph
|
||||||
.get_sub_graph_mut(crate::core_3d::graph::NAME)
|
.get_sub_graph_mut(crate::core_3d::graph::NAME)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
draw_3d_graph.add_node(draw_3d_graph::node::BLOOM, bloom_node);
|
draw_3d_graph.add_node(core_3d::graph::node::BLOOM, bloom_node);
|
||||||
draw_3d_graph
|
draw_3d_graph
|
||||||
.add_slot_edge(
|
.add_slot_edge(
|
||||||
draw_3d_graph.input_node().unwrap().id,
|
draw_3d_graph.input_node().unwrap().id,
|
||||||
crate::core_3d::graph::input::VIEW_ENTITY,
|
crate::core_3d::graph::input::VIEW_ENTITY,
|
||||||
draw_3d_graph::node::BLOOM,
|
core_3d::graph::node::BLOOM,
|
||||||
BloomNode::IN_VIEW,
|
BloomNode::IN_VIEW,
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
@ -81,12 +68,12 @@ impl Plugin for BloomPlugin {
|
||||||
draw_3d_graph
|
draw_3d_graph
|
||||||
.add_node_edge(
|
.add_node_edge(
|
||||||
crate::core_3d::graph::node::MAIN_PASS,
|
crate::core_3d::graph::node::MAIN_PASS,
|
||||||
draw_3d_graph::node::BLOOM,
|
core_3d::graph::node::BLOOM,
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
draw_3d_graph
|
draw_3d_graph
|
||||||
.add_node_edge(
|
.add_node_edge(
|
||||||
draw_3d_graph::node::BLOOM,
|
core_3d::graph::node::BLOOM,
|
||||||
crate::core_3d::graph::node::TONEMAPPING,
|
crate::core_3d::graph::node::TONEMAPPING,
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
@ -98,12 +85,12 @@ impl Plugin for BloomPlugin {
|
||||||
let draw_2d_graph = graph
|
let draw_2d_graph = graph
|
||||||
.get_sub_graph_mut(crate::core_2d::graph::NAME)
|
.get_sub_graph_mut(crate::core_2d::graph::NAME)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
draw_2d_graph.add_node(draw_2d_graph::node::BLOOM, bloom_node);
|
draw_2d_graph.add_node(core_2d::graph::node::BLOOM, bloom_node);
|
||||||
draw_2d_graph
|
draw_2d_graph
|
||||||
.add_slot_edge(
|
.add_slot_edge(
|
||||||
draw_2d_graph.input_node().unwrap().id,
|
draw_2d_graph.input_node().unwrap().id,
|
||||||
crate::core_2d::graph::input::VIEW_ENTITY,
|
crate::core_2d::graph::input::VIEW_ENTITY,
|
||||||
draw_2d_graph::node::BLOOM,
|
core_2d::graph::node::BLOOM,
|
||||||
BloomNode::IN_VIEW,
|
BloomNode::IN_VIEW,
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
@ -111,12 +98,12 @@ impl Plugin for BloomPlugin {
|
||||||
draw_2d_graph
|
draw_2d_graph
|
||||||
.add_node_edge(
|
.add_node_edge(
|
||||||
crate::core_2d::graph::node::MAIN_PASS,
|
crate::core_2d::graph::node::MAIN_PASS,
|
||||||
draw_2d_graph::node::BLOOM,
|
core_2d::graph::node::BLOOM,
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
draw_2d_graph
|
draw_2d_graph
|
||||||
.add_node_edge(
|
.add_node_edge(
|
||||||
draw_2d_graph::node::BLOOM,
|
core_2d::graph::node::BLOOM,
|
||||||
crate::core_2d::graph::node::TONEMAPPING,
|
crate::core_2d::graph::node::TONEMAPPING,
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
@ -164,7 +151,7 @@ impl Default for BloomSettings {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct BloomNode {
|
pub struct BloomNode {
|
||||||
view_query: QueryState<(
|
view_query: QueryState<(
|
||||||
&'static ExtractedCamera,
|
&'static ExtractedCamera,
|
||||||
&'static ViewTarget,
|
&'static ViewTarget,
|
||||||
|
@ -175,9 +162,9 @@ struct BloomNode {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl BloomNode {
|
impl BloomNode {
|
||||||
const IN_VIEW: &'static str = "view";
|
pub const IN_VIEW: &'static str = "view";
|
||||||
|
|
||||||
fn new(world: &mut World) -> Self {
|
pub fn new(world: &mut World) -> Self {
|
||||||
Self {
|
Self {
|
||||||
view_query: QueryState::new(world),
|
view_query: QueryState::new(world),
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,9 @@ pub mod graph {
|
||||||
}
|
}
|
||||||
pub mod node {
|
pub mod node {
|
||||||
pub const MAIN_PASS: &str = "main_pass";
|
pub const MAIN_PASS: &str = "main_pass";
|
||||||
|
pub const BLOOM: &str = "bloom";
|
||||||
pub const TONEMAPPING: &str = "tonemapping";
|
pub const TONEMAPPING: &str = "tonemapping";
|
||||||
|
pub const FXAA: &str = "fxaa";
|
||||||
pub const UPSCALING: &str = "upscaling";
|
pub const UPSCALING: &str = "upscaling";
|
||||||
pub const END_MAIN_PASS_POST_PROCESSING: &str = "end_main_pass_post_processing";
|
pub const END_MAIN_PASS_POST_PROCESSING: &str = "end_main_pass_post_processing";
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,9 @@ pub mod graph {
|
||||||
}
|
}
|
||||||
pub mod node {
|
pub mod node {
|
||||||
pub const MAIN_PASS: &str = "main_pass";
|
pub const MAIN_PASS: &str = "main_pass";
|
||||||
|
pub const BLOOM: &str = "bloom";
|
||||||
pub const TONEMAPPING: &str = "tonemapping";
|
pub const TONEMAPPING: &str = "tonemapping";
|
||||||
|
pub const FXAA: &str = "fxaa";
|
||||||
pub const UPSCALING: &str = "upscaling";
|
pub const UPSCALING: &str = "upscaling";
|
||||||
pub const END_MAIN_PASS_POST_PROCESSING: &str = "end_main_pass_post_processing";
|
pub const END_MAIN_PASS_POST_PROCESSING: &str = "end_main_pass_post_processing";
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,4 @@
|
||||||
mod node;
|
use crate::{core_2d, core_3d, fullscreen_vertex_shader::fullscreen_shader_vertex_state};
|
||||||
|
|
||||||
use crate::{
|
|
||||||
core_2d, core_3d, fullscreen_vertex_shader::fullscreen_shader_vertex_state,
|
|
||||||
fxaa::node::FxaaNode,
|
|
||||||
};
|
|
||||||
use bevy_app::prelude::*;
|
use bevy_app::prelude::*;
|
||||||
use bevy_asset::{load_internal_asset, HandleUntyped};
|
use bevy_asset::{load_internal_asset, HandleUntyped};
|
||||||
use bevy_derive::Deref;
|
use bevy_derive::Deref;
|
||||||
|
@ -20,6 +15,10 @@ use bevy_render::{
|
||||||
RenderApp, RenderStage,
|
RenderApp, RenderStage,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
mod node;
|
||||||
|
|
||||||
|
pub use node::FxaaNode;
|
||||||
|
|
||||||
#[derive(Eq, PartialEq, Hash, Clone, Copy)]
|
#[derive(Eq, PartialEq, Hash, Clone, Copy)]
|
||||||
pub enum Sensitivity {
|
pub enum Sensitivity {
|
||||||
Low,
|
Low,
|
||||||
|
@ -79,9 +78,6 @@ impl ExtractComponent for Fxaa {
|
||||||
const FXAA_SHADER_HANDLE: HandleUntyped =
|
const FXAA_SHADER_HANDLE: HandleUntyped =
|
||||||
HandleUntyped::weak_from_u64(Shader::TYPE_UUID, 4182761465141723543);
|
HandleUntyped::weak_from_u64(Shader::TYPE_UUID, 4182761465141723543);
|
||||||
|
|
||||||
pub const FXAA_NODE_3D: &str = "fxaa_node_3d";
|
|
||||||
pub const FXAA_NODE_2D: &str = "fxaa_node_2d";
|
|
||||||
|
|
||||||
/// Adds support for Fast Approximate Anti-Aliasing (FXAA)
|
/// Adds support for Fast Approximate Anti-Aliasing (FXAA)
|
||||||
pub struct FxaaPlugin;
|
pub struct FxaaPlugin;
|
||||||
impl Plugin for FxaaPlugin {
|
impl Plugin for FxaaPlugin {
|
||||||
|
@ -104,23 +100,26 @@ impl Plugin for FxaaPlugin {
|
||||||
let mut binding = render_app.world.resource_mut::<RenderGraph>();
|
let mut binding = render_app.world.resource_mut::<RenderGraph>();
|
||||||
let graph = binding.get_sub_graph_mut(core_3d::graph::NAME).unwrap();
|
let graph = binding.get_sub_graph_mut(core_3d::graph::NAME).unwrap();
|
||||||
|
|
||||||
graph.add_node(FXAA_NODE_3D, fxaa_node);
|
graph.add_node(core_3d::graph::node::FXAA, fxaa_node);
|
||||||
|
|
||||||
graph
|
graph
|
||||||
.add_slot_edge(
|
.add_slot_edge(
|
||||||
graph.input_node().unwrap().id,
|
graph.input_node().unwrap().id,
|
||||||
core_3d::graph::input::VIEW_ENTITY,
|
core_3d::graph::input::VIEW_ENTITY,
|
||||||
FXAA_NODE_3D,
|
core_3d::graph::node::FXAA,
|
||||||
FxaaNode::IN_VIEW,
|
FxaaNode::IN_VIEW,
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
graph
|
graph
|
||||||
.add_node_edge(core_3d::graph::node::TONEMAPPING, FXAA_NODE_3D)
|
.add_node_edge(
|
||||||
|
core_3d::graph::node::TONEMAPPING,
|
||||||
|
core_3d::graph::node::FXAA,
|
||||||
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
graph
|
graph
|
||||||
.add_node_edge(
|
.add_node_edge(
|
||||||
FXAA_NODE_3D,
|
core_3d::graph::node::FXAA,
|
||||||
core_3d::graph::node::END_MAIN_PASS_POST_PROCESSING,
|
core_3d::graph::node::END_MAIN_PASS_POST_PROCESSING,
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
@ -130,23 +129,26 @@ impl Plugin for FxaaPlugin {
|
||||||
let mut binding = render_app.world.resource_mut::<RenderGraph>();
|
let mut binding = render_app.world.resource_mut::<RenderGraph>();
|
||||||
let graph = binding.get_sub_graph_mut(core_2d::graph::NAME).unwrap();
|
let graph = binding.get_sub_graph_mut(core_2d::graph::NAME).unwrap();
|
||||||
|
|
||||||
graph.add_node(FXAA_NODE_2D, fxaa_node);
|
graph.add_node(core_2d::graph::node::FXAA, fxaa_node);
|
||||||
|
|
||||||
graph
|
graph
|
||||||
.add_slot_edge(
|
.add_slot_edge(
|
||||||
graph.input_node().unwrap().id,
|
graph.input_node().unwrap().id,
|
||||||
core_2d::graph::input::VIEW_ENTITY,
|
core_2d::graph::input::VIEW_ENTITY,
|
||||||
FXAA_NODE_2D,
|
core_2d::graph::node::FXAA,
|
||||||
FxaaNode::IN_VIEW,
|
FxaaNode::IN_VIEW,
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
graph
|
graph
|
||||||
.add_node_edge(core_2d::graph::node::TONEMAPPING, FXAA_NODE_2D)
|
.add_node_edge(
|
||||||
|
core_2d::graph::node::TONEMAPPING,
|
||||||
|
core_2d::graph::node::FXAA,
|
||||||
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
graph
|
graph
|
||||||
.add_node_edge(
|
.add_node_edge(
|
||||||
FXAA_NODE_2D,
|
core_2d::graph::node::FXAA,
|
||||||
core_2d::graph::node::END_MAIN_PASS_POST_PROCESSING,
|
core_2d::graph::node::END_MAIN_PASS_POST_PROCESSING,
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
|
@ -1,7 +1,3 @@
|
||||||
mod node;
|
|
||||||
|
|
||||||
pub use node::TonemappingNode;
|
|
||||||
|
|
||||||
use crate::fullscreen_vertex_shader::fullscreen_shader_vertex_state;
|
use crate::fullscreen_vertex_shader::fullscreen_shader_vertex_state;
|
||||||
use bevy_app::prelude::*;
|
use bevy_app::prelude::*;
|
||||||
use bevy_asset::{load_internal_asset, HandleUntyped};
|
use bevy_asset::{load_internal_asset, HandleUntyped};
|
||||||
|
@ -14,6 +10,10 @@ use bevy_render::renderer::RenderDevice;
|
||||||
use bevy_render::view::ViewTarget;
|
use bevy_render::view::ViewTarget;
|
||||||
use bevy_render::{render_resource::*, RenderApp, RenderStage};
|
use bevy_render::{render_resource::*, RenderApp, RenderStage};
|
||||||
|
|
||||||
|
mod node;
|
||||||
|
|
||||||
|
pub use node::TonemappingNode;
|
||||||
|
|
||||||
const TONEMAPPING_SHADER_HANDLE: HandleUntyped =
|
const TONEMAPPING_SHADER_HANDLE: HandleUntyped =
|
||||||
HandleUntyped::weak_from_u64(Shader::TYPE_UUID, 17015368199668024512);
|
HandleUntyped::weak_from_u64(Shader::TYPE_UUID, 17015368199668024512);
|
||||||
|
|
||||||
|
|
|
@ -1,17 +1,15 @@
|
||||||
mod node;
|
use crate::fullscreen_vertex_shader::fullscreen_shader_vertex_state;
|
||||||
|
|
||||||
pub use node::UpscalingNode;
|
|
||||||
|
|
||||||
use bevy_app::prelude::*;
|
use bevy_app::prelude::*;
|
||||||
use bevy_asset::{load_internal_asset, HandleUntyped};
|
use bevy_asset::{load_internal_asset, HandleUntyped};
|
||||||
use bevy_ecs::prelude::*;
|
use bevy_ecs::prelude::*;
|
||||||
|
use bevy_reflect::TypeUuid;
|
||||||
use bevy_render::renderer::RenderDevice;
|
use bevy_render::renderer::RenderDevice;
|
||||||
use bevy_render::view::ViewTarget;
|
use bevy_render::view::ViewTarget;
|
||||||
use bevy_render::{render_resource::*, RenderApp, RenderStage};
|
use bevy_render::{render_resource::*, RenderApp, RenderStage};
|
||||||
|
|
||||||
use bevy_reflect::TypeUuid;
|
mod node;
|
||||||
|
|
||||||
use crate::fullscreen_vertex_shader::fullscreen_shader_vertex_state;
|
pub use node::UpscalingNode;
|
||||||
|
|
||||||
const UPSCALING_SHADER_HANDLE: HandleUntyped =
|
const UPSCALING_SHADER_HANDLE: HandleUntyped =
|
||||||
HandleUntyped::weak_from_u64(Shader::TYPE_UUID, 14589267395627146578);
|
HandleUntyped::weak_from_u64(Shader::TYPE_UUID, 14589267395627146578);
|
||||||
|
|
Loading…
Add table
Reference in a new issue