[Bf-blender-cvs] [9bb6c301cd1] temp-lineart-contained: LineArt: Fix thread intersection duplication

YimingWu noreply at git.blender.org
Mon Nov 8 10:36:36 CET 2021


Commit: 9bb6c301cd1ea92b0dcf8391b76e5167ba8ab688
Author: YimingWu
Date:   Mon Nov 8 17:36:14 2021 +0800
Branches: temp-lineart-contained
https://developer.blender.org/rB9bb6c301cd1ea92b0dcf8391b76e5167ba8ab688

LineArt: Fix thread intersection duplication

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

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 b2a8881a98b..e08df5cb5a0 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
+++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
@@ -70,6 +70,7 @@ typedef struct LineartIsecSingle {
   LineartTriangle *tri1, *tri2;
 } LineartIsecSingle;
 typedef struct LineartIsecThread {
+  int thread_id;
   /* Thread triangle data. */
   /* Used to roughly spread the load. */
   int count_pending;
@@ -2938,6 +2939,7 @@ static void lineart_init_isec_thread(LineartIsecData *d, LineartRenderBuffer *rb
     it->array = MEM_mallocN(sizeof(LineartIsecSingle) * 100, "LineartIsecSingle arr");
     it->max = 100;
     it->current = 0;
+    it->thread_id = i;
   }
 
 #define OBJ_PER_ISEC_THREAD 8 /* Largely arbitrary, no need to be big. */
@@ -3001,10 +3003,10 @@ static void lineart_triangle_intersect_in_bounding_area(LineartRenderBuffer *rb,
     testing_triangle = ba->linked_triangles[i];
     tt = (LineartTriangleThread *)testing_triangle;
 
-    if (testing_triangle == tri || tt->testing_e[0] == (LineartEdge *)tri) {
+    if (testing_triangle == tri || tt->testing_e[th->thread_id] == (LineartEdge *)tri) {
       continue;
     }
-    tt->testing_e[0] = (LineartEdge *)tri;
+    tt->testing_e[th->thread_id] = (LineartEdge *)tri;
 
     if ((testing_triangle->flags & LRT_TRIANGLE_NO_INTERSECTION) ||
         ((testing_triangle->flags & LRT_TRIANGLE_INTERSECTION_ONLY) &&



More information about the Bf-blender-cvs mailing list