Sisyphus repository
Last update: 1 october 2023 | SRPMs: 18631 | Visits: 37557102
en ru br
ALT Linux repos
S:0.5.9-alt3.beta3

Group :: Emulators
RPM: fakenes

 Main   Changelog   Spec   Patches   Sources   Download   Gear   Bugs and FR  Repocop 

Patch: fakenes-0.5.8-driver-switch.patch
Download


diff -ur fakenes-0.5.9-beta3/src/gui.c fakenes-0.5.9-beta3.new/src/gui.c
--- fakenes-0.5.9-beta3/src/gui.c	2007-06-25 18:43:10.000000000 +0200
+++ fakenes-0.5.9-beta3.new/src/gui.c	2009-10-25 10:38:18.000000000 +0100
@@ -206,55 +206,59 @@
    TOGGLE_MENU_ITEM(audio_output_buffer_menu_175ms,     (audio_options.buffer_length_ms_hint == 175));
    TOGGLE_MENU_ITEM(audio_output_buffer_menu_200ms,     (audio_options.buffer_length_ms_hint == 200));
 
+   TOGGLE_MENU_ITEM(video_driver_menu_safe,              (menu_video_driver == GFX_SAFE));
+   TOGGLE_MENU_ITEM(video_driver_menu_automatic,         (menu_video_driver == GFX_AUTODETECT));
+
 #ifdef ALLEGRO_DOS
 
-   TOGGLE_MENU_ITEM(video_driver_dos_menu_vga,           (gfx_driver->id == GFX_VGA));
-   TOGGLE_MENU_ITEM(video_driver_dos_menu_vga_mode_x,    (gfx_driver->id == GFX_MODEX));
-   TOGGLE_MENU_ITEM(video_driver_dos_menu_vesa,          (gfx_driver->id == GFX_VESA1));
-   TOGGLE_MENU_ITEM(video_driver_dos_menu_vesa_2_banked, (gfx_driver->id == GFX_VESA2B));
-   TOGGLE_MENU_ITEM(video_driver_dos_menu_vesa_2_linear, (gfx_driver->id == GFX_VESA2L));
-   TOGGLE_MENU_ITEM(video_driver_dos_menu_vesa_3,        (gfx_driver->id == GFX_VESA3));
-   TOGGLE_MENU_ITEM(video_driver_dos_menu_vesa_vbe_af,   (gfx_driver->id == GFX_VBEAF));
+   TOGGLE_MENU_ITEM(video_driver_dos_menu_vga,           (menu_video_driver == GFX_VGA));
+   TOGGLE_MENU_ITEM(video_driver_dos_menu_vga_mode_x,    (menu_video_driver == GFX_MODEX));
+   TOGGLE_MENU_ITEM(video_driver_dos_menu_vesa,          (menu_video_driver == GFX_VESA1));
+   TOGGLE_MENU_ITEM(video_driver_dos_menu_vesa_2_banked, (menu_video_driver == GFX_VESA2B));
+   TOGGLE_MENU_ITEM(video_driver_dos_menu_vesa_2_linear, (menu_video_driver == GFX_VESA2L));
+   TOGGLE_MENU_ITEM(video_driver_dos_menu_vesa_3,        (menu_video_driver == GFX_VESA3));
+   TOGGLE_MENU_ITEM(video_driver_dos_menu_vesa_vbe_af,   (menu_video_driver == GFX_VBEAF));
 
 #endif   /* ALLEGRO_DOS */
 
 #ifdef ALLEGRO_WINDOWS
 
-   TOGGLE_MENU_ITEM(video_driver_windows_menu_directx,         (gfx_driver->id == GFX_DIRECTX));
-   TOGGLE_MENU_ITEM(video_driver_windows_menu_directx_window,  (gfx_driver->id == GFX_DIRECTX_WIN));
-   TOGGLE_MENU_ITEM(video_driver_windows_menu_directx_overlay, (gfx_driver->id == GFX_DIRECTX_OVL));
-   TOGGLE_MENU_ITEM(video_driver_windows_menu_gdi,             (gfx_driver->id == GFX_GDI));
+   TOGGLE_MENU_ITEM(video_driver_windows_menu_directx,         (menu_video_driver == GFX_DIRECTX));
+   TOGGLE_MENU_ITEM(video_driver_windows_menu_directx_window,  (menu_video_driver == GFX_DIRECTX_WIN));
+   TOGGLE_MENU_ITEM(video_driver_windows_menu_directx_overlay, (menu_video_driver == GFX_DIRECTX_OVL));
+   TOGGLE_MENU_ITEM(video_driver_windows_menu_gdi,             (menu_video_driver == GFX_GDI));
 
 #endif   /* ALLEGRO_WINDOWS */
 
 #ifdef ALLEGRO_LINUX
 
-   TOGGLE_MENU_ITEM(video_driver_linux_menu_vga,         (gfx_driver->id == GFX_VGA));
-   TOGGLE_MENU_ITEM(video_driver_linux_menu_vga_mode_x,  (gfx_driver->id == GFX_MODEX));
-   TOGGLE_MENU_ITEM(video_driver_linux_menu_vesa_vbe_af, (gfx_driver->id == GFX_VBEAF));
+   TOGGLE_MENU_ITEM(video_driver_linux_menu_vga,         (menu_video_driver == GFX_VGA));
+   TOGGLE_MENU_ITEM(video_driver_linux_menu_vga_mode_x,  (menu_video_driver == GFX_MODEX));
+   TOGGLE_MENU_ITEM(video_driver_linux_menu_vesa_vbe_af, (menu_video_driver == GFX_VBEAF));
 #ifdef GFX_FBCON
-   TOGGLE_MENU_ITEM(video_driver_linux_menu_framebuffer, (gfx_driver->id == GFX_FBCON));
+   TOGGLE_MENU_ITEM(video_driver_linux_menu_framebuffer, (menu_video_driver == GFX_FBCON));
 #endif
 #ifdef GFX_SVGALIB
-   TOGGLE_MENU_ITEM(video_driver_linux_menu_svgalib,     (gfx_driver->id == GFX_SVGALIB));
+   TOGGLE_MENU_ITEM(video_driver_linux_menu_svgalib,     (menu_video_driver == GFX_SVGALIB));
 #endif
 
 #endif   /* ALLEGRO_LINUX */
 
 #ifdef ALLEGRO_UNIX
 
-   TOGGLE_MENU_ITEM(video_driver_unix_menu_x_windows,      (gfx_driver->id == GFX_XWINDOWS));
-   TOGGLE_MENU_ITEM(video_driver_unix_menu_x_windows_full, (gfx_driver->id == GFX_XWINDOWS_FULLSCREEN));
-   TOGGLE_MENU_ITEM(video_driver_unix_menu_x_dga,          (gfx_driver->id == GFX_XDGA));
-   TOGGLE_MENU_ITEM(video_driver_unix_menu_x_dga_full,     (gfx_driver->id == GFX_XDGA_FULLSCREEN));
-   TOGGLE_MENU_ITEM(video_driver_unix_menu_x_dga_2,        (gfx_driver->id == GFX_XDGA2));
+   TOGGLE_MENU_ITEM(video_driver_unix_menu_x_windows,      (menu_video_driver == GFX_XWINDOWS));
+   TOGGLE_MENU_ITEM(video_driver_unix_menu_x_windows_full, (menu_video_driver == GFX_XWINDOWS_FULLSCREEN));
+   TOGGLE_MENU_ITEM(video_driver_unix_menu_x_dga,          (menu_video_driver == GFX_XDGA));
+   TOGGLE_MENU_ITEM(video_driver_unix_menu_x_dga_full,     (menu_video_driver == GFX_XDGA_FULLSCREEN));
+   TOGGLE_MENU_ITEM(video_driver_unix_menu_x_dga_2,        (menu_video_driver == GFX_XDGA2));
 
 #endif   /* ALLEGRO_UNIX */
 
 #ifdef USE_ALLEGROGL
 
