Domain not in remote thumbnail source whitelist: staging.cohostcdn.org
from https://cohost.org/icculus
Holy moly, the eagle has landed!
So when we started SDL3, we thought we'd fix a few design mistakes and add a few features. One or two of them were sorta big swings to take, but we thought it would be "we made this a little better," ship it, and then iterate on it.
That was in theory. That's not how it actually went down in practice.
In practice, we've spent like two years crunching on this. We've changed almost everything [https://github.com/libsdl-org/SDL/blob/f827c1322cac0a7ede1864d3c3ab9bfd159ad752/docs/README-migration.md] in at least small ways, and some things in quite massive ways [https://www.youtube.com/watch?v=MLau3hWJBeE], added a ton of new features [https://wiki.libsdl.org/SDL3/NewFeatures], and wrote an entire SDL2 compatibility library [https://github.com/libsdl-org/sdl2-compat]. Not to mention the documentation! If you print all of SDL3's documentation as an oldschool API reference like you'd buy at Waldenbooks in the 1990's, the book would be more than 1600 pages long [https://github.com/libsdl-org/SDL/files/15211989/SDL-3.1.2-reference-manual.pdf].
Back when we thought we'd add a handful of new, big ideas, I planned to add a GPU API that would remove the limitations of the 2D render API, since the ongoing demands were "can we have a third dimension?" followed within the same breath with "can we have shaders?" I wanted what I liked of modern GPU APIs (command queues, etc) and none of what I disliked (the complexity!). I felt like having a cross-platform thing with the right level of power and the right level of simplicity, right at your fingertips, would be a game changer.
I got to work. Epic Games gave me a MegaGrant to work on it. We even gave a GDC talk [https://libsdl.org/gdc2023/] on it that was highly-rated enough to get me and Sam's faces on playing cards [https://web.archive.org/web/20240901020853/https://www.ebay.com/itm/326219569145].
Then the rest of SDL3 happened. We bogged down in heavy, full time work for literally years. We're still working on it (but we're almost done, I promise).
Realizing that merging my existing GPU API work would put us back several months as I tried to finish it, it had slipped from "required to ship" to "if there's time." This depressed me immensely, but I couldn't really see another way forward if we ever wanted SDL3 to ship. It could come later, I guess.
This is when the FNA team showed up.
They came in, and with funding from Re-Logic [https://www.gamingonlinux.com/2023/09/terraria-developer-re-logic-donates-100k-to-godot-engine-and-fna/], put several talented graphic programmers onto the task of getting a GPU API into SDL3.
They spent literally months of full-time work on this. The end result is very much like my original vision for the C-callable API, with extra features like GPU compute shaders.
And this past week, we merged it into SDL3 [https://github.com/libsdl-org/SDL/commit/2e7d5bb429b5fa9ad9c15e69ca7d952827420a52]! So you will be able to build cross-platform 3D games with modern features and never have to step outside of SDL to do it.
There is still work to do in general, and there's still a major piece of my original plans to be implemented (the custom shader language and bytecode format), but the API is designed so it can be useful now and those pieces, when they arrive, can be slotted in as added benefits.
But my optimism is restored; the new API is going to be one of several killer features in SDL3! I can't wait to see what people make with it. :)