diff --git a/frontend/menu/rmenu.c b/frontend/menu/rmenu.c index 53b9c327c5..f3d91bf689 100644 --- a/frontend/menu/rmenu.c +++ b/frontend/menu/rmenu.c @@ -42,6 +42,7 @@ #include "../../gfx/gfx_context.h" #include "../../file.h" +#include "../../driver.h" #include "../../general.h" @@ -214,6 +215,11 @@ static void populate_setting_item(void *data, unsigned input) snprintf(current_item->setting_text, sizeof(current_item->setting_text), "%f", g_extern.console.screen.overscan_amount); snprintf(current_item->comment, sizeof(current_item->comment), "INFO - Adjust or decrease [Overscan]. Set this to higher than 0.000\nif the screen doesn't fit on your TV/monitor."); break; + case SETTING_REFRESH_RATE: + snprintf(current_item->text, sizeof(current_item->text), "Refresh rate"); + snprintf(current_item->setting_text, sizeof(current_item->setting_text), "%fHz", g_settings.video.refresh_rate); + snprintf(current_item->comment, sizeof(current_item->comment), "INFO - Adjust or decrease [Refresh Rate]."); + break; case SETTING_THROTTLE_MODE: snprintf(current_item->text, sizeof(current_item->text), "Throttle Mode"); snprintf(current_item->setting_text, sizeof(current_item->setting_text), (g_extern.lifecycle_mode_state & (1ULL << MODE_VIDEO_THROTTLE_ENABLE)) ? "ON" : "OFF"); @@ -1264,6 +1270,23 @@ static int set_setting_action(void *data, unsigned switchvalue, uint64_t input) gfx_ctx_set_overscan(); } break; + case SETTING_REFRESH_RATE: + if(input & (1ULL << RMENU_DEVICE_NAV_LEFT)) + { + rmenu_settings_set(S_REFRESH_RATE_DECREMENT); + driver_set_monitor_refresh_rate(g_settings.video.refresh_rate); + } + if((input & (1ULL << RMENU_DEVICE_NAV_RIGHT)) || (input & (1ULL << RMENU_DEVICE_NAV_B))) + { + rmenu_settings_set(S_REFRESH_RATE_INCREMENT); + driver_set_monitor_refresh_rate(g_settings.video.refresh_rate); + } + if(input & (1ULL << RMENU_DEVICE_NAV_START)) + { + rmenu_settings_set_default(S_DEF_REFRESH_RATE); + driver_set_monitor_refresh_rate(g_settings.video.refresh_rate); + } + break; case SETTING_THROTTLE_MODE: if((input & (1ULL << RMENU_DEVICE_NAV_LEFT)) || (input & (1ULL << RMENU_DEVICE_NAV_RIGHT)) || (input & (1ULL << RMENU_DEVICE_NAV_B))) { diff --git a/frontend/menu/rmenu.h b/frontend/menu/rmenu.h index c49942f560..ebd190f86d 100644 --- a/frontend/menu/rmenu.h +++ b/frontend/menu/rmenu.h @@ -120,6 +120,7 @@ enum SETTING_SOFT_DISPLAY_FILTER, #endif SETTING_HW_OVERSCAN_AMOUNT, + SETTING_REFRESH_RATE, SETTING_THROTTLE_MODE, SETTING_TRIPLE_BUFFERING, SETTING_ENABLE_SCREENSHOTS, diff --git a/frontend/menu/rmenu_settings.c b/frontend/menu/rmenu_settings.c index 6f2e7bf28d..e7523af309 100644 --- a/frontend/menu/rmenu_settings.c +++ b/frontend/menu/rmenu_settings.c @@ -129,6 +129,12 @@ void rmenu_settings_set(unsigned setting) else g_extern.lifecycle_mode_state |= (1ULL << MODE_VIDEO_TRIPLE_BUFFERING_ENABLE); break; + case S_REFRESH_RATE_DECREMENT: + g_settings.video.refresh_rate -= 0.01f; + break; + case S_REFRESH_RATE_INCREMENT: + g_settings.video.refresh_rate += 0.01f; + break; } } @@ -183,6 +189,13 @@ void rmenu_settings_set_default(unsigned setting) g_settings.video.fbo.scale_x = 2.0f; g_settings.video.fbo.scale_y = 2.0f; break; + case S_DEF_REFRESH_RATE: +#if defined(RARCH_CONSOLE) + g_settings.video.refresh_rate = 59.92; +#else + g_settings.video.refresh_rate = 59.95; +#endif + break; } } diff --git a/frontend/menu/rmenu_settings.h b/frontend/menu/rmenu_settings.h index 73c61a8a54..832ee69e65 100644 --- a/frontend/menu/rmenu_settings.h +++ b/frontend/menu/rmenu_settings.h @@ -50,7 +50,9 @@ enum S_SCALE_FACTOR_DECREMENT, S_SCALE_FACTOR_INCREMENT, S_THROTTLE, - S_TRIPLE_BUFFERING + S_TRIPLE_BUFFERING, + S_REFRESH_RATE_DECREMENT, + S_REFRESH_RATE_INCREMENT, }; enum @@ -66,7 +68,8 @@ enum S_DEF_TRIPLE_BUFFERING, S_DEF_SAVE_STATE, S_DEF_SCALE_ENABLED, - S_DEF_SCALE_FACTOR + S_DEF_SCALE_FACTOR, + S_DEF_REFRESH_RATE, }; enum