-   TOGGLE_MENU_ITEM(video_driver_menu_opengl_full, (gfx_driver->id == GFX_OPENGL_FULLSCREEN));
-   TOGGLE_MENU_ITEM(video_driver_menu_opengl_win,  (gfx_driver->id == GFX_OPENGL_WINDOWED));
+   TOGGLE_MENU_ITEM(video_driver_menu_opengl,      (menu_video_driver == GFX_OPENGL));
+   TOGGLE_MENU_ITEM(video_driver_menu_opengl_full, (menu_video_driver == GFX_OPENGL_FULLSCREEN));
+   TOGGLE_MENU_ITEM(video_driver_menu_opengl_win,  (menu_video_driver == GFX_OPENGL_WINDOWED));
 
 #endif   /* USE_ALLEGROGL */
 
@@ -2562,6 +2562,7 @@ static int video_menu_color (void)
       return (D_CLOSE); \
    }
 
+DRIVER_MENU_HANDLER(safe, GFX_SAFE)
 DRIVER_MENU_HANDLER(automatic, GFX_AUTODETECT)
 
 #ifdef ALLEGRO_DOS
diff -ur fakenes-0.5.9-beta3/src/include/gui/menus.h fakenes-0.5.9-beta3.new/src/include/gui/menus.h
--- fakenes-0.5.9-beta3/src/include/gui/menus.h	2007-06-19 10:20:26.000000000 +0200
+++ fakenes-0.5.9-beta3.new/src/include/gui/menus.h	2009-10-25 10:36:00.000000000 +0100
@@ -582,6 +582,7 @@
 
 #endif   /* !ALLEGRO_UNIX */
 
+DEFINE_MENU_CALLBACK(video_driver_menu_safe);
 DEFINE_MENU_CALLBACK(video_driver_menu_automatic);
 
 #ifdef USE_ALLEGROGL
