diff --git a/crates/bevy_pbr/src/material.rs b/crates/bevy_pbr/src/material.rs index 2dc0e0f3ed59e..ff443cabb21a9 100644 --- a/crates/bevy_pbr/src/material.rs +++ b/crates/bevy_pbr/src/material.rs @@ -347,18 +347,9 @@ pub fn queue_material_meshes( mut transparent_phase, ) in &mut views { - let draw_opaque_pbr = opaque_draw_functions - .read() - .get_id::>() - .unwrap(); - let draw_alpha_mask_pbr = alpha_mask_draw_functions - .read() - .get_id::>() - .unwrap(); - let draw_transparent_pbr = transparent_draw_functions - .read() - .get_id::>() - .unwrap(); + let draw_opaque_pbr = opaque_draw_functions.read().id::>(); + let draw_alpha_mask_pbr = alpha_mask_draw_functions.read().id::>(); + let draw_transparent_pbr = transparent_draw_functions.read().id::>(); let mut view_key = MeshPipelineKey::from_msaa_samples(msaa.samples) | MeshPipelineKey::from_hdr(view.hdr); diff --git a/crates/bevy_pbr/src/render/light.rs b/crates/bevy_pbr/src/render/light.rs index f973c4f646ee7..8b9faeb99854f 100644 --- a/crates/bevy_pbr/src/render/light.rs +++ b/crates/bevy_pbr/src/render/light.rs @@ -1635,10 +1635,7 @@ pub fn queue_shadows( spot_light_entities: Query<&VisibleEntities, With>, ) { for view_lights in &view_lights { - let draw_shadow_mesh = shadow_draw_functions - .read() - .get_id::() - .unwrap(); + let draw_shadow_mesh = shadow_draw_functions.read().id::(); 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(); diff --git a/crates/bevy_pbr/src/wireframe.rs b/crates/bevy_pbr/src/wireframe.rs index 47171ba392834..2b31a051317d2 100644 --- a/crates/bevy_pbr/src/wireframe.rs +++ b/crates/bevy_pbr/src/wireframe.rs @@ -116,10 +116,7 @@ fn queue_wireframes( )>, mut views: Query<(&ExtractedView, &VisibleEntities, &mut RenderPhase)>, ) { - let draw_custom = opaque_3d_draw_functions - .read() - .get_id::() - .unwrap(); + let draw_custom = opaque_3d_draw_functions.read().id::(); let msaa_key = MeshPipelineKey::from_msaa_samples(msaa.samples); for (view, visible_entities, mut opaque_phase) in &mut views { let rangefinder = view.rangefinder3d(); diff --git a/crates/bevy_render/src/render_phase/draw.rs b/crates/bevy_render/src/render_phase/draw.rs index 1a3f9f3c2230c..1b044197fddca 100644 --- a/crates/bevy_render/src/render_phase/draw.rs +++ b/crates/bevy_render/src/render_phase/draw.rs @@ -97,6 +97,22 @@ impl DrawFunctionsInternal

{ pub fn get_id(&self) -> Option { self.indices.get(&TypeId::of::()).copied() } + + /// Retrieves the id of the [`Draw`] function corresponding to their associated type `T`. + /// + /// Fallible wrapper for [`Self::get_id()`] + /// + /// ## Panics + /// If the id doesn't exist it will panic + pub fn id(&self) -> DrawFunctionId { + self.get_id::().unwrap_or_else(|| { + panic!( + "Draw function {} not found for {}", + std::any::type_name::(), + std::any::type_name::

() + ) + }) + } } /// Stores all draw functions for the [`PhaseItem`] type hidden behind a reader-writer lock. diff --git a/crates/bevy_sprite/src/mesh2d/material.rs b/crates/bevy_sprite/src/mesh2d/material.rs index 72dac1b39095e..0f3b86bf9e1d5 100644 --- a/crates/bevy_sprite/src/mesh2d/material.rs +++ b/crates/bevy_sprite/src/mesh2d/material.rs @@ -320,10 +320,7 @@ pub fn queue_material2d_meshes( } for (view, visible_entities, tonemapping, mut transparent_phase) in &mut views { - let draw_transparent_pbr = transparent_draw_functions - .read() - .get_id::>() - .unwrap(); + let draw_transparent_pbr = transparent_draw_functions.read().id::>(); let mut view_key = Mesh2dPipelineKey::from_msaa_samples(msaa.samples) | Mesh2dPipelineKey::from_hdr(view.hdr); diff --git a/crates/bevy_sprite/src/render/mod.rs b/crates/bevy_sprite/src/render/mod.rs index d99fdc8d4d98c..546319eca69cf 100644 --- a/crates/bevy_sprite/src/render/mod.rs +++ b/crates/bevy_sprite/src/render/mod.rs @@ -488,7 +488,7 @@ pub fn queue_sprites( layout: &sprite_pipeline.view_layout, })); - let draw_sprite_function = draw_functions.read().get_id::().unwrap(); + let draw_sprite_function = draw_functions.read().id::(); // Vertex buffer indices let mut index = 0; diff --git a/crates/bevy_ui/src/render/mod.rs b/crates/bevy_ui/src/render/mod.rs index f2b86eafd6357..595896c1fdfec 100644 --- a/crates/bevy_ui/src/render/mod.rs +++ b/crates/bevy_ui/src/render/mod.rs @@ -588,7 +588,7 @@ pub fn queue_uinodes( label: Some("ui_view_bind_group"), layout: &ui_pipeline.view_layout, })); - let draw_ui_function = draw_functions.read().get_id::().unwrap(); + let draw_ui_function = draw_functions.read().id::(); for (view, mut transparent_phase) in &mut views { let pipeline = pipelines.specialize( &mut pipeline_cache, diff --git a/examples/2d/mesh2d_manual.rs b/examples/2d/mesh2d_manual.rs index 764701269ef7b..977095e87f9f0 100644 --- a/examples/2d/mesh2d_manual.rs +++ b/examples/2d/mesh2d_manual.rs @@ -327,10 +327,7 @@ pub fn queue_colored_mesh2d( } // Iterate each view (a camera is a view) for (visible_entities, mut transparent_phase, view) in &mut views { - let draw_colored_mesh2d = transparent_draw_functions - .read() - .get_id::() - .unwrap(); + let draw_colored_mesh2d = transparent_draw_functions.read().id::(); let mesh_key = Mesh2dPipelineKey::from_msaa_samples(msaa.samples) | Mesh2dPipelineKey::from_hdr(view.hdr); diff --git a/examples/shader/shader_instancing.rs b/examples/shader/shader_instancing.rs index dd57825d30ace..5d8c8b816f473 100644 --- a/examples/shader/shader_instancing.rs +++ b/examples/shader/shader_instancing.rs @@ -109,10 +109,7 @@ fn queue_custom( material_meshes: Query<(Entity, &MeshUniform, &Handle), With>, mut views: Query<(&ExtractedView, &mut RenderPhase)>, ) { - let draw_custom = transparent_3d_draw_functions - .read() - .get_id::() - .unwrap(); + let draw_custom = transparent_3d_draw_functions.read().id::(); let msaa_key = MeshPipelineKey::from_msaa_samples(msaa.samples);