bevy/crates
Patrick Walton 26f7313212
Allow phase items not associated with meshes to be binned. (#14029)
As reported in #14004, many third-party plugins, such as Hanabi, enqueue
entities that don't have meshes into render phases. However, the
introduction of indirect mode added a dependency on mesh-specific data,
breaking this workflow. This is because GPU preprocessing requires that
the render phases manage indirect draw parameters, which don't apply to
objects that aren't meshes. The existing code skips over binned entities
that don't have indirect draw parameters, which causes the rendering to
be skipped for such objects.

To support this workflow, this commit adds a new field,
`non_mesh_items`, to `BinnedRenderPhase`. This field contains a simple
list of (bin key, entity) pairs. After drawing batchable and unbatchable
objects, the non-mesh items are drawn one after another. Bevy itself
doesn't enqueue any items into this list; it exists solely for the
application and/or plugins to use.

Additionally, this commit switches the asset ID in the standard bin keys
to be an untyped asset ID rather than that of a mesh. This allows more
flexibility, allowing bins to be keyed off any type of asset.

This patch adds a new example, `custom_phase_item`, which simultaneously
serves to demonstrate how to use this new feature and to act as a
regression test so this doesn't break again.

Fixes #14004.

## Changelog

### Added

* `BinnedRenderPhase` now contains a `non_mesh_items` field for plugins
to add custom items to.
2024-06-27 19:41:42 +02:00
..
bevy_a11y Release Candidate 0.14.0-rc.3 2024-06-16 17:50:19 +02:00
bevy_animation Release Candidate 0.14.0-rc.3 2024-06-16 17:50:19 +02:00
bevy_app feat(bevy_app): expose an API to perform updates for a specific sub-app. (#14009) 2024-06-26 00:13:24 +02:00
bevy_asset Allow phase items not associated with meshes to be binned. (#14029) 2024-06-27 19:41:42 +02:00
bevy_audio Release Candidate 0.14.0-rc.3 2024-06-16 17:50:19 +02:00
bevy_color Release Candidate 0.14.0-rc.3 2024-06-16 17:50:19 +02:00
bevy_core Release Candidate 0.14.0-rc.3 2024-06-16 17:50:19 +02:00
bevy_core_pipeline Allow phase items not associated with meshes to be binned. (#14029) 2024-06-27 19:41:42 +02:00
bevy_derive Release Candidate 0.14.0-rc.3 2024-06-16 17:50:19 +02:00
bevy_dev_tools Release Candidate 0.14.0-rc.3 2024-06-16 17:50:19 +02:00
bevy_diagnostic Release Candidate 0.14.0-rc.3 2024-06-16 17:50:19 +02:00
bevy_dylib Release Candidate 0.14.0-rc.3 2024-06-16 17:50:19 +02:00
bevy_dynamic_plugin Release Candidate 0.14.0-rc.3 2024-06-16 17:50:19 +02:00
bevy_ecs Add missing StaticSystemParam::queue implementation. (#14051) 2024-06-27 19:41:42 +02:00
bevy_encase_derive Release Candidate 0.14.0-rc.3 2024-06-16 17:50:19 +02:00
bevy_gilrs Release Candidate 0.14.0-rc.3 2024-06-16 17:50:19 +02:00
bevy_gizmos Release Candidate 0.14.0-rc.3 2024-06-16 17:50:19 +02:00
bevy_gltf Release Candidate 0.14.0-rc.3 2024-06-16 17:50:19 +02:00
bevy_hierarchy Release Candidate 0.14.0-rc.3 2024-06-16 17:50:19 +02:00
bevy_input Release Candidate 0.14.0-rc.3 2024-06-16 17:50:19 +02:00
bevy_internal don't crash without features bevy_pbr, ktx2, zstd (#14020) 2024-06-26 21:55:00 +02:00
bevy_log Release Candidate 0.14.0-rc.3 2024-06-16 17:50:19 +02:00
bevy_macro_utils Release Candidate 0.14.0-rc.3 2024-06-16 17:50:19 +02:00
bevy_math Release Candidate 0.14.0-rc.3 2024-06-16 17:50:19 +02:00
bevy_mikktspace Release Candidate 0.14.0-rc.3 2024-06-16 17:50:19 +02:00
bevy_pbr Allow phase items not associated with meshes to be binned. (#14029) 2024-06-27 19:41:42 +02:00
bevy_ptr Release Candidate 0.14.0-rc.3 2024-06-16 17:50:19 +02:00
bevy_reflect Release Candidate 0.14.0-rc.3 2024-06-16 17:50:19 +02:00
bevy_render Allow phase items not associated with meshes to be binned. (#14029) 2024-06-27 19:41:42 +02:00
bevy_scene Release Candidate 0.14.0-rc.3 2024-06-16 17:50:19 +02:00
bevy_sprite bug: Fix 9-slice textures with asymmetric borders. (#13921) 2024-06-21 19:36:48 +02:00
bevy_state Move StateTransitionSteps registration to states plugin (#13939) 2024-06-21 19:36:48 +02:00
bevy_tasks Release Candidate 0.14.0-rc.3 2024-06-16 17:50:19 +02:00
bevy_text Release Candidate 0.14.0-rc.3 2024-06-16 17:50:19 +02:00
bevy_time Make time_system public (#13879) 2024-06-19 04:14:58 +02:00
bevy_transform Release Candidate 0.14.0-rc.3 2024-06-16 17:50:19 +02:00
bevy_ui Make default behavior for BackgroundColor and BorderColor more intuitive (#14017) 2024-06-26 00:16:30 +02:00
bevy_utils Release Candidate 0.14.0-rc.3 2024-06-16 17:50:19 +02:00
bevy_window apply window scale to window size when creating it (#13967) 2024-06-21 20:27:55 +02:00
bevy_winit Have WindowPosition::Centered take scale_factor_override into account (#13949) 2024-06-26 21:57:12 +02:00