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:
Diffstat (limited to 'source/blender/depsgraph/intern/node/deg_node.h')
-rw-r--r--source/blender/depsgraph/intern/node/deg_node.h275
1 files changed, 141 insertions, 134 deletions
diff --git a/source/blender/depsgraph/intern/node/deg_node.h b/source/blender/depsgraph/intern/node/deg_node.h
index 0677b0edc15..ece43657b38 100644
--- a/source/blender/depsgraph/intern/node/deg_node.h
+++ b/source/blender/depsgraph/intern/node/deg_node.h
@@ -40,154 +40,161 @@ struct Relation;
/* Metatype of Nodes - The general "level" in the graph structure
* the node serves. */
enum class NodeClass {
- /* Types generally unassociated with user-visible entities,
- * but needed for graph functioning. */
- GENERIC = 0,
- /* [Outer Node] An "aspect" of evaluating/updating an ID-Block, requiring
- * certain types of evaluation behavior. */
- COMPONENT = 1,
- /* [Inner Node] A glorified function-pointer/callback for scheduling up
- * evaluation operations for components, subject to relationship
- * requirements. */
- OPERATION = 2,
+ /* Types generally unassociated with user-visible entities,
+ * but needed for graph functioning. */
+ GENERIC = 0,
+ /* [Outer Node] An "aspect" of evaluating/updating an ID-Block, requiring
+ * certain types of evaluation behavior. */
+ COMPONENT = 1,
+ /* [Inner Node] A glorified function-pointer/callback for scheduling up
+ * evaluation operations for components, subject to relationship
+ * requirements. */
+ OPERATION = 2,
};
const char *nodeClassAsString(NodeClass node_class);
/* Types of Nodes */
enum class NodeType {
- /* Fallback type for invalid return value */
- UNDEFINED = 0,
- /* Inner Node (Operation) */
- OPERATION,
-
- /* **** Generic Types **** */
-
- /* Time-Source */
- TIMESOURCE,
- /* ID-Block reference - used as landmarks/collection point for components,
- * but not usually part of main graph. */
- ID_REF,
-
- /* **** Outer Types **** */
-
- /* Parameters Component - Default when nothing else fits
- * (i.e. just SDNA property setting). */
- PARAMETERS,
- /* Generic "Proxy-Inherit" Component. */
- PROXY,
- /* Animation Component */
- ANIMATION,
- /* Transform Component (Parenting/Constraints) */
- TRANSFORM,
- /* Geometry Component (Mesh/Displist) */
- GEOMETRY,
- /* Sequencer Component (Scene Only) */
- SEQUENCER,
- /* Component which contains all operations needed for layer collections
- * evaluation. */
- LAYER_COLLECTIONS,
- /* Entry component of majority of ID nodes: prepares CoW pointers for
- * execution. */
- COPY_ON_WRITE,
- /* Used by all operations which are updating object when something is
- * changed in view layer. */
- OBJECT_FROM_LAYER,
- /* Un-interestying datablock, which is a part of dependency graph, but does
- * not have very distinctive update procedure. */
- GENERIC_DATABLOCK,
-
- /* **** Evaluation-Related Outer Types (with Subdata) **** */
-
- /* Pose Component - Owner/Container of Bones Eval */
- EVAL_POSE,
- /* Bone Component - Child/Subcomponent of Pose */
- BONE,
- /* Particle Systems Component */
- PARTICLE_SYSTEM,
- PARTICLE_SETTINGS,
- /* Material Shading Component */
- SHADING,
- SHADING_PARAMETERS,
- /* Point cache Component */
- POINT_CACHE,
- /* Cache Component */
- /* TODO(sergey); Verify that we really need this. */
- CACHE,
- /* Batch Cache Component.
- * TODO (dfelinto/sergey): rename to make it more generic. */
- BATCH_CACHE,
- /* Duplication system. Used to force duplicated objects visible when
- * when duplicator is visible. */
- DUPLI,
- /* Synchronization back to original datablock. */
- SYNCHRONIZATION,
-
- /* Total number of meaningful node types. */
- NUM_TYPES,
+ /* Fallback type for invalid return value */
+ UNDEFINED = 0,
+ /* Inner Node (Operation) */
+ OPERATION,
+
+ /* **** Generic Types **** */
+
+ /* Time-Source */
+ TIMESOURCE,
+ /* ID-Block reference - used as landmarks/collection point for components,
+ * but not usually part of main graph. */
+ ID_REF,
+
+ /* **** Outer Types **** */
+
+ /* Parameters Component - Default when nothing else fits
+ * (i.e. just SDNA property setting). */
+ PARAMETERS,
+ /* Generic "Proxy-Inherit" Component. */
+ PROXY,
+ /* Animation Component */
+ ANIMATION,
+ /* Transform Component (Parenting/Constraints) */
+ TRANSFORM,
+ /* Geometry Component (Mesh/Displist) */
+ GEOMETRY,
+ /* Sequencer Component (Scene Only) */
+ SEQUENCER,
+ /* Component which contains all operations needed for layer collections
+ * evaluation. */
+ LAYER_COLLECTIONS,
+ /* Entry component of majority of ID nodes: prepares CoW pointers for
+ * execution. */
+ COPY_ON_WRITE,
+ /* Used by all operations which are updating object when something is
+ * changed in view layer. */
+ OBJECT_FROM_LAYER,
+ /* Un-interestying datablock, which is a part of dependency graph, but does
+ * not have very distinctive update procedure. */
+ GENERIC_DATABLOCK,
+
+ /* **** Evaluation-Related Outer Types (with Subdata) **** */
+
+ /* Pose Component - Owner/Container of Bones Eval */
+ EVAL_POSE,
+ /* Bone Component - Child/Subcomponent of Pose */
+ BONE,
+ /* Particle Systems Component */
+ PARTICLE_SYSTEM,
+ PARTICLE_SETTINGS,
+ /* Material Shading Component */
+ SHADING,
+ SHADING_PARAMETERS,
+ /* Point cache Component */
+ POINT_CACHE,
+ /* Cache Component */
+ /* TODO(sergey); Verify that we really need this. */
+ CACHE,
+ /* Batch Cache Component.
+ * TODO (dfelinto/sergey): rename to make it more generic. */
+ BATCH_CACHE,
+ /* Duplication system. Used to force duplicated objects visible when
+ * when duplicator is visible. */
+ DUPLI,
+ /* Synchronization back to original datablock. */
+ SYNCHRONIZATION,
+
+ /* Total number of meaningful node types. */
+ NUM_TYPES,
};
const char *nodeTypeAsString(NodeType type);
/* All nodes in Depsgraph are descended from this. */
struct Node {
- /* Helper class for static typeinfo in subclasses. */
- struct TypeInfo {
- TypeInfo(NodeType type,
- const char *type_name,
- int id_recalc_tag = 0);
- NodeType type;
- const char *type_name;
- int id_recalc_tag;
- };
- struct Stats {
- Stats();
- /* Reset all the counters. Including all stats needed for average
- * evaluation time calculation. */
- void reset();
- /* Reset counters needed for the current graph evaluation, does not
- * touch averaging accumulators. */
- void reset_current();
- /* Time spend on this node during current graph evaluation. */
- double current_time;
- };
- /* Relationships between nodes
- * The reason why all depsgraph nodes are descended from this type (apart
- * from basic serialization benefits - from the typeinfo) is that we can
- * have relationships between these nodes. */
- typedef vector<Relation *> Relations;
-
- string name; /* Identifier - mainly for debugging purposes. */
- NodeType type; /* Structural type of node. */
- Relations inlinks; /* Nodes which this one depends on. */
- Relations outlinks; /* Nodes which depend on this one. */
- Stats stats; /* Evaluation statistics. */
-
- /* Generic tags for traversal algorithms and such.
- *
- * Actual meaning of values depends on a specific area. Every area is to
- * clean this before use. */
- int custom_flags;
-
- /* Methods. */
- Node();
- virtual ~Node();
-
- virtual string identifier() const;
-
- virtual void init(const ID * /*id*/, const char * /*subdata*/) {}
-
- virtual void tag_update(Depsgraph * /*graph*/, eUpdateSource /*source*/) {}
-
- virtual OperationNode *get_entry_operation() { return NULL; }
- virtual OperationNode *get_exit_operation() { return NULL; }
-
- virtual NodeClass get_class() const;
+ /* Helper class for static typeinfo in subclasses. */
+ struct TypeInfo {
+ TypeInfo(NodeType type, const char *type_name, int id_recalc_tag = 0);
+ NodeType type;
+ const char *type_name;
+ int id_recalc_tag;
+ };
+ struct Stats {
+ Stats();
+ /* Reset all the counters. Including all stats needed for average
+ * evaluation time calculation. */
+ void reset();
+ /* Reset counters needed for the current graph evaluation, does not
+ * touch averaging accumulators. */
+ void reset_current();
+ /* Time spend on this node during current graph evaluation. */
+ double current_time;
+ };
+ /* Relationships between nodes
+ * The reason why all depsgraph nodes are descended from this type (apart
+ * from basic serialization benefits - from the typeinfo) is that we can
+ * have relationships between these nodes. */
+ typedef vector<Relation *> Relations;
+
+ string name; /* Identifier - mainly for debugging purposes. */
+ NodeType type; /* Structural type of node. */
+ Relations inlinks; /* Nodes which this one depends on. */
+ Relations outlinks; /* Nodes which depend on this one. */
+ Stats stats; /* Evaluation statistics. */
+
+ /* Generic tags for traversal algorithms and such.
+ *
+ * Actual meaning of values depends on a specific area. Every area is to
+ * clean this before use. */
+ int custom_flags;
+
+ /* Methods. */
+ Node();
+ virtual ~Node();
+
+ virtual string identifier() const;
+
+ virtual void init(const ID * /*id*/, const char * /*subdata*/)
+ {
+ }
+
+ virtual void tag_update(Depsgraph * /*graph*/, eUpdateSource /*source*/)
+ {
+ }
+
+ virtual OperationNode *get_entry_operation()
+ {
+ return NULL;
+ }
+ virtual OperationNode *get_exit_operation()
+ {
+ return NULL;
+ }
+
+ virtual NodeClass get_class() const;
};
/* Macros for common static typeinfo. */
-#define DEG_DEPSNODE_DECLARE \
- static const Node::TypeInfo typeinfo
+#define DEG_DEPSNODE_DECLARE static const Node::TypeInfo typeinfo
#define DEG_DEPSNODE_DEFINE(NodeType, type_, tname_) \
- const Node::TypeInfo NodeType::typeinfo = Node::TypeInfo(type_, tname_)
+ const Node::TypeInfo NodeType::typeinfo = Node::TypeInfo(type_, tname_)
void deg_register_base_depsnodes();