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 ) ;}