Note: I apparently forgot to publish this blog post until now. It was all written up by the end of May, I promise!
May was a busy month for my person life - I took almost two weeks off in the middle of May to visit my girlfriend, so not as much happened in May as has happened in other months. Some interesting stuff did happen, though!
One of the major differences between OpenGL and Vulkan is that in OpenGL you don't have to worry about the swapchain, but in Vulkan you do.
What's the swapchain? It's a list of images that are presented to the screen. When Nova renders a frame, it renders to one swapchain image. While that is being drawn to the screen, Nova uses the next swapchain image. While that's being drawn, Nova renders to the next swapchain image...
There's a lot of complexities here that OpenGL hides from you, whereas Vulkan lays the swapchain bare and makes you handle it. Figuring out how to deal with that took up a lot of time in April, and it took up about a week in March - but I've finally got it.
Oh descriptor sets... they're a lot of fun. They're roughly equivalent to uniforms in OpenGL, but they're a lot more involved and I was not prepared at all. It's taken most of the time I've worked on Nova in May to figure them out. Because of how Vulkan works it makes the most sense to have each material manage its descriptor sets, which is something that took me far too long to realize. There's a few bugs left in the descriptor set code, but the actual architecture for how I update and bind descriptor sets is in place
As I said in the intro, I didn't have a ton of time for Nova in May - but I had some time, and I made some good progress. Work on Nova continues...