Introduction to SDL 2.0
Contents
1. Introduction to SDL
1.1. What is SDL?
The Simple DirectMedia Layer library (SDL) is a general API that provides low level access to audio, keyboard, mouse, joystick, 3D hardware via OpenGL, and 2D framebuffer across multiple platforms.
The current version supports Windows XP/Vista/7/8, Mac OS X, Linux, iOS, and Android. The code contains support for other operating systems but those are not officially supported.
For the latest information on what is supported see http://hg.libsdl.org/SDL/file/default/README-platforms.txt
SDL is written in C, but works with C++ natively, and has bindings to several other languages, including Ada, C#, Eiffel, Erlang, Euphoria, Guile, Haskell, Java, Lisp, Lua, ML, Objective C, Pascal, Perl, PHP, Pike, Pliant, Python, Ruby, and Smalltalk.
For the latest list of languages see http://www.libsdl.org/languages.php
SDL 2.0 is under the zlib license, which allows free use for commercial and non-commercial purposes.
1.2. What can SDL do?
Read ahead for an overview of what SDL is capable of. If you're simply interested in the changes from 1.2 to 2.0, check out the Migration Guide.
Video
- Set a video mode at any depth (8-bpp or greater) with optional conversion, if the video mode is not supported by the hardware
- Software surface blitting:
- Write directly to a linear graphics framebuffer
- Create surfaces with color key or alpha blending attributes
- Surface blits are automatically converted to the target format using optimized blitters and are hardware accelerated, when possible. MMX optimized blits are available for the x86
- Hardware accelerated blit and fill operations are used if supported by the hardware
- Accelerated 2D render API:
- Supports easy rotation, scaling and alpha blending, all accelerated using modern 3D APIs
- Acceleration is supported using OpenGL or Direct3D, and there is a software fallback
- 3D graphics:
- SDL can be used in combination with the OpenGL API or Direct3D API for 3D graphics
- Window Management
Input Events
- Events provided for:
- Application visibility changes
- Keyboard input
- Mouse input
- Joystick input
- User-requested quit
Each event can be enabled or disabled with SDL_EventState()
- Events are passed through a user-specified filter function before being posted to the internal event queue
- Thread-safe event queue
Force Feedback
- Force feedback is supported under Windows, Mac OS X and Linux
Audio
- Set audio playback of 8-bit and 16-bit audio, mono or stereo, with optional conversion if the format is not supported by the hardware
- Audio runs independently in a separate thread, filled via a user callback mechanism
- Designed for custom software audio mixers, but the example archive contains a complete audio/music output library
File I/O Abstraction
- General purpose abstraction for opening, reading and writing data
- Built-in support for files and memory
Shared Object Support
- Load shared objects (DLL on Windows, .dylib on Mac OS X, .so on Linux)
- Lookup functions in shared objects
Threads
- Simple thread creation API
- Simple thread local storage API
- Simple binary semaphores for synchronization
Timers
- Get the number of milliseconds elapsed
- Wait a specified number of milliseconds
- Set a single periodic timer with 10ms resolution
CPU Feature Detection
Detect MMX, SSE, 3DNow and AltiVec CPU features
Endian Independence
- Detect the endianness of the current system
- Routines for fast swapping of data values
- Read and write data of a specified endianness
Power Management
- Querying power management status
1.3. What platforms does SDL run on?
Windows
- Two versions, one safe for all systems based on Win32 APIs, and one with higher performance, based on DirectX APIs
- Safe version uses GDI for video display. High performance version uses Direct3D for video display, taking advantage of modern hardware acceleration
Safe version uses waveOut APIs for sound. High performance version uses DirectSound for audio playback
Mac OS X
- Uses Cocoa for video display, taking advantage of OpenGL for hardware acceleration
- Uses Core Audio for sound
Linux
- Uses X11 for video display, taking advantage of OpenGL for hardware acceleration
Uses the ALSA, OSS and PulseAudio APIs for sound
iOS
- Uses UIKit for video display, taking advantage of OpenGL ES 2.0 for hardware acceleration
- Uses Core Audio for sound
Android
- Uses JNI interfaces for video display, taking advantage of OpenGL ES 1.1 and 2.0 for hardware acceleration
- Uses JNI audio callbacks for sound
2. Transitioning from SDL 1.2 to 2.0
If you used SDL 1.2 previously and you want to use SDL 2.0, please note there are some API changes and some of your code will need to be adapted.
The migration guide lists the feature differences and how to adapt old code to the new SDL 2.0: