[Bf-blender-cvs] [87ace7207db] master: Revert "Sculpt/Paint: Use cached triangulation when building PBVH"

Hans Goudey noreply at git.blender.org
Wed Nov 16 21:31:26 CET 2022


Commit: 87ace7207db9522a97d175799d4f39696beba245
Author: Hans Goudey
Date:   Wed Nov 16 14:29:12 2022 -0600
Branches: master
https://developer.blender.org/rB87ace7207db9522a97d175799d4f39696beba245

Revert "Sculpt/Paint: Use cached triangulation when building PBVH"

This reverts commit 676137f043f09b6d3726271fe1ff8e387dd52325.

This change worked locally with a specific test file and local changes,
but didn't work in general, since we don't reliably retrieve the new
looptris after setting them the first time. This can be improved again
in the future, but probably along with a more general look about ownership
is handled with PBVH.

===================================================================

M	source/blender/blenkernel/intern/paint.cc
M	source/blender/blenkernel/intern/pbvh.c

===================================================================

diff --git a/source/blender/blenkernel/intern/paint.cc b/source/blender/blenkernel/intern/paint.cc
index 46e200c7d2c..a39e53662aa 100644
--- a/source/blender/blenkernel/intern/paint.cc
+++ b/source/blender/blenkernel/intern/paint.cc
@@ -2189,6 +2189,7 @@ static PBVH *build_pbvh_for_dynamic_topology(Object *ob)
 static PBVH *build_pbvh_from_regular_mesh(Object *ob, Mesh *me_eval_deform, bool respect_hide)
 {
   Mesh *me = BKE_object_get_original_mesh(ob);
+  const int looptris_num = poly_to_tri_count(me->totpoly, me->totloop);
   PBVH *pbvh = BKE_pbvh_new(PBVH_FACES);
   BKE_pbvh_respect_hide_set(pbvh, respect_hide);
 
@@ -2196,7 +2197,11 @@ static PBVH *build_pbvh_from_regular_mesh(Object *ob, Mesh *me_eval_deform, bool
   const Span<MPoly> polys = me->polys();
   const Span<MLoop> loops = me->loops();
 
-  const Span<MLoopTri> looptris = me->looptris();
+  MLoopTri *looptri = static_cast<MLoopTri *>(
+      MEM_malloc_arrayN(looptris_num, sizeof(*looptri), __func__));
+
+  BKE_mesh_recalc_looptri(
+      loops.data(), polys.data(), verts.data(), me->totloop, me->totpoly, looptri);
 
   BKE_pbvh_build_mesh(pbvh,
                       me,
@@ -2207,8 +2212,8 @@ static PBVH *build_pbvh_from_regular_mesh(Object *ob, Mesh *me_eval_deform, bool
                       &me->vdata,
                       &me->ldata,
                       &me->pdata,
-                      looptris.data(),
-                      looptris.size());
+                      looptri,
+                      looptris_num);
 
   pbvh_show_mask_set(pbvh, ob->sculpt->show_mask);
   pbvh_show_face_sets_set(pbvh, ob->sculpt->show_face_sets);
diff --git a/source/blender/blenkernel/intern/pbvh.c b/source/blender/blenkernel/intern/pbvh.c
index 40c6ef3f114..24ea2de98f6 100644
--- a/source/blender/blenkernel/intern/pbvh.c
+++ b/source/blender/blenkernel/intern/pbvh.c
@@ -959,6 +959,10 @@ void BKE_pbvh_free(PBVH *pbvh)
     }
   }
 
+  if (pbvh->looptri) {
+    MEM_freeN((void *)pbvh->looptri);
+  }
+
   if (pbvh->nodes) {
     MEM_freeN(pbvh->nodes);
   }



More information about the Bf-blender-cvs mailing list