So last blog post I mentioned that I wanted to refactor the renderer I use and also write a memory allocator and both those things are now done! It was a lot of work the last 3 months but I’m really pleased with the way things are going.
Zest Pocket Render
So I did a complete rewrite of the renderer (based on the previous one) and also re-wrote it in c which I really enjoy using. Zest is a very minimal but flexible renderer which currently focuses on rendering sprites and billboards (for obvious reasons!). It’s a double header single c library with only Vulkan SDK as the dependency. This makes it easy for me to use to demonstrate how to make use of TimelineFX (which is render agnostic of course). Due to the simplicity of Zest it should be easy to translate rendering particles into your own renderer – or even just use Zest if you want! The new renderer also performs better then the old one. You can check out Zest here.
One of the good things about Zest is that I’ve also been getting it running on Mac (not quite there yet though with the latest version), so that means that a Mac version of TimelineFX should not be too far away.
I also made my own allocator based on an allocation algorithm called Two Level Segregated Lists. This allows you to create a large pool of memory and then sub allocate from that pool rather then constantly making allocation requests to the OS. I’ve been using this in the renderer to great effect and next I plan to implement it into TimelineFX whose memory management is ok but could be a lot better. This should also squeeze out more performance as well. If you’re interested then I’ve also made this open source as well here.
Also worth noting that the allocator can also be used to manage memory on the GPU as well which is what I’ve been doing with the renderer.
Now that’s out of the way I’d like to push ahead with a refactor of TimelineFX to give a good clean up and implement the memory allocator. I’ll probably keep it to a C++ library but a lot of the refactor will probably involve making it more C like in a lot of ways as I just prefer this coding style. I also think it makes it a lot easier to integrate into your own games/applications and also bindings to other languages. Onwards!
Here’s the full list of changes in the latest version.
* This build of TimelineFX includes a rewrite of the render used to render the editor: Zest Pocket Renderer
* Fixed issue with single spawn amount not spawning enough particles.
* Update mode wasn’t saving properly in the config.
* Fixed floor height not being adjustable for 3d effects.
* Use background image working more effectively now.
* Background image scale y now saves properly to the configuration file.
* You can now alter the tint of the background image separately to the checkered/empty background colour.
* Preset effect previews have a fixed background colour separate to the preview tab background colour.
* Effects with a single loop amount above 1 now interpolate smoothly when the particle age gets reset back to 0.
* Graphs that are greyed have a more clearer tool tip describing why they’re greyed out.
* New effect libraries are no longer dirty by default so the save confirmation won’t pop up anymore unless you actually make changes.
* Controlling the 3d camera view is now a lot smoother.
* New mouse sensitivity setting for controlling the camera in 3d, in the camera settings of the preview tabs.