Allow MANGOHUD_CONFIG to override configuration files' settings.

Use `MANGOHUD_CONFIG=some_setting=1` to skip reading the configuration files
and just use the settings specified with MANGOHUD_CONFIG.

Use `MANGOHUD_CONFIG=read_configs,...` to read configuration files too and
add other settings that you would like to override.
This commit is contained in:
jackun 2020-02-15 23:21:32 +02:00
parent f7e7146883
commit 80f29aad9d
No known key found for this signature in database
GPG Key ID: 119DB3F1D05A9ED3
3 changed files with 76 additions and 56 deletions

View File

@ -2592,7 +2592,7 @@ static VkResult overlay_CreateInstance(
&instance_data->vtable); &instance_data->vtable);
instance_data_map_physical_devices(instance_data, true); instance_data_map_physical_devices(instance_data, true);
parse_overlay_env(&instance_data->params, getenv("MANGOHUD_CONFIG")); parse_overlay_config(&instance_data->params, getenv("MANGOHUD_CONFIG"));
if (instance_data->params.fps_limit > 0) if (instance_data->params.fps_limit > 0)
targetFrameTime = int64_t(1000000000.0 / instance_data->params.fps_limit); targetFrameTime = int64_t(1000000000.0 / instance_data->params.fps_limit);

View File

