[Bf-blender-cvs] [0aca8b01743] master: EEVEE/LookDev: Fix Cache In Quad View

Jeroen Bakker noreply at git.blender.org
Tue Mar 19 13:30:31 CET 2019


Commit: 0aca8b017436395fc3af62d6265d16fd6d531f1a
Author: Jeroen Bakker
Date:   Tue Mar 19 13:29:22 2019 +0100
Branches: master
https://developer.blender.org/rB0aca8b017436395fc3af62d6265d16fd6d531f1a

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

===================================================================

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

===================================================================

diff --git a/source/blender/draw/engines/eevee/eevee_lookdev.c b/source/blender/draw/engines/eevee/eevee_lookdev.c
index 2f89476e832..b07b20386a8 100644
--- a/source/blender/draw/engines/eevee/eevee_lookdev.c
+++ b/source/blender/draw/engines/eevee/eevee_lookdev.c
@@ -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;
 			}
 		}
 	}
diff --git a/source/blender/draw/engines/eevee/eevee_private.h b/source/blender/draw/engines/eevee/eevee_private.h
index e0ee689f5df..c9ae245c550 100644
--- a/source/blender/draw/engines/eevee/eevee_private.h
+++ b/source/blender/draw/engines/eevee/eevee_private.h
@@ -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 */



More information about the Bf-blender-cvs mailing list