make gl layer reinitializable
[libpicofe.git] / plat_sdl.c
index 729a0b0..b5e2665 100644 (file)
@@ -117,7 +117,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 +127,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 +186,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 +313,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 +367,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;
 }