From ed03db8497675ce500a2cec50a0f3056897e95e7 Mon Sep 17 00:00:00 2001 From: punkrockguy318 Date: Sat, 2 Mar 2013 19:46:34 +0000 Subject: [PATCH] sdl: dynamically set fullscreen resolution when SDL.[x/y]Resolution is set to 0 sdl: new default values for SDL.[X/Y]Resolution to dynamically set fullscreen resolution --- src/drivers/sdl/config.cpp | 18 ++++++----------- src/drivers/sdl/sdl-video.cpp | 8 +++++--- src/drivers/sdl/sdl.cpp | 37 ++++++++++++++++++++++++++++++++++- 3 files changed, 47 insertions(+), 16 deletions(-) diff --git a/src/drivers/sdl/config.cpp b/src/drivers/sdl/config.cpp index 8432089f..7cee018e 100644 --- a/src/drivers/sdl/config.cpp +++ b/src/drivers/sdl/config.cpp @@ -156,20 +156,14 @@ InitConfig() config->addOption("slstart", "SDL.ScanLineStart", 0); config->addOption("slend", "SDL.ScanLineEnd", 239); - const SDL_VideoInfo* vid_info = SDL_GetVideoInfo(); // video controls config->addOption('f', "fullscreen", "SDL.Fullscreen", 0); - // if we can detect the screen resolultion, use that for the default fullscreen res - if(vid_info != NULL) - { - config->addOption('x', "xres", "SDL.XResolution", vid_info->current_w); - config->addOption('y', "yres", "SDL.YResolution", vid_info->current_h); - } - else - { - config->addOption('x', "xres", "SDL.XResolution", 512); - config->addOption('y', "yres", "SDL.YResolution", 448); - } + + // set x/y res to 0 for automatic fullscreen resolution detection (no change) + config->addOption('x', "xres", "SDL.XResolution", 0); + config->addOption('y', "yres", "SDL.YResolution", 0); + config->addOption("SDL.LastXRes", 0); + config->addOption("SDL.LastYRes", 0); config->addOption('b', "bpp", "SDL.BitsPerPixel", 32); config->addOption("doublebuf", "SDL.DoubleBuffering", 0); config->addOption("autoscale", "SDL.AutoScale", 1); diff --git a/src/drivers/sdl/sdl-video.cpp b/src/drivers/sdl/sdl-video.cpp index 84e4492f..5f45cf44 100644 --- a/src/drivers/sdl/sdl-video.cpp +++ b/src/drivers/sdl/sdl-video.cpp @@ -170,8 +170,8 @@ InitVideo(FCEUGI *gi) g_config->getOption("SDL.SpecialFilter", &s_sponge); g_config->getOption("SDL.XStretch", &xstretch); g_config->getOption("SDL.YStretch", &ystretch); - g_config->getOption("SDL.XResolution", &xres); - g_config->getOption("SDL.YResolution", &yres); + g_config->getOption("SDL.LastXRes", &xres); + g_config->getOption("SDL.LastYRes", &yres); g_config->getOption("SDL.ClipSides", &s_clipSides); g_config->getOption("SDL.NoFrame", &noframe); g_config->getOption("SDL.ShowFPS", &show_fps); @@ -179,7 +179,9 @@ InitVideo(FCEUGI *gi) // check the starting, ending, and total scan lines FCEUI_GetCurrentVidSystem(&s_srendline, &s_erendline); s_tlines = s_erendline - s_srendline + 1; - + + // check if we should auto-set x/y resolution + // check for OpenGL and set the global flags #if OPENGL if(s_useOpenGL && !s_sponge) { diff --git a/src/drivers/sdl/sdl.cpp b/src/drivers/sdl/sdl.cpp index 6659bf3e..0652dd3b 100644 --- a/src/drivers/sdl/sdl.cpp +++ b/src/drivers/sdl/sdl.cpp @@ -615,9 +615,44 @@ int main(int argc, char *argv[]) SDL_Quit(); return 0; } + + // If x/y res set to 0, store current display res in SDL.LastX/YRes + int yres, xres; + g_config->getOption("SDL.XResolution", &xres); + g_config->getOption("SDL.YResolution", &yres); + const SDL_VideoInfo* vid_info = SDL_GetVideoInfo(); + if(xres == 0) + { + if(vid_info != NULL) + { + g_config->setOption("SDL.LastXRes", vid_info->current_w); + } + else + { + g_config->setOption("SDL.LastXRes", 512); + } + } + else + { + g_config->setOption("SDL.LastXRes", xres); + } + if(yres == 0) + { + if(vid_info != NULL) + { + g_config->setOption("SDL.LastYRes", vid_info->current_h); + } + else + { + g_config->setOption("SDL.LastYRes", 448); + } + } + else + { + g_config->setOption("SDL.LastYRes", yres); + } int autoResume; - g_config->getOption("SDL.AutoResume", &autoResume); if(autoResume) {