Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/draw/engines')
-rw-r--r--source/blender/draw/engines/basic/basic_engine.c1
-rw-r--r--source/blender/draw/engines/clay/clay_engine.c1
-rw-r--r--source/blender/draw/engines/eevee/eevee_data.c1
-rw-r--r--source/blender/draw/engines/eevee/eevee_engine.c23
-rw-r--r--source/blender/draw/engines/eevee/eevee_lightprobes.c4
-rw-r--r--source/blender/draw/engines/eevee/eevee_lights.c4
-rw-r--r--source/blender/draw/engines/eevee/eevee_private.h12
-rw-r--r--source/blender/draw/engines/external/external_engine.c1
8 files changed, 40 insertions, 7 deletions
diff --git a/source/blender/draw/engines/basic/basic_engine.c b/source/blender/draw/engines/basic/basic_engine.c
index 92ffa8a1794..b41420ab95b 100644
--- a/source/blender/draw/engines/basic/basic_engine.c
+++ b/source/blender/draw/engines/basic/basic_engine.c
@@ -263,6 +263,7 @@ DrawEngineType draw_engine_basic_type = {
NULL,
&BASIC_draw_scene,
NULL,
+ NULL,
};
/* Note: currently unused, we may want to register so we can see this when debugging the view. */
diff --git a/source/blender/draw/engines/clay/clay_engine.c b/source/blender/draw/engines/clay/clay_engine.c
index fe81e1e484c..27ae4639e8b 100644
--- a/source/blender/draw/engines/clay/clay_engine.c
+++ b/source/blender/draw/engines/clay/clay_engine.c
@@ -916,6 +916,7 @@ DrawEngineType draw_engine_clay_type = {
NULL,
&CLAY_draw_scene,
NULL,
+ NULL,
};
RenderEngineType DRW_engine_viewport_clay_type = {
diff --git a/source/blender/draw/engines/eevee/eevee_data.c b/source/blender/draw/engines/eevee/eevee_data.c
index 6b95844591d..c105567ddb3 100644
--- a/source/blender/draw/engines/eevee/eevee_data.c
+++ b/source/blender/draw/engines/eevee/eevee_data.c
@@ -109,6 +109,7 @@ EEVEE_LightProbeEngineData *EEVEE_lightprobe_data_get(Object *ob)
if (*pedata == NULL) {
*pedata = MEM_callocN(sizeof(**pedata), "EEVEE_LightProbeEngineData");
+ (*pedata)->need_full_update = true;
(*pedata)->need_update = true;
}
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 = {
diff --git a/source/blender/draw/engines/eevee/eevee_lightprobes.c b/source/blender/draw/engines/eevee/eevee_lightprobes.c
index a58e6e20c58..1441c173a21 100644
--- a/source/blender/draw/engines/eevee/eevee_lightprobes.c
+++ b/source/blender/draw/engines/eevee/eevee_lightprobes.c
@@ -490,7 +490,9 @@ void EEVEE_lightprobes_cache_add(EEVEE_ViewLayerData *sldata, Object *ob)
ped->num_cell = probe->grid_resolution_x * probe->grid_resolution_y * probe->grid_resolution_z;
- if ((ob->deg_update_flag & DEG_RUNTIME_DATA_UPDATE) != 0) {
+ if (ped->need_full_update) {
+ ped->need_full_update = false;
+
ped->need_update = true;
ped->probe_id = 0;
diff --git a/source/blender/draw/engines/eevee/eevee_lights.c b/source/blender/draw/engines/eevee/eevee_lights.c
index e57c5a6db41..7cc3e86384e 100644
--- a/source/blender/draw/engines/eevee/eevee_lights.c
+++ b/source/blender/draw/engines/eevee/eevee_lights.c
@@ -257,10 +257,6 @@ void EEVEE_lights_cache_add(EEVEE_ViewLayerData *sldata, Object *ob)
Lamp *la = (Lamp *)ob->data;
EEVEE_LampEngineData *led = EEVEE_lamp_data_get(ob);
- if ((ob->deg_update_flag & DEG_RUNTIME_DATA_UPDATE) != 0) {
- led->need_update = true;
- }
-
MEM_SAFE_FREE(led->storage);
if (la->mode & (LA_SHAD_BUF | LA_SHAD_RAY)) {
diff --git a/source/blender/draw/engines/eevee/eevee_private.h b/source/blender/draw/engines/eevee/eevee_private.h
index 8e754e71506..281e9e2fce1 100644
--- a/source/blender/draw/engines/eevee/eevee_private.h
+++ b/source/blender/draw/engines/eevee/eevee_private.h
@@ -568,7 +568,19 @@ typedef struct EEVEE_LampEngineData {
} EEVEE_LampEngineData;
typedef struct EEVEE_LightProbeEngineData {
+ /* NOTE: need_full_update is set by dependency graph when the probe or it's
+ * object is updated. This triggers full probe update, including it's
+ * "progressive" GI refresh.
+ *
+ * need_update is always set to truth when need_full_update is tagged, but
+ * might also be forced to be kept truth during GI refresh stages.
+ *
+ * TODO(sergey): Is there a way to avoid two flags here, or at least make
+ * it more clear what's going on here?
+ */
+ bool need_full_update;
bool need_update;
+
bool ready_to_shade;
int updated_cells;
int updated_lvl;
diff --git a/source/blender/draw/engines/external/external_engine.c b/source/blender/draw/engines/external/external_engine.c
index bdf53fd3046..2127dbe1f63 100644
--- a/source/blender/draw/engines/external/external_engine.c
+++ b/source/blender/draw/engines/external/external_engine.c
@@ -217,6 +217,7 @@ DrawEngineType draw_engine_external_type = {
NULL,
&EXTERNAL_draw_scene,
NULL,
+ NULL,
};
/* Note: currently unused, we should not register unless we want to see this when debugging the view. */