Commit: 075a2175d5e706025473f7416d3bb89b91cc796c
Author: Sergey Sharybin
Date:   Tue Sep 20 12:21:28 2016 +0200
Branches: master
https://developer.blender.org/rB075a2175d5e706025473f7416d3bb89b91cc796c

Fix T49391: Texture paint is not aware of disabled color management

There might be some extra missing points here, but it's all rather
a TODO than a real bug and can be tweaked further once issues are
actually discovered.

===================================================================

M       source/blender/editors/sculpt_paint/paint_image_proj.c

===================================================================

diff --git a/source/blender/editors/sculpt_paint/paint_image_proj.c 
b/source/blender/editors/sculpt_paint/paint_image_proj.c
index 83fde45..f5d1154 100644
--- a/source/blender/editors/sculpt_paint/paint_image_proj.c
+++ b/source/blender/editors/sculpt_paint/paint_image_proj.c
@@ -371,6 +371,8 @@ typedef struct ProjPaintState {
         */
        const MLoopUV **dm_mloopuv;
        const MLoopUV **dm_mloopuv_clone;    /* other UV map, use for cloning 
between layers */
+
+       bool use_colormanagement;
 } ProjPaintState;
 
 typedef union pixelPointer {
@@ -1623,7 +1625,12 @@ static ProjPixel *project_paint_uvpixel_init(
                                                unsigned char rgba_ub[4];
                                                float rgba[4];
                                                
project_face_pixel(lt_other_tri_uv, ibuf_other, w, rgba_ub, NULL);
-                                               srgb_to_linearrgb_uchar4(rgba, 
rgba_ub);
+                                               if (ps->use_colormanagement) {
+                                                       
srgb_to_linearrgb_uchar4(rgba, rgba_ub);
+                                               }
+                                               else {
+                                                       
rgba_uchar_to_float(rgba, rgba_ub);
+                                               }
                                                
straight_to_premul_v4_v4(((ProjPixelClone *)projPixel)->clonepx.f, rgba);
                                        }
                                }
@@ -1632,7 +1639,12 @@ static ProjPixel *project_paint_uvpixel_init(
                                                float rgba[4];
                                                
project_face_pixel(lt_other_tri_uv, ibuf_other, w, NULL, rgba);
                                                premul_to_straight_v4(rgba);
-                                               
linearrgb_to_srgb_uchar3(((ProjPixelClone *)projPixel)->clonepx.ch, rgba);
+                                               if (ps->use_colormanagement) {
+                                                       
linearrgb_to_srgb_uchar3(((ProjPixelClone *)projPixel)->clonepx.ch, rgba);
+                                               }
+                                               else {
+                                                       
rgb_float_to_uchar(((ProjPixelClone *)projPixel)->clonepx.ch, rgba);
+                                               }
                                                ((ProjPixelClone 
*)projPixel)->clonepx.ch[3] =  rgba[3] * 255;
                                        }
                                        else { /* char to char */
@@ -4359,7 +4371,12 @@ static void do_projectpaint_draw(
        if (ps->is_texbrush) {
                mul_v3_v3v3(rgb, texrgb, ps->paint_color_linear);
                /* TODO(sergey): Support texture paint color space. */
-               linearrgb_to_srgb_v3_v3(rgb, rgb);
+               if (ps->use_colormanagement) {
+                       linearrgb_to_srgb_v3_v3(rgb, rgb);
+               }
+               else {
+                       copy_v3_v3(rgb, rgb);
+               }
        }
        else {
                copy_v3_v3(rgb, ps->paint_color);
@@ -4957,11 +4974,21 @@ static void paint_proj_stroke_ps(
        /* handle gradient and inverted stroke color here */
        if (ps->tool == PAINT_TOOL_DRAW) {
                paint_brush_color_get(scene, brush, false, ps->mode == 
BRUSH_STROKE_INVERT, distance, pressure,  ps->paint_color, NULL);
-               srgb_to_linearrgb_v3_v3(ps->paint_color_linear, 
ps->paint_color);
+               if (ps->use_colormanagement) {
+                       srgb_to_linearrgb_v3_v3(ps->paint_color_linear, 
ps->paint_color);
+               }
+               else {
+                       copy_v3_v3(ps->paint_color_linear, ps->paint_color);
+               }
        }
        else if (ps->tool == PAINT_TOOL_FILL) {
                copy_v3_v3(ps->paint_color, BKE_brush_color_get(scene, brush));
-               srgb_to_linearrgb_v3_v3(ps->paint_color_linear, 
ps->paint_color);
+               if (ps->use_colormanagement) {
+                       srgb_to_linearrgb_v3_v3(ps->paint_color_linear, 
ps->paint_color);
+               }
+               else {
+                       copy_v3_v3(ps->paint_color_linear, ps->paint_color);
+               }
        }
        else if (ps->tool == PAINT_TOOL_MASK) {
                ps->stencil_value = brush->weight;
@@ -5112,7 +5139,9 @@ static void project_state_init(bContext *C, Object *ob, 
ProjPaintState *ps, int
        ps->normal_angle_inner__cos = cosf(ps->normal_angle_inner);
 
        ps->dither = settings->imapaint.dither;
-       
+
+       ps->use_colormanagement = 
BKE_scene_check_color_management_enabled(CTX_data_scene(C));
+
        return;
 }

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to