in sdl2 and sdl1, you mostly deal with opaque handles to sdl objects. this makes writing bindings easy as there are very few C structs that your host language needs to fiddle with. this is *not* the case with sdl3, especially when it comes to the gpu api. by my count there are 31 structs that need to be dealt with. I've put in considerable effort towards making an api that makes this doable in guile.
my code so far is pretty inefficient. to optimize, I'll need to some kind of caching layer. there's a lot of per-frame calls that return pointers to pooled objects: command buffers, swapchain textures, and other things. you see the same handful of pointers repeatedly so you really *don't* want to be allocating new scheme objects for them every frame.