Add BRP to render app#23446
Conversation
|
The generated |
Co-authored-by: Kevin Chen <chen.kevin.f@gmail.com>
…` changes (#23513) # Objective - Render schedules are static, compared to the main schedules in the main world that can be dynamically added with the `MainScheduleOrder` resource - This is necessary to allow BRP introspection of schedules in the Render world (see #23452 ) ## Solution - Add `RenderScheduleOrder` resource that allows for ordering of `Render` schedules ## Testing - CI - #23446
alice-i-cecile
left a comment
There was a problem hiding this comment.
I don't think that this warrants release notes: it's not going to be meaningful to users who have never used Bevy (or most Bevy users).
Co-authored-by: Kevin Chen <chen.kevin.f@gmail.com>
atlv24
left a comment
There was a problem hiding this comment.
i am not very familiar with BRP but this looks fine
# Objective - List schedules in BRP ## Solution - Add the endpoint - Add to `Schedules` some tracking of `temporarily_removed` (schedule removed to execute) and `empty_labels` (no `Schedule` for that label) ## Related: - bevyengine#23452 - bevyengine#23446 ## Testing - in terminal 1 run `cargo run --example server --features="bevy_remote"` - in terminal 2 run `curl -d'{"jsonrpc":"2.0","method":"schedule.list","id":1,"params":{}}' -X POST -H "Accept: applcation/json" -H "Content-Type: application/json" http://127.0.0.1:15702` <details><summary>Response</summary> <p> ```json { "jsonrpc": "2.0", "id": 1, "result": { "empty_schedule_labels": [ "FixedPreUpdate", "FixedUpdate" ], "schedule_labels": [ "Startup", "First", "RunFixedMainLoop", "PostStartup", "FixedFirst", "StateTransition", "PreUpdate", "PostUpdate", "Update", "PreStartup", "SpawnScene", "Last", "FixedLast", "FixedPostUpdate", "FixedMain" ], "unavailable_schedule_labels": [ "Main", "RemoteLast" ] } } ``` </p> </details> --------- Co-authored-by: Kevin Chen <chen.kevin.f@gmail.com>
# Objective - Describe the graph for a given schedule ## Solution - Add endpoint `schedule.graph` ## Related: - bevyengine#23447 - bevyengine#23446 ## Testing - in terminal 1 run `cargo run --example server --features="bevy_remote"` - in terminal 2 run `curl -d'{"jsonrpc":"2.0","method":"schedule.graph","id":1,"params":{"schedule_name":"First"}}' -X POST -H "Accept: applcation/json" -H "Content-Type: application/json" http://127.0.0.1:15702 ` <details><summary>Response</summary> <p> ```json { "jsonrpc": "2.0", "id": 1, "result": { "systemsets": [ { "key": "SystemSetKey(1v1)", "method": "SystemTypeSet:bevy_ecs::message::update::message_update_system" }, { "key": "SystemSetKey(2v1)", "method": "MessageUpdateSystems" }, { "key": "SystemSetKey(3v1)", "method": "SystemTypeSet:bevy_time::time_system" }, { "key": "SystemSetKey(4v1)", "method": "TimeSystems" }, { "key": "SystemSetKey(5v1)", "method": "SystemTypeSet:bevy_render::view::window::screenshot::clear_screenshots" }, { "key": "SystemSetKey(6v1)", "method": "SystemTypeSet:bevy_ecs::schedule::executor::ApplyDeferred" }, { "key": "SystemSetKey(7v1)", "method": "SystemTypeSet:bevy_ui::widget::viewport::viewport_picking" }, { "key": "SystemSetKey(8v1)", "method": "PostInput" }, { "key": "SystemSetKey(9v1)", "method": "SystemTypeSet:bevy_picking::input::mouse_pick_events" }, { "key": "SystemSetKey(10v1)", "method": "Input" }, { "key": "SystemSetKey(11v1)", "method": "SystemTypeSet:bevy_picking::input::touch_pick_events" } ], "hierarchy_nodes": [ "Set(SystemSetKey(11v1))", "Set(SystemSetKey(10v1))", "System(SystemKey(6v1))", "Set(SystemSetKey(9v1))", "System(SystemKey(5v1))", "Set(SystemSetKey(8v1))", "Set(SystemSetKey(7v1))", "System(SystemKey(4v1))", "Set(SystemSetKey(6v1))", "Set(SystemSetKey(5v1))", "System(SystemKey(3v1))", "Set(SystemSetKey(4v1))", "Set(SystemSetKey(3v1))", "System(SystemKey(2v1))", "Set(SystemSetKey(2v1))", "Set(SystemSetKey(1v1))", "System(SystemKey(1v1))" ], "hierarchy_edges": [ [ "Set(SystemSetKey(1v1))", "System(SystemKey(1v1))" ], [ "Set(SystemSetKey(3v1))", "System(SystemKey(2v1))" ], [ "Set(SystemSetKey(8v1))", "System(SystemKey(4v1))" ], [ "Set(SystemSetKey(2v1))", "System(SystemKey(1v1))" ], [ "Set(SystemSetKey(7v1))", "System(SystemKey(4v1))" ], [ "Set(SystemSetKey(4v1))", "System(SystemKey(2v1))" ], [ "Set(SystemSetKey(9v1))", "System(SystemKey(5v1))" ], [ "Set(SystemSetKey(10v1))", "System(SystemKey(6v1))" ], [ "Set(SystemSetKey(5v1))", "System(SystemKey(3v1))" ], [ "Set(SystemSetKey(10v1))", "System(SystemKey(5v1))" ], [ "Set(SystemSetKey(11v1))", "System(SystemKey(6v1))" ] ], "dependency_nodes": [ "System(SystemKey(1v1))", "Set(SystemSetKey(1v1))", "Set(SystemSetKey(2v1))", "System(SystemKey(2v1))", "Set(SystemSetKey(3v1))", "Set(SystemSetKey(4v1))", "System(SystemKey(3v1))", "Set(SystemSetKey(5v1))", "Set(SystemSetKey(6v1))", "System(SystemKey(4v1))", "Set(SystemSetKey(7v1))", "Set(SystemSetKey(8v1))", "System(SystemKey(5v1))", "Set(SystemSetKey(9v1))", "Set(SystemSetKey(10v1))", "System(SystemKey(6v1))", "Set(SystemSetKey(11v1))" ], "dependency_edges": [ [ "Set(SystemSetKey(2v1))", "Set(SystemSetKey(10v1))" ], [ "Set(SystemSetKey(10v1))", "Set(SystemSetKey(8v1))" ], [ "System(SystemKey(3v1))", "Set(SystemSetKey(6v1))" ], [ "System(SystemKey(5v1))", "System(SystemKey(6v1))" ], [ "Set(SystemSetKey(4v1))", "Set(SystemSetKey(8v1))" ], [ "Set(SystemSetKey(4v1))", "Set(SystemSetKey(10v1))" ], [ "Set(SystemSetKey(2v1))", "Set(SystemSetKey(8v1))" ], [ "Set(SystemSetKey(1v1))", "System(SystemKey(3v1))" ] ] } } ``` </p> </details> From the above response, the below graph can be generated. Hierarchy edges are blue, dependency edges are red. System nodes are implied by hierarchy from Set to System. <img width="1543" height="347" alt="first" src="https://github.com/user-attachments/assets/80ac7e80-2a28-4246-80cc-29337bad4383" /> <details><summary>GraphViz Source</summary> <p> ``` digraph { "Set(SystemSetKey(1v1))" [label="message_update_system"] "Set(SystemSetKey(2v1))" [label="MessageUpdateSystems"] "Set(SystemSetKey(3v1))" [label="time_system"] "Set(SystemSetKey(4v1))" [label="TimeSystems"] "Set(SystemSetKey(5v1))" [label="clear_screenshots"] "Set(SystemSetKey(6v1))" [label="ApplyDeferred"] "Set(SystemSetKey(7v1))" [label="viewport_picking"] "Set(SystemSetKey(8v1))" [label="PostInput"] "Set(SystemSetKey(9v1))" [label="mouse_pick_events"] "Set(SystemSetKey(10v1))" [label="Input"] "Set(SystemSetKey(11v1))" [label="touch_pick_events"] // implied nodes "System(SystemKey(1v1))" [label="implied message_update_system", shape=rectangle] "System(SystemKey(2v1))" [label="implied time_system", shape=rectangle] "System(SystemKey(3v1))" [label="implied clear_screenshots", shape=rectangle] "System(SystemKey(4v1))" [label="implied viewport_picking", shape=rectangle] "System(SystemKey(5v1))" [label="implied mouse_pick_events", shape=rectangle] "System(SystemKey(6v1))" [label="implied touch_pick_events", shape=rectangle] // hierarchy "Set(SystemSetKey(1v1))" -> "System(SystemKey(1v1))" [color=blue] "Set(SystemSetKey(3v1))" -> "System(SystemKey(2v1))" [color=blue] "Set(SystemSetKey(8v1))" -> "System(SystemKey(4v1))" [color=blue] "Set(SystemSetKey(2v1))" -> "System(SystemKey(1v1))" [color=blue] "Set(SystemSetKey(7v1))" -> "System(SystemKey(4v1))" [color=blue] "Set(SystemSetKey(4v1))" -> "System(SystemKey(2v1))" [color=blue] "Set(SystemSetKey(9v1))" -> "System(SystemKey(5v1))" [color=blue] "Set(SystemSetKey(10v1))" -> "System(SystemKey(6v1))" [color=blue] "Set(SystemSetKey(5v1))" -> "System(SystemKey(3v1))" [color=blue] "Set(SystemSetKey(10v1))" -> "System(SystemKey(5v1))" [color=blue] "Set(SystemSetKey(11v1))" -> "System(SystemKey(6v1))" [color=blue] // dependencies "Set(SystemSetKey(2v1))" -> "Set(SystemSetKey(10v1))" [color=red] "Set(SystemSetKey(10v1))" -> "Set(SystemSetKey(8v1))" [color=red] "System(SystemKey(3v1))" -> "Set(SystemSetKey(6v1))" [color=red] "System(SystemKey(5v1))" -> "System(SystemKey(6v1))" [color=red] "Set(SystemSetKey(4v1))" -> "Set(SystemSetKey(8v1))" [color=red] "Set(SystemSetKey(4v1))" -> "Set(SystemSetKey(10v1))" [color=red] "Set(SystemSetKey(2v1))" -> "Set(SystemSetKey(8v1))" [color=red] "Set(SystemSetKey(1v1))" -> "System(SystemKey(3v1))" [color=red] } ``` </p> </details> --------- Co-authored-by: Kevin Chen <chen.kevin.f@gmail.com> Co-authored-by: Alice Cecile <alice.i.cecile@gmail.com>
…` changes (bevyengine#23513) # Objective - Render schedules are static, compared to the main schedules in the main world that can be dynamically added with the `MainScheduleOrder` resource - This is necessary to allow BRP introspection of schedules in the Render world (see bevyengine#23452 ) ## Solution - Add `RenderScheduleOrder` resource that allows for ordering of `Render` schedules ## Testing - CI - bevyengine#23446
- BRP on the `RenderApp` - Add type registry to `RenderApp` - Add BRP systems to render app - Add HTTP listener to extra port I suggest hiding whitespace for reviewing: <img width="422" height="360" alt="image" src="https://github.com/user-attachments/assets/3d76eafb-40f5-42f6-8752-c9d94f81d378" /> - bevyengine#23513 - bevyengine#23447 - bevyengine#23452 - CI - in terminal 1 run `cargo run --example client --features="bevy_remote"` - in terminal 2 run `curl -d'{"jsonrpc":"2.0","method":"world.list_resources","id":1,"params":{}}' -X POST -H "Accept: applcation/json" -H "Content-Type: application/json" http://127.0.0.1:15702` - in terminal 2 run `curl -d'{"jsonrpc":"2.0","method":"world.list_resources","id":1,"params":{}}' -X POST -H "Accept: applcation/json" -H "Content-Type: application/json" http://127.0.0.1:15703` --------- Co-authored-by: Kevin Chen <chen.kevin.f@gmail.com>
| reflect_auto_register = ["bevy_app/reflect_auto_register"] | ||
| reflect_functions = ["bevy_app/reflect_functions"] | ||
|
|
||
| default = ["reflect_auto_register", "reflect_functions"] |
There was a problem hiding this comment.
@Zeophlite I think this shouldn't be enabled by default. Otherwise once you enable anything that requires rendering, it enables reflect_auto_register. I think this should be controlled by reflect_auto_register on bevy.
This causes reflection tests to fail in my crate.
Objective
RenderAppSolution
RenderAppI suggest hiding whitespace for reviewing:
Related:
RenderScheduleOrderresource to allow forRenderAppSchedulechanges #23513schedule.listendpoint #23447schedule.graphendpoint #23452Testing
cargo run --example client --features="bevy_remote"curl -d'{"jsonrpc":"2.0","method":"world.list_resources","id":1,"params":{}}' -X POST -H "Accept: applcation/json" -H "Content-Type: application/json" http://127.0.0.1:15702curl -d'{"jsonrpc":"2.0","method":"world.list_resources","id":1,"params":{}}' -X POST -H "Accept: applcation/json" -H "Content-Type: application/json" http://127.0.0.1:15703