======================
sdl2-compat for Debian
======================

sdl2-compat is a compatible reimplementation of the SDL 2 interface
using SDL 3. It has now replaced "classic" SDL2, similar to what was
previously done in other OS distributions like Arch and Fedora.

sdl2-compat can be combined with sdl12-compat (the `libsdl1.2debian`
package) to run SDL 1.2 games on SDL 3, but if possible please port those
games to SDL 2 or SDL 3 instead.

Installation and use
====================

sdl2-compat has now taken over the libsdl2-2.0-0 package name from
"classic" SDL 2 and will be installed by default as a dependency of
SDL 2 games.

Please do not depend on the transitional packages libsdl2-compat or
libsdl2-compat-shim, which will be removed later.

If a game exhibits regressions with sdl2-compat, it can be forced to
use "classic" SDL 2 by installing the libsdl2-classic package, and then
using a command like:

    $ SDL_DYNAMIC_API='/usr/$LIB/sdl2-classic/libSDL2-2.0.so.0' \
      openarena

If there are regressions with sdl2-compat which can be worked around by
using "classic" SDL 2, please report that as a bug in the sdl2-compat
source package: see "Testing and reporting bugs", below.

Checking which SDL you are using
--------------------------------

If the environment variable SDL2COMPAT_DEBUG_LOGGING is set to 1,
like this:

    $ SDL_DYNAMIC_API='/usr/$LIB/sdl2-classic/libSDL2-2.0.so.0' \
      openarena

    $ SDL2COMPAT_DEBUG_LOGGING=1 \
      SDL_DYNAMIC_API='/usr/$LIB/sdl2-classic/libSDL2-2.0.so.0' \
      openarena

then you should see output like this for sdl2-compat:

    sdl2-compat 2.32.57, built on Sep 10 2025 at 12:31:43, talking to SDL3 3.3.0
    sdl2-compat: This app appears to be named: ioquake3
    SDL_DYNAMIC_API: Not overridden

or like this for "classic" SDL 2:

    sdl2-compat 2.32.57, built on Sep 10 2025 at 12:31:43, talking to SDL3 3.3.0
    sdl2-compat: This app appears to be named: ioquake3
    SDL_DYNAMIC_API: Library replaced by SDL 2.32.10 (SDL-release-2.32.10-0-g5d2495703 (Debian 2.32.10+dfsg-3))

Wayland
=======

On Wayland, some SDL 2 games don't work correctly with the native Wayland
video driver, which became the default in SDL 3.

Please report this to the game's developer or packager as a bug. If a game
only supports X11 and does not support native Wayland, an easy way that a game
developer can signal this to SDL is with code similar to this near the
beginning of main(), before calling SDL_Init():

    #ifdef SDL_VIDEO_DRIVER_X11
    SDL_SetHintWithPriority(SDL_HINT_VIDEODRIVER, "x11", SDL_HINT_OVERRIDE);
    #endif

As a workaround for this bug you can set environment variable
SDL_VIDEODRIVER=x11, which forces all SDL 2 games to use X11 (possibly
via Xwayland).

sdl2-compat has a table of "quirks" for games and apps that cannot
easily be fixed, which can be applied automatically based on the name of
the executable. One of the most common quirks is to do the equivalent of
`SDL_VIDEODRIVER=x11` automatically.
If a game that cannot easily be fixed (for example a proprietary game)
needs this workaround, please report this as a bug in sdl2-compat:

* upstream: https://github.com/libsdl-org/sdl2-compat/issues/new
* and/or in Debian: as bugs in `src:sdl2-compat`

so that the game can be added to the table of quirks.

Testing and reporting bugs
==========================

Please report bugs for any regressions when compared with "classic" SDL2:

* upstream: https://github.com/libsdl-org/sdl2-compat/issues/new
* and/or in Debian: as bugs in `src:sdl2-compat`, or as bugs in the game
    with an "affects" on `src:sdl2-compat` if it appears to be a game bug

Please provide details of the game version, the sdl2-compat version,
and the SDL3 version. SDL2COMPAT_DEBUG_LOGGING=1 will tell you everything
except the game version.

If you are using a Wayland environment, please specify which one.
"Wayland" is not enough information: we'll need something more like
"GNOME Shell 48.4" or "sway 1.11".

If a game doesn't work in native Wayland, please try it with
`SDL_VIDEODRIVER=x11` as a workaround, and mention in your bug report
whether that workaround helped or not.

There will often be a newer version of SDL3 and/or sdl2-compat available
in experimental, which might have additional bug fixes. If you can,
trying that version is also helpful. Versions in experimental are often
upstream snapshots that have only been lightly tested, so there might be
regressions - please report those too!

See `HOW_TO_TEST_GAMES.md` in the source package for more details.

Compiling games
===============

sdl2-compat has now taken over the libsdl2-dev package name from
"classic" SDL 2 and will be installed by default as a build-dependency of
SDL 2 games.

Please do not build-depend on the transitional package libsdl2-compat-dev,
which will be removed later.
