Ein erstes Programm mit der SDL

Als erstes müssen wir natürlich eine Headerdatei einbinden. Die Hauptincludedatei der SDL können wir einfach mit #include „SDL.h“ einbinden. Wenn also folgendes kürzeste SDL Programm fehlerfrei kompiliert, dann wissen wir das wir alles fehlerfrei installiert haben.

:!: Achtung:
Manchmal sieht man auch "#include <SDL/SDL.h>". Das sollten wir allerdings vermeiden, da es nicht garantiert ist das sich die Header auch wirklich auf jeder Plattform in einem Ordner 'SDL' befinden.


#include "SDL.h"
 
int main( int argc, char **argv )
{
  return 0;
}

Mit Hilfe des Hilfsprogrammes sdl-config kann man alle benötigten Kompilerflags automatisch erhalten so dass ein kompilieren unter Linux bzw. unter Windows mit MinGW wie folgt ausschauen kann:

g++ main.cpp -o hello-sdl -Wall $(sdl-config --cflags --libs)

Das war natürlich noch kein richtiges Programm mit der SDL aber wir haben immerhin schon feststellen können ob der Kompiler den Header findet. Als nächstes schauen wir uns gleich einmal die wichtigste Funktion der SDL an, nämlich SDL_Init. Diese Funktion erwartet genau einen Parameter, der eine Kombination von Flags sein soll. Mögliche Flags sind zum Beispiel SDL_INIT_VIDEO oder SDL_INIT_AUDIO. Fürs erste reicht es wenn wir SDL_INIT_VIDEO und am Besten auch gleich noch SDL_INIT_TIMER verwenden um auch die Timerfunktionen der SDL verwenden zu können. Wenn die Initialisierung erfolgreich war, dann liefert SDL_Init '0' zurück im Fehlerfall '-1'. Eine Fehlerbeschreibung können wir dann mit SDL_GetError erhalten. Mit dem Aufruf dieser Funktion bekommen wir immer einen String mit der Fehlerbeschreibung des letzten aufgetretenen Fehlers.

Am Ende sollte wir die SDL auch wieder beenden, damit verwendetet Ressourcen wieder sauber freigegeben werden. Das geht ganz einfach mit einem Aufruf der Funktion SDL_Quit. Da man ein Programm oft auf mehreren Wegen verlassen kann hat es sich bewährt in C die SDL_Quit Funktion mit atexit() zu registrieren oder in C++ das Initialisieren einfach in eine Klasse zu packen und dabei SDL_Quit im Konstruktor aufzurufen.

#include <iostream>
#include "SDL.h"
 
// Unbedingt mit argc und argv, da es sonst
// mit MinGW wahrscheinlich nicht kompiliert.
int main( int argc, char **argv )
{
  // Video und Timersubsystem initialisieren
  if( SDL_Init( SDL_INIT_VIDEO | SDL_INIT_TIMER ) )
  {
    // Irgendwas ist schiefgegangen. SDL_GetError weiß mehr
    std::cerr << "Konnte SDL nicht initialisieren: " << SDL_GetError() << std::endl;
    return 1;
  }
 
  // SDL_Quit registrieren
  atexit(&SDL_Quit);
 
  std::cout << "Dieses Mal ein freudiges Hello SDL!" << std::endl;
 
  return 0;
}

Jetzt brauchen wir den Code nur mehr kompilieren. Dabei müssen wir auch noch zur SDL linken. Unter Linux reicht dabei bei kompilieren mit dem gcc ein '-lSDL' und in einer IDE einfach nur 'SDL' als 'Library' oder 'Bibliothek' hinzufügen. Unter Windows müssen wir zusätzlich noch zu 'SDLmain' linken. Nach einer hoffentlich fehlerfreien Kompilierung sollten wir das Programm ausführen können und dann unseren netten Begrüßungstext zu sehen bekommen.

Sollte bis jetzt bei dir etwas nicht funktionieren dann schreib doch einfach in unser Forum. Diskussion zu SDL

Wenn alles klar ist und funktioniert dann gehen wir gleich weiter zu einem Programm das bereits etwas sinnvolles tut: Den Videomodus setzten (Ein Fenster erstellen)


Vorkenntnisse und Voraussetzungen ← | ↑ SDL Start ↑ | → Den Videomodus setzen (Ein Fenster erstellen)