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!