luxe alpha-1.0+parrott focus sheet

sign up sign in

this focus sheet has come to and end!

Here we go! The first named alpha tag for luxe is upon us. I have tried to come up with some lower hanging fruit for people to get some contributions in - and with the first alpha there is a lot to figure out in terms of how we go about this so we will dive straight in.


As mentioned in about alpha focus - each alpha is going to be named after notable contributors that made luxe (and snow, flow and the snowkit collective) possible at one point or another.

The first alpha is named after Jon Wayne Parrott.

Years ago (2006? I have no idea), I was working with a different c++ tech stack - I met Jon hanging out on an IRC channel, and he became a good friend and my development sounding board. Whenever I had a code design challenge or issue to resolve, I could rely on him to sanity check my ideas and poke holes in everything I did. The same applied for snowkit.

At the time we met, he was working on an experimental 2D rendering engine called Phoenix and after redoing it - it wound up being a slimmed down rendering focused framework called phoenixCore. I really liked it, so I used it for a previous engine. Once I moved over to haxe, I loved the design of phoenix and I ported it over and started solving the issues we had run into along the way - so it's quite different from the original.

You'll notice the rendering backend in luxe is also called phoenix, this is where that comes from.

Jon has created many things - his current focus is an excellent Google Cloud Platform toolkit used around various large scale applications called Ferris. The latest version ferris 3 was released as alpha recently.


As mentioned, the first focus sheet is related to more common text issues and refactoring and some of the annoyances with the way tiles are drawn. One example is that tilemaps need an option for static layers to be a single geometry, so that each tile is not separate. Another example is that font options are semi flexible, but not flexible enough (like the alignment helpers and everything are all in one function internally, instead of exposed as helpers).

The list is shown below, and will change slightly in the time frame.

alpha sample

Each named alpha focus has a simple sample to address some of the frequently asked questions that aren't written as guides (yet) or don't even fit a guide - just a fun and simple practical code example to learn from.

click first to enable key input in the iframe

Click to run sample

The above example can be found inside the repo at samples/alphas/1_0_parrott and contains the following concepts :

  • rendering the entire default render path into a texture
  • applying a shader to this render path
  • simple state use to drive rooms/menus/states using .set
  • "transient"/stacked states using .enable/.disable

The code is heavily commented and to the point, so be sure to check that out because it mentions some pros and cons to things shown. The code can be found here online.

To contribute to a focus sheet

focus sheet

note that some tasks are still going to be trickling in over the next few days!


alpha~0 ish update log

In case you haven't been following the repo too closely, quite a lot of change and fixes and contributions have been made up until this point. [This is not a complete list! The complete list is here on github. These are just the most important notes of what has been changed recently, and to mention contributors that have been helping out. There have also been quite a few clean up and performance commits in there as well ommitted for brevity.

During the alpha it is still a good idea to check for commits and update regularly, and make sure you update flow and snow if they aren't up to date. Now that each alpha is named and there are milestones it will be easier to follow if you prefer a slower rate.

  • States; add missing destroy concepts to state, state machine. Added remove, kill and destroy (get em!) to machine and added destroy() to state. implement ondestroy in the state class to listen for when any of the situations (including shutdown etc) happen) commit

  • ColorHSL; Bugfix in ColorHSL.fromColor() (thanks le-doux) commit

  • CompositeGeometry; Removing geometry from CompositeGeometry unlinks their transforms. Added test project for this features. (thanks KeyMaster) commit

  • Debug; Log; fix default native trace as Sys.println doesn't work on android? (thanks Norgg for report) commit

  • Transform; MINOR CHANGE; transform is only decomposed automatically if flagged. read commit log for more commit

  • Batcher; add empty() starting construct for #119 commit

  • Texture; add load_from_bytearray, and remove unnecessary width/height params from load_from_resource and load_from_bytearray (thanks netgrind for report) commit

  • Texture; add load_from_pixels for already decoded pixel bytes (thanks netgrind for report)

  • Utils; Maths; add lerp and weighted average functions commit

  • States; fix null enter param and add remove leave_with convenience (thanks whuop for report) commit

  • ::MINOR BREAKING CHANGE:: TilemapVisuals; -> TilemapVisual commit

  • Tilemap; add batcher/depth/group flags for controlling tile map rendering easier short term (thanks @Dvergar for report) commit

  • BitmapFont; fix load timing issues where font won't draw in web vs native commit

  • States; add enabled query by name for checking enabled state without the state instance commit

  • SpriteAnimation; fix frame size uv defaults not being assigned for animated_texture type for set_frame as well as animation playback. fix #138 (thanks smvilar for report) commit

  • Parcel; change text/data types to include async flag and add a large text file to the test for web page crashing text assets commit

  • API; make sure text/data/json assets are not assuming sync and add async flag, allowing web requests to be async for large assets commit

  • Batcher; Added function to set blend equation (thanks KeyMaster) commit