sdl2: support windowed fullscreen as default

This commit is contained in:
Ronald Kinard 2014-03-20 02:08:45 -05:00
parent 715a12ff08
commit 3b137d094a
1 changed files with 35 additions and 15 deletions

View File

@ -176,8 +176,9 @@ static INT32 windowedModes[MAXWINMODES][2] =
static void Impl_VideoSetupSDLBuffer(void); static void Impl_VideoSetupSDLBuffer(void);
static void Impl_VideoSetupBuffer(void); static void Impl_VideoSetupBuffer(void);
static SDL_bool Impl_CreateWindow(SDL_bool fullscreen);
static void SDLSetMode(INT32 width, INT32 height, INT32 bpp, Uint32 flags) static void SDLSetMode(INT32 width, INT32 height, SDL_bool fullscreen)
{ {
#if 0 #if 0
const char *SDLVD = I_GetEnv("SDL_VIDEODRIVER"); const char *SDLVD = I_GetEnv("SDL_VIDEODRIVER");
@ -199,6 +200,20 @@ static void SDLSetMode(INT32 width, INT32 height, INT32 bpp, Uint32 flags)
int bmask; int bmask;
int amask; int amask;
if (fullscreen)
{
SDL_DestroyRenderer(renderer);
renderer = NULL;
SDL_DestroyWindow(window);
window = NULL;
Impl_CreateWindow(fullscreen);
}
else
{
SDL_SetWindowSize(window, width, height);
SDL_SetWindowPosition(window, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED);
}
// Set up Texture // Set up Texture
realwidth = width; realwidth = width;
realheight = height; realheight = height;
@ -225,9 +240,6 @@ static void SDLSetMode(INT32 width, INT32 height, INT32 bpp, Uint32 flags)
rmask = 0x000000FF; rmask = 0x000000FF;
#endif #endif
vidSurface = SDL_CreateRGBSurface(0, width, height, 32, rmask, gmask, bmask, amask); vidSurface = SDL_CreateRGBSurface(0, width, height, 32, rmask, gmask, bmask, amask);
SDL_SetWindowSize(window, width, height);
SDL_SetWindowPosition(window, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED);
} }
// //
@ -1099,6 +1111,7 @@ void I_UpdateNoBlit(void)
return; return;
if (exposevideo) if (exposevideo)
{ {
SDL_RenderClear(renderer);
SDL_RenderCopy(renderer, texture, NULL, NULL); SDL_RenderCopy(renderer, texture, NULL, NULL);
SDL_RenderPresent(renderer); SDL_RenderPresent(renderer);
} }
@ -1466,6 +1479,7 @@ INT32 VID_GetModeForSize(INT32 w, INT32 h)
void VID_PrepareModeList(void) void VID_PrepareModeList(void)
{ {
// Under SDL2, we just use the windowed modes list, and scale in windowed fullscreen. // Under SDL2, we just use the windowed modes list, and scale in windowed fullscreen.
allow_fullscreen = true;
#if 0 #if 0
INT32 i; INT32 i;
@ -1533,7 +1547,7 @@ INT32 VID_SetMode(INT32 modeNum)
vid.modenum = modeNum; //VID_GetModeForSize(vidSurface->w,vidSurface->h); vid.modenum = modeNum; //VID_GetModeForSize(vidSurface->w,vidSurface->h);
SDLSetMode(windowedModes[modeNum][0], windowedModes[modeNum][1], 16, 0); SDLSetMode(windowedModes[modeNum][0], windowedModes[modeNum][1], USE_FULLSCREEN);
if (render_soft == rendermode) if (render_soft == rendermode)
{ {
@ -1655,14 +1669,23 @@ INT32 VID_SetMode(INT32 modeNum)
#endif #endif
} }
static void Impl_CreateWindow(void) static SDL_bool Impl_CreateWindow(SDL_bool fullscreen)
{ {
int flags = 0;
if (window != NULL) if (window != NULL)
{ {
return; return SDL_FALSE;
} }
window = SDL_CreateWindow("SRB2", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, BASEVIDWIDTH, BASEVIDHEIGHT, 0);
if (fullscreen)
{
flags = SDL_WINDOW_FULLSCREEN_DESKTOP;
}
window = SDL_CreateWindow("SRB2", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
BASEVIDWIDTH, BASEVIDHEIGHT, flags);
renderer = SDL_CreateRenderer(window, -1, 0); renderer = SDL_CreateRenderer(window, -1, 0);
return SDL_TRUE;
} }
static void Impl_SetWindowName(const char *title) static void Impl_SetWindowName(const char *title)
@ -1791,7 +1814,8 @@ void I_StartupGraphics(void)
VID_Command_ModeList_f(); VID_Command_ModeList_f();
// Create window // Create window
Impl_CreateWindow(); Impl_CreateWindow(USE_FULLSCREEN);
Impl_SetWindowName("SRB2");
vid.buffer = NULL; // For software mode vid.buffer = NULL; // For software mode
vid.width = BASEVIDWIDTH; // Default size for startup vid.width = BASEVIDWIDTH; // Default size for startup
@ -1804,13 +1828,9 @@ void I_StartupGraphics(void)
#ifdef HAVE_TTF #ifdef HAVE_TTF
I_ShutdownTTF(); I_ShutdownTTF();
#endif #endif
// Window title
Impl_SetWindowName("SRB2: Starting up");
// Window icon // Window icon
#ifdef HAVE_IMAGE #ifdef HAVE_IMAGE
//icoSurface = IMG_ReadXPMFromArray(SDL_icon_xpm); icoSurface = IMG_ReadXPMFromArray(SDL_icon_xpm);
#endif #endif
Impl_SetWindowIcon(); Impl_SetWindowIcon();
@ -1874,7 +1894,7 @@ void I_StartupGraphics(void)
#if 0 #if 0
vid.width = BASEVIDWIDTH; vid.width = BASEVIDWIDTH;
vid.height = BASEVIDHEIGHT; vid.height = BASEVIDHEIGHT;
SDLSetMode(vid.width, vid.height, BitsPerPixel, surfaceFlagsW); SDLSetMode(vid.width, vid.height, USE_FULLSCREEN);
if (!vidSurface) if (!vidSurface)
{ {
CONS_Printf(M_GetText("Could not set vidmode: %s\n") ,SDL_GetError()); CONS_Printf(M_GetText("Could not set vidmode: %s\n") ,SDL_GetError());