EEVEE/LookDev: Fix Cache In Quad View

When using LookDev in Quad view the cache was only updated for the first
Q-view. The evaluation data of the last cache was not stored with the
lightprobe textures. As the evaluation data was reused between the
Q-views only the lightprobe textures of the first view was updated.

With this patch the evaluated data is stored amongside the actual
lightprobe textures.

Fix T59046

Reviewed By: fclem

Maniphest Tasks: T59046
This commit is contained in:
Jeroen Bakker 2019-03-19 13:29:22 +01:00
parent b0c6c9f11d
commit 0aca8b0174
Notes: blender-bot 2023-02-14 06:05:22 +01:00
Referenced by issue #59046, LookDev HDRI changes are applied only to one quad in 3D Viewport Quad view
2 changed files with 13 additions and 7 deletions

View File

@ -41,6 +41,7 @@
static void eevee_lookdev_lightcache_delete(EEVEE_Data *vedata)
{
EEVEE_StorageList *stl = vedata->stl;
EEVEE_PrivateData *g_data = stl->g_data;
EEVEE_TextureList *txl = vedata->txl;
MEM_SAFE_FREE(stl->lookdev_lightcache);
@ -48,6 +49,8 @@ static void eevee_lookdev_lightcache_delete(EEVEE_Data *vedata)
MEM_SAFE_FREE(stl->lookdev_cube_data);
DRW_TEXTURE_FREE_SAFE(txl->lookdev_grid_tx);
DRW_TEXTURE_FREE_SAFE(txl->lookdev_cube_tx);
g_data->studiolight_index = -1;
g_data->studiolight_rot_z = 0.0f;
}
void EEVEE_lookdev_cache_init(
@ -57,6 +60,7 @@ void EEVEE_lookdev_cache_init(
{
EEVEE_StorageList *stl = vedata->stl;
EEVEE_TextureList *txl = vedata->txl;
EEVEE_PrivateData *g_data = stl->g_data;
const DRWContextState *draw_ctx = DRW_context_state_get();
View3D *v3d = draw_ctx->v3d;
if (LOOK_DEV_STUDIO_LIGHT_ENABLED(v3d)) {
@ -132,13 +136,12 @@ void EEVEE_lookdev_cache_init(
DRW_shgroup_uniform_texture(*grp, "image", tex);
/* Do we need to recalc the lightprobes? */
if (pinfo &&
((pinfo->studiolight_index != sl->index) ||
(pinfo->studiolight_rot_z != v3d->shading.studiolight_rot_z)))
if (g_data->studiolight_index != sl->index ||
g_data->studiolight_rot_z != v3d->shading.studiolight_rot_z)
{
stl->lookdev_lightcache->flag |= LIGHTCACHE_UPDATE_WORLD;
pinfo->studiolight_index = sl->index;
pinfo->studiolight_rot_z = v3d->shading.studiolight_rot_z;
g_data->studiolight_index = sl->index;
g_data->studiolight_rot_z = v3d->shading.studiolight_rot_z;
}
}
}

View File

@ -486,8 +486,6 @@ typedef struct EEVEE_LightProbesInfo {
float visibility_blur;
float intensity_fac;
int shres;
int studiolight_index;
float studiolight_rot_z;
EEVEE_LightProbeVisTest planar_vis_tests[MAX_PLANAR];
/* UBO Storage : data used by UBO */
EEVEE_LightProbe probe_data[MAX_PROBE];
@ -818,6 +816,11 @@ typedef struct EEVEE_PrivateData {
/* Color Management */
bool use_color_render_settings;
/* LookDev Settings */
int studiolight_index;
float studiolight_rot_z;
} EEVEE_PrivateData; /* Transient data */
/* eevee_data.c */