EEVEE/LookDev: Fix Cache In Quad View
authorJeroen Bakker <j.bakker@atmind.nl>
Tue, 19 Mar 2019 12:29:22 +0000 (13:29 +0100)
committerJeroen Bakker <j.bakker@atmind.nl>
Tue, 19 Mar 2019 12:29:51 +0000 (13:29 +0100)
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

source/blender/draw/engines/eevee/eevee_lookdev.c
source/blender/draw/engines/eevee/eevee_private.h

index 2f89476..b07b203 100644 (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;
                        }
                }
        }
index e0ee689..c9ae245 100644 (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 */