42 #define EPS_SATURATION 0.0005f
63 for (i = 0; i < me->
totpoly; i++, mp++) {
77 vpaint_tx_fn(col_mix,
user_data, col_mix);
83 }
while (j < mp->totloop);
100 uchar *cp_src, *cp_dst, *cp_mix;
114 cp_src = (
uchar *)&col_src;
115 cp_dst = (
uchar *)&col_dst;
116 cp_mix = (
uchar *)&col_mix;
119 int r1 = cp_src[0] * cp_src[0];
120 int g1 = cp_src[1] * cp_src[1];
121 int b1 = cp_src[2] * cp_src[2];
122 int a1 = cp_src[3] * cp_src[3];
124 int r2 = cp_dst[0] * cp_dst[0];
125 int g2 = cp_dst[1] * cp_dst[1];
126 int b2 = cp_dst[2] * cp_dst[2];
127 int a2 = cp_dst[3] * cp_dst[3];
139 uchar *cp_src, *cp_dst, *cp_mix;
147 cp_src = (
uchar *)&col_src;
148 cp_dst = (
uchar *)&col_dst;
149 cp_mix = (
uchar *)&col_mix;
152 cp_mix[0] = (temp > 254) ? 255 : temp;
154 cp_mix[1] = (temp > 254) ? 255 : temp;
156 cp_mix[2] = (temp > 254) ? 255 : temp;
158 cp_mix[3] = (temp > 254) ? 255 : temp;
165 uchar *cp_src, *cp_dst, *cp_mix;
173 cp_src = (
uchar *)&col_src;
174 cp_dst = (
uchar *)&col_dst;
175 cp_mix = (
uchar *)&col_mix;
178 cp_mix[0] = (temp < 0) ? 0 : temp;
180 cp_mix[1] = (temp < 0) ? 0 : temp;
182 cp_mix[2] = (temp < 0) ? 0 : temp;
184 cp_mix[3] = (temp < 0) ? 0 : temp;
191 uchar *cp_src, *cp_dst, *cp_mix;
201 cp_src = (
uchar *)&col_src;
202 cp_dst = (
uchar *)&col_dst;
203 cp_mix = (
uchar *)&col_mix;
206 cp_mix[0] =
divide_round_i(mfac * cp_src[0] * 255 + fac * cp_dst[0] * cp_src[0], 255 * 255);
207 cp_mix[1] =
divide_round_i(mfac * cp_src[1] * 255 + fac * cp_dst[1] * cp_src[1], 255 * 255);
208 cp_mix[2] =
divide_round_i(mfac * cp_src[2] * 255 + fac * cp_dst[2] * cp_src[2], 255 * 255);
209 cp_mix[3] =
divide_round_i(mfac * cp_src[3] * 255 + fac * cp_dst[3] * cp_src[3], 255 * 255);
216 uchar *cp_src, *cp_dst, *cp_mix;
229 cp_src = (
uchar *)&col_src;
230 cp_dst = (
uchar *)&col_dst;
231 cp_mix = (
uchar *)&col_mix;
240 cp_mix[0] =
divide_round_i(mfac * cp_src[0] + fac * cp_dst[0], 255);
241 cp_mix[1] =
divide_round_i(mfac * cp_src[1] + fac * cp_dst[1], 255);
242 cp_mix[2] =
divide_round_i(mfac * cp_src[2] + fac * cp_dst[2], 255);
243 cp_mix[3] =
divide_round_i(mfac * cp_src[3] + fac * cp_dst[3], 255);
250 uchar *cp_src, *cp_dst, *cp_mix;
263 cp_src = (
uchar *)&col_src;
264 cp_dst = (
uchar *)&col_dst;
265 cp_mix = (
uchar *)&col_mix;
274 cp_mix[0] =
divide_round_i((mfac * cp_src[0] + fac * cp_dst[0]), 255);
275 cp_mix[1] =
divide_round_i((mfac * cp_src[1] + fac * cp_dst[1]), 255);
276 cp_mix[2] =
divide_round_i((mfac * cp_src[2] + fac * cp_dst[2]), 255);
277 cp_mix[3] =
divide_round_i((mfac * cp_src[3] + fac * cp_dst[3]), 255);
283 uchar *cp_src, *cp_dst, *cp_mix;
293 cp_src = (
uchar *)&col_src;
294 cp_dst = (
uchar *)&col_dst;
295 cp_mix = (
uchar *)&col_mix;
297 temp = (cp_dst[0] == 255) ? 255 :
min_ii((cp_src[0] * 225) / (255 - cp_dst[0]), 255);
298 cp_mix[0] = (mfac * cp_src[0] + temp * fac) / 255;
299 temp = (cp_dst[1] == 255) ? 255 :
min_ii((cp_src[1] * 225) / (255 - cp_dst[1]), 255);
300 cp_mix[1] = (mfac * cp_src[1] + temp * fac) / 255;
301 temp = (cp_dst[2] == 255) ? 255 :
min_ii((cp_src[2] * 225) / (255 - cp_dst[2]), 255);
302 cp_mix[2] = (mfac * cp_src[2] + temp * fac) / 255;
303 temp = (cp_dst[3] == 255) ? 255 :
min_ii((cp_src[3] * 225) / (255 - cp_dst[3]), 255);
304 cp_mix[3] = (mfac * cp_src[3] + temp * fac) / 255;
310 uchar *cp_src, *cp_dst, *cp_mix;
320 cp_src = (
uchar *)&col_src;
321 cp_dst = (
uchar *)&col_dst;
322 cp_mix = (
uchar *)&col_mix;
324 temp =
abs(cp_src[0] - cp_dst[0]);
325 cp_mix[0] = (mfac * cp_src[0] + temp * fac) / 255;
326 temp =
abs(cp_src[1] - cp_dst[1]);
327 cp_mix[1] = (mfac * cp_src[1] + temp * fac) / 255;
328 temp =
abs(cp_src[2] - cp_dst[2]);
329 cp_mix[2] = (mfac * cp_src[2] + temp * fac) / 255;
330 temp =
abs(cp_src[3] - cp_dst[3]);
331 cp_mix[3] = (mfac * cp_src[3] + temp * fac) / 255;
337 uchar *cp_src, *cp_dst, *cp_mix;
347 cp_src = (
uchar *)&col_src;
348 cp_dst = (
uchar *)&col_dst;
349 cp_mix = (
uchar *)&col_mix;
351 temp =
max_ii(255 - (((255 - cp_src[0]) * (255 - cp_dst[0])) / 255), 0);
352 cp_mix[0] = (mfac * cp_src[0] + temp * fac) / 255;
353 temp =
max_ii(255 - (((255 - cp_src[1]) * (255 - cp_dst[1])) / 255), 0);
354 cp_mix[1] = (mfac * cp_src[1] + temp * fac) / 255;
355 temp =
max_ii(255 - (((255 - cp_src[2]) * (255 - cp_dst[2])) / 255), 0);
356 cp_mix[2] = (mfac * cp_src[2] + temp * fac) / 255;
357 temp =
max_ii(255 - (((255 - cp_src[3]) * (255 - cp_dst[3])) / 255), 0);
358 cp_mix[3] = (mfac * cp_src[3] + temp * fac) / 255;
364 uchar *cp_src, *cp_dst, *cp_mix;
374 cp_src = (
uchar *)&col_src;
375 cp_dst = (
uchar *)&col_dst;
376 cp_mix = (
uchar *)&col_mix;
380 for (i = 0; i < 4; i++) {
381 if (cp_dst[i] > 127) {
382 temp = 255 - ((255 - 2 * (cp_dst[i] - 127)) * (255 - cp_src[i]) / 255);
385 temp = (2 * cp_dst[i] * cp_src[i]) >> 8;
387 cp_mix[i] =
min_ii((mfac * cp_src[i] + temp * fac) / 255, 255);
394 uchar *cp_src, *cp_dst, *cp_mix;
404 cp_src = (
uchar *)&col_src;
405 cp_dst = (
uchar *)&col_dst;
406 cp_mix = (
uchar *)&col_mix;
410 for (i = 0; i < 4; i++) {
411 if (cp_src[i] > 127) {
412 temp = 255 - ((255 - 2 * (cp_src[i] - 127)) * (255 - cp_dst[i]) / 255);
415 temp = (2 * cp_dst[i] * cp_src[i]) >> 8;
417 cp_mix[i] =
min_ii((mfac * cp_src[i] + temp * fac) / 255, 255);
424 uchar *cp_src, *cp_dst, *cp_mix;
434 cp_src = (
uchar *)&col_src;
435 cp_dst = (
uchar *)&col_dst;
436 cp_mix = (
uchar *)&col_mix;
438 for (
int i = 0; i < 4; i++) {
439 if (cp_src[i] < 127) {
440 temp = ((2 * ((cp_dst[i] / 2) + 64)) * cp_src[i]) / 255;
443 temp = 255 - (2 * (255 - ((cp_dst[i] / 2) + 64)) * (255 - cp_src[i]) / 255);
445 cp_mix[i] = (temp * fac + cp_src[i] * mfac) / 255;
452 uchar *cp_src, *cp_dst, *cp_mix;
462 cp_src = (
uchar *)&col_src;
463 cp_dst = (
uchar *)&col_dst;
464 cp_mix = (
uchar *)&col_mix;
468 for (i = 0; i < 4; i++) {
469 temp = 127 - ((2 * (cp_src[i] - 127) * (cp_dst[i] - 127)) / 255);
470 cp_mix[i] = (temp * fac + cp_src[i] * mfac) / 255;
477 uchar *cp_src, *cp_dst, *cp_mix;
487 cp_src = (
uchar *)&col_src;
488 cp_dst = (
uchar *)&col_dst;
489 cp_mix = (
uchar *)&col_mix;
494 rgb_to_hsv(cp_src[0] / 255.0f, cp_src[1] / 255.0f, cp_src[2] / 255.0f, &h1, &s1, &
v1);
495 rgb_to_hsv(cp_dst[0] / 255.0f, cp_dst[1] / 255.0f, cp_dst[2] / 255.0f, &h2, &s2, &
v2);
501 cp_mix[0] = ((int)(
r * 255.0f) * fac + mfac * cp_src[0]) / 255;
502 cp_mix[1] = ((int)(g * 255.0f) * fac + mfac * cp_src[1]) / 255;
503 cp_mix[2] = ((int)(b * 255.0f) * fac + mfac * cp_src[2]) / 255;
504 cp_mix[3] = ((int)(cp_dst[3]) * fac + mfac * cp_src[3]) / 255;
510 uchar *cp_src, *cp_dst, *cp_mix;
520 cp_src = (
uchar *)&col_src;
521 cp_dst = (
uchar *)&col_dst;
522 cp_mix = (
uchar *)&col_mix;
527 rgb_to_hsv(cp_src[0] / 255.0f, cp_src[1] / 255.0f, cp_src[2] / 255.0f, &h1, &s1, &
v1);
528 rgb_to_hsv(cp_dst[0] / 255.0f, cp_dst[1] / 255.0f, cp_dst[2] / 255.0f, &h2, &s2, &
v2);
536 cp_mix[0] = ((int)(
r * 255.0f) * fac + mfac * cp_src[0]) / 255;
537 cp_mix[1] = ((int)(g * 255.0f) * fac + mfac * cp_src[1]) / 255;
538 cp_mix[2] = ((int)(b * 255.0f) * fac + mfac * cp_src[2]) / 255;
544 uchar *cp_src, *cp_dst, *cp_mix;
554 cp_src = (
uchar *)&col_src;
555 cp_dst = (
uchar *)&col_dst;
556 cp_mix = (
uchar *)&col_mix;
561 rgb_to_hsv(cp_src[0] / 255.0f, cp_src[1] / 255.0f, cp_src[2] / 255.0f, &h1, &s1, &
v1);
562 rgb_to_hsv(cp_dst[0] / 255.0f, cp_dst[1] / 255.0f, cp_dst[2] / 255.0f, &h2, &s2, &
v2);
568 cp_mix[0] = ((int)(
r * 255.0f) * fac + mfac * cp_src[0]) / 255;
569 cp_mix[1] = ((int)(g * 255.0f) * fac + mfac * cp_src[1]) / 255;
570 cp_mix[2] = ((int)(b * 255.0f) * fac + mfac * cp_src[2]) / 255;
571 cp_mix[3] = ((int)(cp_dst[3]) * fac + mfac * cp_src[3]) / 255;
577 uchar *cp_src, *cp_mix;
579 uint col_mix = col_src;
585 cp_src = (
uchar *)&col_src;
586 cp_mix = (
uchar *)&col_mix;
588 temp = cp_src[3] + fac;
589 cp_mix[3] = (temp > 254) ? 255 : temp;
596 uchar *cp_src, *cp_mix;
598 uint col_mix = col_src;
604 cp_src = (
uchar *)&col_src;
605 cp_mix = (
uchar *)&col_mix;
607 temp = cp_src[3] - fac;
608 cp_mix[3] = temp < 0 ? 0 : temp;
void BKE_mesh_tessface_clear(struct Mesh *mesh)
struct Mesh * BKE_mesh_from_object(struct Object *ob)
MINLINE unsigned char round_fl_to_uchar(float a)
MINLINE int min_ii(int a, int b)
MINLINE int max_ii(int a, int b)
MINLINE int divide_round_i(int a, int b)
void rgb_to_hsv(float r, float g, float b, float *r_h, float *r_s, float *r_v)
void hsv_to_rgb(float h, float s, float v, float *r_r, float *r_g, float *r_b)
void rgb_uchar_to_float(float r_col[3], const unsigned char col_ub[3])
void rgb_float_to_uchar(unsigned char r_col[3], const float col_f[3])
void DEG_id_tag_update(struct ID *id, int flag)
Object is a sort of wrapper for general info.
bool ED_mesh_color_ensure(struct Mesh *me, const char *name)
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble y2 _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat y2 _GL_VOID_RET _GL_VOID GLint GLint GLint y2 _GL_VOID_RET _GL_VOID GLshort GLshort GLshort y2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLuint *buffer _GL_VOID_RET _GL_VOID GLdouble t _GL_VOID_RET _GL_VOID GLfloat t _GL_VOID_RET _GL_VOID GLint t _GL_VOID_RET _GL_VOID GLshort t _GL_VOID_RET _GL_VOID GLdouble GLdouble r _GL_VOID_RET _GL_VOID GLfloat GLfloat r _GL_VOID_RET _GL_VOID GLint GLint r _GL_VOID_RET _GL_VOID GLshort GLshort r _GL_VOID_RET _GL_VOID GLdouble GLdouble r
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble v1
BLI_INLINE unsigned char IMB_colormanagement_get_luminance_byte(const unsigned char[3])
ATTR_WARN_UNUSED_RESULT const BMVert * v2
void(* VPaintTransform_Callback)(const float col[3], const void *user_data, float r_col[3])
BLI_INLINE uint mcol_alpha_add(uint col_src, int fac)
BLI_INLINE uint mcol_colordodge(uint col_src, uint col_dst, int fac)
BLI_INLINE uint mcol_difference(uint col_src, uint col_dst, int fac)
BLI_INLINE uint mcol_darken(uint col_src, uint col_dst, int fac)
BLI_INLINE uint mcol_softlight(uint col_src, uint col_dst, int fac)
BLI_INLINE uint mcol_hue(uint col_src, uint col_dst, int fac)
BLI_INLINE uint mcol_blend(uint col_src, uint col_dst, int fac)
BLI_INLINE uint mcol_alpha_sub(uint col_src, int fac)
BLI_INLINE uint mcol_screen(uint col_src, uint col_dst, int fac)
BLI_INLINE uint mcol_lighten(uint col_src, uint col_dst, int fac)
BLI_INLINE uint mcol_luminosity(uint col_src, uint col_dst, int fac)
uint ED_vpaint_blend_tool(const int tool, const uint col, const uint paintcol, const int alpha_i)
BLI_INLINE uint mcol_add(uint col_src, uint col_dst, int fac)
BLI_INLINE uint mcol_overlay(uint col_src, uint col_dst, int fac)
BLI_INLINE uint mcol_saturation(uint col_src, uint col_dst, int fac)
BLI_INLINE uint mcol_exclusion(uint col_src, uint col_dst, int fac)
bool ED_vpaint_color_transform(struct Object *ob, VPaintTransform_Callback vpaint_tx_fn, const void *user_data)
BLI_INLINE uint mcol_sub(uint col_src, uint col_dst, int fac)
BLI_INLINE uint mcol_mul(uint col_src, uint col_dst, int fac)
BLI_INLINE uint mcol_hardlight(uint col_src, uint col_dst, int fac)
struct MLoopCol * mloopcol
__forceinline const avxi abs(const avxi &a)