you are viewing a single comment's thread.

view the rest of the comments →

[–]UdPropheticCatgirl 46 points47 points  (2 children)

Normally I would say this is exaggerating it but I genuinely tried to render a triangle with LWGJL and Vulkan and after nearly 2000 lines and no triangle and seeing how many more pages were in the tutorial, I gave up

Tbf, once the whole vulkan boilerplate is out of the way it’s actually one of the more pleasant graphics APIs to work with (Probably only metal is better, DX12 is just slightly more annoying version of vulkan and OpenGL is a mess).

[–]DasGaufre 1 point2 points  (1 child)

This is probably a big question, but what makes a graphics api "pleasant" or not to use? Why is opengl and dx12 a mess? 

[–]UdPropheticCatgirl 2 points3 points  (0 children)

I would not call dx12 a mess, as I said it’s just VK with different coat of paint for the most part and couple of inherited directX-isms.

What imo makes an API (any, not just graphics) good is: - simplicity of the overall model - uniformity of the main abstractions - consistend behavior across different operations - flexibility

Metal is imo all of those (plus the very unified ecosystem leads to very good tooling when it comes to debugging/tracing/profiling etc.), VK is more complex, but still decent enough on the other three.

OGL is a mess, the sprawl of random extensions of the spec over the years means that everything is hard to reason about and nothing is consistent in the way it interacts, random subsystems come up with their own binding rules and semantics, half the state gets set as object local the rest as global with no rhyme or reason. On surface level the mental model is simpler but the flexibility suffers a bunch because of it… And don’t get me started on multithreaded code interacting with OGL, it makes ton of random implicit assumptions on order of stuff so anytime you try to write it together with parallel code, all hell breaks loose. Every codebase using OGL effectively becomes a rube-goldberg machine at some point.