Commit: 87066782e720257bef19450f0e3f7c739101b9b8
Author: Sergey Sharybin
Date:   Wed Feb 27 11:17:36 2019 +0100
Branches: master
https://developer.blender.org/rB87066782e720257bef19450f0e3f7c739101b9b8

Depsgraph: Make it easier to control which bases being pulled into the graph

Just de-duplicates some logic. Should be no functional changes.

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

M       source/blender/depsgraph/intern/builder/deg_builder.cc
M       source/blender/depsgraph/intern/builder/deg_builder.h
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

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

diff --git a/source/blender/depsgraph/intern/builder/deg_builder.cc 
b/source/blender/depsgraph/intern/builder/deg_builder.cc
index d137b4a199d..5520282db27 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder.cc
@@ -24,8 +24,9 @@
 #include "intern/builder/deg_builder.h"
 
 #include "DNA_anim_types.h"
-#include "DNA_object_types.h"
+#include "DNA_layer_types.h"
 #include "DNA_ID.h"
+#include "DNA_object_types.h"
 
 #include "BLI_utildefines.h"
 #include "BLI_ghash.h"
@@ -48,6 +49,28 @@ extern "C" {
 
 namespace DEG {
 
+/*******************************************************************************
+ * Base class for builders.
+ */
+
+DepsgraphBuilder::DepsgraphBuilder(Main *bmain, Depsgraph *graph)
+        : bmain_(bmain),
+          graph_(graph) {
+}
+
+bool DepsgraphBuilder::needPullBaseIntoGraph(struct Base *base) {
+       const int base_flag = (graph_->mode == DAG_EVAL_VIEWPORT) ?
+               BASE_ENABLED_VIEWPORT : BASE_ENABLED_RENDER;
+       if (base->flag & base_flag) {
+               return true;
+       }
+       return false;
+}
+
+/*******************************************************************************
+ * Builder finalizer.
+ */
+
 namespace {
 
 void deg_graph_build_flush_visibility(Depsgraph *graph)
diff --git a/source/blender/depsgraph/intern/builder/deg_builder.h 
b/source/blender/depsgraph/intern/builder/deg_builder.h
index a8f3318d9e2..e64ae98c6ce 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder.h
@@ -23,12 +23,25 @@
 
 #pragma once
 
+struct Base;
 struct Main;
 
 namespace DEG {
 
 struct Depsgraph;
 
+class DepsgraphBuilder {
+public:
+       bool needPullBaseIntoGraph(struct Base *base);
+
+protected:
+       DepsgraphBuilder(Main *bmain, Depsgraph *graph);
+
+       /* State which never changes, same for the whole builder time. */
+       Main *bmain_;
+       Depsgraph *graph_;
+};
+
 void deg_graph_build_finalize(struct Main *bmain, struct Depsgraph *graph);
 
 }  // namespace DEG
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc 
b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
index d0723ea0ded..463f4fa0935 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
@@ -131,8 +131,7 @@ void free_copy_on_write_datablock(void *id_info_v)
 /* **** General purpose functions **** */
 
 DepsgraphNodeBuilder::DepsgraphNodeBuilder(Main *bmain, Depsgraph *graph)
-    : bmain_(bmain),
-      graph_(graph),
+    : DepsgraphBuilder(bmain, graph),
       scene_(NULL),
       view_layer_(NULL),
       view_layer_index_(-1),
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h 
b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
index 88d5dee535a..0bf4c13d515 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
@@ -23,14 +23,14 @@
 
 #pragma once
 
+#include "intern/builder/deg_builder.h"
 #include "intern/builder/deg_builder_map.h"
 #include "intern/depsgraph_type.h"
-
-#include "DEG_depsgraph.h"
-
 #include "intern/node/deg_node_id.h"
 #include "intern/node/deg_node_operation.h"
 
+#include "DEG_depsgraph.h"
+
 struct Base;
 struct CacheFile;
 struct Camera;
@@ -74,7 +74,8 @@ struct Node;
 struct OperationNode;
 struct TimeSourceNode;
 
-struct DepsgraphNodeBuilder {
+class DepsgraphNodeBuilder : public DepsgraphBuilder {
+public:
        DepsgraphNodeBuilder(Main *bmain, Depsgraph *graph);
        ~DepsgraphNodeBuilder();
 
@@ -259,10 +260,6 @@ protected:
                                    bool is_reference,
                                    void *user_data);
 
-       /* State which never changes, same for the whole builder time. */
-       Main *bmain_;
-       Depsgraph *graph_;
-
        /* State which demotes currently built entities. */
        Scene *scene_;
        ViewLayer *view_layer_;
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 411199fe9be..db1cfa6b83f 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
@@ -97,16 +97,15 @@ void DepsgraphNodeBuilder::build_view_layer(
         * but object is expected to be an original one. Hence we go into some
         * tricks here iterating over the view layer. */
        int base_index = 0;
-       const int base_flag = (graph_->mode == DAG_EVAL_VIEWPORT) ?
-               BASE_ENABLED_VIEWPORT : BASE_ENABLED_RENDER;
        LISTBASE_FOREACH (Base *, base, &view_layer->object_bases) {
                /* object itself */
-               const bool is_object_visible = (base->flag & base_flag);
-               if (is_object_visible) {
-                       build_object(base_index,
-                                    base->object,
-                                    linked_state,
-                                    is_object_visible);
+               if (needPullBaseIntoGraph(base)) {
+                       /* NOTE: We consider object visible even if it's 
currently
+                        * restricted by the base/restriction flags. Otherwise 
its drivers
+                        * will never be evaluated.
+                        *
+                        * TODO(sergey): Need to go more granular on visibility 
checks. */
+                       build_object(base_index, base->object, linked_state, 
true);
                        ++base_index;
                }
                base->object->select_id = select_id++;
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc 
b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
index 99334c81db5..9aab90f88cf 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
@@ -212,8 +212,7 @@ static bool bone_has_segments(Object *object, const char 
*bone_name)
 
 DepsgraphRelationBuilder::DepsgraphRelationBuilder(Main *bmain,
                                                    Depsgraph *graph)
-    : bmain_(bmain),
-      graph_(graph),
+    : DepsgraphBuilder(bmain, graph),
       scene_(NULL),
       rna_node_query_(graph)
 {
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.h 
b/source/blender/depsgraph/intern/builder/deg_builder_relations.h
index 190fcb7aedf..fb76b469572 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.h
@@ -36,6 +36,7 @@
 #include "BLI_utildefines.h"
 #include "BLI_string.h"
 
+#include "intern/builder/deg_builder.h"
 #include "intern/builder/deg_builder_map.h"
 #include "intern/builder/deg_builder_rna.h"
 #include "intern/depsgraph.h"
@@ -172,8 +173,9 @@ struct RNAPathKey
        RNAPointerSource source;
 };
 
-struct DepsgraphRelationBuilder
+class DepsgraphRelationBuilder : public DepsgraphBuilder
 {
+public:
        DepsgraphRelationBuilder(Main *bmain, Depsgraph *graph);
 
        void begin_build();
@@ -352,10 +354,6 @@ private:
                                    bool is_reference,
                                    void *user_data);
 
-       /* State which never changes, same for the whole builder time. */
-       Main *bmain_;
-       Depsgraph *graph_;
-
        /* State which demotes currently built entities. */
        Scene *scene_;
 
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 31c514e972e..54a72d3b8d4 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
@@ -83,11 +83,8 @@ void DepsgraphRelationBuilder::build_view_layer(Scene 
*scene, ViewLayer *view_la
        /* NOTE: Nodes builder requires us to pass CoW base because it's being
         * passed to the evaluation functions. During relations builder we only
         * do NULL-pointer check of the base, so it's fine to pass original 
one. */
-       const int base_flag = (graph_->mode == DAG_EVAL_VIEWPORT) ?
-               BASE_ENABLED_VIEWPORT : BASE_ENABLED_RENDER;
        LISTBASE_FOREACH (Base *, base, &view_layer->object_bases) {
-               const bool is_object_visible = (base->flag & base_flag);
-               if (is_object_visible) {
+               if (needPullBaseIntoGraph(base)) {
                        build_object(base, base->object);
                }
        }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to