Zum Inhalt springen

Simple DirectMedia Layer

aus Wikipedia, der freien Enzyklopädie
Dies ist die aktuelle Version dieser Seite, zuletzt bearbeitet am 24. Oktober 2025 um 21:29 Uhr durch imported>Mielas (kaputte MobyGames-Links repariert).
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Simple DirectMedia Layer

colspan="2" class="notheme" style="text-align:center; background:#Vorlage:Standardfarbe; color:#202122;" | Logo von SDL
Basisdaten

Maintainer Lua-Fehler in Modul:Wikidata, Zeile 1686: attempt to index field 'wikibase' (a nil value)
Entwickler Sam Lantinga und die SDL-Gemeinde
Erscheinungsjahr Lua-Fehler in Modul:Wikidata, Zeile 1686: attempt to index field 'wikibase' (a nil value)
Aktuelle Version Lua-Fehler in Modul:Wikidata, Zeile 1686: attempt to index field 'wikibase' (a nil value)
(Lua-Fehler in Modul:Wikidata, Zeile 1686: attempt to index field 'wikibase' (a nil value))
Aktuelle Vorabversion Lua-Fehler in Modul:Wikidata, Zeile 1686: attempt to index field 'wikibase' (a nil value)
(Lua-Fehler in Modul:Wikidata, Zeile 1686: attempt to index field 'wikibase' (a nil value))
Betriebssystem Linux, macOS, Windows, Android, iOS
Programmier­sprache C
Kategorie Programmbibliothek
Lizenz zlib-Lizenz (Freie Software) ab 2.0.0,
vor 2.0.0: LGPL
deutschsprachig ja
www.libsdl.org

{{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) (kurz SDL; englisch für „einfache DirectMedia-Schicht“) ist eine freie Multimedia-Bibliothek für verschiedene Betriebssysteme. Sie steht ab der Version 2.0 unter der zlib-Lizenz. Alle älteren Versionen vor 2.0 stehen unter der GNU Lesser General Public License (LGPL).

Konzept

Die Bibliothek stellt eine plattformunabhängige Schnittstelle (API) für Grafik-, Sound- und Eingabegeräte bereit, die sich hauptsächlich zur Entwicklung von Spielen und Multimediaanwendungen eignet. Durch die Unterstützung vieler verschiedener Plattformen kann für eine Applikation eine hohe Portabilität bzw. Plattformunabhängigkeit gewährleistet werden. SDL kann mit dieser Eigenschaft auch als Middleware verstanden werden.<ref name="mobygames">Middleware: SDL Group Description. MobyGames, 18. Mai 2012, abgerufen am 18. Mai 2012 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)): „Games that use the very portable Simple DirectMedia Layer.</ref>

Datei:SDL Layers-german.svg
Abstraktionsebenen mit SDL auf verschiedenen Plattformen: ganz oben (blaugefärbt) sind die plattformübergreifenden Teile, ganz unten (braun gefärbt) die ausführende Hardware, dazwischen verschiedene Plattformen mit ihren (darüberliegenden) Schnittstellen und Bibliotheken

Es existieren offizielle und inoffizielle SDL-Anbindungen für dutzende Programmiersprachen, die eine Integration in viele Projekte und Entwicklungskontexte möglich macht.<ref name="sdlbinding12" /><ref name="sdlbinding20" />

Durch die Verwendung der liberalen zlib-Lizenz ist eine lizenzrechtlich problemlose Verwendung der SDL-Bibliotheken in binärer und Quelltext-Form sowohl in Open-Source (GPL-kompatibel<ref>Kommentar zur zlib-Lizenz bei der FSF (englisch)</ref>) als auch in proprietären Projekten (kein Copyleft) problemlos möglich.

SDL ist in C geschrieben und zeichnet sich besonders durch einen kompakten Code aus, was diese Bibliothek auch für Anfänger leicht erlernbar machen soll. Durch die weite Verbreitung und die Nähe zur Open-Source-Bewegung existieren viele frei verfügbare Beispielprogramme für verschiedene Anwendungsfälle, die zeigen, wie die Bibliothek verwendet werden kann.

Verbreitung

Bezeichnend für die Beliebtheit und Bekanntheit von SDL ist die Anzahl an Spielen und Programmen, die mit ihr geschrieben wurden, z. B. listet die Spieledatenbank MobyGames 105 Spiele im Jahr 2012,<ref name="mobygames" /> auf der SDL-Webseite selbst sind knapp 700 Spiele gelistet.<ref>Games. libsdl.org, 18. Mai 2012, archiviert vom Vorlage:IconExternal (nicht mehr online verfügbar) am 29. Juni 2010; abgerufen am 18. Mai 2012 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref> Bekannte kommerzielle Beispiele sind Angry Birds<ref name="sdlangry">SDL Testimonials. Galaxygameworks.com, archiviert vom Vorlage:IconExternal (nicht mehr online verfügbar) am 16. Juli 2011; abgerufen am 1. Februar 2012 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref> oder Unreal Tournament, aus dem Open-Source-Bereich z. B. OpenTTD,<ref name="OOTTD">Compiling OpenTTD. GitHub, 2022, abgerufen am 7. Februar 2022.</ref> The Battle for Wesnoth<ref name="wesnoth">Building Wesnoth from Source. GitHub, 2022, abgerufen am 7. Februar 2022.</ref>, OpenRA<ref>Compiling OpenRA. GitHub, 2022, abgerufen am 7. Februar 2022.</ref> oder Freeciv.<ref>SDLClient – Freeciv. Fandom.com, abgerufen am 7. Februar 2022.</ref>

Bei plattformübergreifenden Spieleveröffentlichungen wird häufig auf SDL als Abstraktionsbibliothek gesetzt, da sich der Aufwand gegenüber Implementierungen mit den jeweiligen nativen Plattform-APIs signifikant verringert. Ein Beispiel sind die in den Humble Indie Bundles enthaltenen meist SDL-basierenden Linux-, Mac- und Android-Versionen.

Weiter findet SDL häufig Verwendung für (spätere) Portierungen auf neue Plattformen, z. B. Homeworld für das Pandora-Handheld<ref>may88: Game of the Week #3 – Homeworld SDL. pandorapress.net, 23. Juni 2011, archiviert vom Vorlage:IconExternal (nicht mehr online verfügbar) am 30. August 2011; abgerufen am 8. Mai 2012 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)): „[…] released port of HomeworldSDL. Forum member Edglex enables your Pandora to experience the excellent work done by the guys at HomeworldSDL.“</ref> oder Jagged Alliance 2.<ref>JA2-Stracciatella Compilation. GitHub, 2022, abgerufen am 7. Februar 2022.</ref>

Auf SDL aufsetzende Nicht-Spiele-Anwendungen sind z. B. die Emulatoren DOSBox und VisualBoyAdvance.

Verwendung fand SDL auch an Universitäten und in der Lehre in Kursen zu Multimedia und Informatik.

Datei:SDL-Workshop-IMG 2612.jpg
Workshop zur Spielprogrammierung unter Verwendung der libSDL, Universität Cádiz (Spanien)

Es wurden auch mehrere Bücher über das Entwickeln mit den SDL-Bibliotheken veröffentlicht (siehe den Literaturabschnitt unten).

Entwicklungsgeschichte

Entstehung bei Loki Software

SDL wurde von Sam Lantinga während seiner Zeit als leitender Programmierer (1999 bis 2001) bei Loki Software entwickelt. Der Simple DirectMedia-Layer bildet (oft auch im Zusammenhang mit den OpenGL- und OpenAL-Schnittstellen) die Grundlage für einige kommerzielle Spieletitel für Linux, die von Loki portiert wurden, wie z. B. Civilization: Call to Power, Descent³ oder auch Sid Meier’s Alpha Centauri.

Schon damals wurde SDL unter die LGPL gestellt. Durch diesen Schritt wurde SDL schnell bekannt, da damit nun sowohl proprietäre als auch freie Software entwickelt werden konnte.

Weiterentwicklung durch die Community

Obwohl Sam Lantinga im Jahr 2001 von Loki Software zu Blizzard Entertainment wechselte, verwaltet er die Entwicklung von SDL noch immer und ist nach wie vor einer der aktivsten SDL-Entwickler. Ryan C. Gordon, ein weiterer Ex-Loki-Mitarbeiter, arbeitet ebenfalls weiter an und mit SDL z. B. für die Linux- und Mac-Versionen von Spielen im Humble Indie Bundle.<ref>Ben Kuchera: The latest Humble Bundle offers amazing games, promotes multiplatform releases. In: ars technica. 14. Dezember 2011, abgerufen am 18. Februar 2012 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)): „Some developers are ready for it from day one, but usually a game is Windows-only and needs to get ported to Mac and Linux. Ryan Gordon and Edward Rudd have been instrumental in this, but a lot of developers will do ports internally as well.</ref>

Datei:Ryan-Gordon-SELF-2009.png
Ryan „Icculus“ Gordon, bekannter Verwender und Entwickler von SDL, z. B. im Rahmen des Humble Indie Bundles.<ref>Ben Kuchera: The latest Humble Bundle offers amazing games, promotes multiplatform releases. In: ars technica. Abgerufen am 6. Mai 2012 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref>

Inzwischen gibt es eine große Community und weitere freiwillige Helfer, die sich an der Weiterentwicklung beteiligen.

Für über zwanzig Programmiersprachen existieren SDL-1.2-Anbindungen anderer Hersteller.<ref name="sdlbinding12">SDL Language Bindings. Archiviert vom Vorlage:IconExternal (nicht mehr online verfügbar) am 16. Januar 2013; abgerufen am 12. Juli 2009 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref>

SDL 2

Die Weiterentwicklung der Version 1.2 war als Version 1.3 geplant und wurde im August 2013 als Version 2.0 veröffentlicht.<ref>pro-linux.de</ref> Zusätzliche Fähigkeiten im Vergleich zur Vorversion sind Unterstützung für den Betrieb an mehreren Monitoren, durch Hardware beschleunigte zweidimensionale Grafik sowie bessere Unterstützung von Unicode.<ref><templatestyles src="Webarchiv/styles.css" />SDL: A Quick Introduction to SDL 1.3 (Memento vom 24. Juni 2012 im Internet Archive)</ref> Weiterhin sollte Unterstützung von Multitouch und haptischen Eingabegeräten z. B. mit Force Feedback Einzug halten.<ref>Arnin Ronacher: A Gentle Introduction into SDL 1.3. 6. April 2011, archiviert vom Vorlage:IconExternal (nicht mehr online verfügbar) am 4. Januar 2012; abgerufen am 30. Mai 2012 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref> Im Gegensatz zu früheren Versionen nutzt SDL 2.0 die zlib-Lizenz.<ref>SDL 1.3 licensing terms. Sam Lantinga, 7. April 2011, abgerufen am 21. August 2011 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref> Durch diese soll es möglich sein, proprietäre Produkte (Closed Source) zu entwickeln, welche die SDL dann auch statisch binden („linken“) dürfen.

Snapshots ab Februar 2012 ändern die Versionsnummer von 1.3 auf 2.0. Die erste stabile Version von SDL 2.0 wurde am 13. August 2013 veröffentlicht.<ref name="sdlrelease200">SDL 2.0.0 Released! 13. August 2013, abgerufen am 25. Oktober 2013 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref>

Die aktuelle stabile Version SDL 2.30.4 wurde am 17. Juni 2024 veröffentlicht.<ref name="sdlrelease204">Index of /release. Abgerufen am 1. Juli 2024 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref>

Anbindungen an SDL-2.0 existieren Mitte 2025 für C, C++ und 17 weitere Programmiersprachen.<ref name="sdlbinding20">SDL 2.0 Language Bindings. Abgerufen am 28. Mai 2025 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref>

SDL 3

SDL 3 wurde im Januar 2025 als Version 3.2 veröffentlicht.<ref>Tim Schürmann: SDL 3 bietet runderneuerte und konsistentere APIs. Linux Magazin, 22. Januar 2025, abgerufen am 22. Februar 2025.</ref><ref>https://github.com/libsdl-org/SDL/releases/tag/release-3.2.0 Offizielle Release Notes von SDL 3.2</ref> Dabei wurden neue APIs, unter anderem für die GPU, Systemdialoge, Dateisystem und Webcams eingeführt. Die Audio-Schnittstelle wurde umfangreich überarbeitet.

Anbindungen an SDL-3.0 über C/C++ hinaus bestehen Mitte 2025 für 10 weitere Programmiersprachen.<ref name="bindings">SDL 3.0 Language Bindings. Abgerufen am 28. Mai 2025 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref>

Funktionalität

Die SDL-Bibliothek enthält vor allem für Multimedia-Anwendungen notwendige Funktionalitäten, für die eine weitverbreitete, plattformunabhängige und gleichzeitige performante API nicht existiert:

