I’m considering the idea of a higher-but-still-pretty-low-level library to reduce the time and cost of Vulkan development. The basic problem, as I see it, is this:
- Application code is complex
- Vulkan code is complex
- Trying to interface these two things directly is extremely time-consuming and results in a large amount of complicated and brittle code.
I believe an intermediate graphics library, perhaps modeled after OpenGL’s API style, would greatly improve programmer efficiency with no loss of performance and allow more agile application development. WebGPU and ANGLE are proof this approach can work well, but unfortunately those libraries are both “lowest common denominator” abstraction layers that each offer less functionality than even OpenGL 4.6.
I am curious to hear if other developers around here recognize a need for reducing development time and costs with something like this? I have a lot of experience with Khronos graphics APIs and could probably write the whole thing myself, but would prefer to collaborate with others if there is a general need for this.
My general concept right now is like a cleaned-up version of OpenGL 4.6, with the following additions:
- glInstance objects
- glPipeline objects
- glCommandBuffer objects (probably this is how multithreading would work, although I would not force use of them)
- Raytracing support
- Lots of additional error checking in debug builds
I think it would be possible to make an example of a spinning cube with raytraced shadows in less than 150 lines of code, as well as more complex applications that would be indistinguishable from a pure Vulkan app.
Attached is some concept code I wrote down. Please let me know if this idea interests you.