Fix vertex paint: color transform operators not respecting vertex paint

mask selection

for 'Invert', 'Levels', 'Hue saturation Value' and 'Bright/Contrast',
face mask was respected, but vertex mask wasnt...

Same code as done in 'Set Vertex Colors'.

reported in T69835

Reviewers: brecht

Maniphest Tasks: T69835

Differential Revision: https://developer.blender.org/D5783
This commit is contained in:
Philipp Oeser 2019-09-13 13:09:11 +02:00
parent cf858e7738
commit 27bbe7cbd9
1 changed files with 17 additions and 9 deletions

View File

@ -54,29 +54,37 @@ bool ED_vpaint_color_transform(struct Object *ob,
{
Mesh *me;
const MPoly *mp;
int i, j;
if (((me = BKE_mesh_from_object(ob)) == NULL) || (ED_mesh_color_ensure(me, NULL) == false)) {
return false;
}
const bool use_face_sel = (me->editflag & ME_EDIT_PAINT_FACE_SEL) != 0;
mp = me->mpoly;
const bool use_vert_sel = (me->editflag & ME_EDIT_PAINT_VERT_SEL) != 0;
for (int i = 0; i < me->totpoly; i++, mp++) {
MLoopCol *lcol = &me->mloopcol[mp->loopstart];
mp = me->mpoly;
for (i = 0; i < me->totpoly; i++, mp++) {
MLoopCol *lcol = me->mloopcol + mp->loopstart;
if (use_face_sel && !(mp->flag & ME_FACE_SEL)) {
continue;
}
for (int j = 0; j < mp->totloop; j++, lcol++) {
float col_mix[3];
rgb_uchar_to_float(col_mix, &lcol->r);
j = 0;
do {
uint vidx = me->mloop[mp->loopstart + j].v;
if (!(use_vert_sel && !(me->mvert[vidx].flag & SELECT))) {
float col_mix[3];
rgb_uchar_to_float(col_mix, &lcol->r);
vpaint_tx_fn(col_mix, user_data, col_mix);
vpaint_tx_fn(col_mix, user_data, col_mix);
rgb_float_to_uchar(&lcol->r, col_mix);
}
rgb_float_to_uchar(&lcol->r, col_mix);
}
lcol++;
j++;
} while (j < mp->totloop);
}
/* remove stale me->mcol, will be added later */