Depsgraph: Bind view layer by index

Makes it a bit slower to evaluate single view layer, but this is does not
happen often, and overall number of layers is not very high.
This commit is contained in:
Sergey Sharybin 2018-04-11 12:36:50 +02:00
parent ca2484e090
commit 9c406b786f
3 changed files with 21 additions and 3 deletions

View File

@ -173,6 +173,10 @@ void BKE_layer_eval_view_layer(const struct EvaluationContext *eval_ctx,
struct ID *owner_id,
struct ViewLayer *view_layer);
void BKE_layer_eval_view_layer_indexed(const struct EvaluationContext *eval_ctx,
struct ID *owner_id,
int view_layer_index);
/* iterators */
void BKE_selected_objects_iterator_begin(BLI_Iterator *iter, void *data_in);

View File

@ -2385,7 +2385,7 @@ static void layer_eval_collections_recurse(const EvaluationContext *eval_ctx,
void BKE_layer_eval_view_layer(const struct EvaluationContext *eval_ctx,
struct ID *owner_id,
struct ViewLayer *view_layer)
ViewLayer *view_layer)
{
layer_eval_layer_collection_pre(owner_id, view_layer);
layer_eval_collections_recurse(eval_ctx,
@ -2394,6 +2394,18 @@ void BKE_layer_eval_view_layer(const struct EvaluationContext *eval_ctx,
layer_eval_layer_collection_post(view_layer);
}
void BKE_layer_eval_view_layer_indexed(const struct EvaluationContext *eval_ctx,
struct ID *owner_id,
int view_layer_index)
{
BLI_assert(GS(owner_id->name) == ID_SCE);
BLI_assert(view_layer_index >= 0);
Scene *scene = (Scene *)owner_id;
ViewLayer *view_layer = BLI_findlink(&scene->view_layers, view_layer_index);
BLI_assert(view_layer != NULL);
BKE_layer_eval_view_layer(eval_ctx, owner_id, view_layer);
}
/**
* Free any static allocated memory.
*/

View File

@ -157,12 +157,14 @@ void DepsgraphNodeBuilder::build_view_layer(
build_movieclip(clip);
}
/* Collections. */
int view_layer_index = BLI_findindex(&scene->view_layers, view_layer);
BLI_assert(view_layer_index != -1);
add_operation_node(&scene->id,
DEG_NODE_TYPE_LAYER_COLLECTIONS,
function_bind(BKE_layer_eval_view_layer,
function_bind(BKE_layer_eval_view_layer_indexed,
_1,
&scene_cow->id,
view_layer_cow),
view_layer_index),
DEG_OPCODE_VIEW_LAYER_EVAL);
/* Parameters evaluation for scene relations mainly. */
add_operation_node(&scene->id,