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-03-06 04:36:00 +0300
committerClément Foucault <foucault.clem@gmail.com>2018-03-06 18:45:23 +0300
commit4e7d9b7a98452907c19154d12a825dab274253ae (patch)
tree26d93eace0acc94b5383e3e85e0d3e3692ca0a11 /source/blender/draw/engines/eevee/eevee_lightprobes.c
parentf8b63b564de7e9d46a2fcb0fd485d0cea1a98aae (diff)
Eevee: Fix probes not working after a world update.
Diffstat (limited to 'source/blender/draw/engines/eevee/eevee_lightprobes.c')
-rw-r--r--source/blender/draw/engines/eevee/eevee_lightprobes.c23
1 files changed, 11 insertions, 12 deletions
diff --git a/source/blender/draw/engines/eevee/eevee_lightprobes.c b/source/blender/draw/engines/eevee/eevee_lightprobes.c
index 9705ba7d645..4d8c6f90fc5 100644
--- a/source/blender/draw/engines/eevee/eevee_lightprobes.c
+++ b/source/blender/draw/engines/eevee/eevee_lightprobes.c
@@ -428,20 +428,15 @@ void EEVEE_lightprobes_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedat
if (wo->update_flag != 0 || pinfo->prev_world != wo || pinfo->prev_wo_sh_compiled != wo_sh_compiled) {
pinfo->update_world |= PROBE_UPDATE_ALL;
- pinfo->updated_bounce = 0;
- pinfo->grid_initialized = false;
-
pinfo->prev_wo_sh_compiled = wo_sh_compiled;
pinfo->prev_world = wo;
}
wo->update_flag = 0;
}
else if (pinfo->prev_world) {
+ pinfo->update_world |= PROBE_UPDATE_ALL;
pinfo->prev_wo_sh_compiled = false;
pinfo->prev_world = NULL;
- pinfo->update_world |= PROBE_UPDATE_ALL;
- pinfo->updated_bounce = 0;
- pinfo->grid_initialized = false;
}
/* Fallback if shader fails or if not using nodetree. */
@@ -885,6 +880,7 @@ void EEVEE_lightprobes_cache_finish(EEVEE_ViewLayerData *sldata, EEVEE_Data *ved
/* Free textures if number mismatch. */
if (pinfo->num_cube != pinfo->cache_num_cube) {
DRW_TEXTURE_FREE_SAFE(sldata->probe_pool);
+ pinfo->cache_num_cube = pinfo->num_cube;
}
if (pinfo->num_planar != pinfo->cache_num_planar) {
@@ -914,12 +910,12 @@ void EEVEE_lightprobes_cache_finish(EEVEE_ViewLayerData *sldata, EEVEE_Data *ved
if (sldata->probe_filter_fb) {
DRW_framebuffer_texture_attach(sldata->probe_filter_fb, sldata->probe_pool, 0, 0);
}
-
/* Tag probes to refresh */
pinfo->update_world |= PROBE_UPDATE_CUBE;
- common_data->prb_num_render_cube = 0;
- pinfo->cache_num_cube = pinfo->num_cube;
+ }
+ if ((pinfo->update_world & PROBE_UPDATE_CUBE) != 0) {
+ common_data->prb_num_render_cube = 0;
for (int i = 1; (ob = pinfo->probes_cube_ref[i]) && (i < MAX_PROBE); i++) {
EEVEE_LightProbeEngineData *ped = EEVEE_lightprobe_data_ensure(ob);
ped->need_update = true;
@@ -949,11 +945,14 @@ void EEVEE_lightprobes_cache_finish(EEVEE_ViewLayerData *sldata, EEVEE_Data *ved
sldata->irradiance_rt = DRW_texture_create_2D_array(irr_size[0], irr_size[1], irr_size[2],
irradiance_format, DRW_TEX_FILTER, NULL);
}
- common_data->prb_num_render_grid = 0;
- pinfo->updated_bounce = 0;
- pinfo->grid_initialized = false;
+ /* Tag probes to refresh */
pinfo->update_world |= PROBE_UPDATE_GRID;
+ pinfo->grid_initialized = false;
+ }
+ if ((pinfo->update_world & PROBE_UPDATE_GRID) != 0) {
+ common_data->prb_num_render_grid = 0;
+ pinfo->updated_bounce = 0;
for (int i = 1; (ob = pinfo->probes_grid_ref[i]) && (i < MAX_PROBE); i++) {
EEVEE_LightProbeEngineData *ped = EEVEE_lightprobe_data_ensure(ob);
ped->need_update = true;