[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