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:
authorGermano <germano.costa@ig.com.br>2017-11-10 17:58:34 +0300
committerGermano <germano.costa@ig.com.br>2017-11-10 17:58:34 +0300
commitd95eabf0a937e788e1ebd6f9297b3c80db7913e2 (patch)
treed7f6964c07bebfc058bf575cef4fe7e02bfb5095 /source/blender/blenkernel/intern/mball_tessellate.c
parentdb7a78a2be7849f47c81c907ad0710ece66018b7 (diff)
mball_tessellate: Simplify face creation
Faces that have the last two indices equal are considered triangles, and not those that the last index is 0 Improvement of 7% in performance of the `polygonize` function
Diffstat (limited to 'source/blender/blenkernel/intern/mball_tessellate.c')
-rw-r--r--source/blender/blenkernel/intern/mball_tessellate.c45
1 files changed, 11 insertions, 34 deletions
diff --git a/source/blender/blenkernel/intern/mball_tessellate.c b/source/blender/blenkernel/intern/mball_tessellate.c
index 82d82ce71c4..a1ae3a7f572 100644
--- a/source/blender/blenkernel/intern/mball_tessellate.c
+++ b/source/blender/blenkernel/intern/mball_tessellate.c
@@ -412,16 +412,10 @@ static void make_face(PROCESS *process, int i1, int i2, int i3, int i4)
cur[0] = i1;
cur[1] = i2;
cur[2] = i3;
-
- if (i4 == 0) {
- cur[3] = i3;
- }
- else {
- cur[3] = i4;
- }
+ cur[3] = i4;
#ifdef USE_ACCUM_NORMAL
- if (i4 == 0) {
+ if (i4 == i3) {
normal_tri_v3(n, process->co[i1], process->co[i2], process->co[i3]);
accumulate_vertex_normals_v3(
process->no[i1], process->no[i2], process->no[i3], NULL, n,
@@ -526,40 +520,23 @@ static void docube(PROCESS *process, CUBE *cube)
if (count > 2) {
switch (count) {
case 3:
- make_face(process, indexar[2], indexar[1], indexar[0], 0);
+ make_face(process, indexar[2], indexar[1], indexar[0], indexar[0]); /* triangle */
break;
case 4:
- if (indexar[0] == 0) make_face(process, indexar[0], indexar[3], indexar[2], indexar[1]);
- else make_face(process, indexar[3], indexar[2], indexar[1], indexar[0]);
+ make_face(process, indexar[3], indexar[2], indexar[1], indexar[0]);
break;
case 5:
- if (indexar[0] == 0) make_face(process, indexar[0], indexar[3], indexar[2], indexar[1]);
- else make_face(process, indexar[3], indexar[2], indexar[1], indexar[0]);
-
- make_face(process, indexar[4], indexar[3], indexar[0], 0);
+ make_face(process, indexar[3], indexar[2], indexar[1], indexar[0]);
+ make_face(process, indexar[4], indexar[3], indexar[0], indexar[0]); /* triangle */
break;
case 6:
- if (indexar[0] == 0) {
- make_face(process, indexar[0], indexar[3], indexar[2], indexar[1]);
- make_face(process, indexar[0], indexar[5], indexar[4], indexar[3]);
- }
- else {
- make_face(process, indexar[3], indexar[2], indexar[1], indexar[0]);
- make_face(process, indexar[5], indexar[4], indexar[3], indexar[0]);
- }
+ make_face(process, indexar[3], indexar[2], indexar[1], indexar[0]);
+ make_face(process, indexar[5], indexar[4], indexar[3], indexar[0]);
break;
case 7:
- if (indexar[0] == 0) {
- make_face(process, indexar[0], indexar[3], indexar[2], indexar[1]);
- make_face(process, indexar[0], indexar[5], indexar[4], indexar[3]);
- }
- else {
- make_face(process, indexar[3], indexar[2], indexar[1], indexar[0]);
- make_face(process, indexar[5], indexar[4], indexar[3], indexar[0]);
- }
-
- make_face(process, indexar[6], indexar[5], indexar[0], 0);
-
+ make_face(process, indexar[3], indexar[2], indexar[1], indexar[0]);
+ make_face(process, indexar[5], indexar[4], indexar[3], indexar[0]);
+ make_face(process, indexar[6], indexar[5], indexar[0], indexar[0]); /* triangle */
break;
}
}