[Bf-blender-cvs] [3138c32878e] soc-2017-vertex_paint: added softlight, exclusion, luminocity, saturtion, hue blend modes

Darshan Kadu noreply at git.blender.org
Sun Jun 4 19:40:51 CEST 2017


Commit: 3138c32878e5b75fc92a79ef331f046b87e2dd8b
Author: Darshan Kadu
Date:   Sun Jun 4 22:57:59 2017 +0530
Branches: soc-2017-vertex_paint
https://developer.blender.org/rB3138c32878e5b75fc92a79ef331f046b87e2dd8b

added softlight,exclusion,luminocity,saturtion,hue blend modes

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

M	source/blender/editors/sculpt_paint/paint_vertex.c
M	source/blender/makesdna/DNA_brush_types.h
M	source/blender/makesrna/intern/rna_brush.c
A	"\357\200\233OB\357\200\233OA"
A	"\357\200\233OB\357\200\233OA.pub"

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

diff --git a/source/blender/editors/sculpt_paint/paint_vertex.c b/source/blender/editors/sculpt_paint/paint_vertex.c
index bc1092bef13..90127633bcc 100644
--- a/source/blender/editors/sculpt_paint/paint_vertex.c
+++ b/source/blender/editors/sculpt_paint/paint_vertex.c
@@ -83,6 +83,8 @@
 #include "sculpt_intern.h"
 #include "paint_intern.h"  /* own include */
 
+#define EPS_SATURATION 0.0005f
+
 /* check if we can do partial updates and have them draw realtime
  * (without rebuilding the 'derivedFinal') */
 static bool vertex_paint_use_fast_update_check(Object *ob)
@@ -873,25 +875,185 @@ BLI_INLINE unsigned int mcol_overlay(unsigned int col1, unsigned int col2, int f
 	return col;
 }
 
+BLI_INLINE unsigned int mcol_softlight(unsigned int col1, unsigned int col2, int fac)
+{
+	unsigned char *cp1, *cp2, *cp;
+	int mfac, temp;
+	unsigned int col = 0;
+
+	if (fac == 0) {
+		return col1;
+	}
+
+	mfac = 255 - fac;
+
+	cp1 = (unsigned char *)&col1;
+	cp2 = (unsigned char *)&col2;
+	cp = (unsigned char *)&col;
+
+	int i = 0;
+
+	for (i = 0; i < 3; i++) {
+
+		if (cp1[i] < 127) {
+			temp = ((2 * ((cp2[i] / 2) + 64)) * cp1[i]) / 255;
+		}
+		else {
+			temp = 255 - (2 * (255 - ((cp2[i] / 2) + 64)) * (255 - cp1[i]) / 255);
+		}
+		cp[i] = (temp * fac + cp1[i] * mfac) / 255;
+	}
+	return col;
+}
+
+BLI_INLINE unsigned int mcol_exclusion(unsigned int col1, unsigned int col2, int fac)
+{
+	unsigned char *cp1, *cp2, *cp;
+	int mfac, temp;
+	unsigned int col = 0;
+
+	if (fac == 0) {
+		return col1;
+	}
+
+	mfac = 255 - fac;
+
+	cp1 = (unsigned char *)&col1;
+	cp2 = (unsigned char *)&col2;
+	cp = (unsigned char *)&col;
+
+	int i = 0;
+
+	for (i = 0; i < 3; i++) {
+		temp = 127 - ((2 * (cp1[i] - 127) * (cp2[i] - 127)) / 255);
+		cp[i] = (temp * fac + cp1[i] * mfac) / 255;
+	}
+	return col;
+}
+
+BLI_INLINE unsigned int mcol_luminocity(unsigned int col1, unsigned int col2, int fac)
+{
+	unsigned char *cp1, *cp2, *cp;
+	int mfac, temp;
+	unsigned int col = 0;
+
+	if (fac == 0) {
+		return col1;
+	}
+
+	mfac = 255 - fac;
+
+	cp1 = (unsigned char *)&col1;
+	cp2 = (unsigned char *)&col2;
+	cp = (unsigned char *)&col;
+
+	float h1, s1, v1;
+	float h2, s2, v2;
+	float r, g, b;
+	rgb_to_hsv(cp1[0] / 255.0f, cp1[1] / 255.0f, cp1[2] / 255.0f, &h1, &s1, &v1);
+	rgb_to_hsv(cp2[0] / 255.0f, cp2[1] / 255.0f, cp2[2] / 255.0f, &h2, &s2, &v2);
+
+	v1 = v2;
+
+	hsv_to_rgb(h1, s1, v1, &r, &g, &b);
+
+	cp[0] = ((int)(r * 255.0f) * fac + mfac * cp1[0]) / 255;
+	cp[1] = ((int)(g * 255.0f) * fac + mfac * cp1[1]) / 255;
+	cp[2] = ((int)(b * 255.0f) * fac + mfac * cp1[2]) / 255;
+	return col;
+}
+
+BLI_INLINE unsigned int mcol_saturation(unsigned int col1, unsigned int col2, int fac)
+{
+	unsigned char *cp1, *cp2, *cp;
+	int mfac, temp;
+	unsigned int col = 0;
+
+	if (fac == 0) {
+		return col1;
+	}
+
+	mfac = 255 - fac;
+
+	cp1 = (unsigned char *)&col1;
+	cp2 = (unsigned char *)&col2;
+	cp = (unsigned char *)&col;
+
+	float h1, s1, v1;
+	float h2, s2, v2;
+	float r, g, b;
+	rgb_to_hsv(cp1[0] / 255.0f, cp1[1] / 255.0f, cp1[2] / 255.0f, &h1, &s1, &v1);
+	rgb_to_hsv(cp2[0] / 255.0f, cp2[1] / 255.0f, cp2[2] / 255.0f, &h2, &s2, &v2);
+
+	if (s1 > EPS_SATURATION) {
+		s1 = s2;
+	}
+
+	hsv_to_rgb(h1, s1, v1, &r, &g, &b);
+
+	cp[0] = ((int)(r * 255.0f) * fac + mfac * cp1[0]) / 255;
+	cp[1] = ((int)(g * 255.0f) * fac + mfac * cp1[1]) / 255;
+	cp[2] = ((int)(b * 255.0f) * fac + mfac * cp1[2]) / 255;
+	return col;
+}
+
+BLI_INLINE unsigned int mcol_hue(unsigned int col1, unsigned int col2, int fac)
+{
+	unsigned char *cp1, *cp2, *cp;
+	int mfac, temp;
+	unsigned int col = 0;
+
+	if (fac == 0) {
+		return col1;
+	}
+
+	mfac = 255 - fac;
+
+	cp1 = (unsigned char *)&col1;
+	cp2 = (unsigned char *)&col2;
+	cp = (unsigned char *)&col;
+
+	float h1, s1, v1;
+	float h2, s2, v2;
+	float r, g, b;
+	rgb_to_hsv(cp1[0] / 255.0f, cp1[1] / 255.0f, cp1[2] / 255.0f, &h1, &s1, &v1);
+	rgb_to_hsv(cp2[0] / 255.0f, cp2[1] / 255.0f, cp2[2] / 255.0f, &h2, &s2, &v2);
+
+	h1 = h2;
+
+	hsv_to_rgb(h1, s1, v1, &r, &g, &b);
+
+	cp[0] = ((int)(r * 255.0f) * fac + mfac * cp1[0]) / 255;
+	cp[1] = ((int)(g * 255.0f) * fac + mfac * cp1[1]) / 255;
+	cp[2] = ((int)(b * 255.0f) * fac + mfac * cp1[2]) / 255;
+	return col;
+}
+
+
 /* wpaint has 'wpaint_blend_tool' */
 static unsigned int vpaint_blend_tool(const int tool, const unsigned int col,
                                       const unsigned int paintcol, const int alpha_i)
 {
 	switch (tool) {
 		case PAINT_BLEND_MIX:
-		case PAINT_BLEND_BLUR:     return mcol_blend(col, paintcol, alpha_i);
-		case PAINT_BLEND_AVERAGE:  return mcol_blend(col, paintcol, alpha_i);
-		case PAINT_BLEND_SMEAR:    return mcol_blend(col, paintcol, alpha_i);
-		case PAINT_BLEND_ADD:      return mcol_add(col, paintcol, alpha_i);
-		case PAINT_BLEND_SUB:      return mcol_sub(col, paintcol, alpha_i);
-		case PAINT_BLEND_MUL:      return mcol_mul(col, paintcol, alpha_i);
-		case PAINT_BLEND_LIGHTEN:  return mcol_lighten(col, paintcol, alpha_i);
-		case PAINT_BLEND_DARKEN:   return mcol_darken(col, paintcol, alpha_i);
+		case PAINT_BLEND_BLUR:       return mcol_blend(col, paintcol, alpha_i);
+		case PAINT_BLEND_AVERAGE:    return mcol_blend(col, paintcol, alpha_i);
+		case PAINT_BLEND_SMEAR:      return mcol_blend(col, paintcol, alpha_i);
+		case PAINT_BLEND_ADD:        return mcol_add(col, paintcol, alpha_i);
+		case PAINT_BLEND_SUB:        return mcol_sub(col, paintcol, alpha_i);
+		case PAINT_BLEND_MUL:        return mcol_mul(col, paintcol, alpha_i);
+		case PAINT_BLEND_LIGHTEN:    return mcol_lighten(col, paintcol, alpha_i);
+		case PAINT_BLEND_DARKEN:     return mcol_darken(col, paintcol, alpha_i);
 		case PAINT_BLEND_COLORDODGE: return mcol_colordodge(col, paintcol, alpha_i);
 		case PAINT_BLEND_DIFFERENCE: return mcol_difference(col, paintcol, alpha_i);
-		case PAINT_BLEND_SCREEN:   return mcol_screen(col, paintcol, alpha_i);
-		case PAINT_BLEND_HARDLIGHT: return mcol_hardlight(col, paintcol, alpha_i);
-		case PAINT_BLEND_OVERLAY: return mcol_overlay(col, paintcol, alpha_i);
+		case PAINT_BLEND_SCREEN:     return mcol_screen(col, paintcol, alpha_i);
+		case PAINT_BLEND_HARDLIGHT:  return mcol_hardlight(col, paintcol, alpha_i);
+		case PAINT_BLEND_OVERLAY:	 return mcol_overlay(col, paintcol, alpha_i);
+		case PAINT_BLEND_SOFTLIGHT:  return mcol_softlight(col, paintcol, alpha_i);
+		case PAINT_BLEND_EXCLUSION:  return mcol_exclusion(col, paintcol, alpha_i);
+		case PAINT_BLEND_LUMINOCITY: return mcol_luminocity(col, paintcol, alpha_i);
+		case PAINT_BLEND_SATURATION: return mcol_saturation(col, paintcol, alpha_i);
+		case PAINT_BLEND_HUE:        return mcol_hue(col, paintcol, alpha_i);
 		default:
 			BLI_assert(0);
 			return 0;
diff --git a/source/blender/makesdna/DNA_brush_types.h b/source/blender/makesdna/DNA_brush_types.h
index 62f95c97f2f..c0be4630cbd 100644
--- a/source/blender/makesdna/DNA_brush_types.h
+++ b/source/blender/makesdna/DNA_brush_types.h
@@ -322,7 +322,12 @@ enum {
 	PAINT_BLEND_DIFFERENCE = 10,
 	PAINT_BLEND_SCREEN = 11,
 	PAINT_BLEND_HARDLIGHT = 12,
-	PAINT_BLEND_OVERLAY = 13
+	PAINT_BLEND_OVERLAY = 13,
+	PAINT_BLEND_SOFTLIGHT = 14,
+	PAINT_BLEND_EXCLUSION = 15,
+	PAINT_BLEND_LUMINOCITY = 16,
+	PAINT_BLEND_SATURATION = 17,
+	PAINT_BLEND_HUE = 18
 };
 
 typedef enum {
diff --git a/source/blender/makesrna/intern/rna_brush.c b/source/blender/makesrna/intern/rna_brush.c
index 998d8f656ae..53879c362d1 100644
--- a/source/blender/makesrna/intern/rna_brush.c
+++ b/source/blender/makesrna/intern/rna_brush.c
@@ -101,6 +101,12 @@ EnumPropertyItem rna_enum_brush_vertex_tool_items[] = {
 	{PAINT_BLEND_SCREEN, "SCREEN", ICON_BRUSH_BLUR, "Screen", "Use screen blending mode while painting"},
 	{PAINT_BLEND_HARDLIGHT, "HARDLIGHT", ICON_BRUSH_BLUR, "Hardlight", "Use hardlight blending mode while painting"},
 	{PAINT_BLEND_OVERLAY, "OVERLAY", ICON_BRUSH_BLUR, "Overlay", "Use overlay blending mode while painting"},
+	{PAINT_BLEND_SOFTLIGHT, "SOFTLIGHT", ICON_BRUSH_BLUR, "Softlight", "Use softlight blending mode while painting"},
+	{PAINT_BLEND_EXCLUSION, "EXCLUSION", ICON_BRUSH_BLUR, "Exclusion", "Use exclusion blending mode while painting"},
+	{PAINT_BLEND_LUMINOCITY, "LUMINOCITY", ICON_BRUSH_BLUR, "Luminocity", "Use luminocity blending mode while painting"},
+	{PAINT_BLEND_SATURATION, "SATURATION", ICON_BRUSH_BLUR, "Saturation", "Use saturation blending mode while painting"},
+	{PAINT_BLEND_HUE, "HUE", ICON_BRUSH_BLUR, "Hue", "Use hue blending mode while painting"},
+
 	{0, NULL, 0, NULL, NULL}
 };
 	
diff --git "a/\357\200\233OB\357\200\233OA" "b/\357\200\233OB\357\200\233OA"
new file mode 100644
index 00000000000..650ee100ff9
--- /dev/null
+++ "b/\357\200\233OB\357\200\233OA"
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEpAIBAAKCAQEA59ot48eii+Vg7d3FmVAWlCGIFEKFEzQIfaz9eW8FeNaN4pLy
+W5JxPdfwGPqtuUzQyMxtqQHHvLCSJGpKqDvQc9wAfzdmSo03wkCFgEjTIg8fyZQQ
+M1Q2EcU9rp0UUSt1L89m1NdMQVplKiDYjzrLTA4JwPDj7U3Oo6pUCsJqP7mjb2ts
+bgD3CgieSGb08O7ioiZ9O/OzCU5hmOSW16GPnDNVOXQdI85kSaD5+oKyVo5FvH40
+RXeJMaNJJZsLH05tY+Jgs4MJsG3cZ6vAHT+78vZUnggsm2+ws12NCc9wF5GAGJS5
+3GVualvfi3Zkf81rnY6yPp3IcR8z25QL2xMRlQIDAQABAoIBAH6DRkEhoSe3HYIO
+XpF+6yMffPKZLaZB4VQ6fgGyPAkpAjkdOBQRv6sgVoo612riaJb5PelX6Fak/snS
+GjTclq1x4e+JGk8Z6dAchvxuQI84M386RPDNRcfCmhra6cg073gMMy9238xVeBhZ
+3fGiAmbYziezCpxltZkHC17noTRtnK1M9iYIfXPe9xifV5wjW3vjNe/ADTt5InZ0
+EkzJm8LSGMoc86FQYZQhXEHOZhzZm9Jur73hRCIAgledjnmbg8Ufif/PRBPPuWnc
+LRQwFkROBZD9nJZMbpc5QwuAFnq4rl2pwugFaUsilcZOeRu3MXJlFYXDhbGNwWMN
+iBaiD2ECgYEA+qHlofpCruinqcVnH3ypy0w2JfqHM92l5WPT37htWBMvfiMKpQAs
+tBn2gPd6Lr2fDJYjRjmBwai7Js6TYJ1MAdhqV1ijsmcKPZTPG3asNc79VE8UZD3g
+MGpqYHbch0VRH1KbPOsS+Nji7ahJnKdgGmv8LdtS8AnlN/fGm+4VjwkCgYEA7NFR
+vLb4/lCqatNQ7Nhct6T6wgbjQjfYv8mq6C5YW2Hxtcxi6fApMeAkHAbxwAsLjWRy
+ELnsCykXSvM0F4aKe0oLPRwCssJZnGvdyfr5s/7137GN1u1BdzIqPluXFfU2jkVr
+OkEd/ck5ip4gy0tmVESEdx++PxYPBKrvUz8/xS0CgYEAqszl5wrbosMeb439hvG3
+7LmVNTCULv5f7gGoBBB1Q85fUUCkImoKDPqciKsecvf6ieNPSq4qBUXttLaWrQLF
+J4TKg5f+hre9vNXKhlbLaSgUb/4sUVvxik0bDX4zL2RHsmbjMBKrLTbw/zDuaXmO
+/rKUetO6o6a6tPeAPAd2XbECgYBKR21nz8xRmGObliRv5X1PbMPqT9bAUlv96/db
+VA4Ku7Hg3/a2gcmqBy/MSrFRFyXMd5D/hhFvfrf7nkTcjCqreRIFXN/LygHpejva
+uonP10yvmTVwEILULDvryzacgIlYHpX/c6VAkPknbWnD2iaCj+ssohw+FWEoiaT/
+a3tJEQKBgQC9KXFRU0/5oNjTANdWKweEAwrNUBsV6ZCiU

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list