Comment by raincole

6 hours ago

Btw, Love2D is based on SDL2. If you hate Lua but needs the same cross-platform capabilities, you can use an SDL2 binding in other languages or make your own.

SDL3 should get more love in general.

The SDL3 GPU API[1] provided a cross-platform GPU API even before WebGPU.

In Rust it's a good alternative for winit/wgpu. For that reason I added it to areweguiyet.com[2] last week, where apparently it wasn't even listed before.

I am currently using it to develop a space game[3] inspired by the original BBC Elite. Using emscripten to get on the web and QUIC/Webtransport for networking.

[1]: https://wiki.libsdl.org/SDL3/CategoryGPU

[2]: https://areweguiyet.com/#ecosystem

[3]: https://git.levitati.ng/LevitatingBusinessMan/elite/src/bran...

Now why would you hate lua of all things?

  • For all the reasons, but the 1-based index alone makes me uncomfortable.

    • 1-based indexing is great. It's just _different_ - from C, where the array index is just sugar for pointer arithmetic, and from other languages which borrowed the practice without reasoning.

  • I don't necessarily hate Lua, but I prefer C and Raylib for game dev. Lua is garbage collected, dynamically typed, strays far from standard syntax patterns, and has less existing tooling than C.

    I see why people might hate Lua. Especially for game dev!

There is a lot more that goes into Love2D than just SDL. It uses many other libraries for sound, image loading, etc as well as using luajit so that the lua runs very fast and has a super easy C FFI.

  • But SDL already provides an API for all the things you listed. So I am assuming the libraries in Love2D still call those underlying SDL APIs right?

    • Love2D uses openAL for audio, FreeType 2 for fonts, DevIL for image loading and Box2D for physics. It can also use image fonts. It uses luasocket for networking and has a compression API built in.

      On top of that there are love2d specific libraries people have written to deal with 2D games like GUIs and tile libraries.

      Then there is the ease of debugging, where you can use lua to have runtime access to the table of variables and can print them on screen if you need to, not to mention dynamically loading new update and draw and input functions.

      This is all to say that just downloading SDL is not going to get anywhere close to what love2d has included.

SDL3

  • Definitely SDL2.

    Author is currently building version 12 which will be using SDL3. But it's been in development for quite some time with no clear end date afaik.

    • It is easy to get Lua (with LuaJIT) working with SDL3, though.

      That obviously isn't a replacement for the framework but it is perfectly doable if someone just wants to write a game in Lua with minimal overhead.

      Edit: I mention LuaJIT specifically because it lets you create metaclasses around C objects, which is much easier than messing with the Lua stack from C, and it's easy to make a 2d vector class from an SDL Point or a spritesheet or what have you. There are a few rough edges like dealing with pointers and gc but to me it's the best of both worlds (the speed of C, and some implicit type checking, and the flexibility of Lua.)

      Obviously you could do it the hard way and the other way around with normal modern Lua but it's such a pain in the ass.