[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