Revision: 36936
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=36936
Author:   psy-fi
Date:     2011-05-26 22:32:15 +0000 (Thu, 26 May 2011)
Log Message:
-----------
GSOC 2011 - onion branch

--Color correction fix series no.2--

More de-gamma corrections on all brush inputs in preparation for correct 
behavior fix based on other developer's input.

This commit fixes brush GUI colors only. Images stored as sRGB are not
de linearized before sampling. This will be fixed in later 
according to decision on image texture storage type and sampling.

TODO: upload final images as sRGB for viewing. This will fix behavior 
completely.

Modified Paths:
--------------
    branches/soc-2011-onion/source/blender/blenkernel/intern/brush.c
    branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_image.c

Modified: branches/soc-2011-onion/source/blender/blenkernel/intern/brush.c
===================================================================
--- branches/soc-2011-onion/source/blender/blenkernel/intern/brush.c    
2011-05-26 22:20:29 UTC (rev 36935)
+++ branches/soc-2011-onion/source/blender/blenkernel/intern/brush.c    
2011-05-26 22:32:15 UTC (rev 36936)
@@ -571,9 +571,9 @@
                }
        }
        else {
-               crgb[0]= FTOCHAR(brush->rgb[0]);
-               crgb[1]= FTOCHAR(brush->rgb[1]);
-               crgb[2]= FTOCHAR(brush->rgb[2]);
+               crgb[0]= FTOCHAR(srgb_to_linearrgb(brush->rgb[0]));
+               crgb[1]= FTOCHAR(srgb_to_linearrgb(brush->rgb[1]));
+               crgb[2]= FTOCHAR(srgb_to_linearrgb(brush->rgb[2]));
 
                for (y=0; y < ibuf->y; y++) {
                        dst = (char*)ibuf->rect + y*rowbytes;
@@ -601,9 +601,9 @@
                                        dist = sqrt(xy[0]*xy[0] + xy[1]*xy[1]);
 
                                        brush_sample_tex(brush, xy, rgba, 0);
-                                       dst[0] = FTOCHAR(rgba[0]*brush->rgb[0]);
-                                       dst[1] = FTOCHAR(rgba[1]*brush->rgb[1]);
-                                       dst[2] = FTOCHAR(rgba[2]*brush->rgb[2]);
+                                       dst[0] = 
FTOCHAR(rgba[0]*srgb_to_linearrgb(brush->rgb[0]));
+                                       dst[1] = 
FTOCHAR(rgba[1]*srgb_to_linearrgb(brush->rgb[1]));
+                                       dst[2] = 
FTOCHAR(rgba[2]*srgb_to_linearrgb(brush->rgb[2]));
                                        dst[3] = 
FTOCHAR(rgba[3]*alpha*brush_curve_strength_clamp(brush, dist, radius));
                                } else {
                                        dist = sqrt(xy[0]*xy[0] + xy[1]*xy[1]);

Modified: 
branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_image.c
===================================================================
--- branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_image.c   
2011-05-26 22:20:29 UTC (rev 36935)
+++ branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_image.c   
2011-05-26 22:32:15 UTC (rev 36936)
@@ -3673,13 +3673,16 @@
        unsigned char rgba_ub[4];
        
        if (ps->is_texbrush) {
-               rgba_ub[0] = FTOCHAR(rgba[0] * ps->brush->rgb[0]);
-               rgba_ub[1] = FTOCHAR(rgba[1] * ps->brush->rgb[1]);
-               rgba_ub[2] = FTOCHAR(rgba[2] * ps->brush->rgb[2]);
+               /*rgba already holds a texture result here from higher level 
function*/
+               rgba_ub[0] = FTOCHAR(rgba[0] * 
srgb_to_linearrgb(ps->brush->rgb[0]));
+               rgba_ub[1] = FTOCHAR(rgba[1] * 
srgb_to_linearrgb(ps->brush->rgb[1]));
+               rgba_ub[2] = FTOCHAR(rgba[2] * 
srgb_to_linearrgb(ps->brush->rgb[2]));
                rgba_ub[3] = FTOCHAR(rgba[3]);
        }
        else {
-               IMAPAINT_FLOAT_RGB_TO_CHAR(rgba_ub, ps->brush->rgb);
+               VECCOPY(rgba, ps->brush->rgb);
+               srgb_to_linearrgb_v3_v3(rgba, rgba);
+               IMAPAINT_FLOAT_RGB_TO_CHAR(rgba_ub, rgba);
                rgba_ub[3] = 255;
        }
        
@@ -3694,12 +3697,14 @@
 
 static void do_projectpaint_draw_f(ProjPaintState *ps, ProjPixel *projPixel, 
float *rgba, float alpha, float mask) {
        if (ps->is_texbrush) {
-               rgba[0] *= ps->brush->rgb[0];
-               rgba[1] *= ps->brush->rgb[1];
-               rgba[2] *= ps->brush->rgb[2];
+       /*rgba already holds a texture result here from higher level function*/
+               rgba[0] *= srgb_to_linearrgb(ps->brush->rgb[0]);
+               rgba[1] *= srgb_to_linearrgb(ps->brush->rgb[1]);
+               rgba[2] *= srgb_to_linearrgb(ps->brush->rgb[2]);
        }
        else {
                VECCOPY(rgba, ps->brush->rgb);
+               srgb_to_linearrgb_v3_v3(rgba, rgba);
        }
        
        if (ps->is_airbrush==0 && mask < 1.0f) {

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to