Modern 3D graphics programming mostly abstracts to:
- Load standard gLTF shaders into GPU.
- Create mesh objects. Send to GPU.
- Create texture maps. Send to GPU.
- Create light objects. Send to GPU.
- Create 4x4 transform matrices. Send to GPU.
- Create objects referencing meshes, textures, and transforms. Send to GPU.
- Create camera transform matrix. Send to GPU.
- Tell GPU "Go!".
Beyond that, it's mostly special effects, such as atmosphere, lens flare, etc.
Most of the headaches today involve managing the memory in the GPU, for which there are libraries.
[1]: https://docs.rs/wgpu
Big players have always used their own 3D APIs since the dawn of 3D graphics.
CUDA is kind of winning it for nvidea.
CUDA is winning on compute exactly because of that as well.
Think I’d prefer to write 3 backends for Metal level complexity APIs than a single one targeting Vulkan.
There are some steps into that direction with LunarG SDK efforts, NVidia was the one coming up with C++ bindings, but that is mostly it.
Nothing as nice out of the box as the proprietary APIs.
A guy from a studio I know has best described it, as one needs to be a graphics developer and a device driver expert to properly code against Vulkan.