Yep. It's my thesis that early GL APIs feel beginner-friendly because they are so hand-holdy, one-step-at-a-time. But, they end up more complicated when you get serious and they instill bad practices.
Instead, the "modern" APIs allow you to leverage your pre-existing knowledge of "allocate arrays of structs and start indexing them." That's not trivial. But, it is already familiar. And, it ends up a lot better in the end compared to "Invoke whole lot of functions to manipulate a hidden state machine."
I still think that OpenGL is a better place to start learning 3D because there is so much less bookkeeping to do regarding memory and concurrency vs. Vulkan. I'm working on a "Post-Modern OpenGL" tutorial that exclusively teaches the most "modern" (merely a decade old) APIs and practices of GL 4.6. But, writing is slow going...
If you are going to use Vulkan, check out https://howtovulkan.com/ Vulkan started with a lot of compromises to make mobile hardware happy at the expense of making everything overly complicated on desktop. Over the past decade, desktop devs have managed to get a lot of features added to make Vulkan on desktop more sane. How To Vulkan covers that newer approach. This recent video "It's Not About the API" https://www.youtube.com/watch?v=7bSzp-QildA shows how simple it can be if you let it.
And, if you are on a Mac, folks who use Metal like it a lot. Don't worry about lock-in. Once you learn the basics, knowledge is easily transferable to DX12 and Vulkan. You should plan to write 3 or 4 renderers to throw away anyway :P
For the joy of building, I'd say LLMs are still great for questions, rapid-prototyping and code reviews. And, beyond that: Who cares what others do? Build what brings you joy.
As @petecordell put it: "Telling a programmer there's already a library to do X is like telling a songwriter there's already a song about love."
I'm the opposite. Between work and family, I don't get a lot of time to hole up in a cave with an IDE for fun. Prior to LLMs, it was a struggle to get much of anything done. So, I rarely tried. But, now I can get ideas fleshed out and even get code down in the small breaks I get to myself. Now I'm making progress where I wasn't before.
Sometimes I'm not interested in the inner workings of a technology, I just want a one-off tool. Ex: No interest in web tech. But, vibe-coded a tool to scrape and cross-reference a couple of online reports. Now I have the info I need for other projects.
Sometimes I know exactly what I want and it's quicker to hand-hold the AI through making it for me. Ex: Put together yet another SIMD math lib recently. SIMD intrisics are an obnoxious API. But, a non-SIMD implementation is easy to verify and many SIMD implementations are easy to validate vs. the non-SIMD reference. It's just a huge amount of obtuse code.
Sometimes I don't know exactly what I want and it's great to have a always-online partner to bounce questions off of, do rapid-prototyping for me, do code reviews for me. AIs aren't perfect. But, being instant, patient and often right makes them a huge improvement over online forums.
Lots of people start out with a non-programmable config format. But, as their situation becomes more complicated, they end up shoehorning in programmable-ish features until they realize they are running straight into https://en.wikipedia.org/wiki/Greenspun%27s_tenth_rule and decide to do it properly.
Classic SSAO is very similar to performing an "unsharp mask" based on the depth buffer. This has been proposed "a simple and efficient method to enhance the perceptual quality of images that contain depth information" in the paper "Image Enhancement by Unsharp Masking the Depth Buffer" which came out a year after SSAO was published by Crytek.
This is a very important paragraph from quern's article
> There are few to no side-effects to melatonin use in adults (there is uncertainty about the risks & benefits in children & adolescents28), and it is not addictive or habit-forming like caffeine is. The usual dose for a night is 0.5-3 mg and I take 1.5mg [29]; my dose is highly likely to be too high. High doses may well be responsible for why some people try melatonin and report that it does nothing or hurts them, since in one study, the best dose for old people was 10x smaller (0.1mg or 0.3mg) and for one blind person, 0.5mg [30 31 32] . Zhdanova et al 1996 found 0.3mg & 1.0mg to affect sleep onset similarly. A study of delayed-release melatonin found with their high dose of 4mg (but not 0.4mg) elevated melatonin levels 10 hours after bedtime ( Gooneratne et al 2011) - potentially interfering with waking time.
It is difficult to find doses as small as 1mg sublingual (dissolve under the tongue) in my area. Everyone is trying to sell you 5-30mg chewables. And, I expect everyone is buying them under the assumption that more is better. But, here it explicitly is not.
The way melatonin works well for me is to wait until I'm already settled into bed and should be asleep, but I'm not. Do a couple body scans to relax for real. Try to think about something mindless. Then if I'm still awake, pop 1mg under my tongue. I'll usually wake in the morning with half of it drooled on my pillow :P
I’m not a scholar of the fall of SGI. But, I’m sure it has been documented in detail.
AFAICT, SGI was a textbook Innovator’s Dilemma case with an expensive enterprise product that’s hard to give up in the face of cheap, low-margin competition.
Back in the late-90s/early 2000s boom it was not a secret that enterprise corps pushed universities to teach Java because they wanted easily-replaceable widget engineers engineering easily-replaceable widgets.
On the opposite side, startups building on difficult languages like Haskell, Elixir, Erlang have a built-in bias towards hiring a team that can get a lot more done with a lot less people. Great for startups. Terrible for enterprise.
Old 3D engine guy here. I highly encourage folks to make a 3D engine for fun and learning. Shipping a game with it would be a cherry on top. Come join us in r/graphicsprograming, r/gameenginedevs and the graphics programming discord.
But, if you made a mesh you wouldn’t be able to represent fuzzy objects. That’s one of the major advantages of both splats and this printing technique.
The original paper that kicked off the movement a few years ago used Gaussian blobs because gaussians are differentiable and the tech to analyze a scene requires the tech used for rendering to be differentiable.
I always liked the advice "Abstract for replacement. Not for reuse."
If you have code that is reusable, you'll want it to have a nice interface. But, you don't need an abstraction on top of a nice interface. Just use it.
For abstraction, what you need to focus on is "What is most likely to change in the future?" You want to put in abstractions that will make those changes low-cost.
Ex: At work there was a small debate about which C++ JSON parser to use with no stand-out winner for our framework's needs. So, we picked one and I put a thin layer over it for everyone to use. We have since then swapped out the parser and swapped it back over the years of a hundred devs using it in our framework and no one noticed the swaps.
> The operation is finished when the progress float reaches 1.0 and isDone is called. If you set allowSceneActivation to false, progress is halted at 0.9 until it is set to true.
So, I needed to have my UI do other stuff until both this and something else was ready. Obvious thing to do would be to check this for "AsyncOperation.progress >= 0.9" and also check the other thing. Right?
Except AsyncOperation.progress is a float, 0.9 is a double and 0.9f < 0.9. Progress is not halted at 0.9. It never reaches 0.9. It's halted at 0.9f! Just a few million ulps short!
Instead, the "modern" APIs allow you to leverage your pre-existing knowledge of "allocate arrays of structs and start indexing them." That's not trivial. But, it is already familiar. And, it ends up a lot better in the end compared to "Invoke whole lot of functions to manipulate a hidden state machine."
You can find a little info on Modern OpenGL at https://github.com/fendevel/Guide-to-Modern-OpenGL-Functions, https://juandiegomontoya.github.io/modern_opengl.html, https://ktstephano.github.io/, https://patrick-is.cool/posts/2025/on-vaos/