diff --git a/desmume/src/gtk-glade/main.cpp b/desmume/src/gtk-glade/main.cpp index 612293103..f7350c70c 100755 --- a/desmume/src/gtk-glade/main.cpp +++ b/desmume/src/gtk-glade/main.cpp @@ -68,7 +68,9 @@ GPU3DInterface *core3DList[] = { * */ struct configured_features { + int load_slot; int software_colour_convert; + int opengl_2d; int disable_3d; int disable_limiter; @@ -82,11 +84,13 @@ struct configured_features { static void init_configured_features( struct configured_features *config) { + config->load_slot = 0; config->arm9_gdb_port = 0; config->arm7_gdb_port = 0; config->software_colour_convert = 0; + config->opengl_2d = 0; config->disable_3d = 0; config->disable_limiter = 0; @@ -108,13 +112,17 @@ fill_configured_features( struct configured_features *config, if ( strcmp( argv[i], "--help") == 0) { g_print( _("USAGE: %s [OPTIONS] [nds-file]\n"), argv[0]); g_print( _("OPTIONS:\n")); + g_print( _("\ + --load-slot=NUM Load game saved under NUM position.\n\n")); #ifdef GTKGLEXT_AVAILABLE g_print( _("\ --soft-convert Use software colour conversion during OpenGL\n\ screen rendering. May produce better or worse\n\ frame rates depending on hardware.\n\ \n\ - --disable-3d Disables the 3D emulation\n\n")); + --3d-engine=ENGINE Selects 3D rendering engine\n\ + 0 = disabled\n\ + 1 = gtkglext off-screen 3d opengl\n\n")); #endif g_print( _("\ --disable-limiter Disables the 60 fps limiter\n\ @@ -136,12 +144,37 @@ fill_configured_features( struct configured_features *config, //g_print(" --sticky Enable sticky keys and stylus\n"); good_args = 0; } + else if ( strncmp( argv[i], "--load-slot=", 12) == 0) { + char *end_char; + int slot = strtoul( &argv[i][12], &end_char, 10); + + if ( slot >= 0 && slot <= 10) { + config->load_slot = slot; + } + else { + g_printerr( _("I only know how to load from slots 1-10.\n")); + good_args = 0; + } + } #ifdef GTKGLEXT_AVAILABLE + else if ( strcmp( argv[i], "--opengl-2d") == 0) { + // FIXME: to be implemented + config->opengl_2d = 1; + } else if ( strcmp( argv[i], "--soft-convert") == 0) { config->software_colour_convert = 1; } - else if ( strcmp( argv[i], "--disable-3d") == 0) { - config->disable_3d = 1; + else if ( strncmp( argv[i], "--3d-engine=", 12) == 0) { + char *end_char; + int engine = strtoul( &argv[i][12], &end_char, 10); + + if ( engine == 0 || engine == 1) { + config->disable_3d = !engine; + } + else { + g_printerr( _("Only 0(disabled) or 1(gtkglext off-screen 3d) are currently supported\n")); + good_args = 0; + } } #endif else if ( strncmp( argv[i], "--fwlang=", 9) == 0) { @@ -475,6 +508,7 @@ common_gtk_glade_main( struct configured_features *my_config) { /* check command line file */ if( my_config->nds_file) { if(desmume_open( my_config->nds_file) >= 0) { + loadstate_slot( my_config->load_slot); desmume_resume(); enable_rom_features(); } else { diff --git a/desmume/src/gtk/main.cpp b/desmume/src/gtk/main.cpp index b3ca72fbb..117b339ee 100644 --- a/desmume/src/gtk/main.cpp +++ b/desmume/src/gtk/main.cpp @@ -126,6 +126,8 @@ GPU3DInterface *core3DList[] = { #endif }; +static u16 Cur_Keypad = 0; +static u16 gdk_shift_pressed = 0; struct configured_features { int load_slot; @@ -977,16 +979,13 @@ void savegame(int num){ if (desmume_running()) { Pause(); - savestate_slot(num); //Savestate + savestate_slot(num); Launch(); } else - savestate_slot(num); //Savestate + savestate_slot(num); } -u16 Cur_Keypad = 0; -u16 gdk_shift_pressed = 0; - static gint Key_Press(GtkWidget *w, GdkEventKey *e, gpointer data) { if (e->keyval == GDK_Shift_L){ @@ -1787,7 +1786,6 @@ common_gtk_main( struct configured_features *my_config) { SDL_TimerID limiter_timer = NULL; gchar *config_file; - u16 Cur_Keypad = 0; GtkAccelGroup * accel_group; GtkWidget *pVBox; @@ -1910,8 +1908,8 @@ common_gtk_main( struct configured_features *my_config) gtk_window_set_icon(GTK_WINDOW (pWindow), gdk_pixbuf_new_from_xpm_data(DeSmuME_xpm)); g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL); - g_signal_connect(G_OBJECT(pWindow), "key_press_event", G_CALLBACK(Key_Press), (void *) (long) Cur_Keypad); - g_signal_connect(G_OBJECT(pWindow), "key_release_event", G_CALLBACK(Key_Release), (void *) (long) Cur_Keypad); + g_signal_connect(G_OBJECT(pWindow), "key_press_event", G_CALLBACK(Key_Press), NULL); + g_signal_connect(G_OBJECT(pWindow), "key_release_event", G_CALLBACK(Key_Release), NULL); /* Creation de la GtkVBox */ pVBox = gtk_vbox_new(FALSE, 0);