Releases: jonathanhogg/flitter
Release 1.0.0b16
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()andoctnoise()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 toangle(). 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,!feedbackand!noisenodes. - 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
!physicsextra-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=falseon 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. --autoresetidle state resetting was dumped – it no longer achieves what it was intended to.
Breaking changes:
- The
clockglobal name has been renamed totime. None of my code was usingclockanyway 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=andspecular=attributes on!materialhave gone away. This was always a hack once I adopted PBR. You should be usingroughness=andmetal=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
Release 1.0.0b14
This release has the following changes from b13:
- Reworked the AST to be a pure expression tree, removing the ugly special pleading done for
Topand also:- removing
Letand makingInlineLetthe onlylet(whereis just syntactic sugar) - making
Importintroduce names into a sub-expression the same aslet - ditching the
StoreGlobalstuff in favour of a newExportmechanism that is injected into the last leaf of the AST via a parser rule matching EOF - extracting pragmas at parse time and storing them directly on the
Programin the compiler
- removing
- Tighter restrictions on module imports – no more access to state – which allows module exports to be cached so that they are only run once (unless the source file changes)
- Addition of anonymous functions with new
func(x) x*xsyntax - Simpler for loops in the VM with the addition of tracking the number of bindings being done on each iteration in the
LoopSourcelist; this allows ditching a few instructions from loops and dropping unnecessary operands from the loop instructions - A fix for a bug in simplifying on static state (it would collect old keys)
Plus it adds a heap more tests for the language in the form of unit/regression tests of the simplifier and compiler, and a bunch of integration tests of the language that test the interaction of the parser, simplifier, compiler and VM. Excitingly, these new tests unearthed a few significant bugs in the semantics and also shone a light on corners of the simplifier that could benefit from more work.
This release touches a lot of dangerous code in the language, but thanks to that mass of new tests I'm feeling pretty confident about it.
Release 1.0.0b13
This is just a packaging change over b12.
Release 1.0.0b12
This release includes:
- New rough n' ready translucency support
- OpenGL ES improvements
- A mass of fixes around using symbols with controllers
- Support for multi-pass shader nodes
Plus the usual background noise of fixes and small improvements.
Release 1.0.0b11
This release includes:
- Improved support for Windows
- Compatibility with OpenGL ES
- New "prime" identifiers in the language – these are identifiers that have one or more single quote "ticks" at the end (this is a feature that is borrowed from Haskell)
- A few bug fixes.
Release 1.0.0b10
This release is under-the-hood changes to get Flitter building on Windows.
Release 1.0.0b9
This release introduces some functionality changes:
!physicstracks starttimeinstead of lasttimeand maintains a zero-based internal clock- The
counter()function has been dumped in favour of new!counterobjects
Additions:
!physicssystems can insert additional time steps if spare CPU to catch up on missed steps- Approximations of sphere and line/capsule lights are now available in
!canvas3d
Fixes:
- Specifying spotlight cone sizes was broken in the b8 release
Release 1.0.0b8
Packaging test release.
Release 1.0.0b6
This is largely documentation changes, but also contains a significant language change: indexing now wraps instead of returning null outside of the vector bounds.
Release 1.0.0b5
Minimal code changes, but solid attempt at getting the docs in order and consistent.