Vollbildmodus unter SDL

Programme unter SDL im Vollbildmodus zu schreiben ist problematisch. Ein Grund ist, daß die Fenster unter verschiedenen Betriebssystemen sehr unterschiedlich funktionieren.

Es gibt mehrere Ansätze, mit denen man sich behelfen kann:

Rahmen abschalten

Für ein gegebenes SDL-Fenster win kann man den Rahmen abschalten. Die Methode funktioniert leicht und zuverlässig:

SDL_SetWindowBordered( win, SDL_FALSE );

Fenster maximieren

Es gibt eine Funktion, die ein SDL-Fenster vergrößert. Funktioniert aber nicht unter Linux:

SDL_MaximizeWindow(win);

Fenstergröße ermitteln und anpassen

Es wird aus einem Fenster die Größe des Displays ermittelt und ein neues, maximal großes Fenster erzeugt:

SDL_Rect curBounds;
SDL_GetWindowPosition( win, &curBounds.x, &curBounds.y );
SDL_GetWindowSize( win, &curBounds.w, &curBounds.h );

int idx = SDL_GetWindowDisplayIndex( win );
SDL_Rect bounds;
SDL_GetDisplayBounds( idx, &bounds );

win = SDL_CreateWindow("Fruechte", bounds.x, bounds.y, bounds.w, bounds.h, SDL_WINDOW_SHOWN);    
SDL_SetWindowBordered( win, SDL_FALSE );
SDL_Surface *surf = SDL_GetWindowSurface(win);

Das kommt einem Vollbildmodus zumindest schon recht nahe.

Echter Vollbildmodus

Die Zeile, um den Vollbildmodus zu aktivieren ist:

SDL_SetWindowFullscreen(win, SDL_WINDOW_FULLSCREEN);

auch

SDL_SetWindowFullscreen(win, SDL_WINDOW_FULLSCREEN_DESKTOP);

Unter Linux funktioniert diese Zeile jedoch definitiv gar nicht. Eine Diskussion zum Thema findet sich unter http://stackoverflow.com/questions/19431170/fullscreen-modes-in-ubuntu-sdl-opengl.

results matching ""

    No results matching ""