[Bf-blender-cvs] [9f66062da73] blender-v2.82-release: Fix T72213: F-Curve animation does not update FreeStyle properties

Sybren A. Stüvel noreply at git.blender.org
Tue Jan 21 11:12:22 CET 2020


Commit: 9f66062da73e954f7c00acd9d5d5ead9ac1e8863
Author: Sybren A. Stüvel
Date:   Thu Jan 16 14:57:33 2020 +0100
Branches: blender-v2.82-release
https://developer.blender.org/rB9f66062da73e954f7c00acd9d5d5ead9ac1e8863

Fix T72213: F-Curve animation does not update FreeStyle properties

FreeStyle line styles were not part of the dependency graph, and
blacklisted from the Copy-on-Write system. As a result, animated
FreeStyle properties would not be updated by the animation system,
resulting in T72213. There was an explicit call to run the animation
system on the original datablocks, but that was (for good reasons)
removed in D5394.

This commit adds the FreeStyleLineStyle datablocks to the dependency
graph and allows them to be handled by the CoW system. As a result

- the UI now updates properly when properties are animated, and
- animated property values are actually used when rendering.

This commit includes @Sergey's patch P1222, which unifies two bits of
code that did the same thing: check whether datablock type is covered by
copy-on-write.

Reviewed By: sergey, brecht

Differential Revision: https://developer.blender.org/D6609

===================================================================

M	source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
M	source/blender/depsgraph/intern/builder/deg_builder_nodes.h
M	source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc
M	source/blender/depsgraph/intern/builder/deg_builder_relations.cc
M	source/blender/depsgraph/intern/builder/deg_builder_relations.h
M	source/blender/depsgraph/intern/builder/deg_builder_relations_view_layer.cc
M	source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc
M	source/blender/makesdna/DNA_ID.h

===================================================================

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
diff --git a/source/blender/makesdna/DNA_ID.h b/source/blender/makesdna/DNA_ID.h
index fce68b11fe4..a75b01f2f75 100644
--- a/source/blender/makesdna/DNA_ID.h
+++ b/source/blender/makesdna/DNA_ID.h
@@ -457,9 +457,8 @@ typedef enum ID_Type {
   (!ID_IS_LINKED((_id)) && ID_IS_OVERRIDE_LIBRARY((_id)) && \
    (((ID

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list