diff --git a/gtk/src/gtk_config.cpp b/gtk/src/gtk_config.cpp index c68140d2..53c5a34f 100644 --- a/gtk/src/gtk_config.cpp +++ b/gtk/src/gtk_config.cpp @@ -334,7 +334,7 @@ Snes9xConfig::save_config_file (void) xml_out_int (xml, "force_inverted_byte_order", force_inverted_byte_order); xml_out_int (xml, "multithreading", multithreading); xml_out_string (xml, "last_directory", last_directory); - xml_out_string (xml, "last_directory", last_shader_directory); + xml_out_string (xml, "last_shader_directory", last_shader_directory); xml_out_string (xml, "sram_directory", sram_directory); xml_out_string (xml, "savestate_directory", savestate_directory); xml_out_string (xml, "cheat_directory", cheat_directory); diff --git a/gtk/src/gtk_display_driver.h b/gtk/src/gtk_display_driver.h index f25a4a14..94b7c177 100644 --- a/gtk/src/gtk_display_driver.h +++ b/gtk/src/gtk_display_driver.h @@ -16,7 +16,8 @@ class S9xDisplayDriver virtual uint16 *get_current_buffer (void) = 0; virtual void push_buffer (uint16 *src) = 0; virtual void reconfigure (int width, int height) = 0; - virtual void *get_parameters () = 0; + virtual void *get_parameters (void) = 0; + virtual void save (void) = 0; /* Namespaced sizing constants */ static const int image_width = 1024; diff --git a/gtk/src/gtk_display_driver_gtk.h b/gtk/src/gtk_display_driver_gtk.h index 8f79e751..743c3485 100644 --- a/gtk/src/gtk_display_driver_gtk.h +++ b/gtk/src/gtk_display_driver_gtk.h @@ -18,6 +18,7 @@ class S9xGTKDisplayDriver : public S9xDisplayDriver void push_buffer (uint16 *src); void reconfigure (int width, int height); void *get_parameters (void) { return NULL; } + void save (void) { } private: void clear (void); diff --git a/gtk/src/gtk_display_driver_opengl.cpp b/gtk/src/gtk_display_driver_opengl.cpp index fb8a6da7..6b8c78d0 100644 --- a/gtk/src/gtk_display_driver_opengl.cpp +++ b/gtk/src/gtk_display_driver_opengl.cpp @@ -282,6 +282,17 @@ S9xOpenGLDisplayDriver::get_parameters(void) return NULL; } +void +S9xOpenGLDisplayDriver::save (void) +{ + if (using_glsl_shaders && glsl_shader) + { + glsl_shader->save(); + } + + return; +} + void S9xOpenGLDisplayDriver::clear_buffers (void) { diff --git a/gtk/src/gtk_display_driver_opengl.h b/gtk/src/gtk_display_driver_opengl.h index d715e053..41c4fcb3 100644 --- a/gtk/src/gtk_display_driver_opengl.h +++ b/gtk/src/gtk_display_driver_opengl.h @@ -40,6 +40,7 @@ class S9xOpenGLDisplayDriver : public S9xDisplayDriver void push_buffer (uint16 *src); void reconfigure (int width, int height); void *get_parameters (void); + void save (void); static int query_availability (void); private: diff --git a/gtk/src/gtk_display_driver_xv.h b/gtk/src/gtk_display_driver_xv.h index 154b56ed..848f813a 100644 --- a/gtk/src/gtk_display_driver_xv.h +++ b/gtk/src/gtk_display_driver_xv.h @@ -25,6 +25,7 @@ class S9xXVDisplayDriver : public S9xDisplayDriver void push_buffer (uint16 *src); void reconfigure (int width, int height); void *get_parameters (void) { return NULL; } + void save (void) { } static int query_availability (void); private: diff --git a/gtk/src/gtk_preferences.cpp b/gtk/src/gtk_preferences.cpp index 3c15b7f8..14fae0d9 100644 --- a/gtk/src/gtk_preferences.cpp +++ b/gtk/src/gtk_preferences.cpp @@ -493,8 +493,11 @@ event_auto_input_rate_toggled (GtkToggleButton *togglebutton, gpointer data) static void event_shader_parameters (GtkButton *widget, gpointer data) { + S9xDisplayDriver *driver = S9xDisplayGetDriver (); + Snes9xPreferences *preferences = (Snes9xPreferences *) data; + #ifdef USE_OPENGL - if (!S9xDisplayGetDriver () || !S9xDisplayGetDriver ()->get_parameters () || !gtk_shader_parameters_dialog (top_level->get_window ())) + if (!driver || !driver->get_parameters () || !gtk_shader_parameters_dialog (top_level->get_window ())) { GtkWidget *dialog; dialog = gtk_message_dialog_new (top_level->get_window(), @@ -509,6 +512,12 @@ event_shader_parameters (GtkButton *widget, gpointer data) return; } + else + { + driver->save(); + preferences->set_entry_text ("fragment_shader", preferences->config->fragment_shader); + } + #endif }