X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=plat_sdl.c;h=7f416389f8099996df156c04aebb0045bed51ee3;hb=bededcb4be20a22ec63d8fa6a77de093d9fc9fa7;hp=729a0b034b89f41f0b5046496990f16189263d2f;hpb=533726df95e88932d0bf72345a438ae415b8c04e;p=libpicofe.git diff --git a/plat_sdl.c b/plat_sdl.c index 729a0b0..7f41638 100644 --- a/plat_sdl.c +++ b/plat_sdl.c @@ -41,6 +41,14 @@ int plat_sdl_change_video_mode(int w, int h, int force) { static int prev_w, prev_h; + // skip GL recreation if window doesn't change - avoids flicker + if (plat_target.vout_method == vout_mode_gl && plat_sdl_gl_active + && plat_target.vout_fullscreen == old_fullscreen + && w == prev_w && h == prev_h && !force) + { + return 0; + } + if (w == 0) w = prev_w; else @@ -60,13 +68,6 @@ int plat_sdl_change_video_mode(int w, int h, int force) plat_target.vout_method = 0; } - // skip GL recreation if window doesn't change - avoids flicker - if (plat_target.vout_method == vout_mode_gl && plat_sdl_gl_active - && plat_target.vout_fullscreen == old_fullscreen && !force) - { - return 0; - } - if (plat_sdl_overlay != NULL) { SDL_FreeYUVOverlay(plat_sdl_overlay); plat_sdl_overlay = NULL; @@ -117,7 +118,8 @@ int plat_sdl_change_video_mode(int w, int h, int force) } } else if (plat_target.vout_method == vout_mode_gl) { - plat_sdl_gl_active = (gl_init(display, window, &gl_quirks) == 0); + int sw = plat_sdl_screen->w, sh = plat_sdl_screen->h; + plat_sdl_gl_active = (gl_init(display, window, &gl_quirks, sw, sh) == 0); if (!plat_sdl_gl_active) { fprintf(stderr, "warning: could not init GL.\n"); plat_target.vout_method = 0; @@ -126,8 +128,8 @@ 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; + int win_w = w; + int win_h = h; #if defined SDL_SURFACE_SW flags = SDL_SWSURFACE; @@ -185,8 +187,9 @@ void plat_sdl_event_handler(void *event_) } else if (plat_sdl_gl_active) { if (gl_quirks & GL_QUIRK_ACTIVATE_RECREATE) { + int sw = plat_sdl_screen->w, sh = plat_sdl_screen->h; gl_finish(); - plat_sdl_gl_active = (gl_init(display, window, &gl_quirks) == 0); + plat_sdl_gl_active = (gl_init(display, window, &gl_quirks, sw, sh) == 0); } gl_flip(NULL, 0, 0); } @@ -311,7 +314,7 @@ int plat_sdl_init(void) if (env) try_gl = atoi(env); if (try_gl) - ret = gl_init(display, window, &gl_quirks); + ret = gl_init(display, window, &gl_quirks, g_menuscreen_w, g_menuscreen_h); if (ret == 0) { gl_announce(); gl_works = 1; @@ -365,10 +368,10 @@ void plat_sdl_overlay_clear(void) int *dst = (int *)plat_sdl_overlay->pixels[0]; int v = 0x10801080; - for (; pixels > 0; dst += 4, pixels -= 2 * 4) + for (; pixels > 7; dst += 4, pixels -= 2 * 4) dst[0] = dst[1] = dst[2] = dst[3] = v; - for (; pixels > 0; dst++, pixels -= 2) + for (; pixels > 1; dst++, pixels -= 2) *dst = v; }