SDL: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
(Typische Anwendungsbeispiele)
K (SDL: Finde den Hinweis schon wichtig)
 
(14 dazwischenliegende Versionen von 9 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
=SDL=
+
{{Unvollständig}}
== Was ist SDL? ==
+
Dieser Artikel deckt bisher nur den nötigsten Teil von SDL ab und soll nicht über den wahren Funktionsumfang von SDL hinwegtäuschen. (Phobeus)
SDL steht für Simple Direct Media Layer. Hinter dieser komplizierten Bezeichnung verbirbt sich nichts anderes als die OpenSource-Antwort auf Microsofts DirectX. Es handelt sich hierbei um eine Bibliothek die wie DirectX versucht alle wichtigen Bereiche der Spieleprogrammierung abzudecken. Im Gegensatz zu DirectX ist SDL auch für andere Plattformen verfügbar und ermöglicht es z.B. eine Anwendung sowohl für Windows als auch für Linux oder anderen Plattformen wie BSD, MacOS oder der XBOX zu entwickeln.
 
  
== Entstehung ==
+
= SDL =
SDL ist ein Projekt von [http://www.lokigames.com/ Loki Games], einer Firma, die damit beauftragt wurde kommerzielle Spieletitel nach Linux zu portieren. Einer der wichtigsten Hauptentwickler ist Sam Lantinga, der heute bei Blizzard Entertainment arbeitet.
+
{{Hinweis| Dieses Wiki besitzt eine eigene [[SDL-Funktionsübersicht]] mit deutschen Übersetzungen der SDL-Befehlsreferenzen.}}
 +
== Überblick ==
 +
SDL ist eine Abkürzung und bedeutet Simple DirectMedia Layer. Es ist die OpenSource-Antwort auf DirectX. Bei SDL handelt es sich um eine Bibliothek, die viele Aufgaben, die in der Spieleprogrammierung erledigt werden müssen, ausführt. Dabei sind die Befehle für alle unterstützten Plattformen die gleichen, alles, was plattformabhängig ist wird von SDL „unter der Haube“ erledigt. Das macht es dem Entwickler einfach, seine Anwendung zu vielen Betriebssystemen kompatibel zu machen, ohne mit vielen Kompileranweisungen komplizierten Code zu schreiben. Zu den unterstützten Plattformen zählen zum Beispiel Windows, Linux, MacOS, aber auch XBOX und BSD.
  
== SDL & OpenGL ==
+
=== Entstehung ===
Wer sich beginnt mit SDL zu beschäftigen wird feststellen, dass weitesgehend nur der Bereich der 2D-Grafikprogrammierung abgedeckt wird. SDL selbst versucht nur den Bereich von DirectDraw abzudecken. Eine Konkurrenz für Direct3D gibt es bei SDL nicht. Stattdessen bietet SDL einfache Möglichkeiten ein Fenster zu initalisieren, welches OpenGL darstellen kann.
+
SDL ist ein Projekt von Loki Games, einer Firma, die damit beauftragt wurde kommerzielle Spieletitel nach Linux zu portieren. Einer der wichtigsten Hauptentwickler ist Sam Lantinga, der heute bei Blizzard Entertainment arbeitet.  
Für den OpenGL-Programmierer ändert sich damit nur die Art, wie er zuvor sein Fenster initalisiert. Die restliche OpenGL-Programmierung bleibt wie gewohnt erhalten.
 
  
== Typische Anwendungsbeispiele ==
 
* [[SDL_sample_texture|Laden einer Textur]]
 
* Erzeugen eines Fensters
 
* Reagieren auf Eingaben
 
  
== Bekannte Programme ==
+
== SDL im Detail ==
 +
 
 +
SDL deckt wie erwähnt viele Bereiche der Spieleentwicklung ab. SDL bietet im Kern eine einfach zu verwendende Fensterverwaltung mit Ereignisverarbeitung. Das Fenster kann beliebig genutzt werden, allerdings können, ohne die Plattformunabhängigkeit zu verlieren, keine Controls, also Buttons, ComboBoxes und so weiter, auf dem Fenster platziert werden. Ebenfalls findet sich ein Support für Joysticks, mit dem man einfach die Positionen und den Status der Buttons auslesen kann. Der SDL-Kern bietet auch einen spartanischen Audio-Support, der allerdings durch das Projekt '''SDL_mixer''' erweitert und damit deutlich mächtiger wird. Für uns Pascaler eher unwichtig aber für das ursprüngliche Gebiet, C, unerlässlich ist der Support für plattformunabhängiges Multithreading, außerdem bietet es Timerfunktionen, mit denen man in regelmäßigen Abständen Funktionen aufrufen lassen kann. Der mitunter mächtigste Teil sind die RWops, die plattform- und quellenunabhängigen Zugriff auf Daten ermöglicht.
 +
 
 +
Das Projekt '''SDL_image''' ermöglicht das Laden von Texturen und unterstützt eine große Bandbreite von Formaten. Dabei können entweder Dateien auf dem Dateisystem oder RWops als Datenquellen verwendet werden.
 +
 
 +
'''SDL_mixer''' erlaubt wie schon erwähnt die erweiterte Soundausgabe und ist damit ein Ersatz für den DirectX-Teil DirectSound. Dabei sind auch fortgeschrittene Funktionen wie Fading und benutzerdefinierte Effekte integriert.
 +
 
 +
'''SDL_ttf''' kann Fonts laden und auf SDL_surfaces, sozusagen die TBitmaps von SDL, mit den geladenen Fonts Texte in verschiedenen Modi zeichnen. Dabei gibt es drei Modi:
 +
1. Solid, ohne Antialiasing und mit einer 8-Bit Palette.
 +
2. Shaded, ebenfalls mit einer 8-Bit Palette aber mit einem Antialiasing.
 +
3. Blended, der eine 32-Bit Surface mit Alpha-Kanal verwendet und es damit sehr einfach macht, es mit OpenGL über andere Bilder zu Blenden.
 +
 
 +
Zu guter letzt '''SDL_net'''. SDL_net ist eine Art DirectPlay-Ersatz, der den Netzwerkzugriff erlaubt. Dabei werden TCP und UDP sowie Socketgruppen unterstützt, die auch hier eine große Flexibilität erlauben. Es sind allerdings keine Protokolle vorimplementiert.
 +
 
 +
 
 +
SDL hat allerdings ein großes Problem: Es kann von Haus aus nur 2D. Alle Zeichenfunktionen sind nur für den 2D-Bereich geeignet. Aber es hat eine Schnittstelle zu OpenGL und kann die Surface mit wenigen Befehlen auf OpenGL vorbereiten. Das andere Problem ist die oben angesprochene Inkompatiblität zu jeglichen Widgets. Das heißt, dass man keine Möglichkeit hat, Controls auf dem einzigen erstellbaren Fenster zu platzieren. Das zeigt wieder, dass SDL den Ursprung in der Spieleentwicklung hat. Wenn man Controls braucht, sollte man entweder sich eine eigene GUI-Komponente für OpenGL schreiben oder auf OpenSource-Lösungen wie z.B. die LCL (Lazarus Component Library) oder GTK umsteigen.
 +
 
 +
== Philosophie ==
 +
 
 +
Die Philosophie von SDL ist, wie oben schon recht deutlich klar gemacht, eine möglichst einfache und doch mächtige API bereitzustellen. Wenn man sich mit SDL beschäftigt, wird man schon nach kurzer Zeit einen großen Lerneffekt verspüren, weil alle SDL-Teile einen ähnlichen Aufbau haben. So kommt man auch mit wenigen Anweisungen schnell an sein Ziel. Dank den wenigen Funktionen  kann man schnell die wichtigsten Teile der API auswendig lernen und verheddert sich nicht in einem Dschungel von Funktionen.
 +
 
 +
== Wissenswertes ==
 +
 
 +
=== Bekannte Programme ===
 
Bekannte Programme die SDL verwenden:
 
Bekannte Programme die SDL verwenden:
 +
* [http://www.unrealtournament.com/ Unreal Tournament ("99")(Linux)]
 +
* [http://www.unrealtournament.com/ Unreal Tournament 2003 (Linux)]
 
* [http://www.unrealtournament.com/ Unreal Tournament 2004 (Linux)]
 
* [http://www.unrealtournament.com/ Unreal Tournament 2004 (Linux)]
  
 
== Weiterführende Links ==
 
== Weiterführende Links ==
*[http://www.delphi-jedi.org/Jedi:TEAM_SDL_HOME Jedi SDL Portation]
+
*[[Tutorial_SDL_Einstieg|SDL-Einführung auf DelphiGL.com]]
 +
*[http://www.delphi-jedi.org/Jedi:TEAM_SDL_HOME Jedi SDL Portierung]
 +
*[http://www.libsdl.de/ Offizielle deutsche SDL-Seite]
 
*[http://www.libsdl.org/ Offizielle englische SDL-Seite]
 
*[http://www.libsdl.org/ Offizielle englische SDL-Seite]
*[http://www.libsdl.de/ Offizielle deutsche SDL-Seite]
 
 
*[http://www.libsdl.org/cgi/docwiki.cgi SDL-Doku-Wiki (eng)]
 
*[http://www.libsdl.org/cgi/docwiki.cgi SDL-Doku-Wiki (eng)]
 +
 +
[[Kategorie:SDL|SDL]]

Aktuelle Version vom 8. November 2007, 20:22 Uhr

Hinweis: Dieser Artikel ist noch unvollständig.
(Mehr Informationen/weitere Artikel)

{{{1}}}

Incomplete.jpg

Dieser Artikel deckt bisher nur den nötigsten Teil von SDL ab und soll nicht über den wahren Funktionsumfang von SDL hinwegtäuschen. (Phobeus)

SDL

Info DGL.png Dieses Wiki besitzt eine eigene SDL-Funktionsübersicht mit deutschen Übersetzungen der SDL-Befehlsreferenzen.

Überblick

SDL ist eine Abkürzung und bedeutet Simple DirectMedia Layer. Es ist die OpenSource-Antwort auf DirectX. Bei SDL handelt es sich um eine Bibliothek, die viele Aufgaben, die in der Spieleprogrammierung erledigt werden müssen, ausführt. Dabei sind die Befehle für alle unterstützten Plattformen die gleichen, alles, was plattformabhängig ist wird von SDL „unter der Haube“ erledigt. Das macht es dem Entwickler einfach, seine Anwendung zu vielen Betriebssystemen kompatibel zu machen, ohne mit vielen Kompileranweisungen komplizierten Code zu schreiben. Zu den unterstützten Plattformen zählen zum Beispiel Windows, Linux, MacOS, aber auch XBOX und BSD.

Entstehung

SDL ist ein Projekt von Loki Games, einer Firma, die damit beauftragt wurde kommerzielle Spieletitel nach Linux zu portieren. Einer der wichtigsten Hauptentwickler ist Sam Lantinga, der heute bei Blizzard Entertainment arbeitet.


SDL im Detail

SDL deckt wie erwähnt viele Bereiche der Spieleentwicklung ab. SDL bietet im Kern eine einfach zu verwendende Fensterverwaltung mit Ereignisverarbeitung. Das Fenster kann beliebig genutzt werden, allerdings können, ohne die Plattformunabhängigkeit zu verlieren, keine Controls, also Buttons, ComboBoxes und so weiter, auf dem Fenster platziert werden. Ebenfalls findet sich ein Support für Joysticks, mit dem man einfach die Positionen und den Status der Buttons auslesen kann. Der SDL-Kern bietet auch einen spartanischen Audio-Support, der allerdings durch das Projekt SDL_mixer erweitert und damit deutlich mächtiger wird. Für uns Pascaler eher unwichtig aber für das ursprüngliche Gebiet, C, unerlässlich ist der Support für plattformunabhängiges Multithreading, außerdem bietet es Timerfunktionen, mit denen man in regelmäßigen Abständen Funktionen aufrufen lassen kann. Der mitunter mächtigste Teil sind die RWops, die plattform- und quellenunabhängigen Zugriff auf Daten ermöglicht.

Das Projekt SDL_image ermöglicht das Laden von Texturen und unterstützt eine große Bandbreite von Formaten. Dabei können entweder Dateien auf dem Dateisystem oder RWops als Datenquellen verwendet werden.

SDL_mixer erlaubt wie schon erwähnt die erweiterte Soundausgabe und ist damit ein Ersatz für den DirectX-Teil DirectSound. Dabei sind auch fortgeschrittene Funktionen wie Fading und benutzerdefinierte Effekte integriert.

SDL_ttf kann Fonts laden und auf SDL_surfaces, sozusagen die TBitmaps von SDL, mit den geladenen Fonts Texte in verschiedenen Modi zeichnen. Dabei gibt es drei Modi: 1. Solid, ohne Antialiasing und mit einer 8-Bit Palette. 2. Shaded, ebenfalls mit einer 8-Bit Palette aber mit einem Antialiasing. 3. Blended, der eine 32-Bit Surface mit Alpha-Kanal verwendet und es damit sehr einfach macht, es mit OpenGL über andere Bilder zu Blenden.

Zu guter letzt SDL_net. SDL_net ist eine Art DirectPlay-Ersatz, der den Netzwerkzugriff erlaubt. Dabei werden TCP und UDP sowie Socketgruppen unterstützt, die auch hier eine große Flexibilität erlauben. Es sind allerdings keine Protokolle vorimplementiert.


SDL hat allerdings ein großes Problem: Es kann von Haus aus nur 2D. Alle Zeichenfunktionen sind nur für den 2D-Bereich geeignet. Aber es hat eine Schnittstelle zu OpenGL und kann die Surface mit wenigen Befehlen auf OpenGL vorbereiten. Das andere Problem ist die oben angesprochene Inkompatiblität zu jeglichen Widgets. Das heißt, dass man keine Möglichkeit hat, Controls auf dem einzigen erstellbaren Fenster zu platzieren. Das zeigt wieder, dass SDL den Ursprung in der Spieleentwicklung hat. Wenn man Controls braucht, sollte man entweder sich eine eigene GUI-Komponente für OpenGL schreiben oder auf OpenSource-Lösungen wie z.B. die LCL (Lazarus Component Library) oder GTK umsteigen.

Philosophie

Die Philosophie von SDL ist, wie oben schon recht deutlich klar gemacht, eine möglichst einfache und doch mächtige API bereitzustellen. Wenn man sich mit SDL beschäftigt, wird man schon nach kurzer Zeit einen großen Lerneffekt verspüren, weil alle SDL-Teile einen ähnlichen Aufbau haben. So kommt man auch mit wenigen Anweisungen schnell an sein Ziel. Dank den wenigen Funktionen kann man schnell die wichtigsten Teile der API auswendig lernen und verheddert sich nicht in einem Dschungel von Funktionen.

Wissenswertes

Bekannte Programme

Bekannte Programme die SDL verwenden:

Weiterführende Links