Announcing the SDL 3 official release!

SDL 3.0 is finally here!

We have many many people to thank on the road to get here, but I’d like to call out special thanks to:

If you’re migrating from SDL2, we’ve put a comprehensive list of changes and migration tips here:

Here are some of the highlights of what’s new in SDL 3.0:

  • Extremely good documentation: We’ve spent a ton of effort writing and revising the API reference.
  • Example programs to get you started, running in your web browser!
  • More consistent API naming conventions. Everything is named consistently across the API now, instead of different subsystems taking different approaches. Also, we’ve tended toward more descriptive names for things in SDL3.
  • Main Callbacks: optionally run your program from callbacks instead of main().
  • GPU API: access to modern 3D rendering and GPU compute in a cross-platform way.
  • Dialog API: access to system file dialogs (file and folder selection UI for opening/saving).
  • Filesystem API: simple directory management and globbing, access to topic-specific user folders.
  • Storage API: Abstract interface to platform-specific storage.
  • Camera API: access to webcams.
  • Pen API: access to pens (like Wacom tablets and Apple Pencil, etc).
  • Logical audio devices: different parts of an app can get their own unique audio device to use.
  • Audio streams: handle buffering, converting, resampling, mixing, channel mapping, pitch, and gain. Bind to an audio device and go!
  • Default audio devices: SDL3 will automatically manage migrating to new physical hardware as devices are plugged in, ripped out, or changed.
  • Properties API: fast, flexible dictionaries of name/value pairs.
  • Process API: Spawn child processes and communicate with them in various ways.
  • Colorspace support: Surfaces and the renderer, etc, can manage multiple colorspaces.
  • The Clipboard API can support any data type (SDL2 only handled text), and apps can provide data in multiple formats upon request in a provided callback.
  • Better keyboard input, for all your keypress needs.
  • Customizable virtual keyboards on iOS and Android.
  • High DPI support is dramatically improved over SDL2.
  • App metadata API for letting SDL report things about your app correctly (like in the About dialog on macOS, etc).
  • and much, much more.

Please let us know what you think, and report any issues on GitHub:

12 Likes

This is fantastic news! Congratulations to @slouken, @icculus, and everyone else!

3 Likes

Our first SDL3 update has been released!

We’re happy, this has been a very smooth release and this update is small with only a few important bug fixes.

2 Likes

A minor update with bug fixes has been released:

2 Likes

Fixed setting the position of X11 windows before they’re shown

I just tried it with 3.2.4 and the developer version. In both cases the window pops up briefly in a different location before moving.
Tested with Linux Mint 64bit and X11.

    SDL_init(SDL_INIT_VIDEO);
    win := SDL_CreateWindow('SDL3 Window', 640, 480, SDL_WINDOW_RESIZABLE);
    SDL_SetWindowPosition(win, 500, 500);    
    SDL_Log('Version: %s', SDL_GetRevision);    

The default state for newly created windows is shown, so it’s showing it with an initial position and then you’re moving it. If you want to create it hidden, add SDL_WINDOW_HIDDEN to your creation flags.

1 Like

The default state for newly created windows is shown, so it’s showing it with an initial position and then you’re moving it. If you want to create it hidden, add SDL_WINDOW_HIDDEN to your creation flags.

I’ve tried it with Hidden, but it still pops up briefly. If I add SDL_Delay, the window still pops up briefly in the wrong place, albeit delayed by a second.

    SDL_init(SDL_INIT_VIDEO);
    win := SDL_CreateWindow('SDL3 Window', 640, 480, SDL_WINDOW_RESIZABLE or SDL_WINDOW_HIDDEN);
    SDL_SetWindowPosition(win, 500, 500);
    SDL_Delay(1000);
    SDL_ShowWindow(win);
    SDL_Log('Version: %s', SDL_GetRevision);  

Go ahead and enter a bug report:

Go ahead and enter a bug report: