Merge branch 'blender-v2.83-release'
This commit is contained in:
commit
527c81c6f8
|
@ -4165,8 +4165,7 @@ static void do_layer_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode
|
|||
SculptSession *ss = ob->sculpt;
|
||||
Brush *brush = BKE_paint_brush(&sd->paint);
|
||||
|
||||
if (ss->cache->mirror_symmetry_pass == 0 && ss->cache->radial_symmetry_pass == 0 &&
|
||||
ss->cache->first_time) {
|
||||
if (ss->cache->layer_displacement_factor == NULL) {
|
||||
ss->cache->layer_displacement_factor = MEM_callocN(sizeof(float) * SCULPT_vertex_count_get(ss),
|
||||
"layer displacement factor");
|
||||
}
|
||||
|
@ -5299,6 +5298,23 @@ static void do_brush_action(Sculpt *sd, Object *ob, Brush *brush, UnifiedPaintSe
|
|||
nodes = sculpt_pbvh_gather_generic(ob, sd, brush, use_original, radius_scale, &totnode);
|
||||
}
|
||||
|
||||
/* Draw Face Sets in draw mode makes a single undo push, in alt-smooth mode deforms the
|
||||
* vertices and uses regular coords undo. */
|
||||
/* It also assings the paint_face_set here as it needs to be done regardless of the stroke type
|
||||
* 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);
|
||||
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);
|
||||
}
|
||||
else {
|
||||
/* By default create a new Face Sets. */
|
||||
ss->cache->paint_face_set = SCULPT_face_set_next_available_get(ss);
|
||||
}
|
||||
}
|
||||
|
||||
/* Only act if some verts are inside the brush area. */
|
||||
if (totnode) {
|
||||
float location[3];
|
||||
|
@ -5314,13 +5330,6 @@ static void do_brush_action(Sculpt *sd, Object *ob, Brush *brush, UnifiedPaintSe
|
|||
BKE_pbvh_parallel_range_settings(&settings, (sd->flags & SCULPT_USE_OPENMP), totnode);
|
||||
BLI_task_parallel_range(0, totnode, &task_data, do_brush_action_task_cb, &settings);
|
||||
|
||||
/* Draw Face Sets in draw mode makes a single undo push, in alt-smooth mode deforms the
|
||||
* vertices and uses regular coords undo. */
|
||||
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, nodes[0], SCULPT_UNDO_FACE_SETS);
|
||||
}
|
||||
|
||||
if (sculpt_brush_needs_normal(ss, brush)) {
|
||||
update_sculpt_normal(sd, ob, nodes, totnode);
|
||||
}
|
||||
|
@ -6858,6 +6867,7 @@ static void sculpt_brush_stroke_init(bContext *C, wmOperator *op)
|
|||
|
||||
static void sculpt_restore_mesh(Sculpt *sd, Object *ob)
|
||||
{
|
||||
SculptSession *ss = ob->sculpt;
|
||||
Brush *brush = BKE_paint_brush(&sd->paint);
|
||||
|
||||
/* Restore the mesh before continuing with anchored stroke. */
|
||||
|
@ -6867,7 +6877,19 @@ static void sculpt_restore_mesh(Sculpt *sd, Object *ob)
|
|||
brush->sculpt_tool == SCULPT_TOOL_CLOTH) &&
|
||||
BKE_brush_use_size_pressure(brush)) ||
|
||||
(brush->flag & BRUSH_DRAG_DOT)) {
|
||||
|
||||
SculptUndoNode *unode = SCULPT_undo_get_first_node();
|
||||
if (unode && unode->type == SCULPT_UNDO_FACE_SETS) {
|
||||
for (int i = 0; i < ss->totfaces; i++) {
|
||||
ss->face_sets[i] = unode->face_sets[i];
|
||||
}
|
||||
}
|
||||
|
||||
paint_mesh_restore_co(sd, ob);
|
||||
|
||||
if (ss->cache) {
|
||||
MEM_SAFE_FREE(ss->cache->layer_displacement_factor);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -192,18 +192,6 @@ void SCULPT_do_draw_face_sets_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, in
|
|||
SculptSession *ss = ob->sculpt;
|
||||
Brush *brush = BKE_paint_brush(&sd->paint);
|
||||
|
||||
if (ss->cache->first_time && ss->cache->mirror_symmetry_pass == 0 &&
|
||||
ss->cache->radial_symmetry_pass == 0) {
|
||||
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);
|
||||
}
|
||||
else {
|
||||
/* By default create a new Face Sets. */
|
||||
ss->cache->paint_face_set = SCULPT_face_set_next_available_get(ss);
|
||||
}
|
||||
}
|
||||
|
||||
BKE_curvemapping_initialize(brush->curve);
|
||||
|
||||
/* Threaded loop over nodes. */
|
||||
|
|
|
@ -856,6 +856,7 @@ void SCULPT_cache_free(StrokeCache *cache);
|
|||
|
||||
SculptUndoNode *SCULPT_undo_push_node(Object *ob, PBVHNode *node, SculptUndoType type);
|
||||
SculptUndoNode *SCULPT_undo_get_node(PBVHNode *node);
|
||||
SculptUndoNode *SCULPT_undo_get_first_node();
|
||||
void SCULPT_undo_push_begin(const char *name);
|
||||
void SCULPT_undo_push_end(void);
|
||||
void SCULPT_undo_push_end_ex(const bool use_nested_undo);
|
||||
|
|
|
@ -892,6 +892,17 @@ SculptUndoNode *SCULPT_undo_get_node(PBVHNode *node)
|
|||
return BLI_findptr(&usculpt->nodes, node, offsetof(SculptUndoNode, node));
|
||||
}
|
||||
|
||||
SculptUndoNode *SCULPT_undo_get_first_node()
|
||||
{
|
||||
UndoSculpt *usculpt = sculpt_undo_get_nodes();
|
||||
|
||||
if (usculpt == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return usculpt->nodes.first;
|
||||
}
|
||||
|
||||
static void sculpt_undo_alloc_and_store_hidden(PBVH *pbvh, SculptUndoNode *unode)
|
||||
{
|
||||
PBVHNode *node = unode->node;
|
||||
|
|
|
@ -43,6 +43,7 @@ local:
|
|||
*LLVM*;
|
||||
*MathML*;
|
||||
*mkldnn*;
|
||||
nvrtc*;
|
||||
oc_*;
|
||||
ogg*;
|
||||
*oidn*;
|
||||
|
|
|
@ -39,6 +39,7 @@ lame_*
|
|||
*mkldnn*
|
||||
Name
|
||||
NumNamedVarArgParams
|
||||
nvrtc*
|
||||
oc_*
|
||||
ogg*
|
||||
*oidn*
|
||||
|
|
Loading…
Reference in New Issue