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:
authorSergey Sharybin <sergey.vfx@gmail.com>2018-04-12 10:47:51 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2018-04-12 12:05:18 +0300
commit15698f99070f4d196dbfbac63d3634019c4d1ca9 (patch)
tree2776a25ee6f91cede1c197add7b0ee3afa8e9a7e /source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc
parent18c7575f93aa73f3a25290a97950d4eb6d37f94c (diff)
Depsgraph: Avoid relations build time scene datablock expansion
Quite straightforward implementation, allows us to remove all the cherry-picking update of specified scene/view layer/collection fields. Makes it possible to use generic function to update scene. The tricky part is that we need to know view layer pointer before the whole evaluation starts. So we actually expand scene at initialization of evaluation. context. This is still a bit of an exceptional case, but at least we still avoid dangerous cherry-picking update.
Diffstat (limited to 'source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc')
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc36
1 files changed, 5 insertions, 31 deletions
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 8b770ab81a1..390619aeeaa 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
@@ -77,35 +77,13 @@ void DepsgraphNodeBuilder::build_view_layer(
/* Setup currently building context. */
scene_ = scene;
view_layer_ = view_layer;
- /* Expand Scene Cow datablock to get proper pointers to bases. */
+ /* Get pointer to a CoW version of scene ID. */
Scene *scene_cow;
- ViewLayer *view_layer_cow;
if (DEG_depsgraph_use_copy_on_write()) {
- /* NOTE: We need to create ID nodes for all objects coming from bases,
- * otherwise remapping will not replace objects with their CoW versions
- * for CoW bases.
- */
- LISTBASE_FOREACH (Base *, base, &view_layer->object_bases) {
- Object *object = base->object;
- add_id_node(&object->id);
- }
- /* Create ID node for nested ID of nodetree as well, otherwise remapping
- * will not work correct either.
- */
- if (scene->nodetree != NULL) {
- add_id_node(&scene->nodetree->id);
- }
- /* Make sure we've got ID node, so we can get pointer to CoW datablock.
- */
- scene_cow = expand_cow_datablock(scene);
- view_layer_cow = (ViewLayer *)BLI_findstring(
- &scene_cow->view_layers,
- view_layer->name,
- offsetof(ViewLayer, name));
+ scene_cow = get_cow_datablock(scene);
}
else {
scene_cow = scene;
- view_layer_cow = view_layer;
}
/* Scene objects. */
int select_color = 1;
@@ -114,14 +92,10 @@ void DepsgraphNodeBuilder::build_view_layer(
* tricks here iterating over the view layer.
*/
int base_index = 0;
- for (Base *base_orig = (Base *)view_layer->object_bases.first,
- *base_cow = (Base *)view_layer_cow->object_bases.first;
- base_orig != NULL;
- base_orig = base_orig->next, base_cow = base_cow->next)
- {
+ LISTBASE_FOREACH(Base *, base, &view_layer->object_bases) {
/* object itself */
- build_object(base_index, base_orig->object, linked_state);
- base_orig->object->select_color = select_color++;
+ build_object(base_index, base->object, linked_state);
+ base->object->select_color = select_color++;
++base_index;
}
if (scene->camera != NULL) {