Problemas y solución del modo a pantalla completa con SDL
Ultimamente estoy empezando a desarrollar un video juego escrito en C++. Para ello estoy utilizando las librerias SDL que permiten
realizar operaciones de dibujo 2D, la gestión de efectos de sonido y música, así como la carga y gestión de imágenes de una manera muy sencilla´.
En SDL existe una función que nos permite alternar entre modo ventana y modo a pantalla completa. Dicha función es:
int SDL_WM_ToggleFullScreen(SDL_Surface *surface);
En principio esta función debería funcionar correctamente, pero estoy teniendo algunos problemas de portabilidad a la hora de utilizarla. Por ello os pego a continuación
la alternativa que existe a dicha función que encontré aquí:
/* Anyone may copy and alter this fragment of pseudo-code and use it however they wish */ #include "SDL.h" /* The only library needed to do this */ Uint32 flags = SDL_SWSURFACE; /* Start with whatever flags you prefer */ SDL_Surface *screen = SDL_SetVideoMode(640, 480, 32, flags); /* Start with whatever settings you prefer */ /* -- Portable Fullscreen Toggling -- As of SDL 1.2.10, if width and height are both 0, SDL_SetVideoMode will use the width and height of the current video mode (or the desktop mode, if no mode has been set). Use 0 for Height, Width, and Color Depth to keep the current values. */ flags = screen->flags; /* Save the current flags in case toggling fails */ screen = SDL_SetVideoMode(0, 0, 0, screen->flags ^ SDL_FULLSCREEN); /*Toggles FullScreen Mode */ if(screen == NULL) screen = SDL_SetVideoMode(0, 0, 0, flags); /* If toggle FullScreen failed, then switch back */ if(screen == NULL) exit(1); /* If you can't switch back for some reason, then epic fail */
Funciona a las mil maravillas. El truco está en guardarse los flags con los que se crea la superficie 2D, intentar añadirle la funcionalidad de pantalla de completa, y en caso de que falle
volver a establecer los flags anteriormente guardados.