====== SDL ====== SDL (Simple Directmedia Layer) ist eine in C geschriebene und plattformübergreifende Bibliothek für LowLevel Funktionalitäten wie Video, Audio, div. Ein- und Ausgabegeräte und Grafik-Hardware. ===== Grundlagen ===== ==== Window ==== Ein Window definiert den nutzbaren Bereich des Bildes für die gesamte Applikation und wird mit ''SDL_CreateWindow()'' erstellt. * [[https://wiki.libsdl.org/SDL_CreateWindow|SDL_CreateWindow]]. ==== Surface ==== Eine Surface beinhaltet ein Fläche von renderbaren Bildpunkten (Pixel) und einige Informationen zur Surface (wie etwa das Format, Höhe, Breite, ...). Typisch werden mehrere Surfaces angelegt wobei eine Surface dem Window zugeordnet wird um entprechende Bildpunkte auf dem Window darzustellen. Hierfür gibt es die Möglichkeit eine Surface direkt an ein Window zu kopplen mit ''SDL_GetWindowSurface()''. * [[https://wiki.libsdl.org/SDL_Surface|SDL_Surface]] * [[https://wiki.libsdl.org/SDL_GetWindowSurface|SDL_GetWindowSurface]] ==== Blitting ==== Soll eine Surface (im Sinne einer Pixelfläche) verändert werden, so geschieht dies nicht auf dem Window sondern im Hintergrund. Hierfür muss eine Surface angelegt werden, welche für die Manipulationsvorgänge genutzt wird. Nach Abschluss der Pixel-Manipulationen werden einfach die Surfaces bzw. deren Inhalte getauscht. Diese Vorgehensweise wird //Blitting// genannt. SDL stellt für diese Operationen Funktionen wie ''SDL_BlitSurface()'' zur Verfügung um etwa den Inhalt zweier Surfaces zu tauschen. * [[https://wiki.libsdl.org/SDL_BlitSurface|SDL_BlitSurface]] ==== Bilddateien ==== Um Bilddateien in eine Surface laden zu können bedarf es der Erweiterung von SDL, denn diese bietet nur die LowLevel Funktionalitäten an mit welchen lediglich Bitmaps (BMP) geladen werden können (siehe ''SDL_LoadBMP''). Mit der Bibliothek ''SDL_image'' können gängige Formate wie PNG, BMP, GIF und JPG in eine Surface geladen werden. Diese Bibliothek bietet hierfür die generische Funktion ''IMG_Load()'' an. * [[https://wiki.libsdl.org/SDL_LoadBMP|SDL_LoadBMP]] * [[http://sdl.beuc.net/sdl.wiki/SDL_image|SDL_image - IMG_Load]] ==== Events ==== Da SDL primär für interaktive Anwendungen verwendet wird, bietet diese auch Möglichkeiten für das Event-Handling. Hierfür gibt es Events und Event-Queues. Jeder Event der während dem Betrieb einer Anwendung auftritt, wird in der Event-Queue abgelgt. Diese Events können dann mit ''SDL_PollEvent()'' aus der Queue ausgelesen bzw. kopiert werden in eine Event-Variable, welche dann genauer betrachtet werden kann um etwa den Programmfluss zu steuern. Analog zu auslesen der Events aus der Event-Queue mit ''SDL_PollEvent()'' gibt es auch die Möglichkeit Event in die Queue abzulegen. Hierfür steht die Funktion ''SDL_PushEvent()'' zur Verfügung. * [[https://wiki.libsdl.org/SDL_Event|SDL_Event]] * [[https://wiki.libsdl.org/SDL_PollEvent|SDL_PollEvent]] * [[https://wiki.libsdl.org/SDL_PushEvent|SDL_PushEvent]] ===== Tipps und Pitfalls ===== ==== Headerdateien für SDL2 unter Linux ==== Bei der Verwendung von SDL unter Linux gibt es eine Besonderheit bezüglich der Header-Dateien, denn es bestehen sowohl SDL v1.x als auch SDL v2.x im System. Für die Verwendung von SDL v1.x kann die Headerdatei //normal// eingebunden werden. #include Für die Verwendung von SDL v2.x muss die Bibliothek wie folgt eingebunden werden. #include Gleiches gilt auch für Erweiterungen wie ''SDL_image.h''. #include ==== Delays unter Linux ==== Je nach dem kann es sein, dass ein kurzes Delay notwendig ist beim Start der Anwendung bis die Änderung einer Suface bzw. eines Window zu sehen ist. Dies ist ein aktueller Bug bei dem vermutlich ein Zusammenhang zu X11 und dem eingesetzten WindowManager besteht. * [[https://bugzilla.libsdl.org/show_bug.cgi?id=1948|Bugzilla - Bug 1948 - Screen remains blank after update]] ===== Weblinks ===== * [[https://www.libsdl.org/|Offizielle Webseite zu SDL]] * [[https://wiki.libsdl.org/FrontPage|Offizielles Wiki zu SDL (inkl. Code Dokumentation)]] * [[http://lazyfoo.net/tutorials/SDL/index.php|Umfangreiches C/C++ Tutorial zu SDL Grundlagen für die Spieleentwicklung]] * [[https://www.youtube.com/watch?v=MeMPCSqQ-34|Game Development with SDL 2.0 - Talk zu SDL2 von Ryan Gordon, STEAM DEV DAYS]] ---- dataentry topic ---- type : topic advanced_users : # beginner_users : ninux wannabe_users : # category_topictags : programming ----