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:
authorClément Foucault <foucault.clem@gmail.com>2018-02-03 03:50:38 +0300
committerClément Foucault <foucault.clem@gmail.com>2018-02-03 04:19:10 +0300
commit4820c7400fbe8f277d635e0eea25c0c1d829e2ea (patch)
tree95cd6e004d4ea819ed533dc11033c0c97156cac7 /source/blender/draw/engines/eevee/eevee_lightprobes.c
parente530d0ccaa5afaa04153d602d13b98ddb4913627 (diff)
Eevee: Render: Make sure all probes are refreshed before rendering.
Diffstat (limited to 'source/blender/draw/engines/eevee/eevee_lightprobes.c')
-rw-r--r--source/blender/draw/engines/eevee/eevee_lightprobes.c25
1 files changed, 17 insertions, 8 deletions
diff --git a/source/blender/draw/engines/eevee/eevee_lightprobes.c b/source/blender/draw/engines/eevee/eevee_lightprobes.c
index 7403da737dd..ab0b2c7fd29 100644
--- a/source/blender/draw/engines/eevee/eevee_lightprobes.c
+++ b/source/blender/draw/engines/eevee/eevee_lightprobes.c
@@ -1420,7 +1420,7 @@ static void lightprobes_refresh_initialize_grid(EEVEE_ViewLayerData *sldata, EEV
pinfo->grid_initialized = true;
}
-static void lightprobes_refresh_planar(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
+void EEVEE_lightprobes_refresh_planar(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
{
EEVEE_CommonUniformBuffer *common_data = &sldata->common_data;
EEVEE_TextureList *txl = vedata->txl;
@@ -1464,6 +1464,9 @@ static void lightprobes_refresh_planar(EEVEE_ViewLayerData *sldata, EEVEE_Data *
common_data->prb_lod_planar_max = (float)(max_lod);
DRW_stats_group_end();
}
+
+ /* Disable SSR if we cannot read previous frame */
+ common_data->ssr_toggle = vedata->stl->g_data->valid_double_buffer;
}
static void lightprobes_refresh_cube(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
@@ -1497,6 +1500,8 @@ static void lightprobes_refresh_cube(EEVEE_ViewLayerData *sldata, EEVEE_Data *ve
/* Only do one probe per frame */
return;
}
+
+ pinfo->do_cube_update = false;
}
static void lightprobes_refresh_all_no_world(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
@@ -1645,11 +1650,20 @@ static void lightprobes_refresh_all_no_world(EEVEE_ViewLayerData *sldata, EEVEE_
lightprobes_refresh_cube(sldata, vedata);
}
-void EEVEE_lightprobes_refresh(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
+bool EEVEE_lightprobes_all_probes_ready(EEVEE_ViewLayerData *sldata, EEVEE_Data *UNUSED(vedata))
{
EEVEE_LightProbesInfo *pinfo = sldata->probes;
EEVEE_CommonUniformBuffer *common_data = &sldata->common_data;
+ return ((pinfo->do_cube_update == false) &&
+ (pinfo->updated_bounce == pinfo->num_bounce) &&
+ (common_data->prb_num_render_cube == pinfo->num_cube));
+}
+
+void EEVEE_lightprobes_refresh(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
+{
+ EEVEE_CommonUniformBuffer *common_data = &sldata->common_data;
+
/* Disable specular lighting when rendering probes to avoid feedback loops (looks bad). */
common_data->spec_toggle = false;
common_data->ssr_toggle = false;
@@ -1665,7 +1679,7 @@ void EEVEE_lightprobes_refresh(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
if (e_data.update_world) {
lightprobes_refresh_world(sldata, vedata);
}
- else if (pinfo->do_cube_update || (pinfo->updated_bounce < pinfo->num_bounce)) {
+ else if (EEVEE_lightprobes_all_probes_ready(sldata, vedata) == false) {
lightprobes_refresh_all_no_world(sldata, vedata);
}
@@ -1675,11 +1689,6 @@ void EEVEE_lightprobes_refresh(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
common_data->sss_toggle = true;
common_data->ao_dist = tmp_ao_dist;
common_data->ao_settings = tmp_ao_settings;
-
- lightprobes_refresh_planar(sldata, vedata);
-
- /* Disable SSR if we cannot read previous frame */
- common_data->ssr_toggle = vedata->stl->g_data->valid_double_buffer;
}
void EEVEE_lightprobes_free(void)