Alternatively, for the more low-level or algorithm-minded, I can recommend having a look at LÖVE[0] for Lua. I haven't done any graphics/sound coding in aeons (~15+ years?) but after twisting my ankle and getting stuck on the couch took the plunge and have learned a lot and got something playable[1] in a couple of weeks (almost!) from scratch, including learning Lua.
I'm screwing with LÖVE now for several reasons: it's viable on mobile, love.js runs in a browser, I like lua and want to learn more, and it reminds me of pygame which I like.
if you think LÖVE is fun, you might be enthralled by http://www.lexaloffle.com/pico-8.php (someone has ported the pico-8 api to LÖVE, also, but the pico-8 tools are just wonderful.)
Yeah, Love's fun. But it can be a bit of a pain at times, especially if you're not used to more algorithmic/low-level games programming. Although it's by no means truly low-level...
How low level are we talking about? I'm tempted to learn Love, especially after having fun with LUA with Pico-8, but I also don't like spending a ton of time on low level things for hobby programming.
It doesn't seem too low level just by looking at its home page.
No, it's not really. I meant relative to producing content for someone else's game engine, using Lua/Love would be relatively more involved. It's not that hard. You can get to the level of writing shaders for graphics cards, or you can pixel-push and curve-render, or you can just plonk rasters on the screen. It's pretty straightforward, very fast and portable.
[0] https://love2d.org/ [1] http://www.roguebasin.com/index.php?title=Zomia