From 0cbf747ffaa64e8e91f7b919d463382aee490169 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Thu, 29 Mar 2018 12:18:07 +0200 Subject: Draw manager: Make evaluation context a part of context state This way we don't have to re-initialize the full evaluation context in every area we need it. --- source/blender/draw/intern/DRW_render.h | 3 +++ source/blender/draw/intern/draw_manager.c | 13 +++++++++++++ 2 files changed, 16 insertions(+) (limited to 'source/blender/draw/intern') diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h index dc2e61b564b..60e855108f9 100644 --- a/source/blender/draw/intern/DRW_render.h +++ b/source/blender/draw/intern/DRW_render.h @@ -57,6 +57,8 @@ #include "RE_engine.h" +#include "DEG_depsgraph.h" + struct rcti; struct bContext; struct GPUFrameBuffer; @@ -504,6 +506,7 @@ typedef struct DRWContextState { struct RenderEngineType *engine_type; + EvaluationContext eval_ctx; struct Depsgraph *depsgraph; eObjectMode object_mode; diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c index 7bfb558e471..282b8048cf3 100644 --- a/source/blender/draw/intern/draw_manager.c +++ b/source/blender/draw/intern/draw_manager.c @@ -346,6 +346,17 @@ static void drw_viewport_cache_resize(void) DRW_instance_data_list_resize(DST.idatalist); } +static void drw_state_eval_ctx_init(DRWManager *dst) +{ + DRWContextState *draw_ctx = &dst->draw_ctx; + DEG_evaluation_context_init_from_scene( + &draw_ctx->eval_ctx, + draw_ctx->scene, + draw_ctx->view_layer, + draw_ctx->engine_type, + draw_ctx->object_mode, + DST.options.is_scene_render ? DAG_EVAL_RENDER : DAG_EVAL_VIEWPORT); +} /* Not a viewport variable, we could split this out. */ static void drw_context_state_init(void) @@ -368,6 +379,8 @@ static void drw_context_state_init(void) else { DST.draw_ctx.object_pose = NULL; } + + drw_state_eval_ctx_init(&DST); } /* It also stores viewport variable to an immutable place: DST -- cgit v1.2.3