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_setup = snes_ntsc_composite;
|
||||||
ntsc_scanline_intensity = 1;
|
ntsc_scanline_intensity = 1;
|
||||||
scanline_filter_intensity = 0;
|
scanline_filter_intensity = 0;
|
||||||
|
bilinear_filter = 0;
|
||||||
netplay_activated = FALSE;
|
netplay_activated = FALSE;
|
||||||
netplay_server_up = FALSE;
|
netplay_server_up = FALSE;
|
||||||
netplay_is_server = FALSE;
|
netplay_is_server = FALSE;
|
||||||
|
@ -175,7 +176,6 @@ Snes9xConfig::load_defaults (void)
|
||||||
modal_dialogs = 1;
|
modal_dialogs = 1;
|
||||||
|
|
||||||
#ifdef USE_OPENGL
|
#ifdef USE_OPENGL
|
||||||
bilinear_filter = 0;
|
|
||||||
sync_to_vblank = 1;
|
sync_to_vblank = 1;
|
||||||
use_pbos = 1;
|
use_pbos = 1;
|
||||||
pbo_format = 0;
|
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, "ntsc_scanline_intensity", ntsc_scanline_intensity);
|
||||||
xml_out_int (xml, "scanline_filter_intensity", scanline_filter_intensity);
|
xml_out_int (xml, "scanline_filter_intensity", scanline_filter_intensity);
|
||||||
xml_out_int (xml, "hw_accel", hw_accel);
|
xml_out_int (xml, "hw_accel", hw_accel);
|
||||||
|
xml_out_int (xml, "bilinear_filter", bilinear_filter);
|
||||||
|
|
||||||
#ifdef USE_OPENGL
|
#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_to_vblank", sync_to_vblank);
|
||||||
xml_out_int (xml, "sync_every_frame", sync_every_frame);
|
xml_out_int (xml, "sync_every_frame", sync_every_frame);
|
||||||
xml_out_int (xml, "use_pbos", use_pbos);
|
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"))
|
else if (!strcasecmp (name, "bilinear_filter"))
|
||||||
{
|
{
|
||||||
#ifdef USE_OPENGL
|
|
||||||
bilinear_filter = atoi (value);
|
bilinear_filter = atoi (value);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
else if (!strcasecmp (name, "sync_to_vblank"))
|
else if (!strcasecmp (name, "sync_to_vblank"))
|
||||||
{
|
{
|
||||||
|
|
|
@ -81,6 +81,7 @@ class Snes9xConfig
|
||||||
float ntsc_merge_fields;
|
float ntsc_merge_fields;
|
||||||
unsigned int ntsc_scanline_intensity;
|
unsigned int ntsc_scanline_intensity;
|
||||||
unsigned int scanline_filter_intensity;
|
unsigned int scanline_filter_intensity;
|
||||||
|
unsigned char bilinear_filter;
|
||||||
unsigned char hw_accel;
|
unsigned char hw_accel;
|
||||||
unsigned char allow_opengl;
|
unsigned char allow_opengl;
|
||||||
unsigned char allow_xv;
|
unsigned char allow_xv;
|
||||||
|
@ -138,7 +139,6 @@ class Snes9xConfig
|
||||||
|
|
||||||
|
|
||||||
#ifdef USE_OPENGL
|
#ifdef USE_OPENGL
|
||||||
unsigned char bilinear_filter;
|
|
||||||
unsigned char sync_to_vblank;
|
unsigned char sync_to_vblank;
|
||||||
unsigned char opengl_activated;
|
unsigned char opengl_activated;
|
||||||
unsigned char use_pbos;
|
unsigned char use_pbos;
|
||||||
|
|
|
@ -62,6 +62,7 @@ S9xGTKDisplayDriver::update (int width, int height)
|
||||||
|
|
||||||
x = width; y = height; w = c_width; h = c_height;
|
x = width; y = height; w = c_width; h = c_height;
|
||||||
S9xApplyAspect (x, y, w, h);
|
S9xApplyAspect (x, y, w, h);
|
||||||
|
|
||||||
output (final_buffer, final_pitch, x, y, width, height, w, h);
|
output (final_buffer, final_pitch, x, y, width, height, w, h);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
@ -77,7 +78,7 @@ S9xGTKDisplayDriver::output (void *src,
|
||||||
int dst_width,
|
int dst_width,
|
||||||
int dst_height)
|
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_width = width;
|
||||||
gdk_buffer_height = height;
|
gdk_buffer_height = height;
|
||||||
|
@ -97,6 +98,14 @@ S9xGTKDisplayDriver::output (void *src,
|
||||||
NULL);
|
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,
|
S9xConvert (src,
|
||||||
padded_buffer[2],
|
padded_buffer[2],
|
||||||
src_pitch,
|
src_pitch,
|
||||||
|
@ -120,11 +129,15 @@ S9xGTKDisplayDriver::output (void *src,
|
||||||
(double) height / (double) dst_height);
|
(double) height / (double) dst_height);
|
||||||
cairo_matrix_translate (&matrix, -x, -y);
|
cairo_matrix_translate (&matrix, -x, -y);
|
||||||
cairo_pattern_set_matrix (pattern, &matrix);
|
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_rectangle (cr, x, y, dst_width, dst_height);
|
||||||
cairo_fill (cr);
|
cairo_fill (cr);
|
||||||
|
|
||||||
cairo_destroy (cr);
|
cairo_destroy (cr);
|
||||||
|
|
||||||
window->set_mouseable_area (x, y, width, height);
|
window->set_mouseable_area (x, y, width, height);
|
||||||
|
|
|
@ -32,6 +32,8 @@ class S9xGTKDisplayDriver : public S9xDisplayDriver
|
||||||
GdkPixbuf *pixbuf;
|
GdkPixbuf *pixbuf;
|
||||||
int gdk_buffer_width;
|
int gdk_buffer_width;
|
||||||
int gdk_buffer_height;
|
int gdk_buffer_height;
|
||||||
|
int last_known_width;
|
||||||
|
int last_known_height;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* __GTK_DISPLAY_DRIVER_GTK_H */
|
#endif /* __GTK_DISPLAY_DRIVER_GTK_H */
|
||||||
|
|
|
@ -341,14 +341,17 @@ event_hw_accel_changed (GtkComboBox *widget, gpointer data)
|
||||||
switch (value)
|
switch (value)
|
||||||
{
|
{
|
||||||
case HWA_NONE:
|
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 ("opengl_frame"));
|
||||||
gtk_widget_hide (window->get_widget ("xv_frame"));
|
gtk_widget_hide (window->get_widget ("xv_frame"));
|
||||||
break;
|
break;
|
||||||
case HWA_OPENGL:
|
case HWA_OPENGL:
|
||||||
|
gtk_widget_show (window->get_widget ("bilinear_filter"));
|
||||||
gtk_widget_show (window->get_widget ("opengl_frame"));
|
gtk_widget_show (window->get_widget ("opengl_frame"));
|
||||||
gtk_widget_hide (window->get_widget ("xv_frame"));
|
gtk_widget_hide (window->get_widget ("xv_frame"));
|
||||||
break;
|
break;
|
||||||
case HWA_XV:
|
case HWA_XV:
|
||||||
|
gtk_widget_hide (window->get_widget ("bilinear_filter"));
|
||||||
gtk_widget_show (window->get_widget ("xv_frame"));
|
gtk_widget_show (window->get_widget ("xv_frame"));
|
||||||
gtk_widget_hide (window->get_widget ("opengl_frame"));
|
gtk_widget_hide (window->get_widget ("opengl_frame"));
|
||||||
break;
|
break;
|
||||||
|
@ -717,8 +720,9 @@ Snes9xPreferences::move_settings_to_dialog (void)
|
||||||
set_combo ("frameskip_combo",
|
set_combo ("frameskip_combo",
|
||||||
Settings.SkipFrames == AUTO_FRAMERATE ?
|
Settings.SkipFrames == AUTO_FRAMERATE ?
|
||||||
0 : Settings.SkipFrames + 1);
|
0 : Settings.SkipFrames + 1);
|
||||||
#ifdef USE_OPENGL
|
|
||||||
set_check ("bilinear_filter", config->bilinear_filter);
|
set_check ("bilinear_filter", config->bilinear_filter);
|
||||||
|
|
||||||
|
#ifdef USE_OPENGL
|
||||||
set_check ("sync_to_vblank", config->sync_to_vblank);
|
set_check ("sync_to_vblank", config->sync_to_vblank);
|
||||||
set_check ("sync_every_frame", config->sync_every_frame);
|
set_check ("sync_every_frame", config->sync_every_frame);
|
||||||
set_check ("use_pbos", config->use_pbos);
|
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->ntsc_scanline_intensity = get_combo ("ntsc_scanline_intensity");
|
||||||
config->scanline_filter_intensity = get_combo ("scanline_filter_intensity");
|
config->scanline_filter_intensity = get_combo ("scanline_filter_intensity");
|
||||||
config->hw_accel = hw_accel_value (get_combo ("hw_accel"));
|
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->num_threads = get_spin ("num_threads");
|
||||||
config->default_esc_behavior = get_combo ("default_esc_behavior");
|
config->default_esc_behavior = get_combo ("default_esc_behavior");
|
||||||
config->prevent_screensaver = get_check ("prevent_screensaver");
|
config->prevent_screensaver = get_check ("prevent_screensaver");
|
||||||
|
@ -845,7 +850,6 @@ Snes9xPreferences::get_settings_from_dialog (void)
|
||||||
gfx_needs_restart = 1;
|
gfx_needs_restart = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
config->bilinear_filter = get_check ("bilinear_filter");
|
|
||||||
config->sync_to_vblank = get_check ("sync_to_vblank");
|
config->sync_to_vblank = get_check ("sync_to_vblank");
|
||||||
config->use_pbos = get_check ("use_pbos");
|
config->use_pbos = get_check ("use_pbos");
|
||||||
config->npot_textures = get_check ("npot_textures");
|
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