From a6b6689c0ab769bfdf4db932e4afd75ac0d42e10 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Tue, 28 Nov 2017 17:05:52 +0100 Subject: Draw manager: Listen to depsgraph's ID update callbacks This replaces dedicated flag which wasn't clean who sets it and who clears it, and which was also trying to re-implement existing functionality in a way. Flushing is not currently very efficient but there are ways to speed this up a lot, but needs more investigation. --- source/blender/draw/engines/eevee/eevee_engine.c | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) (limited to 'source/blender/draw/engines/eevee/eevee_engine.c') diff --git a/source/blender/draw/engines/eevee/eevee_engine.c b/source/blender/draw/engines/eevee/eevee_engine.c index f059fbe2268..300a10d7b09 100644 --- a/source/blender/draw/engines/eevee/eevee_engine.c +++ b/source/blender/draw/engines/eevee/eevee_engine.c @@ -128,8 +128,6 @@ static void EEVEE_cache_populate(void *vedata, Object *ob) } else { BLI_addtail(&sldata->shadow_casters, BLI_genericNodeN(ob)); - EEVEE_ObjectEngineData *oedata = EEVEE_object_data_get(ob); - oedata->need_update = ((ob->deg_update_flag & DEG_RUNTIME_DATA_UPDATE) != 0); } } } @@ -287,6 +285,26 @@ static void EEVEE_view_update(void *vedata) } } +static void EEVEE_id_update(void *UNUSED(vedata), ID *id) +{ + const ID_Type id_type = GS(id->name); + if (id_type == ID_OB) { + Object *object = (Object *)id; + EEVEE_LightProbeEngineData *ped = EEVEE_lightprobe_data_get(object); + if (ped != NULL) { + ped->need_full_update = true; + } + EEVEE_LampEngineData *led = EEVEE_lamp_data_get(object); + if (led != NULL) { + led->need_update = true; + } + EEVEE_ObjectEngineData *oedata = EEVEE_object_data_get(object); + if (oedata != NULL) { + oedata->need_update = true; + } + } +} + static void EEVEE_engine_free(void) { EEVEE_bloom_free(); @@ -395,6 +413,7 @@ DrawEngineType draw_engine_eevee_type = { &EEVEE_draw_scene, NULL, //&EEVEE_draw_scene &EEVEE_view_update, + &EEVEE_id_update, }; RenderEngineType DRW_engine_viewport_eevee_type = { -- cgit v1.2.3