Ensure that mask layer exists in sculpt mode after multires subdivide
authorNicholas Bishop <nicholasbishop@gmail.com>
Sun, 10 Feb 2013 15:59:29 +0000 (15:59 +0000)
committerNicholas Bishop <nicholasbishop@gmail.com>
Sun, 10 Feb 2013 15:59:29 +0000 (15:59 +0000)
Sculpt mode requires mask customdata layer for multires and ensures it
exists on entering sculpt mode. However, sculpt mode only considers
multires to be active if the level of subdivision is not zero, so it
does not add mask for unsubdivided multires meshes. If the multires
mesh is subdivided while in sculpt mode, no mask was present leading
to weird drawing and crash on use of the mask brush.

Fixed by doing the same thing in multires_subdivide_exec() that is
done in ED_object_modifier_add(), which is to check if sculpt mode is
active and add mask layer if so.

Fixes [#34190] Viewport artifacts when using Multiresolution modifier
projects.blender.org/tracker/index.php?func=detail&aid=34190&group_id=9&atid=498

source/blender/editors/object/object_modifier.c

index 7d3d686..00082b0 100644 (file)
@@ -1196,6 +1196,11 @@ static int multires_subdivide_exec(bContext *C, wmOperator *op)
 
        DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
        WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
+
+       if (ob->mode & OB_MODE_SCULPT) {
+               /* ensure that grid paint mask layer is created */
+               ED_sculpt_mask_layers_ensure(ob, mmd);
+       }
        
        return OPERATOR_FINISHED;
 }