diff options
Diffstat (limited to 'source/blender/depsgraph/intern/node/deg_node.h')
-rw-r--r-- | source/blender/depsgraph/intern/node/deg_node.h | 275 |
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(); |