Fix panic in custom_render_phase
example (#17866)
# Objective Fix panic in `custom_render_phase`. This example was broken by #17764, but that breakage evolved into a panic after #17849. This new panic seems to illustrate the problem in a pretty straightforward way. ``` 2025-02-15T00:44:11.833622Z INFO bevy_diagnostic::system_information_diagnostics_plugin::internal: SystemInfo { os: "macOS 15.3 Sequoia", kernel: "24.3.0", cpu: "Apple M4 Max", core_count: "16", memory: "64.0 GiB" } 2025-02-15T00:44:11.908328Z INFO bevy_render::renderer: AdapterInfo { name: "Apple M4 Max", vendor: 0, device: 0, device_type: IntegratedGpu, driver: "", driver_info: "", backend: Metal } 2025-02-15T00:44:12.314930Z INFO bevy_winit::system: Creating new window App (0v1) thread 'Compute Task Pool (1)' panicked at /Users/me/src/bevy/crates/bevy_ecs/src/system/function_system.rs:216:28: bevy_render::batching::gpu_preprocessing::batch_and_prepare_sorted_render_phase<custom_render_phase::Stencil3d, custom_render_phase::StencilPipeline> could not access system parameter ResMut<PhaseBatchedInstanceBuffers<Stencil3d, MeshUniform>> ``` ## Solution Add a `SortedRenderPhasePlugin` for the custom phase. ## Testing `cargo run --example custom_render_phase`
This commit is contained in:
parent
137878ac35
commit
e186c7ccf4
@ -43,7 +43,7 @@ use bevy::{
|
|||||||
render_phase::{
|
render_phase::{
|
||||||
sort_phase_system, AddRenderCommand, CachedRenderPipelinePhaseItem, DrawFunctionId,
|
sort_phase_system, AddRenderCommand, CachedRenderPipelinePhaseItem, DrawFunctionId,
|
||||||
DrawFunctions, InputUniformIndex, PhaseItem, PhaseItemExtraIndex, SetItemPipeline,
|
DrawFunctions, InputUniformIndex, PhaseItem, PhaseItemExtraIndex, SetItemPipeline,
|
||||||
SortedPhaseItem, ViewSortedRenderPhases,
|
SortedPhaseItem, SortedRenderPhasePlugin, ViewSortedRenderPhases,
|
||||||
},
|
},
|
||||||
render_resource::{
|
render_resource::{
|
||||||
CachedRenderPipelineId, ColorTargetState, ColorWrites, Face, FragmentState, FrontFace,
|
CachedRenderPipelineId, ColorTargetState, ColorWrites, Face, FragmentState, FrontFace,
|
||||||
@ -54,7 +54,7 @@ use bevy::{
|
|||||||
renderer::RenderContext,
|
renderer::RenderContext,
|
||||||
sync_world::MainEntity,
|
sync_world::MainEntity,
|
||||||
view::{ExtractedView, RenderVisibleEntities, RetainedViewEntity, ViewTarget},
|
view::{ExtractedView, RenderVisibleEntities, RetainedViewEntity, ViewTarget},
|
||||||
Extract, Render, RenderApp, RenderSet,
|
Extract, Render, RenderApp, RenderDebugFlags, RenderSet,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
use nonmax::NonMaxU32;
|
use nonmax::NonMaxU32;
|
||||||
@ -113,7 +113,10 @@ struct DrawStencil;
|
|||||||
struct MeshStencilPhasePlugin;
|
struct MeshStencilPhasePlugin;
|
||||||
impl Plugin for MeshStencilPhasePlugin {
|
impl Plugin for MeshStencilPhasePlugin {
|
||||||
fn build(&self, app: &mut App) {
|
fn build(&self, app: &mut App) {
|
||||||
app.add_plugins((ExtractComponentPlugin::<DrawStencil>::default(),));
|
app.add_plugins((
|
||||||
|
ExtractComponentPlugin::<DrawStencil>::default(),
|
||||||
|
SortedRenderPhasePlugin::<Stencil3d, MeshPipeline>::new(RenderDebugFlags::default()),
|
||||||
|
));
|
||||||
// We need to get the render app from the main app
|
// We need to get the render app from the main app
|
||||||
let Some(render_app) = app.get_sub_app_mut(RenderApp) else {
|
let Some(render_app) = app.get_sub_app_mut(RenderApp) else {
|
||||||
return;
|
return;
|
||||||
|
Loading…
Reference in New Issue
Block a user