diff options
author | Jeroen Bakker <jbakker> | 2020-11-12 11:10:26 +0300 |
---|---|---|
committer | Jeroen Bakker <jeroen@blender.org> | 2020-11-12 11:13:06 +0300 |
commit | c08827e659e5f48034b4f9d4612bd309ea63ff03 (patch) | |
tree | 1cd9b0950b7380d98da6d64b5d7146c71470101d /source/blender/editors/sculpt_paint/paint_utils.c | |
parent | f93081a01b7bf484f51fb7d70ac8a8fd90a59d8c (diff) |
Fix T82093: Sampled Colors Mismatch When Painting (Partial)
When painting in the image editor on data images (Non-color, Raw) the
color mismatched between the sampled color and the actual effect that
the painting has on the image. The root cause is that the sampling is
color managed, but the painting still uses a fixed color management
pipeline with a lot of assumptions. Due to recent changes the drawing
of the image editor is color managed, but the painting isn't what made
these changes show up.
This patch is a work-a-round so that the sampled colors and the effect
the paint has on the texture matches. This isn't the correct solution
as that would be to migrate all the painting tools to use proper color
management.
Reviewed By: Pablo Dobarro
Differential Revision: https://developer.blender.org/D9411
Diffstat (limited to 'source/blender/editors/sculpt_paint/paint_utils.c')
-rw-r--r-- | source/blender/editors/sculpt_paint/paint_utils.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/source/blender/editors/sculpt_paint/paint_utils.c b/source/blender/editors/sculpt_paint/paint_utils.c index 9855f8e9d40..7be84a5e191 100644 --- a/source/blender/editors/sculpt_paint/paint_utils.c +++ b/source/blender/editors/sculpt_paint/paint_utils.c @@ -581,8 +581,12 @@ void paint_sample_color( /* Sample from the active image buffer. The sampled color is in * Linear Scene Reference Space. */ float rgba_f[3]; - if (ED_space_image_color_sample(sima, region, (int[2]){x, y}, rgba_f)) { - linearrgb_to_srgb_v3_v3(rgba_f, rgba_f); + bool is_data; + if (ED_space_image_color_sample(sima, region, (int[2]){x, y}, rgba_f, &is_data)) { + if (!is_data) { + linearrgb_to_srgb_v3_v3(rgba_f, rgba_f); + } + if (use_palette) { copy_v3_v3(color->rgb, rgba_f); } |