Differential D2927 Diff 9589 source/blender/depsgraph/intern/builder/deg_builder_nodes_layer_collection.cc
Changeset View
Changeset View
Standalone View
Standalone View
source/blender/depsgraph/intern/builder/deg_builder_nodes_layer_collection.cc
| Show First 20 Lines • Show All 71 Lines • ▼ Show 20 Lines | ComponentDepsNode *comp = add_component_node( | ||||
| &scene_->id, | &scene_->id, | ||||
| DEG_NODE_TYPE_LAYER_COLLECTIONS); | DEG_NODE_TYPE_LAYER_COLLECTIONS); | ||||
| add_operation_node(comp, | add_operation_node(comp, | ||||
| function_bind(BKE_layer_eval_layer_collection, | function_bind(BKE_layer_eval_layer_collection, | ||||
| _1, | _1, | ||||
| layer_collection, | layer_collection, | ||||
| state->parent), | state->parent), | ||||
| DEG_OPCODE_SCENE_LAYER_EVAL, | DEG_OPCODE_VIEW_LAYER_EVAL, | ||||
| layer_collection->scene_collection->name, | layer_collection->scene_collection->name, | ||||
| state->index); | state->index); | ||||
| ++state->index; | ++state->index; | ||||
| /* Recurs into nested layer collections. */ | /* Recurs into nested layer collections. */ | ||||
| LayerCollection *parent = state->parent; | LayerCollection *parent = state->parent; | ||||
| state->parent = layer_collection; | state->parent = layer_collection; | ||||
| build_layer_collections(&layer_collection->layer_collections, state); | build_layer_collections(&layer_collection->layer_collections, state); | ||||
| state->parent = parent; | state->parent = parent; | ||||
| } | } | ||||
| void DepsgraphNodeBuilder::build_layer_collections(ListBase *layer_collections, | void DepsgraphNodeBuilder::build_layer_collections(ListBase *layer_collections, | ||||
| LayerCollectionState *state) | LayerCollectionState *state) | ||||
| { | { | ||||
| LINKLIST_FOREACH (LayerCollection *, layer_collection, layer_collections) { | LINKLIST_FOREACH (LayerCollection *, layer_collection, layer_collections) { | ||||
| build_layer_collection(layer_collection, state); | build_layer_collection(layer_collection, state); | ||||
| } | } | ||||
| } | } | ||||
| void DepsgraphNodeBuilder::build_scene_layer_collections( | void DepsgraphNodeBuilder::build_view_layer_collections( | ||||
| SceneLayer *scene_layer) | ViewLayer *view_layer) | ||||
| { | { | ||||
| Scene *scene_cow; | Scene *scene_cow; | ||||
| SceneLayer *scene_layer_cow; | ViewLayer *view_layer_cow; | ||||
| if (DEG_depsgraph_use_copy_on_write()) { | if (DEG_depsgraph_use_copy_on_write()) { | ||||
| /* Make sure we've got ID node, so we can get pointer to CoW datablock. | /* Make sure we've got ID node, so we can get pointer to CoW datablock. | ||||
| */ | */ | ||||
| scene_cow = expand_cow_datablock(scene_); | scene_cow = expand_cow_datablock(scene_); | ||||
| scene_layer_cow = (SceneLayer *)BLI_findstring( | view_layer_cow = (ViewLayer *)BLI_findstring( | ||||
| &scene_cow->render_layers, | &scene_cow->view_layers, | ||||
| scene_layer->name, | view_layer->name, | ||||
| offsetof(SceneLayer, name)); | offsetof(ViewLayer, name)); | ||||
| } | } | ||||
| else { | else { | ||||
| scene_cow = scene_; | scene_cow = scene_; | ||||
| scene_layer_cow = scene_layer; | view_layer_cow = view_layer; | ||||
| } | } | ||||
| LayerCollectionState state; | LayerCollectionState state; | ||||
| state.index = 0; | state.index = 0; | ||||
| ComponentDepsNode *comp = add_component_node( | ComponentDepsNode *comp = add_component_node( | ||||
| &scene_->id, | &scene_->id, | ||||
| DEG_NODE_TYPE_LAYER_COLLECTIONS); | DEG_NODE_TYPE_LAYER_COLLECTIONS); | ||||
| add_operation_node(comp, | add_operation_node(comp, | ||||
| function_bind(BKE_layer_eval_layer_collection_pre, | function_bind(BKE_layer_eval_layer_collection_pre, | ||||
| _1, | _1, | ||||
| scene_cow, | scene_cow, | ||||
| scene_layer_cow), | view_layer_cow), | ||||
| DEG_OPCODE_SCENE_LAYER_INIT, | DEG_OPCODE_VIEW_LAYER_INIT, | ||||
| scene_layer->name); | view_layer->name); | ||||
| add_operation_node(comp, | add_operation_node(comp, | ||||
| function_bind(BKE_layer_eval_layer_collection_post, | function_bind(BKE_layer_eval_layer_collection_post, | ||||
| _1, | _1, | ||||
| scene_layer_cow), | view_layer_cow), | ||||
| DEG_OPCODE_SCENE_LAYER_DONE, | DEG_OPCODE_VIEW_LAYER_DONE, | ||||
| scene_layer->name); | view_layer->name); | ||||
| state.parent = NULL; | state.parent = NULL; | ||||
| build_layer_collections(&scene_layer_cow->layer_collections, &state); | build_layer_collections(&view_layer_cow->layer_collections, &state); | ||||
| } | } | ||||
| } // namespace DEG | } // namespace DEG | ||||