[Bf-blender-cvs] [46c54b12b02] master: Cleanup: Return early in metaball tessellation code

Hans Goudey noreply at git.blender.org
Thu Apr 7 19:34:31 CEST 2022


Commit: 46c54b12b02d5b735df326ca9813bf35e94bdcf3
Author: Hans Goudey
Date:   Thu Apr 7 12:33:47 2022 -0500
Branches: master
https://developer.blender.org/rB46c54b12b02d5b735df326ca9813bf35e94bdcf3

Cleanup: Return early in metaball tessellation code

Also declare variables where initialized and use const.

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

M	source/blender/blenkernel/intern/mball_tessellate.c

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

diff --git a/source/blender/blenkernel/intern/mball_tessellate.c b/source/blender/blenkernel/intern/mball_tessellate.c
index b3e6a854811..54def0189b1 100644
--- a/source/blender/blenkernel/intern/mball_tessellate.c
+++ b/source/blender/blenkernel/intern/mball_tessellate.c
@@ -1373,13 +1373,10 @@ static void init_meta(Depsgraph *depsgraph, PROCESS *process, Scene *scene, Obje
 
 void BKE_mball_polygonize(Depsgraph *depsgraph, Scene *scene, Object *ob, ListBase *dispbase)
 {
-  MetaBall *mb;
-  DispList *dl;
-  unsigned int a;
   PROCESS process = {0};
-  bool is_render = DEG_get_mode(depsgraph) == DAG_EVAL_RENDER;
+  const bool is_render = DEG_get_mode(depsgraph) == DAG_EVAL_RENDER;
 
-  mb = ob->data;
+  MetaBall *mb = ob->data;
 
   process.thresh = mb->thresh;
 
@@ -1419,47 +1416,54 @@ void BKE_mball_polygonize(Depsgraph *depsgraph, Scene *scene, Object *ob, ListBa
 
   /* initialize all mainb (MetaElems) */
   init_meta(depsgraph, &process, scene, ob);
+  if (process.totelem == 0) {
+    freepolygonize(&process);
+    return;
+  }
 
-  if (process.totelem > 0) {
-    build_bvh_spatial(&process, &process.metaball_bvh, 0, process.totelem, &process.allbb);
+  build_bvh_spatial(&process, &process.metaball_bvh, 0, process.totelem, &process.allbb);
 
-    /* Don't polygonize meta-balls with too high resolution (base mball too small)
-     * NOTE: Eps was 0.0001f but this was giving problems for blood animation for
-     * the open movie "Sintel", using 0.00001f. */
-    if (ob->scale[0] > 0.00001f * (process.allbb.max[0] - process.allbb.min[0]) ||
-        ob->scale[1] > 0.00001f * (process.allbb.max[1] - process.allbb.min[1]) ||
-        ob->scale[2] > 0.00001f * (process.allbb.max[2] - process.allbb.min[2])) {
-      polygonize(&process);
+  /* Don't polygonize meta-balls with too high resolution (base mball too small)
+   * NOTE: Eps was 0.0001f but this was giving problems for blood animation for
+   * the open movie "Sintel", using 0.00001f. */
+  if (ob->scale[0] < 0.00001f * (process.allbb.max[0] - process.allbb.min[0]) ||
+      ob->scale[1] < 0.00001f * (process.allbb.max[1] - process.allbb.min[1]) ||
+      ob->scale[2] < 0.00001f * (process.allbb.max[2] - process.allbb.min[2])) {
+    freepolygonize(&process);
+    return;
+  }
 
-      /* add resulting surface to displist */
-      if (process.curindex) {
+  polygonize(&process);
+  if (process.curindex == 0) {
+    freepolygonize(&process);
+    return;
+  }
 
-        /* Avoid over-allocation since this is stored in the displist. */
-        if (process.curindex != process.totindex) {
-          process.indices = MEM_reallocN(process.indices, sizeof(int[4]) * process.curindex);
-        }
-        if (process.curvertex != process.totvertex) {
-          process.co = MEM_reallocN(process.co, process.curvertex * sizeof(float[3]));
-          process.no = MEM_reallocN(process.no, process.curvertex * sizeof(float[3]));
-        }
+  /* add resulting surface to displist */
 
-        dl = MEM_callocN(sizeof(DispList), "mballdisp");
-        BLI_addtail(dispbase, dl);
-        dl->type = DL_INDEX4;
-        dl->nr = (int)process.curvertex;
-        dl->parts = (int)process.curindex;
+  /* Avoid over-allocation since this is stored in the displist. */
+  if (process.curindex != process.totindex) {
+    process.indices = MEM_reallocN(process.indices, sizeof(int[4]) * process.curindex);
+  }
+  if (process.curvertex != process.totvertex) {
+    process.co = MEM_reallocN(process.co, process.curvertex * sizeof(float[3]));
+    process.no = MEM_reallocN(process.no, process.curvertex * sizeof(float[3]));
+  }
 
-        dl->index = (int *)process.indices;
+  DispList *dl = MEM_callocN(sizeof(DispList), "mballdisp");
+  BLI_addtail(dispbase, dl);
+  dl->type = DL_INDEX4;
+  dl->nr = (int)process.curvertex;
+  dl->parts = (int)process.curindex;
 
-        for (a = 0; a < process.curvertex; a++) {
-          normalize_v3(process.no[a]);
-        }
+  dl->index = (int *)process.indices;
 
-        dl->verts = (float *)process.co;
-        dl->nors = (float *)process.no;
-      }
-    }
+  for (uint a = 0; a < process.curvertex; a++) {
+    normalize_v3(process.no[a]);
   }
 
+  dl->verts = (float *)process.co;
+  dl->nors = (float *)process.no;
+
   freepolygonize(&process);
 }



More information about the Bf-blender-cvs mailing list