SDL: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
K (SDL)
K (SDL: Finde den Hinweis schon wichtig)
 
(3 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 2: Zeile 2:
 
Dieser Artikel deckt bisher nur den nötigsten Teil von SDL ab und soll nicht über den wahren Funktionsumfang von SDL hinwegtäuschen. (Phobeus)
 
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=
+
= SDL =
{{Hinweis| Dieses Wiki besitzt eine eigene [[SDL-Funktionsübersicht]] mit deutschen Übersetzungen der SDL-Befehlsreferenzen. (Noch im Aufbau) }}
+
{{Hinweis| Dieses Wiki besitzt eine eigene [[SDL-Funktionsübersicht]] mit deutschen Übersetzungen der SDL-Befehlsreferenzen.}}
== Über SDL ==
+
== Ü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.
=== Steckbrief ===
 
SDL steht für Simple Direct Media Layer. Hinter dieser komplizierten Bezeichnung verbirgt 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 ===
 
=== Entstehung ===
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.
+
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 & OpenGL ==
 
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.
 
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.
 
  
== Warum SDL ==
+
== SDL im Detail ==
Vermutlich ist die erste Frage, die man sich beim Erlernen einer neuen Schnittstelle sich selbst fragt. In diesem Fall ist dies allerdings nicht ganz leicht zu beantworten, zumindest nicht, ohne dabei die Gegenfrage zu Stellen. "Warum WinAPI?". Gerade bei der Entwicklung eines Spieles arbeitet man vorwiegend im Vollbildmodus und nur selten wird dabei wirklich auf interne Schnittstellen von Windows zugegriffen. Meistens beschränkt sich die Verwendung auf das blosse Initalisieren eines geeigneten Fensters um darauf mit OpenGL zu zeichnen.
 
  
SDL bietet hierfür einige einfache Schnittstellen mit denen man plattformneutral nicht nur ein Fenster initalisieren kann, sondern auch Eingaben des Anwenders verarbeiten kann, Soundeffekte abspielen kann oder auch einfach nur Texturen zu laden. Wieso also sollte man diese Möglichkeiten außer acht lassen und eine Schnittstelle verwenden, die einen zwingend an einer Plattform bindet? Immerhin ist es nicht gelogen! Wer nur SDL und OpenGL verwendet und nicht auf das darunter liegende System zugreift, kann seine Applikation (sofern Compiler und SDL verfügbar) ohne Änderungen auf anderen Plattformen zu laufen bekommen. Sicherlich erscheint der Marktanteil von Linux eher begrenzt zu sein und die meisten nicht interessieren. Doch welchen Grund gibt es, um potenzielle Anwender davon abzuhalten die eigene Applikation zu verwenden? Zumal man mit einem durchschnittlichen Spiel unter Linux sicherlich mehr Ruhm erlangen kann als unter Window mit einer guten Anwendung in der Masse unterzugehen. Die Frage, ob SDL für einen selbst eine lohnende Schnittstelle ist, sollte also damit gekoppelt sein, welche Vorteile eine andere für einen selbst hat. Sind diese nicht gegeben, lohnt sich der Blick auf SDL in jedem Fall.
+
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.
  
== Nachteile ==
+
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.
Nicht immer ist der Einsatz von SDL von Vorteil. Die Schnittstelle hat eindeutig ihren Ursprung bei der Spieleentwicklung und ist entsprechend auch auf dieser Bereich ausgelegt. Wer also eine Anwendung schreibt die nur einen kleinen Sichtbereich für OpenGL benötigt und ansonsten mit sehr vielen Knöpfen und Eingabefeldern aufwartet (z.B. eine Simulation) wird eventuell mit der [[VCL]] unter Delphi konfortabler sein Programm entwickeln können. Auch ist das "Simple" im Namen von SDL durchaus gebot. Das Fenstermangement ist nicht besonders mächtig. Das erzeugen eines Fensters und ihm einen Titel geben, sowie Events abzufangen ist schon nahezu das höchste Gefühle. In der Praxis zwar weitesgehend ausreichend, läßt es nicht viele Spielereien mit dem Fenster mehr zu.
 
  
== SDL in der Praxis ==
+
'''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.
  
== Philosophie ==
+
'''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:
Die gängige Philosophie von SDL ist ein möglich einfache, allerdings dennoch mächtige API zur Verfügung zu stellen. Nach einer kurzen Einarbeitungszeit setzt ein steiler Lerneffekt ein und man wird mit wenigen Anweisungen schnell zu den gewünschten Ziel gelangen. Im Gegensatz zu anderen komplexen APIs ist es ohne Probleme möglich innerhalb von kurzer Zeit die Funktionen von SDL auswendig zu lernen und sich nicht in einem Dschungel an Funktionen zu verheddern.
+
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.
  
Aus diesem Grunde ist SDL in mehre Subsysteme unterteilt, die je nach Anforderung der Anwendung eingebunden werden können. Obwohl diese einzelnen Systeme zumeist von unterschiedlichen Autoren stammen, erkennt man durchweg eine einheitliche Struktur innerhalb der Subsysteme.
+
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.
  
=== Einsatzfelder ===
 
SDL gliedert sich in zahlreiche Untersysteme mit unterschiedlichen Zielsetzungen. Ähnlich wie bei DirectX gibt es z.B. statt einem DirectInput ein SDL_Input, statt DirectSound ein SDL_Audio etc. Jedes dieser Subsysteme läßt sich meistens sehr leicht in eine bestehende SDL-Applikationen integrieren. Oftmals reicht der Aufruft des Subsystems beim Init von SDL aus um dieses in Anspruch zu nehmen. Im folgenden Stellen wir einige dieser Untersystem vor:
 
  
* [[SDL_Audio]] (DirectSound-Ersatz)
+
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.
* [[SDL_Image]] (Laden von Texturen)
 
* [[SDL_Net]] (DirectPlay-Ersatz)
 
* [[SDL_Thread]] (Multithreading)
 
* [[SDL_TTF]] (Anzeige von TrueType-Schriften)
 
  
Wer jetzt eine deutsche Dokumentation zu SDL-Funktionen sucht, kann hier im Wiki fündig werden. Siehe dazu die '''[[SDL-Funktionsübersicht]]'''.
+
== Philosophie ==
  
=== Typische Anwendungsbeispiele ===
+
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.
(Anm v. Phobeus: Das wird künftig wegfallen und durch Tutorials ersetzt)
 
* [[SDL_sample_texture|Laden einer Textur]]
 
* Erzeugen eines Fensters
 
* Reagieren auf Eingaben
 
  
 
== Wissenswertes ==
 
== Wissenswertes ==
Zeile 57: Zeile 42:
  
 
== Weiterführende Links ==
 
== Weiterführende Links ==
*[http://www.delphigl.com/script/do_show.php?name=sdl1&action=2 SDL-Einführung auf DelphiGL.com]
+
*[[Tutorial_SDL_Einstieg|SDL-Einführung auf DelphiGL.com]]
 
*[http://www.delphi-jedi.org/Jedi:TEAM_SDL_HOME Jedi SDL Portierung]
 
*[http://www.delphi-jedi.org/Jedi:TEAM_SDL_HOME Jedi SDL Portierung]
 
*[http://www.libsdl.de/ Offizielle deutsche SDL-Seite]
 
*[http://www.libsdl.de/ Offizielle deutsche SDL-Seite]

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