diff --git a/src/gl/imgui_hud.cpp b/src/gl/imgui_hud.cpp index 5fa7c28c..d5ce4e76 100644 --- a/src/gl/imgui_hud.cpp +++ b/src/gl/imgui_hud.cpp @@ -71,6 +71,7 @@ void imgui_init() return; parse_overlay_config(¶ms, getenv("MANGOHUD_CONFIG")); + _params = params; //check for blacklist item in the config file for (auto& item : params.blacklist) { diff --git a/src/keybinds.cpp b/src/keybinds.cpp index ef73bc72..d141b60e 100644 --- a/src/keybinds.cpp +++ b/src/keybinds.cpp @@ -85,6 +85,7 @@ void check_keybinds(struct swapchain_stats& sw_stats, struct overlay_params& par #endif if (pressed){ parse_overlay_config(¶ms, getenv("MANGOHUD_CONFIG")); + _params = params; reload_cfg_press = now; } } diff --git a/src/logging.cpp b/src/logging.cpp index ac176f1e..411750d6 100644 --- a/src/logging.cpp +++ b/src/logging.cpp @@ -7,6 +7,7 @@ #include #include #include "file_utils.h" +#include "string_utils.h" string os, cpu, gpu, ram, kernel, driver, cpu_governor; bool sysInfoFetched = false; @@ -134,12 +135,11 @@ string get_log_suffix(){ return log_name; } -void logging(void *params_void){ - overlay_params *params = reinterpret_cast(params_void); +void logging(){ logger->wait_until_data_valid(); while (logger->is_active()){ logger->try_log(); - this_thread::sleep_for(chrono::milliseconds(params->log_interval)); + this_thread::sleep_for(chrono::milliseconds(_params.log_interval)); } } @@ -159,12 +159,12 @@ void Logger::start_logging() { m_logging_on = true; m_log_start = Clock::now(); - if (m_params->log_name.empty()) - m_log_files.emplace_back(m_params->output_folder + "/" + get_program_name() + "_" + get_log_suffix()); + if (_params.log_name.empty()) + m_log_files.emplace_back(_params.output_folder + "/" + get_program_name() + "_" + get_log_suffix()); else - m_log_files.emplace_back(m_params->output_folder + "/" + m_params->log_name + ".csv"); + m_log_files.emplace_back(_params.output_folder + "/" + _params.log_name + ".csv"); - if (m_params->autostart_log){ + if (_params.autostart_log){ printf("Named log file: %s\n", m_log_files.back().c_str()); currentLogFile.open(m_log_files.back(), ios::out | ios::app); printf("Opened log file\n"); @@ -183,8 +183,8 @@ void Logger::start_logging() { } printf("Wrote info to log file\n"); } - if((!m_params->output_folder.empty()) && (m_params->log_interval != 0)){ - std::thread(logging, m_params).detach(); + if((!_params.output_folder.empty()) && (_params.log_interval != 0)){ + std::thread(logging).detach(); } } @@ -193,17 +193,17 @@ void Logger::stop_logging() { m_logging_on = false; m_log_end = Clock::now(); - std::thread(calculate_benchmark_data, m_params).detach(); + calculate_benchmark_data(); - if(!m_params->output_folder.empty() && !m_params->autostart_log) { + if(!_params.output_folder.empty() && !_params.autostart_log) { std::string program = get_wine_exe_name(); if (program.empty()) program = get_program_name(); - if (m_params->log_name.empty()) - m_log_files.emplace_back(m_params->output_folder + "/" + program + "_" + get_log_suffix()); + if (_params.log_name.empty()) + m_log_files.emplace_back(_params.output_folder + "/" + program + "_" + get_log_suffix()); else - m_log_files.emplace_back(m_params->output_folder + "/" + m_params->log_name + ".csv"); + m_log_files.emplace_back(_params.output_folder + "/" + _params.log_name + ".csv"); std::thread(writeFile, m_log_files.back()).detach(); } @@ -222,9 +222,9 @@ void Logger::try_log() { currentLogData.current_watt = Battery_Stats.current_watt; #endif m_log_array.push_back(currentLogData); - if (m_params->autostart_log) + if (_params.autostart_log) writeFileContinuous(currentLogFile); - if(m_params->log_duration && (elapsedLog >= std::chrono::seconds(m_params->log_duration))){ + if(_params.log_duration && (elapsedLog >= std::chrono::seconds(_params.log_duration))){ stop_logging(); } } diff --git a/src/overlay.cpp b/src/overlay.cpp index 9e1d646f..05bd9784 100644 --- a/src/overlay.cpp +++ b/src/overlay.cpp @@ -146,9 +146,7 @@ void update_hud_info(struct swapchain_stats& sw_stats, struct overlay_params& pa gpuvis_trace_printf("[MH] ram_used: %d", memused); } -void calculate_benchmark_data(void *params_void){ - overlay_params *params = reinterpret_cast(params_void); - +void calculate_benchmark_data(){ vector sorted = benchmark.fps_data; std::sort(sorted.begin(), sorted.end()); benchmark.percentile_data.clear(); @@ -160,7 +158,7 @@ void calculate_benchmark_data(void *params_void){ size_t max_label_size = 0; - for (std::string percentile : params->benchmark_percentiles) { + for (std::string percentile : _params.benchmark_percentiles) { float result; // special case handling for a mean-based average diff --git a/src/overlay.h b/src/overlay.h index dea4683d..5b3f5a64 100644 --- a/src/overlay.h +++ b/src/overlay.h @@ -102,6 +102,7 @@ extern struct benchmark_stats benchmark; extern ImVec2 real_font_size; extern std::string wineVersion; extern std::vector graph_data; +extern overlay_params _params; void position_layer(struct swapchain_stats& data, struct overlay_params& params, ImVec2 window_size); void render_imgui(swapchain_stats& data, struct overlay_params& params, ImVec2& window_size, bool is_vulkan); @@ -113,7 +114,7 @@ void check_keybinds(struct swapchain_stats& sw_stats, struct overlay_params& par void init_system_info(void); void FpsLimiter(struct fps_limit& stats); void get_device_name(int32_t vendorID, int32_t deviceID, struct swapchain_stats& sw_stats); -void calculate_benchmark_data(void *params_void); +void calculate_benchmark_data(); void create_fonts(const overlay_params& params, ImFont*& small_font, ImFont*& text_font); void right_aligned_text(ImVec4& col, float off_x, const char *fmt, ...); void center_text(std::string& text); diff --git a/src/vulkan.cpp b/src/vulkan.cpp index adee90d4..f337fda4 100644 --- a/src/vulkan.cpp +++ b/src/vulkan.cpp @@ -71,6 +71,13 @@ float offset_x, offset_y, hudSpacing; int hudFirstRow, hudSecondRow; VkPhysicalDeviceDriverProperties driverProps = {}; int32_t deviceID; +overlay_params _params {}; + +#if !defined(_WIN32) +namespace MangoHud { namespace GL { + extern swapchain_stats sw_stats; +}} +#endif /* Mapped from VkInstace/VkPhysicalDevice */ struct instance_data { @@ -2248,6 +2255,7 @@ static VkResult overlay_CreateInstance( instance_data_map_physical_devices(instance_data, true); parse_overlay_config(&instance_data->params, getenv("MANGOHUD_CONFIG")); + _params = instance_data->params; //check for blacklist item in the config file for (auto& item : instance_data->params.blacklist) { diff --git a/src/win/d3d_shared.cpp b/src/win/d3d_shared.cpp index 4185a850..b473b6b3 100644 --- a/src/win/d3d_shared.cpp +++ b/src/win/d3d_shared.cpp @@ -14,6 +14,7 @@ void init_d3d_shared(){ if (cfg_inited) return; parse_overlay_config(¶ms, getenv("MANGOHUD_CONFIG")); + _params = params; cfg_inited = true; // init_cpu_stats(params); }