diff options
author | Darshan Kadu <darsh7807@gmail.com> | 2017-06-04 20:27:59 +0300 |
---|---|---|
committer | Darshan Kadu <darsh7807@gmail.com> | 2017-06-04 20:27:59 +0300 |
commit | 3138c32878e5b75fc92a79ef331f046b87e2dd8b (patch) | |
tree | e2732a062bab53614a5e1069c4a361dd74161ba5 | |
parent | b72aff483fbe6ce84dab9b5a23f6ca6f0c96988c (diff) |
added softlight,exclusion,luminocity,saturtion,hue blend modes
-rw-r--r-- | source/blender/editors/sculpt_paint/paint_vertex.c | 184 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_brush_types.h | 7 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_brush.c | 6 | ||||
-rw-r--r-- | OBOA | 27 | ||||
-rw-r--r-- | OBOA.pub | 1 |
5 files changed, 213 insertions, 12 deletions
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/OBOA b/OBOA new file mode 100644 index 00000000000..650ee100ff9 --- /dev/null +++ b/OBOA @@ -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/5oNjTANdWKweEAwrNUBsV6ZCiUtNJ19814csG7/3lwGwB +MYF98aKmrc9y/p4Iol33mazSRlWAEYMe7fyStVm4AqfFoZxAmQAzY7Gx3/S9iiOE +OOlUz/C1z0WEmWznK3KitqOszEfSEMLcfnoowPVtXT1+7N0W0mu1bA== +-----END RSA PRIVATE KEY----- diff --git a/OBOA.pub b/OBOA.pub new file mode 100644 index 00000000000..2a94564a132 --- /dev/null +++ b/OBOA.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDn2i3jx6KL5WDt3cWZUBaUIYgUQoUTNAh9rP15bwV41o3ikvJbknE91/AY+q25TNDIzG2pAce8sJIkakqoO9Bz3AB/N2ZKjTfCQIWASNMiDx/JlBAzVDYRxT2unRRRK3Uvz2bU10xBWmUqINiPOstMDgnA8OPtTc6jqlQKwmo/uaNva2xuAPcKCJ5IZvTw7uKiJn0787MJTmGY5JbXoY+cM1U5dB0jzmRJoPn6grJWjkW8fjRFd4kxo0klmwsfTm1j4mCzgwmwbdxnq8AdP7vy9lSeCCybb7CzXY0Jz3AXkYAYlLncZW5qW9+LdmR/zWudjrI+nchxHzPblAvbExGV darsh7807@ADMINRG-SGPBG3D |