Simulant Alpha 3 Released

It's been 6 months since the last Alpha release of Simulant and it's now time for another! In fact this 6 monthly cycle has become an unintentional habit that I may as well continue!

So what's new since last time?

Well first let's look at the stats:

 382 files changed, 12986 insertions(+), 7013 deletions(-)

That's a fair amount of code churn! Lots of deletions, lots more insertions, so what to do they add up to?

  • Memory management for manual objects has moved to an improved pool system to reduce allocations and improve performance
  • Brand new hierarchical material property system
  • More consistent object management APIs
  • Added a gprof compatible sampling profiler to the Dreamcast build
  • Made Octree depth configurable in the Geom culler
  • Reduced memory usage of Geoms
  • Added a loose Quadree Geom culler
  • Improved render queue performance
  • Improved render queue ordering sequence
  • Made "nameable" objects consistently use std::string for names, rather than unicode for reduced memory usage
  • Added iterator classes for better and faster iteration of Simulant containers
  • Moved to a new default vertex structure for better Dreamcast performance
  • Update to latest GLdc on the Dreamcast
  • UI widget rendering has been refactored for performance
  • Added support for loading .wav audio files
  • Implemented 3D positional audio
  • Allow setting pitch, gain and reference distance for sound sources
  • Conditionally generate mipmaps on the Dreamcast when possible
  • Improved the performance of MD2 animations
  • Renamed "ask_owner_for_destruction" to "destroy"
  • Standardised on "clean_up" rather than "cleanup" across the API
  • Fixed bugs with shininess in .obj model loading
  • Started moving to a transactional API for asset manipulation
  • Allow linking Pipelines to Scenes
  • Fix wrong RAM usage being displayed in Windows
  • Add a RAM usage graph to the stats panel
  • Huge refactor of particle systems
  • Allow specifying multiple materials for a mesh and selecting them per-Actor (multiple skins)
  • Various controller mapping fixes
  • Roll back to an earlier glibc on the automated builds for more portability
  • Added support for integer packed normals
  • Added support for unsigned byte vertex colours
  • Added more utility functions (e.g. smoothstep)
  • Allow controlling blending when loading meshes from file
  • Improved the speed of font loading
  • Improved the built-in font files
  • Improved the performance of applying staged writes to the partitioner
  • Switched to the frustum partitioner by default (spatial hash is still experimental)
  • Build a debug release of Simulant for the Dreamcast on CI
  • Fixed issues with Camera::unproject
  • Many many other bug fixes and performance enhancements!

Massive massive thanks to @freakdave for his great contributions to this release. And also a shout out to @HaydenKow for generally being a great mentor, and everyone else on the Simulant Discord for generally being awesome!