Hello everyone, please join me for the November 2018 update for Nova!
As mentioned in the last blog, I started a new job in late October. Much of my time in November has been taken up by that job, which is just how things go sometimes.
The first work I did in November was getting the DirectX 12 render backend’s shader loading working nicely. Nova converts all shaders to SPIR-V before sending them to any render backends, so I needed to convert from SPIR-V to DirectX 12 HLSL. Doable, but incredibly non-trivial - I spent most of a week on the conversion code, even though I was able to use SPIRV-Cross to handle most of the translation.
I then started working on loading and rendering meshes - the core part of Nova. Nova will use indirect rendering to draw meshes, which means that I needed to put meshes into as few buffers as I could. I spent a couple weeks making a mesh allocator. I actually tried a few different ideas before settling on a block allocator that can compact its allocations if needed - if there’s enough total free space in the buffer for a new allocation, but no blocks are large enough, the allocator will move data towards the front of the buffer until all free space has been filled.
Once mesh memory was allocated, it was time to render meshes. This is the crux of Nova, and I expect it to take a long time to get right. One of the major challenges is how to make rendering things multithreaded. I definitely want Nova to be able to take full advantage of all cores, but how to do that while staying sane is…difficult. At the time of writing this blog post I’m making a command buffer for each VkPipeline and synchronizing them…somehow. There’s a couple of unknowns in there.
Additionally, near the middle of November I decided to leave Continuum Graphics. For a while now I have been responsible for maintaining the server infrastructure, and unfortunately that took far too much time away from Nova, especially with working a full-time job. Nova needs all my free time, and now it can have it. There are no hard feelings between me and the Continuum team, and we are all still friends. This is just a time management thing.
My plans for Nova have not changed in the slightest. I’ll still be working tirelessly to bring everyone the best possible general-purpose renderer, and to integrate it into Minecraft and eventually other games. Leaving Continuum Graphics has given me the time to make that happen.
I won’t be making blog posts about Nova any more. The best way to keep up with development of Nova is to join the Nova Discord server, where I hang out pretty regularly. There’s also a Twitter account, but I mostly use that for big announcements. I’ll still be hanging out in the Continuum Discord as well.
That brings us to the end of the final Nova progress update on the Continuum Graphics blog. Everyone’s support for my project has been incredible, and I only hope that I can deliver something that meets your expectations - Dethraid