[Bf-blender-cvs] [719cd96de56] temp-lineart-contained: LineArt: Optimize intersection list skipping.

YimingWu noreply at git.blender.org
Thu Mar 18 08:28:04 CET 2021


Commit: 719cd96de560c4ddf3c4cad083b01c76ba5d6a23
Author: YimingWu
Date:   Thu Mar 18 10:43:26 2021 +0800
Branches: temp-lineart-contained
https://developer.blender.org/rB719cd96de560c4ddf3c4cad083b01c76ba5d6a23

LineArt: Optimize intersection list skipping.

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

M	source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c

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

diff --git a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
index 40dc85501e2..6def39ef378 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
+++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
@@ -2504,25 +2504,28 @@ static void lineart_triangle_intersect_in_bounding_area(LineartRenderBuffer *rb,
     testing_triangle = lip->data;
     rtt = (LineartTriangleThread *)testing_triangle;
 
-    if (testing_triangle == rt || rtt->testing_e[0] == (LineartEdge *)rt ||
-        (testing_triangle->flags & LRT_TRIANGLE_NO_INTERSECTION) ||
+    if (testing_triangle == rt || rtt->testing_e[0] == (LineartEdge *)rt) {
+      continue;
+    }
+    rtt->testing_e[0] = (LineartEdge *)rt;
+
+    if ((testing_triangle->flags & LRT_TRIANGLE_NO_INTERSECTION) ||
         ((testing_triangle->flags & LRT_TRIANGLE_INTERSECTION_ONLY) &&
-         (rt->flags & LRT_TRIANGLE_INTERSECTION_ONLY)) ||
-        lineart_triangle_share_edge(rt, testing_triangle)) {
+         (rt->flags & LRT_TRIANGLE_INTERSECTION_ONLY))) {
       continue;
     }
 
-    rtt->testing_e[0] = (LineartEdge *)rt;
     double *RG0 = testing_triangle->v[0]->gloc, *RG1 = testing_triangle->v[1]->gloc,
            *RG2 = testing_triangle->v[2]->gloc;
 
-    /* Bounding box not overlapping, not potential of intersecting. */
+    /* Bounding box not overlapping or triangles share edges, not potential of intersecting. */
     if ((MIN3(G0[2], G1[2], G2[2]) > MAX3(RG0[2], RG1[2], RG2[2])) ||
         (MAX3(G0[2], G1[2], G2[2]) < MIN3(RG0[2], RG1[2], RG2[2])) ||
         (MIN3(G0[0], G1[0], G2[0]) > MAX3(RG0[0], RG1[0], RG2[0])) ||
         (MAX3(G0[0], G1[0], G2[0]) < MIN3(RG0[0], RG1[0], RG2[0])) ||
         (MIN3(G0[1], G1[1], G2[1]) > MAX3(RG0[1], RG1[1], RG2[1])) ||
-        (MAX3(G0[1], G1[1], G2[1]) < MIN3(RG0[1], RG1[1], RG2[1]))) {
+        (MAX3(G0[1], G1[1], G2[1]) < MIN3(RG0[1], RG1[1], RG2[1])) ||
+        lineart_triangle_share_edge(rt, testing_triangle)) {
       continue;
     }



More information about the Bf-blender-cvs mailing list