It's time for a special edition of the #bevymergetrain. This week, we're going to be going over all of the 0.16 milestone PRs, checking in on their status, and merging as many little fixes as we can!
Users have been hard at work finding regressions; it's our job to fix 'em!
https://github.com/bevyengine/bevy/pulls?q=is%3Aopen+is%3Apr+milestone%3A0.16
There's 22 open PRs for the 0.16 milestone, 14 of which are Ready-For-Final-Review, with at least two approvals. Over at #bevy, we do #opensource a bit differently: the reviews from *anyone* count. As we're going over the #rustlang #gamedev work, if you think you're qualified, please leave a review!
1. https://github.com/bevyengine/bevy/pull/18409
One of the gnarlier bits of Bevy's demands for relations is that some of our relationships types need to strictly order related entities amongst each other. 3D objects don't care, but UI sure does! We lost a method relating to this in the migration :(
Fixing that sort of regression is key, and this PR adds a `OrderedRelationshipSourceCollection` trait to fix it properly, which is a subtrait of the ordinary `RelationshipSourceCollection`. I love traits for this!
*I* think this looks great, but we need a second set of eyes to check for problems
2. https://github.com/bevyengine/bevy/pull/18451
A UX fix for some of our debug output for components: reporting names for components that are queued but not registered. Read the linked PR for context!
This would be nice to get in, but needs a second review. We *can* probably ship without it though :(
3. https://github.com/bevyengine/bevy/pull/18582
Adds web support for our shiny new atmoshphere rendering, just in time for the next Bevy #gamejam! The author needs to get back to this though, lemme poke them. This is solidly a nice to have though, so I'm willing to cut it from the release.
4. https://github.com/bevyengine/bevy/pull/18587
Fixes a few bugs for wireframe rendering by moving it over to the new patterns introduced in the 0.16 cycle. Oof-ouch my duplication! Needs review though. This is above my head (rendering novice still!), but checking that the linked bugs are fixed would still be great.
5. https://github.com/bevyengine/bevy/pull/18613
A "please make more things public" PR! Classic, really. This is needed to migrate ecosystem crates in rendering: yay release candidates! Doc links are complaining about linking to private items, and there's merge conflicts, so lemme pull this down and fix it...
Okay, merge conflicts were trivial but why on earth are the doc links failing. Those are pub items! Oh, they weren't re-exported properly. `pub` items in private modules have misleading visibility! Fixing...
And pushed. Bah, there was another unexported pub item. Fixed and merging :)
6. https://github.com/bevyengine/bevy/pull/18618
Oh hey, it's the PR I made to clean up a shockingly hot rendering system. Profiling is so OP.
Sometimes when you get a huge perf improvement it's because you've been very clever, but most of the time you just stopped doing something dumb. Mutation is much faster!
Anyways, Aevyrie pulled out the most important uncontroversial changes into another PR. I'm going to merge that, and move this out of the milestone. Recording what I'm doing and why in the PR itself and tweaking the labels.
I still think the broader cleanup is worthwhile, but not right now.
7. https://github.com/bevyengine/bevy/pull/18622
Oh hey, fixes to the Query documentation! I love shipping docs improvements! We changed a whole bunch of things here in 0.16, including some contentious renames. We've built consensus there, but need to update the docs to match. Merging!
8. https://github.com/bevyengine/bevy/pull/18627
More retained rendering bugs: this time we're fixing a memory leak when entities are despawned by cleaning up caches that we're using to sort them into groups to determine how they're rendered. Memory leaks are bad! Definitely a release blocker.
This cleanup process is painfully manual, but as Charlotte says: "Yeah we are super aware that this kind of ad hoc pattern is very difficult to maintain. The cost of bad abstractions in rendering code is just also unfortunately very high." Merging; we have a bug fix in hand.
9. https://github.com/bevyengine/bevy/pull/18628
Charlotte is crushing the 0.16 rendering bugs. This time, before we even had an issue! `NoIndirectDrawing` is quite niche, so we didn't have an example with a visual failure for it in CI. The last nit has been fixed, so it's time to merge!
10. https://github.com/bevyengine/bevy/pull/18629
A little bit of cleanup for a shockingly popular initiative in 0.16: unified error handling. This PR is all about preferring `Display` (human-readable) over `Debug` (auto-generated maximally detailed) impls when possible. Hmm, how does that even work...
Okay, most of the diff appears to be just moving a code block around: fine. Ah, the key bit is that the default error handler uses the `Display` impl. To support that, we're making the backtraces include both the Display and Debug impl. Thank goodness for PR descriptions.
I like this; merging.
11. https://github.com/bevyengine/bevy/pull/18630
Another Charlotte rendering bug fix: falling back to `GpuPreProcessingMode::None` if the device doesn't have the required features. Sure, very reasonable. Oh hey, Rob already beat me to merging this one! Excuse me, this is *content*!
12. https://github.com/bevyengine/bevy/pull/18631
Another Charlotte bug fix PR, another "Rob is already merging this". The merge queue will continue to chug along for a bit as I work. Good fix though: it tackles meshes without materials.
13. https://github.com/bevyengine/bevy/pull/18632
Here's aevyrie's uncontroversial "just slap some par_iter on it" performance PR. Thanks profiling! Jasmine has requested a bit of additional cleanup, but I think that's much better tackled in my PR from earlier. Going to merge this: it's a strict improvement over main.
14. https://github.com/bevyengine/bevy/pull/18633
Another PR that needs a second review, tackling a fresh bug where users were seeing systems churn as fast as possible without the #rustlang standard library. Turns out we need to add a sleep equivalent. As a fallback we're just spin-locking, since we *know* that works.
15. https://github.com/bevyengine/bevy/pull/18635
Some dead code and duplicated shader loads :( Perils of merge conflict, and making things `pub`. Good cleanup: not vital for 0.16 but eh we can ship it: this is extremely low risk and might help. Merging.