[Bf-blender-cvs] [4cc585e462a] temp-lineart-contained: LineArt: Working fix for new object loading

YimingWu noreply at git.blender.org
Tue Apr 5 16:59:53 CEST 2022


Commit: 4cc585e462a24594feaa44b235b4f3a6a0865a5e
Author: YimingWu
Date:   Tue Apr 5 22:59:13 2022 +0800
Branches: temp-lineart-contained
https://developer.blender.org/rB4cc585e462a24594feaa44b235b4f3a6a0865a5e

LineArt: Working fix for new object loading

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

M	release/scripts/addons
M	source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c

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

diff --git a/release/scripts/addons b/release/scripts/addons
index 787ea78f7fa..22c1eb5c3d5 160000
--- a/release/scripts/addons
+++ b/release/scripts/addons
@@ -1 +1 @@
-Subproject commit 787ea78f7fa6f0373d80ba1247768402df93f8ad
+Subproject commit 22c1eb5c3d505d85e953c3921317856af103a2eb
diff --git a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
index 88cb5471781..4535d588e46 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
+++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
@@ -2269,6 +2269,12 @@ static void lineart_geometry_object_load_no_bmesh(LineartObjectInfo *ob_info,
 
   int allocate_la_e = edge_reduce.feat_edges;
 
+  if (!edge_pair_arr) {
+    edge_pair_alloc_len = 256;
+    edge_pair_arr = MEM_mallocN(sizeof(EdgeFacePair) * edge_pair_alloc_len,
+                                "lineart edge_pair arr");
+  }
+
   /* Check for edge marks that would create feature edges. */
   for (int i = 0; i < me->totedge; i++) {
     MEdge *medge = &me->medge[i];
@@ -2278,7 +2284,7 @@ static void lineart_geometry_object_load_no_bmesh(LineartObjectInfo *ob_info,
     if (eflag) {
       int min_edges_to_add = 0;
       void **eval;
-      if (!BLI_edgehash_ensure_p(edge_hash, medge->v1, medge->v2, &eval)) {
+      if (edge_hash == NULL || !BLI_edgehash_ensure_p(edge_hash, medge->v1, medge->v2, &eval)) {
         int pair_idx = edge_pair_arr_len++;
         /* Edge has not been added before, create a new pair. */
         EdgeFacePair *pair = &edge_pair_arr[pair_idx];
@@ -2288,7 +2294,9 @@ static void lineart_geometry_object_load_no_bmesh(LineartObjectInfo *ob_info,
         pair->f1 = -1;
         pair->f2 = -1;
         pair->eflag = eflag;
-        *eval = POINTER_FROM_INT(pair_idx);
+        if (edge_hash) {
+          *eval = POINTER_FROM_INT(pair_idx);
+        }
         min_edges_to_add = 1;
 
         if (edge_pair_arr_len == edge_pair_alloc_len) {
@@ -2318,7 +2326,9 @@ static void lineart_geometry_object_load_no_bmesh(LineartObjectInfo *ob_info,
     }
   }
 
-  BLI_edgehash_free(edge_hash, NULL);
+  if (edge_hash) {
+    BLI_edgehash_free(edge_hash, NULL);
+  }
 
   la_edge_arr = lineart_mem_acquire_thread(&re_buf->render_data_pool,
                                            sizeof(LineartEdge) * allocate_la_e);
@@ -2693,8 +2703,8 @@ static void lineart_object_load_worker(TaskPool *__restrict UNUSED(pool),
   //- Assign the number of objects instead of number of threads
   printf("thread start: %d\n", olti->thread_id);
   for (LineartObjectInfo *obi = olti->pending; obi; obi = obi->next) {
-    // lineart_geometry_object_load_no_bmesh(obi, olti->rb);
-    lineart_geometry_object_load(obi, olti->rb);
+    lineart_geometry_object_load_no_bmesh(obi, olti->rb);
+    // lineart_geometry_object_load(obi, olti->rb);
     printf("thread id: %d processed: %d\n", olti->thread_id, obi->original_me->totpoly);
   }
   printf("thread end: %d\n", olti->thread_id);



More information about the Bf-blender-cvs mailing list