@@ -594,6 +595,7 @@
 
 static const MENU video_driver_menu_base[] =
 {
+   { "&Safe",        video_driver_menu_safe,        NULL,                                   0, NULL },
    { "&Automatic",   video_driver_menu_automatic,   NULL,                                   0, NULL },
    MENU_SPLITTER,
 
diff -ur fakenes-0.5.9-beta3/src/include/video.h fakenes-0.5.9-beta3.new/src/include/video.h
--- fakenes-0.5.9-beta3/src/include/video.h	2007-06-21 23:39:36.000000000 +0200
+++ fakenes-0.5.9-beta3.new/src/include/video.h	2009-10-25 10:31:20.000000000 +0100
@@ -50,7 +50,7 @@
 extern BOOL video_force_fullscreen;
 extern int video_cached_color_depth; /* Read only. */
 
-extern int video_driver;
+extern int menu_video_driver;
    
 extern BITMAP *base_video_buffer;
 extern BITMAP *video_buffer;
Only in fakenes-0.5.9-beta3.new/src/include: video.h~
diff -ur fakenes-0.5.9-beta3/src/video.c fakenes-0.5.9-beta3.new/src/video.c
--- fakenes-0.5.9-beta3/src/video.c	2007-06-21 23:39:36.000000000 +0200
+++ fakenes-0.5.9-beta3.new/src/video.c	2009-10-25 10:39:47.000000000 +0100
@@ -62,14 +62,21 @@
 BOOL video_force_fullscreen = FALSE;
 int video_cached_color_depth = 0;   /* Read only. */
 
+/* 2 versions of video driver "video_driver" contains the one actually used,
+  "menu_video_driver" contains the one configured by the user from the
+  menu, this can be different from the one actually used, because hot
+  switching between regular allegro drivers and alleggl drivers is not
+  supported. */
 #ifdef ALLEGRO_DOS
 /* We use autodetect under DOS because I think the safe driver defaults to like 320x200 or something which is too small
    for the new GUI even with the smallest font. */
-int video_driver = GFX_AUTODETECT;
+static int video_driver = GFX_AUTODETECT;
+int menu_video_driver = GFX_AUTODETECT;
 #else
 /* Under Windowed operating systems, resolutions above or equal to 640x480 are always present and therefor we can go ahead
    and use the safe driver for better compatibility without hampering the GUI at the same time. */
-int video_driver = GFX_SAFE;
+static int video_driver = GFX_SAFE;
+int menu_video_driver = GFX_SAFE;
 #endif
 
 BITMAP *base_video_buffer = NULL;
@@ -143,9 +150,19 @@
 
 void video_load_config (void)
 {
+   static BOOL firsttime = TRUE;
+
    log_printf ("VIDEO: Loading configuration.");
 
-   video_driver             = get_config_id  ("video", "driver",             video_driver);
+   /* only load the video driver once, after the first time the config setting
+      will reflect menu_video_driver, and we will want to continue using the
+      real thing. */
+   if (firsttime)
+   {
+      video_driver          = get_config_id  ("video", "driver",             video_driver);
+      menu_video_driver     = video_driver;
+      firsttime             = FALSE;
+   }
    screen_width             = get_config_int ("video", "screen_width",       screen_width);
    screen_height            = get_config_int ("video", "screen_height",      screen_height);
    color_depth              = get_config_int ("video", "color_depth",        color_depth);
@@ -169,7 +186,7 @@
 {
    log_printf ("VIDEO: Saving configuration.");
 
-   set_config_id  ("video", "driver",             video_driver);
+   set_config_id  ("video", "driver",             menu_video_driver);
    set_config_int ("video", "screen_width",       screen_width);
    set_config_int ("video", "screen_height",      screen_height);
    set_config_int ("video", "color_depth",        color_depth);
@@ -191,7 +208,7 @@
 
 int video_init (void)
 {
-   int driver;
+   int driver = video_driver;
    int width, height;
    int result;
    const CHAR *font_file;
@@ -222,11 +239,13 @@
       else
          has_desktop = FALSE;
 
-      /* We want to switch from the safe driver to an automatic driver when entering fullscreen modes. */
-      if((video_driver == GFX_SAFE) && video_force_fullscreen)
-         driver = GFX_AUTODETECT;
-
-      if(video_driver == GFX_AUTODETECT ) {
+      if(video_driver == GFX_SAFE) {
+         /* We want to switch from the safe driver to an automatic driver when entering fullscreen modes. */
+         if(video_force_fullscreen)
+            driver = GFX_AUTODETECT_FULLSCREEN;
+         else
+            driver = GFX_SAFE;
+      } else { /* video_driver == GFX_AUTODETECT */
          /* Determine which automatic driver to use. */
          if(video_force_fullscreen)
             driver = GFX_AUTODETECT_FULLSCREEN;
@@ -235,11 +254,7 @@
          else
             driver = GFX_AUTODETECT;
       }
-      else
-         driver = video_driver;
    }
-   else
-      driver = video_driver;
 
 #ifdef USE_ALLEGROGL
 
@@ -1644,13 +1659,29 @@
 void video_set_driver (int driver)
 {
     int old_driver;
+#ifdef USE_ALLEGROGL
+    BOOL driver_is_opengl = (driver == GFX_OPENGL) ||
+       (driver == GFX_OPENGL_FULLSCREEN) ||
+       (driver == GFX_OPENGL_WINDOWED);
+#endif
 
-
-    if (gfx_driver -> id == driver)
+    if (menu_video_driver == driver)
     {
         return;
     }
 
+#ifdef USE_ALLEGROGL
+    if ((driver_is_opengl && !video_is_opengl_mode()) ||
+        (!driver_is_opengl && video_is_opengl_mode()))
+    {
+        gui_alert ("Notification",
+           "In order for the new driver",
+           "you've choisen to come into effect.",
+           "You must exit and restart fakenes.", "&OK", 0, 0, 0);
+        menu_video_driver = driver;
+        return;
+    }
+#endif   /* USE_ALLEGROGL */
 
     old_driver = gfx_driver -> id;
 
@@ -1678,6 +1709,13 @@
     preserve_video_buffer = FALSE;
 
     preserve_palette = FALSE;
+
+    if (video_driver == GFX_SAFE)
+        menu_video_driver = GFX_SAFE;
+    else if (video_driver == GFX_AUTODETECT)
+        menu_video_driver = GFX_AUTODETECT;
+    else
+        menu_video_driver = gfx_driver -> id;
 }
 
 
 
design & coding: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
current maintainer: Michael Shigorin