mastodon.gamedev.place is one of the many independent Mastodon servers you can use to participate in the fediverse.
Mastodon server focused on game development and related topics.

Server stats:

5.4K
active users

Welcome back to Monday's edition of the ! Well, they're always on Monday 😅 But! If you like , or , I think you'll enjoy following along as I help merge Bevy's community-approved PRs.

Check them out at: github.com/bevyengine/bevy/pul

As we've already cut the 0.16 release candidate, we're only looking at 11 of the 14 doubly-approved PRs: only fixes at this point. The whole community is pulling together to polish and test as best as we can <3 The other work can wait until after the 0.17 release: there's no sense risking new bugs!

1. github.com/bevyengine/bevy/pul

A serious performance fix for nine-patched sprites and 2D text. I'm relieved to see this got two rendering reviews finally (after I nagged!): we had a nasty perf regression in 0.15 that we didn't spot. Francois has plans there though: dedicated hardware for benchmarks??!

Objective
Instead of extracting an individual sprite per glyph of a text spawn or slice of a nine-patched sprite, add a buffer to store the extracted slice geometry.
Fixes #16972
Solution

New stru...
GitHub`ExtractedSprites` slice buffer by ickshonpe · Pull Request #17041 · bevyengine/bevyBy ickshonpe

This is a nice PR though: the core strategy is "reduce allocations". Shocking! ;) Really nice performance benchmarks: you know you're in for a good time when the histograms don't overlap at all.

Unsurprisingly for ickshonpe, the code is clean. There's a few doc nits, but they're not worth blocking.

2. github.com/bevyengine/bevy/pul

Some security-oriented fixes for assets! That's fun: Bevy really is maturing. Asset loading/saving is one of the critical security surfaces for a game engine: file system access is *sensitive*.

While game devs can obviously access whatever files they want by virtue of, you know, using a real programming language, malicious assets (think modding!) shouldn't be handed free arbitrary file system access by pretending to access related assets.

Alice I. Cecile

Very happy with this after some feedback-polish cycles. Secure defaults, good docs, escape hatches, sensible plugin-based config. Sweet! While this doesn't actually take advantage of the memory safety of , this sort of secure-by-default design is definitely in line with its philosophy. Merging.

3. github.com/bevyengine/bevy/pul

A dependency bump for accesskit, the delightful cross-platform cross-framework accessibility framework that we use. We should definitely do a better job with integration, but this is an important chore. Merging.

4. github.com/bevyengine/bevy/pul

A performance improvement for bloom: that neon-y glowing light around bright regions that can either be really pretty or painfully overused!

No benchmarks, but I trust IceSentry and Jasmine that this is a sensible performance design for a minor feature. Merging.

5. github.com/bevyengine/bevy/pul

Another little dependency bump, this time for bincode. I am eternally grateful for the contributors who do these random little chores for us! Not vital for 0.16, but it's not going to conflict with anything (slow changing region of the code, small changes), so eh...

6. github.com/bevyengine/bevy/pul

A re-export to reduce stutter in some new entity collections. Fair enough. That's exactly the sort of papercut that you only see after people try out your code. Thanks release candidate process! Merging once conflicts are resolved.

7. github.com/bevyengine/bevy/pul

One thread at a time, we're untangling our rendering code organization. This time, by preferring the lighter-weight bevy_mesh over the bevy_render crate that depends on it. The way that parallelizes compilation by crate has really far-reaching implications :/ LGTM.

8. github.com/bevyengine/bevy/pul

Panics are bad! Don't panic! In this case a user was running into surprising panics from weird temporary files created by their IDE. We can gracefully handle this by simply not unwrapping in our asset code. +2/-2 with a couple of unwraps becoming ? operators. Perfect.

9. github.com/bevyengine/bevy/pul

Apparently a) floor and ceiling operations are not no_std compatible (bizarre!) and b) bevy defines a no_std equivalent for floor but not ceiling. Anyone know why?

Anyways, yes we should have both. Merging.

10. github.com/bevyengine/bevy/pul

Oh hey, this one is mine! I've spent the last couple of days cleaning up a messy corner of our ECS. Back in 0.15, we introduced `Single`, which skips systems when a query doesn't contain exactly one entity.

This change however made systems with missing resources (via Res) silently fail to run, which was a very frustrating debugging experience. 0.15.1, for better or worse, made *all* system param validation failures panic. This fixed the problem for resources, but made Single (and Populated) useless.

With one of our release focuses being on better error handling in Bevy's ECS, this felt unacceptably sloppy to NthTensor, and I agreed! In exchange for some work on the release notes process that I was feeling sketchy about, I decided to take a crack at fixing it.

After a couple of PRs, I'm quite happy with the state of things! Each system param can decide what the result of validation failure should be, and any errors get kicked back to the global error handler: panicking by default but that can be easily swapped to simply logging in prod.

A few days work, and a bit beefier than I'd really like to ship in the release candidate, but I was not thrilled with how we handled the 0.15.1 patch for this process. It feels good to make it right, and come up with an elegant design that folks are happy with. Merging: this has multiple approvals!

11. github.com/bevyengine/bevy/pul

I love caching bugs 🙃 This time, point lights moving. These are tricky to catch because our automated rendering tests (and test scenes) are largely static. I suspect an editor and some good test scenes will help catch these faster. Good fix though, merging.

And that's all for this week! Next up, I've got to tackle the release notes in earnest, roughly following the plan in github.com/bevyengine/bevy/iss. I'm eager for the end result, but dreading the migration process to get there. Maybe I'll hop in the voice chat for moral support? Y'all rock <3

@alice_i_cecile I like it, it's a good middle-ground!

@alice_i_cecile I’m really happy it panics by default but users getting to choose their handling is even better, and parameters choosing was more than I had imagined so yay!

@alice_i_cecile 10. Is my favorite! So glad we have again a concise way to define the run condition in a localized manner.