Rewrite video mode setting. Should use bpp now.

This commit is contained in:
Eric Wasylishen 2014-05-19 20:00:59 -07:00
parent af3c162f1d
commit 2e2360bf0e

View file

@ -412,6 +412,38 @@ static qboolean VID_ValidMode (int width, int height, int bpp, qboolean fullscre
#endif #endif
} }
#if defined(USE_SDL2)
/*
================
VID_SDL2_GetDisplayMode
Returns a pointer to a statically allocated SDL_DisplayMode structure
if there is one with the requested params on the default display.
Otherwise returns NULL.
This is passed to SDL_SetWindowDisplayMode to specify a pixel format
with the requested bpp. If we didn't care about bpp we could just pass NULL.
================
*/
static SDL_DisplayMode *VID_SDL2_GetDisplayMode(int width, int height, int bpp)
{
static SDL_DisplayMode mode;
const int sdlmodes = SDL_GetNumDisplayModes(0);
int i;
for (i = 0; i < sdlmodes; i++)
{
if (SDL_GetDisplayMode(0, i, &mode) == 0
&& mode.w == width && mode.h == height
&& SDL_BITSPERPIXEL(mode.format) == bpp)
{
return &mode;
}
}
return NULL;
}
#endif
/* /*
================ ================
VID_SetMode VID_SetMode
@ -433,41 +465,42 @@ static int VID_SetMode (int width, int height, int bpp, qboolean fullscreen)
q_snprintf(caption, sizeof(caption), "QuakeSpasm %1.2f.%d", (float)FITZQUAKE_VERSION, QUAKESPASM_VER_PATCH); q_snprintf(caption, sizeof(caption), "QuakeSpasm %1.2f.%d", (float)FITZQUAKE_VERSION, QUAKESPASM_VER_PATCH);
#if defined(USE_SDL2) #if defined(USE_SDL2)
if (!window) // Create a new window /* Create the window if needed, hidden */
if (!window)
{ {
flags = SDL_WINDOW_OPENGL; window = SDL_CreateWindow (caption,
if (fullscreen) SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
flags |= SDL_WINDOW_FULLSCREEN; width, height, SDL_WINDOW_OPENGL | SDL_WINDOW_HIDDEN);
window = SDL_CreateWindow(caption,
SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED,
width, height, flags);
if (!window) if (!window)
Sys_Error ("Couldn't set video mode"); Sys_Error ("Couldn't set video mode");
draw_context = SDL_GL_CreateContext(window);
}
else // A window already exists
{
if (VID_GetFullscreen())
{
if (SDL_SetWindowFullscreen(window, 0) != 0)
Sys_Error ("Couldn't set fullscreen state mode");
}
SDL_SetWindowSize(window, width, height);
SDL_SetWindowPosition(window, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED);
if (fullscreen) draw_context = SDL_GL_CreateContext (window);
{ }
if (SDL_SetWindowFullscreen(window, SDL_WINDOW_FULLSCREEN) != 0)
Sys_Error ("Couldn't set fullscreen state mode"); /* Ensure the window is not fullscreen */
} if (VID_GetFullscreen ())
{
if (SDL_SetWindowFullscreen (window, 0) != 0)
Sys_Error("Couldn't set fullscreen state mode");
} }
/* Set window size and display mode */
SDL_SetWindowSize (window, width, height);
SDL_SetWindowPosition (window, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED);
SDL_SetWindowDisplayMode (window, VID_SDL2_GetDisplayMode(width, height, bpp));
/* Make window fullscreen if needed, and show the window */
if (fullscreen)
{
if (SDL_SetWindowFullscreen (window, SDL_WINDOW_FULLSCREEN) != 0)
Sys_Error ("Couldn't set fullscreen state mode");
}
SDL_ShowWindow (window);
gl_swap_control = true; gl_swap_control = true;
if (SDL_GL_SetSwapInterval((vid_vsync.value) ? 1 : 0) == -1) if (SDL_GL_SetSwapInterval ((vid_vsync.value) ? 1 : 0) == -1)
gl_swap_control = false; gl_swap_control = false;
#else #else
flags = DEFAULT_SDL_FLAGS; flags = DEFAULT_SDL_FLAGS;