[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [36936] branches/soc-2011-onion/source/ blender: GSOC 2011 - onion branch

Ryakiotakis Antonis kalast at gmail.com
Fri May 27 00:32:15 CEST 2011


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) {




More information about the Bf-blender-cvs mailing list