From a9de8e41e5c572ed30d0a41e14953bd6391286f9 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 7 Aug 2012 18:26:52 +0200 Subject: [PATCH] (Xbox 1) Add flicker filter and soft display filter options in Settings menu --- console/rmenu/rmenu.c | 38 +++++++++++++++++++++++++++++++++++ console/rmenu/rmenu.h | 4 ++++ console/rmenu/rmenu_entries.h | 22 ++++++++++++++++++++ general.h | 4 ++++ gfx/context/xdk_ctx.c | 7 +++++-- xbox1/xdk_d3d8.cpp | 4 ++++ 6 files changed, 77 insertions(+), 2 deletions(-) diff --git a/console/rmenu/rmenu.c b/console/rmenu/rmenu.c index ae8671141e..cd3657496c 100644 --- a/console/rmenu/rmenu.c +++ b/console/rmenu/rmenu.c @@ -190,6 +190,16 @@ static void set_setting_label(menu * current_menu, item *items, unsigned current snprintf(items[currentsetting].setting_text, sizeof(items[currentsetting].setting_text), "%fx (X) / %fx (Y)", g_settings.video.fbo_scale_x, g_settings.video.fbo_scale_y); snprintf(items[currentsetting].comment, sizeof(items[currentsetting].comment), "INFO - [Custom Scaling Factor] is set to: '%fx (X) / %fx (Y)'.", g_settings.video.fbo_scale_x, g_settings.video.fbo_scale_y); break; +#endif +#ifdef _XBOX1 + case SETTING_FLICKER_FILTER: + set_setting_label_color(items,g_console.flicker_filter == 0, currentsetting); + snprintf(items[currentsetting].setting_text, sizeof(items[currentsetting].setting_text), "%d", g_console.flicker_filter); + break; + case SETTING_SOFT_DISPLAY_FILTER: + set_setting_label_write_on_or_off(items, g_console.soft_display_filter_enable, currentsetting); + set_setting_label_color(items,g_console.soft_display_filter_enable, currentsetting); + break; #endif case SETTING_HW_OVERSCAN_AMOUNT: set_setting_label_color(items,g_console.overscan_amount == 0.0f, currentsetting); @@ -1267,6 +1277,34 @@ static void producesettingentry(menu *current_menu, item *items, unsigned switch apply_scaling(FBO_INIT); } break; +#endif +#ifdef _XBOX1 + case SETTING_FLICKER_FILTER: + if(input & (1 << RETRO_DEVICE_ID_JOYPAD_LEFT)) + { + if(g_console.flicker_filter > 0) + g_console.flicker_filter--; + } + if(input & (1 << RETRO_DEVICE_ID_JOYPAD_RIGHT)) + { + if(g_console.flicker_filter < 5) + g_console.flicker_filter++; + } + if(input & (1 << RETRO_DEVICE_ID_JOYPAD_START)) + { + g_console.flicker_filter = 0; + } + break; + case SETTING_SOFT_DISPLAY_FILTER: + if(input & (1 << RETRO_DEVICE_ID_JOYPAD_LEFT) || (input & (1 << RETRO_DEVICE_ID_JOYPAD_RIGHT)) || (input & (1 << RETRO_DEVICE_ID_JOYPAD_B))) + { + g_console.soft_display_filter_enable = !g_console.soft_display_filter_enable; + } + if(input & (1 << RETRO_DEVICE_ID_JOYPAD_START)) + { + g_console.soft_display_filter_enable = true; + } + break; #endif case SETTING_HW_OVERSCAN_AMOUNT: if(input & (1 << RETRO_DEVICE_ID_JOYPAD_LEFT)) diff --git a/console/rmenu/rmenu.h b/console/rmenu/rmenu.h index 9ed18c6ed3..dab170cfee 100644 --- a/console/rmenu/rmenu.h +++ b/console/rmenu/rmenu.h @@ -145,6 +145,10 @@ enum SETTING_HW_TEXTURE_FILTER_2, SETTING_SCALE_ENABLED, SETTING_SCALE_FACTOR, +#endif +#ifdef _XBOX1 + SETTING_FLICKER_FILTER, + SETTING_SOFT_DISPLAY_FILTER, #endif SETTING_HW_OVERSCAN_AMOUNT, SETTING_THROTTLE_MODE, diff --git a/console/rmenu/rmenu_entries.h b/console/rmenu/rmenu_entries.h index d60700b283..71361a0463 100644 --- a/console/rmenu/rmenu_entries.h +++ b/console/rmenu/rmenu_entries.h @@ -121,6 +121,28 @@ item rmenu_items[MAX_NO_OF_CONTROLS_SETTINGS] = "INFO - [Custom Scaling Factor] is set to '2x'.", WHITE, }, +#endif +#ifdef _XBOX1 + { + SETTING_FLICKER_FILTER, + "Flicker Filter", + "", + 0.0f, + 0.0f, + YELLOW, + "INFO - Toggle the [Flicker Filter].", + WHITE, + }, + { + SETTING_SOFT_DISPLAY_FILTER, + "Soft Display Filter", + "", + 0.0f, + 0.0f, + YELLOW, + "INFO - Toggle the [Soft Display Filter].", + WHITE, + }, #endif { SETTING_HW_OVERSCAN_AMOUNT, diff --git a/general.h b/general.h index 288a806585..cae185b275 100644 --- a/general.h +++ b/general.h @@ -211,6 +211,10 @@ struct console_settings bool frame_advance_enable; #ifdef _XBOX bool menus_hd_enable; +#endif +#ifdef _XBOX1 + unsigned flicker_filter; + bool soft_display_filter_enable; #endif bool initialize_rarch_enable; bool info_msg_enable; diff --git a/gfx/context/xdk_ctx.c b/gfx/context/xdk_ctx.c index 67e4ae0878..fc28810283 100644 --- a/gfx/context/xdk_ctx.c +++ b/gfx/context/xdk_ctx.c @@ -83,12 +83,15 @@ void gfx_ctx_swap_buffers(void) void gfx_ctx_clear(void) { xdk_d3d_video_t *device_ptr = (xdk_d3d_video_t*)driver.video_data; + unsigned flicker_filter = g_console.flicker_filter; + bool soft_filter_enable = g_console.soft_display_filter_enable; + device_ptr->d3d_render_device->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_ARGB(0, 0, 0, 0), 1.0f, 0); #ifdef _XBOX1 device_ptr->d3d_render_device->BeginScene(); - device_ptr->d3d_render_device->SetFlickerFilter(1); - device_ptr->d3d_render_device->SetSoftDisplayFilter(false); + device_ptr->d3d_render_device->SetFlickerFilter(flicker_filter); + device_ptr->d3d_render_device->SetSoftDisplayFilter(soft_filter_enable); #endif } diff --git a/xbox1/xdk_d3d8.cpp b/xbox1/xdk_d3d8.cpp index 90c7e49bfb..0836d4f4a3 100644 --- a/xbox1/xdk_d3d8.cpp +++ b/xbox1/xdk_d3d8.cpp @@ -365,6 +365,8 @@ static bool xdk_d3d_frame(void *data, const void *frame, xdk_d3d_video_t *d3d = (xdk_d3d_video_t*)data; bool menu_enabled = g_console.menu_enable; bool fps_enable = g_console.fps_info_msg_enable; + unsigned flicker_filter = g_console.flicker_filter; + bool soft_filter_enable = g_console.soft_display_filter_enable; if (d3d->last_width != width || d3d->last_height != height) //240*160 { @@ -439,6 +441,8 @@ static bool xdk_d3d_frame(void *data, const void *frame, d3d->d3d_render_device->Clear(0, NULL, D3DCLEAR_TARGET, 0xff000000, 1.0f, 0); d3d->d3d_render_device->BeginScene(); + d3d->d3d_render_device->SetFlickerFilter(flicker_filter); + d3d->d3d_render_device->SetSoftDisplayFilter(soft_filter_enable); d3d->d3d_render_device->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2); d3d->d3d_render_device->EndScene();