Der Simple DirectMedia Layer (SDL) ist eine
Open-Source-Alternative zu DirectX. Schwerpunkt ist hier allerdings nicht der
extrem schnelle und direkte Zugriff, sondern die Cross-Plattformkompatibilität
mit einer einheitlichen Schnittstelle für den Zugriff auf Grafik- und
Soundhardware.
Die folgende Tabelle gibt einen Überblick über die
wesentlichen Eigenschaften von SDL.
Unterstützte Betriebssysteme |
Windows, BeOS, MacOS, MacOS X,Solaris, FreeBSD,
IRIX, Linux |
Verfügbar für die
Programmiersprachen |
Ada, C,
C++, C#, Eiffel, Erlang, Euphoria,
Lisp, Java, Guile, ML, Pascal, Perl, PHP, Python,Ruby |
Inhalt |
Multimedia-Schnittstelle für Low-Level-Zugriff
auf Video Framebuffer, Soundausgabe und Eingabegeräte (Keyboard, Mouse,
Joystick). Ist Hardware-Beschleunigung vorhanden, wird diese verwendet. |
Hergestellt von |
Open Source Project (www.libsdl.org)
unter der GNU Lesser General Public License 2, ursprünglich entwickelt von
Sam Lantinga, Chefprogrammierer bei Loki Software |
Erschienen |
Version 0.3 im Oktober 1997, aktuelle Version 1.2 |
Programmiert in |
C und
Assembler, als 3D API wird OpenGL verwendet, die Windows-Portierung basiert in einer schnellen
Version auf DirectX, in einer langsameren auf den Standard-Windows-GDI |
Vorteile ggü. MS DirectX |
-Leicht zu lernende API -Ermöglicht eine einfache Entwicklung von
Multimedia-Anwendungen -Plattformübergreifend -alle Funktionen werden über eine Bibliothek
„SDL.h“ eingebunden -für nützliche Zusatzfunktionen (z.B.
Netzwerkunterstützung, MIDI-Abspielen) gibt es Extrabibliotheken |
Nachteile ggü. MS DirectX |
bietet noch längst nicht alle Funktionen von DirectX
an (kein Audio Input, kein Video Input) nicht so schnell wie DirectX |
Verwendet z.B. in |
Linux-Version
von Descent3, Civilization: Call To Power, Sim City 3000, Tribes 2 (alle von Loki Software) |
Folgende Tabelle gibt einen noch detailierteren Einblick
in SDL auf Betriebssystemebene und speziell die Audiofähigkeiten von SDL:
Thread-API |
Unterstützt Semaphoren, Mutex-Objekte und
Condition-Variablen zur Synchronisation |
Timer |
abgelaufene Zeit abfragen, bestimmte Zeit warten,
10 ms Zeitgeber |
Ereignisse |
Änderung der Sichtbarkeit des Programms |
|
Tastatur- und Mauseingaben |
|
Jedes Ereignis kann mit SDL_EventState() einzeln
ermöglicht oder verhindert werden |
|
die Ereignisse werden durch eine vom Benutzer
spezifizierte Filterfunktion geleitet, bevor sie in die interne
Ereignise-Queue eingereiht werden |
|
die Ereignis-Queue ist Thread-sicher |
Audio |
Abspielen von 8/16-Bit-Sounds (ggf. automatische
Wandlung des Formats) |
|
Ein separater Thread spielt Audio ab |
|
Der Puffer wird über ein Callback gefüllt |
|
Eigene Audiomixer können verwendet werden |
|
Umfangreiche Audiobibliotheken vorhanden |
Folgendes Beispielprogramm zeigt wie mit wenig Code das Erzeugen eines
Fensters und einer Endlosschleife, die Events verarbeitet,
cross-plattformkompatibel mit SDL möglich ist.
#include "SDL.h"
int main( int argc, char* argv[] )
{
//initialize systems
SDL_Init ( SDL_INIT_VIDEO );
//set our at exit function
atexit ( SDL_Quit );
//create a window
SDL_Surface* pSurface = SDL_SetVideoMode (512 ,384 ,0,SDL_ANYFORMAT);
//declare event variable
SDL_Event event;
//message pump
for ( ; ; )
{
//look for an event
if ( SDL_PollEvent ( &event ) )
{
//an event was found
if ( event.type == SDL_QUIT ) break ;
}
}//end of message pump
//done
return ( 0 ) ;
}