Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilipp Oeser <info@graphics-engineer.com>2021-08-26 16:45:00 +0300
committerJeroen Bakker <jeroen@blender.org>2021-09-06 10:36:36 +0300
commit333db02e5d9dfc059b67e372637f0b6b5b159cd9 (patch)
treeb031a657e0a9fc55137b86a6d2424f8b8036195b
parentf0b3b6710c6ae66121deb6d8fd5ee95194b1a643 (diff)
Fix T88433: no greaspencil depsgraph evaluation with certain drivers
When the same stroke was used as a driver variable, this could make this stroke already tagged as built in the course of building driver variables (via `build_gpencil`), but then important stuff from `build_object_data_geometry_datablock` could be missed later on (because both of these funtions use `checkIsBuiltAndTag`). Most importantly, setting up operations such as GEOMETRY_EVAL would be skipped entirely. `build_object_data_geometry_datablock` seems to cover greasepencil just fine (does the same as `build_gpencil` and more). Proposed solution is to remove `build_gpencil` entirely. In `build_id` it would then also call `build_object_data_geometry_datablock` for `ID_GD` IDs. Now the covered types that _call_ `build_object_data_geometry_datablock` match exactly to what is covered _inside_ `build_object_data_geometry_datablock`. Think this "duplication" of functionality was just overseen in rB66da2f537ae8 [`build_gpencil` existed long before and said commit made greasepencil a real object with geometry and such]. thx @JacquesLucke for additional input! Maniphest Tasks: T88433 Differential Revision: https://developer.blender.org/D12324
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_nodes.cc22
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_nodes.h1
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_relations.cc18
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_relations.h1
4 files changed, 4 insertions, 38 deletions
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
index ec5037fb29c..930db0403ff 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
@@ -449,9 +449,10 @@ void DepsgraphNodeBuilder::build_id(ID *id)
build_movieclip((MovieClip *)id);
break;
case ID_ME:
- case ID_CU:
case ID_MB:
+ case ID_CU:
case ID_LT:
+ case ID_GD:
case ID_HA:
case ID_PT:
case ID_VO:
@@ -482,9 +483,6 @@ void DepsgraphNodeBuilder::build_id(ID *id)
case ID_PA:
build_particle_settings((ParticleSettings *)id);
break;
- case ID_GD:
- build_gpencil((bGPdata *)id);
- break;
case ID_LI:
case ID_IP:
@@ -1712,22 +1710,6 @@ void DepsgraphNodeBuilder::build_image(Image *image)
&image->id, NodeType::GENERIC_DATABLOCK, OperationCode::GENERIC_DATABLOCK_UPDATE);
}
-void DepsgraphNodeBuilder::build_gpencil(bGPdata *gpd)
-{
- if (built_map_.checkIsBuiltAndTag(gpd)) {
- return;
- }
- ID *gpd_id = &gpd->id;
-
- /* TODO(sergey): what about multiple users of same datablock? This should
- * only get added once. */
-
- /* The main reason Grease Pencil is included here is because the animation
- * (and drivers) need to be hosted somewhere. */
- build_animdata(gpd_id);
- build_parameters(gpd_id);
-}
-
void DepsgraphNodeBuilder::build_cachefile(CacheFile *cache_file)
{
if (built_map_.checkIsBuiltAndTag(cache_file)) {
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
index a7033c8c8f3..7bbe130e8ff 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
@@ -223,7 +223,6 @@ class DepsgraphNodeBuilder : public DepsgraphBuilder {
virtual void build_texture(Tex *tex);
virtual void build_image(Image *image);
virtual void build_world(World *world);
- virtual void build_gpencil(bGPdata *gpd);
virtual void build_cachefile(CacheFile *cache_file);
virtual void build_mask(Mask *mask);
virtual void build_movieclip(MovieClip *clip);
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
index 0f8b613f7ac..48143aef09b 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
@@ -543,12 +543,13 @@ void DepsgraphRelationBuilder::build_id(ID *id)
build_movieclip((MovieClip *)id);
break;
case ID_ME:
- case ID_CU:
case ID_MB:
+ case ID_CU:
case ID_LT:
case ID_HA:
case ID_PT:
case ID_VO:
+ case ID_GD:
build_object_data_geometry_datablock(id);
break;
case ID_SPK:
@@ -572,9 +573,6 @@ void DepsgraphRelationBuilder::build_id(ID *id)
case ID_PA:
build_particle_settings((ParticleSettings *)id);
break;
- case ID_GD:
- build_gpencil((bGPdata *)id);
- break;
case ID_LI:
case ID_IP:
@@ -2591,18 +2589,6 @@ void DepsgraphRelationBuilder::build_image(Image *image)
build_parameters(&image->id);
}
-void DepsgraphRelationBuilder::build_gpencil(bGPdata *gpd)
-{
- if (built_map_.checkIsBuiltAndTag(gpd)) {
- return;
- }
- /* animation */
- build_animdata(&gpd->id);
- build_parameters(&gpd->id);
-
- // TODO: parent object (when that feature is implemented)
-}
-
void DepsgraphRelationBuilder::build_cachefile(CacheFile *cache_file)
{
if (built_map_.checkIsBuiltAndTag(cache_file)) {
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.h b/source/blender/depsgraph/intern/builder/deg_builder_relations.h
index 21d1d4b6268..1ad61c25305 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.h
@@ -286,7 +286,6 @@ class DepsgraphRelationBuilder : public DepsgraphBuilder {
virtual void build_freestyle_linestyle(FreestyleLineStyle *linestyle);
virtual void build_texture(Tex *tex);
virtual void build_image(Image *image);
- virtual void build_gpencil(bGPdata *gpd);
virtual void build_cachefile(CacheFile *cache_file);
virtual void build_mask(Mask *mask);
virtual void build_movieclip(MovieClip *clip);