Cleanup: Return early in metaball tessellation code
Also declare variables where initialized and use const.
This commit is contained in:
parent
a5beca7ba0
commit
46c54b12b0
|
@ -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) {
|
||||
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);
|
||||
|
||||
/* add resulting surface to displist */
|
||||
if (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 = MEM_callocN(sizeof(DispList), "mballdisp");
|
||||
BLI_addtail(dispbase, dl);
|
||||
dl->type = DL_INDEX4;
|
||||
dl->nr = (int)process.curvertex;
|
||||
dl->parts = (int)process.curindex;
|
||||
|
||||
dl->index = (int *)process.indices;
|
||||
|
||||
for (a = 0; a < process.curvertex; a++) {
|
||||
normalize_v3(process.no[a]);
|
||||
}
|
||||
|
||||
dl->verts = (float *)process.co;
|
||||
dl->nors = (float *)process.no;
|
||||
}
|
||||
}
|
||||
if (process.totelem == 0) {
|
||||
freepolygonize(&process);
|
||||
return;
|
||||
}
|
||||
|
||||
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])) {
|
||||
freepolygonize(&process);
|
||||
return;
|
||||
}
|
||||
|
||||
polygonize(&process);
|
||||
if (process.curindex == 0) {
|
||||
freepolygonize(&process);
|
||||
return;
|
||||
}
|
||||
|
||||
/* add resulting surface to displist */
|
||||
|
||||
/* 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]));
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
dl->index = (int *)process.indices;
|
||||
|
||||
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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue