the SDL 1.2 codebase with a different, not backwards-compatible API. It replaces several parts of the 1.2 API with more general support for multiple input and output options. Some feature additions include multiple window support, hardware-accelerated 2D graphics, and better Unicode support. Support for Mir and Wayland was added in SDL 2.0.2 and enabled by default in SDL 2.0.4. Version 2.0.4 also provided better support for Android. Software architecture SDL is a wrapper around the operating-system-specific functions that the game needs to access. The only purpose of SDL is to provide a common framework for accessing these functions for multiple operating systems (cross-platform). SDL provides support for 2D pixel operations, sound, file access, event handling, timing and threading. It is often used to complement OpenGL by setting up the graphical output and providing mouse and keyboard input, since OpenGL comprises only rendering. A game using the Simple DirectMedia Layer will not automatically run on every operating system; further adaptations must be applied. These are reduced to the minimum, since SDL also contains a few abstraction APIs for frequent functions offered by an operating system. The syntax of SDL is function-based: all operations done in SDL are done by passing parameters to subroutines (functions). Special structures are also used to store the specific information SDL needs to handle. SDL functions are categorized under several different subsystems. Subsystems SDL is divided into several subsystems: Basics Initialization and Shutdown, Configuration Variables, Error Handling, Log Handling Video Display and Window Management, surface functions, rendering acceleration, etc. Input Events Event handling, Support for Keyboard, Mouse, Joystick and Game controller Force Feedback SDL_haptic.h implements support for "Force Feedback" Audio SDL_audio.h implements Audio Device Management, Playing and Recording Threads multi-threading: Thread Management, Thread Synchronization Primitives, Atomic Operations Timers Timer Support File Abstraction Filesystem Paths, File I/O Abstraction Shared Object Support Shared Object Loading and Function Lookup Platform and CPU Information Platform Detection, CPU Feature Detection, Byte Order and Byte Swapping, Bit Manipulation Power Management Power Management Status Additional Platform-specific functionality Besides this basic, low-level support, there also are a few separate official libraries that provide some more functions. These comprise the "standard library", and are provided on the official website and included in the official documentation: SDL_image — support for multiple image formats SDL_mixer — complex audio functions, mainly for sound mixing SDL_net — networking support SDL_ttf — TrueType font rendering support SDL_rtf — simple Rich Text