[Bf-blender-cvs] [8fabcb8372b] lanpr-under-gp: LineArt: Use orig_id for all object filtering.

YimingWu noreply at git.blender.org
Tue Jul 14 16:54:05 CEST 2020


Commit: 8fabcb8372b57f156571e979f7da9d1c065c5446
Author: YimingWu
Date:   Tue Jul 14 22:11:47 2020 +0800
Branches: lanpr-under-gp
https://developer.blender.org/rB8fabcb8372b57f156571e979f7da9d1c065c5446

LineArt: Use orig_id for all object filtering.

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

M	source/blender/editors/lineart/lineart_cpu.c

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

diff --git a/source/blender/editors/lineart/lineart_cpu.c b/source/blender/editors/lineart/lineart_cpu.c
index af5c0e4a30f..a3d690ef0fd 100644
--- a/source/blender/editors/lineart/lineart_cpu.c
+++ b/source/blender/editors/lineart/lineart_cpu.c
@@ -1351,6 +1351,7 @@ static void lineart_make_render_geometry_buffers_object(Object *ob,
   LineartRenderLine *orl;
   LineartRenderTriangle *ort;
   FreestyleEdge *fe;
+  Object *orig_ob;
   int CanFindFreestyle = 0;
   int i;
 
@@ -1394,26 +1395,28 @@ static void lineart_make_render_geometry_buffers_object(Object *ob,
     ort = mem_static_aquire(&rb->render_data_pool, bm->totface * rb->triangle_size);
     orl = mem_static_aquire(&rb->render_data_pool, sizeof(LineartRenderLine) * bm->totedge);
 
+    orig_ob = (Object *)(ob->id.orig_id ? ob->id.orig_id : ob);
+
     reln = list_append_pointer_static_sized(&rb->vertex_buffer_pointers,
                                             &rb->render_data_pool,
                                             orv,
                                             sizeof(LineartRenderElementLinkNode));
     reln->element_count = bm->totvert;
-    reln->object_ref = ob;
+    reln->object_ref = orig_ob;
 
     reln = list_append_pointer_static_sized(&rb->line_buffer_pointers,
                                             &rb->render_data_pool,
                                             orl,
                                             sizeof(LineartRenderElementLinkNode));
     reln->element_count = bm->totedge;
-    reln->object_ref = ob;
+    reln->object_ref = orig_ob;
 
     reln = list_append_pointer_static_sized(&rb->triangle_buffer_pointers,
                                             &rb->render_data_pool,
                                             ort,
                                             sizeof(LineartRenderElementLinkNode));
     reln->element_count = bm->totface;
-    reln->object_ref = ob;
+    reln->object_ref = orig_ob;
 
     for (i = 0; i < bm->totvert; i++) {
       v = BM_vert_at_index(bm, i);
@@ -1439,7 +1442,7 @@ static void lineart_make_render_geometry_buffers_object(Object *ob,
       rl->l = &orv[BM_elem_index_get(e->v1)];
       rl->r = &orv[BM_elem_index_get(e->v2)];
 
-      rl->object_ref = ob;
+      rl->object_ref = orig_ob;
 
       LineartRenderLineSegment *rls = mem_static_aquire(&rb->render_data_pool,
                                                         sizeof(LineartRenderLineSegment));
@@ -3666,8 +3669,16 @@ void ED_lineart_generate_gpencil_from_chain(Depsgraph *depsgraph,
   short thickness = scene->lineart.master_thickness;
   short opacity = scene->lineart.master_strength;
 
-  float mat[4][4];
+  Object *orig_ob = NULL;
+  if (ob) {
+    orig_ob = (Object *)(ob->id.orig_id ? ob->id.orig_id : ob);
+  }
 
+  Collection *orig_col = NULL;
+  if (col) {
+    orig_col = (Collection *)(col->id.orig_id ? col->id.orig_id : col);
+  }
+  float mat[4][4];
   unit_m4(mat);
 
   LISTBASE_FOREACH (LineartRenderLineChain *, rlc, &rb->chains) {
@@ -3675,7 +3686,7 @@ void ED_lineart_generate_gpencil_from_chain(Depsgraph *depsgraph,
     if (rlc->picked) {
       continue;
     }
-    if (ob && !rlc->object_ref) {
+    if (orig_ob && !rlc->object_ref) {
       continue; /* intersection lines are all in the first collection running into here */
     }
     if (!(rlc->type & types)) {
@@ -3684,18 +3695,11 @@ void ED_lineart_generate_gpencil_from_chain(Depsgraph *depsgraph,
     if (rlc->level > level_end || rlc->level < level_start) {
       continue;
     }
-    if (ob && ob->id.orig_id != rlc->object_ref->id.orig_id) {
-      /* Note: not object_ref and ob are both (same?) copy on write data, if legacy mode, use
-       * object_ref->id.orig_id. Same below.
-       * TODO? Should we always use orig_id in the future? */
+    if (orig_ob && orig_ob != rlc->object_ref) {
       continue;
     }
-    if (col && rlc->object_ref) {
-      if (col->id.orig_id) {
-        col = (Collection *)col->id.orig_id;
-        /* Need this for using the same code for modifier preview and applying. */
-      }
-      if (!BKE_collection_has_object_recursive(col, (Object *)rlc->object_ref->id.orig_id)) {
+    if (orig_col && rlc->object_ref) {
+      if (!BKE_collection_has_object_recursive(orig_col, (Object *)rlc->object_ref)) {
         continue;
       }
     }



More information about the Bf-blender-cvs mailing list