diff options
Diffstat (limited to 'source/blender/depsgraph')
7 files changed, 68 insertions, 25 deletions
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc index d0e40d49527..b260df6fa06 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc @@ -47,6 +47,7 @@ extern "C" { #include "DNA_gpencil_types.h" #include "DNA_key_types.h" #include "DNA_light_types.h" +#include "DNA_linestyle_types.h" #include "DNA_material_types.h" #include "DNA_mask_types.h" #include "DNA_mesh_types.h" @@ -432,6 +433,9 @@ void DepsgraphNodeBuilder::build_id(ID *id) case ID_MSK: build_mask((Mask *)id); break; + case ID_LS: + build_freestyle_linestyle((FreestyleLineStyle *)id); + break; case ID_MC: build_movieclip((MovieClip *)id); break; @@ -1557,6 +1561,18 @@ void DepsgraphNodeBuilder::build_mask(Mask *mask) } } +void DepsgraphNodeBuilder::build_freestyle_linestyle(FreestyleLineStyle *linestyle) +{ + if (built_map_.checkIsBuiltAndTag(linestyle)) { + return; + } + + ID *linestyle_id = &linestyle->id; + build_parameters(linestyle_id); + build_animdata(linestyle_id); + build_nodetree(linestyle->nodetree); +} + void DepsgraphNodeBuilder::build_movieclip(MovieClip *clip) { if (built_map_.checkIsBuiltAndTag(clip)) { diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h index 865f60432c1..7cb74ea8bc5 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h +++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h @@ -35,6 +35,8 @@ struct CacheFile; struct Camera; struct Collection; struct FCurve; +struct FreestyleLineSet; +struct FreestyleLineStyle; struct GHash; struct ID; struct Image; @@ -201,6 +203,8 @@ class DepsgraphNodeBuilder : public DepsgraphBuilder { virtual void build_nodetree(bNodeTree *ntree); virtual void build_material(Material *ma); virtual void build_materials(Material **materials, int num_materials); + virtual void build_freestyle_lineset(FreestyleLineSet *fls); + virtual void build_freestyle_linestyle(FreestyleLineStyle *linestyle); virtual void build_texture(Tex *tex); virtual void build_image(Image *image); virtual void build_world(World *world); diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc index 88ebf1c9b50..82a65c3129b 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc @@ -37,6 +37,7 @@ extern "C" { #include "DNA_freestyle_types.h" #include "DNA_layer_types.h" +#include "DNA_linestyle_types.h" #include "DNA_node_types.h" #include "DNA_object_types.h" #include "DNA_scene_types.h" @@ -74,6 +75,16 @@ void DepsgraphNodeBuilder::build_layer_collections(ListBase *lb) } } +void DepsgraphNodeBuilder::build_freestyle_lineset(FreestyleLineSet *fls) +{ + if (fls->group != NULL) { + build_collection(NULL, fls->group); + } + if (fls->linestyle != NULL) { + build_freestyle_linestyle(fls->linestyle); + } +} + void DepsgraphNodeBuilder::build_view_layer(Scene *scene, ViewLayer *view_layer, eDepsNode_LinkedState_Type linked_state) @@ -140,11 +151,9 @@ void DepsgraphNodeBuilder::build_view_layer(Scene *scene, if (view_layer->mat_override != NULL) { build_material(view_layer->mat_override); } - /* Freestyle collections. */ + /* Freestyle linesets. */ LISTBASE_FOREACH (FreestyleLineSet *, fls, &view_layer->freestyle_config.linesets) { - if (fls->group != NULL) { - build_collection(NULL, fls->group); - } + build_freestyle_lineset(fls); } /* Sequencer. */ if (linked_state == DEG_ID_LINKED_DIRECTLY) { diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc index 3e0ab9684da..7d7a183ee75 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc @@ -47,6 +47,7 @@ extern "C" { #include "DNA_gpencil_types.h" #include "DNA_key_types.h" #include "DNA_light_types.h" +#include "DNA_linestyle_types.h" #include "DNA_material_types.h" #include "DNA_mask_types.h" #include "DNA_mesh_types.h" @@ -536,6 +537,9 @@ void DepsgraphRelationBuilder::build_id(ID *id) case ID_MSK: build_mask((Mask *)id); break; + case ID_LS: + build_freestyle_linestyle((FreestyleLineStyle *)id); + break; case ID_MC: build_movieclip((MovieClip *)id); break; @@ -2429,6 +2433,18 @@ void DepsgraphRelationBuilder::build_mask(Mask *mask) } } +void DepsgraphRelationBuilder::build_freestyle_linestyle(FreestyleLineStyle *linestyle) +{ + if (built_map_.checkIsBuiltAndTag(linestyle)) { + return; + } + + ID *linestyle_id = &linestyle->id; + build_parameters(linestyle_id); + build_animdata(linestyle_id); + build_nodetree(linestyle->nodetree); +} + void DepsgraphRelationBuilder::build_movieclip(MovieClip *clip) { if (built_map_.checkIsBuiltAndTag(clip)) { diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.h b/source/blender/depsgraph/intern/builder/deg_builder_relations.h index c6a0014577f..81bc82c036a 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_relations.h +++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.h @@ -51,6 +51,8 @@ struct Camera; struct Collection; struct EffectorWeights; struct FCurve; +struct FreestyleLineSet; +struct FreestyleLineStyle; struct ID; struct Image; struct Key; @@ -264,6 +266,8 @@ class DepsgraphRelationBuilder : public DepsgraphBuilder { virtual void build_nodetree(bNodeTree *ntree); virtual void build_material(Material *ma); virtual void build_materials(Material **materials, int num_materials); + virtual void build_freestyle_lineset(FreestyleLineSet *fls); + 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); diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations_view_layer.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations_view_layer.cc index 4c55e4a137a..e81ed8b410c 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_relations_view_layer.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_relations_view_layer.cc @@ -35,6 +35,7 @@ #include "BLI_blenlib.h" extern "C" { +#include "DNA_linestyle_types.h" #include "DNA_node_types.h" #include "DNA_object_types.h" #include "DNA_scene_types.h" @@ -75,6 +76,16 @@ void DepsgraphRelationBuilder::build_layer_collections(ListBase *lb) } } +void DepsgraphRelationBuilder::build_freestyle_lineset(FreestyleLineSet *fls) +{ + if (fls->group != NULL) { + build_collection(NULL, NULL, fls->group); + } + if (fls->linestyle != NULL) { + build_freestyle_linestyle(fls->linestyle); + } +} + void DepsgraphRelationBuilder::build_view_layer(Scene *scene, ViewLayer *view_layer, eDepsNode_LinkedState_Type linked_state) @@ -120,11 +131,9 @@ void DepsgraphRelationBuilder::build_view_layer(Scene *scene, if (view_layer->mat_override != NULL) { build_material(view_layer->mat_override); } - /* Freestyle collections. */ + /* Freestyle linesets. */ LISTBASE_FOREACH (FreestyleLineSet *, fls, &view_layer->freestyle_config.linesets) { - if (fls->group != NULL) { - build_collection(NULL, NULL, fls->group); - } + build_freestyle_lineset(fls); } /* Scene parameters, compositor and such. */ build_scene_compositor(scene); diff --git a/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc b/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc index 996d807480d..a1bb0aab029 100644 --- a/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc +++ b/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc @@ -499,21 +499,6 @@ BLI_INLINE bool check_datablock_expanded(const ID *id_cow) return (id_cow->name[0] != '\0'); } -/* Those are data-blocks which are not covered by dependency graph and hence - * does not need any remapping or anything. - * - * TODO(sergey): How to make it more robust for the future, so we don't have - * to maintain exception lists all over the code? */ -bool check_datablocks_copy_on_writable(const ID *id_orig) -{ - const ID_Type id_type = GS(id_orig->name); - /* We shouldn't bother if copied ID is same as original one. */ - if (!deg_copy_on_write_is_needed(id_orig)) { - return false; - } - return !ELEM(id_type, ID_BR, ID_LS, ID_PAL); -} - /* Callback for BKE_library_foreach_ID_link which remaps original ID pointer * with the one created by CoW system. */ @@ -536,7 +521,7 @@ int foreach_libblock_remap_callback(void *user_data_v, ID *id_self, ID **id_p, i RemapCallbackUserData *user_data = (RemapCallbackUserData *)user_data_v; const Depsgraph *depsgraph = user_data->depsgraph; ID *id_orig = *id_p; - if (check_datablocks_copy_on_writable(id_orig)) { + if (deg_copy_on_write_is_needed(id_orig)) { ID *id_cow; if (user_data->create_placeholders) { /* Special workaround to stop creating temp datablocks for @@ -1123,7 +1108,7 @@ bool deg_copy_on_write_is_expanded(const ID *id_cow) bool deg_copy_on_write_is_needed(const ID *id_orig) { const ID_Type id_type = GS(id_orig->name); - return !ELEM(id_type, ID_IM); + return ID_TYPE_IS_COW(id_type); } } // namespace DEG |