Skip to content

Release 1.0.0b16

Pre-release
Pre-release

Choose a tag to compare

@jonathanhogg jonathanhogg released this 25 Jul 19:45
· 490 commits to main since this release
v1.0.0b16
99d8e8f

This is a pretty big release that includes:

  • A bunch of changes to support running coverage analysis against the tests. This is now done automatically in a GitHub workflow so you can continuously judge me on that last stubborn quarter of the codebase that is untested
  • I did actually add more tests too though.
  • I also fixed a few bugs that that testing revealed.
  • An implementation of 4D noise was finally added to the built-in noise() and octnoise() functions. I have also finally properly attributed the source of the noise implementation.
  • The sample() function can now take a 2n-vector of coordinates to sample and will return a 4n-vector of RGBA color values.
  • A new length() function was added as a matching function to angle(). This allows a 2n-vector of cartesian coordinates to be turned into a n-vector of polar distances.
  • The simplifier was completely reworked to return the original Expression() nodes when no simplification is possible. This means that the simplifier is faster (as it is doing less object creation) and the engine is able to skip recompilation if simplifying on state results in no change to the tree. This generally means that state simplifying is less noticeable.
  • Some simplifier rules were tidied up.
  • A few VM optimisations were added (including a new ability to swap instructions where that usefully allows further optimisation to occur)
  • A bunch of improvements were made to multi-pass !shaders that allowed all of my standard shaders to be moved in-engine as nodes. So you can now use (more flexible) !blur, !bloom, (color-) !adjust, !feedback and !noise nodes.
  • Matrix maths was optimised by speeding up the creation of result matrices.
  • !slice-ing of models is now done using manifold3d, which means it actually works instead of sometimes spitting out hopelessly broken meshes.
  • Making meshes watertight for CSG operations has been made saner and is now cached.
  • The !physics extra-frame logic was completely redone as it had a habit of producing horrid visually-obvious speeding up of simulations.
  • 3D models are now cached forever and without limit. The LRU logic was a waste of time: if you're generating too many models to fit in memory then you have other problems that the cache can't solve.
  • Instance depth-sorting can now be turned off with depth_sort=false on render groups. This is useful if you're creating thousands of small models and the sorting wastes more time than early fragment discarding can save.
  • --autoreset idle state resetting was dumped – it no longer achieves what it was intended to.

Breaking changes:

  • The clock global name has been renamed to time. None of my code was using clock anyway and it wasn't consistent with the way I use the idea of frame time everywhere else.
  • The (very weak) compatibility with the pre-PBR material model has been dumped. This means that the shininess= and specular= attributes on !material have gone away. This was always a hack once I adopted PBR. You should be using roughness= and metal= instead.

Exciting new thing:

  • Flitter now has plugins. In fact, all of the internal logic is implemented as built-in plugins. However, you can now add your own top-level renderers, window (OpenGL) nodes, controller drivers and DMX interface drivers through Python package entry points and an entirely undocumented API.

Full Changelog: v1.0.0b14...v1.0.0b15