[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