Videoausgabe
Videomodus setzen, Zugriff auf den Framebuffer, Nutzung der Hardwarebeschleunigung für Grafikoperationen, optional über EGL
Ereignis-Behandlung
Ereignisse für Tastatur, Maus, Programmende und Sichtbarkeit des Programms
Audioausgabe
In 8 und 16 bit, mono/stereo
Audio-CDs
Vollständige Audio-CD-API (nicht mehr in SDL 2.0)
Threads
Thread-API, Semaphore, Mutex-Objekte und Condition-Variablen zur Synchronisation
Zeitgeber
Periodisch, Wartezeit, abgelaufene Zeit abfragen
Konvertierung der Byte-Reihenfolge
Big Endian/Little Endian

Der Simple DirectMedia Layer stellt selbst keine Funktionen für 3D-Grafik zur Verfügung, weil mit OpenGL bereits eine weitverbreitete, plattformunabhängige 3D-API zur Verfügung steht. SDL wurde von Beginn an für das Zusammenspiel mit OpenGL entworfen und soll spezifisch die Multimediaaspekte abdecken, die außerhalb der OpenGL-Funktionalität liegen. Deshalb ergänzen sich beide Bibliotheken optimal und auch 3D-Spiele wie z. B. Tux Racer sind problemlos möglich.

Weitere Einsatzmöglichkeiten wie Internet-Socket-Abstraktion oder Schriftzugriff werden bewusst nicht offiziell in SDL aufgenommen, jedoch als Erweiterungen von anderen Anbietern auf der LibSDL-Homepage angeboten.<ref><templatestyles src="Webarchiv/styles.css" />The Simple Directmedia Layer documentation (Memento vom 15. April 2013 im Internet Archive)</ref>

Unterstützte Plattformen

Datei:Linux kernel and OpenGL video games.svg
Beispiel für die Einbindung von SDL in eine Plattform, hier ein Linux-System. SDL bietet z. B. einem Computerspiel Zugriff auf Sound- und Eingabehardware über eigene Sound- und Input-APIs.

Offiziell unterstützte Plattformen:<ref>Ryan C. Gordon: README.Platforms. libsdl.org, 9. April 2012, archiviert vom Vorlage:IconExternal (nicht mehr online verfügbar) am 20. Januar 2012; abgerufen am 7. Mai 2012 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)): „This is a list of the platforms SDL supports, and who maintains them.</ref>

Unterstützung im SDL-Code enthalten, aber nicht offiziell unterstützt:

SDL läuft auf sämtlichen unixoiden Plattformen, sofern diese den POSIX-Standard unterstützen.

Auf sonstige Art unterstützte Plattformen:

Beispielhafte Galerie SDL-basierender Spiele

Siehe auch

Literatur

  • Alberto García Serrano: Programación de videojuegos en SDL. Ediversitas, ISBN 84-95836-08-4 (Buch über die Verwendung der SDL in der Videospiele-Entwicklung, spanisch).
  • Ernest Pazera: Focus On SDL. Muska & Lipman / Premier-Trade, ISBN 1-59200-030-4 (weiteres Buch zur SDL, welches sich ebenfalls mit weiteren Bibliotheken für den Simple DirectMedia Layer, wie beispielsweise SDL_net, befasst).
  • Ron Penton: Data Structures for Game Programmers. Muska & Lipman/Premier-Trade, ISBN 1-931841-94-2 (geht hauptsächlich zwar auf Datenstrukturen eines Spiels ein, enthält aber auch Beispiele mit der SDL).
  • John R. Hall: Programming Linux Games. No Starch, ISBN 1-886411-49-2 (Erstes Buch, welches sich mit der SDL befasst. Enthält auch Informationen über die Programmierung in Linux im Allgemeinen und der Netzwerkprogrammierung), Onlineversion: <templatestyles src="Webarchiv/styles.css" />overcode.net (Memento vom 22. Januar 2003 im Internet Archive; PDF) <templatestyles src="Webarchiv/styles.css" />LaTeX-Sourcen (Memento vom 14. Februar 2003 im Internet Archive).

Weblinks

Commons: Simple DirectMedia Layer – Sammlung von Bildern, Videos und Audiodateien
Wikibooks: SDL – Lern- und Lehrmaterialien
Technische Information

Einzelnachweise

<references />