@ -212,70 +212,12 @@ parse_overlay_env(struct overlay_params *params,
{ {
uint32_t num; uint32_t num;
char key[256], value[256]; char key[256], value[256];
memset(params, 0, sizeof(*params));
/* Visible by default */
params->enabled[OVERLAY_PARAM_ENABLED_fps] = true;
params->enabled[OVERLAY_PARAM_ENABLED_frame_timing] = true;
params->enabled[OVERLAY_PARAM_ENABLED_core_load] = false;
params->enabled[OVERLAY_PARAM_ENABLED_cpu_temp] = false;
params->enabled[OVERLAY_PARAM_ENABLED_gpu_temp] = false;
params->enabled[OVERLAY_PARAM_ENABLED_cpu_stats] = true;
params->enabled[OVERLAY_PARAM_ENABLED_gpu_stats] = true;
params->enabled[OVERLAY_PARAM_ENABLED_ram] = false;
params->enabled[OVERLAY_PARAM_ENABLED_vram] = false;
params->fps_sampling_period = 500000; /* 500ms */
params->width = 280;
params->height = 140;
params->control = -1;
params->toggle_hud = XK_F12;
params->toggle_logging = XK_F2;
params->fps_limit = 0;
params->vsync = -1;
params->crosshair_size = 30;
params->offset_x = 0;
params->offset_y = 0;
params->background_alpha = 0.5;
// Get config options
parseConfigFile();
if (options.find("full") != options.end() && options.find("full")->second != "0") {
#define OVERLAY_PARAM_BOOL(name) \
params->enabled[OVERLAY_PARAM_ENABLED_##name] = 1;
#define OVERLAY_PARAM_CUSTOM(name) //define _CUSTOM to nothing so they are left alone
OVERLAY_PARAMS
#undef OVERLAY_PARAM_BOOL
#undef OVERLAY_PARAM_CUSTOM
params->enabled[OVERLAY_PARAM_ENABLED_crosshair] = 0;
options.erase("full");
}
for (auto& it : options) {
#define OVERLAY_PARAM_BOOL(name) \
if (it.first == #name) { \
params->enabled[OVERLAY_PARAM_ENABLED_##name] = \
strtol(it.second.c_str(), NULL, 0); \
continue; \
}
#define OVERLAY_PARAM_CUSTOM(name) \
if (it.first == #name) { \
params->name = parse_##name(it.second.c_str()); \
continue; \
}
OVERLAY_PARAMS
#undef OVERLAY_PARAM_BOOL
#undef OVERLAY_PARAM_CUSTOM
fprintf(stderr, "Unknown option '%s'\n", it.first.c_str());
}
if (env){
while ((num = parse_string(env, key, value)) != 0) { while ((num = parse_string(env, key, value)) != 0) {
env += num; env += num;
if (!strcmp("full", key)) { if (!strcmp("full", key)) {
#define OVERLAY_PARAM_BOOL(name) \ #define OVERLAY_PARAM_BOOL(name) \
params->enabled[OVERLAY_PARAM_ENABLED_##name] = 1; params->enabled[OVERLAY_PARAM_ENABLED_##name] = 1;
#define OVERLAY_PARAM_CUSTOM(name) //define _CUSTOM to nothing so they are left alone #define OVERLAY_PARAM_CUSTOM(name)
OVERLAY_PARAMS OVERLAY_PARAMS
#undef OVERLAY_PARAM_BOOL #undef OVERLAY_PARAM_BOOL
#undef OVERLAY_PARAM_CUSTOM #undef OVERLAY_PARAM_CUSTOM
@ -299,6 +241,81 @@ parse_overlay_env(struct overlay_params *params,
} }
} }
void
parse_overlay_config(struct overlay_params *params,
const char *env)
{
memset(params, 0, sizeof(*params));
/* Visible by default */
params->enabled[OVERLAY_PARAM_ENABLED_fps] = true;
params->enabled[OVERLAY_PARAM_ENABLED_frame_timing] = true;
params->enabled[OVERLAY_PARAM_ENABLED_core_load] = false;
params->enabled[OVERLAY_PARAM_ENABLED_cpu_temp] = false;
params->enabled[OVERLAY_PARAM_ENABLED_gpu_temp] = false;
params->enabled[OVERLAY_PARAM_ENABLED_cpu_stats] = true;
params->enabled[OVERLAY_PARAM_ENABLED_gpu_stats] = true;
params->enabled[OVERLAY_PARAM_ENABLED_ram] = false;
params->enabled[OVERLAY_PARAM_ENABLED_vram] = false;
params->enabled[OVERLAY_PARAM_ENABLED_read_configs] = false;
params->fps_sampling_period = 500000; /* 500ms */
params->width = 280;
params->height = 140;
params->control = -1;
params->toggle_hud = XK_F12;
params->toggle_logging = XK_F2;
params->fps_limit = 0;
params->vsync = -1;
params->crosshair_size = 30;
params->offset_x = 0;
params->offset_y = 0;
params->background_alpha = 0.5;
// first pass with env var
if (env)
parse_overlay_env(params, env);
bool rc = params->enabled[OVERLAY_PARAM_ENABLED_read_configs];
if (!env || rc) {
// Get config options
parseConfigFile();
if (options.find("full") != options.end() && options.find("full")->second != "0") {
#define OVERLAY_PARAM_BOOL(name) \
params->enabled[OVERLAY_PARAM_ENABLED_##name] = 1;
#define OVERLAY_PARAM_CUSTOM(name)
OVERLAY_PARAMS
#undef OVERLAY_PARAM_BOOL
#undef OVERLAY_PARAM_CUSTOM
params->enabled[OVERLAY_PARAM_ENABLED_crosshair] = 0;
options.erase("full");
}
for (auto& it : options) {
#define OVERLAY_PARAM_BOOL(name) \
if (it.first == #name) { \
params->enabled[OVERLAY_PARAM_ENABLED_##name] = \
strtol(it.second.c_str(), NULL, 0); \
continue; \
}
#define OVERLAY_PARAM_CUSTOM(name) \
if (it.first == #name) { \
params->name = parse_##name(it.second.c_str()); \
continue; \
}
OVERLAY_PARAMS
#undef OVERLAY_PARAM_BOOL
#undef OVERLAY_PARAM_CUSTOM
fprintf(stderr, "Unknown option '%s'\n", it.first.c_str());
}
}
// second pass, override config file settings with MANGOHUD_CONFIG
if (env && rc)
parse_overlay_env(params, env);
// if font_size is used and height has not been changed from default // if font_size is used and height has not been changed from default
// increase height as needed based on font_size // increase height as needed based on font_size

View File

@ -49,6 +49,7 @@ extern "C" {
OVERLAY_PARAM_BOOL(crosshair) \ OVERLAY_PARAM_BOOL(crosshair) \
OVERLAY_PARAM_BOOL(time) \ OVERLAY_PARAM_BOOL(time) \
OVERLAY_PARAM_BOOL(full) \ OVERLAY_PARAM_BOOL(full) \
OVERLAY_PARAM_BOOL(read_configs) \
OVERLAY_PARAM_CUSTOM(fps_sampling_period) \ OVERLAY_PARAM_CUSTOM(fps_sampling_period) \
OVERLAY_PARAM_CUSTOM(output_file) \ OVERLAY_PARAM_CUSTOM(output_file) \
OVERLAY_PARAM_CUSTOM(position) \ OVERLAY_PARAM_CUSTOM(position) \
@ -111,6 +112,8 @@ const extern char *overlay_param_names[];
void parse_overlay_env(struct overlay_params *params, void parse_overlay_env(struct overlay_params *params,
const char *env); const char *env);
void parse_overlay_config(struct overlay_params *params,
const char *env);
#ifdef __cplusplus #ifdef __cplusplus
} }