diff options
| author | salmonik <salmonik@tuta.io> | 2026-11-04 14:07:49 +0100 |
|---|---|---|
| committer | salmonik <salmonik@tuta.io> | 2026-11-04 14:07:49 +0100 |
| commit | 5bc97393aee4124b00db3ab4fbe8d6e26ba88069 (patch) | |
| tree | 7315ee842a071d30f5e035b9a11b0a8045e26588 /src/hl2h.cpp | |
| parent | Transitions: per-trigger targets and 3D wireframe; FOV range fixes (diff) | |
| download | hl2h-5bc97393aee4124b00db3ab4fbe8d6e26ba88069.tar.gz hl2h-5bc97393aee4124b00db3ab4fbe8d6e26ba88069.zip | |
Gamma: clamp slider to the engine's 2.6 cap, defer readback
The engine clamps mat_monitorgamma at 2.6, so the 2.8..3.0 end of the slider
did nothing. Read the value back one tick later (ClientCmd is queued) and
interpose SDL_SetWindowGammaRamp to see whether the engine pushes a ramp at
all.
Diffstat (limited to '')
| -rw-r--r-- | src/hl2h.cpp | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/src/hl2h.cpp b/src/hl2h.cpp index f7106cd..1fc7096 100644 --- a/src/hl2h.cpp +++ b/src/hl2h.cpp | |||
| @@ -674,13 +674,18 @@ static void view_settings_apply(void *ent) { | |||
| 674 | last_vm = g_fov_viewmodel; | 674 | last_vm = g_fov_viewmodel; |
| 675 | } | 675 | } |
| 676 | static int last_gamma = 22; | 676 | static int last_gamma = 22; |
| 677 | static int pending_gamma = -1; | ||
| 677 | if (g_gamma != last_gamma) { | 678 | if (g_gamma != last_gamma) { |
| 678 | char cmd[48]; | 679 | char cmd[48]; |
| 679 | snprintf(cmd, sizeof(cmd), "mat_monitorgamma %d.%d", g_gamma / 10, | 680 | snprintf(cmd, sizeof(cmd), "mat_monitorgamma %d.%d", g_gamma / 10, |
| 680 | g_gamma % 10); | 681 | g_gamma % 10); |
| 681 | console_cmd(cmd); | 682 | console_cmd(cmd); |
| 682 | // Read back through ICvar to tell an ignored command from an OS gamma | 683 | pending_gamma = g_gamma; |
| 683 | // ramp that the compositor discards. | 684 | last_gamma = g_gamma; |
| 685 | } | ||
| 686 | if (pending_gamma >= 0) { | ||
| 687 | // ClientCmd is queued, so read the cvar on the next tick to see the value | ||
| 688 | // the engine actually accepted (it clamps mat_monitorgamma at 2.6). | ||
| 684 | float got = -1.0f; | 689 | float got = -1.0f; |
| 685 | if (g_iface.cvar) { | 690 | if (g_iface.cvar) { |
| 686 | using FindFn = void *(*)(void *, const char *); | 691 | using FindFn = void *(*)(void *, const char *); |
| @@ -689,9 +694,9 @@ static void view_settings_apply(void *ent) { | |||
| 689 | if (v) | 694 | if (v) |
| 690 | got = *(float *)((uintptr_t)v + 0x2c); // ConVar m_Value.f | 695 | got = *(float *)((uintptr_t)v + 0x2c); // ConVar m_Value.f |
| 691 | } | 696 | } |
| 692 | logf("view: gamma request %d.%d, cvar reports %.2f", g_gamma / 10, | 697 | logf("view: gamma request %d.%d, cvar reports %.2f", pending_gamma / 10, |
| 693 | g_gamma % 10, got); | 698 | pending_gamma % 10, got); |
| 694 | last_gamma = g_gamma; | 699 | pending_gamma = -1; |
| 695 | } | 700 | } |
| 696 | } | 701 | } |
| 697 | 702 | ||
