Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDarshan Kadu <darsh7807@gmail.com>2017-06-04 20:27:59 +0300
committerDarshan Kadu <darsh7807@gmail.com>2017-06-04 20:27:59 +0300
commit3138c32878e5b75fc92a79ef331f046b87e2dd8b (patch)
treee2732a062bab53614a5e1069c4a361dd74161ba5
parentb72aff483fbe6ce84dab9b5a23f6ca6f0c96988c (diff)
added softlight,exclusion,luminocity,saturtion,hue blend modes
-rw-r--r--source/blender/editors/sculpt_paint/paint_vertex.c184
-rw-r--r--source/blender/makesdna/DNA_brush_types.h7
-rw-r--r--source/blender/makesrna/intern/rna_brush.c6
-rw-r--r--OBOA27
-rw-r--r--OBOA.pub1
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/OBOA b/OBOA
new file mode 100644
index 00000000000..650ee100ff9
--- /dev/null
+++ b/OBOA
@@ -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/OBOA.pub b/OBOA.pub
new file mode 100644
index 00000000000..2a94564a132
--- /dev/null
+++ b/OBOA.pub
@@ -0,0 +1 @@
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDn2i3jx6KL5WDt3cWZUBaUIYgUQoUTNAh9rP15bwV41o3ikvJbknE91/AY+q25TNDIzG2pAce8sJIkakqoO9Bz3AB/N2ZKjTfCQIWASNMiDx/JlBAzVDYRxT2unRRRK3Uvz2bU10xBWmUqINiPOstMDgnA8OPtTc6jqlQKwmo/uaNva2xuAPcKCJ5IZvTw7uKiJn0787MJTmGY5JbXoY+cM1U5dB0jzmRJoPn6grJWjkW8fjRFd4kxo0klmwsfTm1j4mCzgwmwbdxnq8AdP7vy9lSeCCybb7CzXY0Jz3AXkYAYlLncZW5qW9+LdmR/zWudjrI+nchxHzPblAvbExGV darsh7807@ADMINRG-SGPBG3D