Benutzer-Werkzeuge

Webseiten-Werkzeuge


topics:sdl

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.

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().

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.

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.

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.

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 <SDL.h>

Für die Verwendung von SDL v2.x muss die Bibliothek wie folgt eingebunden werden.

#include <SDL2/SDL.h>

Gleiches gilt auch für Erweiterungen wie SDL_image.h.

#include <SDL2/SDL_image.h>

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.

topics/sdl.txt · Zuletzt geändert: 2015/01/25 15:40 von ninux

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki