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:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user