Minimum Viable Extension Branches (MVEBs) - bryanedds/Nu GitHub Wiki

What are MVEBs about?

In a weekly team meeting, we surfaced an idea that one possibly optimal way to add opt-in features to Nu is with permanent public branches where each branch features a minimal viable engine extension. Say if we wanted to prototype a render graph feature and also provide that as an example for users to make their own render graph variants, we could build, ship, and maintain such a thing on a permanent public branch. This could be an optimal approach for when -

  1. We don't want to add a big new feature to Nu that users might prefer to implement as a smaller-scoped version tailored specifically to their game's needs. To continue with the render graph example, there are many different ways to implement them with different scopes and trade-offs - and most non-AAA games only need partial, simpler implementations instead of a large, fully-generalized, do-it-all render graph.

  2. By maintaining our minimal viable engine extensions on permanent branches, we avoid over-committing users to a specific implementation, especially when they would rather implement their own variant of such a feature from scratch. Often users would rather have an understandable example to build their own variants by rather than being forced to modify / extend / hack an existing implementation to meet their actual needs.

MVEB usage workflow

The appropriate workflow to use an MVEB is to git merge it into your user development branch on your fork of Nu. Since each MVEB will be kept up to date with master, you should only merge an MVEB after making sure that your fork is up to date with master and your development branch is merged with your fork's master branch.

If you're unsure about whether you want to commit to an MVEB, you can create a secondary development branch that you only merge up once you want to commit to the MVEBs that you've merged into it. Once you merge up such a branch, the only way to back out of that dependency is a git revert of the MVEB merge revision(s). Each MVEB merge will need to be git reverted in order from latest to earliest to ensure a clean removal of said MVEBs.

Currently Provided MVEBs

mveb/eye-margin

This MVEB allows the viewable window space to stretch beyond integer scale of DisplayVirtualResolution without pixel aliasing - which is not an easy thing to do with a game engine. This functionality is provided as an MVEB for two reasons -

  1. This is a feature that anyone shipping on mobile will probably need and perhaps people on desktop as well.
  2. However, this is a particularly complicated and difficult feature to get right and was done by someone other than the primary maintainer of Nu. The primary author of Nu hasn't yet had the time to sufficiently analyze this branch to ensure its completeness across all supported platforms.

Planned MVEBs

https://github.com/bryanedds/Nu/issues?q=label%3Amveb

Discussed MVEBs

https://github.com/bryanedds/Nu/discussions?discussions_q=label%3Amveb+