Unfortunately a little later than scheduled, I'm happy to announce the release of Simulant 21.06!
Due to me moving home it's a little less feature packed than some releases, but, there's still plenty to see! Without further ado, here's the new shiny!
The Dreamcast natively supports a kind of texture compression called VQ compression. It's a remarkably memory efficient way of supplying texture data. Of course, other platforms don't natively support VQ compression in hardware so that makes it tricky to support in a cross-platform way.
In 21.06 we've added support for .dtex files which is the output format of the excellent texconv utility. When loading .dtex files, VQ compressed formats are loaded directly to hardware on the Dreamcast, but decompressed in software on other platforms! This allows you to ship a single compressed image format for use everywhere, with the caveat that decompression will hit loading times (and of course, memory) on non-Dreamcast platforms.
Up until now, Simulant has been using the
unicode type to deal with file paths. However, paths are not always valid unicode and so should not be stored in a unicode type. Instead Simulant now uses a new
Path type that is based on
std::string. This will behave more correctly, and also be more efficient.
Previously each Mesh got its own VertexData instance, and each SubMesh got its own IndexData. This could potentially be very wasteful. Now you can pass a VertexDataPtr or IndexDataPtr during Mesh or SubMesh creation respectively and these can be shared across multiple meshes/submeshes.
We now have an automated Doxygen build process that generates up-to-date API documentation which you will always be able to find here.
get_platform()is now Global
Previously information on the platform an app was running on was available via the
window property. This made little sense, as by definition the platform is global state.
Now in addition to
get_app() which was added in the last release, there is now a global
get_platform() function that returns a
Platform* so you can query information about the system (e.g. how much memory is available etc.)
Up until now you could enable fog in some capacity on the stage, this API has been removed in favour of fog being a Material-level property as it should always have been. The additional properties are:
Texture formats previously didn't allow for different component orders (e.g. BGRA) and some formats were ambiguous. These problems have now been rectified with better texture format naming.
You can now pass
TextureFlags when loading skyboxes to have full control over the kind of filtering etc. that takes place.
It's a common case that you'd like a stage node to "follow" another node, but without any kind of hierarchical re-parenting. For example, once you've created a skybox, you'd probably like it to stay positioned around your camera. Previously you could use node parenting and the (brittle)
StageNode::lock_rotation function, but this has now been replaced with
To unlink you simply pass
Previously sounds used a constant buffer size, but this could mean that high quality audio could suffer from drop-outs. Now the buffer size is calculated based on the bitrate of the audio.
A little bit of API clean up.
Source is now named
SourceInstance is now called
PlayingSound. This makes the API much clearer.
That's it! There's the usual scattering of bug fixes and small features but 21.06 is a big leap forward in just a few months!