Skip to content

Commit

Permalink
merged RenderCommand and Draw
Browse files Browse the repository at this point in the history
  • Loading branch information
kurtkuehnert committed Feb 6, 2023
1 parent 4fd092f commit bc66cac
Show file tree
Hide file tree
Showing 17 changed files with 383 additions and 419 deletions.
10 changes: 5 additions & 5 deletions crates/bevy_core_pipeline/src/core_2d/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ use bevy_render::{
render_graph::{EmptyNode, RenderGraph, SlotInfo, SlotType},
render_phase::{
batch_phase_system, sort_phase_system, BatchedPhaseItem, CachedRenderPipelinePhaseItem,
DrawFunctionId, DrawFunctions, PhaseItem, RenderPhase,
PhaseItem, RenderCommandId, RenderCommands, RenderPhase,
},
render_resource::CachedRenderPipelineId,
Extract, ExtractSchedule, RenderApp, RenderSet,
Expand All @@ -50,7 +50,7 @@ impl Plugin for Core2dPlugin {
};

render_app
.init_resource::<DrawFunctions<Transparent2d>>()
.init_resource::<RenderCommands<Transparent2d>>()
.add_system_to_schedule(ExtractSchedule, extract_core_2d_camera_phases)
.add_system(sort_phase_system::<Transparent2d>.in_set(RenderSet::PhaseSort))
.add_system(
Expand Down Expand Up @@ -108,7 +108,7 @@ pub struct Transparent2d {
pub sort_key: FloatOrd,
pub entity: Entity,
pub pipeline: CachedRenderPipelineId,
pub draw_function: DrawFunctionId,
pub render_command: RenderCommandId,
/// Range in the vertex buffer of this item
pub batch_range: Option<Range<u32>>,
}
Expand All @@ -127,8 +127,8 @@ impl PhaseItem for Transparent2d {
}

#[inline]
fn draw_function(&self) -> DrawFunctionId {
self.draw_function
fn render_command_id(&self) -> RenderCommandId {
self.render_command
}

#[inline]
Expand Down
28 changes: 14 additions & 14 deletions crates/bevy_core_pipeline/src/core_3d/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@ use bevy_render::{
prelude::Msaa,
render_graph::{EmptyNode, RenderGraph, SlotInfo, SlotType},
render_phase::{
sort_phase_system, CachedRenderPipelinePhaseItem, DrawFunctionId, DrawFunctions, PhaseItem,
RenderPhase,
sort_phase_system, CachedRenderPipelinePhaseItem, PhaseItem, RenderCommandId,
RenderCommands, RenderPhase,
},
render_resource::{
CachedRenderPipelineId, Extent3d, TextureDescriptor, TextureDimension, TextureFormat,
Expand Down Expand Up @@ -64,9 +64,9 @@ impl Plugin for Core3dPlugin {
};

render_app
.init_resource::<DrawFunctions<Opaque3d>>()
.init_resource::<DrawFunctions<AlphaMask3d>>()
.init_resource::<DrawFunctions<Transparent3d>>()
.init_resource::<RenderCommands<Opaque3d>>()
.init_resource::<RenderCommands<AlphaMask3d>>()
.init_resource::<RenderCommands<Transparent3d>>()
.add_system_to_schedule(ExtractSchedule, extract_core_3d_camera_phases)
.add_system(prepare_core_3d_depth_textures.in_set(RenderSet::Prepare))
.add_system(sort_phase_system::<Opaque3d>.in_set(RenderSet::PhaseSort))
Expand Down Expand Up @@ -132,7 +132,7 @@ pub struct Opaque3d {
pub distance: f32,
pub pipeline: CachedRenderPipelineId,
pub entity: Entity,
pub draw_function: DrawFunctionId,
pub render_command_id: RenderCommandId,
}

impl PhaseItem for Opaque3d {
Expand All @@ -150,8 +150,8 @@ impl PhaseItem for Opaque3d {
}

#[inline]
fn draw_function(&self) -> DrawFunctionId {
self.draw_function
fn render_command_id(&self) -> RenderCommandId {
self.render_command_id
}

#[inline]
Expand All @@ -172,7 +172,7 @@ pub struct AlphaMask3d {
pub distance: f32,
pub pipeline: CachedRenderPipelineId,
pub entity: Entity,
pub draw_function: DrawFunctionId,
pub render_command_id: RenderCommandId,
}

impl PhaseItem for AlphaMask3d {
Expand All @@ -190,8 +190,8 @@ impl PhaseItem for AlphaMask3d {
}

#[inline]
fn draw_function(&self) -> DrawFunctionId {
self.draw_function
fn render_command_id(&self) -> RenderCommandId {
self.render_command_id
}

#[inline]
Expand All @@ -212,7 +212,7 @@ pub struct Transparent3d {
pub distance: f32,
pub pipeline: CachedRenderPipelineId,
pub entity: Entity,
pub draw_function: DrawFunctionId,
pub render_command_id: RenderCommandId,
}

impl PhaseItem for Transparent3d {
Expand All @@ -230,8 +230,8 @@ impl PhaseItem for Transparent3d {
}

#[inline]
fn draw_function(&self) -> DrawFunctionId {
self.draw_function
fn render_command_id(&self) -> RenderCommandId {
self.render_command_id
}

#[inline]
Expand Down
15 changes: 8 additions & 7 deletions crates/bevy_core_pipeline/src/prepass/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,9 @@ pub mod node;

use bevy_ecs::prelude::*;
use bevy_reflect::Reflect;
use bevy_render::render_phase::RenderCommandId;
use bevy_render::{
render_phase::{CachedRenderPipelinePhaseItem, DrawFunctionId, PhaseItem},
render_phase::{CachedRenderPipelinePhaseItem, PhaseItem},
render_resource::{CachedRenderPipelineId, Extent3d, TextureFormat},
texture::CachedTexture,
};
Expand Down Expand Up @@ -71,7 +72,7 @@ pub struct Opaque3dPrepass {
pub distance: f32,
pub entity: Entity,
pub pipeline_id: CachedRenderPipelineId,
pub draw_function: DrawFunctionId,
pub render_command_id: RenderCommandId,
}

impl PhaseItem for Opaque3dPrepass {
Expand All @@ -87,8 +88,8 @@ impl PhaseItem for Opaque3dPrepass {
}

#[inline]
fn draw_function(&self) -> DrawFunctionId {
self.draw_function
fn render_command_id(&self) -> RenderCommandId {
self.render_command_id
}

#[inline]
Expand All @@ -113,7 +114,7 @@ pub struct AlphaMask3dPrepass {
pub distance: f32,
pub entity: Entity,
pub pipeline_id: CachedRenderPipelineId,
pub draw_function: DrawFunctionId,
pub render_command_id: RenderCommandId,
}

impl PhaseItem for AlphaMask3dPrepass {
Expand All @@ -129,8 +130,8 @@ impl PhaseItem for AlphaMask3dPrepass {
}

#[inline]
fn draw_function(&self) -> DrawFunctionId {
self.draw_function
fn render_command_id(&self) -> RenderCommandId {
self.render_command_id
}

#[inline]
Expand Down
4 changes: 2 additions & 2 deletions crates/bevy_pbr/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ use bevy_render::{
extract_resource::ExtractResourcePlugin,
prelude::Color,
render_graph::RenderGraph,
render_phase::{sort_phase_system, AddRenderCommand, DrawFunctions},
render_phase::{sort_phase_system, AddRenderCommand, RenderCommands},
render_resource::{Shader, SpecializedMeshPipelines},
view::{ViewSet, VisibilitySystems},
ExtractSchedule, RenderApp, RenderSet,
Expand Down Expand Up @@ -288,7 +288,7 @@ impl Plugin for PbrPlugin {
.add_system(render::queue_shadow_view_bind_group.in_set(RenderSet::Queue))
.add_system(sort_phase_system::<Shadow>.in_set(RenderSet::PhaseSort))
.init_resource::<ShadowPipeline>()
.init_resource::<DrawFunctions<Shadow>>()
.init_resource::<RenderCommands<Shadow>>()
.init_resource::<LightMeta>()
.init_resource::<GlobalLightMeta>()
.init_resource::<SpecializedMeshPipelines<ShadowPipeline>>();
Expand Down
20 changes: 10 additions & 10 deletions crates/bevy_pbr/src/material.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ use bevy_render::{
prelude::Image,
render_asset::{PrepareAssetLabel, RenderAssets},
render_phase::{
AddRenderCommand, DrawFunctions, PhaseItem, RenderCommand, RenderCommandResult,
AddRenderCommand, PhaseItem, RenderCommand, RenderCommandResult, RenderCommands,
RenderPhase, SetItemPipeline, TrackedRenderPass,
},
render_resource::{
Expand Down Expand Up @@ -355,9 +355,9 @@ impl<P: PhaseItem, M: Material, const I: usize> RenderCommand<P> for SetMaterial

#[allow(clippy::too_many_arguments)]
pub fn queue_material_meshes<M: Material>(
opaque_draw_functions: Res<DrawFunctions<Opaque3d>>,
alpha_mask_draw_functions: Res<DrawFunctions<AlphaMask3d>>,
transparent_draw_functions: Res<DrawFunctions<Transparent3d>>,
opaque_render_commands: Res<RenderCommands<Opaque3d>>,
alpha_mask_render_commands: Res<RenderCommands<AlphaMask3d>>,
transparent_render_commands: Res<RenderCommands<Transparent3d>>,
material_pipeline: Res<MaterialPipeline<M>>,
mut pipelines: ResMut<SpecializedMeshPipelines<MaterialPipeline<M>>>,
pipeline_cache: Res<PipelineCache>,
Expand Down Expand Up @@ -385,9 +385,9 @@ pub fn queue_material_meshes<M: Material>(
mut transparent_phase,
) in &mut views
{
let draw_opaque_pbr = opaque_draw_functions.read().id::<DrawMaterial<M>>();
let draw_alpha_mask_pbr = alpha_mask_draw_functions.read().id::<DrawMaterial<M>>();
let draw_transparent_pbr = transparent_draw_functions.read().id::<DrawMaterial<M>>();
let draw_opaque_pbr = opaque_render_commands.id::<DrawMaterial<M>>();
let draw_alpha_mask_pbr = alpha_mask_render_commands.id::<DrawMaterial<M>>();
let draw_transparent_pbr = transparent_render_commands.id::<DrawMaterial<M>>();

let mut view_key = MeshPipelineKey::from_msaa_samples(msaa.samples())
| MeshPipelineKey::from_hdr(view.hdr);
Expand Down Expand Up @@ -446,15 +446,15 @@ pub fn queue_material_meshes<M: Material>(
AlphaMode::Opaque => {
opaque_phase.add(Opaque3d {
entity: *visible_entity,
draw_function: draw_opaque_pbr,
render_command_id: draw_opaque_pbr,
pipeline: pipeline_id,
distance,
});
}
AlphaMode::Mask(_) => {
alpha_mask_phase.add(AlphaMask3d {
entity: *visible_entity,
draw_function: draw_alpha_mask_pbr,
render_command_id: draw_alpha_mask_pbr,
pipeline: pipeline_id,
distance,
});
Expand All @@ -465,7 +465,7 @@ pub fn queue_material_meshes<M: Material>(
| AlphaMode::Multiply => {
transparent_phase.add(Transparent3d {
entity: *visible_entity,
draw_function: draw_transparent_pbr,
render_command_id: draw_transparent_pbr,
pipeline: pipeline_id,
distance,
});
Expand Down
27 changes: 11 additions & 16 deletions crates/bevy_pbr/src/prepass/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ use bevy_render::{
prelude::{Camera, Mesh},
render_asset::RenderAssets,
render_phase::{
sort_phase_system, AddRenderCommand, DrawFunctions, PhaseItem, RenderCommand,
RenderCommandResult, RenderPhase, SetItemPipeline, TrackedRenderPass,
sort_phase_system, AddRenderCommand, PhaseItem, RenderCommand, RenderCommandResult,
RenderCommands, RenderPhase, SetItemPipeline, TrackedRenderPass,
},
render_resource::{
BindGroup, BindGroupDescriptor, BindGroupEntry, BindGroupLayout, BindGroupLayoutDescriptor,
Expand Down Expand Up @@ -104,8 +104,8 @@ where
.add_system(sort_phase_system::<Opaque3dPrepass>.in_set(RenderSet::PhaseSort))
.add_system(sort_phase_system::<AlphaMask3dPrepass>.in_set(RenderSet::PhaseSort))
.init_resource::<PrepassPipeline<M>>()
.init_resource::<DrawFunctions<Opaque3dPrepass>>()
.init_resource::<DrawFunctions<AlphaMask3dPrepass>>()
.init_resource::<RenderCommands<Opaque3dPrepass>>()
.init_resource::<RenderCommands<AlphaMask3dPrepass>>()
.init_resource::<PrepassViewBindGroup>()
.init_resource::<SpecializedMeshPipelines<PrepassPipeline<M>>>()
.add_render_command::<Opaque3dPrepass, DrawPrepass<M>>()
Expand Down Expand Up @@ -473,8 +473,8 @@ pub fn queue_prepass_view_bind_group<M: Material>(

#[allow(clippy::too_many_arguments)]
pub fn queue_prepass_material_meshes<M: Material>(
opaque_draw_functions: Res<DrawFunctions<Opaque3dPrepass>>,
alpha_mask_draw_functions: Res<DrawFunctions<AlphaMask3dPrepass>>,
opaque_render_commands: Res<RenderCommands<Opaque3dPrepass>>,
alpha_mask_render_commands: Res<RenderCommands<AlphaMask3dPrepass>>,
prepass_pipeline: Res<PrepassPipeline<M>>,
mut pipelines: ResMut<SpecializedMeshPipelines<PrepassPipeline<M>>>,
pipeline_cache: Res<PipelineCache>,
Expand All @@ -493,14 +493,9 @@ pub fn queue_prepass_material_meshes<M: Material>(
) where
M::Data: PartialEq + Eq + Hash + Clone,
{
let opaque_draw_prepass = opaque_draw_functions
.read()
.get_id::<DrawPrepass<M>>()
.unwrap();
let alpha_mask_draw_prepass = alpha_mask_draw_functions
.read()
.get_id::<DrawPrepass<M>>()
.unwrap();
let opaque_draw_prepass = opaque_render_commands.id::<DrawPrepass<M>>();
let alpha_mask_draw_prepass = alpha_mask_render_commands.id::<DrawPrepass<M>>();

for (
view,
visible_entities,
Expand Down Expand Up @@ -567,15 +562,15 @@ pub fn queue_prepass_material_meshes<M: Material>(
AlphaMode::Opaque => {
opaque_phase.add(Opaque3dPrepass {
entity: *visible_entity,
draw_function: opaque_draw_prepass,
render_command_id: opaque_draw_prepass,
pipeline_id,
distance,
});
}
AlphaMode::Mask(_) => {
alpha_mask_phase.add(AlphaMask3dPrepass {
entity: *visible_entity,
draw_function: alpha_mask_draw_prepass,
render_command_id: alpha_mask_draw_prepass,
pipeline_id,
distance,
});
Expand Down
16 changes: 8 additions & 8 deletions crates/bevy_pbr/src/render/light.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ use bevy_render::{
render_asset::RenderAssets,
render_graph::{Node, NodeRunError, RenderGraphContext, SlotInfo, SlotType},
render_phase::{
CachedRenderPipelinePhaseItem, DrawFunctionId, DrawFunctions, PhaseItem, RenderCommand,
RenderCommandResult, RenderPhase, SetItemPipeline, TrackedRenderPass,
CachedRenderPipelinePhaseItem, PhaseItem, RenderCommand, RenderCommandId,
RenderCommandResult, RenderCommands, RenderPhase, SetItemPipeline, TrackedRenderPass,
},
render_resource::*,
renderer::{RenderContext, RenderDevice, RenderQueue},
Expand Down Expand Up @@ -1694,7 +1694,7 @@ pub fn queue_shadow_view_bind_group(

#[allow(clippy::too_many_arguments)]
pub fn queue_shadows(
shadow_draw_functions: Res<DrawFunctions<Shadow>>,
shadow_render_commands: Res<RenderCommands<Shadow>>,
shadow_pipeline: Res<ShadowPipeline>,
casting_meshes: Query<&Handle<Mesh>, Without<NotShadowCaster>>,
render_meshes: Res<RenderAssets<Mesh>>,
Expand All @@ -1707,7 +1707,7 @@ pub fn queue_shadows(
spot_light_entities: Query<&VisibleEntities, With<ExtractedPointLight>>,
) {
for (entity, view_lights) in &view_lights {
let draw_shadow_mesh = shadow_draw_functions.read().id::<DrawShadowMesh>();
let draw_shadow_mesh = shadow_render_commands.id::<DrawShadowMesh>();
for view_light_entity in view_lights.lights.iter().copied() {
let (light_entity, mut shadow_phase) =
view_light_shadow_phases.get_mut(view_light_entity).unwrap();
Expand Down Expand Up @@ -1761,7 +1761,7 @@ pub fn queue_shadows(
};

shadow_phase.add(Shadow {
draw_function: draw_shadow_mesh,
render_command: draw_shadow_mesh,
pipeline: pipeline_id,
entity,
distance: 0.0, // TODO: sort back-to-front
Expand All @@ -1777,7 +1777,7 @@ pub struct Shadow {
pub distance: f32,
pub entity: Entity,
pub pipeline: CachedRenderPipelineId,
pub draw_function: DrawFunctionId,
pub render_command: RenderCommandId,
}

impl PhaseItem for Shadow {
Expand All @@ -1794,8 +1794,8 @@ impl PhaseItem for Shadow {
}

#[inline]
fn draw_function(&self) -> DrawFunctionId {
self.draw_function
fn render_command_id(&self) -> RenderCommandId {
self.render_command
}

#[inline]
Expand Down
Loading

0 comments on commit bc66cac

Please sign in to comment.