From e5d4afd5bac71e29ba71ecf091feaa0d70b70260 Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Fri, 23 Sep 2022 12:39:56 +0200 Subject: Depsgraph: generalize passing parameters to depsgraph object iterator This makes it easier to pass more parameters to the iterator in the future. Differential Revision: https://developer.blender.org/D16047 --- .../blender/draw/engines/eevee/eevee_lightcache.c | 14 +++++-- source/blender/draw/intern/draw_manager.c | 49 +++++++++++++++------- 2 files changed, 45 insertions(+), 18 deletions(-) (limited to 'source/blender/draw') diff --git a/source/blender/draw/engines/eevee/eevee_lightcache.c b/source/blender/draw/engines/eevee/eevee_lightcache.c index f9d3d74ffc7..2bf1942ad88 100644 --- a/source/blender/draw/engines/eevee/eevee_lightcache.c +++ b/source/blender/draw/engines/eevee/eevee_lightcache.c @@ -639,7 +639,10 @@ static void eevee_lightbake_count_probes(EEVEE_LightBake *lbake) /* At least one of each for the world */ lbake->grid_len = lbake->cube_len = lbake->total_irr_samples = 1; - DEG_OBJECT_ITER_FOR_RENDER_ENGINE_BEGIN (depsgraph, ob) { + DEGObjectIterSettings deg_iter_settings = {}; + deg_iter_settings.depsgraph = depsgraph; + deg_iter_settings.flags = DEG_OBJECT_ITER_FOR_RENDER_ENGINE_FLAGS; + DEG_OBJECT_ITER_BEGIN (°_iter_settings, ob) { const int ob_visibility = BKE_object_visibility(ob, DAG_EVAL_RENDER); if ((ob_visibility & OB_VISIBLE_SELF) == 0) { continue; @@ -658,7 +661,7 @@ static void eevee_lightbake_count_probes(EEVEE_LightBake *lbake) } } } - DEG_OBJECT_ITER_FOR_RENDER_ENGINE_END; + DEG_OBJECT_ITER_END; } static void eevee_lightbake_create_render_target(EEVEE_LightBake *lbake, int rt_res) @@ -1282,7 +1285,10 @@ static void eevee_lightbake_gather_probes(EEVEE_LightBake *lbake) /* Convert all lightprobes to tight UBO data from all lightprobes in the scene. * This allows a large number of probe to be precomputed (even dupli ones). */ - DEG_OBJECT_ITER_FOR_RENDER_ENGINE_BEGIN (depsgraph, ob) { + DEGObjectIterSettings deg_iter_settings = {}; + deg_iter_settings.depsgraph = depsgraph; + deg_iter_settings.flags = DEG_OBJECT_ITER_FOR_RENDER_ENGINE_FLAGS; + DEG_OBJECT_ITER_BEGIN (°_iter_settings, ob) { const int ob_visibility = BKE_object_visibility(ob, DAG_EVAL_RENDER); if ((ob_visibility & OB_VISIBLE_SELF) == 0) { continue; @@ -1303,7 +1309,7 @@ static void eevee_lightbake_gather_probes(EEVEE_LightBake *lbake) } } } - DEG_OBJECT_ITER_FOR_RENDER_ENGINE_END; + DEG_OBJECT_ITER_END; SORT_PROBE(EEVEE_LightGrid, lbake->grid_prb + 1, diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c index eab79652762..d9d7528f642 100644 --- a/source/blender/draw/intern/draw_manager.c +++ b/source/blender/draw/intern/draw_manager.c @@ -969,10 +969,13 @@ void DRW_cache_free_old_batches(Main *bmain) /* TODO(fclem): This is not optimal since it iter over all dupli instances. * In this case only the source object should be tagged. */ - DEG_OBJECT_ITER_FOR_RENDER_ENGINE_BEGIN (depsgraph, ob) { + DEGObjectIterSettings deg_iter_settings = {}; + deg_iter_settings.depsgraph = depsgraph; + deg_iter_settings.flags = DEG_OBJECT_ITER_FOR_RENDER_ENGINE_FLAGS; + DEG_OBJECT_ITER_BEGIN (°_iter_settings, ob) { DRW_batch_cache_free_old(ob, ctime); } - DEG_OBJECT_ITER_FOR_RENDER_ENGINE_END; + DEG_OBJECT_ITER_END; } } } @@ -1689,7 +1692,10 @@ void DRW_draw_render_loop_ex(struct Depsgraph *depsgraph, if (do_populate_loop) { DST.dupli_origin = NULL; DST.dupli_origin_data = NULL; - DEG_OBJECT_ITER_FOR_RENDER_ENGINE_BEGIN (depsgraph, ob) { + DEGObjectIterSettings deg_iter_settings = {}; + deg_iter_settings.depsgraph = depsgraph; + deg_iter_settings.flags = DEG_OBJECT_ITER_FOR_RENDER_ENGINE_FLAGS; + DEG_OBJECT_ITER_BEGIN (°_iter_settings, ob) { if ((object_type_exclude_viewport & (1 << ob->type)) != 0) { continue; } @@ -1701,7 +1707,7 @@ void DRW_draw_render_loop_ex(struct Depsgraph *depsgraph, drw_duplidata_load(ob); drw_engines_cache_populate(ob); } - DEG_OBJECT_ITER_FOR_RENDER_ENGINE_END; + DEG_OBJECT_ITER_END; } drw_duplidata_free(); @@ -1841,14 +1847,17 @@ bool DRW_render_check_grease_pencil(Depsgraph *depsgraph) return false; } - DEG_OBJECT_ITER_FOR_RENDER_ENGINE_BEGIN (depsgraph, ob) { + DEGObjectIterSettings deg_iter_settings = {}; + deg_iter_settings.depsgraph = depsgraph; + deg_iter_settings.flags = DEG_OBJECT_ITER_FOR_RENDER_ENGINE_FLAGS; + DEG_OBJECT_ITER_BEGIN (°_iter_settings, ob) { if (ob->type == OB_GPENCIL) { if (DRW_object_visibility_in_active_context(ob) & OB_VISIBLE_SELF) { return true; } } } - DEG_OBJECT_ITER_FOR_RENDER_ENGINE_END; + DEG_OBJECT_ITER_END; return false; } @@ -2051,7 +2060,10 @@ void DRW_render_object_iter( 0; DST.dupli_origin = NULL; DST.dupli_origin_data = NULL; - DEG_OBJECT_ITER_FOR_RENDER_ENGINE_BEGIN (depsgraph, ob) { + DEGObjectIterSettings deg_iter_settings = {}; + deg_iter_settings.depsgraph = depsgraph; + deg_iter_settings.flags = DEG_OBJECT_ITER_FOR_RENDER_ENGINE_FLAGS; + DEG_OBJECT_ITER_BEGIN (°_iter_settings, ob) { if ((object_type_exclude_viewport & (1 << ob->type)) == 0) { DST.dupli_parent = data_.dupli_parent; DST.dupli_source = data_.dupli_object_current; @@ -2067,7 +2079,7 @@ void DRW_render_object_iter( } } } - DEG_OBJECT_ITER_FOR_RENDER_ENGINE_END; + DEG_OBJECT_ITER_END; drw_duplidata_free(); drw_task_graph_deinit(); @@ -2195,10 +2207,13 @@ void DRW_draw_render_loop_2d_ex(struct Depsgraph *depsgraph, /* Only iterate over objects when overlay uses object data. */ if (do_populate_loop) { - DEG_OBJECT_ITER_FOR_RENDER_ENGINE_BEGIN (depsgraph, ob) { + DEGObjectIterSettings deg_iter_settings = {}; + deg_iter_settings.depsgraph = depsgraph; + deg_iter_settings.flags = DEG_OBJECT_ITER_FOR_RENDER_ENGINE_FLAGS; + DEG_OBJECT_ITER_BEGIN (°_iter_settings, ob) { drw_engines_cache_populate(ob); } - DEG_OBJECT_ITER_FOR_RENDER_ENGINE_END; + DEG_OBJECT_ITER_END; } drw_engines_cache_finish(); @@ -2479,7 +2494,10 @@ void DRW_draw_select_loop(struct Depsgraph *depsgraph, bool filter_exclude = false; DST.dupli_origin = NULL; DST.dupli_origin_data = NULL; - DEG_OBJECT_ITER_FOR_RENDER_ENGINE_BEGIN (depsgraph, ob) { + DEGObjectIterSettings deg_iter_settings = {}; + deg_iter_settings.depsgraph = depsgraph; + deg_iter_settings.flags = DEG_OBJECT_ITER_FOR_RENDER_ENGINE_FLAGS; + DEG_OBJECT_ITER_BEGIN (°_iter_settings, ob) { if (!BKE_object_is_visible_in_viewport(v3d, ob)) { continue; } @@ -2515,7 +2533,7 @@ void DRW_draw_select_loop(struct Depsgraph *depsgraph, drw_engines_cache_populate(ob); } } - DEG_OBJECT_ITER_FOR_RENDER_ENGINE_END; + DEG_OBJECT_ITER_END; } drw_duplidata_free(); @@ -2641,7 +2659,10 @@ static void drw_draw_depth_loop_impl(struct Depsgraph *depsgraph, const int object_type_exclude_viewport = v3d->object_type_exclude_viewport; DST.dupli_origin = NULL; DST.dupli_origin_data = NULL; - DEG_OBJECT_ITER_FOR_RENDER_ENGINE_BEGIN (DST.draw_ctx.depsgraph, ob) { + DEGObjectIterSettings deg_iter_settings = {}; + deg_iter_settings.depsgraph = DST.draw_ctx.depsgraph; + deg_iter_settings.flags = DEG_OBJECT_ITER_FOR_RENDER_ENGINE_FLAGS; + DEG_OBJECT_ITER_BEGIN (°_iter_settings, ob) { if ((object_type_exclude_viewport & (1 << ob->type)) != 0) { continue; } @@ -2653,7 +2674,7 @@ static void drw_draw_depth_loop_impl(struct Depsgraph *depsgraph, drw_duplidata_load(ob); drw_engines_cache_populate(ob); } - DEG_OBJECT_ITER_FOR_RENDER_ENGINE_END; + DEG_OBJECT_ITER_END; drw_duplidata_free(); drw_engines_cache_finish(); -- cgit v1.2.3