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
This commit is contained in:
parent
84f826ff23
commit
b18122451f
Notes:
blender-bot
2023-02-14 07:53:51 +01:00
Referenced by issue #88449: Blender LTS: Maintenance Task 2.93 Referenced by issue #88449, Blender LTS: Maintenance Task 2.93 Referenced by issue #88433, Grease Pencil: Adding driver in Transform doesn't behave as expected during playback
|
@ -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)) {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)) {
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue