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-11 13:39:36 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2018-04-12 12:05:18 +0300
commitfac1892e110956c7ed285ef2d7b097d632bcc25e (patch)
tree85c9d33dcdbe1e167e08c452e36064e1dfe6eec8 /source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc
parent9c406b786faea9fee6489f0a1a21cab42a3d5cf3 (diff)
Depsgraph: Bind base by it's index
For the performance we convert object bases list to an array during view layer evaluation. This makes it possible to have very cheap index-based base lookup. The goal of this change is to get rid of base used for function binding, and avoid scene datablock expansion at the depsgraph construction time.
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.cc7
1 files changed, 5 insertions, 2 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 cd9db616bdd..8b770ab81a1 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
@@ -76,6 +76,7 @@ void DepsgraphNodeBuilder::build_view_layer(
add_time_source();
/* Setup currently building context. */
scene_ = scene;
+ view_layer_ = view_layer;
/* Expand Scene Cow datablock to get proper pointers to bases. */
Scene *scene_cow;
ViewLayer *view_layer_cow;
@@ -112,17 +113,19 @@ void DepsgraphNodeBuilder::build_view_layer(
* but object is expected to be an original one. Hence we go into some
* 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)
{
/* object itself */
- build_object(base_cow, base_orig->object, linked_state);
+ build_object(base_index, base_orig->object, linked_state);
base_orig->object->select_color = select_color++;
+ ++base_index;
}
if (scene->camera != NULL) {
- build_object(NULL, scene->camera, DEG_ID_LINKED_INDIRECTLY);
+ build_object(-1, scene->camera, DEG_ID_LINKED_INDIRECTLY);
}
/* Rigidbody. */
if (scene->rigidbody_world != NULL) {