this workflow will update the meson version in meson.build
when a new tag is created. This should cause less headache
for the developer who keeps forgetting to change the version manually
ASan complains about allocated size mismatch in ctor/dtor.
Scott Meyers says: "Polymorphic base classes should declare virtual destructors. If a class has any virtual functions, it should have a virtual destructor."
* if meson dosen't found spdlog with use_system_spdlog enabled
meson will print a warning and fallback to the submodule
instead of giving an error
* System vulkan-headers can't be use since mangohud don't use latest SDK
The code is commented out for future use
* All the other submodules will use system dependency when found
Signed-off-by: Gonçalo Negrier Duarte <gonegrier.duarte@gmail.com>
We want to wait to render before config has been fully loaded.
Otherwise this can sometimes cause a crash when we access config
options while they are being assigned.
GlxMakeCurrent fails for some reason in minecraft-launcher.
Bypassing it by blacklisting is not sufficient as it still
runs GlxMakeCurrent, so we bypass using that function for
minecraft-launcher completely
If nct doesn't have TSI0_TEMP then it won't have any cpu temp readings.
In that case we want to make sure we don't use nct module.
This happens on intel platforms and as such we should be using coretemp
instead
Some GPUs don't support power1_average and only power1_input.
Some GPUs support both. We check if power1_average exists first, then
fallback to power1_input
In kernel 6.6 v2_4 was added. This causes us to not find a version to use
as we limited by content rev 3.
For now we'll just limit by 4 instead and use the old v2_3 struct
Calling nvctrl XNVCTRLIsNvScreen with X display ID used for screen id is
a programmer error. For most common use cases, Gnome on X11 may launch
user sessions on X display ":1" but still uses screen 0. Current code
will always fail to find a correct display in this case, as both
`IsNvScreen(":0", 0)` and `IsNvScreen(":1", 1)` returns false.
Call XDefaultScreen with `struct Display *` to obtain the correct screen
id, then use this id for `IsNvScreen()`.
Implot allows us to draw multiple lines in the graph.
We draw the frametime as usual but also include thermal and power throttling.
Thermal throttling is red and power is yellow.
@ -76,6 +76,8 @@ Install necessary development packages.
- X11 (libx11-dev)
- XNVCtrl (libxnvctrl-dev), optional, use `-Dwith_xnvctrl=disabled` option with `meson` to disable
- D-Bus (libdbus-1-dev), optional, use `-Dwith_dbus=disabled` option with `meson` to disable
- wayland-client
- xcbcommon
Python 3 libraries:
@ -289,12 +291,14 @@ You can find an example config in /usr/share/doc/mangohud
---
### Environment Variables: **`MANGOHUD_CONFIG`** and **`MANGOHUD_CONFIGFILE`**
### Environment Variables
You can also customize the hud by using the `MANGOHUD_CONFIG` environment variable while separating different options with a comma. This takes priority over any config file.
You can also specify configuration file with `MANGOHUD_CONFIGFILE=/path/to/config` for applications whose names are hard to guess (java, python etc).
You can also specify presets file with `MANGOHUD_PRESETSFILE=/path/to/config`. This is especially useful when running mangohud in a sandbox such as flatpak.
A partial list of parameters are below. See the config file for a complete list.
Parameters that are enabled by default have to be explicitly disabled. These (currently) are `fps`, `frame_timing`, `cpu_stats` (cpu load), `gpu_stats` (gpu load), and each can be disabled by setting the corresponding variable to 0 (e.g., fps=0).
@ -328,6 +332,8 @@ Parameters that are enabled by default have to be explicitly disabled. These (cu
| `custom_text_center` | Display a custom text centered useful for a header e.g `custom_text_center=FlightLessMango Benchmarks` |
| `custom_text` | Display a custom text e.g `custom_text=Fsync enabled` |
| `debug` | Shows the graph of gamescope app frametimes and latency (only on gamescope obviously) |
| `device_battery` | Display wireless device battery percent. Currently supported arguments `gamepad` and `mouse` e.g `device_battery=gamepad,mouse` |
| `dynamic_frame_timing` | This changes frame_timing y-axis to correspond with the current maximum and minimum frametime instead of being a static 0-50 |
| `engine_short_names` | Display a short version of the used engine (e.g. `OGL` instead of `OpenGL`) |
| `engine_version` | Display OpenGL or vulkan and vulkan-based render engine's version |
@ -350,17 +356,18 @@ Parameters that are enabled by default have to be explicitly disabled. These (cu
| `fps_limit` | Limit the apps framerate. Comma-separated list of one or more FPS values. `0` means unlimited |
| `fps_only` | Show FPS only. ***Not meant to be used with other display params*** |
| `fps_sampling_period=` | Time interval between two sampling points for gathering the FPS in milliseconds. Default is `500` |
| `fps_value=` | Choose the break points where `fps_color_change` changes colors between. E.g `60,144`, default is `30,60` |
| `fps_value` | Choose the break points where `fps_color_change` changes colors between. E.g `60,144`, default is `30,60` |
| `fps_metrics` | Takes a list of decimal values or the value avg, e.g `avg,0.001` |
| `frame_count` | Display frame count |
| `frametime` | Display frametime next to FPS text |
| `fsr` | Display the status of FSR (only works in gamescope) |
| `hdr` | Display the status of HDR (only works in gamescope) |
| `refresh_rate` | Display the current refresh rate (only works in gamescope) |
| `full` | Enable most of the toggleable parameters (currently excludes `histogram`) |
| `gamemode` | Show if GameMode is on |
| `gamepad_battery_icon` | Display gamepad battery percent with icon. *Enabled by default* |
| `gamepad_battery` | Display battey of wireless gamepads (xone/xpadneo/ds4) |
| `gpu_core_clock`<br>`gpu_mem_clock`| Display GPU core/memory frequency |
| `gpu_fan` | GPU fan in rpm (only works on AMD GPUs) |
| `gpu_fan` | GPU fan in rpm on AMD, FAN in percent on NVIDIA |
| `gpu_load_change` | Change the color of the GPU load depending on load |
| `gpu_load_color` | Set the colors for the gpu load change low,medium and high. e.g `gpu_load_color=0000FF,00FFFF,FF00FF` |
| `gpu_load_value` | Set the values for medium and high load e.g `gpu_load_value=50,90` |
@ -404,8 +411,10 @@ Parameters that are enabled by default have to be explicitly disabled. These (cu
| `text_outline_color=` | Set the color of `text_outline`. Default = `000000` |
| `text_outline_thickness=` | Set the thickness of `text_outline`. Default = `1.5` |
| `throttling_status` | Show if GPU is throttling based on Power, current, temp or "other" (Only shows if throttling is currently happening). Currently disabled by default for Nvidia as it causes lag on 3000 series |
| `throttling_status_graph` | Same as `throttling_status` but displays throttling in the frametime graph and only power and temp throttling |
| `time`<br>`time_format=%T` | Display local time. See [std::put_time](https://en.cppreference.com/w/cpp/io/manip/put_time) for formatting help. NOTE: Sometimes apps may set `TZ` (timezone) environment variable to UTC/GMT |
| `toggle_fps_limit` | Cycle between FPS limits. Defaults to `Shift_L+F1` |
| `time_no_label` | Remove the label before time |
| `toggle_fps_limit` | Cycle between FPS limits (needs at least two values set with `fps_limit`). Defaults to `Shift_L+F1` |
| `toggle_preset` | Cycle between Presets. Defaults to `Shift_R+F10` |
| `toggle_hud=`<br>`toggle_logging=` | Modifiable toggle hotkeys. Default are `Shift_R+F12` and `Shift_L+F2`, respectively |
| `toggle_hud_position` | Toggle MangoHud postion. Default is `R_Shift+F11` |
@ -419,6 +428,9 @@ Parameters that are enabled by default have to be explicitly disabled. These (cu
| `width=`<br>`height=` | Customizeable HUD dimensions (in pixels) |
| `wine_color` | Change color of the wine/proton text |
| `wine` | Show current Wine or Proton version in use |
| `winesync` | Show wine sync method in use |
| `present_mode` | Shows current vulkan [present mode](https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPresentModeKHR.html) or vsync status in opengl |
| `network` | Show network interfaces tx and rx kb/s. You can specify interface with `network=eth0` |
Because comma is also used as option delimiter and needs to be escaped for values with a backslash, you can use `+` like `MANGOHUD_CONFIG=fps_limit=60+30+0` instead.
@ -469,7 +481,7 @@ When you toggle logging (default keybind is `Shift_L+F2`), a file is created wit
Log files can be visualized with two different tools: online and locally.
### Online viualization: FlightlessMango.com
### Online visualization: FlightlessMango.com
Log files can be (batch) uploaded to [FlightlessMango.com](https://flightlessmango.com/games/user_benchmarks), which will then take care of creating a frametime graph and a summary with 1% min / average framerate / 97th percentile in a table form and a horizontal bar chart form.
@ -15,7 +15,7 @@ MangoHud can be enabled for Vulkan applications by setting \fBMANGOHUD=1\fR as e
.br
To load MangoHud for any application, including OpenGL applications, the \fBmangohud\fR executable can be used. It preloads a library via ld into the application.
.br
Note: some OpenGL applications may also need dlsym hooking. This can be done by passing option \fB--dlsym\fR.
Note: some OpenGL applications may also need dlsym hooking. This can be done by passing option \fB--dlsym\fR or by setting \fBMANGOHUD_DLSYM=1\fR as envrionment variable.
.SHCONFIG
MangoHud comes with a config file which can be used to set configuration options globally or per application. The priorities of different config files are: