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
committerPhilipp Oeser <info@graphics-engineer.com>2021-08-31 16:20:02 +0300
commitb18122451f8185ade9fc1e9aff5cc2f03d4fa040 (patch)
treed32ddbaca1c843dd4c123c2e652d89eaa3df49fe
parent84f826ff2316de610a6545b27071b0fd6e67e16d (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 a739a0fe337..36c6b56caae 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
@@ -571,9 +571,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:
@@ -604,9 +605,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:
@@ -1852,22 +1850,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 3b2dd44af0d..2378f3fc100 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
@@ -225,7 +225,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 ab3081cb1ae..ef1db8be933 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
@@ -544,12 +544,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:
@@ -573,9 +574,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:
@@ -2609,18 +2607,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);