Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/blenkernel/intern/paint.cc')
-rw-r--r--source/blender/blenkernel/intern/paint.cc23
1 files changed, 13 insertions, 10 deletions
diff --git a/source/blender/blenkernel/intern/paint.cc b/source/blender/blenkernel/intern/paint.cc
index a51d36a4a4e..73db00e7306 100644
--- a/source/blender/blenkernel/intern/paint.cc
+++ b/source/blender/blenkernel/intern/paint.cc
@@ -1744,27 +1744,30 @@ static void sculpt_update_object(Depsgraph *depsgraph,
pbvh_show_face_sets_set(ss->pbvh, ss->show_face_sets);
if (ss->deform_modifiers_active) {
- /* Painting doesn't need crazyspace, use already evaluated mesh coordinates. */
+ /* Painting doesn't need crazyspace, use already evaluated mesh coordinates if possible. */
+ bool used_me_eval = false;
+
if (ob->mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT)) {
Mesh *me_eval_deform = ob_eval->runtime.mesh_deform_eval;
/* If the fully evaluated mesh has the same topology as the deform-only version, use it.
- * This matters because 'deform eval' is very restrictive and excludes even modifiers that
- * simply recompute vertex weights. */
+ * This matters because crazyspace evaluation is very restrictive and excludes even modifiers
+ * that simply recompute vertex weights (which can even include Geometry Nodes). */
if (me_eval_deform->polys().data() == me_eval->polys().data() &&
me_eval_deform->loops().data() == me_eval->loops().data() &&
me_eval_deform->totvert == me_eval->totvert) {
- me_eval_deform = me_eval;
- }
+ BKE_sculptsession_free_deformMats(ss);
- BKE_sculptsession_free_deformMats(ss);
+ BLI_assert(me_eval_deform->totvert == me->totvert);
- BLI_assert(me_eval_deform->totvert == me->totvert);
+ ss->deform_cos = BKE_mesh_vert_coords_alloc(me_eval, NULL);
+ BKE_pbvh_vert_coords_apply(ss->pbvh, ss->deform_cos, me->totvert);
- ss->deform_cos = BKE_mesh_vert_coords_alloc(me_eval_deform, NULL);
- BKE_pbvh_vert_coords_apply(ss->pbvh, ss->deform_cos, me->totvert);
+ used_me_eval = true;
+ }
}
- else if (!ss->orig_cos) {
+
+ if (!ss->orig_cos && !used_me_eval) {
int a;
BKE_sculptsession_free_deformMats(ss);