X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=plat_sdl.c;h=77bffe67339ac30e80004a16c6c45368303d1d18;hb=74cb846a3adc374d86400b792d30f93cf35e234e;hp=9b78d056785fc180009f0c287f65eb1516dfdaf3;hpb=9ba0831411aae044a737d7aeac30edbd12be6521;p=libpicofe.git diff --git a/plat_sdl.c b/plat_sdl.c index 9b78d05..77bffe6 100644 --- a/plat_sdl.c +++ b/plat_sdl.c @@ -121,9 +121,26 @@ int plat_sdl_change_video_mode(int w, int h, int force) } if (plat_target.vout_method == 0) { + Uint32 flags; + int win_w = window_w; + int win_h = window_h; + +#if defined SDL_SURFACE_SW + flags = SDL_SWSURFACE; +#elif defined(SDL_TRIPLEBUF) && defined(SDL_BUFFER_3X) + flags = SDL_HWSURFACE | SDL_TRIPLEBUF; +#else + flags = SDL_HWSURFACE | SDL_DOUBLEBUF; +#endif + if (plat_target.vout_fullscreen && fs_w && fs_h) { + flags |= SDL_FULLSCREEN; + win_w = fs_w; + win_h = fs_h; + } + SDL_PumpEvents(); - plat_sdl_screen = SDL_SetVideoMode(w, h, 16, SDL_HWSURFACE | SDL_DOUBLEBUF); + plat_sdl_screen = SDL_SetVideoMode(win_w, win_h, 16, flags); if (plat_sdl_screen == NULL) { fprintf(stderr, "SDL_SetVideoMode failed: %s\n", SDL_GetError()); return -1; @@ -182,9 +199,11 @@ int plat_sdl_init(void) static const char *vout_list[] = { NULL, NULL, NULL, NULL, NULL }; const SDL_VideoInfo *info; SDL_SysWMinfo wminfo; + const char *env; int overlay_works = 0; int gl_works = 0; int i, ret, h; + int try_gl; ret = SDL_Init(SDL_INIT_VIDEO | SDL_INIT_NOPARACHUTE); if (ret != 0) { @@ -210,6 +229,8 @@ int plat_sdl_init(void) if (g_menuscreen_h > h) g_menuscreen_h = h; } + if (plat_target.vout_fullscreen) + g_menuscreen_w = g_menuscreen_h * fs_w / fs_h; ret = plat_sdl_change_video_mode(g_menuscreen_w, g_menuscreen_h, 1); if (ret != 0) { @@ -227,6 +248,7 @@ int plat_sdl_init(void) } g_menuscreen_w = window_w = plat_sdl_screen->w; g_menuscreen_h = window_h = plat_sdl_screen->h; + g_menuscreen_pp = g_menuscreen_w; // overlay/gl require native bpp in some cases.. plat_sdl_screen = SDL_SetVideoMode(g_menuscreen_w, g_menuscreen_h, @@ -269,8 +291,22 @@ int plat_sdl_init(void) (void)wminfo; #endif - ret = gl_init(display, window, &gl_quirks); + ret = -1; + try_gl = 1; + env = getenv("DISPLAY"); + if (env && env[0] != ':') { + fprintf(stderr, "looks like a remote DISPLAY, " + "not trying GL (use PICOFE_GL=1 to override)\n"); + // because some drivers just kill the program with no way to recover + try_gl = 0; + } + env = getenv("PICOFE_GL"); + if (env) + try_gl = atoi(env); + if (try_gl) + ret = gl_init(display, window, &gl_quirks); if (ret == 0) { + gl_announce(); gl_works = 1; gl_finish(); } @@ -291,6 +327,7 @@ int plat_sdl_init(void) } plat_target.vout_methods = vout_list; + plat_sdl_change_video_mode(g_menuscreen_w, g_menuscreen_h, 1); return 0; fail: