Skip to content

Apply SDR calibration through the Advanced Color list, keep per-mode profiles - #12

Merged
davidtorcivia merged 1 commit into
mainfrom
fix/sdr-mhc2-advanced-color
Oct 9, 2026
Merged

davidtorcivia merged 1 commit into
mainfrom
fix/sdr-mhc2-advanced-color

Conversation

@davidtorcivia

Copy link
Copy Markdown
Collaborator

SDR calibrations never reached the display: Gloam registered them only in the legacy profile list, and Windows reads MHC2 only from the Advanced Color list. Thanks to @MrBrown55 for the report and diagnostics that made this easy to pin down.

Windows keeps one Advanced Color profile per display for both SDR and HDR, so this also keeps a separate SDR and HDR calibration per display and swaps the right one in when HDR is turned on or off.

Changelog (1.10.0)

  • SDR installs and re-activations now set the profile as the Advanced Color default, keeping the legacy association for ICC-aware apps.
  • Gloam warns once after an SDR install when "Automatically manage color for apps" is off, since Windows applies SDR calibration only while it is on. Profile Manager shows the same hint.
  • Per-display SDR and HDR slots. The profile for the current mode is swapped in at startup and on each HDR toggle; a refused step is retried on the next display event.
  • When a mode has no Gloam calibration, or one is deactivated in Profile Manager, the advanced color profile Gloam replaced is restored.
  • Pre-1.10 records are sorted into a slot from the profile's target name.
  • Failed installs clean up the legacy association and any newly installed file. A repeated generated name gets a numeric suffix instead of colliding.
  • TrustCheck measures in the current mode against the active profile's target and refuses on a mismatch.
  • An open Settings window can no longer roll back a mode swap when saved.

Verified on hardware that Windows accepts and keeps the Advanced Color default on an SDR display with ACM off. Not yet verified end to end with a colorimeter in SDR.

Closes #11

…profiles

SDR installs only associated the profile through the legacy WCS list (ICMProfile). Windows applies MHC2 only from the Advanced Color list (ICMProfileAC), so SDR corrections never reached the display and verification measured the native panel (issue #11). Install now activates the profile through AdvancedColorProfileAssociation.TryActivateInstalled in both modes, keeps the legacy association for ICC-aware apps in SDR, and sets InstallResult.Warning when Auto Color Management is off, which the report window shows once before verifying. Install uses TryInstallVerified in both modes, undoes the legacy association and a newly installed file on refusal or exception, and gives a colliding generated name a numeric suffix. Reenable mirrors this and undoes only an association it created. TryRemoveCurrentUser treats ERROR_PROFILE_NOT_ASSOCIATED_WITH_DEVICE as nothing to remove.

Windows keeps one Advanced Color default per display for SDR and HDR. MonitorProfileData now records Mhc2SdrProfileName and Mhc2HdrProfileName next to the active Mhc2ProfileName, plus PreviousAdvancedColorProfileName for the non-Gloam default a Gloam activation displaced. AdvancedColorProfileMigrationService.ReconcileModeChanges runs at startup and on display events before ApplyAll. On first sight of a monitor and on each SDR/HDR transition it retires the other mode's profile, activates the slot for the current mode, or restores the displaced profile when the mode has none. A refused step is retried on the next display event. Records from before the slots are classified from the standard-target segment of the profile name, falling back to PreviousColorProfileHdrMode. SetMonitorProfile keeps the stored calibration fields so a stale editor save cannot roll back a swap. TrustCheck measures in the current mode against the active profile's target and refuses on a mode mismatch. Profile Manager files an activated profile under the mode it was built for and restores the displaced profile on deactivate.

Version 1.10.0 with release notes. Tests cover DecideModeSwitch, name classification, slot bookkeeping and reload, mode swaps, retry after a refused retire or restore, and the stale-save guard.
@davidtorcivia
davidtorcivia merged commit 264b7e6 into main Oct 9, 2026
2 checks passed
@davidtorcivia
davidtorcivia deleted the fix/sdr-mhc2-advanced-color branch October 9, 2026 01:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

SDR calibration verifies worse than native

1 participant