Depsgraph: Make object component conversion more accessible

This commit is contained in:
Sergey Sharybin 2019-07-04 14:43:54 +02:00
parent 609e16339f
commit ea05edceaa
3 changed files with 47 additions and 29 deletions

View File

@ -77,31 +77,6 @@ static DEG::NodeType deg_build_scene_component_type(eDepsSceneComponentType comp
return DEG::NodeType::UNDEFINED;
}
static DEG::NodeType deg_build_object_component_type(eDepsObjectComponentType component)
{
switch (component) {
case DEG_OB_COMP_PARAMETERS:
return DEG::NodeType::PARAMETERS;
case DEG_OB_COMP_PROXY:
return DEG::NodeType::PROXY;
case DEG_OB_COMP_ANIMATION:
return DEG::NodeType::ANIMATION;
case DEG_OB_COMP_TRANSFORM:
return DEG::NodeType::TRANSFORM;
case DEG_OB_COMP_GEOMETRY:
return DEG::NodeType::GEOMETRY;
case DEG_OB_COMP_EVAL_POSE:
return DEG::NodeType::EVAL_POSE;
case DEG_OB_COMP_BONE:
return DEG::NodeType::BONE;
case DEG_OB_COMP_SHADING:
return DEG::NodeType::SHADING;
case DEG_OB_COMP_CACHE:
return DEG::NodeType::CACHE;
}
return DEG::NodeType::UNDEFINED;
}
static DEG::DepsNodeHandle *get_node_handle(DepsNodeHandle *node_handle)
{
return reinterpret_cast<DEG::DepsNodeHandle *>(node_handle);
@ -123,7 +98,7 @@ void DEG_add_object_relation(DepsNodeHandle *node_handle,
eDepsObjectComponentType component,
const char *description)
{
DEG::NodeType type = deg_build_object_component_type(component);
DEG::NodeType type = DEG::nodeTypeFromObjectComponent(component);
DEG::ComponentKey comp_key(&object->id, type);
DEG::DepsNodeHandle *deg_node_handle = get_node_handle(node_handle);
deg_node_handle->builder->add_node_handle_relation(comp_key, deg_node_handle, description);
@ -134,7 +109,7 @@ void DEG_add_object_cache_relation(DepsNodeHandle *node_handle,
eDepsObjectComponentType component,
const char *description)
{
DEG::NodeType type = deg_build_object_component_type(component);
DEG::NodeType type = DEG::nodeTypeFromObjectComponent(component);
DEG::ComponentKey comp_key(&cache_file->id, type);
DEG::DepsNodeHandle *deg_node_handle = get_node_handle(node_handle);
deg_node_handle->builder->add_node_handle_relation(comp_key, deg_node_handle, description);
@ -146,7 +121,7 @@ void DEG_add_bone_relation(DepsNodeHandle *node_handle,
eDepsObjectComponentType component,
const char *description)
{
DEG::NodeType type = deg_build_object_component_type(component);
DEG::NodeType type = DEG::nodeTypeFromObjectComponent(component);
DEG::ComponentKey comp_key(&object->id, type, bone_name);
DEG::DepsNodeHandle *deg_node_handle = get_node_handle(node_handle);
deg_node_handle->builder->add_node_handle_relation(comp_key, deg_node_handle, description);
@ -157,7 +132,7 @@ void DEG_add_object_pointcache_relation(struct DepsNodeHandle *node_handle,
eDepsObjectComponentType component,
const char *description)
{
DEG::NodeType type = deg_build_object_component_type(component);
DEG::NodeType type = DEG::nodeTypeFromObjectComponent(component);
DEG::ComponentKey comp_key(&object->id, type);
DEG::DepsNodeHandle *deg_node_handle = get_node_handle(node_handle);
DEG::DepsgraphRelationBuilder *relation_builder = deg_node_handle->builder;

View File

@ -120,6 +120,44 @@ const char *nodeTypeAsString(NodeType type)
return "UNKNOWN";
}
NodeType nodeTypeFromSceneComponent(eDepsSceneComponentType component)
{
switch (component) {
case DEG_SCENE_COMP_PARAMETERS:
return NodeType::PARAMETERS;
case DEG_SCENE_COMP_ANIMATION:
return NodeType::ANIMATION;
case DEG_SCENE_COMP_SEQUENCER:
return NodeType::SEQUENCER;
}
return NodeType::UNDEFINED;
}
NodeType nodeTypeFromObjectComponent(eDepsObjectComponentType component)
{
switch (component) {
case DEG_OB_COMP_PARAMETERS:
return NodeType::PARAMETERS;
case DEG_OB_COMP_PROXY:
return NodeType::PROXY;
case DEG_OB_COMP_ANIMATION:
return NodeType::ANIMATION;
case DEG_OB_COMP_TRANSFORM:
return NodeType::TRANSFORM;
case DEG_OB_COMP_GEOMETRY:
return NodeType::GEOMETRY;
case DEG_OB_COMP_EVAL_POSE:
return NodeType::EVAL_POSE;
case DEG_OB_COMP_BONE:
return NodeType::BONE;
case DEG_OB_COMP_SHADING:
return NodeType::SHADING;
case DEG_OB_COMP_CACHE:
return NodeType::CACHE;
}
return NodeType::UNDEFINED;
}
/*******************************************************************************
* Type information.
*/

View File

@ -27,6 +27,8 @@
#include "BLI_utildefines.h"
#include "DEG_depsgraph_build.h"
struct GHash;
struct ID;
struct Scene;
@ -130,6 +132,9 @@ enum class NodeType {
};
const char *nodeTypeAsString(NodeType type);
NodeType nodeTypeFromSceneComponent(eDepsSceneComponentType component);
NodeType nodeTypeFromObjectComponent(eDepsObjectComponentType component);
/* All nodes in Depsgraph are descended from this. */
struct Node {
/* Helper class for static typeinfo in subclasses. */