[Bf-blender-cvs] [164b5ce0949] temp-lineart-contained: LineArt: Fix tile lock assigning, now not locking the entire hierachy.

YimingWu noreply at git.blender.org
Fri Apr 22 10:42:53 CEST 2022


Commit: 164b5ce09497fba895f472945dddc120bf738174
Author: YimingWu
Date:   Fri Apr 22 15:59:44 2022 +0800
Branches: temp-lineart-contained
https://developer.blender.org/rB164b5ce09497fba895f472945dddc120bf738174

LineArt: Fix tile lock assigning, now not locking the entire hierachy.

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

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 5d1c8111b88..d0f5086a822 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
+++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
@@ -4304,7 +4304,7 @@ static void lineart_bounding_area_split(LineartRenderBuffer *rb,
         &rb->render_data_pool, sizeof(LineartTriangle *) * LRT_TILE_SPLITTING_TRIANGLE_LIMIT);
     ba[i].linked_lines = lineart_mem_acquire_thread(
         &rb->render_data_pool, sizeof(LineartEdge *) * LRT_TILE_EDGE_COUNT_INITIAL);
-    ba[i].lock = root->lock;
+    BLI_spin_init(&ba[i].lock);
   }
 
   for (int i = 0; i < root->triangle_count; i++) {
@@ -4449,8 +4449,14 @@ static void lineart_bounding_area_link_triangle(LineartRenderBuffer *rb,
     if (recursive && do_intersection && rb->use_intersections) {
       lineart_triangle_intersect_in_bounding_area(rb, tri, root_ba, th);
     }
+    if (do_lock) {
+      BLI_spin_unlock(&root_ba->lock);
+    }
   }
   else {
+    if (do_lock) {
+      BLI_spin_unlock(&root_ba->lock);
+    }
     LineartBoundingArea *ba = root_ba->child;
     double *B1 = LRUB;
     double b[4];
@@ -4463,25 +4469,21 @@ static void lineart_bounding_area_link_triangle(LineartRenderBuffer *rb,
     }
     if (LRT_BOUND_AREA_CROSSES(B1, &ba[0].l)) {
       lineart_bounding_area_link_triangle(
-          rb, &ba[0], tri, B1, recursive, recursive_level + 1, do_intersection, false, th);
+          rb, &ba[0], tri, B1, recursive, recursive_level + 1, do_intersection, true, th);
     }
     if (LRT_BOUND_AREA_CROSSES(B1, &ba[1].l)) {
       lineart_bounding_area_link_triangle(
-          rb, &ba[1], tri, B1, recursive, recursive_level + 1, do_intersection, false, th);
+          rb, &ba[1], tri, B1, recursive, recursive_level + 1, do_intersection, true, th);
     }
     if (LRT_BOUND_AREA_CROSSES(B1, &ba[2].l)) {
       lineart_bounding_area_link_triangle(
-          rb, &ba[2], tri, B1, recursive, recursive_level + 1, do_intersection, false, th);
+          rb, &ba[2], tri, B1, recursive, recursive_level + 1, do_intersection, true, th);
     }
     if (LRT_BOUND_AREA_CROSSES(B1, &ba[3].l)) {
       lineart_bounding_area_link_triangle(
-          rb, &ba[3], tri, B1, recursive, recursive_level + 1, do_intersection, false, th);
+          rb, &ba[3], tri, B1, recursive, recursive_level + 1, do_intersection, true, th);
     }
   }
-
-  if (do_lock) {
-    BLI_spin_unlock(&root_ba->lock);
-  }
 }
 
 static void lineart_bounding_area_link_edge(LineartRenderBuffer *rb,



More information about the Bf-blender-cvs mailing list