mirror of https://github.com/snes9xgit/snes9x.git
Allow bilinear filtering in GTK output driver.
This commit is contained in:
parent
a37db4c09d
commit
5a5d3f9192
|
@ -162,6 +162,7 @@ Snes9xConfig::load_defaults (void)
|
|||
ntsc_setup = snes_ntsc_composite;
|
||||
ntsc_scanline_intensity = 1;
|
||||
scanline_filter_intensity = 0;
|
||||
bilinear_filter = 0;
|
||||
netplay_activated = FALSE;
|
||||
netplay_server_up = FALSE;
|
||||
netplay_is_server = FALSE;
|
||||
|
@ -175,7 +176,6 @@ Snes9xConfig::load_defaults (void)
|
|||
modal_dialogs = 1;
|
||||
|
||||
#ifdef USE_OPENGL
|
||||
bilinear_filter = 0;
|
||||
sync_to_vblank = 1;
|
||||
use_pbos = 1;
|
||||
pbo_format = 0;
|
||||
|
@ -323,9 +323,9 @@ Snes9xConfig::save_config_file (void)
|
|||
xml_out_int (xml, "ntsc_scanline_intensity", ntsc_scanline_intensity);
|
||||
xml_out_int (xml, "scanline_filter_intensity", scanline_filter_intensity);
|
||||
xml_out_int (xml, "hw_accel", hw_accel);
|
||||
xml_out_int (xml, "bilinear_filter", bilinear_filter);
|
||||
|
||||
#ifdef USE_OPENGL
|
||||
xml_out_int (xml, "bilinear_filter", bilinear_filter);
|
||||
xml_out_int (xml, "sync_to_vblank", sync_to_vblank);
|
||||
xml_out_int (xml, "sync_every_frame", sync_every_frame);
|
||||
xml_out_int (xml, "use_pbos", use_pbos);
|
||||
|
@ -499,9 +499,7 @@ Snes9xConfig::set_option (const char *name, const char *value)
|
|||
}
|
||||
else if (!strcasecmp (name, "bilinear_filter"))
|
||||
{
|
||||
#ifdef USE_OPENGL
|
||||
bilinear_filter = atoi (value);
|
||||
#endif
|
||||
}
|
||||
else if (!strcasecmp (name, "sync_to_vblank"))
|
||||
{
|
||||
|
|
|
@ -81,6 +81,7 @@ class Snes9xConfig
|
|||
float ntsc_merge_fields;
|
||||
unsigned int ntsc_scanline_intensity;
|
||||
unsigned int scanline_filter_intensity;
|
||||
unsigned char bilinear_filter;
|
||||
unsigned char hw_accel;
|
||||
unsigned char allow_opengl;
|
||||
unsigned char allow_xv;
|
||||
|
@ -138,7 +139,6 @@ class Snes9xConfig
|
|||
|
||||
|
||||
#ifdef USE_OPENGL
|
||||
unsigned char bilinear_filter;
|
||||
unsigned char sync_to_vblank;
|
||||
unsigned char opengl_activated;
|
||||
unsigned char use_pbos;
|
||||
|
|
|
@ -62,6 +62,7 @@ S9xGTKDisplayDriver::update (int width, int height)
|
|||
|
||||
x = width; y = height; w = c_width; h = c_height;
|
||||
S9xApplyAspect (x, y, w, h);
|
||||
|
||||
output (final_buffer, final_pitch, x, y, width, height, w, h);
|
||||
|
||||
return;
|
||||
|
@ -77,7 +78,7 @@ S9xGTKDisplayDriver::output (void *src,
|
|||
int dst_width,
|
||||
int dst_height)
|
||||
{
|
||||
if (width > gdk_buffer_width || height > gdk_buffer_height)
|
||||
if (width != gdk_buffer_width || height != gdk_buffer_height)
|
||||
{
|
||||
gdk_buffer_width = width;
|
||||
gdk_buffer_height = height;
|
||||
|
@ -97,6 +98,14 @@ S9xGTKDisplayDriver::output (void *src,
|
|||
NULL);
|
||||
}
|
||||
|
||||
if (last_known_width != dst_width || last_known_height != dst_height)
|
||||
{
|
||||
clear ();
|
||||
|
||||
last_known_width = dst_width;
|
||||
last_known_height = dst_height;
|
||||
}
|
||||
|
||||
S9xConvert (src,
|
||||
padded_buffer[2],
|
||||
src_pitch,
|
||||
|
@ -120,11 +129,15 @@ S9xGTKDisplayDriver::output (void *src,
|
|||
(double) height / (double) dst_height);
|
||||
cairo_matrix_translate (&matrix, -x, -y);
|
||||
cairo_pattern_set_matrix (pattern, &matrix);
|
||||
cairo_pattern_set_filter (pattern, CAIRO_FILTER_NEAREST);
|
||||
cairo_pattern_set_filter (pattern,
|
||||
config->bilinear_filter
|
||||
? CAIRO_FILTER_BILINEAR
|
||||
: CAIRO_FILTER_NEAREST);
|
||||
}
|
||||
|
||||
cairo_rectangle (cr, x, y, dst_width, dst_height);
|
||||
cairo_fill (cr);
|
||||
|
||||
cairo_destroy (cr);
|
||||
|
||||
window->set_mouseable_area (x, y, width, height);
|
||||
|
|
|
@ -32,6 +32,8 @@ class S9xGTKDisplayDriver : public S9xDisplayDriver
|
|||
GdkPixbuf *pixbuf;
|
||||
int gdk_buffer_width;
|
||||
int gdk_buffer_height;
|
||||
int last_known_width;
|
||||
int last_known_height;
|
||||
};
|
||||
|
||||
#endif /* __GTK_DISPLAY_DRIVER_GTK_H */
|
||||
|
|
|
@ -341,14 +341,17 @@ event_hw_accel_changed (GtkComboBox *widget, gpointer data)
|
|||
switch (value)
|
||||
{
|
||||
case HWA_NONE:
|
||||
gtk_widget_show (window->get_widget ("bilinear_filter"));
|
||||
gtk_widget_hide (window->get_widget ("opengl_frame"));
|
||||
gtk_widget_hide (window->get_widget ("xv_frame"));
|
||||
break;
|
||||
case HWA_OPENGL:
|
||||
gtk_widget_show (window->get_widget ("bilinear_filter"));
|
||||
gtk_widget_show (window->get_widget ("opengl_frame"));
|
||||
gtk_widget_hide (window->get_widget ("xv_frame"));
|
||||
break;
|
||||
case HWA_XV:
|
||||
gtk_widget_hide (window->get_widget ("bilinear_filter"));
|
||||
gtk_widget_show (window->get_widget ("xv_frame"));
|
||||
gtk_widget_hide (window->get_widget ("opengl_frame"));
|
||||
break;
|
||||
|
@ -717,8 +720,9 @@ Snes9xPreferences::move_settings_to_dialog (void)
|
|||
set_combo ("frameskip_combo",
|
||||
Settings.SkipFrames == AUTO_FRAMERATE ?
|
||||
0 : Settings.SkipFrames + 1);
|
||||
#ifdef USE_OPENGL
|
||||
set_check ("bilinear_filter", config->bilinear_filter);
|
||||
|
||||
#ifdef USE_OPENGL
|
||||
set_check ("sync_to_vblank", config->sync_to_vblank);
|
||||
set_check ("sync_every_frame", config->sync_every_frame);
|
||||
set_check ("use_pbos", config->use_pbos);
|
||||
|
@ -826,6 +830,7 @@ Snes9xPreferences::get_settings_from_dialog (void)
|
|||
config->ntsc_scanline_intensity = get_combo ("ntsc_scanline_intensity");
|
||||
config->scanline_filter_intensity = get_combo ("scanline_filter_intensity");
|
||||
config->hw_accel = hw_accel_value (get_combo ("hw_accel"));
|
||||
config->bilinear_filter = get_check ("bilinear_filter");
|
||||
config->num_threads = get_spin ("num_threads");
|
||||
config->default_esc_behavior = get_combo ("default_esc_behavior");
|
||||
config->prevent_screensaver = get_check ("prevent_screensaver");
|
||||
|
@ -845,7 +850,6 @@ Snes9xPreferences::get_settings_from_dialog (void)
|
|||
gfx_needs_restart = 1;
|
||||
}
|
||||
|
||||
config->bilinear_filter = get_check ("bilinear_filter");
|
||||
config->sync_to_vblank = get_check ("sync_to_vblank");
|
||||
config->use_pbos = get_check ("use_pbos");
|
||||
config->npot_textures = get_check ("npot_textures");
|
||||
|
|
4565
gtk/src/snes9x.ui
4565
gtk/src/snes9x.ui
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue