[Bf-blender-cvs] [a14c67b] master: Polyfill2d: improve sweep clipping logic

Campbell Barton noreply at git.blender.org
Wed Jan 13 04:56:21 CET 2016


Commit: a14c67b0adb9cf922f267b976c5d1194305a69ca
Author: Campbell Barton
Date:   Wed Jan 13 13:49:34 2016 +1100
Branches: master
https://developer.blender.org/rBa14c67b0adb9cf922f267b976c5d1194305a69ca

Polyfill2d: improve sweep clipping logic

Now only reverse the fill direction when reaching a non-concave corner.
Gives ~4x speedup here in tests with complex ngon.

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

M	source/blender/blenlib/intern/polyfill2d.c

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

diff --git a/source/blender/blenlib/intern/polyfill2d.c b/source/blender/blenlib/intern/polyfill2d.c
index 397082b..800f4cb 100644
--- a/source/blender/blenlib/intern/polyfill2d.c
+++ b/source/blender/blenlib/intern/polyfill2d.c
@@ -516,18 +516,6 @@ static void pf_triangulate(PolyFill *pf)
 #endif
 		        );
 
-#ifdef USE_CLIP_SWEEP
-#ifdef USE_CLIP_EVEN
-		if (pi_ear != pi_ear_init) {
-			reverse = !reverse;
-		}
-#else
-		if (pi_ear != pf->indices) {
-			reverse = !reverse;
-		}
-#endif
-#endif
-
 #ifdef USE_CONVEX_SKIP
 		if (pi_ear->sign != CONVEX) {
 			pf->coords_tot_concave -= 1;
@@ -576,6 +564,20 @@ static void pf_triangulate(PolyFill *pf)
 #endif
 #endif
 
+#ifdef USE_CLIP_EVEN
+#ifdef USE_CLIP_SWEEP
+		if (pi_ear_init->sign != CONVEX) {
+			/* take the extra step since this ear isn't a good candidate */
+			pi_ear_init = reverse ? pi_ear_init->prev : pi_ear_init->next;
+			reverse = !reverse;
+		}
+#endif
+#else
+		if ((reverse ? pi_prev->prev : pi_next->next)->sign != CONVEX) {
+			reverse = !reverse;
+		}
+#endif
+
 	}
 
 	if (pf->coords_tot == 3) {




More information about the Bf-blender-cvs mailing list