[Bf-blender-cvs] [7f004860b99] temp-lineart-contained: LineArt: Use safe remove_duplicated_edges

YimingWu noreply at git.blender.org
Wed May 18 09:44:19 CEST 2022


Commit: 7f004860b993e739d40c049485c9479d3cd6571c
Author: YimingWu
Date:   Tue May 10 15:06:31 2022 +0800
Branches: temp-lineart-contained
https://developer.blender.org/rB7f004860b993e739d40c049485c9479d3cd6571c

LineArt: Use safe remove_duplicated_edges

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

M	source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
M	source/blender/makesdna/DNA_lineart_types.h

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

diff --git a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
index 7761b1201fe..c7d06b1ae7c 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
+++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
@@ -766,10 +766,9 @@ static bool lineart_edge_match(LineartTriangle *tri, LineartEdge *e, int v1, int
 static void lineart_discard_duplicated_edges(LineartEdge *old_e, int v1id, int v2id)
 {
   LineartEdge *e = old_e;
-  e++;
-  while (e->v1 && e->v2 && e->v1->index == v1id && e->v2->index == v2id) {
-    e->flags |= LRT_EDGE_FLAG_CHAIN_PICKED;
+  while (e->flags & LRT_EDGE_FLAG_NEXT_IS_DUPLICATION) {
     e++;
+    e->flags |= LRT_EDGE_FLAG_CHAIN_PICKED;
   }
 }
 
@@ -2171,7 +2170,7 @@ static void lineart_geometry_object_load(LineartObjectInfo *ob_info, LineartRend
       continue;
     }
 
-    bool edge_added = false;
+    LineartEdge *edge_added = NULL;
 
     /* See eLineartEdgeFlag for details. */
     for (int flag_bit = 0; flag_bit < LRT_EDGE_FLAG_TYPE_MAX_BITS; flag_bit++) {
@@ -2202,7 +2201,11 @@ static void lineart_geometry_object_load(LineartObjectInfo *ob_info, LineartRend
         lineart_add_edge_to_list_thread(ob_info, la_edge);
       }
 
-      edge_added = true;
+      if (edge_added) {
+        edge_added->flags |= LRT_EDGE_FLAG_NEXT_IS_DUPLICATION;
+      }
+
+      edge_added = la_edge;
 
       la_edge++;
       la_seg++;
@@ -2244,14 +2247,14 @@ static void lineart_object_load_worker(TaskPool *__restrict UNUSED(pool),
   //- Print size of pending objects.
   //- Try to feed this with an array instead of via the pool instead of a custom list
   //- Assign the number of objects instead of number of threads
-  printf("thread start: %d\n", olti->thread_id);
+  // printf("thread start: %d\n", olti->thread_id);
   for (LineartObjectInfo *obi = olti->pending; obi; obi = obi->next) {
     lineart_geometry_object_load(obi, olti->rb);
     if (G.debug_value == 4000) {
-      printf("thread id: %d processed: %d\n", olti->thread_id, obi->original_me->totpoly);
+      // printf("thread id: %d processed: %d\n", olti->thread_id, obi->original_me->totpoly);
     }
   }
-  printf("thread end: %d\n", olti->thread_id);
+  // printf("thread end: %d\n", olti->thread_id);
 }
 
 static uchar lineart_intersection_mask_check(Collection *c, Object *ob)
diff --git a/source/blender/makesdna/DNA_lineart_types.h b/source/blender/makesdna/DNA_lineart_types.h
index e3aa6eb1156..3b0f2baa310 100644
--- a/source/blender/makesdna/DNA_lineart_types.h
+++ b/source/blender/makesdna/DNA_lineart_types.h
@@ -59,6 +59,8 @@ typedef enum eLineartEdgeFlag {
 
   /** For object loading code to use only. */
   LRT_EDGE_FLAG_INHIBIT = (1 << 14),
+  /** For discarding duplicated edge types in culling stage. */
+  LRT_EDGE_FLAG_NEXT_IS_DUPLICATION = (1 << 15),
 } eLineartEdgeFlag;
 
 #define LRT_EDGE_FLAG_ALL_TYPE 0x7f



More information about the Bf-blender-cvs mailing list