Fix T39517,

Issue here is that "show diffuse" option does not respect its intended
purpose which is to be used only for masking.

There are a couple of caveats here:

Dyntopo and multires -always- have mask data enabled, and thus as soon
as one goes to dyntopo mode or adds a multires modifier he would get the
default grey color instead.

Matcaps would break when nodes asked for a diffuse material color (this
was broken before too). Solved by adding global material state for when
matcaps are enabled. Also matcaps don't always played well with VBOs
off.

Added a few more missing updates for mask operators to notify
show_diffuse property as changed. This was also needed on rebuilding
dyntopo pbvh.

Also make zero mask color duller again after artist feedback.
This commit is contained in:
2014-04-02 17:33:47 +03:00
parent a58814acf5
commit 03bd418d16
8 changed files with 71 additions and 18 deletions

View File

@@ -270,6 +270,8 @@ static PBVH *cdDM_getPBVH(Object *ob, DerivedMesh *dm)
BKE_pbvh_build_bmesh(cddm->pbvh, ob->sculpt->bm,
ob->sculpt->bm_smooth_shading,
ob->sculpt->bm_log);
pbvh_show_diffuse_color_set(cddm->pbvh, ob->sculpt->show_diffuse_color);
}

View File

@@ -1925,5 +1925,20 @@ void pbvh_vertex_iter_init(PBVH *bvh, PBVHNode *node,
void pbvh_show_diffuse_color_set(PBVH *bvh, bool show_diffuse_color)
{
bvh->show_diffuse_color = show_diffuse_color;
bool has_mask = false;
switch (bvh->type) {
case PBVH_GRIDS:
has_mask = (bvh->gridkey.has_mask != 0);
break;
case PBVH_FACES:
has_mask = (bvh->vdata && CustomData_get_layer(bvh->vdata,
CD_PAINT_MASK));
break;
case PBVH_BMESH:
has_mask = (bvh->bm && (CustomData_get_offset(&bvh->bm->vdata, CD_PAINT_MASK) != -1));
break;
}
bvh->show_diffuse_color = !has_mask || show_diffuse_color;
}