Depsgraph: Simplify some workarounds and make API closer to final
This commit is contained in:
parent
f16199d479
commit
ba1197fe5e
@ -230,7 +230,7 @@ void BKE_scene_allocate_depsgraph_hash(struct Scene *scene);
|
|||||||
void BKE_scene_ensure_depsgraph_hash(struct Scene *scene);
|
void BKE_scene_ensure_depsgraph_hash(struct Scene *scene);
|
||||||
void BKE_scene_free_depsgraph_hash(struct Scene *scene);
|
void BKE_scene_free_depsgraph_hash(struct Scene *scene);
|
||||||
|
|
||||||
struct Depsgraph *BKE_scene_get_depsgraph(struct Scene *scene, struct SceneLayer *scene_layer);
|
struct Depsgraph *BKE_scene_get_depsgraph(struct Scene *scene, struct SceneLayer *scene_layer, bool allocate);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@ -1260,7 +1260,7 @@ Depsgraph *CTX_data_depsgraph(const bContext *C)
|
|||||||
{
|
{
|
||||||
Scene *scene = CTX_data_scene(C);
|
Scene *scene = CTX_data_scene(C);
|
||||||
SceneLayer *scene_layer = CTX_data_scene_layer(C);
|
SceneLayer *scene_layer = CTX_data_scene_layer(C);
|
||||||
return BKE_scene_get_depsgraph(scene, scene_layer);
|
return BKE_scene_get_depsgraph(scene, scene_layer, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CTX_data_eval_ctx(const bContext *C, EvaluationContext *eval_ctx)
|
void CTX_data_eval_ctx(const bContext *C, EvaluationContext *eval_ctx)
|
||||||
|
@ -2453,8 +2453,14 @@ void BKE_scene_free_depsgraph_hash(Scene *scene)
|
|||||||
|
|
||||||
/* Query depsgraph for a specific contexts. */
|
/* Query depsgraph for a specific contexts. */
|
||||||
|
|
||||||
Depsgraph *BKE_scene_get_depsgraph(Scene *scene, SceneLayer *scene_layer)
|
Depsgraph *BKE_scene_get_depsgraph(Scene *scene,
|
||||||
|
SceneLayer *scene_layer,
|
||||||
|
bool allocate)
|
||||||
{
|
{
|
||||||
(void) scene_layer;
|
(void) scene_layer;
|
||||||
return scene->depsgraph_legacy;
|
Depsgraph *depsgraph = scene->depsgraph_legacy;
|
||||||
|
if (depsgraph == NULL && allocate) {
|
||||||
|
scene->depsgraph_legacy = depsgraph = DEG_graph_new();
|
||||||
|
}
|
||||||
|
return depsgraph;
|
||||||
}
|
}
|
||||||
|
@ -3264,11 +3264,7 @@ static ImBuf *seq_render_scene_strip(const SeqRenderData *context, Sequence *seq
|
|||||||
|
|
||||||
/* Get depsgraph and scene layer for the strip. */
|
/* Get depsgraph and scene layer for the strip. */
|
||||||
SceneLayer *scene_layer = BKE_scene_layer_from_scene_get(scene);
|
SceneLayer *scene_layer = BKE_scene_layer_from_scene_get(scene);
|
||||||
Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, scene_layer);
|
Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, scene_layer, true);
|
||||||
/* TODO(sergey): This is a temporary solution. */
|
|
||||||
if (depsgraph == NULL) {
|
|
||||||
scene->depsgraph_legacy = depsgraph = DEG_graph_new();
|
|
||||||
}
|
|
||||||
|
|
||||||
orig_data.scemode = scene->r.scemode;
|
orig_data.scemode = scene->r.scemode;
|
||||||
orig_data.cfra = scene->r.cfra;
|
orig_data.cfra = scene->r.cfra;
|
||||||
|
@ -275,7 +275,10 @@ void DEG_relations_tag_update(Main *bmain)
|
|||||||
DEG_DEBUG_PRINTF("%s: Tagging relations for update.\n", __func__);
|
DEG_DEBUG_PRINTF("%s: Tagging relations for update.\n", __func__);
|
||||||
LINKLIST_FOREACH(Scene *, scene, &bmain->scene) {
|
LINKLIST_FOREACH(Scene *, scene, &bmain->scene) {
|
||||||
LINKLIST_FOREACH(SceneLayer *, scene_layer, &scene->render_layers) {
|
LINKLIST_FOREACH(SceneLayer *, scene_layer, &scene->render_layers) {
|
||||||
Depsgraph *depsgraph = (Depsgraph *)BKE_scene_get_depsgraph(scene, scene_layer);
|
Depsgraph *depsgraph =
|
||||||
|
(Depsgraph *)BKE_scene_get_depsgraph(scene,
|
||||||
|
scene_layer,
|
||||||
|
false);
|
||||||
if (depsgraph != NULL) {
|
if (depsgraph != NULL) {
|
||||||
DEG_graph_tag_relations_update(depsgraph);
|
DEG_graph_tag_relations_update(depsgraph);
|
||||||
}
|
}
|
||||||
|
@ -85,7 +85,7 @@ void DEG_evaluation_context_init_from_scene(EvaluationContext *eval_ctx,
|
|||||||
eEvaluationMode mode)
|
eEvaluationMode mode)
|
||||||
{
|
{
|
||||||
DEG_evaluation_context_init(eval_ctx, mode);
|
DEG_evaluation_context_init(eval_ctx, mode);
|
||||||
eval_ctx->depsgraph = BKE_scene_get_depsgraph(scene, scene_layer);
|
eval_ctx->depsgraph = BKE_scene_get_depsgraph(scene, scene_layer, false);
|
||||||
eval_ctx->scene_layer = scene_layer;
|
eval_ctx->scene_layer = scene_layer;
|
||||||
eval_ctx->engine = engine;
|
eval_ctx->engine = engine;
|
||||||
eval_ctx->ctime = BKE_scene_frame_get(scene);
|
eval_ctx->ctime = BKE_scene_frame_get(scene);
|
||||||
|
@ -353,7 +353,10 @@ void deg_id_tag_update(Main *bmain, ID *id, int flag)
|
|||||||
lib_id_recalc_tag_flag(bmain, id, flag);
|
lib_id_recalc_tag_flag(bmain, id, flag);
|
||||||
LINKLIST_FOREACH(Scene *, scene, &bmain->scene) {
|
LINKLIST_FOREACH(Scene *, scene, &bmain->scene) {
|
||||||
LINKLIST_FOREACH(SceneLayer *, scene_layer, &scene->render_layers) {
|
LINKLIST_FOREACH(SceneLayer *, scene_layer, &scene->render_layers) {
|
||||||
Depsgraph *depsgraph = (Depsgraph *)BKE_scene_get_depsgraph(scene, scene_layer);
|
Depsgraph *depsgraph =
|
||||||
|
(Depsgraph *)BKE_scene_get_depsgraph(scene,
|
||||||
|
scene_layer,
|
||||||
|
false);
|
||||||
if (depsgraph != NULL) {
|
if (depsgraph != NULL) {
|
||||||
deg_graph_id_tag_update(bmain, depsgraph, id, flag);
|
deg_graph_id_tag_update(bmain, depsgraph, id, flag);
|
||||||
}
|
}
|
||||||
@ -461,7 +464,10 @@ void DEG_on_visible_update(Main *bmain, const bool UNUSED(do_time))
|
|||||||
{
|
{
|
||||||
LINKLIST_FOREACH(Scene *, scene, &bmain->scene) {
|
LINKLIST_FOREACH(Scene *, scene, &bmain->scene) {
|
||||||
LINKLIST_FOREACH(SceneLayer *, scene_layer, &scene->render_layers) {
|
LINKLIST_FOREACH(SceneLayer *, scene_layer, &scene->render_layers) {
|
||||||
Depsgraph *depsgraph = (Depsgraph *)BKE_scene_get_depsgraph(scene, scene_layer);
|
Depsgraph *depsgraph =
|
||||||
|
(Depsgraph *)BKE_scene_get_depsgraph(scene,
|
||||||
|
scene_layer,
|
||||||
|
false);
|
||||||
if (depsgraph != NULL) {
|
if (depsgraph != NULL) {
|
||||||
DEG_graph_on_visible_update(bmain, depsgraph);
|
DEG_graph_on_visible_update(bmain, depsgraph);
|
||||||
}
|
}
|
||||||
|
@ -1762,7 +1762,7 @@ static int convert_exec(bContext *C, wmOperator *op)
|
|||||||
DEG_id_tag_update(&base->object->id, OB_RECALC_DATA);
|
DEG_id_tag_update(&base->object->id, OB_RECALC_DATA);
|
||||||
}
|
}
|
||||||
|
|
||||||
Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, sl);
|
Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, sl, true);
|
||||||
uint64_t customdata_mask_prev = scene->customdata_mask;
|
uint64_t customdata_mask_prev = scene->customdata_mask;
|
||||||
scene->customdata_mask |= CD_MASK_MESH;
|
scene->customdata_mask |= CD_MASK_MESH;
|
||||||
BKE_scene_graph_update_tagged(bmain->eval_ctx, depsgraph, bmain, scene);
|
BKE_scene_graph_update_tagged(bmain->eval_ctx, depsgraph, bmain, scene);
|
||||||
|
@ -604,11 +604,7 @@ static Scene *preview_prepare_scene(Main *bmain, Scene *scene, ID *id, int id_ty
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Depsgraph *depsgraph = BKE_scene_get_depsgraph(sce, scene_layer);
|
Depsgraph *depsgraph = BKE_scene_get_depsgraph(sce, scene_layer, true);
|
||||||
/* TODO(sergey): This is a temporary solution. */
|
|
||||||
if (depsgraph == NULL) {
|
|
||||||
sce->depsgraph_legacy = depsgraph = DEG_graph_new();
|
|
||||||
}
|
|
||||||
/* TODO(sergey): Use proper flag for tagging here. */
|
/* TODO(sergey): Use proper flag for tagging here. */
|
||||||
DEG_graph_id_tag_update(pr_main, depsgraph, &sce->id, 0);
|
DEG_graph_id_tag_update(pr_main, depsgraph, &sce->id, 0);
|
||||||
DEG_relations_tag_update(pr_main);
|
DEG_relations_tag_update(pr_main);
|
||||||
|
@ -124,11 +124,7 @@ void ED_scene_changed_update(Main *bmain, bContext *C, Scene *scene_new, const b
|
|||||||
* but workspace should remember the last one set. Could store render-layer
|
* but workspace should remember the last one set. Could store render-layer
|
||||||
* per window-workspace combination (using WorkSpaceDataRelation) */
|
* per window-workspace combination (using WorkSpaceDataRelation) */
|
||||||
SceneLayer *layer_new = BLI_findlink(&scene_new->render_layers, scene_new->active_layer);
|
SceneLayer *layer_new = BLI_findlink(&scene_new->render_layers, scene_new->active_layer);
|
||||||
Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene_new, layer_new);
|
Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene_new, layer_new, true);
|
||||||
/* TODO(sergey): This is a temporary solution. */
|
|
||||||
if (depsgraph == NULL) {
|
|
||||||
scene_new->depsgraph_legacy = depsgraph = DEG_graph_new();
|
|
||||||
}
|
|
||||||
|
|
||||||
CTX_data_scene_set(C, scene_new);
|
CTX_data_scene_set(C, scene_new);
|
||||||
BKE_workspace_render_layer_set(CTX_wm_workspace(C), layer_new);
|
BKE_workspace_render_layer_set(CTX_wm_workspace(C), layer_new);
|
||||||
|
@ -2057,7 +2057,8 @@ void ED_view3d_draw_offscreen(
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* XXX, should take depsgraph as arg */
|
/* XXX, should take depsgraph as arg */
|
||||||
Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, scene_layer);
|
Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, scene_layer, false);
|
||||||
|
BLI_assert(depsgraph != NULL);
|
||||||
DRW_draw_render_loop_offscreen(depsgraph, eval_ctx->engine, ar, v3d, ofs);
|
DRW_draw_render_loop_offscreen(depsgraph, eval_ctx->engine, ar, v3d, ofs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5540,7 +5540,10 @@ static void set_trans_object_base_flags(TransInfo *t)
|
|||||||
Main *bmain = G.main;
|
Main *bmain = G.main;
|
||||||
SceneLayer *sl = t->scene_layer;
|
SceneLayer *sl = t->scene_layer;
|
||||||
Scene *scene = t->scene;
|
Scene *scene = t->scene;
|
||||||
Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, sl);
|
Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, sl, false);
|
||||||
|
|
||||||
|
/* Transform tool is expected to be executed from an evaluated scene. */
|
||||||
|
BLI_assert(depsgraph != NULL);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* if Base selected and has parent selected:
|
* if Base selected and has parent selected:
|
||||||
@ -5641,9 +5644,12 @@ static int count_proportional_objects(TransInfo *t)
|
|||||||
Main *bmain = G.main;
|
Main *bmain = G.main;
|
||||||
SceneLayer *sl = t->scene_layer;
|
SceneLayer *sl = t->scene_layer;
|
||||||
Scene *scene = t->scene;
|
Scene *scene = t->scene;
|
||||||
Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, sl);
|
Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, sl, false);
|
||||||
Base *base;
|
Base *base;
|
||||||
|
|
||||||
|
/* Transform tool is expected to be executed from an evaluated scene. */
|
||||||
|
BLI_assert(depsgraph != NULL);
|
||||||
|
|
||||||
/* rotations around local centers are allowed to propagate, so we take all objects */
|
/* rotations around local centers are allowed to propagate, so we take all objects */
|
||||||
if (!((t->around == V3D_AROUND_LOCAL_ORIGINS) &&
|
if (!((t->around == V3D_AROUND_LOCAL_ORIGINS) &&
|
||||||
(t->mode == TFM_ROTATION || t->mode == TFM_TRACKBALL)))
|
(t->mode == TFM_ROTATION || t->mode == TFM_TRACKBALL)))
|
||||||
|
@ -850,7 +850,7 @@ static PointerRNA rna_SceneLayer_depsgraph_get(PointerRNA *ptr)
|
|||||||
{
|
{
|
||||||
Scene *scene = (Scene *)ptr->id.data;
|
Scene *scene = (Scene *)ptr->id.data;
|
||||||
SceneLayer *scene_layer = (SceneLayer *)ptr->data;
|
SceneLayer *scene_layer = (SceneLayer *)ptr->data;
|
||||||
Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, scene_layer);
|
Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, scene_layer, false);
|
||||||
return rna_pointer_inherit_refine(ptr, &RNA_Depsgraph, depsgraph);
|
return rna_pointer_inherit_refine(ptr, &RNA_Depsgraph, depsgraph);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,11 +89,7 @@ static void rna_Scene_frame_set(Scene *scene, Main *bmain, int frame, float subf
|
|||||||
scene_layer != NULL;
|
scene_layer != NULL;
|
||||||
scene_layer = scene_layer->next)
|
scene_layer = scene_layer->next)
|
||||||
{
|
{
|
||||||
Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, scene_layer);
|
Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, scene_layer, true);
|
||||||
/* TODO(sergey): This is a temporary solution. */
|
|
||||||
if (depsgraph == NULL) {
|
|
||||||
scene->depsgraph_legacy = depsgraph = DEG_graph_new();
|
|
||||||
}
|
|
||||||
BKE_scene_graph_update_for_newframe(bmain->eval_ctx, depsgraph, bmain, scene);
|
BKE_scene_graph_update_for_newframe(bmain->eval_ctx, depsgraph, bmain, scene);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -139,11 +135,7 @@ static void rna_Scene_update_tagged(Scene *scene, Main *bmain)
|
|||||||
scene_layer != NULL;
|
scene_layer != NULL;
|
||||||
scene_layer = scene_layer->next)
|
scene_layer = scene_layer->next)
|
||||||
{
|
{
|
||||||
Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, scene_layer);
|
Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, scene_layer, true);
|
||||||
/* TODO(sergey): This is a temporary solution. */
|
|
||||||
if (depsgraph == NULL) {
|
|
||||||
scene->depsgraph_legacy = depsgraph = DEG_graph_new();
|
|
||||||
}
|
|
||||||
BKE_scene_graph_update_tagged(bmain->eval_ctx, depsgraph, bmain, scene);
|
BKE_scene_graph_update_tagged(bmain->eval_ctx, depsgraph, bmain, scene);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3144,7 +3144,7 @@ static void update_physics_cache(Render *re, Scene *scene, SceneLayer *scene_lay
|
|||||||
baker.main = re->main;
|
baker.main = re->main;
|
||||||
baker.scene = scene;
|
baker.scene = scene;
|
||||||
baker.scene_layer = scene_layer;
|
baker.scene_layer = scene_layer;
|
||||||
baker.depsgraph = BKE_scene_get_depsgraph(scene, scene_layer);
|
baker.depsgraph = BKE_scene_get_depsgraph(scene, scene_layer, true);
|
||||||
baker.bake = 0;
|
baker.bake = 0;
|
||||||
baker.render = 1;
|
baker.render = 1;
|
||||||
baker.anim_init = 1;
|
baker.anim_init = 1;
|
||||||
@ -3862,7 +3862,7 @@ void RE_PreviewRender(Render *re, Main *bmain, Scene *sce, ViewRender *view_rend
|
|||||||
re->scene = sce;
|
re->scene = sce;
|
||||||
re->scene_color_manage = BKE_scene_check_color_management_enabled(sce);
|
re->scene_color_manage = BKE_scene_check_color_management_enabled(sce);
|
||||||
re->lay = sce->lay;
|
re->lay = sce->lay;
|
||||||
re->depsgraph = BKE_scene_get_depsgraph(sce, scene_layer);
|
re->depsgraph = BKE_scene_get_depsgraph(sce, scene_layer, false);
|
||||||
re->eval_ctx->scene_layer = scene_layer;
|
re->eval_ctx->scene_layer = scene_layer;
|
||||||
|
|
||||||
camera = RE_GetCamera(re);
|
camera = RE_GetCamera(re);
|
||||||
|
@ -440,13 +440,10 @@ static void render_set_depgraph(bContext *C, Render *re)
|
|||||||
* is NULL for old files, and there is no workspace).
|
* is NULL for old files, and there is no workspace).
|
||||||
*/
|
*/
|
||||||
SceneLayer *scene_layer = scene->render_layers.first;
|
SceneLayer *scene_layer = scene->render_layers.first;
|
||||||
Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, scene_layer);
|
Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, scene_layer, true);
|
||||||
/* TODO(sergey): This is a temporary solution. */
|
DEG_graph_relations_update(depsgraph, bmain, scene);
|
||||||
if (depsgraph == NULL) {
|
DEG_graph_on_visible_update(bmain, depsgraph);
|
||||||
scene->depsgraph_legacy = depsgraph = DEG_graph_new();
|
|
||||||
DEG_graph_build_from_scene(depsgraph, bmain, scene);
|
|
||||||
DEG_graph_on_visible_update(bmain, depsgraph);
|
|
||||||
}
|
|
||||||
RE_SetDepsgraph(re, depsgraph);
|
RE_SetDepsgraph(re, depsgraph);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user