Fix T77328: Crash on undo Draw Face Sets stroke with dyntopo active

Draw Face Sets does not work in Dyntopo and the sculpt API should be
responsible for that without needing to add checks all over the code,
but it was doing an undo push of type SCULPT_UNDO_FACE_SETS which is not
supported, causing the crash.

Reviewed By: sergey

Maniphest Tasks: T77328

Differential Revision: https://developer.blender.org/D7924
This commit is contained in:
Pablo Dobarro 2020-06-10 01:08:35 +02:00 committed by Jeroen Bakker
parent 2d89951be5
commit 910b421045
Notes: blender-bot 2023-04-19 22:54:54 +02:00
Referenced by issue #77348, Blender LTS: Maintenance Task 2.83
Referenced by issue #77328, Crash with sculpt face set brush plus dyntopo
1 changed files with 8 additions and 1 deletions

View File

@ -5299,7 +5299,14 @@ static void do_brush_action(Sculpt *sd, Object *ob, Brush *brush, UnifiedPaintSe
* and the number of nodes under the brush influence. */
if (brush->sculpt_tool == SCULPT_TOOL_DRAW_FACE_SETS && ss->cache->first_time &&
ss->cache->mirror_symmetry_pass == 0 && !ss->cache->alt_smooth) {
SCULPT_undo_push_node(ob, NULL, SCULPT_UNDO_FACE_SETS);
/* Dyntopo does not support Face Sets data, so it can't store/restore it from undo. */
/* TODO (pablodp606): This check should be done in the undo code and not here, but the rest of
* the sculpt code is not checking for unsupported undo types that may return a null node. */
if (BKE_pbvh_type(ss->pbvh) != PBVH_BMESH) {
SCULPT_undo_push_node(ob, NULL, SCULPT_UNDO_FACE_SETS);
}
if (ss->cache->invert) {
/* When inverting the brush, pick the paint face mask ID from the mesh. */
ss->cache->paint_face_set = SCULPT_active_face_set_get(ss);