Skip to content

fix(canvas): give the overlay the monitor profile on the GPU path - #1200

Merged
marcinz606 merged 2 commits into
marcinz606:mainfrom
thetalkingdrum:fix/compare-before-monitor-profile
Sep 27, 2026
Merged

marcinz606 merged 2 commits into
marcinz606:mainfrom
thetalkingdrum:fix/compare-before-monitor-profile

Conversation

@thetalkingdrum

Copy link
Copy Markdown
Contributor

On a wide-gamut display, the Before half of the before/after split always looked more saturated than the After half. On the GPU path the canvas passed the monitor ICC profile to the shader's display LUT but not to the overlay, so everything the overlay converts on the host (the before/after baseline, the test strip mosaic, the loupe image) was converted for an sRGB display while the frame itself was converted for the monitor.

The overlay now gets the same monitor profile as the shader, and its image caches are keyed on it so a screen change rebuilds them. The printing notes sheet, which is saved as an untagged JPEG, is now converted for sRGB rather than for the monitor; the CPU path always wrote it in monitor space, and this change would otherwise have extended that to the GPU path.

On the GPU path the canvas passed the monitor ICC to the shader's display
LUT but not to the overlay, so the overlay's host-side images (the
before/after baseline, the test strip mosaic) were converted for an sRGB
display. On a wide-gamut monitor the Before half of the split read as
more saturated than the After half on every frame.

The overlay's image caches are now also keyed on the monitor profile, so
a screen change rebuilds them.
The notes sheet is saved as an untagged JPEG, which viewers read as
sRGB, but it was built from the canvas's display image, which is in the
monitor's color space. On a wide-gamut monitor the saved sheet came out
oversaturated. The CPU path always did this; giving the overlay the
monitor profile on the GPU path extended it there.
@marcinz606
marcinz606 merged commit 6fb5f2c into marcinz606:main Sep 27, 2026
1 check passed
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.

2 participants