Skip to content

Commit 3cbfa5e

Browse files
committed
impl more nodes
1 parent 1ed359a commit 3cbfa5e

File tree

5 files changed

+41
-70
lines changed

5 files changed

+41
-70
lines changed

crates/bevy_core_pipeline/src/core_2d/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,8 @@ impl Plugin for Core2dPlugin {
6464
);
6565

6666
let pass_node_2d = MainPass2dNode::new(&mut render_app.world);
67-
let tonemapping = ViewNodeRunner::new(TonemappingNode::new(), &mut render_app.world);
68-
let upscaling = UpscalingNode::new(&mut render_app.world);
67+
let tonemapping = ViewNodeRunner::<TonemappingNode>::from_world(&mut render_app.world);
68+
let upscaling = ViewNodeRunner::<UpscalingNode>::from_world(&mut render_app.world);
6969
let mut graph = render_app.world.resource_mut::<RenderGraph>();
7070

7171
let mut draw_2d_graph = RenderGraph::default();

crates/bevy_core_pipeline/src/core_3d/mod.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,11 +86,11 @@ impl Plugin for Core3dPlugin {
8686
),
8787
);
8888

89-
let prepass_node = PrepassNode::new(&mut render_app.world);
89+
let prepass_node = ViewNodeRunner::<PrepassNode>::from_world(&mut render_app.world);
9090
let opaque_node_3d = MainOpaquePass3dNode::new(&mut render_app.world);
9191
let transparent_node_3d = MainTransparentPass3dNode::new(&mut render_app.world);
92-
let tonemapping = ViewNodeRunner::new(TonemappingNode::new(), &mut render_app.world);
93-
let upscaling = UpscalingNode::new(&mut render_app.world);
92+
let tonemapping = ViewNodeRunner::<TonemappingNode>::from_world(&mut render_app.world);
93+
let upscaling = ViewNodeRunner::<UpscalingNode>::from_world(&mut render_app.world);
9494

9595
let mut graph = render_app.world.resource_mut::<RenderGraph>();
9696

crates/bevy_core_pipeline/src/prepass/node.rs

Lines changed: 22 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
1-
use bevy_ecs::prelude::*;
2-
use bevy_ecs::query::QueryState;
1+
use bevy_ecs::query::ROQueryItem;
2+
use bevy_ecs::{prelude::*, system::lifetimeless::Read};
3+
use bevy_render::render_graph::ViewNode;
34
use bevy_render::{
45
camera::ExtractedCamera,
56
prelude::Color,
6-
render_graph::{Node, NodeRunError, RenderGraphContext},
7+
render_graph::{NodeRunError, RenderGraphContext},
78
render_phase::RenderPhase,
89
render_resource::{
910
LoadOp, Operations, RenderPassColorAttachment, RenderPassDepthStencilAttachment,
1011
RenderPassDescriptor,
1112
},
1213
renderer::RenderContext,
13-
view::{ExtractedView, ViewDepthTexture},
14+
view::ViewDepthTexture,
1415
};
1516
#[cfg(feature = "trace")]
1617
use bevy_utils::tracing::info_span;
@@ -20,48 +21,36 @@ use super::{AlphaMask3dPrepass, Opaque3dPrepass, ViewPrepassTextures};
2021
/// Render node used by the prepass.
2122
///
2223
/// By default, inserted before the main pass in the render graph.
23-
pub struct PrepassNode {
24-
main_view_query: QueryState<
25-
(
26-
&'static ExtractedCamera,
27-
&'static RenderPhase<Opaque3dPrepass>,
28-
&'static RenderPhase<AlphaMask3dPrepass>,
29-
&'static ViewDepthTexture,
30-
&'static ViewPrepassTextures,
31-
),
32-
With<ExtractedView>,
33-
>,
34-
}
35-
36-
impl PrepassNode {
37-
pub fn new(world: &mut World) -> Self {
38-
Self {
39-
main_view_query: QueryState::new(world),
40-
}
24+
pub struct PrepassNode;
25+
impl FromWorld for PrepassNode {
26+
fn from_world(_world: &mut World) -> Self {
27+
Self
4128
}
4229
}
4330

44-
impl Node for PrepassNode {
45-
fn update(&mut self, world: &mut World) {
46-
self.main_view_query.update_archetypes(world);
47-
}
31+
impl ViewNode for PrepassNode {
32+
type ViewWorldQuery = (
33+
Read<ExtractedCamera>,
34+
Read<RenderPhase<Opaque3dPrepass>>,
35+
Read<RenderPhase<AlphaMask3dPrepass>>,
36+
Read<ViewDepthTexture>,
37+
Read<ViewPrepassTextures>,
38+
);
4839

4940
fn run(
5041
&self,
5142
graph: &mut RenderGraphContext,
5243
render_context: &mut RenderContext,
53-
world: &World,
54-
) -> Result<(), NodeRunError> {
55-
let view_entity = graph.view_entity();
56-
let Ok((
44+
(
5745
camera,
5846
opaque_prepass_phase,
5947
alpha_mask_prepass_phase,
6048
view_depth_texture,
6149
view_prepass_textures,
62-
)) = self.main_view_query.get_manual(world, view_entity) else {
63-
return Ok(());
64-
};
50+
): ROQueryItem<Self::ViewWorldQuery>,
51+
world: &World,
52+
) -> Result<(), NodeRunError> {
53+
let view_entity = graph.view_entity();
6554

6655
let mut color_attachments = vec![];
6756
color_attachments.push(

crates/bevy_core_pipeline/src/tonemapping/node.rs

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,21 +24,15 @@ pub struct TonemappingNode {
2424
last_tonemapping: Mutex<Option<Tonemapping>>,
2525
}
2626

27-
impl TonemappingNode {
28-
pub fn new() -> Self {
27+
impl FromWorld for TonemappingNode {
28+
fn from_world(_world: &mut World) -> Self {
2929
Self {
3030
cached_bind_group: Mutex::new(None),
3131
last_tonemapping: Mutex::new(None),
3232
}
3333
}
3434
}
3535

36-
impl Default for TonemappingNode {
37-
fn default() -> Self {
38-
Self::new()
39-
}
40-
}
41-
4236
impl ViewNode for TonemappingNode {
4337
type ViewWorldQuery = (
4438
Read<ViewUniformOffset>,

crates/bevy_core_pipeline/src/upscaling/node.rs

Lines changed: 12 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,61 +1,49 @@
11
use crate::{blit::BlitPipeline, upscaling::ViewUpscalingPipeline};
2-
use bevy_ecs::prelude::*;
3-
use bevy_ecs::query::QueryState;
2+
use bevy_ecs::{prelude::*, query::ROQueryItem};
43
use bevy_render::{
54
camera::{CameraOutputMode, ExtractedCamera},
6-
render_graph::{Node, NodeRunError, RenderGraphContext},
5+
render_graph::{NodeRunError, RenderGraphContext, ViewNode},
76
render_resource::{
87
BindGroup, BindGroupDescriptor, BindGroupEntry, BindingResource, LoadOp, Operations,
98
PipelineCache, RenderPassColorAttachment, RenderPassDescriptor, SamplerDescriptor,
109
TextureViewId,
1110
},
1211
renderer::RenderContext,
13-
view::{ExtractedView, ViewTarget},
12+
view::ViewTarget,
1413
};
1514
use std::sync::Mutex;
1615

1716
pub struct UpscalingNode {
18-
query: QueryState<
19-
(
20-
&'static ViewTarget,
21-
&'static ViewUpscalingPipeline,
22-
Option<&'static ExtractedCamera>,
23-
),
24-
With<ExtractedView>,
25-
>,
2617
cached_texture_bind_group: Mutex<Option<(TextureViewId, BindGroup)>>,
2718
}
2819

29-
impl UpscalingNode {
30-
pub fn new(world: &mut World) -> Self {
20+
impl FromWorld for UpscalingNode {
21+
fn from_world(_world: &mut World) -> Self {
3122
Self {
32-
query: QueryState::new(world),
3323
cached_texture_bind_group: Mutex::new(None),
3424
}
3525
}
3626
}
3727

38-
impl Node for UpscalingNode {
39-
fn update(&mut self, world: &mut World) {
40-
self.query.update_archetypes(world);
41-
}
28+
impl ViewNode for UpscalingNode {
29+
type ViewWorldQuery = (
30+
&'static ViewTarget,
31+
&'static ViewUpscalingPipeline,
32+
Option<&'static ExtractedCamera>,
33+
);
4234

4335
fn run(
4436
&self,
4537
graph: &mut RenderGraphContext,
4638
render_context: &mut RenderContext,
39+
(target, upscaling_target, camera): ROQueryItem<Self::ViewWorldQuery>,
4740
world: &World,
4841
) -> Result<(), NodeRunError> {
4942
let view_entity = graph.view_entity();
5043

5144
let pipeline_cache = world.get_resource::<PipelineCache>().unwrap();
5245
let blit_pipeline = world.get_resource::<BlitPipeline>().unwrap();
5346

54-
let (target, upscaling_target, camera) = match self.query.get_manual(world, view_entity) {
55-
Ok(query) => query,
56-
Err(_) => return Ok(()),
57-
};
58-
5947
let color_attachment_load_op = if let Some(camera) = camera {
6048
match camera.output_mode {
6149
CameraOutputMode::Write {

0 commit comments

Comments
 (0)