mirror of https://github.com/snes9xgit/snes9x.git
Add simple 2x-4x filters.
This commit is contained in:
parent
8b64d6d5a8
commit
4aa58f6dbd
|
@ -966,6 +966,122 @@ S9xForceHires (void *buffer,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
filter_2x (void *src,
|
||||||
|
int src_pitch,
|
||||||
|
void *dst,
|
||||||
|
int dst_pitch,
|
||||||
|
int width,
|
||||||
|
int height)
|
||||||
|
{
|
||||||
|
int x, y;
|
||||||
|
|
||||||
|
for (y = 0; y < height; y++)
|
||||||
|
{
|
||||||
|
uint16 *in = (uint16 *) ((uint8 *) src + y * src_pitch);
|
||||||
|
uint16 *out1 = (uint16 *) ((uint8 *) dst + (y * 2) * dst_pitch);
|
||||||
|
uint16 *out2 = (uint16 *) ((uint8 *) dst + ((y * 2) + 1) * dst_pitch);
|
||||||
|
|
||||||
|
for (x = 0; x < width; x++)
|
||||||
|
{
|
||||||
|
uint16 pixel = *in++;
|
||||||
|
|
||||||
|
*out1++ = pixel;
|
||||||
|
*out1++ = pixel;
|
||||||
|
|
||||||
|
*out2++ = pixel;
|
||||||
|
*out2++ = pixel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
filter_3x (void *src,
|
||||||
|
int src_pitch,
|
||||||
|
void *dst,
|
||||||
|
int dst_pitch,
|
||||||
|
int width,
|
||||||
|
int height)
|
||||||
|
{
|
||||||
|
int x, y;
|
||||||
|
|
||||||
|
for (y = 0; y < height; y++)
|
||||||
|
{
|
||||||
|
uint16 *in = (uint16 *) ((uint8 *) src + y * src_pitch);
|
||||||
|
uint16 *out1 = (uint16 *) ((uint8 *) dst + (y * 3) * dst_pitch);
|
||||||
|
uint16 *out2 = (uint16 *) ((uint8 *) dst + ((y * 3) + 1) * dst_pitch);
|
||||||
|
uint16 *out3 = (uint16 *) ((uint8 *) dst + ((y * 3) + 2) * dst_pitch);
|
||||||
|
|
||||||
|
for (x = 0; x < width; x++)
|
||||||
|
{
|
||||||
|
uint16 pixel = *in++;
|
||||||
|
|
||||||
|
*out1++ = pixel;
|
||||||
|
*out1++ = pixel;
|
||||||
|
*out1++ = pixel;
|
||||||
|
|
||||||
|
*out2++ = pixel;
|
||||||
|
*out2++ = pixel;
|
||||||
|
*out2++ = pixel;
|
||||||
|
|
||||||
|
*out3++ = pixel;
|
||||||
|
*out3++ = pixel;
|
||||||
|
*out3++ = pixel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
filter_4x (void *src,
|
||||||
|
int src_pitch,
|
||||||
|
void *dst,
|
||||||
|
int dst_pitch,
|
||||||
|
int width,
|
||||||
|
int height)
|
||||||
|
{
|
||||||
|
int x, y;
|
||||||
|
|
||||||
|
for (y = 0; y < height; y++)
|
||||||
|
{
|
||||||
|
uint16 *in = (uint16 *) ((uint8 *) src + y * src_pitch);
|
||||||
|
uint16 *out1 = (uint16 *) ((uint8 *) dst + (y * 4) * dst_pitch);
|
||||||
|
uint16 *out2 = (uint16 *) ((uint8 *) dst + ((y * 4) + 1) * dst_pitch);
|
||||||
|
uint16 *out3 = (uint16 *) ((uint8 *) dst + ((y * 4) + 2) * dst_pitch);
|
||||||
|
uint16 *out4 = (uint16 *) ((uint8 *) dst + ((y * 4) + 3) * dst_pitch);
|
||||||
|
|
||||||
|
for (x = 0; x < width; x++)
|
||||||
|
{
|
||||||
|
uint16 pixel = *in++;
|
||||||
|
|
||||||
|
*out1++ = pixel;
|
||||||
|
*out1++ = pixel;
|
||||||
|
*out1++ = pixel;
|
||||||
|
*out1++ = pixel;
|
||||||
|
|
||||||
|
*out2++ = pixel;
|
||||||
|
*out2++ = pixel;
|
||||||
|
*out2++ = pixel;
|
||||||
|
*out2++ = pixel;
|
||||||
|
|
||||||
|
*out3++ = pixel;
|
||||||
|
*out3++ = pixel;
|
||||||
|
*out3++ = pixel;
|
||||||
|
*out3++ = pixel;
|
||||||
|
|
||||||
|
*out4++ = pixel;
|
||||||
|
*out4++ = pixel;
|
||||||
|
*out4++ = pixel;
|
||||||
|
*out4++ = pixel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
filter_scanlines (void *src_buffer,
|
filter_scanlines (void *src_buffer,
|
||||||
int src_pitch,
|
int src_pitch,
|
||||||
|
@ -1032,6 +1148,21 @@ get_filter_scale (int &width, int &height)
|
||||||
height *= 2;
|
height *= 2;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case FILTER_SIMPLE2X:
|
||||||
|
width *= 2;
|
||||||
|
height *= 2;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FILTER_SIMPLE3X:
|
||||||
|
width *= 3;
|
||||||
|
height *= 3;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FILTER_SIMPLE4X:
|
||||||
|
width *= 4;
|
||||||
|
height *= 4;
|
||||||
|
break;
|
||||||
|
|
||||||
#ifdef USE_HQ2X
|
#ifdef USE_HQ2X
|
||||||
case FILTER_HQ4X:
|
case FILTER_HQ4X:
|
||||||
if (((width * 4) <= S9xDisplayDriver::scaled_max_width) &&
|
if (((width * 4) <= S9xDisplayDriver::scaled_max_width) &&
|
||||||
|
@ -1168,6 +1299,47 @@ internal_filter (uint8 *src_buffer,
|
||||||
break;
|
break;
|
||||||
#endif /* USE_HQ2X */
|
#endif /* USE_HQ2X */
|
||||||
|
|
||||||
|
case FILTER_SIMPLE4X:
|
||||||
|
|
||||||
|
if (((width * 4) <= S9xDisplayDriver::scaled_max_width) &&
|
||||||
|
((height * 4) <= S9xDisplayDriver::scaled_max_height))
|
||||||
|
{
|
||||||
|
filter_4x (src_buffer,
|
||||||
|
src_pitch,
|
||||||
|
dst_buffer,
|
||||||
|
dst_pitch,
|
||||||
|
width,
|
||||||
|
height);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case FILTER_SIMPLE3X:
|
||||||
|
|
||||||
|
if (width * 3 <= S9xDisplayDriver::scaled_max_width &&
|
||||||
|
height * 3 <= S9xDisplayDriver::scaled_max_height)
|
||||||
|
{
|
||||||
|
filter_3x (src_buffer,
|
||||||
|
src_pitch,
|
||||||
|
dst_buffer,
|
||||||
|
dst_pitch,
|
||||||
|
width,
|
||||||
|
height);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case FILTER_SIMPLE2X:
|
||||||
|
|
||||||
|
filter_2x (src_buffer,
|
||||||
|
src_pitch,
|
||||||
|
dst_buffer,
|
||||||
|
dst_pitch,
|
||||||
|
width,
|
||||||
|
height);
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
case FILTER_EPX:
|
case FILTER_EPX:
|
||||||
|
|
||||||
EPX_16_unsafe (src_buffer,
|
EPX_16_unsafe (src_buffer,
|
||||||
|
|
|
@ -17,10 +17,13 @@
|
||||||
#define FILTER_EPX_SMOOTH 5
|
#define FILTER_EPX_SMOOTH 5
|
||||||
#define FILTER_NTSC 6
|
#define FILTER_NTSC 6
|
||||||
#define FILTER_SCANLINES 7
|
#define FILTER_SCANLINES 7
|
||||||
#define FILTER_HQ2X 8
|
#define FILTER_SIMPLE2X 8
|
||||||
#define FILTER_HQ3X 9
|
#define FILTER_SIMPLE3X 9
|
||||||
#define FILTER_HQ4X 10
|
#define FILTER_SIMPLE4X 10
|
||||||
#define NUM_FILTERS 11
|
#define FILTER_HQ2X 11
|
||||||
|
#define FILTER_HQ3X 12
|
||||||
|
#define FILTER_HQ4X 13
|
||||||
|
#define NUM_FILTERS 14
|
||||||
|
|
||||||
#define NTSC_COMPOSITE 0
|
#define NTSC_COMPOSITE 0
|
||||||
#define NTSC_SVIDEO 1
|
#define NTSC_SVIDEO 1
|
||||||
|
|
|
@ -228,10 +228,7 @@ event_shader_select (GtkButton *widget, gpointer data)
|
||||||
gint result;
|
gint result;
|
||||||
GtkEntry *entry;
|
GtkEntry *entry;
|
||||||
|
|
||||||
if (!strcmp (gtk_buildable_get_name (GTK_BUILDABLE (widget)), "fragment_shader_button"))
|
entry = GTK_ENTRY (window->get_widget ("fragment_shader"));
|
||||||
{
|
|
||||||
entry = GTK_ENTRY (window->get_widget ("fragment_shader"));
|
|
||||||
}
|
|
||||||
|
|
||||||
dialog = gtk_file_chooser_dialog_new ("Select Shader File",
|
dialog = gtk_file_chooser_dialog_new ("Select Shader File",
|
||||||
window->get_window (),
|
window->get_window (),
|
||||||
|
|
4587
gtk/src/snes9x.ui
4587
gtk/src/snes9x.ui
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue