fix(canvas): give the overlay the monitor profile on the GPU path - #1200
Merged
marcinz606 merged 2 commits intoSep 27, 2026
Merged
marcinz606 merged 2 commits into
marcinz606 merged 2 commits into
Conversation
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.