https://github.com/SingularityAzure/AzCore
So I’ve hinted at this project a little bit, but I haven’t actually talked much about it. So here’s the elevator pitch.
It’s a low-level framework designed to be relatively simple and easy to understand, such that developing cross-platform programs with Vulkan isn’t a massive headache.
Why did I do this? Well, basically from the several projects I’ve worked on over the years, I’ve had to develop tools to solve these low-level problems, which I’ve copied and adapted from one project to the next. AzCore is just a slight formalization of that concept, where the tools are there in source code, ready to be dropped into a project and adapted to fit the needs of that project. So on the topmost level, it’s just some of the tools from my projects.
The biggest undertaking in formalizing these tools has been the Vulkan framework. Basically the way I wrote the Vulkan renderer for my game involved a lot of structures that made it easier to interface with the Vulkan API. These are things like Descriptor Pools being automatically generated by providing them with information about the descriptors you need, which saved me tons of time and energy in developing the game. AzCore’s “vk” takes those concepts and applies them to the whole API, not just choice parts of them, and allows you to instead define your Vulkan code in the form of a tree. This preserves the model used by the Vulkan API where you tell it about your program ahead of time, rather than defining everything on-the-fly like in OpenGL and DirectX11 and below. It also significantly reduces the headache that the model generally seems to cause by reducing the necessary lines of code by a factor of ten, allowing you to make a feature-full renderer in a few hundred lines of code, rather than the several thousand it would take with raw Vulkan code.
My goal with this wasn’t so much to be an all-encompassing framework that does most of the work for you. What it’s really designed to do is give a good starting point to the kinds of people who don’t want to use an engine. In that light, it handles some low-level things, like keyboard input, in a way that gives the developer a uniform interface on all platforms, but it doesn’t make many assumptions about what the developer is actually trying to do. It’s not trying to specialize in anything.
All that said, from a pragmatic standpoint, there are some assumptions in place regarding the current usability of the framework. There are a few things that I personally haven’t needed to implement yet, and so some of those things are on the TODO list.
There are also a number of things I have little chance of developing myself, such as a Mac port, since I don’t currently and probably will never own a Mac. Also Apple is deliberately dropping Vulkan support, the bastards. That said, the nature of the project being open-source means that someone else is welcome to implement the same functionality for Mac, and I’d be happy to pull that work into the main project.
As for the available examples, I plan to add many more advanced ones to showcase the power of what I’ve cobbled together over the years. Also, while the Vulkan framework is currently capable of handling somewhat simpler workloads, things like compute pipelines, complicated render passes (ones with inter-subpass dependencies), and multi-view rendering are currently on the top of the TODO list. But let’s be honest, if you’re just learning Vulkan you probably won’t need any of that.
So there’s a quick and dirty explanation of what AzCore is all about. Now that it’s reached this stage, I’m almost ready to work it back into the game. Look forward to more updates on that in the future.
Until then, happy coding!