[Bf-blender-cvs] [8547bf7eb9a] temp-lineart-contained: LineArt: Fixed collection usage check for nested cases.

YimingWu noreply at git.blender.org
Thu Mar 18 10:25:36 CET 2021


Commit: 8547bf7eb9a27b66ddf12e4cce4d708776795843
Author: YimingWu
Date:   Thu Mar 18 17:24:55 2021 +0800
Branches: temp-lineart-contained
https://developer.blender.org/rB8547bf7eb9a27b66ddf12e4cce4d708776795843

LineArt: Fixed collection usage check for nested cases.

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

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 6def39ef378..99abc18a5c0 100644
--- a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
+++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c
@@ -1719,21 +1719,19 @@ static void lineart_geometry_object_load(Depsgraph *dg,
 #undef LRT_MESH_FINISH
 }
 
-static bool _lineart_object_not_in_source(LineartRenderBuffer *rb, Object *ob)
+static bool _lineart_object_not_in_source_collection(Collection *source, Object *ob)
 {
-  if (rb->_source_type == LRT_SOURCE_SCENE) {
+  CollectionChild *cc;
+  Collection *c = source->id.orig_id ? (Collection *)source->id.orig_id : source;
+  if (BKE_collection_has_object(c, (Object *)(ob->id.orig_id))) {
     return false;
   }
-  else if (rb->_source_type == LRT_SOURCE_OBJECT) {
-    return (ob != rb->_source_object);
-  }
-  else if (rb->_source_type == LRT_SOURCE_COLLECTION) {
-    if (!BKE_collection_has_object((Collection *)rb->_source_collection->id.orig_id,
-                                   (Object *)(ob->id.orig_id))) {
-      return true;
+  for (cc = source->children.first; cc; cc = cc->next) {
+    if (!_lineart_object_not_in_source_collection(cc->collection, ob)) {
+      return false;
     }
   }
-  return false;
+  return true;
 }
 
 /* See if this object in such collection is used for generating line art,
@@ -1782,8 +1780,15 @@ static int lineart_usage_check(Collection *c, Object *ob, LineartRenderBuffer *_
 
   /* Temp solution to speed up calculation in the modifier without cache. See the definition of
    * rb->_source_type for details. */
-  if (_lineart_object_not_in_source(_rb, ob)) {
-    return OBJECT_LRT_OCCLUSION_ONLY;
+  if (_rb->_source_type == LRT_SOURCE_OBJECT) {
+    if (ob != _rb->_source_object) {
+      return OBJECT_LRT_OCCLUSION_ONLY;
+    }
+  }
+  else if (_rb->_source_type == LRT_SOURCE_COLLECTION) {
+    if (_lineart_object_not_in_source_collection(_rb->_source_collection, ob)) {
+      return OBJECT_LRT_OCCLUSION_ONLY;
+    }
   }
 
   return OBJECT_LRT_INHERENT;



More information about the Bf-blender-cvs mailing list