From 5f8ab1ac21e8af11e8e20515a0abf28910edeed7 Mon Sep 17 00:00:00 2001 From: Fabian Arndt Date: Wed, 7 Jun 2023 02:35:46 +0200 Subject: [PATCH] Gamescope: Added parameter for the scaler --- src/app/main.cpp | 1 + src/app/mangoapp_proto.h | 1 + src/hud_elements.cpp | 19 ++++++++++++++++++- src/hud_elements.h | 2 ++ src/overlay_params.h | 1 + 5 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/app/main.cpp b/src/app/main.cpp index b69b175a..18f8df47 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -163,6 +163,7 @@ static void msg_read_thread(){ update_hud_info_with_frametime(sw_stats, params, vendorID, mangoapp_v1->visible_frametime_ns); if (msg_size > offsetof(mangoapp_msg_v1, scaler_filter)){ + HUDElements.g_scaler = mangoapp_v1->scaler; HUDElements.g_scaler_filter = mangoapp_v1->scaler_filter; if (params.fsr_steam_sharpness < 0) HUDElements.g_fsrSharpness = mangoapp_v1->fsrSharpness; diff --git a/src/app/mangoapp_proto.h b/src/app/mangoapp_proto.h index b73c3bd3..13050d3e 100644 --- a/src/app/mangoapp_proto.h +++ b/src/app/mangoapp_proto.h @@ -17,6 +17,7 @@ struct mangoapp_msg_v1 { uint64_t latency_ns; uint32_t outputWidth; uint32_t outputHeight; + uint8_t scaler; // WARNING: Always ADD fields, never remove or repurpose fields } __attribute__((packed)); diff --git a/src/hud_elements.cpp b/src/hud_elements.cpp index c526e966..ca4d253a 100644 --- a/src/hud_elements.cpp +++ b/src/hud_elements.cpp @@ -839,6 +839,20 @@ void HudElements::battery(){ #endif } +void HudElements::gamescope_scaler(){ + static const char* const gamescope_upscale_scaler[] = {"AUTO", "INTEGER", "FIT", "FILL", "STRETCH"}; + if (HUDElements.g_scaler < 0 || HUDElements.g_scaler > (int)ARRAY_SIZE(gamescope_upscale_scaler)) + return; + + if (!HUDElements.params->enabled[OVERLAY_PARAM_ENABLED_scaler]) + return; + + ImguiNextColumnFirstItem(); + HUDElements.TextColored(HUDElements.colors.engine, "%s", "SCALER"); + ImguiNextColumnOrNewRow(); + right_aligned_text(HUDElements.colors.text, HUDElements.ralign_width, "%s", gamescope_upscale_scaler[HUDElements.g_scaler]); +} + void HudElements::gamescope_scaler_filter(){ static const char* const gamescope_upscale_filter[] = {"LINEAR", "NEAREST", "FSR", "NIS"}; if (HUDElements.g_scaler_filter < 0 || HUDElements.g_scaler_filter > (int)ARRAY_SIZE(gamescope_upscale_filter)) @@ -1191,6 +1205,7 @@ void HudElements::sort_elements(const std::pair& optio exec_list.push_back({int(ordered_functions.size() - 1), value}); } if (param == "battery") { ordered_functions.push_back({battery, value}); } if (param == "fps_only") { ordered_functions.push_back({fps_only, value}); } + if (param == "scaler") { ordered_functions.push_back({gamescope_scaler, value}); } if (param == "filter") { ordered_functions.push_back({gamescope_scaler_filter, value});} if (param == "debug") { ordered_functions.push_back({gamescope_frame_timing, value}); } if (param == "gamepad_battery") { ordered_functions.push_back({gamepad_battery, value}); } @@ -1237,6 +1252,8 @@ void HudElements::legacy_elements(){ ordered_functions.push_back({battery, value}); if (params->enabled[OVERLAY_PARAM_ENABLED_fan]) ordered_functions.push_back({fan, value}); + if (params->enabled[OVERLAY_PARAM_ENABLED_scaler]) + ordered_functions.push_back({gamescope_scaler, value}); if (params->enabled[OVERLAY_PARAM_ENABLED_filter]) ordered_functions.push_back({gamescope_scaler_filter, value}); if (params->enabled[OVERLAY_PARAM_ENABLED_throttling_status]) @@ -1258,7 +1275,7 @@ void HudElements::legacy_elements(){ if (params->enabled[OVERLAY_PARAM_ENABLED_frame_timing]) ordered_functions.push_back({frame_timing, value}); if (params->enabled[OVERLAY_PARAM_ENABLED_frame_count]) - ordered_functions.push_back({frame_count, value}); + ordered_functions.push_back({frame_count, value}); if (params->enabled[OVERLAY_PARAM_ENABLED_debug] && !params->enabled[OVERLAY_PARAM_ENABLED_horizontal]) ordered_functions.push_back({gamescope_frame_timing, value}); if (params->enabled[OVERLAY_PARAM_ENABLED_gamemode]) diff --git a/src/hud_elements.h b/src/hud_elements.h index 253408f1..f1ce9313 100644 --- a/src/hud_elements.h +++ b/src/hud_elements.h @@ -23,6 +23,7 @@ class HudElements{ int text_column = 1; int table_columns_count = 0; int g_scaler_filter = -1; + int g_scaler = -1; int g_fsrSharpness = -1; Clock::time_point last_exec; std::vector> options; @@ -65,6 +66,7 @@ class HudElements{ static void _exec(); static void battery(); static void fps_only(); + static void gamescope_scaler(); static void gamescope_scaler_filter(); static void gamescope_frame_timing(); static void gamepad_battery(); diff --git a/src/overlay_params.h b/src/overlay_params.h index 2453b65d..18788605 100644 --- a/src/overlay_params.h +++ b/src/overlay_params.h @@ -77,6 +77,7 @@ typedef unsigned long KeySym; OVERLAY_PARAM_BOOL(battery) \ OVERLAY_PARAM_BOOL(battery_icon) \ OVERLAY_PARAM_BOOL(fps_only) \ + OVERLAY_PARAM_BOOL(scaler) \ OVERLAY_PARAM_BOOL(filter) \ OVERLAY_PARAM_BOOL(mangoapp_steam) \ OVERLAY_PARAM_BOOL(debug) \