[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